diff --git a/public/blink.target.darwin-x86_64.mk b/public/blink.target.darwin-x86_64.mk
new file mode 100644
index 0000000..c0643d7
--- /dev/null
+++ b/public/blink.target.darwin-x86_64.mk
@@ -0,0 +1,42 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_public_blink_gyp
+LOCAL_MODULE_STEM := blink
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_platform_blink_platform_gyp)/third_party_WebKit_Source_platform_blink_platform_gyp.a \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_web_blink_web_gyp)/third_party_WebKit_Source_web_blink_web_gyp.a \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_headers_gyp)/blink_headers.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_minimal_gyp)/blink_minimal.stamp
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_public_blink_gyp
+
+# Alias gyp target name.
+.PHONY: blink
+blink: third_party_WebKit_public_blink_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/public/blink.target.linux-x86_64.mk b/public/blink.target.linux-x86_64.mk
new file mode 100644
index 0000000..c0643d7
--- /dev/null
+++ b/public/blink.target.linux-x86_64.mk
@@ -0,0 +1,42 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_public_blink_gyp
+LOCAL_MODULE_STEM := blink
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_platform_blink_platform_gyp)/third_party_WebKit_Source_platform_blink_platform_gyp.a \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_web_blink_web_gyp)/third_party_WebKit_Source_web_blink_web_gyp.a \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_headers_gyp)/blink_headers.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_minimal_gyp)/blink_minimal.stamp
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_public_blink_gyp
+
+# Alias gyp target name.
+.PHONY: blink
+blink: third_party_WebKit_public_blink_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/public/blink_generate_devtools_grd.target.darwin-x86_64.mk b/public/blink_generate_devtools_grd.target.darwin-x86_64.mk
new file mode 100644
index 0000000..dcbb115
--- /dev/null
+++ b/public/blink_generate_devtools_grd.target.darwin-x86_64.mk
@@ -0,0 +1,39 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_public_blink_generate_devtools_grd_gyp
+LOCAL_MODULE_STEM := blink_generate_devtools_grd
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_generate_devtools_grd_gyp)/generate_devtools_grd.stamp
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_public_blink_generate_devtools_grd_gyp
+
+# Alias gyp target name.
+.PHONY: blink_generate_devtools_grd
+blink_generate_devtools_grd: third_party_WebKit_public_blink_generate_devtools_grd_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/public/blink_generate_devtools_grd.target.linux-x86_64.mk b/public/blink_generate_devtools_grd.target.linux-x86_64.mk
new file mode 100644
index 0000000..dcbb115
--- /dev/null
+++ b/public/blink_generate_devtools_grd.target.linux-x86_64.mk
@@ -0,0 +1,39 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_public_blink_generate_devtools_grd_gyp
+LOCAL_MODULE_STEM := blink_generate_devtools_grd
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_generate_devtools_grd_gyp)/generate_devtools_grd.stamp
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_public_blink_generate_devtools_grd_gyp
+
+# Alias gyp target name.
+.PHONY: blink_generate_devtools_grd
+blink_generate_devtools_grd: third_party_WebKit_public_blink_generate_devtools_grd_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/public/blink_headers.target.darwin-x86_64.mk b/public/blink_headers.target.darwin-x86_64.mk
new file mode 100644
index 0000000..41121dc
--- /dev/null
+++ b/public/blink_headers.target.darwin-x86_64.mk
@@ -0,0 +1,38 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_public_blink_headers_gyp
+LOCAL_MODULE_STEM := blink_headers
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_public_blink_headers_gyp
+
+# Alias gyp target name.
+.PHONY: blink_headers
+blink_headers: third_party_WebKit_public_blink_headers_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/public/blink_headers.target.linux-x86_64.mk b/public/blink_headers.target.linux-x86_64.mk
new file mode 100644
index 0000000..41121dc
--- /dev/null
+++ b/public/blink_headers.target.linux-x86_64.mk
@@ -0,0 +1,38 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_public_blink_headers_gyp
+LOCAL_MODULE_STEM := blink_headers
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_public_blink_headers_gyp
+
+# Alias gyp target name.
+.PHONY: blink_headers
+blink_headers: third_party_WebKit_public_blink_headers_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/public/blink_minimal.target.darwin-x86_64.mk b/public/blink_minimal.target.darwin-x86_64.mk
new file mode 100644
index 0000000..5f316e5
--- /dev/null
+++ b/public/blink_minimal.target.darwin-x86_64.mk
@@ -0,0 +1,39 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_public_blink_minimal_gyp
+LOCAL_MODULE_STEM := blink_minimal
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_platform_blink_common_gyp)/third_party_WebKit_Source_platform_blink_common_gyp.a
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_public_blink_minimal_gyp
+
+# Alias gyp target name.
+.PHONY: blink_minimal
+blink_minimal: third_party_WebKit_public_blink_minimal_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/public/blink_minimal.target.linux-x86_64.mk b/public/blink_minimal.target.linux-x86_64.mk
new file mode 100644
index 0000000..5f316e5
--- /dev/null
+++ b/public/blink_minimal.target.linux-x86_64.mk
@@ -0,0 +1,39 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_public_blink_minimal_gyp
+LOCAL_MODULE_STEM := blink_minimal
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_WebKit_Source_platform_blink_common_gyp)/third_party_WebKit_Source_platform_blink_common_gyp.a
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_public_blink_minimal_gyp
+
+# Alias gyp target name.
+.PHONY: blink_minimal
+blink_minimal: third_party_WebKit_public_blink_minimal_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/public/blink_skia_config.target.darwin-x86_64.mk b/public/blink_skia_config.target.darwin-x86_64.mk
new file mode 100644
index 0000000..743e128
--- /dev/null
+++ b/public/blink_skia_config.target.darwin-x86_64.mk
@@ -0,0 +1,38 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_public_blink_skia_config_gyp
+LOCAL_MODULE_STEM := blink_skia_config
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_public_blink_skia_config_gyp
+
+# Alias gyp target name.
+.PHONY: blink_skia_config
+blink_skia_config: third_party_WebKit_public_blink_skia_config_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/public/blink_skia_config.target.linux-x86_64.mk b/public/blink_skia_config.target.linux-x86_64.mk
new file mode 100644
index 0000000..743e128
--- /dev/null
+++ b/public/blink_skia_config.target.linux-x86_64.mk
@@ -0,0 +1,38 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_public_blink_skia_config_gyp
+LOCAL_MODULE_STEM := blink_skia_config
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_public_blink_skia_config_gyp
+
+# Alias gyp target name.
+.PHONY: blink_skia_config
+blink_skia_config: third_party_WebKit_public_blink_skia_config_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/public/platform/Platform.h b/public/platform/Platform.h
index 165354a..9f5f302 100644
--- a/public/platform/Platform.h
+++ b/public/platform/Platform.h
@@ -38,6 +38,7 @@
 #include "WebAudioDevice.h"
 #include "WebCommon.h"
 #include "WebData.h"
+#include "WebGamepadListener.h"
 #include "WebGamepads.h"
 #include "WebGraphicsContext3D.h"
 #include "WebLocalizedString.h"
@@ -140,12 +141,6 @@
     virtual WebSpeechSynthesizer* createSpeechSynthesizer(WebSpeechSynthesizerClient*) { return 0; }
 
 
-    // Media --------------------------------------------------------------
-
-    // May return null.
-    virtual WebContentDecryptionModule* createContentDecryptionModule(const WebString& keySystem) { return 0; }
-
-
     // Audio --------------------------------------------------------------
 
     virtual double audioHardwareSampleRate() { return 0; }
@@ -216,6 +211,8 @@
 
     virtual void sampleGamepads(WebGamepads& into) { into.length = 0; }
 
+    virtual void setGamepadListener(WebGamepadListener*) { }
+
 
     // History -------------------------------------------------------------
 
@@ -320,8 +317,8 @@
     // Returns a new WebSocketHandle instance.
     virtual WebSocketHandle* createWebSocketHandle() { return 0; }
 
-    // Returns the User-Agent string that should be used for the given URL.
-    virtual WebString userAgent(const WebURL&) { return WebString(); }
+    // Returns the User-Agent string.
+    virtual WebString userAgent() { return WebString(); }
 
     // A suggestion to cache this metadata in association with this URL.
     virtual void cacheMetadata(const WebURL&, double responseTime, const char* data, size_t dataSize) { }
@@ -447,7 +444,6 @@
 
     // Testing -------------------------------------------------------------
 
-#define HAVE_WEBUNITTESTSUPPORT 1
     // Get a pointer to testing support interfaces. Will not be available in production builds.
     virtual WebUnitTestSupport* unitTestSupport() { return 0; }
 
diff --git a/public/platform/WebApplicationCacheHost.h b/public/platform/WebApplicationCacheHost.h
index 7d78cd2..ccd0b6a 100644
--- a/public/platform/WebApplicationCacheHost.h
+++ b/public/platform/WebApplicationCacheHost.h
@@ -70,6 +70,17 @@
         ObsoleteEvent
     };
 
+    enum ErrorReason {
+        ManifestError,
+        SignatureError,
+        ResourceError,
+        ChangedError,
+        AbortError,
+        QuotaError,
+        PolicyError,
+        UnknownError
+    };
+
     virtual ~WebApplicationCacheHost() { }
 
     // Called for every request made within the context.
diff --git a/public/platform/WebApplicationCacheHostClient.h b/public/platform/WebApplicationCacheHostClient.h
index d1fe5c5..6c49d2b 100644
--- a/public/platform/WebApplicationCacheHostClient.h
+++ b/public/platform/WebApplicationCacheHostClient.h
@@ -45,6 +45,7 @@
     // Called to fire events in the scriptable interface.
     virtual void notifyEventListener(WebApplicationCacheHost::EventID) = 0;
     virtual void notifyProgressEventListener(const WebURL&, int num_total, int num_complete) = 0;
+    virtual void notifyErrorEventListener(WebApplicationCacheHost::ErrorReason, const WebURL&, int status, const WebString& message) = 0;
 
 protected:
     // Should not be deleted by the embedder.
@@ -54,4 +55,3 @@
 } // namespace blink
 
 #endif // WebApplicationCacheHostClient_h
-
diff --git a/public/platform/WebAudioSourceProvider.h b/public/platform/WebAudioSourceProvider.h
index af8664f..4384264 100644
--- a/public/platform/WebAudioSourceProvider.h
+++ b/public/platform/WebAudioSourceProvider.h
@@ -34,14 +34,13 @@
 // Abstract interface for a pull-model client.
 class WebAudioSourceProvider {
 public:
+    virtual ~WebAudioSourceProvider() { }
+
     // provideInput() gets called repeatedly to render time-slices of a continuous audio stream.
     virtual void provideInput(const WebVector<float*>& audioData, size_t numberOfFrames) = 0;
 
     // If a client is set, we call it back when the audio format is available.
     virtual void setClient(WebAudioSourceProviderClient*) { };
-
-protected:
-    virtual ~WebAudioSourceProvider() { }
 };
 
 } // WebKit
diff --git a/public/platform/WebCrypto.h b/public/platform/WebCrypto.h
index a14fad6..0ce8185 100644
--- a/public/platform/WebCrypto.h
+++ b/public/platform/WebCrypto.h
@@ -35,6 +35,7 @@
 #include "WebCryptoAlgorithm.h"
 #include "WebCryptoKey.h"
 #include "WebPrivatePtr.h"
+#include "WebVector.h"
 
 namespace WebCore { class CryptoResult; }
 
@@ -94,6 +95,27 @@
     WebPrivatePtr<WebCore::CryptoResult> m_impl;
 };
 
+class WebCryptoDigestor {
+public:
+    virtual ~WebCryptoDigestor() { }
+
+    // consume() will return |true| on the successful addition of data to the
+    // partially generated digest. It will return |false| when that fails. After
+    // a return of |false|, consume() should not be called again (nor should
+    // finish() be called).
+    virtual bool consume(const unsigned char* data, unsigned dataSize) { return false; }
+
+    // finish() will return |true| if the digest has been successfully computed
+    // and put into the result buffer, otherwise it will return |false|. In
+    // either case, neither finish() nor consume() should be called again after
+    // a call to finish(). resultData is valid until the WebCrytpoDigestor
+    // object is destroyed.
+    virtual bool finish(unsigned char*& resultData, unsigned& resultDataSize) { return false; }
+
+protected:
+    WebCryptoDigestor() { }
+};
+
 class WebCrypto {
 public:
     // WebCrypto is the interface for starting one-shot cryptographic
@@ -175,12 +197,65 @@
     virtual void wrapKey(WebCryptoKeyFormat, const WebCryptoKey& key, const WebCryptoKey& wrappingKey, const WebCryptoAlgorithm&, WebCryptoResult result) { result.completeWithError(); }
     virtual void unwrapKey(WebCryptoKeyFormat, const unsigned char* wrappedKey, unsigned wrappedKeySize, const WebCryptoKey&, const WebCryptoAlgorithm& unwrapAlgorithm, const WebCryptoAlgorithm& unwrappedKeyAlgorithm, bool extractable, WebCryptoKeyUsageMask, WebCryptoResult result) { result.completeWithError(); }
 
-    // This is the one exception to the "Completing the request" guarantees
-    // outlined above. digestSynchronous must provide the result into result
-    // synchronously. It must return |true| on successful calculation of the
-    // digest and |false| otherwise. This is useful for Blink internal crypto
-    // and is not part of the WebCrypto standard.
+    // This is the exception to the "Completing the request" guarantees
+    // outlined above. This is useful for Blink internal crypto and is not part
+    // of the WebCrypto standard. digestSynchronous returns |true| if the
+    // digest was successfully computed and put into result. Otherwise, returns
+    // |false|. It must compute the digest or fail synchronously.
+    // createDigestor must provide the result via the WebCryptoDigestor object
+    // synchronously. createDigestor may return 0 if it fails to create a
+    // WebCryptoDigestor. If it succeeds, the WebCryptoDigestor returned by
+    // createDigestor must be freed by the caller.
     virtual bool digestSynchronous(const WebCryptoAlgorithmId algorithmId, const unsigned char* data, unsigned dataSize, WebArrayBuffer& result) { return false; }
+    virtual WebCryptoDigestor* createDigestor(WebCryptoAlgorithmId algorithmId) { return 0; }
+
+    // -----------------------
+    // Structured clone
+    // -----------------------
+    //
+    // deserializeKeyForClone() and serializeKeyForClone() are used for
+    // implementing structured cloning of WebCryptoKey.
+    //
+    // Blink is responsible for saving and restoring all of the attributes of
+    // WebCryptoKey EXCEPT for the actual key data:
+    //
+    // In other words, Blink takes care of serializing:
+    //   * Key usages
+    //   * Key extractability
+    //   * Key algorithm
+    //   * Key type (public, private, secret)
+    //
+    // The embedder is responsible for saving the key data itself.
+    //
+    // Visibility of the serialized key data:
+    //
+    // The serialized key data will NOT be visible to web pages. So if the
+    // serialized format were to include key bytes as plain text, this wouldn't
+    // make it available to web pages.
+    //
+    // Longevity of the key data:
+    //
+    // The serialized key data is intended to be long lived (years) and MUST
+    // be using a stable format. For instance a key might be persisted to
+    // IndexedDB and should be able to be deserialized correctly in the
+    // future.
+    //
+    // Error handling and asynchronous completion:
+    //
+    // Serialization/deserialization must complete synchronously, and will
+    // block the JavaScript thread.
+    //
+    // The only reasons to fail serialization/deserialization are:
+    //   * Key serialization not yet implemented
+    //   * The bytes to deserialize were corrupted
+
+    // Creates a new key given key data which was written using
+    // serializeKeyForClone(). Returns true on success.
+    virtual bool deserializeKeyForClone(const WebCryptoKeyAlgorithm&, WebCryptoKeyType, bool extractable, WebCryptoKeyUsageMask, const unsigned char* keyData, unsigned keyDataSize, WebCryptoKey&) { return false; }
+
+    // Writes the key data into the given WebVector.
+    // Returns true on success.
+    virtual bool serializeKeyForClone(const WebCryptoKey&, WebVector<unsigned char>&) { return false; }
 
 protected:
     virtual ~WebCrypto() { }
diff --git a/public/platform/WebCryptoAlgorithm.h b/public/platform/WebCryptoAlgorithm.h
index 68a8640..d64fc68 100644
--- a/public/platform/WebCryptoAlgorithm.h
+++ b/public/platform/WebCryptoAlgorithm.h
@@ -54,7 +54,7 @@
     WebCryptoAlgorithmIdAesCtr,
     WebCryptoAlgorithmIdAesKw,
 #if INSIDE_BLINK
-    NumberOfWebCryptoAlgorithmId,
+    WebCryptoAlgorithmIdLast = WebCryptoAlgorithmIdAesKw,
 #endif
 };
 
@@ -131,6 +131,9 @@
     BLINK_PLATFORM_EXPORT const WebCryptoRsaHashedImportParams* rsaHashedImportParams() const;
     BLINK_PLATFORM_EXPORT const WebCryptoRsaHashedKeyGenParams* rsaHashedKeyGenParams() const;
 
+    // Returns true if the provided algorithm ID is for a hash (in other words, SHA-*)
+    BLINK_PLATFORM_EXPORT static bool isHash(WebCryptoAlgorithmId);
+
 private:
     BLINK_PLATFORM_EXPORT void assign(const WebCryptoAlgorithm& other);
     BLINK_PLATFORM_EXPORT void reset();
diff --git a/public/platform/WebCryptoKey.h b/public/platform/WebCryptoKey.h
index 8a48e6b..300ed6b 100644
--- a/public/platform/WebCryptoKey.h
+++ b/public/platform/WebCryptoKey.h
@@ -86,11 +86,6 @@
 //
 // If WebCryptoKey "isNull()" then it is invalid to call any of the other
 // methods on it (other than destruction, assignment, or isNull()).
-//
-// 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(); }
diff --git a/public/platform/WebCryptoKeyAlgorithm.h b/public/platform/WebCryptoKeyAlgorithm.h
index d35e715..38e2393 100644
--- a/public/platform/WebCryptoKeyAlgorithm.h
+++ b/public/platform/WebCryptoKeyAlgorithm.h
@@ -56,8 +56,14 @@
     BLINK_PLATFORM_EXPORT WebCryptoKeyAlgorithm(WebCryptoAlgorithmId, PassOwnPtr<WebCryptoKeyAlgorithmParams>);
 #endif
 
+    // FIXME: Delete this in favor of the create*() functions.
     BLINK_PLATFORM_EXPORT static WebCryptoKeyAlgorithm adoptParamsAndCreate(WebCryptoAlgorithmId, WebCryptoKeyAlgorithmParams*);
 
+    BLINK_PLATFORM_EXPORT static WebCryptoKeyAlgorithm createAes(WebCryptoAlgorithmId, unsigned short keyLengthBits);
+    BLINK_PLATFORM_EXPORT static WebCryptoKeyAlgorithm createHmac(WebCryptoAlgorithmId hash, unsigned keyLengthBits);
+    BLINK_PLATFORM_EXPORT static WebCryptoKeyAlgorithm createRsa(WebCryptoAlgorithmId, unsigned modulusLengthBits, const unsigned char* publicExponent, unsigned publicExponentSize);
+    BLINK_PLATFORM_EXPORT static WebCryptoKeyAlgorithm createRsaHashed(WebCryptoAlgorithmId, unsigned modulusLengthBits, const unsigned char* publicExponent, unsigned publicExponentSize, WebCryptoAlgorithmId hash);
+
     ~WebCryptoKeyAlgorithm() { reset(); }
 
     WebCryptoKeyAlgorithm(const WebCryptoKeyAlgorithm& other) { assign(other); }
diff --git a/public/platform/WebGamepadListener.h b/public/platform/WebGamepadListener.h
new file mode 100644
index 0000000..f73049e
--- /dev/null
+++ b/public/platform/WebGamepadListener.h
@@ -0,0 +1,23 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WebGamepadListener_h
+#define WebGamepadListener_h
+
+namespace blink {
+
+class WebGamepad;
+
+class WebGamepadListener {
+public:
+    virtual void didConnectGamepad(unsigned index, const blink::WebGamepad&) = 0;
+    virtual void didDisconnectGamepad(unsigned index, const blink::WebGamepad&) = 0;
+
+protected:
+    virtual ~WebGamepadListener() { }
+};
+
+} // namespace blink
+
+#endif
diff --git a/public/platform/WebGamepads.h b/public/platform/WebGamepads.h
index 03d67a6..093d493 100644
--- a/public/platform/WebGamepads.h
+++ b/public/platform/WebGamepads.h
@@ -30,10 +30,10 @@
 #include "wtf/Assertions.h"
 #endif
 
-namespace blink {
-
 #pragma pack(push, 1)
 
+namespace blink {
+
 // This structure is intentionally POD and fixed size so that it can be stored
 // in shared memory between hardware polling threads and the rest of the
 // browser.
diff --git a/public/platform/WebGestureCurveTarget.h b/public/platform/WebGestureCurveTarget.h
index 5433387..a3c3338 100644
--- a/public/platform/WebGestureCurveTarget.h
+++ b/public/platform/WebGestureCurveTarget.h
@@ -32,9 +32,14 @@
 
 class WebGestureCurveTarget {
 public:
-    virtual void scrollBy(const WebFloatSize& delta) = 0;
+    // TODO(jdduke): Make pure virtual when crrev.com/136173004 lands.
+    virtual bool scrollBy(const WebFloatSize& delta, const WebFloatSize& velocity) { return false; }
 
-    virtual void notifyCurrentFlingVelocity(const WebFloatSize&) { }
+    // TODO(jdduke): Remove when crrev.com/136173004 lands.
+    virtual void scrollBy(const WebFloatSize& delta) { }
+
+    // TODO(jdduke): Remove when crrev.com/136173004 lands.
+    virtual void notifyCurrentFlingVelocity(const WebFloatSize& velocity) { }
 
 protected:
     virtual ~WebGestureCurveTarget() { }
diff --git a/public/platform/WebGraphicsContext3D.h b/public/platform/WebGraphicsContext3D.h
index ae54cc4..6681647 100644
--- a/public/platform/WebGraphicsContext3D.h
+++ b/public/platform/WebGraphicsContext3D.h
@@ -42,16 +42,16 @@
 // WGC3D types match the corresponding GL types as defined in OpenGL ES 2.0
 // header file gl2.h from khronos.org.
 typedef char WGC3Dchar;
-typedef unsigned int WGC3Denum;
+typedef unsigned WGC3Denum;
 typedef unsigned char WGC3Dboolean;
-typedef unsigned int WGC3Dbitfield;
+typedef unsigned WGC3Dbitfield;
 typedef signed char WGC3Dbyte;
 typedef unsigned char WGC3Dubyte;
 typedef short WGC3Dshort;
 typedef unsigned short WGC3Dushort;
 typedef int WGC3Dint;
 typedef int WGC3Dsizei;
-typedef unsigned int WGC3Duint;
+typedef unsigned WGC3Duint;
 typedef float WGC3Dfloat;
 typedef float WGC3Dclampf;
 typedef signed long int WGC3Dintptr;
diff --git a/public/platform/WebMediaPlayerClient.h b/public/platform/WebMediaPlayerClient.h
index 4c6c4e1..92e2c1e 100644
--- a/public/platform/WebMediaPlayerClient.h
+++ b/public/platform/WebMediaPlayerClient.h
@@ -35,7 +35,6 @@
 
 namespace blink {
 
-class WebFrame;
 class WebInbandTextTrack;
 class WebLayer;
 class WebMediaSource;
@@ -69,7 +68,6 @@
     virtual void keyError(const WebString& keySystem, const WebString& sessionId, MediaKeyErrorCode, unsigned short systemCode) = 0;
     virtual void keyMessage(const WebString& keySystem, const WebString& sessionId, const unsigned char* message, unsigned messageLength, const WebURL& defaultURL) = 0;
     virtual void keyNeeded(const WebString& contentType, const unsigned char* initData, unsigned initDataLength) = 0;
-    virtual bool needsWebLayerForVideo() const = 0;
     virtual void setWebLayer(WebLayer*) = 0;
     virtual void addTextTrack(WebInbandTextTrack*) = 0;
     virtual void removeTextTrack(WebInbandTextTrack*) = 0;
diff --git a/public/platform/WebMediaStreamCenter.h b/public/platform/WebMediaStreamCenter.h
index 9746379..3205cbc 100644
--- a/public/platform/WebMediaStreamCenter.h
+++ b/public/platform/WebMediaStreamCenter.h
@@ -34,6 +34,7 @@
 #include "WebVector.h"
 
 namespace blink {
+class WebAudioSourceProvider;
 class WebMediaStream;
 class WebMediaStreamTrack;
 class WebMediaStreamTrackSourcesRequest;
@@ -57,6 +58,9 @@
     virtual void didEnableMediaStreamTrack(const WebMediaStreamTrack&) { }
     virtual void didDisableMediaStreamTrack(const WebMediaStreamTrack&) { }
     virtual bool didStopMediaStreamTrack(const WebMediaStreamTrack&) { return false; }
+
+    // Caller must take the ownership of the returned |WebAudioSourceProvider| object.
+    virtual WebAudioSourceProvider* createWebAudioSourceFromMediaStreamTrack(const WebMediaStreamTrack&) { return 0; }
 };
 
 } // namespace blink
diff --git a/public/platform/WebMessagePortChannel.h b/public/platform/WebMessagePortChannel.h
index 8527187..7f9d75c 100644
--- a/public/platform/WebMessagePortChannel.h
+++ b/public/platform/WebMessagePortChannel.h
@@ -50,6 +50,7 @@
     // WebKit versions of WebCore::MessagePortChannel.
     virtual void entangle(WebMessagePortChannel*) = 0;
     // Callee receives ownership of the passed vector.
+    // FIXME: Blob refs should be passed to maintain ref counts. crbug.com/351753
     virtual void postMessage(const WebString&, WebMessagePortChannelArray*) = 0;
     virtual bool tryGetMessage(WebString*, WebMessagePortChannelArray&) = 0;
 
diff --git a/public/platform/WebServiceWorker.h b/public/platform/WebServiceWorker.h
index 3f42889..890bee7 100644
--- a/public/platform/WebServiceWorker.h
+++ b/public/platform/WebServiceWorker.h
@@ -31,10 +31,22 @@
 #ifndef WebServiceWorker_h
 #define WebServiceWorker_h
 
+#include "WebCommon.h"
+#include "WebMessagePortChannel.h"
+#include "WebVector.h"
+
 namespace blink {
 
-class WebServiceWorker {
+class WebString;
+typedef WebVector<class WebMessagePortChannel*> WebMessagePortChannelArray;
 
+class WebServiceWorker {
+public:
+    virtual ~WebServiceWorker() { }
+
+    // Callee receives ownership of the passed vector.
+    // FIXME: Blob refs should be passed to maintain ref counts. crbug.com/351753
+    virtual void postMessage(const WebString&, WebMessagePortChannelArray*) { BLINK_ASSERT_NOT_REACHED(); }
 };
 
 }
diff --git a/public/platform/WebServiceWorkerEventResult.h b/public/platform/WebServiceWorkerEventResult.h
new file mode 100644
index 0000000..fddfcd0
--- /dev/null
+++ b/public/platform/WebServiceWorkerEventResult.h
@@ -0,0 +1,22 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WebServiceWorkerEventResult_h
+#define WebServiceWorkerEventResult_h
+
+namespace blink {
+
+// Indicates how the service worker handled an event.
+enum WebServiceWorkerEventResult {
+    // The event dispatch completed with no rejections.
+    WebServiceWorkerEventResultCompleted = 0,
+    // The service worker associated the event with a promise that was rejected
+    // (e.g., the promise passed to waitUntil for an install event was rejected).
+    WebServiceWorkerEventResultRejected,
+    WebServiceWorkerEventResultLast = WebServiceWorkerEventResultRejected
+};
+
+} // namespace blink
+
+#endif // WebServiceWorkerEventResult_h
diff --git a/public/platform/WebSocketHandle.h b/public/platform/WebSocketHandle.h
index 4eed846..c5c3a4c 100644
--- a/public/platform/WebSocketHandle.h
+++ b/public/platform/WebSocketHandle.h
@@ -32,11 +32,11 @@
 #define WebSocketHandle_h
 
 #include "public/platform/WebCommon.h"
-#include "public/platform/WebSerializedOrigin.h"
 #include "public/platform/WebVector.h"
 
 namespace blink {
 
+class WebSerializedOrigin;
 class WebSocketHandleClient;
 class WebString;
 class WebURL;
@@ -59,16 +59,7 @@
 
     virtual ~WebSocketHandle() { }
 
-    virtual void connect(const WebURL& url, const WebVector<WebString>& protocols, const WebString& origin, WebSocketHandleClient* client)
-    {
-        // This method is not pure-virtual to avoid a compile error during
-        // the transition from connect(..., WebString, ...) to
-        // connect(..., WebSerializedOrigin, ...).
-    }
-    virtual void connect(const WebURL& url, const WebVector<WebString>& protocols, const WebSerializedOrigin& origin, WebSocketHandleClient* client)
-    {
-        this->connect(url, protocols, origin.string(), client);
-    }
+    virtual void connect(const WebURL& /* url */, const WebVector<WebString>& protocols, const WebSerializedOrigin& /* origin */, WebSocketHandleClient*) = 0;
     virtual void send(bool fin, MessageType, const char* data, size_t /* size */) = 0;
     virtual void flowControl(int64_t quota) = 0;
     virtual void close(unsigned short code, const WebString& reason) = 0;
diff --git a/public/platform/WebURLLoader.h b/public/platform/WebURLLoader.h
index e183a32..4aca53a 100644
--- a/public/platform/WebURLLoader.h
+++ b/public/platform/WebURLLoader.h
@@ -69,6 +69,7 @@
     // its previous value. For example, a preload request starts with low
     // priority, but may increase when the resource is needed for rendering.
     virtual void didChangePriority(WebURLRequest::Priority newPriority) { }
+    virtual void didChangePriority(WebURLRequest::Priority newPriority, int intraPriorityValue) { didChangePriority(newPriority); }
 };
 
 } // namespace blink
diff --git a/public/web/WebAutofillClient.h b/public/web/WebAutofillClient.h
index 4a5ad60..d57d591 100644
--- a/public/web/WebAutofillClient.h
+++ b/public/web/WebAutofillClient.h
@@ -31,11 +31,12 @@
 #ifndef WebAutofillClient_h
 #define WebAutofillClient_h
 
+#include "WebFrame.h"
+
 namespace blink {
 
 class WebFormControlElement;
 class WebFormElement;
-class WebFrame;
 class WebInputElement;
 class WebKeyboardEvent;
 class WebNode;
@@ -45,13 +46,10 @@
 class WebAutofillClient {
 public:
     // Informs the browser an interactive autocomplete has been requested.
-    virtual void didRequestAutocomplete(WebFrame*, const WebFormElement&) { }
+    virtual void didRequestAutocomplete(WebLocalFrame*, const WebFormElement&) { }
 
     // These methods are called when the users edits a text-field.
     virtual void textFieldDidEndEditing(const WebInputElement&) { }
-    // FIXME: This function is to be removed once both chromium and blink changes
-    // for BUG332557 are in.
-    virtual void textFieldDidChange(const WebInputElement&) { }
     virtual void textFieldDidChange(const WebFormControlElement&) { }
     virtual void textFieldDidReceiveKeyDown(const WebInputElement&, const WebKeyboardEvent&) { }
     // This is called when a datalist indicator is clicked.
diff --git a/public/web/WebDOMCustomEvent.h b/public/web/WebDOMCustomEvent.h
index e6f2f67..f818963 100644
--- a/public/web/WebDOMCustomEvent.h
+++ b/public/web/WebDOMCustomEvent.h
@@ -35,7 +35,6 @@
 
 namespace blink {
 
-class WebFrame;
 class WebString;
 
 class WebDOMCustomEvent : public WebDOMEvent {
diff --git a/public/web/WebDOMEvent.h b/public/web/WebDOMEvent.h
index 4be814f..152a102 100644
--- a/public/web/WebDOMEvent.h
+++ b/public/web/WebDOMEvent.h
@@ -90,7 +90,6 @@
     BLINK_EXPORT bool isPopStateEvent() const;
     BLINK_EXPORT bool isProgressEvent() const;
     BLINK_EXPORT bool isXMLHttpRequestProgressEvent() const;
-    BLINK_EXPORT bool isBeforeLoadEvent() const;
 
 #if BLINK_IMPLEMENTATION
     WebDOMEvent(const WTF::PassRefPtr<WebCore::Event>&);
diff --git a/public/web/WebDOMFileSystem.h b/public/web/WebDOMFileSystem.h
index 5279cc0..aa32652 100644
--- a/public/web/WebDOMFileSystem.h
+++ b/public/web/WebDOMFileSystem.h
@@ -35,6 +35,7 @@
 #include "../platform/WebPrivatePtr.h"
 #include "../platform/WebString.h"
 #include "../platform/WebURL.h"
+#include "WebFrame.h"
 
 #if BLINK_IMPLEMENTATION
 #include "heap/Handle.h"
@@ -49,8 +50,6 @@
 
 namespace blink {
 
-class WebFrame;
-
 class WebDOMFileSystem {
 public:
     enum SerializableType {
@@ -77,7 +76,7 @@
     // FIXME: Deprecate the last argument when all filesystems become
     // serializable.
     BLINK_EXPORT static WebDOMFileSystem create(
-        WebFrame*,
+        WebLocalFrame*,
         WebFileSystemType,
         const WebString& name,
         const WebURL& rootURL,
diff --git a/public/web/WebDevToolsAgent.h b/public/web/WebDevToolsAgent.h
index 73a8f82..de71176 100644
--- a/public/web/WebDevToolsAgent.h
+++ b/public/web/WebDevToolsAgent.h
@@ -37,7 +37,6 @@
 namespace blink {
 class WebDevToolsAgentClient;
 class WebDevToolsMessageTransport;
-class WebFrame;
 class WebString;
 class WebURLRequest;
 class WebURLResponse;
diff --git a/public/web/WebDocument.h b/public/web/WebDocument.h
index cf2e680..d17d428 100644
--- a/public/web/WebDocument.h
+++ b/public/web/WebDocument.h
@@ -35,6 +35,7 @@
 #include "../platform/WebVector.h"
 #include "WebDraggableRegion.h"
 #include "WebExceptionCode.h"
+#include "WebFrame.h"
 #include "WebNode.h"
 #include "WebSecurityOrigin.h"
 
@@ -56,7 +57,6 @@
 class WebDocumentType;
 class WebElement;
 class WebFormElement;
-class WebFrame;
 class WebElementCollection;
 class WebNodeList;
 class WebString;
@@ -87,7 +87,7 @@
     BLINK_EXPORT WebURL openSearchDescriptionURL() const;
 
     // Returns the frame the document belongs to or 0 if the document is frameless.
-    BLINK_EXPORT WebFrame* frame() const;
+    BLINK_EXPORT WebLocalFrame* frame() const;
     BLINK_EXPORT bool isHTMLDocument() const;
     BLINK_EXPORT bool isXHTMLDocument() const;
     BLINK_EXPORT bool isPluginDocument() const;
diff --git a/public/web/WebFormControlElement.h b/public/web/WebFormControlElement.h
index bb5733d..31f47dc 100644
--- a/public/web/WebFormControlElement.h
+++ b/public/web/WebFormControlElement.h
@@ -59,6 +59,7 @@
     BLINK_EXPORT WebString formControlName() const;
     BLINK_EXPORT WebString formControlType() const;
 
+    // FIXME: remove this method when no longer used.
     BLINK_EXPORT void dispatchFormControlChangeEvent();
 
     BLINK_EXPORT bool isAutofilled() const;
@@ -70,7 +71,7 @@
     // Sets value for input element, textarea element and select element. For select
     // element it finds the option with value matches the given parameter and make the
     // option as the current selection.
-    BLINK_EXPORT void setValue(const WebString&, bool sendChangeEvent = false);
+    BLINK_EXPORT void setValue(const WebString&, bool sendEvents = false);
     // Returns value of element. For select element, it returns the value of
     // the selected option if present. If no selected option, an empty string
     // is returned. If element doesn't fall into input element, textarea element
diff --git a/public/web/WebFrame.h b/public/web/WebFrame.h
index 1ff4e9d..9155e084 100644
--- a/public/web/WebFrame.h
+++ b/public/web/WebFrame.h
@@ -31,6 +31,7 @@
 #ifndef WebFrame_h
 #define WebFrame_h
 
+#include "WebCompositionUnderline.h"
 #include "WebIconURL.h"
 #include "WebNode.h"
 #include "WebURLLoaderOptions.h"
@@ -85,6 +86,8 @@
 
 template <typename T> class WebVector;
 
+typedef class WebFrame WebLocalFrame;
+
 class WebFrame {
 public:
     // Control of renderTreeAsText output
@@ -97,7 +100,7 @@
 
     // Creates a WebFrame. Delete this WebFrame by calling WebFrame::close().
     // It is valid to pass a null client pointer.
-    BLINK_EXPORT static WebFrame* create(WebFrameClient*);
+    BLINK_EXPORT static WebLocalFrame* create(WebFrameClient*);
 
     // Returns the number of live WebFrame objects, used for leak checking.
     BLINK_EXPORT static int instanceCount();
@@ -105,16 +108,18 @@
     // Returns the WebFrame associated with the current V8 context. This
     // function can return 0 if the context is associated with a Document that
     // is not currently being displayed in a Frame.
-    BLINK_EXPORT static WebFrame* frameForCurrentContext();
+    BLINK_EXPORT static WebLocalFrame* frameForCurrentContext();
 
     // Returns the frame corresponding to the given context. This can return 0
     // if the context is detached from the frame, or if the context doesn't
     // correspond to a frame (e.g., workers).
-    BLINK_EXPORT static WebFrame* frameForContext(v8::Handle<v8::Context>);
+    BLINK_EXPORT static WebLocalFrame* frameForContext(v8::Handle<v8::Context>);
 
     // Returns the frame inside a given frame or iframe element. Returns 0 if
     // the given element is not a frame, iframe or if the frame is empty.
-    BLINK_EXPORT static WebFrame* fromFrameOwnerElement(const WebElement&);
+    BLINK_EXPORT static WebLocalFrame* fromFrameOwnerElement(const WebElement&);
+
+    virtual WebLocalFrame* toWebLocalFrame() = 0;
 
     // This method closes and deletes the WebFrame.
     virtual void close() = 0;
@@ -236,6 +241,13 @@
     virtual WebPerformance performance() const = 0;
 
 
+    // Closing -------------------------------------------------------------
+
+    // Runs beforeunload handlers for this frame, returning false if a
+    // handler suppressed unloading.
+    virtual bool dispatchBeforeUnloadEvent() = 0;
+
+
     // Scripting ----------------------------------------------------------
 
     // Returns a NPObject corresponding to this frame's DOMWindow.
@@ -462,6 +474,10 @@
     virtual void moveRangeSelection(const WebPoint& base, const WebPoint& extent) = 0;
     virtual void moveCaretSelection(const WebPoint&) = 0;
 
+    virtual bool setEditableSelectionOffsets(int start, int end) = 0;
+    virtual bool setCompositionFromExistingText(int compositionStart, int compositionEnd, const WebVector<WebCompositionUnderline>& underlines) = 0;
+    virtual void extendSelectionAndDelete(int before, int after) = 0;
+
     virtual void setCaretVisible(bool) = 0;
 
     // Printing ------------------------------------------------------------
diff --git a/public/web/WebFrameClient.h b/public/web/WebFrameClient.h
index 1b375b0..77948f1 100644
--- a/public/web/WebFrameClient.h
+++ b/public/web/WebFrameClient.h
@@ -33,6 +33,7 @@
 
 #include "WebDOMMessageEvent.h"
 #include "WebDataSource.h"
+#include "WebFrame.h"
 #include "WebIconURL.h"
 #include "WebNavigationPolicy.h"
 #include "WebNavigationType.h"
@@ -52,11 +53,11 @@
 class WebApplicationCacheHost;
 class WebApplicationCacheHostClient;
 class WebCachedURLRequest;
+class WebContentDecryptionModule;
 class WebCookieJar;
 class WebDataSource;
 class WebDOMEvent;
 class WebFormElement;
-class WebFrame;
 class WebInputEvent;
 class WebMediaPlayer;
 class WebMediaPlayerClient;
@@ -84,28 +85,31 @@
     // Factory methods -----------------------------------------------------
 
     // May return null.
-    virtual WebPlugin* createPlugin(WebFrame*, const WebPluginParams&) { return 0; }
+    virtual WebPlugin* createPlugin(WebLocalFrame*, const WebPluginParams&) { return 0; }
 
     // May return null.
-    virtual WebMediaPlayer* createMediaPlayer(WebFrame*, const WebURL&, WebMediaPlayerClient*) { return 0; }
+    virtual WebMediaPlayer* createMediaPlayer(WebLocalFrame*, const WebURL&, WebMediaPlayerClient*) { return 0; }
 
     // May return null.
-    virtual WebApplicationCacheHost* createApplicationCacheHost(WebFrame*, WebApplicationCacheHostClient*) { return 0; }
+    virtual WebContentDecryptionModule* createContentDecryptionModule(WebLocalFrame*, const WebSecurityOrigin&, const WebString& keySystem) { return 0; }
+
+    // May return null.
+    virtual WebApplicationCacheHost* createApplicationCacheHost(WebLocalFrame*, WebApplicationCacheHostClient*) { return 0; }
 
     // May return null. Takes ownership of the client.
     // FIXME: Deprecate the second argument.
-    virtual WebServiceWorkerProvider* createServiceWorkerProvider(WebFrame*, WebServiceWorkerProviderClient*) { return 0; }
-    virtual WebServiceWorkerProvider* createServiceWorkerProvider(WebFrame* frame) { return createServiceWorkerProvider(frame, 0); }
+    virtual WebServiceWorkerProvider* createServiceWorkerProvider(WebLocalFrame*, WebServiceWorkerProviderClient*) { return 0; }
+    virtual WebServiceWorkerProvider* createServiceWorkerProvider(WebLocalFrame* frame) { return createServiceWorkerProvider(frame, 0); }
 
     // May return null.
-    virtual WebWorkerPermissionClientProxy* createWorkerPermissionClientProxy(WebFrame*) { return 0; }
+    virtual WebWorkerPermissionClientProxy* createWorkerPermissionClientProxy(WebLocalFrame*) { return 0; }
 
 
     // Services ------------------------------------------------------------
 
     // A frame specific cookie jar.  May return null, in which case
     // WebKitPlatformSupport::cookieJar() will be called to access cookies.
-    virtual WebCookieJar* cookieJar(WebFrame*) { return 0; }
+    virtual WebCookieJar* cookieJar(WebLocalFrame*) { return 0; }
 
 
     // General notifications -----------------------------------------------
@@ -113,7 +117,7 @@
     // Indicates that another page has accessed the DOM of the initial empty
     // document of a main frame. After this, it is no longer safe to show a
     // pending navigation's URL, because a URL spoof is possible.
-    virtual void didAccessInitialDocument(WebFrame*) { }
+    virtual void didAccessInitialDocument(WebLocalFrame*) { }
 
     // A child frame was created in this frame. This is called when the frame
     // is created and initialized. Takes the name of the new frame, the parent
@@ -121,11 +125,11 @@
     // until frameDetached() is called on it.
     // Note: If you override this, you should almost certainly be overriding
     // frameDetached().
-    virtual WebFrame* createChildFrame(WebFrame* parent, const WebString& frameName) { return 0; }
+    virtual WebFrame* createChildFrame(WebLocalFrame* parent, const WebString& frameName) { return 0; }
 
     // This frame set its opener to null, disowning it.
     // See http://html.spec.whatwg.org/#dom-opener.
-    virtual void didDisownOpener(WebFrame*) { }
+    virtual void didDisownOpener(WebLocalFrame*) { }
 
     // This frame has been detached from the view, but has not been closed yet.
     virtual void frameDetached(WebFrame*) { }
@@ -135,21 +139,21 @@
 
     // This frame is about to be closed. This is called after frameDetached,
     // when the document is being unloaded, due to new one committing.
-    virtual void willClose(WebFrame*) { }
+    virtual void willClose(WebLocalFrame*) { }
 
     // This frame's name has changed.
-    virtual void didChangeName(WebFrame*, const WebString&) { }
+    virtual void didChangeName(WebLocalFrame*, const WebString&) { }
 
     // Called when a watched CSS selector matches or stops matching.
-    virtual void didMatchCSS(WebFrame*, const WebVector<WebString>& newlyMatchingSelectors, const WebVector<WebString>& stoppedMatchingSelectors) { }
+    virtual void didMatchCSS(WebLocalFrame*, const WebVector<WebString>& newlyMatchingSelectors, const WebVector<WebString>& stoppedMatchingSelectors) { }
 
     // Load commands -------------------------------------------------------
 
     // The client should handle the navigation externally.
     virtual void loadURLExternally(
-        WebFrame*, const WebURLRequest&, WebNavigationPolicy) { }
+        WebLocalFrame*, const WebURLRequest&, WebNavigationPolicy) { }
     virtual void loadURLExternally(
-        WebFrame*, const WebURLRequest&, WebNavigationPolicy, const WebString& downloadName) { }
+        WebLocalFrame*, const WebURLRequest&, WebNavigationPolicy, const WebString& downloadName) { }
 
 
     // Navigational queries ------------------------------------------------
@@ -157,72 +161,81 @@
     // The client may choose to alter the navigation policy.  Otherwise,
     // defaultPolicy should just be returned.
     virtual WebNavigationPolicy decidePolicyForNavigation(
-        WebFrame*, WebDataSource::ExtraData*, const WebURLRequest&, WebNavigationType,
+        WebLocalFrame*, WebDataSource::ExtraData*, const WebURLRequest&, WebNavigationType,
         WebNavigationPolicy defaultPolicy, bool isRedirect) { return defaultPolicy; }
 
 
     // Navigational notifications ------------------------------------------
 
+    // These notifications bracket any loading that occurs in the WebFrame.
+    virtual void didStartLoading(bool toDifferentDocument) { }
+    virtual void didStopLoading() { }
+
+    // Notification that some progress was made loading the current frame.
+    // loadProgress is a value between 0 (nothing loaded) and 1.0 (frame fully
+    // loaded).
+    virtual void didChangeLoadProgress(double loadProgress) { }
+
     // A form submission has been requested, but the page's submit event handler
     // hasn't yet had a chance to run (and possibly alter/interrupt the submit.)
-    virtual void willSendSubmitEvent(WebFrame*, const WebFormElement&) { }
+    virtual void willSendSubmitEvent(WebLocalFrame*, const WebFormElement&) { }
 
     // A form submission is about to occur.
-    virtual void willSubmitForm(WebFrame*, const WebFormElement&) { }
+    virtual void willSubmitForm(WebLocalFrame*, const WebFormElement&) { }
 
     // A datasource has been created for a new navigation.  The given
     // datasource will become the provisional datasource for the frame.
-    virtual void didCreateDataSource(WebFrame*, WebDataSource*) { }
+    virtual void didCreateDataSource(WebLocalFrame*, WebDataSource*) { }
 
     // A new provisional load has been started.
-    virtual void didStartProvisionalLoad(WebFrame*) { }
+    virtual void didStartProvisionalLoad(WebLocalFrame*) { }
 
     // The provisional load was redirected via a HTTP 3xx response.
-    virtual void didReceiveServerRedirectForProvisionalLoad(WebFrame*) { }
+    virtual void didReceiveServerRedirectForProvisionalLoad(WebLocalFrame*) { }
 
     // The provisional load failed.
-    virtual void didFailProvisionalLoad(WebFrame*, const WebURLError&) { }
+    virtual void didFailProvisionalLoad(WebLocalFrame*, const WebURLError&) { }
 
     // The provisional datasource is now committed.  The first part of the
     // response body has been received, and the encoding of the response
     // body is known.
-    virtual void didCommitProvisionalLoad(WebFrame*, bool isNewNavigation) { }
+    virtual void didCommitProvisionalLoad(WebLocalFrame*, bool isNewNavigation) { }
 
     // The window object for the frame has been cleared of any extra
     // properties that may have been set by script from the previously
     // loaded document.
-    virtual void didClearWindowObject(WebFrame* frame, int worldId) { }
+    virtual void didClearWindowObject(WebLocalFrame* frame, int worldId) { }
 
     // The document element has been created.
-    virtual void didCreateDocumentElement(WebFrame*) { }
+    virtual void didCreateDocumentElement(WebLocalFrame*) { }
 
     // The page title is available.
-    virtual void didReceiveTitle(WebFrame* frame, const WebString& title, WebTextDirection direction) { }
+    virtual void didReceiveTitle(WebLocalFrame* frame, const WebString& title, WebTextDirection direction) { }
 
     // The icon for the page have changed.
-    virtual void didChangeIcon(WebFrame*, WebIconURL::Type) { }
+    virtual void didChangeIcon(WebLocalFrame*, WebIconURL::Type) { }
 
     // The frame's document finished loading.
-    virtual void didFinishDocumentLoad(WebFrame*) { }
+    virtual void didFinishDocumentLoad(WebLocalFrame*) { }
 
     // The 'load' event was dispatched.
-    virtual void didHandleOnloadEvents(WebFrame*) { }
+    virtual void didHandleOnloadEvents(WebLocalFrame*) { }
 
     // The frame's document or one of its subresources failed to load.
-    virtual void didFailLoad(WebFrame*, const WebURLError&) { }
+    virtual void didFailLoad(WebLocalFrame*, const WebURLError&) { }
 
     // The frame's document and all of its subresources succeeded to load.
-    virtual void didFinishLoad(WebFrame*) { }
+    virtual void didFinishLoad(WebLocalFrame*) { }
 
     // The navigation resulted in no change to the documents within the page.
     // For example, the navigation may have just resulted in scrolling to a
     // named anchor or a PopState event may have been dispatched.
-    virtual void didNavigateWithinPage(WebFrame*, bool isNewNavigation) { }
+    virtual void didNavigateWithinPage(WebLocalFrame*, bool isNewNavigation) { }
 
     // Called upon update to scroll position, document state, and other
     // non-navigational events related to the data held by WebHistoryItem.
     // WARNING: This method may be called very frequently.
-    virtual void didUpdateCurrentHistoryItem(WebFrame*) { }
+    virtual void didUpdateCurrentHistoryItem(WebLocalFrame*) { }
 
     // Editing -------------------------------------------------------------
 
@@ -245,77 +258,80 @@
     // Low-level resource notifications ------------------------------------
 
     // An element will request a resource.
-    virtual void willRequestResource(WebFrame*, const WebCachedURLRequest&) { }
+    virtual void willRequestResource(WebLocalFrame*, const WebCachedURLRequest&) { }
 
     // The request is after preconnect is triggered.
-    virtual void willRequestAfterPreconnect(WebFrame*, WebURLRequest&) { }
+    virtual void willRequestAfterPreconnect(WebLocalFrame*, 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
     // will be non-null and contain the response that triggered the redirect.
     virtual void willSendRequest(
-        WebFrame*, unsigned identifier, WebURLRequest&,
+        WebLocalFrame*, unsigned identifier, WebURLRequest&,
         const WebURLResponse& redirectResponse) { }
 
     // Response headers have been received for the resource request given
     // by identifier.
     virtual void didReceiveResponse(
-        WebFrame*, unsigned identifier, const WebURLResponse&) { }
+        WebLocalFrame*, unsigned identifier, const WebURLResponse&) { }
 
     virtual void didChangeResourcePriority(
-        WebFrame*, unsigned identifier, const blink::WebURLRequest::Priority&) { }
+        WebLocalFrame*, unsigned identifier, const blink::WebURLRequest::Priority&) { }
+
+    virtual void didChangeResourcePriority(
+        WebFrame* webFrame, unsigned identifier, const blink::WebURLRequest::Priority& priority, int) { didChangeResourcePriority(webFrame, identifier, priority); }
 
     // The resource request given by identifier succeeded.
     virtual void didFinishResourceLoad(
-        WebFrame*, unsigned identifier) { }
+        WebLocalFrame*, unsigned identifier) { }
 
     // The specified request was satified from WebCore's memory cache.
     virtual void didLoadResourceFromMemoryCache(
-        WebFrame*, const WebURLRequest&, const WebURLResponse&) { }
+        WebLocalFrame*, const WebURLRequest&, const WebURLResponse&) { }
 
     // This frame has displayed inactive content (such as an image) from an
     // insecure source.  Inactive content cannot spread to other frames.
-    virtual void didDisplayInsecureContent(WebFrame*) { }
+    virtual void didDisplayInsecureContent(WebLocalFrame*) { }
 
     // The indicated security origin has run active content (such as a
     // script) from an insecure source.  Note that the insecure content can
     // spread to other frames in the same origin.
-    virtual void didRunInsecureContent(WebFrame*, const WebSecurityOrigin&, const WebURL& insecureURL) { }
+    virtual void didRunInsecureContent(WebLocalFrame*, const WebSecurityOrigin&, const WebURL& insecureURL) { }
 
     // A reflected XSS was encountered in the page and suppressed.
-    virtual void didDetectXSS(WebFrame*, const WebURL&, bool didBlockEntirePage) { }
+    virtual void didDetectXSS(WebLocalFrame*, const WebURL&, bool didBlockEntirePage) { }
 
     // A PingLoader was created, and a request dispatched to a URL.
-    virtual void didDispatchPingLoader(WebFrame*, const WebURL&) { }
+    virtual void didDispatchPingLoader(WebLocalFrame*, const WebURL&) { }
 
     // The loaders in this frame have been stopped.
-    virtual void didAbortLoading(WebFrame*) { }
+    virtual void didAbortLoading(WebLocalFrame*) { }
 
     // Script notifications ------------------------------------------------
 
     // Notifies that a new script context has been created for this frame.
     // This is similar to didClearWindowObject but only called once per
     // frame context.
-    virtual void didCreateScriptContext(WebFrame*, v8::Handle<v8::Context>, int extensionGroup, int worldId) { }
+    virtual void didCreateScriptContext(WebLocalFrame*, v8::Handle<v8::Context>, int extensionGroup, int worldId) { }
 
     // WebKit is about to release its reference to a v8 context for a frame.
-    virtual void willReleaseScriptContext(WebFrame*, v8::Handle<v8::Context>, int worldId) { }
+    virtual void willReleaseScriptContext(WebLocalFrame*, v8::Handle<v8::Context>, int worldId) { }
 
     // Geometry notifications ----------------------------------------------
 
     // The frame's document finished the initial non-empty layout of a page.
-    virtual void didFirstVisuallyNonEmptyLayout(WebFrame*) { }
+    virtual void didFirstVisuallyNonEmptyLayout(WebLocalFrame*) { }
 
     // The size of the content area changed.
-    virtual void didChangeContentsSize(WebFrame*, const WebSize&) { }
+    virtual void didChangeContentsSize(WebLocalFrame*, const WebSize&) { }
 
     // The main frame scrolled.
-    virtual void didChangeScrollOffset(WebFrame*) { }
+    virtual void didChangeScrollOffset(WebLocalFrame*) { }
 
     // If the frame is loading an HTML document, this will be called to
     // notify that the <body> will be attached soon.
-    virtual void willInsertBody(WebFrame*) { }
+    virtual void willInsertBody(WebLocalFrame*) { }
 
     // Find-in-page notifications ------------------------------------------
 
@@ -345,7 +361,7 @@
     // Note that the requesting quota size may not always be granted and
     // a smaller amount of quota than requested might be returned.
     virtual void requestStorageQuota(
-        WebFrame*, WebStorageQuotaType,
+        WebLocalFrame*, WebStorageQuotaType,
         unsigned long long newQuotaInBytes,
         WebStorageQuotaCallbacks) { }
 
@@ -357,7 +373,7 @@
     // MediaStream -----------------------------------------------------
 
     // A new WebRTCPeerConnectionHandler is created.
-    virtual void willStartUsingPeerConnectionHandler(WebFrame*, WebRTCPeerConnectionHandler*) { }
+    virtual void willStartUsingPeerConnectionHandler(WebLocalFrame*, WebRTCPeerConnectionHandler*) { }
 
     // Messages ------------------------------------------------------
 
@@ -365,7 +381,7 @@
     // gives the embedder a chance to handle it instead of WebKit. Returns true
     // if the embedder handled it.
     virtual bool willCheckAndDispatchMessageEvent(
-        WebFrame* sourceFrame,
+        WebLocalFrame* sourceFrame,
         WebFrame* targetFrame,
         WebSecurityOrigin target,
         WebDOMMessageEvent event) { return false; }
@@ -373,11 +389,11 @@
     // Asks the embedder if a specific user agent should be used for the given
     // URL. Non-empty strings indicate an override should be used. Otherwise,
     // Platform::current()->userAgent() will be called to provide one.
-    virtual WebString userAgentOverride(WebFrame*, const WebURL& url) { return WebString(); }
+    virtual WebString userAgentOverride(WebLocalFrame*, const WebURL& url) { return WebString(); }
 
     // Asks the embedder what value the network stack will send for the DNT
     // header. An empty string indicates that no DNT header will be send.
-    virtual WebString doNotTrackValue(WebFrame*) { return WebString(); }
+    virtual WebString doNotTrackValue(WebLocalFrame*) { return WebString(); }
 
     // WebGL ------------------------------------------------------
 
@@ -385,12 +401,12 @@
     // This call is placed here instead of WebPermissionClient because this
     // class is implemented in content/, and putting it here avoids adding
     // more public content/ APIs.
-    virtual bool allowWebGL(WebFrame*, bool defaultValue) { return defaultValue; }
+    virtual bool allowWebGL(WebLocalFrame*, bool defaultValue) { return defaultValue; }
 
     // Notifies the client that a WebGL context was lost on this page with the
     // given reason (one of the GL_ARB_robustness status codes; see
     // Extensions3D.h in WebCore/platform/graphics).
-    virtual void didLoseWebGLContext(WebFrame*, int) { }
+    virtual void didLoseWebGLContext(WebLocalFrame*, int) { }
 
     // FIXME: Remove this method once we have input routing in the browser
     // process. See http://crbug.com/339659.
diff --git a/public/web/WebHelperPlugin.h b/public/web/WebHelperPlugin.h
index 084bf15..57ec1fd 100644
--- a/public/web/WebHelperPlugin.h
+++ b/public/web/WebHelperPlugin.h
@@ -32,10 +32,10 @@
 #define WebHelperPlugin_h
 
 #include "../platform/WebCommon.h"
+#include "WebFrame.h"
 
 namespace blink {
 
-class WebFrame;
 class WebPlugin;
 class WebString;
 
@@ -43,7 +43,7 @@
 public:
     // May return null if initialization fails. If the returned pointer is
     // non-null, the caller must free it by calling destroy().
-    BLINK_EXPORT static WebHelperPlugin* create(const WebString& PluginType, WebFrame*);
+    BLINK_EXPORT static WebHelperPlugin* create(const WebString& PluginType, WebLocalFrame*);
 
     // Returns a WebPlugin corresponding to the instantiated plugin. This will
     // never return null.
diff --git a/public/web/WebInputElement.h b/public/web/WebInputElement.h
index e425093..e9965cf 100644
--- a/public/web/WebInputElement.h
+++ b/public/web/WebInputElement.h
@@ -73,7 +73,7 @@
         BLINK_EXPORT bool isActivatedSubmit() const;
         BLINK_EXPORT void setActivatedSubmit(bool);
         BLINK_EXPORT int size() const;
-        BLINK_EXPORT void setChecked(bool, bool sendChangeEvent = false);
+        BLINK_EXPORT void setChecked(bool, bool sendEvents = false);
         // Sets the value inside the text field without being sanitized.
         // Can't be used if a renderer doesn't exist or on a non text field type.
         // Caret will be moved to the end.
diff --git a/public/web/WebInputEvent.h b/public/web/WebInputEvent.h
index f9fc765..3a56fae 100644
--- a/public/web/WebInputEvent.h
+++ b/public/web/WebInputEvent.h
@@ -361,6 +361,24 @@
     Phase phase;
     Phase momentumPhase;
 
+    // See comment at the top of the file for why an int is used here.
+    // Rubberbanding is an OSX visual effect. When a user scrolls the content
+    // area with a track pad, and the content area is already at its limit in
+    // the direction being scrolled, the entire content area is allowed to
+    // scroll slightly off screen, revealing a grey background. When the user
+    // lets go, the content area snaps back into place. Blink is responsible
+    // for this rubberbanding effect, but the embedder may wish to disable
+    // rubber banding in the left or right direction, if the scroll should have
+    // an alternate effect. The common case is that a scroll in the left or
+    // right directions causes a back or forwards navigation, respectively.
+    //
+    // These flags prevent rubber banding from starting in a given direction,
+    // but have no effect on an ongoing rubber banding. A rubber banding that
+    // started in the vertical direction is allowed to continue in the right
+    // direction, even if canRubberbandRight is 0.
+    int canRubberbandLeft;
+    int canRubberbandRight;
+
     WebMouseWheelEvent(unsigned sizeParam = sizeof(WebMouseWheelEvent))
         : WebMouseEvent(sizeParam)
         , deltaX(0.0f)
@@ -373,6 +391,8 @@
         , hasPreciseScrollingDeltas(false)
         , phase(PhaseNone)
         , momentumPhase(PhaseNone)
+        , canRubberbandLeft(true)
+        , canRubberbandRight(true)
     {
     }
 };
diff --git a/public/web/WebLeakDetector.h b/public/web/WebLeakDetector.h
index 652fd3b..35990af 100644
--- a/public/web/WebLeakDetector.h
+++ b/public/web/WebLeakDetector.h
@@ -31,16 +31,15 @@
 #ifndef WebLeakDetector_h
 #define WebLeakDetector_h
 
+#include "WebFrame.h"
 #include "public/platform/WebCommon.h"
 
 namespace blink {
 
-class WebFrame;
-
 class WebLeakDetector {
 public:
     // Cleans up the DOM objects and counts them. This is supposed to be used for detecting DOM-object leaks.
-    BLINK_EXPORT static void collectGarbargeAndGetDOMCounts(WebFrame*, unsigned* numberOfLiveDocuments, unsigned* numberOfLiveNodes);
+    BLINK_EXPORT static void collectGarbargeAndGetDOMCounts(WebLocalFrame*, unsigned* numberOfLiveDocuments, unsigned* numberOfLiveNodes);
 };
 
 } // namespace blink
diff --git a/public/web/WebLocalFrame.h b/public/web/WebLocalFrame.h
new file mode 100644
index 0000000..9197a46
--- /dev/null
+++ b/public/web/WebLocalFrame.h
@@ -0,0 +1,12 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WebLocalFrame_h
+#define WebLocalFrame_h
+
+// FIXME: There is currently just a forwarding header until Chrome is updated to
+// use these types.
+#include "WebFrame.h"
+
+#endif // WebLocalFrame_h
diff --git a/public/web/WebMIDIClient.h b/public/web/WebMIDIClient.h
index 9435b93..86f39c1 100644
--- a/public/web/WebMIDIClient.h
+++ b/public/web/WebMIDIClient.h
@@ -39,9 +39,9 @@
     virtual ~WebMIDIClient() { }
 
     // Request a permission to use system exclusive messages. Called when MIDIOptions.sysex is true.
-    virtual void requestSysExPermission(const WebMIDIPermissionRequest&) = 0;
+    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;
+    virtual void cancelSysexPermissionRequest(const WebMIDIPermissionRequest&) = 0;
 };
 
 } // namespace blink
diff --git a/public/web/WebMIDIClientMock.h b/public/web/WebMIDIClientMock.h
index 95ba401..0ed5833 100644
--- a/public/web/WebMIDIClientMock.h
+++ b/public/web/WebMIDIClientMock.h
@@ -46,12 +46,12 @@
     BLINK_EXPORT WebMIDIClientMock();
     virtual ~WebMIDIClientMock() { reset(); }
 
-    BLINK_EXPORT void setSysExPermission(bool);
+    BLINK_EXPORT void setSysexPermission(bool);
     BLINK_EXPORT void resetMock();
 
     // WebMIDIClient
-    virtual void requestSysExPermission(const WebMIDIPermissionRequest&) OVERRIDE;
-    virtual void cancelSysExPermissionRequest(const WebMIDIPermissionRequest&) OVERRIDE;
+    virtual void requestSysexPermission(const WebMIDIPermissionRequest&) OVERRIDE;
+    virtual void cancelSysexPermissionRequest(const WebMIDIPermissionRequest&) OVERRIDE;
 
 private:
     BLINK_EXPORT void reset();
diff --git a/public/web/WebNode.h b/public/web/WebNode.h
index d82594c..edd088f 100644
--- a/public/web/WebNode.h
+++ b/public/web/WebNode.h
@@ -45,7 +45,6 @@
 class WebDocument;
 class WebElement;
 class WebElementCollection;
-class WebFrame;
 class WebNodeList;
 class WebPluginContainer;
 
diff --git a/public/web/WebPageSerializer.h b/public/web/WebPageSerializer.h
index 89a3a31..b018a11 100644
--- a/public/web/WebPageSerializer.h
+++ b/public/web/WebPageSerializer.h
@@ -34,9 +34,9 @@
 #include "../platform/WebCString.h"
 #include "../platform/WebCommon.h"
 #include "../platform/WebURL.h"
+#include "WebFrame.h"
 
 namespace blink {
-class WebFrame;
 class WebPageSerializerClient;
 class WebString;
 class WebView;
@@ -88,12 +88,13 @@
     // saved links, which matched with vector:links one by one.
     // The parameter localDirectoryName is relative path of directory which
     // contain all saved auxiliary files included all sub frames and resources.
-    BLINK_EXPORT static bool serialize(WebFrame*,
-                                        bool recursive,
-                                        WebPageSerializerClient*,
-                                        const WebVector<WebURL>& links,
-                                        const WebVector<WebString>& localPaths,
-                                        const WebString& localDirectoryName);
+    BLINK_EXPORT static bool serialize(
+        WebLocalFrame*,
+        bool recursive,
+        WebPageSerializerClient*,
+        const WebVector<WebURL>& links,
+        const WebVector<WebString>& localPaths,
+        const WebString& localDirectoryName);
 
     // Retrieve all the resource for the passed view, including the main frame
     // and sub-frames. Returns true if all resources were retrieved
diff --git a/public/web/WebPermissionClient.h b/public/web/WebPermissionClient.h
index 3eea898..fbb6d9e 100644
--- a/public/web/WebPermissionClient.h
+++ b/public/web/WebPermissionClient.h
@@ -31,10 +31,11 @@
 #ifndef WebPermissionClient_h
 #define WebPermissionClient_h
 
+#include "WebFrame.h"
+
 namespace blink {
 
 class WebDocument;
-class WebFrame;
 class WebPermissionCallbacks;
 class WebSecurityOrigin;
 class WebString;
@@ -43,72 +44,72 @@
 class WebPermissionClient {
 public:
     // Controls whether access to Web Databases is allowed for this frame.
-    virtual bool allowDatabase(WebFrame*, const WebString& name, const WebString& displayName, unsigned long estimatedSize) { return true; }
+    virtual bool allowDatabase(WebLocalFrame*, const WebString& name, const WebString& displayName, unsigned long estimatedSize) { return true; }
 
     // Controls whether access to File System is allowed for this frame.
-    virtual bool allowFileSystem(WebFrame*) { return true; }
+    virtual bool allowFileSystem(WebLocalFrame*) { return true; }
 
     virtual void requestFileSystemAccess(WebFrame* frame, const WebPermissionCallbacks& callbacks) { }
 
     // Controls whether images are allowed for this frame.
-    virtual bool allowImage(WebFrame* frame, bool enabledPerSettings, const WebURL& imageURL) { return enabledPerSettings; }
+    virtual bool allowImage(WebLocalFrame* frame, bool enabledPerSettings, const WebURL& imageURL) { return enabledPerSettings; }
 
     // Controls whether access to Indexed DB are allowed for this frame.
-    virtual bool allowIndexedDB(WebFrame*, const WebString& name, const WebSecurityOrigin&) { return true; }
+    virtual bool allowIndexedDB(WebLocalFrame*, const WebString& name, const WebSecurityOrigin&) { return true; }
 
     // Controls whether plugins are allowed for this frame.
-    virtual bool allowPlugins(WebFrame*, bool enabledPerSettings) { return enabledPerSettings; }
+    virtual bool allowPlugins(WebLocalFrame*, bool enabledPerSettings) { return enabledPerSettings; }
 
     // Controls whether scripts are allowed to execute for this frame.
-    virtual bool allowScript(WebFrame*, bool enabledPerSettings) { return enabledPerSettings; }
+    virtual bool allowScript(WebLocalFrame*, bool enabledPerSettings) { return enabledPerSettings; }
 
     // Controls whether scripts loaded from the given URL are allowed to execute for this frame.
-    virtual bool allowScriptFromSource(WebFrame*, bool enabledPerSettings, const WebURL& scriptURL) { return enabledPerSettings; }
+    virtual bool allowScriptFromSource(WebLocalFrame*, bool enabledPerSettings, const WebURL& scriptURL) { return enabledPerSettings; }
 
     // Controls whether insecrure content is allowed to display for this frame.
-    virtual bool allowDisplayingInsecureContent(WebFrame*, bool enabledPerSettings, const WebSecurityOrigin&, const WebURL&) { return enabledPerSettings; }
+    virtual bool allowDisplayingInsecureContent(WebLocalFrame*, bool enabledPerSettings, const WebSecurityOrigin&, const WebURL&) { return enabledPerSettings; }
 
     // Controls whether insecrure scripts are allowed to execute for this frame.
-    virtual bool allowRunningInsecureContent(WebFrame*, bool enabledPerSettings, const WebSecurityOrigin&, const WebURL&) { return enabledPerSettings; }
+    virtual bool allowRunningInsecureContent(WebLocalFrame*, bool enabledPerSettings, const WebSecurityOrigin&, const WebURL&) { return enabledPerSettings; }
 
     // Controls whether the given script extension should run in a new script
     // context in this frame. If extensionGroup is 0, the script context is the
     // frame's main context. Otherwise, it is a context created by
-    // WebFrame::executeScriptInIsolatedWorld with that same extensionGroup
+    // WebLocalFrame::executeScriptInIsolatedWorld with that same extensionGroup
     // value.
-    virtual bool allowScriptExtension(WebFrame*, const WebString& extensionName, int extensionGroup) { return true; }
+    virtual bool allowScriptExtension(WebLocalFrame*, const WebString& extensionName, int extensionGroup) { return true; }
 
-    virtual bool allowScriptExtension(WebFrame* webFrame, const WebString& extensionName, int extensionGroup, int worldId)
+    virtual bool allowScriptExtension(WebLocalFrame* webFrame, const WebString& extensionName, int extensionGroup, int worldId)
     {
         return allowScriptExtension(webFrame, extensionName, extensionGroup);
     }
 
     // Controls whether HTML5 Web Storage is allowed for this frame.
     // If local is true, then this is for local storage, otherwise it's for session storage.
-    virtual bool allowStorage(WebFrame*, bool local) { return true; }
+    virtual bool allowStorage(WebLocalFrame*, bool local) { return true; }
 
     // Controls whether access to read the clipboard is allowed for this frame.
-    virtual bool allowReadFromClipboard(WebFrame*, bool defaultValue) { return defaultValue; }
+    virtual bool allowReadFromClipboard(WebLocalFrame*, bool defaultValue) { return defaultValue; }
 
     // Controls whether access to write the clipboard is allowed for this frame.
-    virtual bool allowWriteToClipboard(WebFrame*, bool defaultValue) { return defaultValue; }
+    virtual bool allowWriteToClipboard(WebLocalFrame*, bool defaultValue) { return defaultValue; }
 
     // Controls whether enabling Web Components API for this frame.
-    virtual bool allowWebComponents(WebFrame*, bool defaultValue) { return defaultValue; }
+    virtual bool allowWebComponents(WebLocalFrame*, bool defaultValue) { return defaultValue; }
 
     // Controls whether to enable MutationEvents for this frame.
     // The common use case of this method is actually to selectively disable MutationEvents,
     // but it's been named for consistency with the rest of the interface.
-    virtual bool allowMutationEvents(WebFrame*, bool defaultValue) { return defaultValue; }
+    virtual bool allowMutationEvents(WebLocalFrame*, bool defaultValue) { return defaultValue; }
 
     // Controls whether pushState and related History APIs are enabled for this frame.
-    virtual bool allowPushState(WebFrame*) { return true; }
+    virtual bool allowPushState(WebLocalFrame*) { return true; }
 
     // Notifies the client that the frame would have instantiated a plug-in if plug-ins were enabled.
-    virtual void didNotAllowPlugins(WebFrame*) { }
+    virtual void didNotAllowPlugins(WebLocalFrame*) { }
 
     // Notifies the client that the frame would have executed script if script were enabled.
-    virtual void didNotAllowScript(WebFrame*) { }
+    virtual void didNotAllowScript(WebLocalFrame*) { }
 
 protected:
     ~WebPermissionClient() { }
diff --git a/public/web/WebPlugin.h b/public/web/WebPlugin.h
index 9f046f2..d935150 100644
--- a/public/web/WebPlugin.h
+++ b/public/web/WebPlugin.h
@@ -45,7 +45,6 @@
 
 class WebDataSource;
 class WebDragData;
-class WebFrame;
 class WebInputEvent;
 class WebPluginContainer;
 class WebURLResponse;
diff --git a/public/web/WebRange.h b/public/web/WebRange.h
index 3eeeeb0..5d463f8 100644
--- a/public/web/WebRange.h
+++ b/public/web/WebRange.h
@@ -33,6 +33,7 @@
 
 #include "../platform/WebCommon.h"
 #include "../platform/WebVector.h"
+#include "WebFrame.h"
 
 #if BLINK_IMPLEMENTATION
 namespace WebCore { class Range; }
@@ -42,7 +43,6 @@
 namespace blink {
 
 struct WebFloatQuad;
-class WebFrame;
 class WebNode;
 class WebRangePrivate;
 class WebString;
@@ -75,7 +75,7 @@
 
     BLINK_EXPORT WebRange expandedToParagraph() const;
 
-    BLINK_EXPORT static WebRange fromDocumentRange(WebFrame*, int start, int length);
+    BLINK_EXPORT static WebRange fromDocumentRange(WebLocalFrame*, int start, int length);
 
     BLINK_EXPORT WebVector<WebFloatQuad> textQuads() const;
 
diff --git a/public/web/WebRuntimeFeatures.h b/public/web/WebRuntimeFeatures.h
index eac7593..a93eaf3 100644
--- a/public/web/WebRuntimeFeatures.h
+++ b/public/web/WebRuntimeFeatures.h
@@ -36,12 +36,9 @@
 namespace blink {
 
 // This class is used to enable runtime features of Blink.
-// All features are disabled by default.
-// Most clients should call enableStableFeatures() to enable
-// features Blink has made API commitments to.
+// Stable features are enabled by default.
 class WebRuntimeFeatures {
 public:
-    BLINK_EXPORT static void enableStableFeatures(bool);
     BLINK_EXPORT static void enableExperimentalFeatures(bool);
     BLINK_EXPORT static void enableTestOnlyFeatures(bool);
 
@@ -59,8 +56,6 @@
 
     BLINK_EXPORT static void enableBleedingEdgeFastPaths(bool);
 
-    BLINK_EXPORT static void enableDirectWrite(bool);
-
     BLINK_EXPORT static void enableExperimentalCanvasFeatures(bool);
 
     BLINK_EXPORT static void enableFastTextAutosizing(bool);
@@ -132,6 +127,8 @@
 
     BLINK_EXPORT static void enableTargetedStyleRecalc(bool);
 
+    BLINK_EXPORT static void enablePreciseMemoryInfo(bool);
+
 private:
     WebRuntimeFeatures();
 };
diff --git a/public/web/WebSerializedScriptValueVersion.h b/public/web/WebSerializedScriptValueVersion.h
index f00ae5e..4e15eb6 100644
--- a/public/web/WebSerializedScriptValueVersion.h
+++ b/public/web/WebSerializedScriptValueVersion.h
@@ -38,7 +38,7 @@
 // Embedders may serialize this as out-of-band metadata along with
 // collections of serialized data so that version skew can be detected
 // before deserializing individual values.
-const unsigned kSerializedScriptValueVersion = 4;
+const unsigned kSerializedScriptValueVersion = 5;
 
 } // namespace blink
 
diff --git a/public/web/WebServiceWorkerContextClient.h b/public/web/WebServiceWorkerContextClient.h
index 540cb06..dc4ebde 100644
--- a/public/web/WebServiceWorkerContextClient.h
+++ b/public/web/WebServiceWorkerContextClient.h
@@ -32,6 +32,7 @@
 #define WebServiceWorkerContextClient_h
 
 #include "WebWorkerPermissionClientProxy.h"
+#include "public/platform/WebServiceWorkerEventResult.h"
 
 namespace blink {
 
@@ -77,10 +78,17 @@
     virtual void dispatchDevToolsMessage(const WebString&) { }
     virtual void saveDevToolsAgentState(const WebString&) { }
 
+    // ServiceWorker specific method.
+    virtual void didHandleActivateEvent(int eventID, blink::WebServiceWorkerEventResult result) { }
+
     // ServiceWorker specific method. Called after InstallEvent (dispatched
     // via WebServiceWorkerContextProxy) is handled by the ServiceWorker's
     // script context.
     virtual void didHandleInstallEvent(int installEventID) { }
+    virtual void didHandleInstallEvent(int installEventID, blink::WebServiceWorkerEventResult result)
+    {
+        didHandleInstallEvent(installEventID);
+    }
 
     // ServiceWorker specific methods. Called after FetchEvent is handled by the
     // ServiceWorker's script context. When no response is provided, the browser
@@ -90,6 +98,11 @@
 
     // Ownership of the returned object is transferred to the caller.
     virtual WebServiceWorkerNetworkProvider* createServiceWorkerNetworkProvider(blink::WebDataSource*) { return 0; }
+
+    // ServiceWorker specific method. Called after SyncEvent (dispatched via
+    // WebServiceWorkerContextProxy) is handled by the ServiceWorker's script
+    // context.
+    virtual void didHandleSyncEvent(int syncEventID) { }
 };
 
 } // namespace blink
diff --git a/public/web/WebServiceWorkerContextProxy.h b/public/web/WebServiceWorkerContextProxy.h
index 07278c0..7118f3c 100644
--- a/public/web/WebServiceWorkerContextProxy.h
+++ b/public/web/WebServiceWorkerContextProxy.h
@@ -31,6 +31,8 @@
 #ifndef WebServiceWorkerContextProxy_h
 #define WebServiceWorkerContextProxy_h
 
+#include "public/platform/WebMessagePortChannel.h"
+
 namespace blink {
 
 class WebString;
@@ -41,11 +43,18 @@
 public:
     virtual ~WebServiceWorkerContextProxy() { }
 
+    virtual void dispatchActivateEvent(int eventID) = 0;
     // FIXME: This needs to pass the active service worker info.
     virtual void dispatchInstallEvent(int installEventID) = 0;
     // FIXME: This needs to pass the fetch request info.
     virtual void dispatchFetchEvent(int fetchEventID) = 0;
 
+    virtual void dispatchMessageEvent(const WebString& message, const WebMessagePortChannelArray& channels) = 0;
+
+    // Once the ServiceWorker has finished handling the sync event
+    // didHandleSyncEvent is called on the context client.
+    virtual void dispatchSyncEvent(int syncEventID) = 0;
+
     virtual void resumeWorkerContext() { }
     virtual void attachDevTools() { }
     virtual void reattachDevTools(const WebString& savedState) { }
diff --git a/public/web/WebSettings.h b/public/web/WebSettings.h
index 8c66ea4..a43a9ce 100644
--- a/public/web/WebSettings.h
+++ b/public/web/WebSettings.h
@@ -69,11 +69,11 @@
     virtual void setAcceleratedCompositingForGpuRasterizationHintEnabled(bool) = 0;
     virtual void setAcceleratedCompositingForOverflowScrollEnabled(bool) = 0;
     virtual void setCompositorDrivenAcceleratedScrollingEnabled(bool) = 0;
-    virtual void setAcceleratedCompositingForTransitionEnabled(bool)  = 0;
+    // Not implemented yet, see http://crbug.com/178119
+    virtual void setAcceleratedCompositingForTransitionEnabled(bool) { };
     virtual void setAcceleratedCompositingForPluginsEnabled(bool) = 0;
     virtual void setAcceleratedCompositingForScrollableFramesEnabled(bool) = 0;
     virtual void setAcceleratedCompositingForVideoEnabled(bool) = 0;
-    virtual void setAcceleratedFiltersEnabled(bool) = 0;
     virtual void setAllowDisplayOfInsecureContent(bool) = 0;
     virtual void setAllowFileAccessFromFileURLs(bool) = 0;
     virtual void setAllowCustomScrollbarInMainFrame(bool) = 0;
@@ -87,6 +87,7 @@
     virtual void setClobberUserAgentInitialScaleQuirk(bool) = 0;
     virtual void setCompositedScrollingForFramesEnabled(bool) = 0;
     virtual void setCompositorTouchHitTesting(bool) = 0;
+    virtual void setContainerCullingEnabled(bool) = 0;
     virtual void setCookieEnabled(bool) = 0;
     virtual void setNavigateOnDragDrop(bool) = 0;
     virtual void setCursiveFontFamily(const WebString&, UScriptCode = USCRIPT_COMMON) = 0;
@@ -113,9 +114,7 @@
     virtual void setExperimentalWebSocketEnabled(bool) = 0;
     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 setForceCompositingMode(bool) = 0;
-    virtual void setFullScreenEnabled(bool) = 0;
     virtual void setGestureTapHighlightEnabled(bool) = 0;
     virtual void setHyperlinkAuditingEnabled(bool) = 0;
     virtual void setIgnoreMainFrameOverflowHiddenQuirk(bool) = 0;
@@ -133,7 +132,6 @@
     virtual void setMainFrameResizesAreOrientationChanges(bool) = 0;
     virtual void setMaxTouchPoints(int) = 0;
     virtual void setMediaPlaybackRequiresUserGesture(bool) = 0;
-    virtual void setMediaFullscreenRequiresUserGesture(bool) = 0;
     virtual void setMinimumAccelerated2dCanvasSize(int) = 0;
     virtual void setMinimumFontSize(int) = 0;
     virtual void setMinimumLogicalFontSize(int) = 0;
@@ -200,6 +198,10 @@
     virtual void setWideViewportQuirkEnabled(bool) = 0;
     virtual void setXSSAuditorEnabled(bool) = 0;
 
+    // FIXME: Remove these unused settings.
+    virtual void setFixedPositionCreatesStackingContext(bool) { }
+    virtual void setFullScreenEnabled(bool) { }
+
 protected:
     ~WebSettings() { }
 };
diff --git a/public/web/WebTestingSupport.h b/public/web/WebTestingSupport.h
index 5d3ace8..33f316a 100644
--- a/public/web/WebTestingSupport.h
+++ b/public/web/WebTestingSupport.h
@@ -27,15 +27,14 @@
 #define WebTestingSupport_h
 
 #include "../platform/WebCommon.h"
+#include "WebFrame.h"
 
 namespace blink {
 
-class WebFrame;
-
 class WebTestingSupport {
 public:
-    BLINK_EXPORT static void injectInternalsObject(WebFrame*);
-    BLINK_EXPORT static void resetInternalsObject(WebFrame*);
+    BLINK_EXPORT static void injectInternalsObject(WebLocalFrame*);
+    BLINK_EXPORT static void resetInternalsObject(WebLocalFrame*);
 };
 
 }
diff --git a/public/web/WebView.h b/public/web/WebView.h
index 5d5495c..1c872a9 100644
--- a/public/web/WebView.h
+++ b/public/web/WebView.h
@@ -150,6 +150,7 @@
 
     // Runs beforeunload handlers for the current page, returning false if
     // any handler suppressed unloading.
+    // OBSOLETE; DO NOT USE. Call it on WebFrame instead.
     virtual bool dispatchBeforeUnloadEvent() = 0;
 
     // Runs unload handlers for the current page.
@@ -461,12 +462,6 @@
     // Cancels an active fling, returning true if a fling was active.
     virtual bool endActiveFlingAnimation() = 0;
 
-    virtual bool setEditableSelectionOffsets(int start, int end) = 0;
-    virtual bool setCompositionFromExistingText(int compositionStart, int compositionEnd, const WebVector<WebCompositionUnderline>& underlines) = 0;
-    virtual void extendSelectionAndDelete(int before, int after) = 0;
-
-    virtual bool isSelectionEditable() const = 0;
-
     virtual void setShowPaintRects(bool) = 0;
     virtual void setShowFPSCounter(bool) = 0;
     virtual void setContinuousPaintingEnabled(bool) = 0;
diff --git a/public/web/WebViewClient.h b/public/web/WebViewClient.h
index 1a193b5..42e6f46 100644
--- a/public/web/WebViewClient.h
+++ b/public/web/WebViewClient.h
@@ -39,6 +39,7 @@
 #include "WebDragOperation.h"
 #include "WebFileChooserCompletion.h"
 #include "WebFileChooserParams.h"
+#include "WebFrame.h"
 #include "WebNavigatorContentUtilsClient.h"
 #include "WebPageVisibilityState.h"
 #include "WebPopupType.h"
@@ -58,7 +59,6 @@
 class WebExternalPopupMenu;
 class WebExternalPopupMenuClient;
 class WebFileChooserCompletion;
-class WebFrame;
 class WebGeolocationClient;
 class WebGeolocationService;
 class WebGestureEvent;
@@ -102,7 +102,7 @@
     // could be fulfilled.  The client should not load the request.
     // The policy parameter indicates how the new view will be displayed in
     // WebWidgetClient::show.
-    virtual WebView* createView(WebFrame* creator,
+    virtual WebView* createView(WebLocalFrame* creator,
                                 const WebURLRequest& request,
                                 const WebWindowFeatures& features,
                                 const WebString& name,
@@ -135,7 +135,7 @@
     // non-null, then it selects a particular frame, including its
     // children, to print.  Otherwise, the main frame and its children
     // should be printed.
-    virtual void printPage(WebFrame*) { }
+    virtual void printPage(WebLocalFrame*) { }
 
     // Called to retrieve the provider of desktop notifications.
     virtual WebNotificationPresenter* notificationPresenter() { return 0; }
@@ -146,16 +146,6 @@
     // will never be called.
     virtual bool enumerateChosenDirectory(const WebString& path, WebFileChooserCompletion*) { return false; }
 
-    // Navigational --------------------------------------------------------
-
-    // These notifications bracket any loading that occurs in the WebView.
-    virtual void didStartLoading(bool toDifferentDocument) { }
-    virtual void didStopLoading() { }
-
-    // Notification that some progress was made loading the current page.
-    // loadProgress is a value between 0 (nothing loaded) and 1.0 (frame fully
-    // loaded).
-    virtual void didChangeLoadProgress(WebFrame*, double loadProgress) { }
 
     // Editing -------------------------------------------------------------
 
@@ -219,13 +209,13 @@
     // Displays a modal alert dialog containing the given message.  Returns
     // once the user dismisses the dialog.
     virtual void runModalAlertDialog(
-        WebFrame*, const WebString& message) { }
+        WebLocalFrame*, const WebString& message) { }
 
     // Displays a modal confirmation dialog with the given message as
     // description and OK/Cancel choices.  Returns true if the user selects
     // 'OK' or false otherwise.
     virtual bool runModalConfirmDialog(
-        WebFrame*, const WebString& message) { return false; }
+        WebLocalFrame*, const WebString& message) { return false; }
 
     // Displays a modal input dialog with the given message as description
     // and OK/Cancel choices.  The input field is pre-filled with
@@ -233,7 +223,7 @@
     // otherwise.  Upon returning true, actualValue contains the value of
     // the input field.
     virtual bool runModalPromptDialog(
-        WebFrame*, const WebString& message, const WebString& defaultValue,
+        WebLocalFrame*, const WebString& message, const WebString& defaultValue,
         WebString* actualValue) { return false; }
 
     // Displays a modal confirmation dialog containing the given message as
@@ -241,7 +231,7 @@
     // to proceed with closing the view.  Returns true if the user selects
     // 'OK' or false otherwise.
     virtual bool runModalBeforeUnloadDialog(
-        WebFrame*, const WebString& message) { return true; }
+        WebLocalFrame*, const WebString& message) { return true; }
 
 
     // UI ------------------------------------------------------------------
@@ -256,7 +246,7 @@
     virtual void setKeyboardFocusURL(const WebURL&) { }
 
     // Called when a drag-n-drop operation should begin.
-    virtual void startDragging(WebFrame*, const WebDragData&, WebDragOperationsMask, const WebImage&, const WebPoint& dragImageOffset) { }
+    virtual void startDragging(WebLocalFrame*, const WebDragData&, WebDragOperationsMask, const WebImage&, const WebPoint& dragImageOffset) { }
 
     // Called to determine if drag-n-drop operations may initiate a page
     // navigation.
diff --git a/public/web/mac/WebInputEventFactory.h b/public/web/mac/WebInputEventFactory.h
index 5aad96d..d09c32a 100644
--- a/public/web/mac/WebInputEventFactory.h
+++ b/public/web/mac/WebInputEventFactory.h
@@ -53,7 +53,9 @@
     BLINK_EXPORT static WebKeyboardEvent keyboardEvent(NSEvent*);
     BLINK_EXPORT static WebKeyboardEvent keyboardEvent(wchar_t character, int modifiers, double timeStampSeconds);
     BLINK_EXPORT static WebMouseEvent mouseEvent(NSEvent*, NSView*);
+    // TODO(erikchen): Remove this method once chrome has been updated to use the method with 4 parameters.
     BLINK_EXPORT static WebMouseWheelEvent mouseWheelEvent(NSEvent*, NSView*);
+    BLINK_EXPORT static WebMouseWheelEvent mouseWheelEvent(NSEvent*, NSView*, bool canRubberbandLeft, bool canRubberbandRight);
     BLINK_EXPORT static WebGestureEvent gestureEvent(NSEvent *, NSView *);
     BLINK_EXPORT static bool isSystemKeyEvent(const WebKeyboardEvent&);
 };
diff --git a/public/web/mac/WebSubstringUtil.h b/public/web/mac/WebSubstringUtil.h
index 13b1547..730036d 100644
--- a/public/web/mac/WebSubstringUtil.h
+++ b/public/web/mac/WebSubstringUtil.h
@@ -32,13 +32,11 @@
 #define WebSubstringUtil_h
 
 #include "../../platform/WebCommon.h"
+#include "public/web/WebFrame.h"
 
 namespace blink {
-class WebFrame;
-class WebRange;
 class WebView;
 struct WebPoint;
-struct WebRect;
 }
 
 #if __OBJC__
@@ -61,7 +59,7 @@
 
     // Returns an autoreleased NSAttributedString that is a substring of the
     // Frame at the given range, or nil on error.
-    BLINK_EXPORT static NSAttributedString* attributedSubstringInRange(WebFrame*,
+    BLINK_EXPORT static NSAttributedString* attributedSubstringInRange(WebLocalFrame*,
         size_t location,
         size_t length);
 };
diff --git a/public/web/win/WebFontRendering.h b/public/web/win/WebFontRendering.h
new file mode 100644
index 0000000..cb02595
--- /dev/null
+++ b/public/web/win/WebFontRendering.h
@@ -0,0 +1,20 @@
+// Copyright 2014 Google Inc. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WebFontRendering_h
+#define WebFontRendering_h
+
+#include "public/platform/WebCommon.h"
+
+namespace blink {
+
+class WebFontRendering {
+public:
+    BLINK_EXPORT static void setUseDirectWrite(bool);
+    BLINK_EXPORT static void setUseSubpixelPositioning(bool);
+};
+
+} // namespace blink
+
+#endif
