diff --git a/public/platform/Platform.h b/public/platform/Platform.h
index bf6cc0a..4e84817 100644
--- a/public/platform/Platform.h
+++ b/public/platform/Platform.h
@@ -189,9 +189,7 @@
     // DOM Storage --------------------------------------------------
 
     // Return a LocalStorage namespace
-    virtual WebStorageNamespace* createLocalStorageNamespace() { return createLocalStorageNamespace(WebString(), 0); }
-    // FIXME: Remove the argument-taking version once its override is removed from Chromium; the arguments are unused.
-    virtual WebStorageNamespace* createLocalStorageNamespace(const WebString& path, unsigned quota) { return 0; }
+    virtual WebStorageNamespace* createLocalStorageNamespace() { return 0; }
 
 
     // FileSystem ----------------------------------------------------------
@@ -285,6 +283,14 @@
     // discardable.
     virtual WebDiscardableMemory* allocateAndLockDiscardableMemory(size_t bytes) { return 0; }
 
+    // A wrapper for tcmalloc's HeapProfilerStart();
+    virtual void startHeapProfiling(const WebString& /*prefix*/) { }
+    // A wrapper for tcmalloc's HeapProfilerStop();
+    virtual void stopHeapProfiling() { }
+    // A wrapper for tcmalloc's HeapProfilerDump()
+    virtual void dumpHeapProfiling(const WebString& /*reason*/) { }
+    // A wrapper for tcmalloc's GetHeapProfile()
+    virtual WebString getHeapProfile() { return WebString(); }
 
     // Message Ports -------------------------------------------------------
 
diff --git a/public/platform/WebCString.h b/public/platform/WebCString.h
index 81e2065..c80fc59 100644
--- a/public/platform/WebCString.h
+++ b/public/platform/WebCString.h
@@ -36,7 +36,8 @@
 
 #if INSIDE_WEBKIT
 #include <wtf/Forward.h>
-#else
+#endif
+#if !INSIDE_WEBKIT || defined(UNIT_TEST)
 #include <string>
 #endif
 
@@ -105,7 +106,8 @@
         assign(s.data(), s.length());
         return *this;
     }
-
+#endif
+#if !INSIDE_WEBKIT || defined(UNIT_TEST)
     operator std::string() const
     {
         size_t len = length();
diff --git a/public/platform/WebCompositorSupport.h b/public/platform/WebCompositorSupport.h
index 27db83b..5f7d9b8 100644
--- a/public/platform/WebCompositorSupport.h
+++ b/public/platform/WebCompositorSupport.h
@@ -66,9 +66,7 @@
 
     virtual WebContentLayer* createContentLayer(WebContentLayerClient*) { return 0; }
 
-    virtual WebExternalTextureLayer* createExternalTextureLayer(WebExternalTextureLayerClient* = 0) { return 0; }
-
-    virtual WebExternalTextureLayer* createExternalTextureLayerForMailbox(WebExternalTextureLayerClient*) { return 0; }
+    virtual WebExternalTextureLayer* createExternalTextureLayer(WebExternalTextureLayerClient*) { return 0; }
 
     virtual WebImageLayer* createImageLayer() { return 0; }
 
diff --git a/public/platform/WebCryptoAlgorithm.h b/public/platform/WebCryptoAlgorithm.h
index 7703614..73f32b8 100644
--- a/public/platform/WebCryptoAlgorithm.h
+++ b/public/platform/WebCryptoAlgorithm.h
@@ -84,15 +84,15 @@
         return *this;
     }
 
-    WEBKIT_EXPORT WebCryptoAlgorithmId algorithmId() const;
-    WEBKIT_EXPORT const char* algorithmName() const;
+    WEBKIT_EXPORT WebCryptoAlgorithmId id() const;
+    WEBKIT_EXPORT const char* name() const;
 
     WEBKIT_EXPORT WebCryptoAlgorithmParamsType paramsType() const;
 
     // Retrieves the type-specific parameters. The algorithm contains at most 1
     // type of parameters. Retrieving an invalid parameter will return 0.
-    WebCryptoAesCbcParams* aesCbcParams() const;
-    WebCryptoAesKeyGenParams* aesKeyGenParams() const;
+    WEBKIT_EXPORT WebCryptoAesCbcParams* aesCbcParams() const;
+    WEBKIT_EXPORT WebCryptoAesKeyGenParams* aesKeyGenParams() const;
 
 private:
     WEBKIT_EXPORT void assign(const WebCryptoAlgorithm& other);
diff --git a/public/platform/WebCryptoKey.h b/public/platform/WebCryptoKey.h
new file mode 100644
index 0000000..94f437c
--- /dev/null
+++ b/public/platform/WebCryptoKey.h
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2013 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WebCryptoKey_h
+#define WebCryptoKey_h
+
+#include "WebCommon.h"
+#include "WebPrivatePtr.h"
+
+namespace WebKit {
+
+enum WebCryptoKeyType {
+    WebCryptoKeyTypeSecret,
+    WebCryptoKeyTypePublic,
+    WebCryptoKeyTypePrivate,
+};
+
+enum WebCryptoKeyUsage {
+    WebCryptoKeyUsageEncrypt = 1 << 0,
+    WebCryptoKeyUsageDecrypt = 1 << 1,
+    WebCryptoKeyUsageSign = 1 << 2,
+    WebCryptoKeyUsageVerify = 1 << 3,
+    WebCryptoKeyUsageDeriveKey = 1 << 4,
+    WebCryptoKeyUsageWrapKey = 1 << 5,
+    WebCryptoKeyUsageUnwrapKey = 1 << 6,
+#if WEBKIT_IMPLEMENTATION
+    EndOfWebCryptoKeyUsage,
+#endif
+};
+
+// A bitfield of WebCryptoKeyUsage
+typedef int WebCryptoKeyUsageMask;
+
+class WebCryptoAlgorithm;
+class WebCryptoKeyPrivate;
+class WebCryptoKeyHandle;
+
+// The WebCryptoKey represents a key from the Web Crypto API:
+//
+// https://dvcs.w3.org/hg/webcrypto-api/raw-file/tip/spec/Overview.html#key-interface
+//
+// WebCryptoKey is just a reference-counted wrapper that manages the lifetime of
+// a "WebCryptoKeyHandle*".
+//
+// WebCryptoKey is:
+//   * Copiable (cheaply)
+//   * Threadsafe if the embedder's WebCryptoKeyHandle is also threadsafe.
+//
+// The embedder is responsible for creating all WebCryptoKeys, and therefore can
+// safely assume any details regarding the type of the wrapped
+// WebCryptoKeyHandle*.
+//
+// FIXME: Define the interface to use for structured clone.
+//        Cloning across a process boundary will need serialization,
+//        however cloning for in-process workers could just share the same
+//        (threadsafe) handle.
+class WebCryptoKey {
+public:
+    ~WebCryptoKey() { reset(); }
+
+    WebCryptoKey(const WebCryptoKey& other) { assign(other); }
+    WebCryptoKey& operator=(const WebCryptoKey& other)
+    {
+        assign(other);
+        return *this;
+    }
+
+    // For an explanation of these parameters see:
+    // https://dvcs.w3.org/hg/webcrypto-api/raw-file/tip/spec/Overview.html#key-interface-members
+    //
+    // Note that the caller is passing ownership of the WebCryptoKeyHandle*.
+    WEBKIT_EXPORT static WebCryptoKey create(WebCryptoKeyHandle*, WebCryptoKeyType, bool extractable, const WebCryptoAlgorithm&, WebCryptoKeyUsageMask);
+
+    // Returns the opaque key handle that was set by the embedder.
+    //   * Safe to downcast to known type (since embedder creates all the keys)
+    //   * Returned pointer's lifetime is bound to |this|
+    WEBKIT_EXPORT WebCryptoKeyHandle* handle() const;
+
+    WEBKIT_EXPORT WebCryptoKeyType type() const;
+    WEBKIT_EXPORT bool extractable() const;
+    WEBKIT_EXPORT const WebCryptoAlgorithm& algorithm() const;
+    WEBKIT_EXPORT WebCryptoKeyUsageMask usages() const;
+
+private:
+    WebCryptoKey() { }
+    WEBKIT_EXPORT void assign(const WebCryptoKey& other);
+    WEBKIT_EXPORT void reset();
+
+    WebPrivatePtr<WebCryptoKeyPrivate> m_private;
+};
+
+// Base class for the embedder to define its own opaque key handle. The lifetime
+// of this object is controlled by WebCryptoKey using reference counting.
+class WebCryptoKeyHandle {
+public:
+    virtual ~WebCryptoKeyHandle() { }
+};
+
+} // namespace WebKit
+
+#endif
diff --git a/public/platform/WebExternalBitmap.h b/public/platform/WebExternalBitmap.h
new file mode 100644
index 0000000..1470815
--- /dev/null
+++ b/public/platform/WebExternalBitmap.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2013 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WebExternalBitmap_h
+#define WebExternalBitmap_h
+
+#include "WebSize.h"
+
+namespace WebKit {
+
+class WebExternalBitmap {
+public:
+    virtual WebSize size() = 0;
+
+    // Sets the size of the bitmap. This may reallocate the bitmap and
+    // invalidate the pointer returned from pixels if the size changes.
+    virtual void setSize(WebSize) = 0;
+
+    // Returns the pixels for the bitmap. The buffer that's returned will
+    // contain size().width * size().height * 4 bytes and will use Skia's byte
+    // order.
+    virtual uint8* pixels() = 0;
+};
+
+} // namespace WebKit
+
+#endif // WebExternalBitmap_h
diff --git a/public/platform/WebExternalTextureLayer.h b/public/platform/WebExternalTextureLayer.h
index 651ea0e..180b81f 100644
--- a/public/platform/WebExternalTextureLayer.h
+++ b/public/platform/WebExternalTextureLayer.h
@@ -49,27 +49,12 @@
     // Clears texture from the layer.
     virtual void clearTexture() = 0;
 
-    // Sets the texture id that represents the layer, in the namespace of the
-    // compositor context.
-    virtual void setTextureId(unsigned) = 0;
-
-    // Sets whether or not the texture should be flipped in the Y direction when
-    // rendered.
-    virtual void setFlipped(bool) = 0;
-
-    // Sets the rect in UV space of the texture that is mapped to the layer
-    // bounds.
-    virtual void setUVRect(const WebFloatRect&) = 0;
-
     // Sets whether every pixel in this layer is opaque. Defaults to false.
     virtual void setOpaque(bool) = 0;
 
     // Sets whether this layer's texture has premultiplied alpha or not. Defaults to true.
     virtual void setPremultipliedAlpha(bool) = 0;
 
-    // Indicates that the most recently provided texture ID is about to be modified externally.
-    virtual void willModifyTexture() = 0;
-
     // Sets whether this context should be rate limited by the compositor. Rate limiting works by blocking
     // invalidate() and invalidateRect() calls if the compositor is too many frames behind.
     virtual void setRateLimitContext(bool) = 0;
diff --git a/public/platform/WebExternalTextureLayerClient.h b/public/platform/WebExternalTextureLayerClient.h
index 4829600..0337a98 100644
--- a/public/platform/WebExternalTextureLayerClient.h
+++ b/public/platform/WebExternalTextureLayerClient.h
@@ -32,24 +32,17 @@
 namespace WebKit {
 
 class WebGraphicsContext3D;
+class WebExternalBitmap;
 struct WebExternalTextureMailbox;
 
-class WebTextureUpdater {
-public:
-    virtual void appendCopy(unsigned sourceTexture, unsigned destinationTexture, WebSize) = 0;
-
-protected:
-    virtual ~WebTextureUpdater() { }
-};
-
 class WebExternalTextureLayerClient {
 public:
-    virtual unsigned prepareTexture(WebTextureUpdater&) = 0;
     virtual WebGraphicsContext3D* context() = 0;
 
-    // Returns true and provides a mailbox if a new frame is available.
-    // Returns false if no new data is available and the old mailbox is to be reused.
-    virtual bool prepareMailbox(WebExternalTextureMailbox*) = 0;
+    // Returns true and provides a mailbox if a new frame is available. If the WebExternalBitmap
+    // isn't 0, then it should also be filled in with the contents of this frame.
+    // Returns false if no new data is available and the old mailbox and bitmap are to be reused.
+    virtual bool prepareMailbox(WebExternalTextureMailbox*, WebExternalBitmap* = 0) = 0;
 
     // Notifies the client when a mailbox is no longer in use by the compositor and provides
     // a sync point to wait on before the mailbox could be consumes again by the client.
diff --git a/public/platform/WebFileSystem.h b/public/platform/WebFileSystem.h
index 370bc6b..9693591 100644
--- a/public/platform/WebFileSystem.h
+++ b/public/platform/WebFileSystem.h
@@ -119,8 +119,15 @@
 
     // Creates a WebFileWriter that can be used to write to the given file.
     // This is a fast, synchronous call, and should not stat the filesystem.
+    // FIXME: deprecate this after async version of createFileWriter is
+    // implemented.
     virtual WebFileWriter* createFileWriter(const WebURL& path, WebFileWriterClient*) { WEBKIT_ASSERT_NOT_REACHED(); return 0; }
 
+    // Creates a WebFileWriter that can be used to write to the given file.
+    // WebFileSystemCallbacks::didCreateFileWriter() must be called with the created WebFileWriter when the operation is completed successfully.
+    // WebFileSystemCallbacks::didFail() must be called otherwise.
+    virtual void createFileWriter(const WebURL& path, WebFileWriterClient*, WebFileSystemCallbacks*) { WEBKIT_ASSERT_NOT_REACHED(); }
+
     // Creates a snapshot file for a given file specified by |path|. It returns the metadata of the created snapshot file.
     // The returned metadata should include a local platform path to the snapshot image.
     // In local filesystem cases the backend may simply return the metadata of the file itself (as well as readMetadata does), while in
diff --git a/public/platform/WebFileSystemCallbacks.h b/public/platform/WebFileSystemCallbacks.h
index 746621d..fafbe03 100644
--- a/public/platform/WebFileSystemCallbacks.h
+++ b/public/platform/WebFileSystemCallbacks.h
@@ -37,9 +37,10 @@
 
 namespace WebKit {
 
+struct WebFileInfo;
+class WebFileWriter;
 class WebString;
 class WebURL;
-struct WebFileInfo;
 
 class WebFileSystemCallbacks {
 public:
@@ -65,10 +66,19 @@
     // root URL for the FileSystem when the request is accepted.
     virtual void didOpenFileSystem(const WebString& name, const WebURL& rootURL) = 0;
 
+    // Callback for WebFrameClient::createFileWriter. Called with an instance
+    // of WebFileWriter and the target file length. The writer's ownership
+    // is transferred to the callback.
+    virtual void didCreateFileWriter(WebFileWriter* writer, long long length) { WEBKIT_ASSERT_NOT_REACHED(); }
+
     // Called with an error code when a requested operation hasn't been
     // completed.
     virtual void didFail(WebFileError) = 0;
 
+    // Returns true if the caller expects to be blocked until the request
+    // is fullfilled.
+    virtual bool shouldBlockUntilCompletion() const = 0;
+
 protected:
     virtual ~WebFileSystemCallbacks() { }
 };
diff --git a/public/platform/WebGraphicsContext3D.h b/public/platform/WebGraphicsContext3D.h
index a22853b..c866c2b 100644
--- a/public/platform/WebGraphicsContext3D.h
+++ b/public/platform/WebGraphicsContext3D.h
@@ -188,13 +188,6 @@
     // WebGraphicsContext3D implementation.
     virtual void signalSyncPoint(unsigned syncPoint, WebGraphicsSyncPointCallback* callback) { delete callback; }
 
-    // Helper for software compositing path. Reads back the frame buffer into
-    // the memory region pointed to by "pixels" with size "bufferSize". It is
-    // expected that the storage for "pixels" covers (4 * width * height) bytes.
-    // The RGBA channels are packed into "pixels" using SkBitmap's byte
-    // ordering. Returns true on success.
-    virtual bool readBackFramebuffer(unsigned char* pixels, size_t bufferSize, WebGLId framebuffer, int width, int height) = 0;
-
     // Copies the contents of the off-screen render target used by the WebGL
     // context to the corresponding texture used by the compositor.
     virtual void prepareTexture() = 0;
diff --git a/public/platform/WebIDBDatabaseException.h b/public/platform/WebIDBDatabaseException.h
index 5416a5e..c94178e 100644
--- a/public/platform/WebIDBDatabaseException.h
+++ b/public/platform/WebIDBDatabaseException.h
@@ -34,10 +34,10 @@
 namespace WebKit {
 
 enum WebIDBDatabaseException {
-    WebIDBDatabaseExceptionUnknownError = 24,
-    WebIDBDatabaseExceptionConstraintError = 25,
-    WebIDBDatabaseExceptionDataError = 26,
-    WebIDBDatabaseExceptionVersionError = 29,
+    WebIDBDatabaseExceptionUnknownError = 23,
+    WebIDBDatabaseExceptionConstraintError = 24,
+    WebIDBDatabaseExceptionDataError = 25,
+    WebIDBDatabaseExceptionVersionError = 28,
     WebIDBDatabaseExceptionAbortError = 17,
     WebIDBDatabaseExceptionQuotaError = 19,
 };
diff --git a/public/platform/WebIDBFactory.h b/public/platform/WebIDBFactory.h
index f6151f2..6ff3cc1 100644
--- a/public/platform/WebIDBFactory.h
+++ b/public/platform/WebIDBFactory.h
@@ -47,26 +47,9 @@
 public:
     virtual ~WebIDBFactory() { }
 
-    // FIXME: Remove the dataDir-taking version once its override is removed from Chromium; the argument is unused.
-    virtual void getDatabaseNames(WebIDBCallbacks* callbacks, const WebString& databaseIdentifier, const WebString& dataDir) { WEBKIT_ASSERT_NOT_REACHED(); }
-    virtual void getDatabaseNames(WebIDBCallbacks* callbacks, const WebString& databaseIdentifier)
-    {
-        getDatabaseNames(callbacks, databaseIdentifier, WebString());
-    }
-
-    // FIXME: Remove the dataDir-taking version once its override is removed from Chromium; the argument is unused.
-    virtual void open(const WebString& name, long long version, long long transactionId, WebIDBCallbacks* callbacks, WebIDBDatabaseCallbacks* databaseCallbacks, const WebString& databaseIdentifier, const WebString& dataDir) { WEBKIT_ASSERT_NOT_REACHED(); }
-    virtual void open(const WebString& name, long long version, long long transactionId, WebIDBCallbacks* callbacks, WebIDBDatabaseCallbacks* databaseCallbacks, const WebString& databaseIdentifier)
-    {
-        open(name, version, transactionId, callbacks, databaseCallbacks, databaseIdentifier, WebString());
-    }
-
-    // FIXME: Remove the dataDir-taking version once its override is removed from Chromium; the argument is unused.
-    virtual void deleteDatabase(const WebString& name, WebIDBCallbacks* callbacks, const WebString& databaseIdentifier, const WebString& dataDir) { WEBKIT_ASSERT_NOT_REACHED(); }
-    virtual void deleteDatabase(const WebString& name, WebIDBCallbacks* callbacks, const WebString& databaseIdentifier)
-    {
-        deleteDatabase(name, callbacks, databaseIdentifier, WebString());
-    }
+    virtual void getDatabaseNames(WebIDBCallbacks* callbacks, const WebString& databaseIdentifier) { WEBKIT_ASSERT_NOT_REACHED(); }
+    virtual void open(const WebString& name, long long version, long long transactionId, WebIDBCallbacks* callbacks, WebIDBDatabaseCallbacks* databaseCallbacks, const WebString& databaseIdentifier) { WEBKIT_ASSERT_NOT_REACHED(); }
+    virtual void deleteDatabase(const WebString& name, WebIDBCallbacks* callbacks, const WebString& databaseIdentifier) { WEBKIT_ASSERT_NOT_REACHED(); }
 };
 
 } // namespace WebKit
diff --git a/public/platform/WebLayerTreeView.h b/public/platform/WebLayerTreeView.h
index 582e525..0c67c2e 100644
--- a/public/platform/WebLayerTreeView.h
+++ b/public/platform/WebLayerTreeView.h
@@ -123,7 +123,7 @@
 
     // Identify key layers to the compositor when using the pinch virtual viewport.
     virtual void registerPinchViewportLayers(
-        const WebLayer* innerViewportClipLayer,
+        const WebLayer* innerViewportContainerLayer,
         const WebLayer* pageScaleLayerLayer,
         const WebLayer* innerViewportScrollLayer,
         const WebLayer* outerViewportScrollLayer,
diff --git a/public/platform/WebMIDIAccessor.h b/public/platform/WebMIDIAccessor.h
index 119f0b9..59eeb30 100644
--- a/public/platform/WebMIDIAccessor.h
+++ b/public/platform/WebMIDIAccessor.h
@@ -39,6 +39,9 @@
 public:
     virtual ~WebMIDIAccessor() { }
 
+    virtual void startSession() { }
+
+    // FIXME: Remove this obsoleted API. Now access permission is handled though the WebMIDIClient API.
     // |access| is set to true if MIDIOptions.sysex is true. Otherwise false.
     virtual void requestAccess(bool access) { }
     // |timeStamp| is measured in milliseconds as Web MIDI spec defines.
diff --git a/public/platform/WebMIDIAccessorClient.h b/public/platform/WebMIDIAccessorClient.h
index a4a590d..b23dd0e 100644
--- a/public/platform/WebMIDIAccessorClient.h
+++ b/public/platform/WebMIDIAccessorClient.h
@@ -40,6 +40,9 @@
     virtual void didAddInputPort(const WebString& id, const WebString& manufacturer, const WebString& name, const WebString& version) = 0;
     virtual void didAddOutputPort(const WebString& id, const WebString& manufacturer, const WebString& name, const WebString& version) = 0;
 
+    virtual void didStartSession() = 0;
+
+    // FIXME: Remove these obsoleted APIs.
     virtual void didAllowAccess() = 0;
     virtual void didBlockAccess() = 0;
 
diff --git a/public/platform/WebVibration.h b/public/platform/WebVibration.h
new file mode 100644
index 0000000..5c61bcd
--- /dev/null
+++ b/public/platform/WebVibration.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2013 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WebVibration_h
+#define WebVibration_h
+
+namespace WebKit {
+
+// Maximum duration of a vibration is 10 seconds.
+const unsigned kVibrationDurationMax = 10000;
+
+} // namespace WebKit
+
+#endif // WebVibration_h
diff --git a/public/testing/WebTestInterfaces.h b/public/testing/WebTestInterfaces.h
index bf4496b..8949a75 100644
--- a/public/testing/WebTestInterfaces.h
+++ b/public/testing/WebTestInterfaces.h
@@ -35,6 +35,7 @@
 #include <memory>
 
 namespace WebKit {
+class WebAudioDevice;
 class WebFrame;
 class WebMediaStreamCenter;
 class WebMediaStreamCenterClient;
@@ -74,6 +75,8 @@
 
     WebKit::WebMIDIAccessor* createMIDIAccessor(WebKit::WebMIDIAccessorClient*);
 
+    WebKit::WebAudioDevice* createAudioDevice(double sampleRate);
+
 #if WEBTESTRUNNER_IMPLEMENTATION
     TestInterfaces* testInterfaces();
 #endif
diff --git a/public/testing/WebTestProxy.h b/public/testing/WebTestProxy.h
index e61e791..ae2af9f 100644
--- a/public/testing/WebTestProxy.h
+++ b/public/testing/WebTestProxy.h
@@ -52,6 +52,7 @@
 
 namespace WebKit {
 class WebAccessibilityObject;
+class WebAudioDevice;
 class WebCachedURLRequest;
 class WebColorChooser;
 class WebColorChooserClient;
@@ -188,8 +189,6 @@
     bool runModalPromptDialog(WebKit::WebFrame*, const WebKit::WebString& message, const WebKit::WebString& defaultValue, WebKit::WebString* actualValue);
     bool runModalBeforeUnloadDialog(WebKit::WebFrame*, const WebKit::WebString&);
 
-    void willPerformClientRedirect(WebKit::WebFrame*, const WebKit::WebURL& from, const WebKit::WebURL& to, double interval, double fire_time);
-    void didCancelClientRedirect(WebKit::WebFrame*);
     void didStartProvisionalLoad(WebKit::WebFrame*);
     void didReceiveServerRedirectForProvisionalLoad(WebKit::WebFrame*);
     bool didFailProvisionalLoad(WebKit::WebFrame*, const WebKit::WebURLError&);
@@ -459,17 +458,6 @@
         WebTestProxyBase::resetInputMethod();
     }
 
-    // WebFrameClient implementation.
-    virtual void willPerformClientRedirect(WebKit::WebFrame* frame, const WebKit::WebURL& from, const WebKit::WebURL& to, double interval, double fireTime)
-    {
-        WebTestProxyBase::willPerformClientRedirect(frame, from, to, interval, fireTime);
-        Base::willPerformClientRedirect(frame, from, to, interval, fireTime);
-    }
-    virtual void didCancelClientRedirect(WebKit::WebFrame* frame)
-    {
-        WebTestProxyBase::didCancelClientRedirect(frame);
-        Base::didCancelClientRedirect(frame);
-    }
     virtual void didStartProvisionalLoad(WebKit::WebFrame* frame)
     {
         WebTestProxyBase::didStartProvisionalLoad(frame);
diff --git a/public/web/WebBindings.h b/public/web/WebBindings.h
index 9ed8577..2ae8f4d 100644
--- a/public/web/WebBindings.h
+++ b/public/web/WebBindings.h
@@ -129,10 +129,10 @@
     // _NPN_UnregisterObjectOwner
     WEBKIT_EXPORT static void unregisterObjectOwner(NPP);
 
-    // _NPN_GetObjectOwner
+    // Temporary dummy implementation of _NPN_GetObjectOwner.
     WEBKIT_EXPORT static NPP getObjectOwner(NPObject*);
 
-    // Remove this when the corresponding call has been removed from Chrome.
+    // _NPN_UnregisterObject
     WEBKIT_EXPORT static void unregisterObject(NPObject*);
 
     // NPN_UTF8FromIdentifier
@@ -180,7 +180,7 @@
     WEBKIT_EXPORT static void popExceptionHandler();
 
     // Conversion utilities to/from V8 native objects and NPVariant wrappers.
-    WEBKIT_EXPORT static void toNPVariant(v8::Local<v8::Value>, NPP owner, NPVariant* result);
+    WEBKIT_EXPORT static void toNPVariant(v8::Local<v8::Value>, NPObject* root, NPVariant* result);
     WEBKIT_EXPORT static v8::Handle<v8::Value> toV8Value(const NPVariant*);
 };
 
diff --git a/public/web/WebCache.h b/public/web/WebCache.h
index 0425f1e..3aecfa4 100644
--- a/public/web/WebCache.h
+++ b/public/web/WebCache.h
@@ -76,10 +76,6 @@
     // only removes resources from live list, w/o releasing cache memory.
     WEBKIT_EXPORT static void clear();
 
-    // Prunes resource cache. Destroys decoded images data and returns
-    // memory to the system.
-    WEBKIT_EXPORT static void prune();
-
     // Gets the usage statistics from the resource cache.
     WEBKIT_EXPORT static void getUsageStats(UsageStats*);
 
diff --git a/public/web/WebDevToolsAgent.h b/public/web/WebDevToolsAgent.h
index 7b07371..b239767 100644
--- a/public/web/WebDevToolsAgent.h
+++ b/public/web/WebDevToolsAgent.h
@@ -67,12 +67,13 @@
 
     virtual void inspectElementAt(const WebPoint&) = 0;
     virtual void setProcessId(long) = 0;
+    virtual void setLayerTreeId(int) = 0;
 
     virtual void didBeginFrame() = 0;
     virtual void didCancelFrame() = 0;
     virtual void willComposite() = 0;
     virtual void didComposite() = 0;
-    
+
     // Exposed for TestRunner.
     virtual void evaluateInWebInspector(long callId, const WebString& script) = 0;
 
diff --git a/public/web/WebFileChooserParams.h b/public/web/WebFileChooserParams.h
index b92e39f..c651a11 100644
--- a/public/web/WebFileChooserParams.h
+++ b/public/web/WebFileChooserParams.h
@@ -65,18 +65,18 @@
     // before opening a file chooser dialog.
     WebVector<WebString> selectedFiles;
     // See http://www.w3.org/TR/html-media-capture/ for the semantics of the
-    // capture attribute. This string will either be empty (meaning the feature
-    // is disabled) or one of the following values:
-    //  - filesystem (default)
-    //  - camera
-    //  - camcorder
-    //  - microphone
+    // capture attribute. If |useMediaCapture| is true, the media types
+    // indicated in |acceptTypes| should be obtained from the device's
+    // environment using a media capture mechanism. |capture| is deprecated and
+    // provided for compatibility reasons.
     WebString capture;
+    bool useMediaCapture;
 
     WebFileChooserParams()
         : multiSelect(false)
         , directory(false)
         , saveAs(false)
+        , useMediaCapture(false)
     {
     }
 };
diff --git a/public/web/WebFrame.h b/public/web/WebFrame.h
index 9db75ad..68b7440 100644
--- a/public/web/WebFrame.h
+++ b/public/web/WebFrame.h
@@ -42,7 +42,6 @@
 #include "WebURLLoaderOptions.h"
 
 struct NPObject;
-struct _NPP;
 
 namespace v8 {
 class Context;
@@ -218,6 +217,8 @@
 
     // Binds a NPObject as a property of this frame's DOMWindow.
     virtual void bindToWindowObject(const WebString& name, NPObject*) = 0;
+    virtual void bindToWindowObject(
+        const WebString& name, NPObject*, void*) = 0;
 
     // Executes script in the context of the current page.
     virtual void executeScript(const WebScriptSource&) = 0;
@@ -231,6 +232,7 @@
     // WebKit::registerExtension for the corresponding specifier.
     //
     // worldID must be > 0 (as 0 represents the main world).
+    // worldID must be < EmbedderWorldIdLimit, high number used internally.
     virtual void executeScriptInIsolatedWorld(
         int worldID, const WebScriptSource* sources, unsigned numSources,
         int extensionGroup) = 0;
@@ -267,6 +269,7 @@
         const WebScriptSource&) = 0;
 
     // worldID must be > 0 (as 0 represents the main world).
+    // worldID must be < EmbedderWorldIdLimit, high number used internally.
     virtual void executeScriptInIsolatedWorld(
         int worldID, const WebScriptSource* sourcesIn, unsigned numSources,
         int extensionGroup, WebVector<v8::Local<v8::Value> >* results) = 0;
diff --git a/public/web/WebFrameClient.h b/public/web/WebFrameClient.h
index 53607d9..e5a6da2 100644
--- a/public/web/WebFrameClient.h
+++ b/public/web/WebFrameClient.h
@@ -162,15 +162,6 @@
     // A form submission is about to occur.
     virtual void willSubmitForm(WebFrame*, const WebFormElement&) { }
 
-    // A client-side redirect will occur.  This may correspond to a <META
-    // refresh> or some script activity.
-    virtual void willPerformClientRedirect(
-        WebFrame*, const WebURL& from, const WebURL& to,
-        double interval, double fireTime) { }
-
-    // A client-side redirect was cancelled.
-    virtual void didCancelClientRedirect(WebFrame*) { }
-
     // A client-side redirect completed.
     virtual void didCompleteClientRedirect(WebFrame*, const WebURL& fromURL) { }
 
@@ -248,6 +239,9 @@
     // An element will request a resource.
     virtual void willRequestResource(WebFrame*, const WebCachedURLRequest&) { }
 
+    // The request is after preconnect is triggered.
+    virtual void willRequestAfterPreconnect(WebFrame*, WebURLRequest&) { }
+
     // A request is about to be sent out, and the client may modify it.  Request
     // is writable, and changes to the URL, for example, will change the request
     // made.  If this request is the result of a redirect, then redirectResponse
diff --git a/public/web/WebInputElement.h b/public/web/WebInputElement.h
index e509b84..f351090 100644
--- a/public/web/WebInputElement.h
+++ b/public/web/WebInputElement.h
@@ -40,7 +40,6 @@
 namespace WebKit {
 
     class WebNodeCollection;
-    class WebTextFieldDecoratorClient;
 
     // Provides readonly access to some properties of a DOM input element node.
     class WebInputElement : public WebFormControlElement {
@@ -113,8 +112,8 @@
         // Returns the direction of the text in this element.
         WEBKIT_EXPORT WebString directionForFormData() const;
 
-        // Return the decoration added by the specified decorator if one exists.
-        WEBKIT_EXPORT WebElement decorationElementFor(WebTextFieldDecoratorClient*);
+        WEBKIT_EXPORT WebElement decorationElementFor(void*);
+        WEBKIT_EXPORT WebElement passwordGeneratorButtonElement() const;
 
 #if WEBKIT_IMPLEMENTATION
         WebInputElement(const WTF::PassRefPtr<WebCore::HTMLInputElement>&);
diff --git a/public/web/WebKit.h b/public/web/WebKit.h
index 0d83122..8e54c1b 100644
--- a/public/web/WebKit.h
+++ b/public/web/WebKit.h
@@ -53,6 +53,15 @@
 // terminated by the time this function returns.
 WEBKIT_EXPORT void shutdown();
 
+// Once shutdown, the Platform passed to initializeWithoutV8 will no longer
+// be accessed. No other WebKit objects should be in use when this function is
+// called. Any background threads created by WebKit are promised to be
+// terminated by the time this function returns.
+//
+// If initializeWithoutV8() was used to initialize WebKit, shutdownWithoutV8
+// must be called to shut it down again.
+WEBKIT_EXPORT void shutdownWithoutV8();
+
 // Alters the rendering of content to conform to a fixed set of rules.
 WEBKIT_EXPORT void setLayoutTestMode(bool);
 WEBKIT_EXPORT bool layoutTestMode();
diff --git a/public/web/WebMIDIClient.h b/public/web/WebMIDIClient.h
new file mode 100644
index 0000000..0db27e4
--- /dev/null
+++ b/public/web/WebMIDIClient.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2013 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WebMIDIClient_h
+#define WebMIDIClient_h
+
+namespace WebKit {
+class WebMIDIPermissionRequest;
+
+class WebMIDIClient {
+public:
+    virtual ~WebMIDIClient() { }
+
+    // Request a permission to use system exclusive messages. Called when MIDIOptions.sysex is true.
+    virtual void requestSysExPermission(const WebMIDIPermissionRequest&) = 0;
+    // Cancel the request since the requesting frame may be moving to a new page.
+    virtual void cancelSysExPermissionRequest(const WebMIDIPermissionRequest&) = 0;
+};
+
+} // namespace WebKit
+
+#endif // WebMIDIClient_h
diff --git a/public/web/WebMIDIPermissionRequest.h b/public/web/WebMIDIPermissionRequest.h
new file mode 100644
index 0000000..e451cd6
--- /dev/null
+++ b/public/web/WebMIDIPermissionRequest.h
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2013 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WebMIDIPermissionRequest_h
+#define WebMIDIPermissionRequest_h
+
+#include "../platform/WebCommon.h"
+#include "../platform/WebPrivatePtr.h"
+
+namespace WebCore {
+class MIDIAccess;
+}
+
+namespace WebKit {
+
+class WebSecurityOrigin;
+
+// WebMIDIPermissionRequest encapsulates a WebCore MIDIAccess object and represents
+// a request from WebCore for permissions.
+// The underlying MIDIAccess object is guaranteed to be valid until the invocation of
+// either WebMIDIPermissionRequest::setIsAllowed (request complete) or
+// WebMIDIClient::cancelPermissionRequest (request canceled).
+class WebMIDIPermissionRequest {
+public:
+    WebMIDIPermissionRequest(const WebMIDIPermissionRequest& o) { assign(o); }
+
+    WEBKIT_EXPORT WebSecurityOrigin securityOrigin() const;
+    WEBKIT_EXPORT void setIsAllowed(bool);
+
+    WEBKIT_EXPORT void assign(const WebMIDIPermissionRequest&);
+    WEBKIT_EXPORT bool equals(const WebMIDIPermissionRequest&) const;
+
+#if WEBKIT_IMPLEMENTATION
+    explicit WebMIDIPermissionRequest(const PassRefPtr<WebCore::MIDIAccess>&);
+    explicit WebMIDIPermissionRequest(WebCore::MIDIAccess*);
+#endif
+
+private:
+    WebPrivatePtr<WebCore::MIDIAccess> m_private;
+};
+
+inline bool operator==(const WebMIDIPermissionRequest& a, const WebMIDIPermissionRequest& b)
+{
+    return a.equals(b);
+}
+
+inline bool operator!=(const WebMIDIPermissionRequest& a, const WebMIDIPermissionRequest& b)
+{
+    return !(a == b);
+}
+
+} // namespace WebKit
+
+#endif // WebMIDIPermissionRequest_h
diff --git a/public/web/WebMediaSourceClient.h b/public/web/WebMediaSourceClient.h
index 4492414..537116c 100644
--- a/public/web/WebMediaSourceClient.h
+++ b/public/web/WebMediaSourceClient.h
@@ -58,6 +58,9 @@
     virtual double duration() = 0;
     virtual void setDuration(double) = 0;
     virtual void endOfStream(EndOfStreamStatus) = 0;
+    // FIXME: Remove default implementation once Chromium changes land.
+    virtual void markEndOfStream(EndOfStreamStatus status) { endOfStream(status); }
+    virtual void unmarkEndOfStream() { };
 };
 
 } // namespace WebKit
diff --git a/public/web/WebNode.h b/public/web/WebNode.h
index 8028804..ccfed25 100644
--- a/public/web/WebNode.h
+++ b/public/web/WebNode.h
@@ -100,7 +100,6 @@
     WEBKIT_EXPORT WebNode nextSibling() const;
     WEBKIT_EXPORT bool hasChildNodes() const;
     WEBKIT_EXPORT WebNodeList childNodes();
-    WEBKIT_EXPORT bool appendChild(const WebNode& child);
     WEBKIT_EXPORT WebString createMarkup() const;
     WEBKIT_EXPORT bool isLink() const;
     WEBKIT_EXPORT bool isTextNode() const;
diff --git a/public/web/WebPasswordGeneratorClient.h b/public/web/WebPasswordGeneratorClient.h
new file mode 100644
index 0000000..50a4130
--- /dev/null
+++ b/public/web/WebPasswordGeneratorClient.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2013 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WebPasswordGeneratorClient_h
+#define WebPasswordGeneratorClient_h
+
+namespace WebKit {
+
+class WebInputElement;
+
+class WebPasswordGeneratorClient {
+public:
+    virtual void openPasswordGenerator(WebInputElement&) = 0;
+
+    virtual ~WebPasswordGeneratorClient() { }
+};
+
+}
+
+#endif // WebPasswordGeneratorClient_h
diff --git a/public/web/WebPlugin.h b/public/web/WebPlugin.h
index 291bab3..daf962a 100644
--- a/public/web/WebPlugin.h
+++ b/public/web/WebPlugin.h
@@ -64,7 +64,7 @@
     virtual WebPluginContainer* container() const { return 0; }
 
     virtual NPObject* scriptableObject() = 0;
-    virtual struct _NPP* pluginNPP() = 0;
+    virtual struct _NPP* pluginNPP() { return 0; }
 
     // Returns true if the form submission value is successfully obtained
     // from the plugin. The value would be associated with the name attribute
diff --git a/public/web/WebRuntimeFeatures.h b/public/web/WebRuntimeFeatures.h
index c46aeb1..58f409f 100644
--- a/public/web/WebRuntimeFeatures.h
+++ b/public/web/WebRuntimeFeatures.h
@@ -45,34 +45,9 @@
     WEBKIT_EXPORT static void enableExperimentalFeatures(bool);
     WEBKIT_EXPORT static void enableTestOnlyFeatures(bool);
 
-    // FIXME: Delete after removing all callers in Content.
-    static void enableFullScreenAPI(bool enable) { enableFullscreen(enable); }
-    static void enableIndexedDatabase(bool enable) { enableIndexedDB(enable); }
-
     WEBKIT_EXPORT static void enableApplicationCache(bool);
     WEBKIT_EXPORT static bool isApplicationCacheEnabled();
 
-    WEBKIT_EXPORT static void enableCanvasPath(bool);
-    WEBKIT_EXPORT static bool isCanvasPathEnabled();
-
-    WEBKIT_EXPORT static void enableCSSCompositing(bool);
-    WEBKIT_EXPORT static bool isCSSCompositingEnabled();
-
-    WEBKIT_EXPORT static void enableCSSExclusions(bool);
-    WEBKIT_EXPORT static bool isCSSExclusionsEnabled();
-
-    WEBKIT_EXPORT static void enableCSSGridLayout(bool);
-    WEBKIT_EXPORT static bool isCSSGridLayoutEnabled();
-
-    WEBKIT_EXPORT static void enableCSSRegions(bool);
-    WEBKIT_EXPORT static bool isCSSRegionsEnabled();
-
-    WEBKIT_EXPORT static void enableCSSTouchAction(bool);
-    WEBKIT_EXPORT static bool isCSSTouchActionEnabled();
-
-    WEBKIT_EXPORT static void enableCustomDOMElements(bool);
-    WEBKIT_EXPORT static bool isCustomDOMElementsEnabled();
-
     WEBKIT_EXPORT static void enableDatabase(bool);
     WEBKIT_EXPORT static bool isDatabaseEnabled();
 
@@ -82,12 +57,6 @@
     WEBKIT_EXPORT static void enableDeviceOrientation(bool);
     WEBKIT_EXPORT static bool isDeviceOrientationEnabled();
 
-    WEBKIT_EXPORT static void enableDialogElement(bool);
-    WEBKIT_EXPORT static bool isDialogElementEnabled();
-
-    WEBKIT_EXPORT static void enableDirectoryUpload(bool);
-    WEBKIT_EXPORT static bool isDirectoryUploadEnabled();
-
     WEBKIT_EXPORT static void enableEncryptedMedia(bool);
     WEBKIT_EXPORT static bool isEncryptedMediaEnabled();
 
@@ -97,21 +66,9 @@
     WEBKIT_EXPORT static void enableExperimentalCanvasFeatures(bool);
     WEBKIT_EXPORT static bool isExperimentalCanvasFeaturesEnabled();
 
-    WEBKIT_EXPORT static void enableExperimentalContentSecurityPolicyFeatures(bool);
-    WEBKIT_EXPORT static bool isExperimentalContentSecurityPolicyFeaturesEnabled();
-
-    WEBKIT_EXPORT static void enableExperimentalShadowDOM(bool);
-    WEBKIT_EXPORT static bool isExperimentalShadowDOMEnabled();
-
-    WEBKIT_EXPORT static void enableExperimentalWebSocket(bool);
-    WEBKIT_EXPORT static bool isExperimentalWebSocketEnabled();
-
     WEBKIT_EXPORT static void enableFileSystem(bool);
     WEBKIT_EXPORT static bool isFileSystemEnabled();
 
-    WEBKIT_EXPORT static void enableFontLoadEvents(bool);
-    WEBKIT_EXPORT static bool isFontLoadEventsEnabled();
-
     WEBKIT_EXPORT static void enableFullscreen(bool);
     WEBKIT_EXPORT static bool isFullscreenEnabled();
 
@@ -121,18 +78,6 @@
     WEBKIT_EXPORT static void enableGeolocation(bool);
     WEBKIT_EXPORT static bool isGeolocationEnabled();
 
-    WEBKIT_EXPORT static void enableIMEAPI(bool);
-    WEBKIT_EXPORT static bool isIMEAPIEnabled();
-
-    WEBKIT_EXPORT static void enableIndexedDB(bool);
-    WEBKIT_EXPORT static bool isIndexedDBEnabled();
-
-    WEBKIT_EXPORT static void enableInputTypeWeek(bool);
-    WEBKIT_EXPORT static bool isInputTypeWeekEnabled();
-
-    WEBKIT_EXPORT static void enableJavaScriptI18NAPI(bool);
-    WEBKIT_EXPORT static bool isJavaScriptI18NAPIEnabled();
-
     WEBKIT_EXPORT static void enableLazyLayout(bool);
     WEBKIT_EXPORT static bool isLazyLayoutEnabled();
 
@@ -142,9 +87,6 @@
     WEBKIT_EXPORT static void enableMediaPlayer(bool);
     WEBKIT_EXPORT static bool isMediaPlayerEnabled();
 
-    WEBKIT_EXPORT static void enableMediaSource(bool);
-    WEBKIT_EXPORT static bool isMediaSourceEnabled();
-
     WEBKIT_EXPORT static void enableWebKitMediaSource(bool);
     WEBKIT_EXPORT static bool isWebKitMediaSourceEnabled();
 
@@ -157,24 +99,15 @@
     WEBKIT_EXPORT static void enablePagePopup(bool);
     WEBKIT_EXPORT static bool isPagePopupEnabled();
 
-    WEBKIT_EXPORT static void enableParseSVGAsHTML(bool);
-    WEBKIT_EXPORT static bool isParseSVGAsHTMLEnabled();
-
     WEBKIT_EXPORT static void enablePeerConnection(bool);
     WEBKIT_EXPORT static bool isPeerConnectionEnabled();
 
-    WEBKIT_EXPORT static void enableQuota(bool);
-    WEBKIT_EXPORT static bool isQuotaEnabled();
-
     WEBKIT_EXPORT static void enableRequestAutocomplete(bool);
     WEBKIT_EXPORT static bool isRequestAutocompleteEnabled();
 
     WEBKIT_EXPORT static void enableScriptedSpeech(bool);
     WEBKIT_EXPORT static bool isScriptedSpeechEnabled();
 
-    WEBKIT_EXPORT static void enableSeamlessIFrames(bool);
-    WEBKIT_EXPORT static bool isSeamlessIFramesEnabled();
-
     WEBKIT_EXPORT static void enableSessionStorage(bool);
     WEBKIT_EXPORT static bool isSessionStorageEnabled();
 
@@ -184,14 +117,11 @@
     WEBKIT_EXPORT static void enableSpeechSynthesis(bool);
     WEBKIT_EXPORT static bool isSpeechSynthesisEnabled();
 
-    WEBKIT_EXPORT static void enableStyleScoped(bool);
-    WEBKIT_EXPORT static bool isStyleScopedEnabled();
-
     WEBKIT_EXPORT static void enableTouch(bool);
     WEBKIT_EXPORT static bool isTouchEnabled();
 
-    WEBKIT_EXPORT static void enableVideoTrack(bool);
-    WEBKIT_EXPORT static bool isVideoTrackEnabled();
+    WEBKIT_EXPORT static void enableWebAnimationsCSS();
+    WEBKIT_EXPORT static void enableWebAnimationsSVG();
 
     WEBKIT_EXPORT static void enableWebAudio(bool);
     WEBKIT_EXPORT static bool isWebAudioEnabled();
@@ -205,9 +135,6 @@
     WEBKIT_EXPORT static void enableDataListElement(bool);
     WEBKIT_EXPORT static bool isDataListElementEnabled();
 
-    WEBKIT_EXPORT static void enableInputTypeColor(bool);
-    WEBKIT_EXPORT static bool isInputTypeColorEnabled();
-
 private:
     WebRuntimeFeatures();
 };
diff --git a/public/web/WebScriptBindings.h b/public/web/WebScriptBindings.h
new file mode 100644
index 0000000..64f98a6
--- /dev/null
+++ b/public/web/WebScriptBindings.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2013 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WebScriptBindings_h
+#define WebScriptBindings_h
+
+#include "../platform/WebCommon.h"
+
+namespace v8 {
+class Isolate;
+class String;
+template <class T> class Local;
+}
+
+namespace WebKit {
+
+class WebString;
+
+class WebScriptBindings {
+public:
+    // Efficiently converts a WebString to a v8::String. The caller must have
+    // a HandleScope to guard the result's lifetime.
+    WEBKIT_EXPORT static v8::Local<v8::String> toV8String(const WebString&, v8::Isolate*);
+};
+
+} // namespace WebKit
+
+#endif
diff --git a/public/web/WebSettings.h b/public/web/WebSettings.h
index 05e9bce..698c8f5 100644
--- a/public/web/WebSettings.h
+++ b/public/web/WebSettings.h
@@ -61,7 +61,8 @@
     virtual void setAcceleratedCompositingForAnimationEnabled(bool) = 0;
     virtual void setAcceleratedCompositingForCanvasEnabled(bool) = 0;
     virtual void setAcceleratedCompositingForFiltersEnabled(bool) = 0;
-    virtual void setAcceleratedCompositingForFixedPositionEnabled(bool)  = 0;
+    virtual void setAcceleratedCompositingForFixedPositionEnabled(bool) = 0;
+    virtual void setAcceleratedCompositingForFixedRootBackgroundEnabled(bool) = 0;
     virtual void setAcceleratedCompositingForOverflowScrollEnabled(bool) = 0;
     virtual void setAcceleratedCompositingForTransitionEnabled(bool)  = 0;
     virtual void setAcceleratedCompositingForPluginsEnabled(bool) = 0;
@@ -107,7 +108,6 @@
     virtual void setFantasyFontFamily(const WebString&, UScriptCode = USCRIPT_COMMON) = 0;
     virtual void setFixedFontFamily(const WebString&, UScriptCode = USCRIPT_COMMON) = 0;
     virtual void setFixedPositionCreatesStackingContext(bool) = 0;
-    virtual void setFontRenderingModeNormal() = 0;
     virtual void setForceCompositingMode(bool) = 0;
     virtual void setFullScreenEnabled(bool) = 0;
     virtual void setGestureTapHighlightEnabled(bool) = 0;
@@ -145,7 +145,6 @@
     virtual void setSerifFontFamily(const WebString&, UScriptCode = USCRIPT_COMMON) = 0;
     virtual void setShouldPrintBackgrounds(bool) = 0;
     virtual void setShouldRespectImageOrientation(bool) = 0;
-    virtual void setShowDebugBorders(bool) = 0;
     virtual void setShowFPSCounter(bool) = 0;
     virtual void setShowPaintRects(bool) = 0;
     virtual void setShrinksStandaloneImagesToFit(bool) = 0;
@@ -165,7 +164,6 @@
     virtual void setTextAreasAreResizable(bool) = 0;
     virtual void setTextAutosizingEnabled(bool) = 0;
     virtual void setTextAutosizingFontScaleFactor(float) = 0;
-    virtual void setTextDirectionSubmenuInclusionBehaviorNeverIncluded() { } // FIXME: Remove once its caller is gone from Chromium
     virtual void setThreadedHTMLParser(bool) = 0;
     virtual void setTouchDragDropEnabled(bool) = 0;
     virtual void setTouchEditingEnabled(bool) = 0;
diff --git a/public/web/WebTextFieldDecoratorClient.h b/public/web/WebTextFieldDecoratorClient.h
index fd615c8..2a11daa 100644
--- a/public/web/WebTextFieldDecoratorClient.h
+++ b/public/web/WebTextFieldDecoratorClient.h
@@ -32,50 +32,28 @@
 #define WebTextFieldDecoratorClient_h
 
 #include "../platform/WebCString.h"
-
-#if WEBKIT_IMPLEMENTATION
-namespace WebCore { class TextFieldDecorator; }
-#endif
+#include "WebPasswordGeneratorClient.h"
 
 namespace WebKit {
 
-class WebInputElement;
-
-class WebTextFieldDecoratorClient {
+// FIXME: This is only here until the Chromium side change removes the usage in
+// favor of WebPasswordGeneratorClient.
+class WebTextFieldDecoratorClient : public WebPasswordGeneratorClient {
 public:
-    // The function should return true if the specified input element should
-    // have a decoration icon. This function is called whenever a text field is
-    // created, and should not take much time.
-    virtual bool shouldAddDecorationTo(const WebInputElement&) = 0;
-    // Returns true if the decoration should be visible when it's created.
-    virtual bool visibleByDefault() = 0;
-
-    // Image resource name for the normal state. The image is stretched to
-    // font-size x font-size square. The function must return an existing
-    // resource name.
-    virtual WebCString imageNameForNormalState() = 0;
-    // Image resource name for the disabled state. If this function returns an
-    // empty string, imageNameForNormalState() is used even for the disabled
-    // state.
-    virtual WebCString imageNameForDisabledState() = 0;
-    // Image resource name for the read only state. If this function returns an
-    // empty string, the image same as imageNameForDisabledState() is used.
-    virtual WebCString imageNameForReadOnlyState() = 0;
-    // Image resource name for when the imaged is being hovered over. If this
-    // function returns an empty string, imageNameForNormalState() is used
-    // instead.
-    virtual WebCString imageNameForHoverState() {return WebCString();}
+    // Delegate to the handleClick method until the Chrome side patch can land.
+    virtual void openPasswordGenerator(WebInputElement& input) { handleClick(input); }
 
     // This is called when the decoration icon is clicked.
     virtual void handleClick(WebInputElement&) = 0;
-    // This is called when the input element loses its renderer. An
-    // implementation of this function should not do something which updates
-    // state of WebKit objects.
-    virtual void willDetach(const WebInputElement&) = 0;
 
-#if WEBKIT_IMPLEMENTATION
-    bool isClientFor(WebCore::TextFieldDecorator*);
-#endif
+    // FIXME: These are never called.
+    virtual void willDetach(const WebInputElement&) = 0;
+    virtual bool visibleByDefault() = 0;
+    virtual WebCString imageNameForReadOnlyState() = 0;
+    virtual WebCString imageNameForDisabledState() = 0;
+    virtual bool shouldAddDecorationTo(const WebInputElement&) = 0;
+    virtual WebCString imageNameForNormalState() = 0;
+    virtual WebCString imageNameForHoverState() = 0;
 
     virtual ~WebTextFieldDecoratorClient() { }
 };
diff --git a/public/web/WebTextInputInfo.h b/public/web/WebTextInputInfo.h
index bde84ee..c1b7fce 100644
--- a/public/web/WebTextInputInfo.h
+++ b/public/web/WebTextInputInfo.h
@@ -51,6 +51,10 @@
     // The end position of the current composition, or -1 if there is none.
     int compositionEnd;
 
+    // The inputmode attribute value of the currently focused input field.
+    // This string is lower-case.
+    WebString inputMode;
+
     WEBKIT_EXPORT bool equals(const WebTextInputInfo&) const;
 
     WebTextInputInfo()
diff --git a/public/web/WebUserGestureToken.h b/public/web/WebUserGestureToken.h
index 9506ef9..8f001f7 100644
--- a/public/web/WebUserGestureToken.h
+++ b/public/web/WebUserGestureToken.h
@@ -54,6 +54,7 @@
     ~WebUserGestureToken() { reset(); }
 
     WEBKIT_EXPORT bool hasGestures() const;
+    WEBKIT_EXPORT void setOutOfProcess();
     bool isNull() const { return m_token.isNull(); }
 
 #if WEBKIT_IMPLEMENTATION
diff --git a/public/web/WebView.h b/public/web/WebView.h
index d6a0080..128aae1 100644
--- a/public/web/WebView.h
+++ b/public/web/WebView.h
@@ -56,7 +56,7 @@
 class WebSettings;
 class WebSpellCheckClient;
 class WebString;
-class WebTextFieldDecoratorClient;
+class WebPasswordGeneratorClient;
 class WebValidationMessageClient;
 class WebViewBenchmarkSupport;
 class WebViewClient;
@@ -108,8 +108,10 @@
     virtual void setPrerendererClient(WebPrerendererClient*) = 0;
     virtual void setSpellCheckClient(WebSpellCheckClient*) = 0;
     virtual void setValidationMessageClient(WebValidationMessageClient*) = 0;
-    virtual void addTextFieldDecoratorClient(WebTextFieldDecoratorClient*) = 0;
 
+    // FIXME: Remove this once pasword_generator stops using it.
+    void addTextFieldDecoratorClient(WebPasswordGeneratorClient* client) { setPasswordGeneratorClient(client); };
+    virtual void setPasswordGeneratorClient(WebPasswordGeneratorClient*) = 0;
 
     // Options -------------------------------------------------------------
 
diff --git a/public/web/WebViewClient.h b/public/web/WebViewClient.h
index d26c424..7056dd6 100644
--- a/public/web/WebViewClient.h
+++ b/public/web/WebViewClient.h
@@ -69,6 +69,7 @@
 class WebImage;
 class WebInputElement;
 class WebKeyboardEvent;
+class WebMIDIClient;
 class WebNode;
 class WebNotificationPresenter;
 class WebRange;
@@ -120,9 +121,7 @@
         const WebPopupMenuInfo&, WebExternalPopupMenuClient*) { return 0; }
 
     // Create a session storage namespace object associated with this WebView.
-    virtual WebStorageNamespace* createSessionStorageNamespace() { return createSessionStorageNamespace(0); }
-    // FIXME: Remove the argument-taking version once its override is removed from Chromium; the argument is unused.
-    virtual WebStorageNamespace* createSessionStorageNamespace(unsigned quota) { return 0; }
+    virtual WebStorageNamespace* createSessionStorageNamespace() { return 0; }
 
 
     // Misc ----------------------------------------------------------------
@@ -374,6 +373,10 @@
 
     virtual WebUserMediaClient* userMediaClient() { return 0; }
 
+    // Web MIDI -------------------------------------------------------------
+
+    virtual WebMIDIClient* webMIDIClient() { return 0; }
+
 
     // Content detection ----------------------------------------------------
 
