diff --git a/DEPS b/DEPS
index a660b30..25040a008 100644
--- a/DEPS
+++ b/DEPS
@@ -43,7 +43,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'v8_revision': '8e49b3ef63f17f28c1f6ea9f83011f361227350b',
+  'v8_revision': '9c51453ce0a6f1d93b45c2557c7011c8968a4176',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling swarming_client
   # and whatever else without interference from each other.
diff --git a/build/android/pylib/gtest/gtest_config.py b/build/android/pylib/gtest/gtest_config.py
index 35401c90..91c98d3 100644
--- a/build/android/pylib/gtest/gtest_config.py
+++ b/build/android/pylib/gtest/gtest_config.py
@@ -41,7 +41,7 @@
     'ui_android_unittests',
     'ui_base_unittests',
     'ui_touch_selection_unittests',
-    'unit_tests',
+    'unit_tests_apk',
     'webkit_unit_tests',
 ]
 
diff --git a/chrome/browser/chromeos/arc/arc_policy_bridge.cc b/chrome/browser/chromeos/arc/arc_policy_bridge.cc
index 84ab6407..5ad15000 100644
--- a/chrome/browser/chromeos/arc/arc_policy_bridge.cc
+++ b/chrome/browser/chromeos/arc/arc_policy_bridge.cc
@@ -152,6 +152,10 @@
   arc_bridge_service()->RemoveObserver(this);
 }
 
+void ArcPolicyBridge::OverrideIsManagedForTesting(bool is_managed) {
+  is_managed_ = is_managed;
+}
+
 void ArcPolicyBridge::OnPolicyInstanceReady() {
   VLOG(1) << "ArcPolicyBridge::OnPolicyInstanceReady";
   if (policy_service_ == nullptr) {
@@ -177,6 +181,10 @@
 
 void ArcPolicyBridge::GetPolicies(const GetPoliciesCallback& callback) {
   VLOG(1) << "ArcPolicyBridge::GetPolicies";
+  if (!is_managed_) {
+    callback.Run(mojo::String(nullptr));
+    return;
+  }
   const policy::PolicyNamespace policy_namespace(policy::POLICY_DOMAIN_CHROME,
                                                  std::string());
   const policy::PolicyMap& policy_map =
@@ -198,9 +206,10 @@
       user_manager::UserManager::Get()->GetPrimaryUser();
   Profile* const profile =
       chromeos::ProfileHelper::Get()->GetProfileByUser(primary_user);
-  policy_service_ =
-      policy::ProfilePolicyConnectorFactory::GetForBrowserContext(profile)
-          ->policy_service();
+  auto profile_policy_connector =
+      policy::ProfilePolicyConnectorFactory::GetForBrowserContext(profile);
+  policy_service_ = profile_policy_connector->policy_service();
+  is_managed_ = profile_policy_connector->IsManaged();
 }
 
 }  // namespace arc
diff --git a/chrome/browser/chromeos/arc/arc_policy_bridge.h b/chrome/browser/chromeos/arc/arc_policy_bridge.h
index 4464bb2..caf04f2 100644
--- a/chrome/browser/chromeos/arc/arc_policy_bridge.h
+++ b/chrome/browser/chromeos/arc/arc_policy_bridge.h
@@ -27,6 +27,8 @@
                   policy::PolicyService* policy_service);
   ~ArcPolicyBridge() override;
 
+  void OverrideIsManagedForTesting(bool is_managed);
+
   // ArcBridgeService::Observer overrides.
   void OnPolicyInstanceReady() override;
   void OnPolicyInstanceClosed() override;
@@ -44,6 +46,7 @@
 
   mojo::Binding<PolicyHost> binding_;
   policy::PolicyService* policy_service_ = nullptr;
+  bool is_managed_ = false;
 
   DISALLOW_COPY_AND_ASSIGN(ArcPolicyBridge);
 };
diff --git a/chrome/browser/chromeos/arc/arc_policy_bridge_unittest.cc b/chrome/browser/chromeos/arc/arc_policy_bridge_unittest.cc
index 1c4b4a2..4b3f7f1 100644
--- a/chrome/browser/chromeos/arc/arc_policy_bridge_unittest.cc
+++ b/chrome/browser/chromeos/arc/arc_policy_bridge_unittest.cc
@@ -30,6 +30,7 @@
     bridge_service_.reset(new FakeArcBridgeService());
     policy_bridge_.reset(
         new ArcPolicyBridge(bridge_service_.get(), &policy_service_));
+    policy_bridge_->OverrideIsManagedForTesting(true);
 
     EXPECT_CALL(policy_service_,
                 GetPolicies(policy::PolicyNamespace(
@@ -70,6 +71,11 @@
   DISALLOW_COPY_AND_ASSIGN(ArcPolicyBridgeTest);
 };
 
+TEST_F(ArcPolicyBridgeTest, UnmanagedTest) {
+  policy_bridge()->OverrideIsManagedForTesting(false);
+  policy_bridge()->GetPolicies(PolicyStringCallback(nullptr));
+}
+
 TEST_F(ArcPolicyBridgeTest, EmptyPolicyTest) {
   // No policy is set, result should be empty.
   policy_bridge()->GetPolicies(PolicyStringCallback("{}"));
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_tasks.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_tasks.cc
index 6431e9e..3e7c03f 100644
--- a/chrome/browser/chromeos/extensions/file_manager/private_api_tasks.cc
+++ b/chrome/browser/chromeos/extensions/file_manager/private_api_tasks.cc
@@ -192,11 +192,12 @@
 }
 
 void FileManagerPrivateInternalGetFileTasksFunction::OnFileTasksListed(
-    const std::vector<file_manager::file_tasks::FullTaskDescriptor>& tasks) {
+    std::unique_ptr<std::vector<file_manager::file_tasks::FullTaskDescriptor>>
+        tasks) {
   // Convert the tasks into JSON compatible objects.
   using api::file_manager_private::FileTask;
   std::vector<FileTask> results;
-  for (const file_manager::file_tasks::FullTaskDescriptor& task : tasks) {
+  for (const file_manager::file_tasks::FullTaskDescriptor& task : *tasks) {
     FileTask converted;
     converted.task_id =
         file_manager::file_tasks::TaskDescriptorToId(task.task_descriptor());
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_tasks.h b/chrome/browser/chromeos/extensions/file_manager/private_api_tasks.h
index 112d25b..3f951a9 100644
--- a/chrome/browser/chromeos/extensions/file_manager/private_api_tasks.h
+++ b/chrome/browser/chromeos/extensions/file_manager/private_api_tasks.h
@@ -68,7 +68,8 @@
       std::unique_ptr<std::set<base::FilePath>> path_directory_set);
 
   void OnFileTasksListed(
-      const std::vector<file_manager::file_tasks::FullTaskDescriptor>& tasks);
+      std::unique_ptr<std::vector<file_manager::file_tasks::FullTaskDescriptor>>
+          tasks);
 
   std::unique_ptr<app_file_handler_util::IsDirectoryCollector>
       is_directory_collector_;
diff --git a/chrome/browser/chromeos/file_manager/file_tasks.cc b/chrome/browser/chromeos/file_manager/file_tasks.cc
index 88fb033..fb7b554 100644
--- a/chrome/browser/chromeos/file_manager/file_tasks.cc
+++ b/chrome/browser/chromeos/file_manager/file_tasks.cc
@@ -19,6 +19,7 @@
 #include "chrome/browser/chromeos/file_manager/file_browser_handlers.h"
 #include "chrome/browser/chromeos/file_manager/fileapi_util.h"
 #include "chrome/browser/chromeos/file_manager/open_util.h"
+#include "chrome/browser/extensions/api/file_handlers/mime_util.h"
 #include "chrome/browser/extensions/extension_tab_util.h"
 #include "chrome/browser/extensions/extension_util.h"
 #include "chrome/browser/profiles/profile.h"
@@ -140,6 +141,38 @@
   return false;
 }
 
+void FindArcTasks(Profile* profile,
+                  const std::vector<extensions::EntryInfo>& entries,
+                  std::unique_ptr<std::vector<FullTaskDescriptor>> result_list,
+                  const FindTasksCallback& callback) {
+  // TODO(kinaba): implement.
+  callback.Run(std::move(result_list));
+}
+
+void ExecuteByArcAfterMimeTypesCollected(
+    Profile* profile,
+    const TaskDescriptor& task,
+    const std::vector<FileSystemURL>& file_urls,
+    const FileTaskFinishedCallback& done,
+    extensions::app_file_handler_util::MimeTypeCollector* mime_collector,
+    std::unique_ptr<std::vector<std::string>> mime_types) {
+  // TODO(kinaba): implement.
+  NOTIMPLEMENTED();
+  done.Run(extensions::api::file_manager_private::TASK_RESULT_FAILED);
+}
+
+void PostProcessFoundTasks(
+    Profile* profile,
+    const std::vector<extensions::EntryInfo>& entries,
+    const FindTasksCallback& callback,
+    std::unique_ptr<std::vector<FullTaskDescriptor>> result_list) {
+  // Google documents can only be handled by internal handlers.
+  if (ContainsGoogleDocument(entries))
+    KeepOnlyFileManagerInternalTasks(result_list.get());
+  ChooseAndSetDefaultTask(*profile->GetPrefs(), entries, result_list.get());
+  callback.Run(std::move(result_list));
+}
+
 }  // namespace
 
 FullTaskDescriptor::FullTaskDescriptor(
@@ -275,9 +308,15 @@
                      const TaskDescriptor& task,
                      const std::vector<FileSystemURL>& file_urls,
                      const FileTaskFinishedCallback& done) {
+  // ARC apps needs mime types for launching. Retrieve them first.
   if (task.task_type == TASK_TYPE_ARC_APP) {
-    NOTIMPLEMENTED();
-    return false;
+    extensions::app_file_handler_util::MimeTypeCollector* mime_collector =
+        new extensions::app_file_handler_util::MimeTypeCollector(profile);
+    mime_collector->CollectForURLs(
+        file_urls,
+        base::Bind(&ExecuteByArcAfterMimeTypesCollected, profile, task,
+                   file_urls, done, base::Owned(mime_collector)));
+    return true;
   }
 
   // drive::FileTaskExecutor is responsible to handle drive tasks.
@@ -525,29 +564,26 @@
                          const std::vector<GURL>& file_urls,
                          const FindTasksCallback& callback) {
   DCHECK(profile);
-  std::vector<FullTaskDescriptor> result_list;
+  std::unique_ptr<std::vector<FullTaskDescriptor>> result_list(
+      new std::vector<FullTaskDescriptor>);
 
   // Find Drive app tasks, if the drive app registry is present.
   if (drive_app_registry)
-    FindDriveAppTasks(*drive_app_registry, entries, &result_list);
+    FindDriveAppTasks(*drive_app_registry, entries, result_list.get());
 
   // Find and append file handler tasks. We know there aren't duplicates
   // because Drive apps and platform apps are entirely different kinds of
   // tasks.
-  FindFileHandlerTasks(profile, entries, &result_list);
+  FindFileHandlerTasks(profile, entries, result_list.get());
 
   // Find and append file browser handler tasks. We know there aren't
   // duplicates because "file_browser_handlers" and "file_handlers" shouldn't
   // be used in the same manifest.json.
-  FindFileBrowserHandlerTasks(profile, file_urls, &result_list);
+  FindFileBrowserHandlerTasks(profile, file_urls, result_list.get());
 
-  // Google documents can only be handled by internal handlers.
-  if (ContainsGoogleDocument(entries))
-    KeepOnlyFileManagerInternalTasks(&result_list);
-
-  ChooseAndSetDefaultTask(*profile->GetPrefs(), entries, &result_list);
-
-  callback.Run(result_list);
+  // Find and append ARC handler tasks.
+  FindArcTasks(profile, entries, std::move(result_list),
+               base::Bind(&PostProcessFoundTasks, profile, entries, callback));
 }
 
 void ChooseAndSetDefaultTask(const PrefService& pref_service,
diff --git a/chrome/browser/chromeos/file_manager/file_tasks.h b/chrome/browser/chromeos/file_manager/file_tasks.h
index 66dd4fc0..7207051 100644
--- a/chrome/browser/chromeos/file_manager/file_tasks.h
+++ b/chrome/browser/chromeos/file_manager/file_tasks.h
@@ -111,6 +111,7 @@
 #ifndef CHROME_BROWSER_CHROMEOS_FILE_MANAGER_FILE_TASKS_H_
 #define CHROME_BROWSER_CHROMEOS_FILE_MANAGER_FILE_TASKS_H_
 
+#include <memory>
 #include <set>
 #include <string>
 #include <vector>
@@ -289,7 +290,8 @@
     std::vector<FullTaskDescriptor>* result_list);
 
 // Callback function type for FindAllTypesOfTasks.
-typedef base::Callback<void(const std::vector<FullTaskDescriptor>& result)>
+typedef base::Callback<void(
+    std::unique_ptr<std::vector<FullTaskDescriptor>> result)>
     FindTasksCallback;
 
 // Finds all types (drive, file handlers, file browser handlers) of
diff --git a/chrome/browser/chromeos/file_manager/file_tasks_unittest.cc b/chrome/browser/chromeos/file_manager/file_tasks_unittest.cc
index a15b91e..afb46b328 100644
--- a/chrome/browser/chromeos/file_manager/file_tasks_unittest.cc
+++ b/chrome/browser/chromeos/file_manager/file_tasks_unittest.cc
@@ -455,8 +455,8 @@
 
    private:
     void OnReply(std::vector<FullTaskDescriptor>* out,
-                 const std::vector<FullTaskDescriptor>& result) {
-      *out = result;
+                 std::unique_ptr<std::vector<FullTaskDescriptor>> result) {
+      *out = *result;
       run_loop_.Quit();
     }
 
diff --git a/chrome/browser/chromeos/file_manager/open_util.cc b/chrome/browser/chromeos/file_manager/open_util.cc
index 81d7252..49f8a09 100644
--- a/chrome/browser/chromeos/file_manager/open_util.cc
+++ b/chrome/browser/chromeos/file_manager/open_util.cc
@@ -77,11 +77,11 @@
     Profile* profile,
     const GURL& url,
     const platform_util::OpenOperationCallback& callback,
-    const std::vector<file_tasks::FullTaskDescriptor>& tasks) {
+    std::unique_ptr<std::vector<file_tasks::FullTaskDescriptor>> tasks) {
   // Select a default handler. If a default handler is not available, select
   // a non-generic file handler.
   const file_tasks::FullTaskDescriptor* chosen_task = nullptr;
-  for (const auto& task : tasks) {
+  for (const auto& task : *tasks) {
     if (!task.is_generic_file_handler()) {
       chosen_task = &task;
       if (task.is_default())
diff --git a/chrome/browser/extensions/api/instance_id/instance_id_apitest.cc b/chrome/browser/extensions/api/instance_id/instance_id_apitest.cc
index 2709a73b..63a46743 100644
--- a/chrome/browser/extensions/api/instance_id/instance_id_apitest.cc
+++ b/chrome/browser/extensions/api/instance_id/instance_id_apitest.cc
@@ -5,7 +5,6 @@
 #include <memory>
 #include <utility>
 
-#include "base/base_switches.h"
 #include "base/macros.h"
 #include "base/run_loop.h"
 #include "chrome/browser/extensions/api/instance_id/instance_id_api.h"
@@ -42,7 +41,6 @@
 
  protected:
   void SetUpOnMainThread() override;
-  void SetUpCommandLine(base::CommandLine* command_line) override;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(InstanceIDApiTest);
@@ -58,14 +56,6 @@
   ExtensionApiTest::SetUpOnMainThread();
 }
 
-void InstanceIDApiTest::SetUpCommandLine(base::CommandLine* command_line) {
-  ExtensionApiTest::SetUpCommandLine(command_line);
-
-  // Makes sure InstanceID is enabled for testing.
-  command_line->AppendSwitchASCII(
-       switches::kForceFieldTrials, "InstanceID/Enabled/");
-}
-
 IN_PROC_BROWSER_TEST_F(InstanceIDApiTest, GetID) {
   ASSERT_TRUE(RunExtensionTest("instance_id/get_id"));
 }
diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc
index 630f239..9eec60fa 100644
--- a/chrome/browser/prerender/prerender_browsertest.cc
+++ b/chrome/browser/prerender/prerender_browsertest.cc
@@ -326,6 +326,27 @@
   DISALLOW_COPY_AND_ASSIGN(ChannelDestructionWatcher);
 };
 
+// A navigation observer to wait until WebContents is destroyed.
+class WebContentsDestructionObserver : public WebContentsObserver {
+ public:
+  explicit WebContentsDestructionObserver(WebContents* web_contents)
+      : WebContentsObserver(web_contents) {}
+
+  // Waits for destruction of the observed WebContents.
+  void Wait() {
+    loop_.Run();
+  }
+
+  // WebContentsObserver implementation:
+  void WebContentsDestroyed() override {
+    loop_.Quit();
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(WebContentsDestructionObserver);
+  base::RunLoop loop_;
+};
+
 // A navigation observer to wait on either a new load or a swap of a
 // WebContents. On swap, if the new WebContents is still loading, wait for that
 // load to complete as well. Note that the load must begin after the observer is
@@ -3074,7 +3095,9 @@
 }
 
 // Checks that when a prerendered page is swapped in to a referring page, the
-// unload handlers on the referring page are executed.
+// unload handlers on the referring page are executed and its WebContents is
+// destroyed.
+// TODO(pasko): A similar test for BeforeUnload. See http://crbug.com/600693
 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderUnload) {
   // Matches URL in prerender_loader_with_unload.html.
   const GURL unload_url("http://unload-url.test");
@@ -3088,8 +3111,10 @@
 
   set_loader_path("/prerender/prerender_loader_with_unload.html");
   PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_USED, 1);
+  WebContentsDestructionObserver destruction_observer(GetActiveWebContents());
   NavigateToDestURL();
   unload_counter.WaitForCount(1);
+  destruction_observer.Wait();
 }
 
 // Checks that a hanging unload on the referring page of a prerender swap does
diff --git a/chrome/browser/prerender/prerender_manager.cc b/chrome/browser/prerender/prerender_manager.cc
index 3bc6d9c..17bb6d91 100644
--- a/chrome/browser/prerender/prerender_manager.cc
+++ b/chrome/browser/prerender/prerender_manager.cc
@@ -144,11 +144,6 @@
     ScheduleWebContentsForDeletion(false);
   }
 
-  void SwappedOut(WebContents* source) override {
-    DCHECK_EQ(tab_.get(), source);
-    ScheduleWebContentsForDeletion(false);
-  }
-
   bool ShouldSuppressDialogs(WebContents* source) override {
     // Use this as a proxy for getting statistics on how often we fail to honor
     // the beforeunload event.
diff --git a/chrome/browser/ui/views/apps/app_info_dialog/OWNERS b/chrome/browser/ui/views/apps/app_info_dialog/OWNERS
deleted file mode 100644
index c1a46c70..0000000
--- a/chrome/browser/ui/views/apps/app_info_dialog/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-sashab@chromium.org
diff --git a/components/cronet/android/java/src/org/chromium/net/CronetLibraryLoader.java b/components/cronet/android/java/src/org/chromium/net/CronetLibraryLoader.java
index 59d9b32..0ce0b5430 100644
--- a/components/cronet/android/java/src/org/chromium/net/CronetLibraryLoader.java
+++ b/components/cronet/android/java/src/org/chromium/net/CronetLibraryLoader.java
@@ -17,24 +17,23 @@
  */
 @JNINamespace("cronet")
 class CronetLibraryLoader {
-    // Synchronize initialization.
+    /**
+     * Synchronize access to sInitTaskPosted and initialization routine.
+     */
     private static final Object sLoadLock = new Object();
     private static final String TAG = "CronetLibraryLoader";
-    // Has library loading commenced?  Setting guarded by sLoadLock.
-    private static volatile boolean sInitStarted = false;
-    // Has ensureMainThreadInitialized() completed?  Only accessed on main thread.
-    private static boolean sMainThreadInitDone = false;
+    private static boolean sInitTaskPosted = false;
 
     /**
      * Ensure that native library is loaded and initialized. Can be called from
      * any thread, the load and initialization is performed on main thread.
      */
-    static void ensureInitialized(final Context context, final CronetEngine.Builder builder) {
+    public static void ensureInitialized(
+            final Context context, final CronetEngine.Builder builder) {
         synchronized (sLoadLock) {
-            if (sInitStarted) {
+            if (sInitTaskPosted) {
                 return;
             }
-            sInitStarted = true;
             builder.loadLibrary();
             if (!Version.CRONET_VERSION.equals(nativeGetCronetVersion())) {
                 throw new RuntimeException(String.format(
@@ -49,7 +48,7 @@
             // Init native Chromium CronetEngine on Main UI thread.
             Runnable task = new Runnable() {
                 public void run() {
-                    ensureInitializedOnMainThread(context);
+                    initOnMainThread(context);
                 }
             };
             // Run task immediately or post it to the UI thread.
@@ -60,20 +59,11 @@
                 // to other tasks posted to the main thread.
                 new Handler(Looper.getMainLooper()).post(task);
             }
+            sInitTaskPosted = true;
         }
     }
 
-    /**
-     * Ensure that the main thread initialization has completed. Can only be called from
-     * the main thread. Ensures that the NetworkChangeNotifier is initialzied and the
-     * main thread native MessageLoop is initialized.
-     */
-    static void ensureInitializedOnMainThread(Context context) {
-        assert sInitStarted;
-        assert Looper.getMainLooper() == Looper.myLooper();
-        if (sMainThreadInitDone) {
-            return;
-        }
+    private static void initOnMainThread(final Context context) {
         NetworkChangeNotifier.init(context);
         // Registers to always receive network notifications. Note
         // that this call is fine for Cronet because Cronet
@@ -86,7 +76,6 @@
         // the undesired initial network change observer notification, which
         // will cause active requests to fail with ERR_NETWORK_CHANGED.
         nativeCronetInitOnMainThread();
-        sMainThreadInitDone = true;
     }
 
     // Native methods are implemented in cronet_library_loader.cc.
diff --git a/components/cronet/android/java/src/org/chromium/net/CronetUrlRequestContext.java b/components/cronet/android/java/src/org/chromium/net/CronetUrlRequestContext.java
index 1c4140c..9fd00597 100644
--- a/components/cronet/android/java/src/org/chromium/net/CronetUrlRequestContext.java
+++ b/components/cronet/android/java/src/org/chromium/net/CronetUrlRequestContext.java
@@ -76,7 +76,7 @@
             new ObserverList<RequestFinishedListener>();
 
     @UsedByReflection("CronetEngine.java")
-    public CronetUrlRequestContext(final CronetEngine.Builder builder) {
+    public CronetUrlRequestContext(CronetEngine.Builder builder) {
         CronetLibraryLoader.ensureInitialized(builder.getContext(), builder);
         nativeSetMinLogLevel(getLoggingLevel());
         synchronized (mLock) {
@@ -91,7 +91,6 @@
         Runnable task = new Runnable() {
             @Override
             public void run() {
-                CronetLibraryLoader.ensureInitializedOnMainThread(builder.getContext());
                 synchronized (mLock) {
                     // mUrlRequestContextAdapter is guaranteed to exist until
                     // initialization on main and network threads completes and
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestContextTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestContextTest.java
index 5fbfcbf..5353b8a 100644
--- a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestContextTest.java
+++ b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestContextTest.java
@@ -1125,30 +1125,4 @@
             assertTrue(loader.wasCalled());
         }
     }
-
-    // Creates a CronetEngine on another thread and then one on the main thread.  This shouldn't
-    // crash.
-    @SmallTest
-    @Feature({"Cronet"})
-    public void testThreadedStartup() throws Exception {
-        final ConditionVariable otherThreadDone = new ConditionVariable();
-        final ConditionVariable uiThreadDone = new ConditionVariable();
-        new Handler(Looper.getMainLooper()).post(new Runnable() {
-            public void run() {
-                final CronetEngine.Builder builder =
-                        new CronetEngine.Builder(getContext()).setLibraryName("cronet_tests");
-                new Thread() {
-                    public void run() {
-                        CronetEngine cronetEngine = builder.build();
-                        otherThreadDone.open();
-                        cronetEngine.shutdown();
-                    }
-                }.start();
-                otherThreadDone.block();
-                builder.build().shutdown();
-                uiThreadDone.open();
-            }
-        });
-        assertTrue(uiThreadDone.block(1000));
-    }
 }
diff --git a/components/gcm_driver/gcm_driver_desktop_unittest.cc b/components/gcm_driver/gcm_driver_desktop_unittest.cc
index c7a2b0c..5f66622 100644
--- a/components/gcm_driver/gcm_driver_desktop_unittest.cc
+++ b/components/gcm_driver/gcm_driver_desktop_unittest.cc
@@ -11,7 +11,6 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/location.h"
 #include "base/macros.h"
-#include "base/metrics/field_trial.h"
 #include "base/run_loop.h"
 #include "base/strings/string_util.h"
 #include "base/test/test_simple_task_runner.h"
@@ -167,7 +166,6 @@
   TestingPrefServiceSimple prefs_;
   base::MessageLoopForUI message_loop_;
   base::Thread io_thread_;
-  base::FieldTrialList field_trial_list_;
   std::unique_ptr<GCMDriverDesktop> driver_;
   std::unique_ptr<FakeGCMAppHandler> gcm_app_handler_;
   std::unique_ptr<FakeGCMConnectionObserver> gcm_connection_observer_;
@@ -187,7 +185,6 @@
 
 GCMDriverTest::GCMDriverTest()
     : io_thread_("IOThread"),
-      field_trial_list_(NULL),
       registration_result_(GCMClient::UNKNOWN_ERROR),
       send_result_(GCMClient::UNKNOWN_ERROR),
       unregistration_result_(GCMClient::UNKNOWN_ERROR) {
@@ -950,9 +947,6 @@
   GCMDriverTest::SetUp();
 
   url_fetcher_factory_.set_remove_fetcher_on_delete(true);
-
-  // Turn on all-user support.
-  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("GCM", "Enabled"));
 }
 
 void GCMChannelStatusSyncerTest::CompleteGCMChannelStatusRequest(
diff --git a/components/gcm_driver/instance_id/instance_id_driver.cc b/components/gcm_driver/instance_id/instance_id_driver.cc
index c4c89ae..1e3ee9e 100644
--- a/components/gcm_driver/instance_id/instance_id_driver.cc
+++ b/components/gcm_driver/instance_id/instance_id_driver.cc
@@ -5,6 +5,7 @@
 #include "components/gcm_driver/instance_id/instance_id_driver.h"
 
 #include "base/metrics/field_trial.h"
+#include "base/strings/string_util.h"
 #include "build/build_config.h"
 #include "components/gcm_driver/gcm_driver.h"
 #include "components/gcm_driver/instance_id/instance_id.h"
@@ -13,14 +14,15 @@
 
 namespace {
 const char kInstanceIDFieldTrialName[] = "InstanceID";
-const char kInstanceIDFieldTrialEnabledGroupName[] = "Enabled";
+const char kInstanceIDFieldTrialDisabledGroupPrefix[] = "Disabled";
 }  // namespace
 
 // static
 bool InstanceIDDriver::IsInstanceIDEnabled() {
   std::string group_name =
       base::FieldTrialList::FindFullName(kInstanceIDFieldTrialName);
-  return group_name == kInstanceIDFieldTrialEnabledGroupName;
+  return !base::StartsWith(group_name, kInstanceIDFieldTrialDisabledGroupPrefix,
+                           base::CompareCase::INSENSITIVE_ASCII);
 }
 
 InstanceIDDriver::InstanceIDDriver(gcm::GCMDriver* gcm_driver)
diff --git a/content/browser/frame_host/frame_navigation_entry.cc b/content/browser/frame_host/frame_navigation_entry.cc
index a6fc6d9..90293581 100644
--- a/content/browser/frame_host/frame_navigation_entry.cc
+++ b/content/browser/frame_host/frame_navigation_entry.cc
@@ -8,14 +8,10 @@
 
 namespace content {
 
-FrameNavigationEntry::FrameNavigationEntry(int frame_tree_node_id)
-    : frame_tree_node_id_(frame_tree_node_id),
-      item_sequence_number_(-1),
-      document_sequence_number_(-1),
-      post_id_(-1) {}
+FrameNavigationEntry::FrameNavigationEntry()
+    : item_sequence_number_(-1), document_sequence_number_(-1), post_id_(-1) {}
 
 FrameNavigationEntry::FrameNavigationEntry(
-    int frame_tree_node_id,
     const std::string& frame_unique_name,
     int64_t item_sequence_number,
     int64_t document_sequence_number,
@@ -24,8 +20,7 @@
     const Referrer& referrer,
     const std::string& method,
     int64_t post_id)
-    : frame_tree_node_id_(frame_tree_node_id),
-      frame_unique_name_(frame_unique_name),
+    : frame_unique_name_(frame_unique_name),
       item_sequence_number_(item_sequence_number),
       document_sequence_number_(document_sequence_number),
       site_instance_(std::move(site_instance)),
@@ -38,7 +33,7 @@
 }
 
 FrameNavigationEntry* FrameNavigationEntry::Clone() const {
-  FrameNavigationEntry* copy = new FrameNavigationEntry(frame_tree_node_id_);
+  FrameNavigationEntry* copy = new FrameNavigationEntry();
   copy->UpdateEntry(frame_unique_name_, item_sequence_number_,
                     document_sequence_number_, site_instance_.get(), url_,
                     referrer_, page_state_, method_, post_id_);
@@ -67,17 +62,14 @@
 
 void FrameNavigationEntry::set_item_sequence_number(
     int64_t item_sequence_number) {
-  // Once assigned, the item sequence number shouldn't change.
-  DCHECK(item_sequence_number_ == -1 ||
-         item_sequence_number_ == item_sequence_number);
+  // TODO(creis): Assert that this does not change after being assigned, once
+  // location.replace is classified as NEW_PAGE rather than EXISTING_PAGE.
+  // Same for document sequence number.  See https://crbug.com/596707.
   item_sequence_number_ = item_sequence_number;
 }
 
 void FrameNavigationEntry::set_document_sequence_number(
     int64_t document_sequence_number) {
-  // Once assigned, the document sequence number shouldn't change.
-  DCHECK(document_sequence_number_ == -1 ||
-         document_sequence_number_ == document_sequence_number);
   document_sequence_number_ = document_sequence_number;
 }
 
diff --git a/content/browser/frame_host/frame_navigation_entry.h b/content/browser/frame_host/frame_navigation_entry.h
index e93eb010..256cd26 100644
--- a/content/browser/frame_host/frame_navigation_entry.h
+++ b/content/browser/frame_host/frame_navigation_entry.h
@@ -15,7 +15,8 @@
 
 namespace content {
 
-// Represents a session history item for a particular frame.
+// Represents a session history item for a particular frame.  It is matched with
+// corresponding FrameTreeNodes using unique name (or by the root position).
 //
 // This class is refcounted and can be shared across multiple NavigationEntries.
 // For now, it is owned by a single NavigationEntry and only tracks the main
@@ -28,9 +29,8 @@
 class CONTENT_EXPORT FrameNavigationEntry
     : public base::RefCounted<FrameNavigationEntry> {
  public:
-  explicit FrameNavigationEntry(int frame_tree_node_id);
-  FrameNavigationEntry(int frame_tree_node_id,
-                       const std::string& frame_unique_name,
+  FrameNavigationEntry();
+  FrameNavigationEntry(const std::string& frame_unique_name,
                        int64_t item_sequence_number,
                        int64_t document_sequence_number,
                        scoped_refptr<SiteInstanceImpl> site_instance,
@@ -54,17 +54,6 @@
                    const std::string& method,
                    int64_t post_id);
 
-  // The ID of the FrameTreeNode this entry is for.  -1 for the main frame,
-  // since we don't always know the FrameTreeNode ID when creating the overall
-  // NavigationEntry.
-  // TODO(creis): Consider removing |frame_tree_node_id| in favor of
-  // |frame_unique_name|, if we can move unique name computation to the browser
-  // process.
-  int frame_tree_node_id() const { return frame_tree_node_id_; }
-  void set_frame_tree_node_id(int frame_tree_node_id) {
-    frame_tree_node_id_ = frame_tree_node_id;
-  }
-
   // The unique name of the frame this entry is for.  This is a stable name for
   // the frame based on its position in the tree and relation to other named
   // frames, which does not change after cross-process navigations or restores.
@@ -129,7 +118,6 @@
   // WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
 
   // See the accessors above for descriptions.
-  int frame_tree_node_id_;
   std::string frame_unique_name_;
   int64_t item_sequence_number_;
   int64_t document_sequence_number_;
diff --git a/content/browser/frame_host/frame_tree_node.h b/content/browser/frame_host/frame_tree_node.h
index d3818580..a8a9eed 100644
--- a/content/browser/frame_host/frame_tree_node.h
+++ b/content/browser/frame_host/frame_tree_node.h
@@ -98,6 +98,10 @@
     return replication_state_.name;
   }
 
+  const std::string& unique_name() const {
+    return replication_state_.unique_name;
+  }
+
   size_t child_count() const {
     return children_.size();
   }
diff --git a/content/browser/frame_host/navigation_controller_impl.cc b/content/browser/frame_host/navigation_controller_impl.cc
index 9b3fd5e..7446d51 100644
--- a/content/browser/frame_host/navigation_controller_impl.cc
+++ b/content/browser/frame_host/navigation_controller_impl.cc
@@ -736,7 +736,7 @@
       if (SiteIsolationPolicy::UseSubframeNavigationEntries()) {
         entry = GetLastCommittedEntry()->Clone();
         entry->SetPageID(-1);
-        entry->AddOrUpdateFrameEntry(node, "", -1, -1, nullptr, params.url,
+        entry->AddOrUpdateFrameEntry(node, -1, -1, nullptr, params.url,
                                      params.referrer, PageState(), "GET", -1);
       }
     }
@@ -977,7 +977,7 @@
   // NavigationEntry.
   // TODO(creis): Have the renderer classify location.replace as
   // did_create_new_entry for all cases and eliminate this special case.  This
-  // requires updating several test expectations.  See https://crbug.com/317872.
+  // requires updating several test expectations.  See https://crbug.com/596707.
   if (!rfh->GetParent() && GetLastCommittedEntry() &&
       GetLastCommittedEntry()->site_instance() != rfh->GetSiteInstance() &&
       params.should_replace_current_entry) {
@@ -1190,6 +1190,13 @@
   frame_entry->set_method(params.method);
   frame_entry->set_post_id(params.post_id);
 
+  // Update the ISN and DSN in case this was a location.replace, which can cause
+  // them to change.
+  // TODO(creis): Classify location.replace as NEW_PAGE instead of EXISTING_PAGE
+  // in https://crbug.com/596707.
+  frame_entry->set_item_sequence_number(params.item_sequence_number);
+  frame_entry->set_document_sequence_number(params.document_sequence_number);
+
   // The redirected to page should not inherit the favicon from the previous
   // page.
   if (ui::PageTransitionIsRedirect(params.transition))
@@ -1268,19 +1275,18 @@
 
   std::unique_ptr<NavigationEntryImpl> new_entry;
   if (SiteIsolationPolicy::UseSubframeNavigationEntries()) {
-    // Make sure new_entry takes ownership of frame_entry in a scoped_refptr.
-    FrameNavigationEntry* frame_entry = new FrameNavigationEntry(
-        rfh->frame_tree_node()->frame_tree_node_id(), params.frame_unique_name,
-        params.item_sequence_number, params.document_sequence_number,
-        rfh->GetSiteInstance(), params.url, params.referrer, params.method,
-        params.post_id);
+    // Make sure we don't leak frame_entry if new_entry doesn't take ownership.
+    scoped_refptr<FrameNavigationEntry> frame_entry(new FrameNavigationEntry(
+        params.frame_unique_name, params.item_sequence_number,
+        params.document_sequence_number, rfh->GetSiteInstance(), params.url,
+        params.referrer, params.method, params.post_id));
     new_entry = GetLastCommittedEntry()->CloneAndReplace(rfh->frame_tree_node(),
-                                                         frame_entry);
+                                                         frame_entry.get());
 
-    // TODO(creis): Make sure the last committed entry always has the subframe
-    // entry to replace, and CHECK(frame_entry->HasOneRef).  For now, we might
-    // not find the entry to replace, and new_entry will be deleted when it goes
-    // out of scope.  See https://crbug.com/522193.
+    // TODO(creis): Update this to add the frame_entry if we can't find the one
+    // to replace, which can happen due to a unique name change.  See
+    // https://crbug.com/607205.  For now, frame_entry will be deleted when it
+    // goes out of scope if it doesn't get used.
   } else {
     new_entry = GetLastCommittedEntry()->Clone();
   }
@@ -1332,10 +1338,9 @@
     // it may be a "history auto" case where we update an existing one.
     NavigationEntryImpl* last_committed = GetLastCommittedEntry();
     last_committed->AddOrUpdateFrameEntry(
-        rfh->frame_tree_node(), params.frame_unique_name,
-        params.item_sequence_number, params.document_sequence_number,
-        rfh->GetSiteInstance(), params.url, params.referrer, params.page_state,
-        params.method, params.post_id);
+        rfh->frame_tree_node(), params.item_sequence_number,
+        params.document_sequence_number, rfh->GetSiteInstance(), params.url,
+        params.referrer, params.page_state, params.method, params.post_id);
 
     // Cross-process subframe navigations may leave a pending entry around.
     // Clear it if it's actually for the subframe.
diff --git a/content/browser/frame_host/navigation_controller_impl_browsertest.cc b/content/browser/frame_host/navigation_controller_impl_browsertest.cc
index d369b414..8fc6ec9 100644
--- a/content/browser/frame_host/navigation_controller_impl_browsertest.cc
+++ b/content/browser/frame_host/navigation_controller_impl_browsertest.cc
@@ -729,7 +729,7 @@
   // ... and replace it with a failed load.
   // TODO(creis): Make this be NEW_PAGE along with the other location.replace
   // cases.  There isn't much impact to having this be EXISTING_PAGE for now.
-  // See https://crbug.com/317872.
+  // See https://crbug.com/596707.
   {
     FrameNavigateParamsCapturer capturer(root);
     NavigateToURLAndReplace(shell(), error_url);
@@ -967,7 +967,7 @@
   {
     // location.replace().
     // TODO(creis): Change this to be NEW_PAGE with replacement in
-    // https://crbug.com/317872.
+    // https://crbug.com/596707.
     FrameNavigateParamsCapturer capturer(root);
     GURL frame_url(embedded_test_server()->GetURL(
         "/navigation_controller/simple_page_1.html"));
@@ -2267,6 +2267,9 @@
     EXPECT_EQ(0U, entry4->root_node()->children.size());
   }
 
+  // Inject a JS value so that we can check for it later.
+  EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), "foo=3;"));
+
   // 7. Go back again, to the data URL in the nested iframe.
   {
     TestNavigationObserver back_load_observer(shell()->web_contents());
@@ -2298,6 +2301,15 @@
     EXPECT_EQ(0U, entry3->root_node()->children.size());
   }
 
+  // Verify that we did not reload the main frame. See https://crbug.com/586234.
+  {
+    int value = 0;
+    EXPECT_TRUE(ExecuteScriptAndExtractInt(root->current_frame_host(),
+                                           "domAutomationController.send(foo)",
+                                           &value));
+    EXPECT_EQ(3, value);
+  }
+
   // 8. Go back again, to the data URL in the first subframe.
   {
     TestNavigationObserver back_load_observer(shell()->web_contents());
@@ -2693,6 +2705,150 @@
   EXPECT_EQ(named_subframe_name, foo_subframe_entry->frame_unique_name());
 }
 
+// Ensure we don't crash when cloning a named window.  This happened in
+// https://crbug.com/603245 because neither the FrameTreeNode ID nor the name of
+// the cloned window matched the root FrameNavigationEntry.
+IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, CloneNamedWindow) {
+  // Start on an initial page.
+  GURL url_1(embedded_test_server()->GetURL(
+      "/navigation_controller/simple_page_1.html"));
+  EXPECT_TRUE(NavigateToURL(shell(), url_1));
+
+  // Name the window.
+  EXPECT_TRUE(ExecuteScript(shell()->web_contents(), "window.name = 'foo';"));
+
+  // Navigate it.
+  GURL url_2(embedded_test_server()->GetURL(
+      "/navigation_controller/simple_page_2.html"));
+  EXPECT_TRUE(NavigateToURL(shell(), url_2));
+
+  // Clone the tab and load the page.
+  std::unique_ptr<WebContentsImpl> new_tab(
+      static_cast<WebContentsImpl*>(shell()->web_contents()->Clone()));
+  NavigationController& new_controller = new_tab->GetController();
+  EXPECT_TRUE(new_controller.IsInitialNavigation());
+  EXPECT_TRUE(new_controller.NeedsReload());
+  {
+    TestNavigationObserver clone_observer(new_tab.get());
+    new_controller.LoadIfNecessary();
+    clone_observer.Wait();
+  }
+}
+
+// Ensure we don't crash when going back in a cloned named window.  This
+// happened in https://crbug.com/603245 because neither the FrameTreeNode ID nor
+// the name of the cloned window matched the root FrameNavigationEntry.
+IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest,
+                       CloneAndGoBackWithNamedWindow) {
+  // Start on an initial page.
+  GURL url_1(embedded_test_server()->GetURL(
+      "/navigation_controller/simple_page_1.html"));
+  EXPECT_TRUE(NavigateToURL(shell(), url_1));
+
+  // Name the window.
+  EXPECT_TRUE(ExecuteScript(shell()->web_contents(), "window.name = 'foo';"));
+
+  // Navigate it.
+  GURL url_2(embedded_test_server()->GetURL(
+      "/navigation_controller/simple_page_2.html"));
+  EXPECT_TRUE(NavigateToURL(shell(), url_2));
+
+  // Clear the name.
+  EXPECT_TRUE(ExecuteScript(shell()->web_contents(), "window.name = '';"));
+
+  // Navigate it again.
+  EXPECT_TRUE(NavigateToURL(shell(), url_1));
+
+  // Clone the tab and load the page.
+  std::unique_ptr<WebContentsImpl> new_tab(
+      static_cast<WebContentsImpl*>(shell()->web_contents()->Clone()));
+  NavigationController& new_controller = new_tab->GetController();
+  EXPECT_TRUE(new_controller.IsInitialNavigation());
+  EXPECT_TRUE(new_controller.NeedsReload());
+  {
+    TestNavigationObserver clone_observer(new_tab.get());
+    new_controller.LoadIfNecessary();
+    clone_observer.Wait();
+  }
+
+  // Go back.
+  {
+    TestNavigationObserver back_load_observer(new_tab.get());
+    new_controller.GoBack();
+    back_load_observer.Wait();
+  }
+}
+
+// Ensures that FrameNavigationEntries for dynamically added iframes can be
+// found correctly when cloning them during a transfer.  If we don't look for
+// them based on unique name in AddOrUpdateFrameEntry, the FrameTreeNode ID
+// mismatch will cause us to create a second FrameNavigationEntry during the
+// transfer.  Later, we'll find the wrong FrameNavigationEntry (the earlier one
+// from the clone which still has a PageState), and this will cause the renderer
+// to crash in NavigateInternal because the PageState is present but the page_id
+// is -1 (similar to https://crbug.com/568703).  See https://crbug.com/568768.
+IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest,
+                       FrameNavigationEntry_RepeatCreatedFrame) {
+  NavigationControllerImpl& controller = static_cast<NavigationControllerImpl&>(
+      shell()->web_contents()->GetController());
+
+  // 1. Navigate the main frame.
+  GURL url(embedded_test_server()->GetURL(
+      "/navigation_controller/page_with_links.html"));
+  EXPECT_TRUE(NavigateToURL(shell(), url));
+  FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents())
+                            ->GetFrameTree()
+                            ->root();
+  SiteInstance* main_site_instance =
+      root->current_frame_host()->GetSiteInstance();
+
+  // 2. Add a cross-site subframe.
+  GURL frame_url(embedded_test_server()->GetURL(
+      "foo.com", "/navigation_controller/simple_page_1.html"));
+  std::string script = "var iframe = document.createElement('iframe');"
+                       "iframe.src = '" + frame_url.spec() + "';"
+                       "document.body.appendChild(iframe);";
+  {
+    LoadCommittedCapturer capturer(shell()->web_contents());
+    EXPECT_TRUE(ExecuteScript(root->current_frame_host(), script));
+    capturer.Wait();
+    EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type());
+  }
+
+  FrameTreeNode* subframe = root->child_at(0);
+  if (AreAllSitesIsolatedForTesting()) {
+    EXPECT_NE(main_site_instance,
+              subframe->current_frame_host()->GetSiteInstance());
+  }
+  if (SiteIsolationPolicy::UseSubframeNavigationEntries()) {
+    FrameNavigationEntry* subframe_entry =
+        controller.GetLastCommittedEntry()->GetFrameEntry(subframe);
+    EXPECT_EQ(frame_url, subframe_entry->url());
+  }
+
+  // 3. Reload the main frame.
+  {
+    FrameNavigateParamsCapturer capturer(root);
+    controller.Reload(false);
+    capturer.Wait();
+    EXPECT_EQ(ui::PAGE_TRANSITION_RELOAD, capturer.params().transition);
+    EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type);
+    EXPECT_FALSE(capturer.details().is_in_page);
+  }
+
+  // 4. Add the iframe again.
+  {
+    LoadCommittedCapturer capturer(shell()->web_contents());
+    EXPECT_TRUE(ExecuteScript(root->current_frame_host(), script));
+    capturer.Wait();
+    EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type());
+  }
+  if (AreAllSitesIsolatedForTesting()) {
+    EXPECT_NE(main_site_instance,
+              root->child_at(0)->current_frame_host()->GetSiteInstance());
+  }
+}
+
 // Verifies that item sequence numbers and document sequence numbers update
 // properly for main frames and subframes.
 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest,
diff --git a/content/browser/frame_host/navigation_controller_impl_unittest.cc b/content/browser/frame_host/navigation_controller_impl_unittest.cc
index 6257838d8..6246334 100644
--- a/content/browser/frame_host/navigation_controller_impl_unittest.cc
+++ b/content/browser/frame_host/navigation_controller_impl_unittest.cc
@@ -2176,9 +2176,10 @@
   navigation_entry_committed_counter_ = 0;
 
   // Prereq: add a subframe with an initial auto-subframe navigation.
+  std::string unique_name("uniqueName0");
   main_test_rfh()->OnCreateChildFrame(
       process()->GetNextRoutingID(), blink::WebTreeScopeType::Document,
-      std::string(), "uniqueName0", blink::WebSandboxFlags::None,
+      std::string(), unique_name, blink::WebSandboxFlags::None,
       blink::WebFrameOwnerProperties());
   TestRenderFrameHost* subframe = static_cast<TestRenderFrameHost*>(
       contents()->GetFrameTree()->root()->child_at(0)->current_frame_host());
@@ -2187,6 +2188,7 @@
     FrameHostMsg_DidCommitProvisionalLoad_Params params;
     params.page_id = 1;
     params.nav_entry_id = 0;
+    params.frame_unique_name = unique_name;
     params.did_create_new_entry = false;
     params.url = subframe_url;
     params.transition = ui::PAGE_TRANSITION_AUTO_SUBFRAME;
@@ -2207,6 +2209,7 @@
   FrameHostMsg_DidCommitProvisionalLoad_Params params;
   params.page_id = 2;
   params.nav_entry_id = 0;
+  params.frame_unique_name = unique_name;
   params.did_create_new_entry = true;
   params.url = url2;
   params.transition = ui::PAGE_TRANSITION_MANUAL_SUBFRAME;
@@ -2260,9 +2263,10 @@
   navigation_entry_committed_counter_ = 0;
 
   // Add a subframe and navigate it.
+  std::string unique_name0("uniqueName0");
   main_test_rfh()->OnCreateChildFrame(
       process()->GetNextRoutingID(), blink::WebTreeScopeType::Document,
-      std::string(), "uniqueName0", blink::WebSandboxFlags::None,
+      std::string(), unique_name0, blink::WebSandboxFlags::None,
       blink::WebFrameOwnerProperties());
   TestRenderFrameHost* subframe = static_cast<TestRenderFrameHost*>(
       contents()->GetFrameTree()->root()->child_at(0)->current_frame_host());
@@ -2271,6 +2275,7 @@
     FrameHostMsg_DidCommitProvisionalLoad_Params params;
     params.page_id = 1;
     params.nav_entry_id = 0;
+    params.frame_unique_name = unique_name0;
     params.did_create_new_entry = false;
     params.url = url2;
     params.transition = ui::PAGE_TRANSITION_AUTO_SUBFRAME;
@@ -2307,9 +2312,10 @@
   }
 
   // Add a second subframe and navigate.
+  std::string unique_name1("uniqueName1");
   main_test_rfh()->OnCreateChildFrame(
       process()->GetNextRoutingID(), blink::WebTreeScopeType::Document,
-      std::string(), "uniqueName1", blink::WebSandboxFlags::None,
+      std::string(), unique_name1, blink::WebSandboxFlags::None,
       blink::WebFrameOwnerProperties());
   TestRenderFrameHost* subframe2 = static_cast<TestRenderFrameHost*>(
       contents()->GetFrameTree()->root()->child_at(1)->current_frame_host());
@@ -2318,6 +2324,7 @@
     FrameHostMsg_DidCommitProvisionalLoad_Params params;
     params.page_id = 1;
     params.nav_entry_id = 0;
+    params.frame_unique_name = unique_name1;
     params.did_create_new_entry = false;
     params.url = url3;
     params.transition = ui::PAGE_TRANSITION_AUTO_SUBFRAME;
@@ -2354,9 +2361,10 @@
   }
 
   // Add a nested subframe and navigate.
+  std::string unique_name2("uniqueName2");
   subframe->OnCreateChildFrame(process()->GetNextRoutingID(),
                                blink::WebTreeScopeType::Document, std::string(),
-                               "uniqueName2", blink::WebSandboxFlags::None,
+                               unique_name2, blink::WebSandboxFlags::None,
                                blink::WebFrameOwnerProperties());
   TestRenderFrameHost* subframe3 =
       static_cast<TestRenderFrameHost*>(contents()
@@ -2370,6 +2378,7 @@
     FrameHostMsg_DidCommitProvisionalLoad_Params params;
     params.page_id = 1;
     params.nav_entry_id = 0;
+    params.frame_unique_name = unique_name2;
     params.did_create_new_entry = false;
     params.url = url4;
     params.transition = ui::PAGE_TRANSITION_AUTO_SUBFRAME;
@@ -2421,9 +2430,10 @@
   navigation_entry_committed_counter_ = 0;
 
   // Prereq: add a subframe with an initial auto-subframe navigation.
+  std::string unique_name("uniqueName0");
   main_test_rfh()->OnCreateChildFrame(
       process()->GetNextRoutingID(), blink::WebTreeScopeType::Document,
-      std::string(), "uniqueName0", blink::WebSandboxFlags::None,
+      std::string(), unique_name, blink::WebSandboxFlags::None,
       blink::WebFrameOwnerProperties());
   TestRenderFrameHost* subframe = static_cast<TestRenderFrameHost*>(
       contents()->GetFrameTree()->root()->child_at(0)->current_frame_host());
@@ -2436,6 +2446,7 @@
     FrameHostMsg_DidCommitProvisionalLoad_Params params;
     params.page_id = 1;
     params.nav_entry_id = 0;
+    params.frame_unique_name = unique_name;
     params.did_create_new_entry = false;
     params.url = subframe_url;
     params.transition = ui::PAGE_TRANSITION_AUTO_SUBFRAME;
@@ -2458,6 +2469,7 @@
   FrameHostMsg_DidCommitProvisionalLoad_Params params;
   params.page_id = 2;
   params.nav_entry_id = 0;
+  params.frame_unique_name = unique_name;
   params.did_create_new_entry = true;
   params.url = url2;
   params.transition = ui::PAGE_TRANSITION_MANUAL_SUBFRAME;
@@ -2491,6 +2503,7 @@
   const GURL url3("http://foo3");
   params.page_id = 3;
   params.nav_entry_id = 0;
+  params.frame_unique_name = unique_name;
   params.did_create_new_entry = true;
   params.url = url3;
   params.transition = ui::PAGE_TRANSITION_MANUAL_SUBFRAME;
@@ -2519,6 +2532,7 @@
   controller.GoBack();
   params.page_id = 2;
   params.nav_entry_id = entry2->GetUniqueID();
+  params.frame_unique_name = unique_name;
   params.did_create_new_entry = false;
   params.url = url2;
   params.transition = ui::PAGE_TRANSITION_AUTO_SUBFRAME;
@@ -2538,6 +2552,7 @@
   controller.GoBack();
   params.page_id = 1;
   params.nav_entry_id = entry1->GetUniqueID();
+  params.frame_unique_name = unique_name;
   params.did_create_new_entry = false;
   params.url = subframe_url;
   params.transition = ui::PAGE_TRANSITION_AUTO_SUBFRAME;
@@ -3885,9 +3900,10 @@
   EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0);
 
   // Add and navigate a subframe that would normally count as in-page.
+  std::string unique_name("uniqueName0");
   main_test_rfh()->OnCreateChildFrame(
       process()->GetNextRoutingID(), blink::WebTreeScopeType::Document,
-      std::string(), "uniqueName0", blink::WebSandboxFlags::None,
+      std::string(), unique_name, blink::WebSandboxFlags::None,
       blink::WebFrameOwnerProperties());
   TestRenderFrameHost* subframe = static_cast<TestRenderFrameHost*>(
       contents()->GetFrameTree()->root()->child_at(0)->current_frame_host());
@@ -3895,6 +3911,7 @@
   FrameHostMsg_DidCommitProvisionalLoad_Params params;
   params.page_id = 0;
   params.nav_entry_id = 0;
+  params.frame_unique_name = unique_name;
   params.did_create_new_entry = false;
   params.url = subframe_url;
   params.transition = ui::PAGE_TRANSITION_AUTO_SUBFRAME;
@@ -4053,9 +4070,10 @@
 
   // Send a subframe update from the first page, as if one had just
   // automatically loaded. Auto subframes don't increment the page ID.
+  std::string unique_name("uniqueName0");
   main_test_rfh()->OnCreateChildFrame(
       process()->GetNextRoutingID(), blink::WebTreeScopeType::Document,
-      std::string(), "uniqueName0", blink::WebSandboxFlags::None,
+      std::string(), unique_name, blink::WebSandboxFlags::None,
       blink::WebFrameOwnerProperties());
   TestRenderFrameHost* subframe = static_cast<TestRenderFrameHost*>(
       contents()->GetFrameTree()->root()->child_at(0)->current_frame_host());
@@ -4063,6 +4081,7 @@
   FrameHostMsg_DidCommitProvisionalLoad_Params params;
   params.page_id = controller.GetLastCommittedEntry()->GetPageID();
   params.nav_entry_id = 0;
+  params.frame_unique_name = unique_name;
   params.did_create_new_entry = false;
   params.url = url1_sub;
   params.transition = ui::PAGE_TRANSITION_AUTO_SUBFRAME;
diff --git a/content/browser/frame_host/navigation_entry_impl.cc b/content/browser/frame_host/navigation_entry_impl.cc
index 87405be..eccc064 100644
--- a/content/browser/frame_host/navigation_entry_impl.cc
+++ b/content/browser/frame_host/navigation_entry_impl.cc
@@ -39,7 +39,7 @@
 void RecursivelyGenerateFrameEntries(const ExplodedFrameState& state,
                                      NavigationEntryImpl::TreeNode* node) {
   node->frame_entry = new FrameNavigationEntry(
-      -1, UTF16ToUTF8(state.target.string()), state.item_sequence_number,
+      UTF16ToUTF8(state.target.string()), state.item_sequence_number,
       state.document_sequence_number, nullptr, GURL(state.url_string.string()),
       Referrer(GURL(state.referrer.string()), state.referrer_policy), "GET",
       -1);
@@ -100,22 +100,23 @@
 NavigationEntryImpl::TreeNode::~TreeNode() {
 }
 
-bool NavigationEntryImpl::TreeNode::MatchesFrame(
-    FrameTreeNode* frame_tree_node) const {
-  if (frame_tree_node->frame_tree_node_id() ==
-      frame_entry->frame_tree_node_id())
-    return true;
+bool NavigationEntryImpl::TreeNode::MatchesFrame(FrameTreeNode* frame_tree_node,
+                                                 bool is_root_tree_node) const {
+  // The root node is for the main frame whether the unique name matches or not.
+  if (is_root_tree_node)
+    return frame_tree_node->IsMainFrame();
 
-  // For now, we set the root FNE's FrameTreeNode ID to -1.
-  return frame_tree_node->IsMainFrame() &&
-         frame_entry->frame_tree_node_id() == -1;
+  // Otherwise check the unique name for subframes.
+  return !frame_tree_node->IsMainFrame() &&
+         frame_tree_node->unique_name() == frame_entry->frame_unique_name();
 }
 
 std::unique_ptr<NavigationEntryImpl::TreeNode>
 NavigationEntryImpl::TreeNode::CloneAndReplace(
     FrameTreeNode* frame_tree_node,
-    FrameNavigationEntry* frame_navigation_entry) const {
-  if (frame_tree_node && MatchesFrame(frame_tree_node)) {
+    FrameNavigationEntry* frame_navigation_entry,
+    bool is_root_tree_node) const {
+  if (frame_tree_node && MatchesFrame(frame_tree_node, is_root_tree_node)) {
     // Replace this node in the cloned tree and prune its children.
     return base::WrapUnique(
         new NavigationEntryImpl::TreeNode(frame_navigation_entry));
@@ -129,7 +130,7 @@
   // Recursively clone the children.
   for (auto& child : children) {
     copy->children.push_back(
-        child->CloneAndReplace(frame_tree_node, frame_navigation_entry));
+        child->CloneAndReplace(frame_tree_node, frame_navigation_entry, false));
   }
 
   return copy;
@@ -167,8 +168,7 @@
     const base::string16& title,
     ui::PageTransition transition_type,
     bool is_renderer_initiated)
-    : frame_tree_(new TreeNode(new FrameNavigationEntry(-1,
-                                                        "",
+    : frame_tree_(new TreeNode(new FrameNavigationEntry("",
                                                         -1,
                                                         -1,
                                                         std::move(instance),
@@ -531,8 +531,8 @@
 
   // TODO(creis): Only share the same FrameNavigationEntries if cloning within
   // the same tab.
-  copy->frame_tree_ =
-      frame_tree_->CloneAndReplace(frame_tree_node, frame_navigation_entry);
+  copy->frame_tree_ = frame_tree_->CloneAndReplace(
+      frame_tree_node, frame_navigation_entry, true);
 
   // Copy most state over, unless cleared in ResetForCommit.
   // Don't copy unique_id_, otherwise it won't be unique.
@@ -686,7 +686,6 @@
 
 void NavigationEntryImpl::AddOrUpdateFrameEntry(
     FrameTreeNode* frame_tree_node,
-    const std::string& frame_unique_name,
     int64_t item_sequence_number,
     int64_t document_sequence_number,
     SiteInstanceImpl* site_instance,
@@ -707,12 +706,12 @@
   }
 
   // Now check whether we have a TreeNode for the node itself.
-  int frame_tree_node_id = frame_tree_node->frame_tree_node_id();
+  const std::string& unique_name = frame_tree_node->unique_name();
   for (TreeNode* child : parent_node->children) {
-    if (child->frame_entry->frame_tree_node_id() == frame_tree_node_id) {
+    if (child->frame_entry->frame_unique_name() == unique_name) {
       // Update the existing FrameNavigationEntry (e.g., for replaceState).
       child->frame_entry->UpdateEntry(
-          frame_unique_name, item_sequence_number, document_sequence_number,
+          unique_name, item_sequence_number, document_sequence_number,
           site_instance, url, referrer, page_state, method, post_id);
       return;
     }
@@ -722,8 +721,8 @@
   // Unordered list, since we expect to look up entries by frame sequence number
   // or unique name.
   FrameNavigationEntry* frame_entry = new FrameNavigationEntry(
-      frame_tree_node_id, frame_unique_name, item_sequence_number,
-      document_sequence_number, site_instance, url, referrer, method, post_id);
+      unique_name, item_sequence_number, document_sequence_number,
+      site_instance, url, referrer, method, post_id);
   frame_entry->set_page_state(page_state);
   parent_node->children.push_back(
       new NavigationEntryImpl::TreeNode(frame_entry));
@@ -735,24 +734,6 @@
   return tree_node ? tree_node->frame_entry.get() : nullptr;
 }
 
-FrameNavigationEntry* NavigationEntryImpl::GetFrameEntryByUniqueName(
-    const std::string& unique_name) const {
-  NavigationEntryImpl::TreeNode* node = nullptr;
-  std::queue<NavigationEntryImpl::TreeNode*> work_queue;
-  work_queue.push(root_node());
-  while (!work_queue.empty()) {
-    node = work_queue.front();
-    work_queue.pop();
-    if (node->frame_entry->frame_unique_name() == unique_name)
-      return node->frame_entry.get();
-
-    // Enqueue any children and keep looking.
-    for (auto& child : node->children)
-      work_queue.push(child);
-  }
-  return nullptr;
-}
-
 void NavigationEntryImpl::SetScreenshotPNGData(
     scoped_refptr<base::RefCountedBytes> png_data) {
   screenshot_ = png_data;
@@ -772,12 +753,9 @@
   while (!work_queue.empty()) {
     node = work_queue.front();
     work_queue.pop();
-    if (node->MatchesFrame(frame_tree_node)) {
-      // Only the root TreeNode should have a FTN ID of -1.
-      DCHECK(node->frame_entry->frame_tree_node_id() != -1 ||
-             node == root_node());
+    if (node->MatchesFrame(frame_tree_node, node == root_node()))
       return node;
-    }
+
     // Enqueue any children and keep looking.
     for (auto& child : node->children)
       work_queue.push(child);
diff --git a/content/browser/frame_host/navigation_entry_impl.h b/content/browser/frame_host/navigation_entry_impl.h
index 6614806..2e40e67 100644
--- a/content/browser/frame_host/navigation_entry_impl.h
+++ b/content/browser/frame_host/navigation_entry_impl.h
@@ -37,19 +37,26 @@
     TreeNode(FrameNavigationEntry* frame_entry);
     ~TreeNode();
 
-    // Returns whether this TreeNode corresponds to |frame_tree_node|.
-    bool MatchesFrame(FrameTreeNode* frame_tree_node) const;
+    // Returns whether this TreeNode corresponds to |frame_tree_node|.  If this
+    // is called on the root TreeNode, then |is_root_tree_node| should be true
+    // and we only check if |frame_tree_node| is the main frame.  Otherwise, we
+    // check if the unique name matches.
+    bool MatchesFrame(FrameTreeNode* frame_tree_node,
+                      bool is_root_tree_node) const;
 
     // Recursively makes a deep copy of TreeNode with copies of each of the
     // FrameNavigationEntries in the subtree.  Replaces the TreeNode
     // corresponding to |frame_tree_node| (and all of its children) with a new
     // TreeNode for |frame_navigation_entry|.  Pass nullptr for both parameters
     // to make a complete clone.
+    // |is_root_tree_node| indicates whether this is being called on the root
+    // NavigationEntryImpl::TreeNode.
     // TODO(creis): For --site-per-process, share FrameNavigationEntries between
     // NavigationEntries of the same tab.
     std::unique_ptr<TreeNode> CloneAndReplace(
         FrameTreeNode* frame_tree_node,
-        FrameNavigationEntry* frame_navigation_entry) const;
+        FrameNavigationEntry* frame_navigation_entry,
+        bool is_root_tree_node) const;
 
     // Ref counted pointer that keeps the FrameNavigationEntry alive as long as
     // it is needed by this node's NavigationEntry.
@@ -188,7 +195,6 @@
   // Does nothing if there is no entry already and |url| is about:blank, since
   // that does not count as a real commit.
   void AddOrUpdateFrameEntry(FrameTreeNode* frame_tree_node,
-                             const std::string& frame_unique_name,
                              int64_t item_sequence_number,
                              int64_t document_sequence_number,
                              SiteInstanceImpl* site_instance,
@@ -202,15 +208,6 @@
   // there is one in this NavigationEntry.
   FrameNavigationEntry* GetFrameEntry(FrameTreeNode* frame_tree_node) const;
 
-  // Returns the FrameNavigationEntry corresponding to the frame with the given
-  // |unique_name|, if any. This is useful when the FrameTreeNode cannot be used
-  // to find the entry, such as for a newly created subframe in a history
-  // navigation. Callers should update the FrameTreeNode ID of the entry so that
-  // it can be found with |GetFrameEntry| above.
-  // TODO(creis): Generate or verify the unique_name in the browser process.
-  FrameNavigationEntry* GetFrameEntryByUniqueName(
-      const std::string& unique_name) const;
-
   void set_unique_id(int unique_id) {
     unique_id_ = unique_id;
   }
diff --git a/content/browser/frame_host/navigator_impl.cc b/content/browser/frame_host/navigator_impl.cc
index 0a7b6df..a5ff8a1 100644
--- a/content/browser/frame_host/navigator_impl.cc
+++ b/content/browser/frame_host/navigator_impl.cc
@@ -435,17 +435,14 @@
   if (!entry)
     return false;
 
+  // TODO(creis): Remove unique_name from the IPC, now that we can rely on the
+  // replication state.
+  DCHECK_EQ(render_frame_host->frame_tree_node()->unique_name(), unique_name);
   FrameNavigationEntry* frame_entry =
-      entry->GetFrameEntryByUniqueName(unique_name);
+      entry->GetFrameEntry(render_frame_host->frame_tree_node());
   if (!frame_entry)
     return false;
 
-  // Update the FrameNavigationEntry's FrameTreeNode ID (which is currently the
-  // ID of the old FrameTreeNode that no longer exists) to be the ID of the
-  // newly created frame.
-  frame_entry->set_frame_tree_node_id(
-      render_frame_host->frame_tree_node()->frame_tree_node_id());
-
   return NavigateToEntry(render_frame_host->frame_tree_node(), *frame_entry,
                          *entry, NavigationControllerImpl::NO_RELOAD, false,
                          false);
diff --git a/content/browser/service_worker/service_worker_job_coordinator.cc b/content/browser/service_worker/service_worker_job_coordinator.cc
index 54542b2..916d714 100644
--- a/content/browser/service_worker/service_worker_job_coordinator.cc
+++ b/content/browser/service_worker/service_worker_job_coordinator.cc
@@ -133,7 +133,6 @@
     ServiceWorkerRegistration* registration,
     bool force_bypass_cache) {
   DCHECK(registration);
-  DCHECK(registration->GetNewestVersion());
   job_queues_[registration->pattern()].Push(
       base::WrapUnique<ServiceWorkerRegisterJobBase>(
           new ServiceWorkerRegisterJob(context_, registration,
@@ -148,7 +147,6 @@
     ServiceWorkerProviderHost* provider_host,
     const ServiceWorkerRegisterJob::RegistrationCallback& callback) {
   DCHECK(registration);
-  DCHECK(registration->GetNewestVersion());
   ServiceWorkerRegisterJob* queued_job = static_cast<ServiceWorkerRegisterJob*>(
       job_queues_[registration->pattern()].Push(
           base::WrapUnique<ServiceWorkerRegisterJobBase>(
diff --git a/content/browser/service_worker/service_worker_job_unittest.cc b/content/browser/service_worker/service_worker_job_unittest.cc
index 77438a1..9974961 100644
--- a/content/browser/service_worker/service_worker_job_unittest.cc
+++ b/content/browser/service_worker/service_worker_job_unittest.cc
@@ -1132,30 +1132,32 @@
   EXPECT_TRUE(update_helper->update_found_);
 }
 
-TEST_F(ServiceWorkerJobTest, Update_NewestVersionChanged) {
+// Test that the update job uses the script URL of the newest worker when the
+// job starts, rather than when it is scheduled.
+TEST_F(ServiceWorkerJobTest, Update_ScriptUrlChanged) {
+  // Create a registration with an active version.
   scoped_refptr<ServiceWorkerRegistration> registration =
       RunRegisterJob(GURL("http://www.example.com/one/"),
                      GURL("http://www.example.com/service_worker.js"));
 
-  ServiceWorkerVersion* active_version = registration->active_version();
-
-  // Queue an Update, it should abort when it starts and sees the new version.
+  // Queue an Update. When this runs, it will use the waiting version's script.
   job_coordinator()->Update(registration.get(), false);
 
-  // Add a waiting version with new script.
-  scoped_refptr<ServiceWorkerVersion> version =
-      new ServiceWorkerVersion(registration.get(),
-                               GURL("http://www.example.com/new_worker.js"),
-                               2L /* dummy version id */,
-                               helper_->context()->AsWeakPtr());
+  // Add a waiting version with a new script.
+  GURL new_script("http://www.example.com/new_worker.js");
+  scoped_refptr<ServiceWorkerVersion> version = new ServiceWorkerVersion(
+      registration.get(), new_script, 2L /* dummy version id */,
+      helper_->context()->AsWeakPtr());
   registration->SetWaitingVersion(version);
 
+  // Run the update job.
   base::RunLoop().RunUntilIdle();
 
-  // Verify the registration was not modified by the Update.
-  EXPECT_EQ(active_version, registration->active_version());
-  EXPECT_EQ(version.get(), registration->waiting_version());
-  EXPECT_EQ(NULL, registration->installing_version());
+  // The update job should have created a new version with the new script,
+  // and promoted it to the active version.
+  EXPECT_EQ(new_script, registration->active_version()->script_url());
+  EXPECT_EQ(nullptr, registration->waiting_version());
+  EXPECT_EQ(nullptr, registration->installing_version());
 }
 
 // Test that update succeeds if the incumbent worker was evicted
diff --git a/content/browser/service_worker/service_worker_register_job.cc b/content/browser/service_worker/service_worker_register_job.cc
index 8cd8bd5..0bee03b6 100644
--- a/content/browser/service_worker/service_worker_register_job.cc
+++ b/content/browser/service_worker/service_worker_register_job.cc
@@ -58,7 +58,6 @@
     : context_(context),
       job_type_(UPDATE_JOB),
       pattern_(registration->pattern()),
-      script_url_(registration->GetNewestVersion()->script_url()),
       phase_(INITIAL),
       doom_installing_worker_(false),
       is_promise_resolved_(false),
@@ -126,10 +125,13 @@
 }
 
 bool ServiceWorkerRegisterJob::Equals(ServiceWorkerRegisterJobBase* job) const {
-  if (job->GetType() != GetType())
+  if (job->GetType() != job_type_)
     return false;
   ServiceWorkerRegisterJob* register_job =
       static_cast<ServiceWorkerRegisterJob*>(job);
+  if (job_type_ == UPDATE_JOB)
+    return register_job->pattern_ == pattern_;
+  DCHECK_EQ(REGISTRATION_JOB, job_type_);
   return register_job->pattern_ == pattern_ &&
          register_job->script_url_ == script_url_;
 }
@@ -257,14 +259,16 @@
     return;
   }
 
-  // A previous job may have unregistered or installed a new version to this
-  // registration.
+  // A previous job may have unregistered this registration.
   if (registration()->is_uninstalling() ||
-      registration()->GetNewestVersion()->script_url() != script_url_) {
+      !registration()->GetNewestVersion()) {
     Complete(SERVICE_WORKER_ERROR_NOT_FOUND);
     return;
   }
 
+  DCHECK(script_url_.is_empty());
+  script_url_ = registration()->GetNewestVersion()->script_url();
+
   // TODO(michaeln): If the last update check was less than 24 hours
   // ago, depending on the freshness of the cached worker script we
   // may be able to complete the update job right here.
diff --git a/content/browser/service_worker/service_worker_register_job.h b/content/browser/service_worker/service_worker_register_job.h
index 66c7822..455f3598 100644
--- a/content/browser/service_worker/service_worker_register_job.h
+++ b/content/browser/service_worker/service_worker_register_job.h
@@ -146,7 +146,7 @@
 
   RegistrationJobType job_type_;
   const GURL pattern_;
-  const GURL script_url_;
+  GURL script_url_;
   std::vector<RegistrationCallback> callbacks_;
   Phase phase_;
   Internal internal_;
diff --git a/content/browser/service_worker/service_worker_version.cc b/content/browser/service_worker/service_worker_version.cc
index 0fbeecf..d50415a2 100644
--- a/content/browser/service_worker/service_worker_version.cc
+++ b/content/browser/service_worker/service_worker_version.cc
@@ -305,6 +305,7 @@
   DCHECK_NE(kInvalidServiceWorkerVersionId, version_id);
   DCHECK(context_);
   DCHECK(registration);
+  DCHECK(script_url_.is_valid());
   context_->AddLiveVersion(this);
   embedded_worker_ = context_->embedded_worker_registry()->CreateWorker();
   embedded_worker_->AddListener(this);
diff --git a/content/content_renderer.gypi b/content/content_renderer.gypi
index a9721c8..1ec0132e 100644
--- a/content/content_renderer.gypi
+++ b/content/content_renderer.gypi
@@ -636,6 +636,8 @@
       'renderer/media/canvas_capture_handler.h',
       'renderer/media/html_video_element_capturer_source.cc',
       'renderer/media/html_video_element_capturer_source.h',
+      'renderer/media/image_capture_frame_grabber.cc',
+      'renderer/media/image_capture_frame_grabber.h',
       'renderer/media/media_recorder_handler.cc',
       'renderer/media/media_recorder_handler.h',
       'renderer/media/media_stream.cc',
diff --git a/content/renderer/media/image_capture_frame_grabber.cc b/content/renderer/media/image_capture_frame_grabber.cc
new file mode 100644
index 0000000..af3a5f19
--- /dev/null
+++ b/content/renderer/media/image_capture_frame_grabber.cc
@@ -0,0 +1,121 @@
+// Copyright 2016 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.
+
+#include "content/renderer/media/image_capture_frame_grabber.h"
+
+#include "media/base/bind_to_current_loop.h"
+#include "media/base/video_frame.h"
+#include "media/base/video_util.h"
+#include "skia/ext/platform_canvas.h"
+#include "third_party/WebKit/public/platform/WebCallbacks.h"
+#include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
+#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
+#include "third_party/libyuv/include/libyuv.h"
+#include "third_party/skia/include/core/SkImage.h"
+#include "third_party/skia/include/core/SkSurface.h"
+
+namespace content {
+
+using blink::WebImageCaptureGrabFrameCallbacks;
+
+namespace {
+
+void OnError(std::unique_ptr<WebImageCaptureGrabFrameCallbacks> callbacks) {
+  callbacks->onError();
+}
+
+// This internal method receives a |frame| and converts its pixels into a
+// SkImage via an internal SkSurface and SkPixmap. Alpha channel, if any, is
+// copied.
+void OnVideoFrame(const ImageCaptureFrameGrabber::SkImageDeliverCB& callback,
+                  const scoped_refptr<media::VideoFrame>& frame,
+                  base::TimeTicks /* current_time */) {
+  DCHECK(frame->format() == media::PIXEL_FORMAT_YV12 ||
+         frame->format() == media::PIXEL_FORMAT_I420 ||
+         frame->format() == media::PIXEL_FORMAT_YV12A);
+
+  const SkAlphaType alpha = media::IsOpaque(frame->format())
+                                ? kOpaque_SkAlphaType
+                                : kPremul_SkAlphaType;
+  const SkImageInfo info = SkImageInfo::MakeN32(
+      frame->visible_rect().width(), frame->visible_rect().height(), alpha);
+
+  sk_sp<SkSurface> surface = SkSurface::MakeRaster(info);
+  DCHECK(surface);
+
+  SkPixmap pixmap;
+  if (!skia::GetWritablePixels(surface->getCanvas(), &pixmap)) {
+    DLOG(ERROR) << "Error trying to map SkSurface's pixels";
+    callback.Run(sk_sp<SkImage>());
+    return;
+  }
+
+  libyuv::I420ToARGB(frame->visible_data(media::VideoFrame::kYPlane),
+                     frame->stride(media::VideoFrame::kYPlane),
+                     frame->visible_data(media::VideoFrame::kUPlane),
+                     frame->stride(media::VideoFrame::kUPlane),
+                     frame->visible_data(media::VideoFrame::kVPlane),
+                     frame->stride(media::VideoFrame::kVPlane),
+                     static_cast<uint8*>(pixmap.writable_addr()),
+                     pixmap.width() * 4, pixmap.width(), pixmap.height());
+
+  if (frame->format() == media::PIXEL_FORMAT_YV12A) {
+    DCHECK(!info.isOpaque());
+    // This function copies any plane into the alpha channel of an ARGB image.
+    libyuv::ARGBCopyYToAlpha(frame->visible_data(media::VideoFrame::kAPlane),
+                             frame->stride(media::VideoFrame::kAPlane),
+                             static_cast<uint8*>(pixmap.writable_addr()),
+                             pixmap.width() * 4, pixmap.width(),
+                             pixmap.height());
+  }
+
+  callback.Run(surface->makeImageSnapshot());
+}
+
+}  // anonymous namespace
+
+ImageCaptureFrameGrabber::ImageCaptureFrameGrabber() : weak_factory_(this) {}
+
+ImageCaptureFrameGrabber::~ImageCaptureFrameGrabber() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+}
+
+void ImageCaptureFrameGrabber::grabFrame(
+    blink::WebMediaStreamTrack* track,
+    WebImageCaptureGrabFrameCallbacks* callbacks) {
+  DVLOG(1) << __FUNCTION__;
+  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK(!!callbacks);
+
+  DCHECK(track && !track->isNull() && track->getExtraData());
+  DCHECK_EQ(blink::WebMediaStreamSource::TypeVideo, track->source().getType());
+
+  ScopedWebCallbacks<WebImageCaptureGrabFrameCallbacks> scoped_callbacks =
+      make_scoped_web_callbacks(callbacks, base::Bind(&OnError));
+
+  // ConnectToTrack() must happen on render's Main Thread, whereas VideoFrames
+  // are delivered on a background thread though, so we Bind the callback to our
+  // current thread.
+  MediaStreamVideoSink::ConnectToTrack(
+      *track,
+      base::Bind(&OnVideoFrame, media::BindToCurrentLoop(base::Bind(
+                                    &ImageCaptureFrameGrabber::OnSkImage,
+                                    weak_factory_.GetWeakPtr(),
+                                    base::Passed(&scoped_callbacks)))));
+}
+
+void ImageCaptureFrameGrabber::OnSkImage(
+    ScopedWebCallbacks<WebImageCaptureGrabFrameCallbacks> callbacks,
+    sk_sp<SkImage> image) {
+  DVLOG(1) << __FUNCTION__;
+  DCHECK(thread_checker_.CalledOnValidThread());
+
+  MediaStreamVideoSink::DisconnectFromTrack();
+  if (image)
+    callbacks.PassCallbacks()->onSuccess(image);
+  else
+    callbacks.PassCallbacks()->onError();
+}
+
+}  // namespace content
diff --git a/content/renderer/media/image_capture_frame_grabber.h b/content/renderer/media/image_capture_frame_grabber.h
new file mode 100644
index 0000000..78543e4a
--- /dev/null
+++ b/content/renderer/media/image_capture_frame_grabber.h
@@ -0,0 +1,58 @@
+// Copyright 2016 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 CONTENT_RENDERER_MEDIA_IMAGE_CAPTURE_FRAME_GRABBER_H_
+#define CONTENT_RENDERER_MEDIA_IMAGE_CAPTURE_FRAME_GRABBER_H_
+
+#include "base/compiler_specific.h"
+#include "base/macros.h"
+#include "base/memory/weak_ptr.h"
+#include "base/threading/thread_checker.h"
+#include "content/child/scoped_web_callbacks.h"
+#include "content/common/content_export.h"
+#include "content/public/renderer/media_stream_video_sink.h"
+#include "third_party/WebKit/public/platform/WebImageCaptureFrameGrabber.h"
+
+namespace blink {
+class WebMediaStreamTrack;
+}
+
+namespace media {
+class VideoFrame;
+}
+
+namespace content {
+
+// This class grabs Video Frames from a given Media Stream Video Track, binding
+// a function every time grabFrame() is called. This function receives an
+// incoming VideoFrame on a background thread and converts it into the
+// appropriate SkBitmap which is sent back to OnSkBitmap(). This class is single
+// threaded throughout.
+class CONTENT_EXPORT ImageCaptureFrameGrabber final
+    : NON_EXPORTED_BASE(public blink::WebImageCaptureFrameGrabber),
+      NON_EXPORTED_BASE(public MediaStreamVideoSink) {
+ public:
+  using SkImageDeliverCB = base::Callback<void(sk_sp<SkImage>)>;
+
+  ImageCaptureFrameGrabber();
+  ~ImageCaptureFrameGrabber() override;
+
+  // blink::WebImageCaptureFrameGrabber implementation.
+  void grabFrame(blink::WebMediaStreamTrack* track,
+                 blink::WebImageCaptureGrabFrameCallbacks* callbacks) override;
+
+ private:
+  void OnSkImage(
+      ScopedWebCallbacks<blink::WebImageCaptureGrabFrameCallbacks> callbacks,
+      sk_sp<SkImage> image);
+
+  base::ThreadChecker thread_checker_;
+  base::WeakPtrFactory<ImageCaptureFrameGrabber> weak_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(ImageCaptureFrameGrabber);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_RENDERER_MEDIA_IMAGE_CAPTURE_FRAME_GRABBER_H_
diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer/renderer_blink_platform_impl.cc
index 5a15965..ac93eff 100644
--- a/content/renderer/renderer_blink_platform_impl.cc
+++ b/content/renderer/renderer_blink_platform_impl.cc
@@ -64,6 +64,7 @@
 #include "content/renderer/media/audio_decoder.h"
 #include "content/renderer/media/canvas_capture_handler.h"
 #include "content/renderer/media/html_video_element_capturer_source.h"
+#include "content/renderer/media/image_capture_frame_grabber.h"
 #include "content/renderer/media/media_recorder_handler.h"
 #include "content/renderer/media/renderer_webaudiodevice_impl.h"
 #include "content/renderer/media/renderer_webmidiaccessor_impl.h"
@@ -150,6 +151,7 @@
 using blink::WebGamepad;
 using blink::WebGamepads;
 using blink::WebIDBFactory;
+using blink::WebImageCaptureFrameGrabber;
 using blink::WebMIDIAccessor;
 using blink::WebMediaPlayer;
 using blink::WebMediaRecorderHandler;
@@ -959,6 +961,17 @@
 
 //------------------------------------------------------------------------------
 
+WebImageCaptureFrameGrabber*
+RendererBlinkPlatformImpl::createImageCaptureFrameGrabber() {
+#if defined(ENABLE_WEBRTC)
+  return new ImageCaptureFrameGrabber();
+#else
+  return nullptr;
+#endif  // defined(ENABLE_WEBRTC)
+}
+
+//------------------------------------------------------------------------------
+
 blink::WebSpeechSynthesizer* RendererBlinkPlatformImpl::createSpeechSynthesizer(
     blink::WebSpeechSynthesizerClient* client) {
   return GetContentClient()->renderer()->OverrideSpeechSynthesizer(client);
diff --git a/content/renderer/renderer_blink_platform_impl.h b/content/renderer/renderer_blink_platform_impl.h
index be95c061c..e361e3b 100644
--- a/content/renderer/renderer_blink_platform_impl.h
+++ b/content/renderer/renderer_blink_platform_impl.h
@@ -172,6 +172,7 @@
   void createHTMLVideoElementCapturer(
       blink::WebMediaStream* web_media_stream,
       blink::WebMediaPlayer* web_media_player) override;
+  blink::WebImageCaptureFrameGrabber* createImageCaptureFrameGrabber() override;
   blink::WebGraphicsContext3DProvider* createOffscreenGraphicsContext3DProvider(
       const blink::Platform::ContextAttributes& attributes,
       const blink::WebURL& top_document_web_url,
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 33b3282..94919829 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -1927,6 +1927,7 @@
   // http://crbug.com/99393. <rdar://problem/10949687>
   bool NeedsIOSurfaceReadbackWorkaround();
 
+  bool InitializeCopyTextureCHROMIUM(const char* function_name);
   // Generate a member function prototype for each command in an automated and
   // typesafe way.
 #define GLES2_CMD_OP(name) \
@@ -4473,7 +4474,7 @@
         if (DebugImpl && doing_gpu_trace)
           gpu_tracer_->End(kTraceDecoder);
 
-        if (DebugImpl && debug()) {
+        if (DebugImpl && debug() && !WasContextLost()) {
           GLenum error;
           while ((error = glGetError()) != GL_NO_ERROR) {
             LOG(ERROR) << "[" << logger_.GetLogPrefix() << "] "
@@ -13796,17 +13797,17 @@
     GLboolean unpack_premultiply_alpha,
     GLboolean unpack_unmultiply_alpha) {
   TRACE_EVENT0("gpu", "GLES2DecoderImpl::DoCopyTextureCHROMIUM");
-
+  static const char kFunctionName[] = "glCopyTextureCHROMIUM";
   TextureRef* source_texture_ref = GetTexture(source_id);
   TextureRef* dest_texture_ref = GetTexture(dest_id);
 
-  if (!ValidateCopyTextureCHROMIUMTextures(
-          "glCopyTextureCHROMIUM", source_texture_ref, dest_texture_ref)) {
+  if (!ValidateCopyTextureCHROMIUMTextures(kFunctionName, source_texture_ref,
+                                           dest_texture_ref)) {
     return;
   }
 
   if (!ValidateCopyTextureCHROMIUMInternalFormats(
-          "glCopyTextureCHROMIUM", source_texture_ref, internal_format)) {
+          kFunctionName, source_texture_ref, internal_format)) {
     return;
   }
 
@@ -13840,8 +13841,7 @@
     // Check that this type of texture is allowed.
     if (!texture_manager()->ValidForTarget(source_target, 0,
                                            source_width, source_height, 1)) {
-      LOCAL_SET_GL_ERROR(
-          GL_INVALID_VALUE, "glCopyTextureCHROMIUM", "Bad dimensions");
+      LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, kFunctionName, "Bad dimensions");
       return;
     }
   }
@@ -13852,7 +13852,7 @@
                                &source_internal_format);
 
   if (dest_texture->IsImmutable()) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glCopyTextureCHROMIUM",
+    LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, kFunctionName,
                        "texture is immutable");
     return;
   }
@@ -13860,21 +13860,12 @@
   // Clear the source texture if necessary.
   if (!texture_manager()->ClearTextureLevel(this, source_texture_ref,
                                             source_target, 0)) {
-    LOCAL_SET_GL_ERROR(GL_OUT_OF_MEMORY, "glCopyTextureCHROMIUM",
-                       "dimensions too big");
+    LOCAL_SET_GL_ERROR(GL_OUT_OF_MEMORY, kFunctionName, "dimensions too big");
     return;
   }
 
-  // Defer initializing the CopyTextureCHROMIUMResourceManager until it is
-  // needed because it takes 10s of milliseconds to initialize.
-  if (!copy_texture_CHROMIUM_.get()) {
-    LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glCopyTextureCHROMIUM");
-    copy_texture_CHROMIUM_.reset(new CopyTextureCHROMIUMResourceManager());
-    copy_texture_CHROMIUM_->Initialize(this, features());
-    RestoreCurrentFramebufferBindings();
-    if (LOCAL_PEEK_GL_ERROR("glCopyTextureCHROMIUM") != GL_NO_ERROR)
-      return;
-  }
+  if (!InitializeCopyTextureCHROMIUM(kFunctionName))
+    return;
 
   GLenum dest_type_previous = dest_type;
   GLenum dest_internal_format = internal_format;
@@ -13894,14 +13885,14 @@
       dest_internal_format != internal_format ||
       dest_type_previous != dest_type) {
     // Ensure that the glTexImage2D succeeds.
-    LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glCopyTextureCHROMIUM");
+    LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER(kFunctionName);
     glBindTexture(dest_target, dest_texture->service_id());
     glTexImage2D(dest_target, 0,
                  texture_manager()->AdjustTexInternalFormat(internal_format),
                  source_width, source_height, 0,
                  texture_manager()->AdjustTexFormat(internal_format), dest_type,
                  NULL);
-    GLenum error = LOCAL_PEEK_GL_ERROR("glCopyTextureCHROMIUM");
+    GLenum error = LOCAL_PEEK_GL_ERROR(kFunctionName);
     if (error != GL_NO_ERROR) {
       RestoreCurrentTextureBindings(&state_, dest_target);
       return;
@@ -13967,11 +13958,12 @@
     GLboolean unpack_unmultiply_alpha) {
   TRACE_EVENT0("gpu", "GLES2DecoderImpl::DoCopySubTextureCHROMIUM");
 
+  static const char kFunctionName[] = "glCopySubTextureCHROMIUM";
   TextureRef* source_texture_ref = GetTexture(source_id);
   TextureRef* dest_texture_ref = GetTexture(dest_id);
 
-  if (!ValidateCopyTextureCHROMIUMTextures(
-          "glCopySubTextureCHROMIUM", source_texture_ref, dest_texture_ref)) {
+  if (!ValidateCopyTextureCHROMIUMTextures(kFunctionName, source_texture_ref,
+                                           dest_texture_ref)) {
     return;
   }
 
@@ -13988,8 +13980,7 @@
     source_width = size.width();
     source_height = size.height();
     if (source_width <= 0 || source_height <= 0) {
-      LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopySubTextureCHROMIUM",
-                         "invalid image size");
+      LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, kFunctionName, "invalid image size");
       return;
     }
 
@@ -14003,14 +13994,14 @@
     int32_t max_y;
     if (!SafeAddInt32(x, width, &max_x) || !SafeAddInt32(y, height, &max_y) ||
         x < 0 || y < 0 || max_x > source_width || max_y > source_height) {
-      LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopySubTextureCHROMIUM",
+      LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, kFunctionName,
                          "source texture bad dimensions");
       return;
     }
   } else {
     if (!source_texture->GetLevelSize(source_target, 0,
                                       &source_width, &source_height, nullptr)) {
-      LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopySubTextureCHROMIUM",
+      LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, kFunctionName,
                          "source texture has no level 0");
       return;
     }
@@ -14018,14 +14009,14 @@
     // Check that this type of texture is allowed.
     if (!texture_manager()->ValidForTarget(source_target, 0,
                                            source_width, source_height, 1)) {
-      LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopySubTextureCHROMIUM",
+      LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, kFunctionName,
                          "source texture bad dimensions");
       return;
     }
 
     if (!source_texture->ValidForTexture(source_target, 0, x, y, 0, width,
                                          height, 1)) {
-      LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopySubTextureCHROMIUM",
+      LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, kFunctionName,
                          "source texture bad dimensions.");
       return;
     }
@@ -14041,41 +14032,32 @@
   bool dest_level_defined = dest_texture->GetLevelType(
       dest_target, 0, &dest_type, &dest_internal_format);
   if (!dest_level_defined) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glCopySubTextureCHROMIUM",
+    LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, kFunctionName,
                        "destination texture is not defined");
     return;
   }
   if (!dest_texture->ValidForTexture(dest_target, 0, xoffset,
                                      yoffset, 0, width, height, 1)) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopySubTextureCHROMIUM",
+    LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, kFunctionName,
                        "destination texture bad dimensions.");
     return;
   }
 
-  if (!ValidateCopyTextureCHROMIUMInternalFormats("glCopySubTextureCHROMIUM",
-                                                  source_texture_ref,
-                                                  dest_internal_format)) {
+  if (!ValidateCopyTextureCHROMIUMInternalFormats(
+          kFunctionName, source_texture_ref, dest_internal_format)) {
     return;
   }
 
   // Clear the source texture if necessary.
   if (!texture_manager()->ClearTextureLevel(this, source_texture_ref,
                                             source_target, 0)) {
-    LOCAL_SET_GL_ERROR(GL_OUT_OF_MEMORY, "glCopySubTextureCHROMIUM",
+    LOCAL_SET_GL_ERROR(GL_OUT_OF_MEMORY, kFunctionName,
                        "source texture dimensions too big");
     return;
   }
 
-  // Defer initializing the CopyTextureCHROMIUMResourceManager until it is
-  // needed because it takes 10s of milliseconds to initialize.
-  if (!copy_texture_CHROMIUM_.get()) {
-    LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glCopySubTextureCHROMIUM");
-    copy_texture_CHROMIUM_.reset(new CopyTextureCHROMIUMResourceManager());
-    copy_texture_CHROMIUM_->Initialize(this, features());
-    RestoreCurrentFramebufferBindings();
-    if (LOCAL_PEEK_GL_ERROR("glCopySubTextureCHROMIUM") != GL_NO_ERROR)
-      return;
-  }
+  if (!InitializeCopyTextureCHROMIUM(kFunctionName))
+    return;
 
   int dest_width = 0;
   int dest_height = 0;
@@ -14097,7 +14079,7 @@
       // Otherwise clear part of texture level that is not already cleared.
       if (!texture_manager()->ClearTextureLevel(this, dest_texture_ref,
                                                 dest_target, 0)) {
-        LOCAL_SET_GL_ERROR(GL_OUT_OF_MEMORY, "glCopySubTextureCHROMIUM",
+        LOCAL_SET_GL_ERROR(GL_OUT_OF_MEMORY, kFunctionName,
                            "destination texture dimensions too big");
         return;
       }
@@ -14150,16 +14132,29 @@
       unpack_premultiply_alpha == GL_TRUE, unpack_unmultiply_alpha == GL_TRUE);
 }
 
+bool GLES2DecoderImpl::InitializeCopyTextureCHROMIUM(
+    const char* function_name) {
+  // Defer initializing the CopyTextureCHROMIUMResourceManager until it is
+  // needed because it takes 10s of milliseconds to initialize.
+  if (!copy_texture_CHROMIUM_.get()) {
+    LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER(function_name);
+    copy_texture_CHROMIUM_.reset(new CopyTextureCHROMIUMResourceManager());
+    copy_texture_CHROMIUM_->Initialize(this, features());
+    if (LOCAL_PEEK_GL_ERROR(function_name) != GL_NO_ERROR)
+      return false;
+  }
+  return true;
+}
+
 void GLES2DecoderImpl::DoCompressedCopyTextureCHROMIUM(GLuint source_id,
                                                        GLuint dest_id) {
   TRACE_EVENT0("gpu", "GLES2DecoderImpl::DoCompressedCopyTextureCHROMIUM");
-
+  static const char kFunctionName[] = "glCompressedCopyTextureCHROMIUM";
   TextureRef* source_texture_ref = GetTexture(source_id);
   TextureRef* dest_texture_ref = GetTexture(dest_id);
 
   if (!source_texture_ref || !dest_texture_ref) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCompressedCopyTextureCHROMIUM",
-                       "unknown texture ids");
+    LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, kFunctionName, "unknown texture ids");
     return;
   }
 
@@ -14174,16 +14169,13 @@
     source_width = size.width();
     source_height = size.height();
     if (source_width <= 0 || source_height <= 0) {
-      LOCAL_SET_GL_ERROR(
-          GL_INVALID_VALUE,
-          "glCompressedCopyTextureCHROMIUM", "invalid image size");
+      LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, kFunctionName, "invalid image size");
       return;
     }
   } else {
     if (!source_texture->GetLevelSize(source_texture->target(), 0,
                                       &source_width, &source_height, nullptr)) {
-      LOCAL_SET_GL_ERROR(GL_INVALID_VALUE,
-                         "glCompressedCopyTextureCHROMIUM",
+      LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, kFunctionName,
                          "source texture has no level 0");
       return;
     }
@@ -14191,9 +14183,7 @@
     // Check that this type of texture is allowed.
     if (!texture_manager()->ValidForTarget(source_texture->target(), 0,
                                            source_width, source_height, 1)) {
-      LOCAL_SET_GL_ERROR(
-          GL_INVALID_VALUE, "glCompressedCopyTextureCHROMIUM",
-          "Bad dimensions");
+      LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, kFunctionName, "Bad dimensions");
       return;
     }
   }
@@ -14204,34 +14194,23 @@
       source_texture->target(), 0, &source_type, &source_internal_format);
 
   if (dest_texture->IsImmutable()) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION,
-                       "glCompressedCopyTextureCHROMIUM",
+    LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, kFunctionName,
                        "texture is immutable");
     return;
   }
 
-  if (!ValidateCompressedCopyTextureCHROMIUM(
-          "glCompressedCopyTextureCHROMIUM",
-          source_texture_ref, dest_texture_ref)) {
+  if (!ValidateCompressedCopyTextureCHROMIUM(kFunctionName, source_texture_ref,
+                                             dest_texture_ref)) {
     return;
   }
 
-  // Defer initializing the CopyTextureCHROMIUMResourceManager until it is
-  // needed because it takes 10s of milliseconds to initialize.
-  if (!copy_texture_CHROMIUM_.get()) {
-    LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glCopyTextureCHROMIUM");
-    copy_texture_CHROMIUM_.reset(new CopyTextureCHROMIUMResourceManager());
-    copy_texture_CHROMIUM_->Initialize(this, features());
-    RestoreCurrentFramebufferBindings();
-    if (LOCAL_PEEK_GL_ERROR("glCopyTextureCHROMIUM") != GL_NO_ERROR)
-      return;
-  }
+  if (!InitializeCopyTextureCHROMIUM(kFunctionName))
+    return;
 
   // Clear the source texture if necessary.
   if (!texture_manager()->ClearTextureLevel(this, source_texture_ref,
                                             source_texture->target(), 0)) {
-    LOCAL_SET_GL_ERROR(GL_OUT_OF_MEMORY, "glCompressedCopyTextureCHROMIUM",
-                       "dimensions too big");
+    LOCAL_SET_GL_ERROR(GL_OUT_OF_MEMORY, kFunctionName, "dimensions too big");
     return;
   }
 
@@ -14259,16 +14238,16 @@
       GLsizei source_size = 0;
 
       bool did_get_size = GetCompressedTexSizeInBytes(
-          "glCompressedCopyTextureCHROMIUM", source_width, source_height,
-          1, source_internal_format, &source_size);
+          kFunctionName, source_width, source_height, 1, source_internal_format,
+          &source_size);
       DCHECK(did_get_size);
 
       // Ensure that the glCompressedTexImage2D succeeds.
-      LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glCompressedCopyTextureCHROMIUM");
+      LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER(kFunctionName);
       glCompressedTexImage2D(GL_TEXTURE_2D, 0, source_internal_format,
                              source_width, source_height, 0, source_size,
                              NULL);
-      GLenum error = LOCAL_PEEK_GL_ERROR("glCompressedCopyTextureCHROMIUM");
+      GLenum error = LOCAL_PEEK_GL_ERROR(kFunctionName);
       if (error != GL_NO_ERROR) {
         RestoreCurrentTextureBindings(&state_, dest_texture->target());
         return;
@@ -14294,10 +14273,10 @@
   DoCopyTexImageIfNeeded(source_texture, source_texture->target());
 
   // As a fallback, copy into a non-compressed GL_RGBA texture.
-  LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glCompressedCopyTextureCHROMIUM");
+  LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER(kFunctionName);
   glTexImage2D(dest_texture->target(), 0, GL_RGBA, source_width, source_height,
                0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
-  GLenum error = LOCAL_PEEK_GL_ERROR("glCompressedCopyTextureCHROMIUM");
+  GLenum error = LOCAL_PEEK_GL_ERROR(kFunctionName);
   if (error != GL_NO_ERROR) {
     RestoreCurrentTextureBindings(&state_, dest_texture->target());
     return;
diff --git a/testing/buildbot/filters/browser-side-navigation.linux.content_browsertests.filter b/testing/buildbot/filters/browser-side-navigation.linux.content_browsertests.filter
index bf64966c..f1a95b1 100644
--- a/testing/buildbot/filters/browser-side-navigation.linux.content_browsertests.filter
+++ b/testing/buildbot/filters/browser-side-navigation.linux.content_browsertests.filter
@@ -2,7 +2,6 @@
 -RenderViewImplTest.OnNavigationHttpPost
 -ServiceWorkerBrowserTest.FetchPageWithSaveData
 -ServiceWorkerBrowserTest.FetchPageWithSaveDataPassThroughOnFetch
--SessionHistoryTest.FrameBackForward
 -SessionHistoryTest.FrameFormBackForward
 -SitePerProcessIgnoreCertErrorsBrowserTest.CrossSiteRedirectCertificateStore
 -WebContentsImplBrowserTest.NoResetOnBeforeUnloadCanceledOnCommit
diff --git a/testing/buildbot/filters/isolate-extensions.content_browsertests.filter b/testing/buildbot/filters/isolate-extensions.content_browsertests.filter
index 57bbe401..fabb6a8 100644
--- a/testing/buildbot/filters/isolate-extensions.content_browsertests.filter
+++ b/testing/buildbot/filters/isolate-extensions.content_browsertests.filter
@@ -1,4 +1,3 @@
--SessionHistoryTest.FrameBackForward
 -*.RestoreSubframeFileAccessForHistoryNavigation
 
 # https://crbug.com/590782 - test too eager to assert presence of OOPIFs?
diff --git a/testing/buildbot/filters/site-per-process.content_browsertests.filter b/testing/buildbot/filters/site-per-process.content_browsertests.filter
index 08868224..94c2321 100644
--- a/testing/buildbot/filters/site-per-process.content_browsertests.filter
+++ b/testing/buildbot/filters/site-per-process.content_browsertests.filter
@@ -1,5 +1,4 @@
 # crbug.com/417518: Get tests working with --site-per-process
--SessionHistoryTest.FrameBackForward
 -NavigationControllerBrowserTest.ReloadOriginalRequest
 -*.RestoreSubframeFileAccessForHistoryNavigation
 -FrameTreeBrowserTest.NavigateGrandchildToBlob
diff --git a/testing/libfuzzer/archive_corpus.py b/testing/libfuzzer/archive_corpus.py
index fa90a5a..7e39bb5 100755
--- a/testing/libfuzzer/archive_corpus.py
+++ b/testing/libfuzzer/archive_corpus.py
@@ -18,23 +18,17 @@
 
 def main():
   parser = argparse.ArgumentParser(description="Generate fuzzer config.")
-  parser.add_argument('--depfile', required=True)
   parser.add_argument('--corpus', required=True)
   parser.add_argument('--output', required=True)
   parser.add_argument('--fuzzer', required=True)
   args = parser.parse_args()
 
   corpus_files = []
-  # Generate .d file with dependency from corpus archive to individual files.
-  with open(args.depfile, 'w') as depfile:
-      print(os.path.basename(args.output), ":", end="", file=depfile)
-      for (dirpath, _, filenames) in os.walk(args.corpus):
-          for filename in filenames:
-              full_filename = os.path.join(dirpath, filename)
-              print(" ", full_filename, end="", file=depfile)
-              corpus_files.append(full_filename)
-      # chrome bots complain about this one:
-      # print(" ", args.fuzzer, end="", file=depfile)
+
+  for (dirpath, _, filenames) in os.walk(args.corpus):
+    for filename in filenames:
+      full_filename = os.path.join(dirpath, filename)
+      corpus_files.append(full_filename)
 
   with zipfile.ZipFile(args.output, 'w') as z:
     for corpus_file in corpus_files:
@@ -43,4 +37,3 @@
 
 if __name__ == '__main__':
   main()
-
diff --git a/testing/libfuzzer/fuzzer_test.gni b/testing/libfuzzer/fuzzer_test.gni
index 26d3ad6..24391365 100644
--- a/testing/libfuzzer/fuzzer_test.gni
+++ b/testing/libfuzzer/fuzzer_test.gni
@@ -37,14 +37,11 @@
     }
 
     if (defined(invoker.seed_corpus)) {
-      depfile = "$root_build_dir/$target_name" + ".seed_corpus.d"
       out = "$root_build_dir/$target_name" + "_seed_corpus.zip"
 
       action(target_name + "_seed_corpus") {
         script = "//testing/libfuzzer/archive_corpus.py"
         args = [
-          "--depfile",
-          rebase_path(depfile),
           "--corpus",
           rebase_path(invoker.seed_corpus),
           "--output",
@@ -53,7 +50,6 @@
           rebase_path("$root_build_dir/$target_name"),
         ]
 
-        depfile = depfile
         outputs = [
           out,
         ]
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index f61e97c..c5d54c2 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -568,7 +568,8 @@
 crbug.com/552494 scrollbars/overflow-scrollbar-combinations.html [ Pass Failure ]
 crbug.com/552494 virtual/prefer_compositing_to_lcd_text/scrollbars/overflow-scrollbar-combinations.html [ Pass Failure ]
 crbug.com/552494 virtual/rootlayerscrolls/scrollbars/overflow-scrollbar-combinations.html [ Pass Failure ]
-
+crbug.com/51182 fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value.html [ NeedsManualRebaseline ]
+crbug.com/51182 fast/dom/HTMLMeterElement/meter-styles.html [ NeedsManualRebaseline ]
 crbug.com/380217 [ Linux Win ] fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-large-radius.html [ Skip ]
 crbug.com/380217 [ Win ] fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-bottom-left.html [ Skip ]
 
@@ -1559,7 +1560,3 @@
 crbug.com/606302 [ Win7 ] transforms/3d/point-mapping/3d-point-mapping-preserve-3d.html [ Failure Pass ]
 
 crbug.com/606649 fast/dom/gc-dom-tree-lifetime.html [ Pass Timeout ]
-
-crbug.com/607156 [ Mac10.11 Debug ] http/tests/fetch/referrer/serviceworker-echo-referrer-from-default-document.html [ Pass Crash ]
-crbug.com/607156 [ Win7 Debug ] http/tests/fetch/referrer/serviceworker-echo-referrer-from-default-document.html [ Pass Crash ]
-crbug.com/607156 [ Linux Debug ] http/tests/fetch/referrer/serviceworker-echo-referrer-from-default-document.html [ Pass Crash ]
diff --git a/third_party/WebKit/LayoutTests/fast/dom/HTMLMeterElement/meter-element-markup-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/HTMLMeterElement/meter-element-markup-expected.txt
index 04a9026d..75e722e4 100644
--- a/third_party/WebKit/LayoutTests/fast/dom/HTMLMeterElement/meter-element-markup-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/dom/HTMLMeterElement/meter-element-markup-expected.txt
@@ -16,6 +16,8 @@
 |           pseudo="-webkit-meter-optimum-value"
 |           style="width: 70%;"
 |           shadow:pseudoId="-webkit-meter-optimum-value"
+|     <div>
+|       <content>
 | "
     "
 | <meter>
@@ -36,6 +38,8 @@
 |           pseudo="-webkit-meter-suboptimum-value"
 |           style="width: 100%;"
 |           shadow:pseudoId="-webkit-meter-suboptimum-value"
+|     <div>
+|       <content>
 | "
     "
 | <meter>
@@ -56,5 +60,7 @@
 |           pseudo="-webkit-meter-even-less-good-value"
 |           style="width: 100%;"
 |           shadow:pseudoId="-webkit-meter-even-less-good-value"
+|     <div>
+|       <content>
 | "
   "
diff --git a/third_party/WebKit/LayoutTests/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value.html b/third_party/WebKit/LayoutTests/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value.html
index 1872b62..6c24f7ef 100644
--- a/third_party/WebKit/LayoutTests/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value.html
+++ b/third_party/WebKit/LayoutTests/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value.html
@@ -1,14 +1,12 @@
 <html>
 <head>
 <body>
-<meter id="native" value="0" min="0" max="100"></meter>
-<meter id="shadow" value="0" min="0" max="100" style="-webkit-appearance: none;"></meter>
+<meter id="shadow" value="0" min="0" max="100"></meter>
 <script>
 if (window.testRunner)
     testRunner.waitUntilDone();
 document.body.onload = function() {
     window.setTimeout(function() {
-        document.getElementById("native").value = 50;
         document.getElementById("shadow").value = 50;
         window.setTimeout(function() {
              if (window.testRunner)
diff --git a/third_party/WebKit/LayoutTests/fast/dom/HTMLMeterElement/meter-styles-changing-pseudo.html b/third_party/WebKit/LayoutTests/fast/dom/HTMLMeterElement/meter-styles-changing-pseudo.html
index 3cb3cbf..f117536 100644
--- a/third_party/WebKit/LayoutTests/fast/dom/HTMLMeterElement/meter-styles-changing-pseudo.html
+++ b/third_party/WebKit/LayoutTests/fast/dom/HTMLMeterElement/meter-styles-changing-pseudo.html
@@ -14,7 +14,6 @@
 }
 </script>
 <style>
-  meter.styled { -webkit-appearance: none; }
   meter.styled::-webkit-meter-bar { background: gray; }
   meter.styled::-webkit-meter-optimum-value { background: green; }
   meter.styled::-webkit-meter-suboptimum-value { background: yellow; }
diff --git a/third_party/WebKit/LayoutTests/fast/dom/HTMLMeterElement/meter-styles.html b/third_party/WebKit/LayoutTests/fast/dom/HTMLMeterElement/meter-styles.html
index a26c519..0d3867f 100644
--- a/third_party/WebKit/LayoutTests/fast/dom/HTMLMeterElement/meter-styles.html
+++ b/third_party/WebKit/LayoutTests/fast/dom/HTMLMeterElement/meter-styles.html
@@ -5,23 +5,21 @@
     testRunner.notifyDone();
 </script>
 <style>
-  meter.usestyle { -webkit-appearance: none; /* this forces styling; */ }
-  meter.tall { width: 30px; height: 40px; -webkit-appearance: none; /* this forces styling; */ }
+  meter.tall { width: 30px; height: 40px; }
   ul, h2, p { margin: 0.2em; }
   h1, h2 { font-size: medium; }
   li { margin: 0.2em; list-style-type: none; }
   meter.barstyled::-webkit-meter-bar { background: gray; border-style: solid; border-width: 2px; border-color: #222; }
   meter.valstyled::-webkit-meter-optimum-value { background: green; border-style: solid; border-width: 2px; border-color: #7c7; }
-  meter#bar-paddings { -webkit-appearance: none; }
   meter#bar-paddings::-webkit-meter-bar { padding: 5px; }
 </style>
 </head>
 <body>
   <h2>Horizontal meters with the non-themed default style</h2>
   <ul>
-    <li><meter class="usestyle" min="0" max="100" low="30" high="60" optimum="100" value="25" ></meter>
-        <meter class="usestyle" min="0" max="100" low="30" high="60" optimum="100" value="45" ></meter>
-        <meter class="usestyle" min="0" max="100" low="30" high="60" optimum="100" value="75" ></meter></li>
+    <li><meter min="0" max="100" low="30" high="60" optimum="100" value="25" ></meter>
+        <meter min="0" max="100" low="30" high="60" optimum="100" value="45" ></meter>
+        <meter min="0" max="100" low="30" high="60" optimum="100" value="75" ></meter></li>
     <li><meter class="tall" min="0" max="100" low="30" high="60" optimum="100" value="25" ></meter>
         <meter class="tall" min="0" max="100" low="30" high="60" optimum="100" value="45" ></meter>
         <meter class="tall" min="0" max="100" low="30" high="60" optimum="100" value="75" ></meter></li>
@@ -29,33 +27,27 @@
   <h2>Providing meter styles</h2>
   <div style="background-color: #eee">
     <ul>
-      <li><meter style="background-color: #aac; border-color: #224; border-style: solid; border-width: 5px 20px 5px 10px;" min="0" max="100" low="30" high="60" optimum="100" value="80" ></meter> has border</li>
-      <li><meter style="background-color: #aac; border-color: #224; padding: 5px 20px 5px 10px;" min="0" max="100" low="30" high="60" optimum="100" value="80" ></meter> has padding</li>
-      <li><meter style="background-color: #aac; border-color: #224; margin:  5px 20px 5px 10px;" min="0" max="100" low="30" high="60" optimum="100" value="80" ></meter> has margin</li>
+      <li><meter style="border-color: #224; border-style: solid; border-width: 5px 20px 5px 10px;" min="0" max="100" low="30" high="60" optimum="100" value="80" ></meter> has border</li>
+      <li><meter style="border-color: #224; padding: 5px 20px 5px 10px;" min="0" max="100" low="30" high="60" optimum="100" value="80" ></meter> has padding</li>
+      <li><meter style="border-color: #224; margin:  5px 20px 5px 10px;" min="0" max="100" low="30" high="60" optimum="100" value="80" ></meter> has margin</li>
       <li><meter style="box-shadow: 4px 4px 10px rgba(255,0,0,0.5), inset 4px 4px 4px rgba(0,255,0,0.5);"></meter> has box-shadow</li>
+      <li><meter style="background: blue; color: white;" value="50">50</meter> Background CSS property does not disable -webkit-appearance.</li>
     </ul>
   </div>
   <h2>Providing bar and/or value styles</h2>
   <div style="background-color: #eee">
   <ul>
-    default -webkit-appearance, thus should use platform theme (only for Mac.)
+    default -webkit-appearance, thus should use Shadow DOM CSS rendring.
     <li><meter class="valstyled" min="0" max="100" low="30" high="60" optimum="100" value="80" ></meter> has bar style but should ignore it.</li>
     <li><meter class="barstyled" min="0" max="100" low="30" high="60" optimum="100" value="80" ></meter> has value style but should ignore it.</li>
     <li><meter class="barstyled valstyled" min="0" max="100" low="30" high="60" optimum="100" value="80" ></meter> has both styles but should ignore them.</li>
   </ul>
 
-  <ul>
-    -webkit-appearance: none, thus custom styled elements should be shown.
-    <li><meter class="usestyle valstyled" min="0" max="100" low="30" high="60" optimum="100" value="80" ></meter> has bar style, should have solid value part.</li>
-    <li><meter class="usestyle barstyled" min="0" max="100" low="30" high="60" optimum="100" value="80" ></meter> has value style, should be solid bar part.</li>
-    <li><meter class="usestyle barstyled valstyled" min="0" max="100" low="30" high="60" optimum="100" value="80" ></meter> should have solid bar and value part.</li>
-  </ul>
   </div>
   <h2>Providing appearances</h2>
   <div style="background-color: #eee">
   <ul>
-    <li><meter style="-webkit-appearance: none" min="0" max="100" low="30" high="60" optimum="100" value="80" ></meter> has "none" appearance, should be styled with default style.</li> 
-    <li><meter style="-webkit-appearance: meter" min="0" max="100" low="30" high="60" optimum="100" value="80" ></meter> has "meter" appearance, should be themed.</li>
+    <li><meter style="-webkit-appearance: none" min="0" max="100" low="30" high="60" optimum="100" value="80" >80</meter> has "none" appearance, should render METER content.</li> 
   </ul>
   </div>
   <h2>Providing bar paddings</h2>
diff --git a/third_party/WebKit/LayoutTests/fast/dom/HTMLMeterElement/meter-writing-mode-expected.html b/third_party/WebKit/LayoutTests/fast/dom/HTMLMeterElement/meter-writing-mode-expected.html
index e959c3156..daa6cabe 100644
--- a/third_party/WebKit/LayoutTests/fast/dom/HTMLMeterElement/meter-writing-mode-expected.html
+++ b/third_party/WebKit/LayoutTests/fast/dom/HTMLMeterElement/meter-writing-mode-expected.html
@@ -4,7 +4,6 @@
 meter {
   width: 50px;
   height: 50px;
-  -webkit-appearance: none;
 }
 </style>
 </head>
diff --git a/third_party/WebKit/LayoutTests/fast/dom/HTMLMeterElement/meter-writing-mode.html b/third_party/WebKit/LayoutTests/fast/dom/HTMLMeterElement/meter-writing-mode.html
index 1b83da2a..3e14617 100644
--- a/third_party/WebKit/LayoutTests/fast/dom/HTMLMeterElement/meter-writing-mode.html
+++ b/third_party/WebKit/LayoutTests/fast/dom/HTMLMeterElement/meter-writing-mode.html
@@ -4,12 +4,11 @@
 meter {
   width: 50px;
   height: 50px;
-  -webkit-appearance: none;
-  background-color: red; /* should not be visible */
 }
 </style>
 </head>
 <body>
+<!-- writing-mode doen't work for now. -->
 <meter min=0 value=30 max=100 style="-webkit-writing-mode: vertical-lr;"></meter>
 <meter min=0 value=30 max=100 style="-webkit-writing-mode: vertical-rl;"></meter>
 <meter min=0 value=30 max=100 style="-webkit-writing-mode: horizontal-tb;"></meter>
diff --git a/third_party/WebKit/LayoutTests/fast/html/meter-user-modify-expected.txt b/third_party/WebKit/LayoutTests/fast/html/meter-user-modify-expected.txt
index 6a951896..e1fa3a9 100644
--- a/third_party/WebKit/LayoutTests/fast/html/meter-user-modify-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/html/meter-user-modify-expected.txt
@@ -4,4 +4,4 @@
 TEST COMPLETE
 The inner element of meter should not be deleteable.
 
-(before)(after)
+(before)In meter(after)
diff --git a/third_party/WebKit/LayoutTests/fast/html/meter-user-modify.html b/third_party/WebKit/LayoutTests/fast/html/meter-user-modify.html
index 42b9612..2d2f050 100644
--- a/third_party/WebKit/LayoutTests/fast/html/meter-user-modify.html
+++ b/third_party/WebKit/LayoutTests/fast/html/meter-user-modify.html
@@ -17,14 +17,14 @@
 <p>The inner element of meter should not be deleteable.</p>
 
 <div id="container" contenteditable>
-    (before)<meter id="meter" min="0" max="100" value="50"></meter>(after)
+    (before)<meter id="meter" min="0" max="100" value="50">In meter</meter>(after)
 </div>
 
 <script>
 function focusAndType(id, key)
 {
     var target = document.getElementById(id);
-    eventSender.mouseMoveTo(target.offsetLeft + 2, target.offsetTop + 2);
+    eventSender.mouseMoveTo(target.offsetLeft + target.offsetWidth / 2, target.offsetTop + target.offsetHeight / 2);
     eventSender.mouseDown();
     eventSender.mouseUp();
     eventSender.keyDown(key);
diff --git a/third_party/WebKit/LayoutTests/fast/imagecapture/ImageCapture-creation.html b/third_party/WebKit/LayoutTests/fast/imagecapture/ImageCapture-creation.html
new file mode 100644
index 0000000..8cfadc4e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/imagecapture/ImageCapture-creation.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<script src=../../resources/testharness.js></script>
+<script src=../../resources/testharnessreport.js></script>
+<script src=../../resources/testharness-helpers.js></script>
+<script>
+
+// This test verifies that ImageCapture can be created (or not) with different
+// Media Stream Track types (audio, video).
+
+var testVideo = promise_test(function() {
+  const gotStream = this.step_func(function(stream) {
+    assert_equals(stream.getAudioTracks().length, 0);
+    assert_equals(stream.getVideoTracks().length, 1);
+    assert_equals(stream.getVideoTracks()[0].readyState, 'live');
+    assert_true(stream.getVideoTracks()[0].enabled);
+    assert_false(stream.getVideoTracks()[0].muted);
+
+    var capturer = new ImageCapture(stream.getVideoTracks()[0]);
+    assert_equals(capturer.videoStreamTrack, stream.getVideoTracks()[0]);
+
+    // Assert that grabFrame() is rejected if the associated video track is
+    // disabled, or ended. grabFrame() would also reject if the video Track is
+    // muted but that's a read-only property.
+    stream.getVideoTracks()[0].enabled = false;
+    assert_promise_rejects(capturer.grabFrame(),
+                           'InvalidStateError',
+                           'ImageCapturer cannot grabFrame() of a disabled Track');
+
+    stream.getVideoTracks()[0].stop();
+    assert_equals(stream.getVideoTracks()[0].readyState, 'ended');
+    assert_promise_rejects(capturer.grabFrame(),
+                           'InvalidStateError',
+                           'ImageCapturer cannot grabFrame() of a non-live Track');
+
+    this.done();
+  });
+
+  const onError = this.step_func(function() {
+    assert_unreached('Error creating MediaStream');
+  });
+
+  navigator.webkitGetUserMedia({video:true}, gotStream, onError);
+}, 'verifies that ImageCapture API rejects grabFrame() in certain Track states.');
+
+var testAudio = promise_test(function() {
+  const onError = this.step_func(function() {
+     assert_unreached('Error creating MediaStream');
+  });
+
+  navigator.webkitGetUserMedia({audio:true},
+    this.step_func(function(stream) {
+      assert_equals(stream.getAudioTracks().length, 1);
+      assert_equals(stream.getVideoTracks().length, 0);
+      assert_throws("NotSupportedError",
+                    function() {
+                      var capturer = new ImageCapture(stream.getAudioTracks()[0]);
+                    },
+                    'an ImageCapturer can only be created from a video track');
+
+      this.done();
+    }), onError);
+}, 'verifies that an ImageCapture cannot be created out of an Audio Track');
+
+</script>
diff --git a/third_party/WebKit/LayoutTests/fast/imagecapture/ImageCapture-creationAndGrabFrame.html b/third_party/WebKit/LayoutTests/fast/imagecapture/ImageCapture-creationAndGrabFrame.html
deleted file mode 100644
index df02f76e..0000000
--- a/third_party/WebKit/LayoutTests/fast/imagecapture/ImageCapture-creationAndGrabFrame.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!DOCTYPE html>
-<script src=../../resources/testharness.js></script>
-<script src=../../resources/testharnessreport.js></script>
-<script src=../../resources/testharness-helpers.js></script>
-<script>
-
-// This test verifies that ImageCapture can be created (or not) with different
-// Media Stream Track types (audio, video). The simplest API method grabFrame()
-// is also exercised here.
-
-var test = async_test('exercises the ImageCapture API creation and grabFrame().');
-
-gotStream = test.step_func(function(stream) {
-    assert_equals(stream.getAudioTracks().length, 1);
-    assert_equals(stream.getVideoTracks().length, 1);
-    assert_throws("NotSupportedError",
-                  function() {
-                      capturer = new ImageCapture(stream.getAudioTracks()[0]);
-                  },
-                  'an ImageCapturer can only be created from a video track');
-
-    assert_equals(stream.getVideoTracks()[0].readyState, 'live');
-    assert_true(stream.getVideoTracks()[0].enabled);
-    assert_false(stream.getVideoTracks()[0].muted);
-    capturer = new ImageCapture(stream.getVideoTracks()[0]);
-
-    assert_equals(capturer.videoStreamTrack, stream.getVideoTracks()[0]);
-
-    // TODO(mcasas): Remove this assert after the method is implemented, and
-    // substitute with something more relevant.
-    stream.getVideoTracks()[0].enabled = true;
-    assert_promise_rejects(capturer.grabFrame(),
-                           'NotSupportedError',
-                           'ImageCapturer grabFrame() is not implemented');
-
-    // Assert that grabFrame() is rejected if the associated video track is
-    // disabled, or ended. grabFrame() would also reject if the video Track is
-    // muted but that's a read-only property.
-    stream.getVideoTracks()[0].enabled = false;
-    assert_promise_rejects(capturer.grabFrame(),
-                           'InvalidStateError',
-                           'ImageCapturer cannot grabFrame() of a disabled Track');
-
-    stream.getVideoTracks()[0].stop();
-    assert_equals(stream.getVideoTracks()[0].readyState, 'ended');
-    assert_promise_rejects(capturer.grabFrame(),
-                           'InvalidStateError',
-                           'ImageCapturer cannot grabFrame() of a non-live Track');
-
-    test.done();
-});
-
-onError = test.step_func(function() {
-    assert_unreached('Error creating MediaStream');
-});
-
-navigator.webkitGetUserMedia({video:true, audio:true}, gotStream, onError);
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/fast/imagecapture/ImageCapture-grabFrame.html b/third_party/WebKit/LayoutTests/fast/imagecapture/ImageCapture-grabFrame.html
new file mode 100644
index 0000000..ad7388a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/imagecapture/ImageCapture-grabFrame.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<script src=../../resources/testharness.js></script>
+<script src=../../resources/testharnessreport.js></script>
+<body>
+<canvas id='canvas0' width=10 height=10/>
+<canvas id='canvas1' width=10 height=10/>
+</body>
+<script>
+
+// This test verifies that ImageCapture can grabFrame()s.
+
+var test = async_test(function() {
+  var canvas0 = document.getElementById('canvas0');
+  var context0 = canvas0.getContext("2d");
+  context0.fillStyle = "red";
+  context0.fillRect(0, 0, 10, 10);
+
+  var stream = canvas0.captureStream();
+
+  var capturer = new ImageCapture(stream.getVideoTracks()[0]);
+
+  capturer.grabFrame()
+    .then(bitmap => {
+      assert_equals(canvas0.width, bitmap.width);
+      assert_equals(canvas0.height, bitmap.height);
+
+      var context1 = document.getElementById('canvas1').getContext("2d");
+      context1.drawImage(bitmap, 0, 0);
+
+      var imageData0 = context0.getImageData(0, 0, 10, 10);
+      var imageData1 = context1.getImageData(0, 0, 10, 10);
+
+      assert_equals(imageData0.width, imageData1.width);
+      assert_equals(imageData0.height, imageData1.height);
+      assert_equals(imageData0.data.length, imageData1.data.length);
+      for (var i = 0; i < imageData0.data.length; i++)
+        assert_approx_equals(imageData0.data[i], imageData1.data[i], 5);
+
+      this.done();
+    })
+    .catch(error => {
+      assert_unreached('Error during grabFrame(): '+ error);
+    });
+}, 'exercises the ImageCapture API creation and grabFrame().');
+
+</script>
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png
index bf1ca1e..df1121a 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.txt
index f70a3736..c6b0fdb 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.txt
@@ -3,13 +3,7 @@
 layer at (0,0) size 800x600
   LayoutBlockFlow {HTML} at (0,0) size 800x600
     LayoutBlockFlow {BODY} at (8,8) size 784x584
-      LayoutBlockFlow {METER} at (0,1.19) size 80x16
-        LayoutBlockFlow {DIV} at (0,0) size 80x16
-          LayoutBlockFlow {DIV} at (0,0) size 80x16
-            LayoutBlockFlow {DIV} at (0,0) size 40x16
-      LayoutText {#text} at (80,0) size 4x18
-        text run at (80,0) width 4: " "
-      LayoutBlockFlow {METER} at (84,1.19) size 80x16
+      LayoutBlockFlow {METER} at (0,0.19) size 80x16
         LayoutBlockFlow {DIV} at (0,0) size 80x16
           LayoutBlockFlow {DIV} at (0,0) size 80x16
             LayoutBlockFlow {DIV} at (0,0) size 40x16
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLMeterElement/meter-styles-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLMeterElement/meter-styles-expected.txt
index e734276b..d18f98c 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLMeterElement/meter-styles-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLMeterElement/meter-styles-expected.txt
@@ -44,27 +44,21 @@
       LayoutBlockFlow {H2} at (3.19,86.56) size 777.63x18
         LayoutText {#text} at (0,0) size 153x18
           text run at (0,0) width 153: "Providing meter styles"
-      LayoutBlockFlow {DIV} at (0,107.75) size 784x90.56 [bgcolor=#EEEEEE]
-        LayoutBlockFlow {UL} at (3.19,0) size 777.63x90.56
+      LayoutBlockFlow {DIV} at (0,107.75) size 784x112.75 [bgcolor=#EEEEEE]
+        LayoutBlockFlow {UL} at (3.19,0) size 777.63x112.75
           LayoutListItem {LI} at (43.19,0) size 731.25x18
-            LayoutBlockFlow {METER} at (0,1.19) size 80x16 [bgcolor=#AAAACC] [border: (5px solid #222244) (20px solid #222244) (5px solid #222244) (10px solid #222244)]
-              LayoutBlockFlow {DIV} at (10,5) size 50x6
-                LayoutBlockFlow {DIV} at (0,0) size 50x6
-                  LayoutBlockFlow {DIV} at (0,0) size 40x6
+            LayoutBlockFlow {METER} at (0,1.19) size 80x16 [border: (5px solid #222244) (20px solid #222244) (5px solid #222244) (10px solid #222244)]
+              LayoutBlockFlow {DIV} at (10,5) size 50x0
             LayoutText {#text} at (80,0) size 72x18
               text run at (80,0) width 72: " has border"
           LayoutListItem {LI} at (43.19,21.19) size 731.25x18
-            LayoutBlockFlow {METER} at (0,1.19) size 80x16 [bgcolor=#AAAACC]
-              LayoutBlockFlow {DIV} at (10,5) size 50x6
-                LayoutBlockFlow {DIV} at (0,0) size 50x6
-                  LayoutBlockFlow {DIV} at (0,0) size 40x6
+            LayoutBlockFlow {METER} at (0,1.19) size 80x16
+              LayoutBlockFlow {DIV} at (10,5) size 50x0
             LayoutText {#text} at (80,0) size 81x18
               text run at (80,0) width 81: " has padding"
           LayoutListItem {LI} at (43.19,42.38) size 731.25x27
-            LayoutBlockFlow {METER} at (10,5.19) size 80x16 [bgcolor=#AAAACC]
-              LayoutBlockFlow {DIV} at (0,0) size 80x16
-                LayoutBlockFlow {DIV} at (0,0) size 80x16
-                  LayoutBlockFlow {DIV} at (0,0) size 64x16
+            LayoutBlockFlow {METER} at (10,5.19) size 80x16
+              LayoutBlockFlow {DIV} at (0,0) size 80x0
             LayoutText {#text} at (110,9) size 75x18
               text run at (110,9) width 75: " has margin"
           LayoutListItem {LI} at (43.19,72.56) size 731.25x18
@@ -74,14 +68,21 @@
                   LayoutBlockFlow {DIV} at (0,0) size 0x16
             LayoutText {#text} at (80,0) size 108x18
               text run at (80,0) width 108: " has box-shadow"
-      LayoutBlockFlow {H2} at (3.19,201.50) size 777.63x18
+          LayoutListItem {LI} at (43.19,93.75) size 731.25x19
+            LayoutBlockFlow {METER} at (0,3.19) size 80x16 [color=#FFFFFF] [bgcolor=#0000FF]
+              LayoutBlockFlow {DIV} at (0,0) size 80x18
+                LayoutText {#text} at (0,0) size 16x18
+                  text run at (0,0) width 16: "50"
+            LayoutText {#text} at (80,0) size 447x18
+              text run at (80,0) width 447: " Background CSS property disables -webkit-apparance automatically."
+      LayoutBlockFlow {H2} at (3.19,223.69) size 777.63x18
         LayoutText {#text} at (0,0) size 227x18
           text run at (0,0) width 227: "Providing bar and/or value styles"
-      LayoutBlockFlow {DIV} at (0,222.69) size 784x166.31 [bgcolor=#EEEEEE]
+      LayoutBlockFlow {DIV} at (0,244.88) size 784x81.56 [bgcolor=#EEEEEE]
         LayoutBlockFlow {UL} at (3.19,0) size 777.63x81.56
           LayoutBlockFlow (anonymous) at (40,0) size 737.63x18
-            LayoutText {#text} at (0,0) size 486x18
-              text run at (0,0) width 486: "default -webkit-appearance, thus should use platform theme (only for Mac.)"
+            LayoutText {#text} at (0,0) size 473x18
+              text run at (0,0) width 473: "default -webkit-appearance, thus should use Shadow DOM CSS rendring."
           LayoutListItem {LI} at (43.19,21.19) size 731.25x18
             LayoutBlockFlow {METER} at (0,1.19) size 80x16
               LayoutBlockFlow {DIV} at (0,0) size 80x16
@@ -103,54 +104,22 @@
                   LayoutBlockFlow {DIV} at (2,2) size 60.80x12 [bgcolor=#008000] [border: (2px solid #77CC77)]
             LayoutText {#text} at (80,0) size 255x18
               text run at (80,0) width 255: " has both styles but should ignore them."
-        LayoutBlockFlow {UL} at (3.19,84.75) size 777.63x81.56
-          LayoutBlockFlow (anonymous) at (40,0) size 737.63x18
-            LayoutText {#text} at (0,0) size 470x18
-              text run at (0,0) width 470: "-webkit-appearance: none, thus custom styled elements should be shown."
-          LayoutListItem {LI} at (43.19,21.19) size 731.25x18
-            LayoutBlockFlow {METER} at (0,1.19) size 80x16
-              LayoutBlockFlow {DIV} at (0,0) size 80x16
-                LayoutBlockFlow {DIV} at (0,0) size 80x16
-                  LayoutBlockFlow {DIV} at (0,0) size 64x16 [bgcolor=#008000] [border: (2px solid #77CC77)]
-            LayoutText {#text} at (80,0) size 276x18
-              text run at (80,0) width 276: " has bar style, should have solid value part."
-          LayoutListItem {LI} at (43.19,42.38) size 731.25x18
-            LayoutBlockFlow {METER} at (0,1.19) size 80x16
-              LayoutBlockFlow {DIV} at (0,0) size 80x16
-                LayoutBlockFlow {DIV} at (0,0) size 80x16 [bgcolor=#808080] [border: (2px solid #222222)]
-                  LayoutBlockFlow {DIV} at (2,2) size 60.80x12
-            LayoutText {#text} at (80,0) size 261x18
-              text run at (80,0) width 261: " has value style, should be solid bar part."
-          LayoutListItem {LI} at (43.19,63.56) size 731.25x18
-            LayoutBlockFlow {METER} at (0,1.19) size 80x16
-              LayoutBlockFlow {DIV} at (0,0) size 80x16
-                LayoutBlockFlow {DIV} at (0,0) size 80x16 [bgcolor=#808080] [border: (2px solid #222222)]
-                  LayoutBlockFlow {DIV} at (2,2) size 60.80x12 [bgcolor=#008000] [border: (2px solid #77CC77)]
-            LayoutText {#text} at (80,0) size 240x18
-              text run at (80,0) width 240: " should have solid bar and value part."
-      LayoutBlockFlow {H2} at (3.19,392.19) size 777.63x18
+      LayoutBlockFlow {H2} at (3.19,329.63) size 777.63x18
         LayoutText {#text} at (0,0) size 157x18
           text run at (0,0) width 157: "Providing appearances"
-      LayoutBlockFlow {DIV} at (0,413.38) size 784x39.19 [bgcolor=#EEEEEE]
-        LayoutBlockFlow {UL} at (3.19,0) size 777.63x39.19
-          LayoutListItem {LI} at (43.19,0) size 731.25x18
-            LayoutBlockFlow {METER} at (0,1.19) size 80x16
-              LayoutBlockFlow {DIV} at (0,0) size 80x16
-                LayoutBlockFlow {DIV} at (0,0) size 80x16
-                  LayoutBlockFlow {DIV} at (0,0) size 64x16
-            LayoutText {#text} at (80,0) size 381x18
-              text run at (80,0) width 381: " has \"none\" appearance, should be styled with default style."
-          LayoutListItem {LI} at (43.19,21.19) size 731.25x18
-            LayoutBlockFlow {METER} at (0,1.19) size 80x16
-              LayoutBlockFlow {DIV} at (0,0) size 80x16
-                LayoutBlockFlow {DIV} at (0,0) size 80x16
-                  LayoutBlockFlow {DIV} at (0,0) size 64x16
-            LayoutText {#text} at (80,0) size 280x18
-              text run at (80,0) width 280: " has \"meter\" appearance, should be themed."
-      LayoutBlockFlow {H2} at (3.19,455.75) size 777.63x18
+      LayoutBlockFlow {DIV} at (0,350.81) size 784x19 [bgcolor=#EEEEEE]
+        LayoutBlockFlow {UL} at (3.19,0) size 777.63x19
+          LayoutListItem {LI} at (43.19,0) size 731.25x19
+            LayoutBlockFlow {METER} at (0,3.19) size 80x16
+              LayoutBlockFlow {DIV} at (0,0) size 80x18
+                LayoutText {#text} at (0,0) size 16x18
+                  text run at (0,0) width 16: "80"
+            LayoutText {#text} at (80,0) size 359x18
+              text run at (80,0) width 359: " has \"none\" appearance, should render METER content."
+      LayoutBlockFlow {H2} at (3.19,373) size 777.63x18
         LayoutText {#text} at (0,0) size 162x18
           text run at (0,0) width 162: "Providing bar paddings"
-      LayoutBlockFlow {DIV} at (0,476.94) size 784x18 [bgcolor=#EEEEEE]
+      LayoutBlockFlow {DIV} at (0,394.19) size 784x18 [bgcolor=#EEEEEE]
         LayoutBlockFlow {METER} at (0,1.19) size 80x16
           LayoutBlockFlow {DIV} at (0,0) size 80x16
             LayoutBlockFlow {DIV} at (0,0) size 80x16
diff --git a/third_party/WebKit/Source/bindings/templates/interface.cpp b/third_party/WebKit/Source/bindings/templates/interface.cpp
index f153bd5..cf9e196 100644
--- a/third_party/WebKit/Source/bindings/templates/interface.cpp
+++ b/third_party/WebKit/Source/bindings/templates/interface.cpp
@@ -464,7 +464,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo {{v8_class}}Constructor::wrapperTypeInfo = { gin::kEmbedderBlink, {{v8_class}}Constructor::domTemplate, {{v8_class}}::trace, {{to_active_scriptwrappable}}, 0, {{v8_class}}::preparePrototypeAndInterfaceObject, {{v8_class}}::installConditionallyEnabledProperties, "{{interface_name}}", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::{{wrapper_class_id}}, WrapperTypeInfo::{{event_target_inheritance}}, WrapperTypeInfo::{{lifetime}} };
+const WrapperTypeInfo {{v8_class}}Constructor::wrapperTypeInfo = { gin::kEmbedderBlink, {{v8_class}}Constructor::domTemplate, {{v8_class}}::trace, {{to_active_scriptwrappable}}, 0, {{v8_class}}::preparePrototypeAndInterfaceObject,{% if has_conditional_attributes_on_instance %} {{v8_class}}::installConditionallyEnabledProperties{% else %} nullptr{% endif %}, "{{interface_name}}", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::{{wrapper_class_id}}, WrapperTypeInfo::{{event_target_inheritance}}, WrapperTypeInfo::{{lifetime}} };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/templates/interface.h b/third_party/WebKit/Source/bindings/templates/interface.h
index fb5e5a06..bde2739 100644
--- a/third_party/WebKit/Source/bindings/templates/interface.h
+++ b/third_party/WebKit/Source/bindings/templates/interface.h
@@ -148,8 +148,8 @@
        * a C++ pointer to the DOM object (if the object is not in oilpan) #}
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + {{custom_internal_field_counter}};
     {# End custom internal fields #}
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*){% if has_conditional_attributes %};
-    {% else %} { }
+    {% if has_conditional_attributes %}
+    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*);
     {% endif %}
     {{exported}}static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate){% if unscopeables or has_conditional_attributes_on_prototype or conditionally_enabled_methods %};
     {% else %} { }
diff --git a/third_party/WebKit/Source/bindings/templates/interface_base.cpp b/third_party/WebKit/Source/bindings/templates/interface_base.cpp
index 342b417..83a0234f 100644
--- a/third_party/WebKit/Source/bindings/templates/interface_base.cpp
+++ b/third_party/WebKit/Source/bindings/templates/interface_base.cpp
@@ -24,7 +24,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-{{wrapper_type_info_const}}WrapperTypeInfo {{v8_class}}::wrapperTypeInfo = { gin::kEmbedderBlink, {{dom_template}}, {{v8_class}}::trace, {{to_active_scriptwrappable}}, {{visit_dom_wrapper}}, {{v8_class}}::preparePrototypeAndInterfaceObject, {{v8_class}}::installConditionallyEnabledProperties, "{{interface_name}}", {{parent_wrapper_type_info}}, WrapperTypeInfo::{{wrapper_type_prototype}}, WrapperTypeInfo::{{wrapper_class_id}}, WrapperTypeInfo::{{event_target_inheritance}}, WrapperTypeInfo::{{lifetime}} };
+{{wrapper_type_info_const}}WrapperTypeInfo {{v8_class}}::wrapperTypeInfo = { gin::kEmbedderBlink, {{dom_template}}, {{v8_class}}::trace, {{to_active_scriptwrappable}}, {{visit_dom_wrapper}}, {{v8_class}}::preparePrototypeAndInterfaceObject,{% if has_conditional_attributes %} {{v8_class}}::installConditionallyEnabledProperties{% else %} nullptr{% endif %}, "{{interface_name}}", {{parent_wrapper_type_info}}, WrapperTypeInfo::{{wrapper_type_prototype}}, WrapperTypeInfo::{{wrapper_class_id}}, WrapperTypeInfo::{{event_target_inheritance}}, WrapperTypeInfo::{{lifetime}} };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBuffer.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBuffer.cpp
index 79c2ffc..7888ed4 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBuffer.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBuffer.cpp
@@ -23,7 +23,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8ArrayBuffer::wrapperTypeInfo = { gin::kEmbedderBlink, 0, V8ArrayBuffer::trace, 0, 0, V8ArrayBuffer::preparePrototypeAndInterfaceObject, V8ArrayBuffer::installConditionallyEnabledProperties, "ArrayBuffer", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8ArrayBuffer::wrapperTypeInfo = { gin::kEmbedderBlink, 0, V8ArrayBuffer::trace, 0, 0, V8ArrayBuffer::preparePrototypeAndInterfaceObject, nullptr, "ArrayBuffer", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBuffer.h b/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBuffer.h
index 51af0560..ac5d767 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBuffer.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBuffer.h
@@ -31,7 +31,6 @@
         visitor->trace(scriptWrappable->toImpl<TestArrayBuffer>());
     }
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBufferView.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBufferView.cpp
index 4b1abbe0..d35d37f3 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBufferView.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBufferView.cpp
@@ -34,7 +34,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8ArrayBufferView::wrapperTypeInfo = { gin::kEmbedderBlink, 0, V8ArrayBufferView::trace, 0, 0, V8ArrayBufferView::preparePrototypeAndInterfaceObject, V8ArrayBufferView::installConditionallyEnabledProperties, "ArrayBufferView", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8ArrayBufferView::wrapperTypeInfo = { gin::kEmbedderBlink, 0, V8ArrayBufferView::trace, 0, 0, V8ArrayBufferView::preparePrototypeAndInterfaceObject, nullptr, "ArrayBufferView", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBufferView.h b/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBufferView.h
index 82316dea..1e707742a 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBufferView.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBufferView.h
@@ -31,7 +31,6 @@
         visitor->trace(scriptWrappable->toImpl<TestArrayBufferView>());
     }
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8DataView.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8DataView.cpp
index 79e5189..d59c19f 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8DataView.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8DataView.cpp
@@ -23,7 +23,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8DataView::wrapperTypeInfo = { gin::kEmbedderBlink, 0, V8DataView::trace, 0, 0, V8DataView::preparePrototypeAndInterfaceObject, V8DataView::installConditionallyEnabledProperties, "DataView", &V8ArrayBufferView::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8DataView::wrapperTypeInfo = { gin::kEmbedderBlink, 0, V8DataView::trace, 0, 0, V8DataView::preparePrototypeAndInterfaceObject, nullptr, "DataView", &V8ArrayBufferView::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8DataView.h b/third_party/WebKit/Source/bindings/tests/results/core/V8DataView.h
index c268a3ac..f3f5c0a 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8DataView.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8DataView.h
@@ -33,7 +33,6 @@
         visitor->trace(scriptWrappable->toImpl<TestDataView>());
     }
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.cpp
index 0bf7eee..2861e7b 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.cpp
@@ -23,7 +23,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8SVGTestInterface::wrapperTypeInfo = { gin::kEmbedderBlink, V8SVGTestInterface::domTemplate, V8SVGTestInterface::trace, 0, 0, V8SVGTestInterface::preparePrototypeAndInterfaceObject, V8SVGTestInterface::installConditionallyEnabledProperties, "SVGTestInterface", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent };
+const WrapperTypeInfo V8SVGTestInterface::wrapperTypeInfo = { gin::kEmbedderBlink, V8SVGTestInterface::domTemplate, V8SVGTestInterface::trace, 0, 0, V8SVGTestInterface::preparePrototypeAndInterfaceObject, nullptr, "SVGTestInterface", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.h b/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.h
index 3c9c687..50e9cec 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.h
@@ -36,7 +36,6 @@
         visitor->trace(scriptWrappable->toImpl<SVGTestInterface>());
     }
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.cpp
index f173a06b..b123086 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.cpp
@@ -22,7 +22,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestException::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestException::domTemplate, V8TestException::trace, 0, 0, V8TestException::preparePrototypeAndInterfaceObject, V8TestException::installConditionallyEnabledProperties, "TestException", 0, WrapperTypeInfo::WrapperTypeExceptionPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8TestException::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestException::domTemplate, V8TestException::trace, 0, 0, V8TestException::preparePrototypeAndInterfaceObject, nullptr, "TestException", 0, WrapperTypeInfo::WrapperTypeExceptionPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.h
index 6a07f896..0aa2cdb 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.h
@@ -37,7 +37,6 @@
     }
     static void constructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.cpp
index 10b2ee2b..d95245c 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.cpp
@@ -23,7 +23,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestIntegerIndexed::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestIntegerIndexed::domTemplate, V8TestIntegerIndexed::trace, 0, 0, V8TestIntegerIndexed::preparePrototypeAndInterfaceObject, V8TestIntegerIndexed::installConditionallyEnabledProperties, "TestIntegerIndexed", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8TestIntegerIndexed::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestIntegerIndexed::domTemplate, V8TestIntegerIndexed::trace, 0, 0, V8TestIntegerIndexed::preparePrototypeAndInterfaceObject, nullptr, "TestIntegerIndexed", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.h
index edec2cd..32adafd 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.h
@@ -44,7 +44,6 @@
     static void namedPropertyDeleterCustom(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Boolean>&);
     static void namedPropertyEnumeratorCustom(const v8::PropertyCallbackInfo<v8::Array>&);
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.cpp
index 48839da..9ca6f2b 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.cpp
@@ -23,7 +23,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestIntegerIndexedGlobal::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestIntegerIndexedGlobal::domTemplate, V8TestIntegerIndexedGlobal::trace, 0, 0, V8TestIntegerIndexedGlobal::preparePrototypeAndInterfaceObject, V8TestIntegerIndexedGlobal::installConditionallyEnabledProperties, "TestIntegerIndexedGlobal", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8TestIntegerIndexedGlobal::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestIntegerIndexedGlobal::domTemplate, V8TestIntegerIndexedGlobal::trace, 0, 0, V8TestIntegerIndexedGlobal::preparePrototypeAndInterfaceObject, nullptr, "TestIntegerIndexedGlobal", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.h
index 172ca2f..df54432 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.h
@@ -45,7 +45,6 @@
     static void namedPropertyDeleterCustom(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Boolean>&);
     static void namedPropertyEnumeratorCustom(const v8::PropertyCallbackInfo<v8::Array>&);
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.cpp
index 3d2563d..62cfa76 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.cpp
@@ -23,7 +23,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestIntegerIndexedPrimaryGlobal::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestIntegerIndexedPrimaryGlobal::domTemplate, V8TestIntegerIndexedPrimaryGlobal::trace, 0, 0, V8TestIntegerIndexedPrimaryGlobal::preparePrototypeAndInterfaceObject, V8TestIntegerIndexedPrimaryGlobal::installConditionallyEnabledProperties, "TestIntegerIndexedPrimaryGlobal", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8TestIntegerIndexedPrimaryGlobal::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestIntegerIndexedPrimaryGlobal::domTemplate, V8TestIntegerIndexedPrimaryGlobal::trace, 0, 0, V8TestIntegerIndexedPrimaryGlobal::preparePrototypeAndInterfaceObject, nullptr, "TestIntegerIndexedPrimaryGlobal", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.h
index 22ae407..458871e4 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.h
@@ -45,7 +45,6 @@
     static void namedPropertyDeleterCustom(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Boolean>&);
     static void namedPropertyEnumeratorCustom(const v8::PropertyCallbackInfo<v8::Array>&);
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.cpp
index 5195ef7..d72f3e9 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.cpp
@@ -44,7 +44,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-WrapperTypeInfo V8TestInterface::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterface::domTemplate, V8TestInterface::trace, V8TestInterface::toActiveScriptWrappable, V8TestInterface::visitDOMWrapper, V8TestInterface::preparePrototypeAndInterfaceObject, V8TestInterface::installConditionallyEnabledProperties, "TestInterface", &V8TestInterfaceEmpty::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent };
+WrapperTypeInfo V8TestInterface::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterface::domTemplate, V8TestInterface::trace, V8TestInterface::toActiveScriptWrappable, V8TestInterface::visitDOMWrapper, V8TestInterface::preparePrototypeAndInterfaceObject, nullptr, "TestInterface", &V8TestInterfaceEmpty::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.h
index ff86211..9d0f92b 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.h
@@ -49,7 +49,6 @@
     static void implementsCustomVoidMethodMethodCustom(const v8::FunctionCallbackInfo<v8::Value>&);
     static void legacyCallCustom(const v8::FunctionCallbackInfo<v8::Value>&);
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate);
     CORE_EXPORT static void updateWrapperTypeInfo(InstallTemplateFunction, PreparePrototypeAndInterfaceObjectFunction);
     CORE_EXPORT static void installV8TestInterfaceTemplate(v8::Isolate*, const DOMWrapperWorld&, v8::Local<v8::FunctionTemplate> interfaceTemplate);
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.cpp
index c57f899d..3191545 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.cpp
@@ -29,7 +29,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-WrapperTypeInfo V8TestInterface2::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterface2::domTemplate, V8TestInterface2::trace, V8TestInterface2::toActiveScriptWrappable, V8TestInterface2::visitDOMWrapper, V8TestInterface2::preparePrototypeAndInterfaceObject, V8TestInterface2::installConditionallyEnabledProperties, "TestInterface2", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent };
+WrapperTypeInfo V8TestInterface2::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterface2::domTemplate, V8TestInterface2::trace, V8TestInterface2::toActiveScriptWrappable, V8TestInterface2::visitDOMWrapper, V8TestInterface2::preparePrototypeAndInterfaceObject, nullptr, "TestInterface2", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.h
index f5b0841..831cc41b 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.h
@@ -39,7 +39,6 @@
     static ActiveScriptWrappable* toActiveScriptWrappable(v8::Local<v8::Object>);
     static void constructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
     CORE_EXPORT static void updateWrapperTypeInfo(InstallTemplateFunction, PreparePrototypeAndInterfaceObjectFunction);
     CORE_EXPORT static void installV8TestInterface2Template(v8::Isolate*, const DOMWrapperWorld&, v8::Local<v8::FunctionTemplate> interfaceTemplate);
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.cpp
index 228435e1..b77c582 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.cpp
@@ -27,7 +27,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterface3::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterface3::domTemplate, V8TestInterface3::trace, 0, V8TestInterface3::visitDOMWrapper, V8TestInterface3::preparePrototypeAndInterfaceObject, V8TestInterface3::installConditionallyEnabledProperties, "TestInterface3", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent };
+const WrapperTypeInfo V8TestInterface3::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterface3::domTemplate, V8TestInterface3::trace, 0, V8TestInterface3::visitDOMWrapper, V8TestInterface3::preparePrototypeAndInterfaceObject, nullptr, "TestInterface3", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.h
index 3b0e5454..90e6da7 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.h
@@ -44,7 +44,6 @@
     static void namedPropertyDeleterCustom(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Boolean>&);
     static void namedPropertyEnumeratorCustom(const v8::PropertyCallbackInfo<v8::Array>&);
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.cpp
index 6ea272d..2743903 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.cpp
@@ -22,7 +22,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceCheckSecurity::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceCheckSecurity::domTemplate, V8TestInterfaceCheckSecurity::trace, 0, 0, V8TestInterfaceCheckSecurity::preparePrototypeAndInterfaceObject, V8TestInterfaceCheckSecurity::installConditionallyEnabledProperties, "TestInterfaceCheckSecurity", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8TestInterfaceCheckSecurity::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceCheckSecurity::domTemplate, V8TestInterfaceCheckSecurity::trace, 0, 0, V8TestInterfaceCheckSecurity::preparePrototypeAndInterfaceObject, nullptr, "TestInterfaceCheckSecurity", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.h
index e26830e..2298a2a 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.h
@@ -36,7 +36,6 @@
         visitor->trace(scriptWrappable->toImpl<TestInterfaceCheckSecurity>());
     }
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.cpp
index 831a1c94..45f4a983 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.cpp
@@ -27,7 +27,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceConstructor::domTemplate, V8TestInterfaceConstructor::trace, 0, 0, V8TestInterfaceConstructor::preparePrototypeAndInterfaceObject, V8TestInterfaceConstructor::installConditionallyEnabledProperties, "TestInterfaceConstructor", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8TestInterfaceConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceConstructor::domTemplate, V8TestInterfaceConstructor::trace, 0, 0, V8TestInterfaceConstructor::preparePrototypeAndInterfaceObject, nullptr, "TestInterfaceConstructor", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
@@ -269,7 +269,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceConstructorConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceConstructorConstructor::domTemplate, V8TestInterfaceConstructor::trace, 0, 0, V8TestInterfaceConstructor::preparePrototypeAndInterfaceObject, V8TestInterfaceConstructor::installConditionallyEnabledProperties, "TestInterfaceConstructor", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8TestInterfaceConstructorConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceConstructorConstructor::domTemplate, V8TestInterfaceConstructor::trace, 0, 0, V8TestInterfaceConstructor::preparePrototypeAndInterfaceObject, nullptr, "TestInterfaceConstructor", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.h
index d335a9e..45e08b59 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.h
@@ -44,7 +44,6 @@
     }
     static void constructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.cpp
index 883ae6ed..6620ba4 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.cpp
@@ -24,7 +24,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceConstructor2::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceConstructor2::domTemplate, V8TestInterfaceConstructor2::trace, 0, 0, V8TestInterfaceConstructor2::preparePrototypeAndInterfaceObject, V8TestInterfaceConstructor2::installConditionallyEnabledProperties, "TestInterfaceConstructor2", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8TestInterfaceConstructor2::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceConstructor2::domTemplate, V8TestInterfaceConstructor2::trace, 0, 0, V8TestInterfaceConstructor2::preparePrototypeAndInterfaceObject, nullptr, "TestInterfaceConstructor2", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.h
index f2c6e07..33852800 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.h
@@ -37,7 +37,6 @@
     }
     static void constructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.cpp
index dd5169d..d038060 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.cpp
@@ -22,7 +22,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceConstructor3::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceConstructor3::domTemplate, V8TestInterfaceConstructor3::trace, 0, 0, V8TestInterfaceConstructor3::preparePrototypeAndInterfaceObject, V8TestInterfaceConstructor3::installConditionallyEnabledProperties, "TestInterfaceConstructor3", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8TestInterfaceConstructor3::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceConstructor3::domTemplate, V8TestInterfaceConstructor3::trace, 0, 0, V8TestInterfaceConstructor3::preparePrototypeAndInterfaceObject, nullptr, "TestInterfaceConstructor3", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.h
index 5771c3f4..03ee0f8f 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.h
@@ -37,7 +37,6 @@
     }
     static void constructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.cpp
index 0de4733..70691de 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.cpp
@@ -23,7 +23,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceConstructor4::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceConstructor4::domTemplate, V8TestInterfaceConstructor4::trace, 0, 0, V8TestInterfaceConstructor4::preparePrototypeAndInterfaceObject, V8TestInterfaceConstructor4::installConditionallyEnabledProperties, "TestInterfaceConstructor4", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8TestInterfaceConstructor4::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceConstructor4::domTemplate, V8TestInterfaceConstructor4::trace, 0, 0, V8TestInterfaceConstructor4::preparePrototypeAndInterfaceObject, nullptr, "TestInterfaceConstructor4", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.h
index 3ade87d9..0ac4371 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.h
@@ -37,7 +37,6 @@
     }
     static void constructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.cpp
index 57fa0cc..bb9b1be 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.cpp
@@ -22,7 +22,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceCustomConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceCustomConstructor::domTemplate, V8TestInterfaceCustomConstructor::trace, 0, 0, V8TestInterfaceCustomConstructor::preparePrototypeAndInterfaceObject, V8TestInterfaceCustomConstructor::installConditionallyEnabledProperties, "TestInterfaceCustomConstructor", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8TestInterfaceCustomConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceCustomConstructor::domTemplate, V8TestInterfaceCustomConstructor::trace, 0, 0, V8TestInterfaceCustomConstructor::preparePrototypeAndInterfaceObject, nullptr, "TestInterfaceCustomConstructor", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.h
index 11c7f535..3981383 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.h
@@ -38,7 +38,6 @@
     static void constructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
     static void constructorCustom(const v8::FunctionCallbackInfo<v8::Value>&);
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.cpp
index d6bee0af..c4a7617 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.cpp
@@ -27,7 +27,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceDocument::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceDocument::domTemplate, V8TestInterfaceDocument::trace, 0, 0, V8TestInterfaceDocument::preparePrototypeAndInterfaceObject, V8TestInterfaceDocument::installConditionallyEnabledProperties, "TestInterfaceDocument", &V8Document::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::NodeClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Dependent };
+const WrapperTypeInfo V8TestInterfaceDocument::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceDocument::domTemplate, V8TestInterfaceDocument::trace, 0, 0, V8TestInterfaceDocument::preparePrototypeAndInterfaceObject, nullptr, "TestInterfaceDocument", &V8Document::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::NodeClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Dependent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.h
index e83577c..e253b601 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.h
@@ -37,7 +37,6 @@
         visitor->trace(scriptWrappable->toImpl<TestInterfaceDocument>());
     }
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEmpty.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEmpty.cpp
index 24f4e94..1144b8cb 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEmpty.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEmpty.cpp
@@ -21,7 +21,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceEmpty::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceEmpty::domTemplate, V8TestInterfaceEmpty::trace, 0, 0, V8TestInterfaceEmpty::preparePrototypeAndInterfaceObject, V8TestInterfaceEmpty::installConditionallyEnabledProperties, "TestInterfaceEmpty", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8TestInterfaceEmpty::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceEmpty::domTemplate, V8TestInterfaceEmpty::trace, 0, 0, V8TestInterfaceEmpty::preparePrototypeAndInterfaceObject, nullptr, "TestInterfaceEmpty", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEmpty.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEmpty.h
index d8723ae..d603871 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEmpty.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEmpty.h
@@ -36,7 +36,6 @@
         visitor->trace(scriptWrappable->toImpl<TestInterfaceEmpty>());
     }
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.cpp
index a76c579..5af29d14 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.cpp
@@ -24,7 +24,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceEventInitConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceEventInitConstructor::domTemplate, V8TestInterfaceEventInitConstructor::trace, 0, 0, V8TestInterfaceEventInitConstructor::preparePrototypeAndInterfaceObject, V8TestInterfaceEventInitConstructor::installConditionallyEnabledProperties, "TestInterfaceEventInitConstructor", &V8Event::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8TestInterfaceEventInitConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceEventInitConstructor::domTemplate, V8TestInterfaceEventInitConstructor::trace, 0, 0, V8TestInterfaceEventInitConstructor::preparePrototypeAndInterfaceObject, nullptr, "TestInterfaceEventInitConstructor", &V8Event::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.h
index ba694755..b9069e9 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.h
@@ -38,7 +38,6 @@
     }
     static void constructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.cpp
index ecec150..0423f80 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.cpp
@@ -22,7 +22,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceEventTarget::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceEventTarget::domTemplate, V8TestInterfaceEventTarget::trace, 0, 0, V8TestInterfaceEventTarget::preparePrototypeAndInterfaceObject, V8TestInterfaceEventTarget::installConditionallyEnabledProperties, "TestInterfaceEventTarget", &V8EventTarget::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8TestInterfaceEventTarget::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceEventTarget::domTemplate, V8TestInterfaceEventTarget::trace, 0, 0, V8TestInterfaceEventTarget::preparePrototypeAndInterfaceObject, nullptr, "TestInterfaceEventTarget", &V8EventTarget::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
@@ -42,7 +42,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceEventTargetConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceEventTargetConstructor::domTemplate, V8TestInterfaceEventTarget::trace, 0, 0, V8TestInterfaceEventTarget::preparePrototypeAndInterfaceObject, V8TestInterfaceEventTarget::installConditionallyEnabledProperties, "TestInterfaceEventTarget", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8TestInterfaceEventTargetConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceEventTargetConstructor::domTemplate, V8TestInterfaceEventTarget::trace, 0, 0, V8TestInterfaceEventTarget::preparePrototypeAndInterfaceObject, nullptr, "TestInterfaceEventTarget", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.h
index 0f804fb..6bc2b4e7 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.h
@@ -45,7 +45,6 @@
     }
     static const int eventListenerCacheIndex = v8DefaultWrapperInternalFieldCount + 0;
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 1;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.cpp
index f379922..48b38cf 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.cpp
@@ -26,7 +26,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceGarbageCollected::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceGarbageCollected::domTemplate, V8TestInterfaceGarbageCollected::trace, 0, 0, V8TestInterfaceGarbageCollected::preparePrototypeAndInterfaceObject, V8TestInterfaceGarbageCollected::installConditionallyEnabledProperties, "TestInterfaceGarbageCollected", &V8EventTarget::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8TestInterfaceGarbageCollected::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceGarbageCollected::domTemplate, V8TestInterfaceGarbageCollected::trace, 0, 0, V8TestInterfaceGarbageCollected::preparePrototypeAndInterfaceObject, nullptr, "TestInterfaceGarbageCollected", &V8EventTarget::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.h
index 4f5e381..0dda408 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.h
@@ -39,7 +39,6 @@
     static void constructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
     static const int eventListenerCacheIndex = v8DefaultWrapperInternalFieldCount + 0;
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 1;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.cpp
index 2ad4dc8..da6d408 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.cpp
@@ -22,7 +22,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceNamedConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceNamedConstructor::domTemplate, V8TestInterfaceNamedConstructor::trace, V8TestInterfaceNamedConstructor::toActiveScriptWrappable, 0, V8TestInterfaceNamedConstructor::preparePrototypeAndInterfaceObject, V8TestInterfaceNamedConstructor::installConditionallyEnabledProperties, "TestInterfaceNamedConstructor", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent };
+const WrapperTypeInfo V8TestInterfaceNamedConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceNamedConstructor::domTemplate, V8TestInterfaceNamedConstructor::trace, V8TestInterfaceNamedConstructor::toActiveScriptWrappable, 0, V8TestInterfaceNamedConstructor::preparePrototypeAndInterfaceObject, nullptr, "TestInterfaceNamedConstructor", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
@@ -55,7 +55,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceNamedConstructorConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceNamedConstructorConstructor::domTemplate, V8TestInterfaceNamedConstructor::trace, V8TestInterfaceNamedConstructor::toActiveScriptWrappable, 0, V8TestInterfaceNamedConstructor::preparePrototypeAndInterfaceObject, V8TestInterfaceNamedConstructor::installConditionallyEnabledProperties, "TestInterfaceNamedConstructor", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent };
+const WrapperTypeInfo V8TestInterfaceNamedConstructorConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceNamedConstructorConstructor::domTemplate, V8TestInterfaceNamedConstructor::trace, V8TestInterfaceNamedConstructor::toActiveScriptWrappable, 0, V8TestInterfaceNamedConstructor::preparePrototypeAndInterfaceObject, nullptr, "TestInterfaceNamedConstructor", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.h
index c161de0..9a12c2f 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.h
@@ -44,7 +44,6 @@
     }
     static ActiveScriptWrappable* toActiveScriptWrappable(v8::Local<v8::Object>);
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.cpp
index c3aeae8a..6f253ee9 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.cpp
@@ -22,7 +22,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceNamedConstructor2::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceNamedConstructor2::domTemplate, V8TestInterfaceNamedConstructor2::trace, 0, 0, V8TestInterfaceNamedConstructor2::preparePrototypeAndInterfaceObject, V8TestInterfaceNamedConstructor2::installConditionallyEnabledProperties, "TestInterfaceNamedConstructor2", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8TestInterfaceNamedConstructor2::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceNamedConstructor2::domTemplate, V8TestInterfaceNamedConstructor2::trace, 0, 0, V8TestInterfaceNamedConstructor2::preparePrototypeAndInterfaceObject, nullptr, "TestInterfaceNamedConstructor2", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
@@ -42,7 +42,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceNamedConstructor2Constructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceNamedConstructor2Constructor::domTemplate, V8TestInterfaceNamedConstructor2::trace, 0, 0, V8TestInterfaceNamedConstructor2::preparePrototypeAndInterfaceObject, V8TestInterfaceNamedConstructor2::installConditionallyEnabledProperties, "TestInterfaceNamedConstructor2", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8TestInterfaceNamedConstructor2Constructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceNamedConstructor2Constructor::domTemplate, V8TestInterfaceNamedConstructor2::trace, 0, 0, V8TestInterfaceNamedConstructor2::preparePrototypeAndInterfaceObject, nullptr, "TestInterfaceNamedConstructor2", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.h
index 8c8d1f3..f31ed50 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.h
@@ -43,7 +43,6 @@
         visitor->trace(scriptWrappable->toImpl<TestInterfaceNamedConstructor2>());
     }
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.cpp
index ad01d4c..3c79dee 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.cpp
@@ -26,7 +26,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceNode::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceNode::domTemplate, V8TestInterfaceNode::trace, 0, 0, V8TestInterfaceNode::preparePrototypeAndInterfaceObject, V8TestInterfaceNode::installConditionallyEnabledProperties, "TestInterfaceNode", &V8Node::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::NodeClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Dependent };
+const WrapperTypeInfo V8TestInterfaceNode::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceNode::domTemplate, V8TestInterfaceNode::trace, 0, 0, V8TestInterfaceNode::preparePrototypeAndInterfaceObject, nullptr, "TestInterfaceNode", &V8Node::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::NodeClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Dependent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.h
index 80a23c5..b2e9683d 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.h
@@ -37,7 +37,6 @@
         visitor->trace(scriptWrappable->toImpl<TestInterfaceNode>());
     }
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.cpp
index fcaa0d4..23aaf6d 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.cpp
@@ -24,7 +24,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceOriginTrialEnabled::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceOriginTrialEnabled::domTemplate, V8TestInterfaceOriginTrialEnabled::trace, 0, 0, V8TestInterfaceOriginTrialEnabled::preparePrototypeAndInterfaceObject, V8TestInterfaceOriginTrialEnabled::installConditionallyEnabledProperties, "TestInterfaceOriginTrialEnabled", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8TestInterfaceOriginTrialEnabled::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceOriginTrialEnabled::domTemplate, V8TestInterfaceOriginTrialEnabled::trace, 0, 0, V8TestInterfaceOriginTrialEnabled::preparePrototypeAndInterfaceObject, nullptr, "TestInterfaceOriginTrialEnabled", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.h
index 03b5ec67..0687b82 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.h
@@ -36,7 +36,6 @@
         visitor->trace(scriptWrappable->toImpl<TestInterfaceOriginTrialEnabled>());
     }
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.cpp
index 724645f..873356e 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.cpp
@@ -22,7 +22,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestNode::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestNode::domTemplate, V8TestNode::trace, 0, 0, V8TestNode::preparePrototypeAndInterfaceObject, V8TestNode::installConditionallyEnabledProperties, "TestNode", &V8Node::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::NodeClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Dependent };
+const WrapperTypeInfo V8TestNode::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestNode::domTemplate, V8TestNode::trace, 0, 0, V8TestNode::preparePrototypeAndInterfaceObject, nullptr, "TestNode", &V8Node::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::NodeClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Dependent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.h
index 58d24d79..f8b674f 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.h
@@ -38,7 +38,6 @@
     }
     static void constructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp
index d29b2c37..4ed419b8 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp
@@ -80,7 +80,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestObject::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestObject::domTemplate, V8TestObject::trace, 0, 0, V8TestObject::preparePrototypeAndInterfaceObject, V8TestObject::installConditionallyEnabledProperties, "TestObject", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8TestObject::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestObject::domTemplate, V8TestObject::trace, 0, 0, V8TestObject::preparePrototypeAndInterfaceObject, nullptr, "TestObject", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.h
index d4e9b69..27234cf0 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.h
@@ -71,7 +71,6 @@
     static void customGetterImplementedAsLongAttributeAttributeGetterCustom(const v8::FunctionCallbackInfo<v8::Value>&);
     static void customSetterImplementedAsLongAttributeAttributeSetterCustom(v8::Local<v8::Value>, const v8::FunctionCallbackInfo<v8::Value>&);
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate);
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.cpp
index b0b3ae7..4b7ec2a 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.cpp
@@ -28,7 +28,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestSpecialOperations::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestSpecialOperations::domTemplate, V8TestSpecialOperations::trace, 0, 0, V8TestSpecialOperations::preparePrototypeAndInterfaceObject, V8TestSpecialOperations::installConditionallyEnabledProperties, "TestSpecialOperations", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8TestSpecialOperations::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestSpecialOperations::domTemplate, V8TestSpecialOperations::trace, 0, 0, V8TestSpecialOperations::preparePrototypeAndInterfaceObject, nullptr, "TestSpecialOperations", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.h
index 4770a17..d461b6d 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.h
@@ -36,7 +36,6 @@
         visitor->trace(scriptWrappable->toImpl<TestSpecialOperations>());
     }
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.cpp
index 7b8e399e..329eb12 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.cpp
@@ -21,7 +21,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestSpecialOperationsNotEnumerable::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestSpecialOperationsNotEnumerable::domTemplate, V8TestSpecialOperationsNotEnumerable::trace, 0, 0, V8TestSpecialOperationsNotEnumerable::preparePrototypeAndInterfaceObject, V8TestSpecialOperationsNotEnumerable::installConditionallyEnabledProperties, "TestSpecialOperationsNotEnumerable", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8TestSpecialOperationsNotEnumerable::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestSpecialOperationsNotEnumerable::domTemplate, V8TestSpecialOperationsNotEnumerable::trace, 0, 0, V8TestSpecialOperationsNotEnumerable::preparePrototypeAndInterfaceObject, nullptr, "TestSpecialOperationsNotEnumerable", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.h
index 29fba29..cd24523 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.h
@@ -36,7 +36,6 @@
         visitor->trace(scriptWrappable->toImpl<TestSpecialOperationsNotEnumerable>());
     }
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.cpp
index 3ae7c1a1..ad39522f 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.cpp
@@ -26,7 +26,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestTypedefs::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestTypedefs::domTemplate, V8TestTypedefs::trace, 0, 0, V8TestTypedefs::preparePrototypeAndInterfaceObject, V8TestTypedefs::installConditionallyEnabledProperties, "TestTypedefs", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8TestTypedefs::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestTypedefs::domTemplate, V8TestTypedefs::trace, 0, 0, V8TestTypedefs::preparePrototypeAndInterfaceObject, nullptr, "TestTypedefs", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.h
index 590ff95..c0e120e1 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.h
@@ -37,7 +37,6 @@
     }
     static void constructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8Uint8ClampedArray.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8Uint8ClampedArray.cpp
index 9616b9a6..71a506e 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8Uint8ClampedArray.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8Uint8ClampedArray.cpp
@@ -23,7 +23,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8Uint8ClampedArray::wrapperTypeInfo = { gin::kEmbedderBlink, 0, V8Uint8ClampedArray::trace, 0, 0, V8Uint8ClampedArray::preparePrototypeAndInterfaceObject, V8Uint8ClampedArray::installConditionallyEnabledProperties, "Uint8ClampedArray", &V8ArrayBufferView::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
+const WrapperTypeInfo V8Uint8ClampedArray::wrapperTypeInfo = { gin::kEmbedderBlink, 0, V8Uint8ClampedArray::trace, 0, 0, V8Uint8ClampedArray::preparePrototypeAndInterfaceObject, nullptr, "Uint8ClampedArray", &V8ArrayBufferView::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8Uint8ClampedArray.h b/third_party/WebKit/Source/bindings/tests/results/core/V8Uint8ClampedArray.h
index 8425073..918bf08 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8Uint8ClampedArray.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8Uint8ClampedArray.h
@@ -33,7 +33,6 @@
         visitor->trace(scriptWrappable->toImpl<TestUint8ClampedArray>());
     }
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     CORE_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
 };
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.cpp b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.cpp
index 4d0bca2..58cd1b9 100644
--- a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.cpp
@@ -28,7 +28,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterface5::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterface5::domTemplate, V8TestInterface5::trace, V8TestInterface5::toActiveScriptWrappable, V8TestInterface5::visitDOMWrapper, V8TestInterface5::preparePrototypeAndInterfaceObject, V8TestInterface5::installConditionallyEnabledProperties, "TestInterface5", &V8TestInterfaceEmpty::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent };
+const WrapperTypeInfo V8TestInterface5::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterface5::domTemplate, V8TestInterface5::trace, V8TestInterface5::toActiveScriptWrappable, V8TestInterface5::visitDOMWrapper, V8TestInterface5::preparePrototypeAndInterfaceObject, nullptr, "TestInterface5", &V8TestInterfaceEmpty::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.h b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.h
index 74009c4..8bec41e 100644
--- a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.h
+++ b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.h
@@ -40,7 +40,6 @@
     static ActiveScriptWrappable* toActiveScriptWrappable(v8::Local<v8::Object>);
     static void legacyCallCustom(const v8::FunctionCallbackInfo<v8::Value>&);
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
-    static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     MODULES_EXPORT static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, const DOMWrapperWorld&, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate);
 };
 
diff --git a/third_party/WebKit/Source/core/css/html.css b/third_party/WebKit/Source/core/css/html.css
index 3d23a2d..af8debd6 100644
--- a/third_party/WebKit/Source/core/css/html.css
+++ b/third_party/WebKit/Source/core/css/html.css
@@ -845,6 +845,7 @@
     height: 1em;
     width: 5em;
     vertical-align: -0.2em;
+    -webkit-user-modify: read-only !important;
 }
 
 meter::-webkit-meter-inner-element {
diff --git a/third_party/WebKit/Source/core/dom/Document.cpp b/third_party/WebKit/Source/core/dom/Document.cpp
index 45a91520..8c475bbf 100644
--- a/third_party/WebKit/Source/core/dom/Document.cpp
+++ b/third_party/WebKit/Source/core/dom/Document.cpp
@@ -1873,7 +1873,7 @@
     return false;
 }
 
-void Document::updateLayoutTreeForNode(Node* node)
+void Document::updateLayoutTreeForNode(const Node* node)
 {
     DCHECK(node);
     if (!needsLayoutTreeUpdateForNode(*node))
diff --git a/third_party/WebKit/Source/core/dom/Document.h b/third_party/WebKit/Source/core/dom/Document.h
index 5ff715d1..4a5afa0 100644
--- a/third_party/WebKit/Source/core/dom/Document.h
+++ b/third_party/WebKit/Source/core/dom/Document.h
@@ -424,7 +424,7 @@
     void updateLayoutTree();
     // Same as updateLayoutTree() except ignoring pending stylesheets.
     void updateLayoutTreeIgnorePendingStylesheets();
-    void updateLayoutTreeForNode(Node*);
+    void updateLayoutTreeForNode(const Node*);
     void updateLayout();
     void layoutUpdated();
     enum RunPostLayoutTasks {
diff --git a/third_party/WebKit/Source/core/frame/ImageBitmap.cpp b/third_party/WebKit/Source/core/frame/ImageBitmap.cpp
index 62de013..030f8964 100644
--- a/third_party/WebKit/Source/core/frame/ImageBitmap.cpp
+++ b/third_party/WebKit/Source/core/frame/ImageBitmap.cpp
@@ -7,6 +7,7 @@
 #include "core/html/HTMLCanvasElement.h"
 #include "core/html/HTMLVideoElement.h"
 #include "core/html/ImageData.h"
+#include "platform/graphics/skia/SkiaUtils.h"
 #include "platform/image-decoders/ImageDecoder.h"
 #include "third_party/skia/include/core/SkSurface.h"
 #include "wtf/RefPtr.h"
@@ -402,6 +403,12 @@
     m_isNeutered = true;
 }
 
+// static
+ImageBitmap* ImageBitmap::take(ScriptPromiseResolver*, sk_sp<SkImage> image)
+{
+    return ImageBitmap::create(StaticBitmapImage::create(fromSkSp(image)));
+}
+
 PassOwnPtr<uint8_t[]> ImageBitmap::copyBitmapData(AlphaDisposition alphaOp)
 {
     SkImageInfo info = SkImageInfo::Make(width(), height(), kRGBA_8888_SkColorType, (alphaOp == PremultiplyAlpha) ? kPremul_SkAlphaType : kUnpremul_SkAlphaType);
diff --git a/third_party/WebKit/Source/core/frame/ImageBitmap.h b/third_party/WebKit/Source/core/frame/ImageBitmap.h
index d9174eb..61772a4 100644
--- a/third_party/WebKit/Source/core/frame/ImageBitmap.h
+++ b/third_party/WebKit/Source/core/frame/ImageBitmap.h
@@ -42,6 +42,10 @@
     static ImageBitmap* create(PassRefPtr<StaticBitmapImage>, const IntRect&, const ImageBitmapOptions& = ImageBitmapOptions());
     static PassRefPtr<SkImage> getSkImageFromDecoder(PassOwnPtr<ImageDecoder>);
 
+    // Type and helper function required by CallbackPromiseAdapter:
+    using WebType = sk_sp<SkImage>;
+    static ImageBitmap* take(ScriptPromiseResolver*, sk_sp<SkImage>);
+
     StaticBitmapImage* bitmapImage() const { return (m_image) ? m_image.get() : nullptr; }
     PassOwnPtr<uint8_t[]> copyBitmapData(AlphaDisposition alphaOp = DontPremultiplyAlpha);
     unsigned long width() const;
diff --git a/third_party/WebKit/Source/core/html/HTMLMeterElement.cpp b/third_party/WebKit/Source/core/html/HTMLMeterElement.cpp
index d84e2ea9..ad35299 100644
--- a/third_party/WebKit/Source/core/html/HTMLMeterElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLMeterElement.cpp
@@ -24,8 +24,10 @@
 #include "bindings/core/v8/ExceptionState.h"
 #include "bindings/core/v8/ExceptionStatePlaceholder.h"
 #include "core/HTMLNames.h"
+#include "core/dom/NodeComputedStyle.h"
 #include "core/dom/shadow/ShadowRoot.h"
 #include "core/frame/UseCounter.h"
+#include "core/html/HTMLContentElement.h"
 #include "core/html/HTMLDivElement.h"
 #include "core/html/parser/HTMLParserIdioms.h"
 #include "core/layout/LayoutObject.h"
@@ -35,6 +37,70 @@
 
 using namespace HTMLNames;
 
+// ----------------------------------------------------------------
+
+class MeterFallbackElement final : public HTMLDivElement {
+public:
+    DECLARE_NODE_FACTORY(MeterFallbackElement);
+
+private:
+    explicit MeterFallbackElement(Document& doc)
+        : HTMLDivElement(doc)
+    {
+        setHasCustomStyleCallbacks();
+    }
+
+    PassRefPtr<ComputedStyle> customStyleForLayoutObject() override
+    {
+        // We can't use setInlineStyleProperty() because it updates the DOM
+        // tree.  We shouldn't do it during style calculation.
+        // TODO(tkent): Injecting a CSS variable by host is a better approach?
+        Element* host = shadowHost();
+        RefPtr<ComputedStyle> style = originalStyleForLayoutObject();
+        if (!host || !host->computedStyle() || host->computedStyle()->appearance() != MeterPart || style->display() == NONE)
+            return style.release();
+        RefPtr<ComputedStyle> newStyle = ComputedStyle::clone(*style);
+        newStyle->setDisplay(NONE);
+        newStyle->setUnique();
+        return newStyle.release();
+    }
+};
+
+DEFINE_NODE_FACTORY(MeterFallbackElement)
+
+// ----------------------------------------------------------------
+
+class MeterInnerElement final : public HTMLDivElement {
+public:
+    DECLARE_NODE_FACTORY(MeterInnerElement);
+
+private:
+    explicit MeterInnerElement(Document& doc)
+        : HTMLDivElement(doc)
+    {
+        setHasCustomStyleCallbacks();
+    }
+
+    PassRefPtr<ComputedStyle> customStyleForLayoutObject() override
+    {
+        // We can't use setInlineStyleProperty() because it updates the DOM
+        // tree.  We shouldn't do it during style calculation.
+        // TODO(tkent): Injecting a CSS variable by host is a better approach?
+        Element* host = shadowHost();
+        RefPtr<ComputedStyle> style = originalStyleForLayoutObject();
+        if (!host || !host->computedStyle() || host->computedStyle()->appearance() == MeterPart || style->display() == NONE)
+            return style.release();
+        RefPtr<ComputedStyle> newStyle = ComputedStyle::clone(*style);
+        newStyle->setDisplay(NONE);
+        newStyle->setUnique();
+        return newStyle.release();
+    }
+};
+
+DEFINE_NODE_FACTORY(MeterInnerElement)
+
+// ----------------------------------------------------------------
+
 HTMLMeterElement::HTMLMeterElement(Document& document)
     : LabelableElement(meterTag, document)
 {
@@ -192,7 +258,7 @@
 {
     ASSERT(!m_value);
 
-    HTMLDivElement* inner = HTMLDivElement::create(document());
+    MeterInnerElement* inner = MeterInnerElement::create(document());
     inner->setShadowPseudoId(AtomicString("-webkit-meter-inner-element"));
     root.appendChild(inner);
 
@@ -204,6 +270,10 @@
     bar->appendChild(m_value);
 
     inner->appendChild(bar);
+
+    MeterFallbackElement* fallback = MeterFallbackElement::create(document());
+    fallback->appendChild(HTMLContentElement::create(document()));
+    root.appendChild(fallback);
 }
 
 void HTMLMeterElement::updateValueAppearance(double percentage)
@@ -226,6 +296,12 @@
     }
 }
 
+bool HTMLMeterElement::canContainRangeEndPoint() const
+{
+    document().updateLayoutTreeForNode(this);
+    return computedStyle() && !computedStyle()->hasAppearance();
+}
+
 DEFINE_TRACE(HTMLMeterElement)
 {
     visitor->trace(m_value);
diff --git a/third_party/WebKit/Source/core/html/HTMLMeterElement.h b/third_party/WebKit/Source/core/html/HTMLMeterElement.h
index 3a0e1a3..e13c7d9 100644
--- a/third_party/WebKit/Source/core/html/HTMLMeterElement.h
+++ b/third_party/WebKit/Source/core/html/HTMLMeterElement.h
@@ -60,7 +60,7 @@
     double valueRatio() const;
     GaugeRegion getGaugeRegion() const;
 
-    bool canContainRangeEndPoint() const override { return false; }
+    bool canContainRangeEndPoint() const override;
 
     DECLARE_VIRTUAL_TRACE();
 
diff --git a/third_party/WebKit/Source/core/inspector/InspectorDebuggerAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorDebuggerAgent.cpp
index 3df7e846..669b7d3 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorDebuggerAgent.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorDebuggerAgent.cpp
@@ -244,7 +244,7 @@
 void InspectorDebuggerAgent::setBlackboxPatterns(ErrorString* errorString,
     PassOwnPtr<protocol::Array<String16>> patterns)
 {
-    m_v8DebuggerAgent->setBlackboxPatterns(errorString, patterns);
+    m_v8DebuggerAgent->setBlackboxPatterns(errorString, std::move(patterns));
 }
 
 void InspectorDebuggerAgent::setBlackboxedRanges(
diff --git a/third_party/WebKit/Source/core/inspector/ThreadDebugger.cpp b/third_party/WebKit/Source/core/inspector/ThreadDebugger.cpp
index f953c5f..0ef90d1 100644
--- a/third_party/WebKit/Source/core/inspector/ThreadDebugger.cpp
+++ b/third_party/WebKit/Source/core/inspector/ThreadDebugger.cpp
@@ -137,7 +137,7 @@
     int id = ++m_lastTimerId;
     OwnPtr<Timer<ThreadDebugger>> timer = adoptPtr(new Timer<ThreadDebugger>(this, &ThreadDebugger::onTimer));
     Timer<ThreadDebugger>* timerPtr = timer.get();
-    m_timerCallbacks.set(timerPtr, callback);
+    m_timerCallbacks.set(timerPtr, std::move(callback));
     m_timers.set(id, timer.release());
     timerPtr->startRepeating(interval, BLINK_FROM_HERE);
     return id;
diff --git a/third_party/WebKit/Source/core/layout/LayoutTheme.cpp b/third_party/WebKit/Source/core/layout/LayoutTheme.cpp
index 6f3258c..ba75ce86 100644
--- a/third_party/WebKit/Source/core/layout/LayoutTheme.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutTheme.cpp
@@ -397,7 +397,6 @@
     case SquareButtonPart:
     case ButtonPart:
     case ProgressBarPart:
-    case MeterPart:
         return style.hasAuthorBackground() || style.hasAuthorBorder();
 
     case MenulistPart:
diff --git a/third_party/WebKit/Source/core/loader/BeaconLoader.cpp b/third_party/WebKit/Source/core/loader/BeaconLoader.cpp
index 2732564..f84f614e 100644
--- a/third_party/WebKit/Source/core/loader/BeaconLoader.cpp
+++ b/third_party/WebKit/Source/core/loader/BeaconLoader.cpp
@@ -31,39 +31,126 @@
 public:
     virtual bool serialize(ResourceRequest&, int, int&) const = 0;
     virtual unsigned long long size() const = 0;
-
-protected:
-    static unsigned long long beaconSize(const String&);
-    static unsigned long long beaconSize(Blob*);
-    static unsigned long long beaconSize(DOMArrayBufferView*);
-    static unsigned long long beaconSize(FormData*);
-
-    static bool serialize(const String&, ResourceRequest&, int, int&);
-    static bool serialize(Blob*, ResourceRequest&, int, int&);
-    static bool serialize(DOMArrayBufferView*, ResourceRequest&, int, int&);
-    static bool serialize(FormData*, ResourceRequest&, int, int&);
 };
 
-template<typename Payload>
-class BeaconData final : public Beacon {
+class BeaconString final : public Beacon {
 public:
-    BeaconData(const Payload& data)
+    BeaconString(const String& data)
         : m_data(data)
     {
     }
 
-    bool serialize(ResourceRequest& request, int allowance, int& payloadLength) const override
+    unsigned long long size() const override
     {
-        return Beacon::serialize(m_data, request, allowance, payloadLength);
+        return m_data.sizeInBytes();
+    }
+
+    bool serialize(ResourceRequest& request, int, int&) const override
+    {
+        RefPtr<EncodedFormData> entityBody = EncodedFormData::create(m_data.utf8());
+        request.setHTTPBody(entityBody);
+        request.setHTTPContentType("text/plain;charset=UTF-8");
+        return true;
+    }
+
+private:
+    const String m_data;
+};
+
+class BeaconBlob final : public Beacon {
+public:
+    BeaconBlob(Blob* data)
+        : m_data(data)
+    {
     }
 
     unsigned long long size() const override
     {
-        return beaconSize(m_data);
+        return m_data->size();
+    }
+
+    bool serialize(ResourceRequest& request, int, int&) const override
+    {
+        ASSERT(m_data);
+        RefPtr<EncodedFormData> entityBody = EncodedFormData::create();
+        if (m_data->hasBackingFile())
+            entityBody->appendFile(toFile(m_data)->path());
+        else
+            entityBody->appendBlob(m_data->uuid(), m_data->blobDataHandle());
+
+        request.setHTTPBody(entityBody.release());
+
+        const String& blobType = m_data->type();
+        if (!blobType.isEmpty() && isValidContentType(blobType))
+            request.setHTTPContentType(AtomicString(blobType));
+
+        return true;
     }
 
 private:
-    const typename WTF::ParamStorageTraits<Payload>::StorageType m_data;
+    const Persistent<Blob> m_data;
+};
+
+class BeaconDOMArrayBufferView final : public Beacon {
+public:
+    BeaconDOMArrayBufferView(DOMArrayBufferView* data)
+        : m_data(data)
+    {
+    }
+
+    unsigned long long size() const override
+    {
+        return m_data->byteLength();
+    }
+
+    bool serialize(ResourceRequest& request, int, int&) const override
+    {
+        ASSERT(m_data);
+        RefPtr<EncodedFormData> entityBody = EncodedFormData::create(m_data->baseAddress(), m_data->byteLength());
+        request.setHTTPBody(entityBody.release());
+
+        // FIXME: a reasonable choice, but not in the spec; should it give a default?
+        AtomicString contentType = AtomicString("application/octet-stream");
+        request.setHTTPContentType(contentType);
+
+        return true;
+    }
+
+private:
+    const Persistent<DOMArrayBufferView> m_data;
+};
+
+class BeaconFormData final : public Beacon {
+public:
+    BeaconFormData(FormData* data)
+        : m_data(data)
+    {
+    }
+
+    unsigned long long size() const override
+    {
+        // FormData's size cannot be determined until serialized.
+        return 0;
+    }
+
+    bool serialize(ResourceRequest& request, int allowance, int& payloadLength) const override
+    {
+        ASSERT(m_data);
+        RefPtr<EncodedFormData> entityBody = m_data->encodeMultiPartFormData();
+        unsigned long long entitySize = entityBody->sizeInBytes();
+        if (allowance > 0 && static_cast<unsigned long long>(allowance) < entitySize)
+            return false;
+
+        AtomicString contentType = AtomicString("multipart/form-data; boundary=") + entityBody->boundary().data();
+        request.setHTTPBody(entityBody.release());
+        request.setHTTPContentType(contentType);
+
+        payloadLength = entitySize;
+        return true;
+    }
+
+private:
+    const Persistent<FormData> m_data;
 };
 
 } // namespace
@@ -106,25 +193,25 @@
 
 bool BeaconLoader::sendBeacon(LocalFrame* frame, int allowance, const KURL& beaconURL, const String& data, int& payloadLength)
 {
-    BeaconData<String> beacon(data);
+    BeaconString beacon(data);
     return Sender::send(frame, allowance, beaconURL, beacon, payloadLength);
 }
 
 bool BeaconLoader::sendBeacon(LocalFrame* frame, int allowance, const KURL& beaconURL, DOMArrayBufferView* data, int& payloadLength)
 {
-    BeaconData<decltype(data)> beacon(data);
+    BeaconDOMArrayBufferView beacon(data);
     return Sender::send(frame, allowance, beaconURL, beacon, payloadLength);
 }
 
 bool BeaconLoader::sendBeacon(LocalFrame* frame, int allowance, const KURL& beaconURL, FormData* data, int& payloadLength)
 {
-    BeaconData<decltype(data)> beacon(data);
+    BeaconFormData beacon(data);
     return Sender::send(frame, allowance, beaconURL, beacon, payloadLength);
 }
 
 bool BeaconLoader::sendBeacon(LocalFrame* frame, int allowance, const KURL& beaconURL, Blob* data, int& payloadLength)
 {
-    BeaconData<decltype(data)> beacon(data);
+    BeaconBlob beacon(data);
     return Sender::send(frame, allowance, beaconURL, beacon, payloadLength);
 }
 
@@ -159,84 +246,4 @@
     // updates of Origin: following this successful redirect.
 }
 
-namespace {
-
-unsigned long long Beacon::beaconSize(const String& data)
-{
-    return data.sizeInBytes();
-}
-
-bool Beacon::serialize(const String& data, ResourceRequest& request, int, int&)
-{
-    RefPtr<EncodedFormData> entityBody = EncodedFormData::create(data.utf8());
-    request.setHTTPBody(entityBody);
-    request.setHTTPContentType("text/plain;charset=UTF-8");
-    return true;
-}
-
-unsigned long long Beacon::beaconSize(Blob* data)
-{
-    return data->size();
-}
-
-bool Beacon::serialize(Blob* data, ResourceRequest& request, int, int&)
-{
-    ASSERT(data);
-    RefPtr<EncodedFormData> entityBody = EncodedFormData::create();
-    if (data->hasBackingFile())
-        entityBody->appendFile(toFile(data)->path());
-    else
-        entityBody->appendBlob(data->uuid(), data->blobDataHandle());
-
-    request.setHTTPBody(entityBody.release());
-
-    const String& blobType = data->type();
-    if (!blobType.isEmpty() && isValidContentType(blobType))
-        request.setHTTPContentType(AtomicString(blobType));
-
-    return true;
-}
-
-unsigned long long Beacon::beaconSize(DOMArrayBufferView* data)
-{
-    return data->byteLength();
-}
-
-bool Beacon::serialize(DOMArrayBufferView* data, ResourceRequest& request, int, int&)
-{
-    ASSERT(data);
-    RefPtr<EncodedFormData> entityBody = EncodedFormData::create(data->baseAddress(), data->byteLength());
-    request.setHTTPBody(entityBody.release());
-
-    // FIXME: a reasonable choice, but not in the spec; should it give a default?
-    AtomicString contentType = AtomicString("application/octet-stream");
-    request.setHTTPContentType(contentType);
-
-    return true;
-}
-
-unsigned long long Beacon::beaconSize(FormData*)
-{
-    // FormData's size cannot be determined until serialized.
-    return 0;
-}
-
-bool Beacon::serialize(FormData* data, ResourceRequest& request, int allowance, int& payloadLength)
-{
-    ASSERT(data);
-    RefPtr<EncodedFormData> entityBody = data->encodeMultiPartFormData();
-    unsigned long long entitySize = entityBody->sizeInBytes();
-    if (allowance > 0 && static_cast<unsigned long long>(allowance) < entitySize)
-        return false;
-
-    AtomicString contentType = AtomicString("multipart/form-data; boundary=") + entityBody->boundary().data();
-    request.setHTTPBody(entityBody.release());
-    request.setHTTPContentType(contentType);
-
-    payloadLength = entitySize;
-    return true;
-}
-
-} // namespace
-
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.cpp b/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.cpp
index e7422f9..7712195 100644
--- a/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.cpp
+++ b/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.cpp
@@ -99,7 +99,7 @@
     CanvasRenderingContext::ContextType type = renderingContextFactory->getContextType();
     ASSERT(type < CanvasRenderingContext::ContextTypeCount);
     ASSERT(!renderingContextFactories()[type]);
-    renderingContextFactories()[type] = renderingContextFactory;
+    renderingContextFactories()[type] = std::move(renderingContextFactory);
 }
 
 DEFINE_TRACE(OffscreenCanvas)
diff --git a/third_party/WebKit/Source/devtools/front_end/profiler/CPUProfileView.js b/third_party/WebKit/Source/devtools/front_end/profiler/CPUProfileView.js
index 4281fbe..3c638a0 100644
--- a/third_party/WebKit/Source/devtools/front_end/profiler/CPUProfileView.js
+++ b/third_party/WebKit/Source/devtools/front_end/profiler/CPUProfileView.js
@@ -62,7 +62,7 @@
  */
 WebInspector.CPUProfileType = function()
 {
-    WebInspector.ProfileType.call(this, WebInspector.CPUProfileType.TypeId, WebInspector.UIString("Collect JavaScript CPU Profile"));
+    WebInspector.ProfileType.call(this, WebInspector.CPUProfileType.TypeId, WebInspector.UIString("Record JavaScript CPU Profile"));
     this._recording = false;
 
     this._nextAnonymousConsoleProfileNumber = 1;
diff --git a/third_party/WebKit/Source/devtools/front_end/profiler/HeapProfileView.js b/third_party/WebKit/Source/devtools/front_end/profiler/HeapProfileView.js
index 1e446c9..22a8f7f 100644
--- a/third_party/WebKit/Source/devtools/front_end/profiler/HeapProfileView.js
+++ b/third_party/WebKit/Source/devtools/front_end/profiler/HeapProfileView.js
@@ -44,7 +44,7 @@
  */
 WebInspector.SamplingHeapProfileType = function()
 {
-    WebInspector.ProfileType.call(this, WebInspector.SamplingHeapProfileType.TypeId, WebInspector.UIString("Collect JavaScript Heap Profile"));
+    WebInspector.ProfileType.call(this, WebInspector.SamplingHeapProfileType.TypeId, WebInspector.UIString("Record Allocation Profile"));
     this._recording = false;
     WebInspector.SamplingHeapProfileType.instance = this;
 }
@@ -91,12 +91,12 @@
 
     get treeItemTitle()
     {
-        return WebInspector.UIString("HEAP PROFILES");
+        return WebInspector.UIString("ALLOCATION PROFILES");
     },
 
     get description()
     {
-        return WebInspector.UIString("Heap profiles show where the most memory allocations took place in JavaScript functions.");
+        return WebInspector.UIString("Allocation profiles show memory allocations from your JavaScript functions.");
     },
 
     startRecordingProfile: function()
diff --git a/third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotView.js b/third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotView.js
index 158b30cb..852f576 100644
--- a/third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotView.js
+++ b/third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotView.js
@@ -1177,7 +1177,7 @@
  */
 WebInspector.TrackingHeapSnapshotProfileType = function()
 {
-    WebInspector.HeapSnapshotProfileType.call(this, WebInspector.TrackingHeapSnapshotProfileType.TypeId, WebInspector.UIString("Record Heap Allocations"));
+    WebInspector.HeapSnapshotProfileType.call(this, WebInspector.TrackingHeapSnapshotProfileType.TypeId, WebInspector.UIString("Record Allocation Timeline"));
 }
 
 WebInspector.TrackingHeapSnapshotProfileType.TypeId = "HEAP-RECORD";
@@ -1364,12 +1364,12 @@
 
     get treeItemTitle()
     {
-        return WebInspector.UIString("HEAP TIMELINES");
+        return WebInspector.UIString("ALLOCATION TIMELINES");
     },
 
     get description()
     {
-        return WebInspector.UIString("Record JavaScript object allocations over time. Use this profile type to isolate memory leaks.");
+        return WebInspector.UIString("Allocation timelines show memory allocations from your heap over time. Use this profile type to isolate memory leaks.");
     },
 
     /**
diff --git a/third_party/WebKit/Source/modules/fetch/GlobalFetch.cpp b/third_party/WebKit/Source/modules/fetch/GlobalFetch.cpp
index bae5563..a4bdd71 100644
--- a/third_party/WebKit/Source/modules/fetch/GlobalFetch.cpp
+++ b/third_party/WebKit/Source/modules/fetch/GlobalFetch.cpp
@@ -33,6 +33,11 @@
 
     ScriptPromise fetch(ScriptState* scriptState, const RequestInfo& input, const Dictionary& init, ExceptionState& exceptionState) override
     {
+        if (!scriptState->contextIsValid()) {
+            // TODO(yhirano): Should this be moved to bindings?
+            exceptionState.throwTypeError("The global scope is shutting down.");
+            return ScriptPromise();
+        }
         if (m_fetchManager->isStopped()) {
             exceptionState.throwTypeError("The global scope is shutting down.");
             return ScriptPromise();
diff --git a/third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp b/third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp
index b900c51..4d55d835 100644
--- a/third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp
+++ b/third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp
@@ -4,12 +4,16 @@
 
 #include "modules/imagecapture/ImageCapture.h"
 
+#include "bindings/core/v8/CallbackPromiseAdapter.h"
 #include "bindings/core/v8/ScriptPromiseResolver.h"
 #include "core/dom/DOMException.h"
 #include "core/dom/ExceptionCode.h"
+#include "core/frame/ImageBitmap.h"
 #include "modules/EventTargetModules.h"
 #include "modules/mediastream/MediaStreamTrack.h"
 #include "public/platform/Platform.h"
+#include "public/platform/WebImageCaptureFrameGrabber.h"
+#include "public/platform/WebMediaStreamTrack.h"
 
 namespace blink {
 
@@ -60,7 +64,21 @@
         return promise;
     }
 
-    resolver->reject(DOMException::create(NotSupportedError, "Not implemented yet"));
+    // Create |m_frameGrabber| the first time.
+    if (!m_frameGrabber) {
+        m_frameGrabber = adoptPtr(Platform::current()->createImageCaptureFrameGrabber());
+
+    }
+
+    if (!m_frameGrabber) {
+        resolver->reject(DOMException::create(UnknownError, "Couldn't create platform resources"));
+        return promise;
+    }
+
+    // The platform does not know about MediaStreamTrack, so we wrap it up.
+    WebMediaStreamTrack track(m_streamTrack->component());
+    m_frameGrabber->grabFrame(&track, new CallbackPromiseAdapter<ImageBitmap, void>(resolver));
+
     return promise;
 }
 
diff --git a/third_party/WebKit/Source/modules/imagecapture/ImageCapture.h b/third_party/WebKit/Source/modules/imagecapture/ImageCapture.h
index fd89bd0..16633e5b 100644
--- a/third_party/WebKit/Source/modules/imagecapture/ImageCapture.h
+++ b/third_party/WebKit/Source/modules/imagecapture/ImageCapture.h
@@ -17,6 +17,7 @@
 
 class ExceptionState;
 class MediaStreamTrack;
+class WebImageCaptureFrameGrabber;
 
 // TODO(mcasas): Consideradding a LayoutTest checking that this class is not
 // garbage collected while it has event listeners.
@@ -53,6 +54,7 @@
     bool addEventListenerInternal(const AtomicString& eventType, EventListener*, const EventListenerOptions&) override;
 
     Member<MediaStreamTrack> m_streamTrack;
+    OwnPtr<WebImageCaptureFrameGrabber> m_frameGrabber;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/exported/WebBlobData.cpp b/third_party/WebKit/Source/platform/exported/WebBlobData.cpp
index e68dee06..6b67d588 100644
--- a/third_party/WebKit/Source/platform/exported/WebBlobData.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebBlobData.cpp
@@ -94,14 +94,14 @@
     return m_private->contentType();
 }
 
-WebBlobData::WebBlobData(const PassOwnPtr<BlobData>& data)
-    : m_private(data)
+WebBlobData::WebBlobData(PassOwnPtr<BlobData> data)
+    : m_private(std::move(data))
 {
 }
 
-WebBlobData& WebBlobData::operator=(const PassOwnPtr<BlobData>& data)
+WebBlobData& WebBlobData::operator=(PassOwnPtr<BlobData> data)
 {
-    m_private.reset(data);
+    m_private.reset(std::move(data));
     return *this;
 }
 
diff --git a/third_party/WebKit/Source/platform/fonts/FontCache.cpp b/third_party/WebKit/Source/platform/fonts/FontCache.cpp
index 7ecd3eb..29b1841 100644
--- a/third_party/WebKit/Source/platform/fonts/FontCache.cpp
+++ b/third_party/WebKit/Source/platform/fonts/FontCache.cpp
@@ -78,7 +78,6 @@
 #if OS(WIN)
 bool FontCache::s_antialiasedTextEnabled = false;
 bool FontCache::s_lcdTextEnabled = false;
-bool FontCache::s_useSubpixelPositioning = false;
 float FontCache::s_deviceScaleFactor = 1.0;
 bool FontCache::s_useSkiaFontFallback = false;
 #endif // OS(WIN)
diff --git a/third_party/WebKit/Source/platform/fonts/FontCache.h b/third_party/WebKit/Source/platform/fonts/FontCache.h
index 0e12c9e..f56d8bdb 100644
--- a/third_party/WebKit/Source/platform/fonts/FontCache.h
+++ b/third_party/WebKit/Source/platform/fonts/FontCache.h
@@ -103,7 +103,6 @@
     static void setFontManager(const RefPtr<SkFontMgr>&);
 
 #if OS(WIN)
-    bool useSubpixelPositioning() const { return s_useSubpixelPositioning; }
     static bool antialiasedTextEnabled() { return s_antialiasedTextEnabled; }
     static bool lcdTextEnabled() { return s_lcdTextEnabled; }
     static float deviceScaleFactor() { return s_deviceScaleFactor; }
@@ -190,7 +189,6 @@
     static bool s_antialiasedTextEnabled;
     static bool s_lcdTextEnabled;
     static float s_deviceScaleFactor;
-    static bool s_useSubpixelPositioning;
     static HashMap<String, RefPtr<SkTypeface>>* s_sideloadedFonts;
     // The system font metrics cache.
     static AtomicString* s_menuFontFamilyName;
diff --git a/third_party/WebKit/Source/platform/fonts/FontPlatformData.cpp b/third_party/WebKit/Source/platform/fonts/FontPlatformData.cpp
index d4ee06b..209c675 100644
--- a/third_party/WebKit/Source/platform/fonts/FontPlatformData.cpp
+++ b/third_party/WebKit/Source/platform/fonts/FontPlatformData.cpp
@@ -54,7 +54,6 @@
     , m_isHashTableDeletedValue(true)
 #if OS(WIN)
     , m_paintTextFlags(0)
-    , m_useSubpixelPositioning(false)
     , m_minSizeForAntiAlias(0)
     , m_minSizeForSubpixel(0)
 #endif
@@ -76,7 +75,6 @@
     , m_isHashTableDeletedValue(false)
 #if OS(WIN)
     , m_paintTextFlags(0)
-    , m_useSubpixelPositioning(false)
     , m_minSizeForAntiAlias(0)
     , m_minSizeForSubpixel(0)
 #endif
@@ -98,7 +96,6 @@
     , m_isHashTableDeletedValue(false)
 #if OS(WIN)
     , m_paintTextFlags(0)
-    , m_useSubpixelPositioning(false)
     , m_minSizeForAntiAlias(0)
     , m_minSizeForSubpixel(0)
 #endif
@@ -121,7 +118,6 @@
     , m_isHashTableDeletedValue(false)
 #if OS(WIN)
     , m_paintTextFlags(source.m_paintTextFlags)
-    , m_useSubpixelPositioning(source.m_useSubpixelPositioning)
     , m_minSizeForAntiAlias(source.m_minSizeForAntiAlias)
     , m_minSizeForSubpixel(source.m_minSizeForSubpixel)
 #endif
@@ -144,17 +140,18 @@
     , m_isHashTableDeletedValue(false)
 #if OS(WIN)
     , m_paintTextFlags(src.m_paintTextFlags)
-    , m_useSubpixelPositioning(src.m_useSubpixelPositioning)
     , m_minSizeForAntiAlias(src.m_minSizeForAntiAlias)
     , m_minSizeForSubpixel(src.m_minSizeForSubpixel)
 #endif
 {
 #if !OS(MACOSX)
-    querySystemForRenderStyle(FontDescription::subpixelPositioning());
+    querySystemForRenderStyle();
 #endif
 }
 
-FontPlatformData::FontPlatformData(PassRefPtr<SkTypeface> tf, const char* family, float textSize, bool syntheticBold, bool syntheticItalic, FontOrientation orientation, bool subpixelTextPosition)
+FontPlatformData::FontPlatformData(PassRefPtr<SkTypeface> tf,
+    const char* family, float textSize, bool syntheticBold,
+    bool syntheticItalic, FontOrientation orientation)
     : m_typeface(tf)
 #if !OS(WIN)
     , m_family(family)
@@ -166,13 +163,12 @@
     , m_isHashTableDeletedValue(false)
 #if OS(WIN)
     , m_paintTextFlags(0)
-    , m_useSubpixelPositioning(subpixelTextPosition)
     , m_minSizeForAntiAlias(0)
     , m_minSizeForSubpixel(0)
 #endif
 {
 #if !OS(MACOSX)
-    querySystemForRenderStyle(subpixelTextPosition);
+    querySystemForRenderStyle();
 #endif
 }
 
@@ -215,7 +211,6 @@
     m_paintTextFlags = 0;
     m_minSizeForAntiAlias = other.m_minSizeForAntiAlias;
     m_minSizeForSubpixel = other.m_minSizeForSubpixel;
-    m_useSubpixelPositioning = other.m_useSubpixelPositioning;
 #endif
 
     return *this;
diff --git a/third_party/WebKit/Source/platform/fonts/FontPlatformData.h b/third_party/WebKit/Source/platform/fonts/FontPlatformData.h
index b2e6253..4e85939 100644
--- a/third_party/WebKit/Source/platform/fonts/FontPlatformData.h
+++ b/third_party/WebKit/Source/platform/fonts/FontPlatformData.h
@@ -84,7 +84,7 @@
 #if OS(MACOSX)
     FontPlatformData(NSFont*, float size, bool syntheticBold = false, bool syntheticItalic = false, FontOrientation = FontOrientation::Horizontal);
 #endif
-    FontPlatformData(PassRefPtr<SkTypeface>, const char* name, float textSize, bool syntheticBold, bool syntheticItalic, FontOrientation = FontOrientation::Horizontal, bool subpixelTextPosition = defaultUseSubpixelPositioning());
+    FontPlatformData(PassRefPtr<SkTypeface>, const char* name, float textSize, bool syntheticBold, bool syntheticItalic, FontOrientation = FontOrientation::Horizontal);
     ~FontPlatformData();
 
 #if OS(MACOSX)
@@ -145,9 +145,8 @@
 #endif
 
 private:
-    bool static defaultUseSubpixelPositioning();
 #if !OS(MACOSX)
-    void querySystemForRenderStyle(bool useSkiaSubpixelPositioning);
+    void querySystemForRenderStyle();
 #endif
 
     RefPtr<SkTypeface> m_typeface;
@@ -169,7 +168,6 @@
     bool m_isHashTableDeletedValue;
 #if OS(WIN)
     int m_paintTextFlags;
-    bool m_useSubpixelPositioning;
     unsigned m_minSizeForAntiAlias;
     float m_minSizeForSubpixel;
 #endif
diff --git a/third_party/WebKit/Source/platform/fonts/linux/FontPlatformDataLinux.cpp b/third_party/WebKit/Source/platform/fonts/linux/FontPlatformDataLinux.cpp
index 4ed918f..d16dc21 100644
--- a/third_party/WebKit/Source/platform/fonts/linux/FontPlatformDataLinux.cpp
+++ b/third_party/WebKit/Source/platform/fonts/linux/FontPlatformDataLinux.cpp
@@ -96,7 +96,7 @@
     paint->setTextSkewX(m_syntheticItalic ? -SK_Scalar1 / 4 : 0);
 }
 
-void FontPlatformData::querySystemForRenderStyle(bool useSkiaSubpixelPositioning)
+void FontPlatformData::querySystemForRenderStyle()
 {
     WebFontRenderStyle style;
 #if OS(ANDROID)
@@ -133,12 +133,7 @@
     // TestRunner specifically toggles the subpixel positioning flag.
     if (m_style.useSubpixelPositioning == FontRenderStyle::NoPreference
         || LayoutTestSupport::isRunningLayoutTest())
-        m_style.useSubpixelPositioning = useSkiaSubpixelPositioning;
-}
-
-bool FontPlatformData::defaultUseSubpixelPositioning()
-{
-    return FontDescription::subpixelPositioning();
+        m_style.useSubpixelPositioning = FontDescription::subpixelPositioning();
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/fonts/mac/FontPlatformDataMac.mm b/third_party/WebKit/Source/platform/fonts/mac/FontPlatformDataMac.mm
index ca5351f..bf1be45 100644
--- a/third_party/WebKit/Source/platform/fonts/mac/FontPlatformDataMac.mm
+++ b/third_party/WebKit/Source/platform/fonts/mac/FontPlatformDataMac.mm
@@ -163,10 +163,4 @@
     }
 }
 
-bool FontPlatformData::defaultUseSubpixelPositioning()
-{
-    return FontDescription::subpixelPositioning();
-}
-
-
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/fonts/skia/FontCacheSkia.cpp b/third_party/WebKit/Source/platform/fonts/skia/FontCacheSkia.cpp
index aa866cde..5d474693 100644
--- a/third_party/WebKit/Source/platform/fonts/skia/FontCacheSkia.cpp
+++ b/third_party/WebKit/Source/platform/fonts/skia/FontCacheSkia.cpp
@@ -216,8 +216,7 @@
         fontSize,
         (fontDescription.weight() >= FontWeight600 && !tf->isBold()) || fontDescription.isSyntheticBold(),
         ((fontDescription.style() == FontStyleItalic || fontDescription.style() == FontStyleOblique) && !tf->isItalic()) || fontDescription.isSyntheticItalic(),
-        fontDescription.orientation(),
-        fontDescription.useSubpixelPositioning()));
+        fontDescription.orientation()));
 }
 #endif // !OS(WIN)
 
diff --git a/third_party/WebKit/Source/platform/fonts/win/FontCacheSkiaWin.cpp b/third_party/WebKit/Source/platform/fonts/win/FontCacheSkiaWin.cpp
index eb36e26..731eb0a 100644
--- a/third_party/WebKit/Source/platform/fonts/win/FontCacheSkiaWin.cpp
+++ b/third_party/WebKit/Source/platform/fonts/win/FontCacheSkiaWin.cpp
@@ -101,9 +101,6 @@
     m_fontManager = s_fontManager;
     if (!m_fontManager.get())
         m_fontManager = adoptRef(SkFontMgr_New_DirectWrite());
-
-    s_useSubpixelPositioning = true;
-
     ASSERT(m_fontManager.get());
 }
 
@@ -401,8 +398,7 @@
         fontSize,
         (fontDescription.weight() >= FontWeight600 && !tf->isBold()) || fontDescription.isSyntheticBold(),
         ((fontDescription.style() == FontStyleItalic || fontDescription.style() == FontStyleOblique) && !tf->isItalic()) || fontDescription.isSyntheticItalic(),
-        fontDescription.orientation(),
-        s_useSubpixelPositioning));
+        fontDescription.orientation()));
 
     struct FamilyMinSize {
         const wchar_t* family;
diff --git a/third_party/WebKit/Source/platform/fonts/win/FontPlatformDataWin.cpp b/third_party/WebKit/Source/platform/fonts/win/FontPlatformDataWin.cpp
index 9e7e6c04..285cb0b 100644
--- a/third_party/WebKit/Source/platform/fonts/win/FontPlatformDataWin.cpp
+++ b/third_party/WebKit/Source/platform/fonts/win/FontPlatformDataWin.cpp
@@ -62,11 +62,10 @@
 
     if (ts >= m_minSizeForAntiAlias) {
 
-        if (m_useSubpixelPositioning
-            // Disable subpixel text for certain older fonts at smaller sizes as
-            // they tend to get quite blurry at non-integer sizes and positions.
-            // For high-DPI this workaround isn't required.
-            && (ts >= m_minSizeForSubpixel
+        // Disable subpixel text for certain older fonts at smaller sizes as
+        // they tend to get quite blurry at non-integer sizes and positions.
+        // For high-DPI this workaround isn't required.
+        if ((ts >= m_minSizeForSubpixel
                 || FontCache::fontCache()->deviceScaleFactor() >= 1.5)
 
             // Subpixel text positioning looks pretty bad without font
@@ -117,14 +116,9 @@
 }
 
 
-void FontPlatformData::querySystemForRenderStyle(bool)
+void FontPlatformData::querySystemForRenderStyle()
 {
     m_paintTextFlags = computePaintTextFlags(fontFamilyName());
 }
 
-bool FontPlatformData::defaultUseSubpixelPositioning()
-{
-    return FontCache::fontCache()->useSubpixelPositioning();
-}
-
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/graphics/BitmapImage.cpp b/third_party/WebKit/Source/platform/graphics/BitmapImage.cpp
index 78511f3..cfbcf13 100644
--- a/third_party/WebKit/Source/platform/graphics/BitmapImage.cpp
+++ b/third_party/WebKit/Source/platform/graphics/BitmapImage.cpp
@@ -67,7 +67,6 @@
     , m_allDataReceived(false)
     , m_haveSize(false)
     , m_sizeAvailable(false)
-    , m_hasUniformFrameSize(true)
     , m_haveFrameCount(false)
 {
 }
@@ -167,10 +166,6 @@
     m_frames[index].m_hasAlpha = m_source.frameHasAlphaAtIndex(index);
     m_frames[index].m_frameBytes = m_source.frameBytesAtIndex(index);
 
-    const IntSize frameSize(index ? m_source.frameSizeAtIndex(index) : m_size);
-    if (frameSize != m_size)
-        m_hasUniformFrameSize = false;
-
     notifyMemoryChanged();
 }
 
@@ -236,7 +231,6 @@
     m_source.setData(*data(), allDataReceived);
 
     m_haveFrameCount = false;
-    m_hasUniformFrameSize = true;
     return isSizeAvailable();
 }
 
diff --git a/third_party/WebKit/Source/platform/graphics/BitmapImage.h b/third_party/WebKit/Source/platform/graphics/BitmapImage.h
index 2a650a89..3c46113 100644
--- a/third_party/WebKit/Source/platform/graphics/BitmapImage.h
+++ b/third_party/WebKit/Source/platform/graphics/BitmapImage.h
@@ -185,7 +185,6 @@
     bool m_allDataReceived : 1; // Whether or not we've received all our data.
     mutable bool m_haveSize : 1; // Whether or not our |m_size| member variable has the final overall image size yet.
     bool m_sizeAvailable : 1; // Whether or not we can obtain the size of the first image frame yet from ImageIO.
-    mutable bool m_hasUniformFrameSize : 1;
     mutable bool m_haveFrameCount : 1;
 };
 
diff --git a/third_party/WebKit/Source/platform/heap/GarbageCollected.h b/third_party/WebKit/Source/platform/heap/GarbageCollected.h
index 182a044..c41b329 100644
--- a/third_party/WebKit/Source/platform/heap/GarbageCollected.h
+++ b/third_party/WebKit/Source/platform/heap/GarbageCollected.h
@@ -99,6 +99,11 @@
         || isHeapAllocatedListHashSetNode;
 };
 
+template <>
+struct IsGarbageCollectedType<void> {
+    static const bool value = false;
+};
+
 // The GarbageCollectedMixin interface and helper macro
 // USING_GARBAGE_COLLECTED_MIXIN can be used to automatically define
 // TraceTrait/ObjectAliveTrait on non-leftmost deriving classes
diff --git a/third_party/WebKit/Source/platform/heap/Handle.h b/third_party/WebKit/Source/platform/heap/Handle.h
index 92b1812..a82c488 100644
--- a/third_party/WebKit/Source/platform/heap/Handle.h
+++ b/third_party/WebKit/Source/platform/heap/Handle.h
@@ -1159,10 +1159,11 @@
 // For wtf/Functional.h
 template<typename T, bool isGarbageCollected> struct PointerParamStorageTraits;
 
+// The condition of 'T must be fully defined' (except for void) is checked in
+// blink::IsGarbageCollectedType<T>::value.
 template<typename T>
 struct PointerParamStorageTraits<T*, false> {
     STATIC_ONLY(PointerParamStorageTraits);
-    static_assert(sizeof(T), "T must be fully defined");
     using StorageType = T*;
 
     static StorageType wrap(T* value) { return value; }
@@ -1172,7 +1173,6 @@
 template<typename T>
 struct PointerParamStorageTraits<T*, true> {
     STATIC_ONLY(PointerParamStorageTraits);
-    static_assert(sizeof(T), "T must be fully defined");
     using StorageType = blink::CrossThreadPersistent<T>;
 
     static StorageType wrap(T* value) { return value; }
@@ -1182,7 +1182,6 @@
 template<typename T>
 struct ParamStorageTraits<T*> : public PointerParamStorageTraits<T*, blink::IsGarbageCollectedType<T>::value> {
     STATIC_ONLY(ParamStorageTraits);
-    static_assert(sizeof(T), "T must be fully defined");
 };
 
 template<typename T>
diff --git a/third_party/WebKit/Source/platform/heap/PersistentNode.cpp b/third_party/WebKit/Source/platform/heap/PersistentNode.cpp
index df3cfa7c..f0460774 100644
--- a/third_party/WebKit/Source/platform/heap/PersistentNode.cpp
+++ b/third_party/WebKit/Source/platform/heap/PersistentNode.cpp
@@ -119,14 +119,6 @@
     ASSERT(persistentCount == m_persistentCount);
 }
 
-
-namespace {
-class GCObject final : public GarbageCollected<GCObject> {
-public:
-    DEFINE_INLINE_TRACE() { }
-};
-}
-
 void CrossThreadPersistentRegion::prepareForThreadStateTermination(ThreadState* threadState)
 {
     // For heaps belonging to a thread that's detaching, any cross-thread persistents
diff --git a/third_party/WebKit/Source/platform/v8_inspector/V8InspectorSessionImpl.cpp b/third_party/WebKit/Source/platform/v8_inspector/V8InspectorSessionImpl.cpp
index eb66a9b..c07fa1f 100644
--- a/third_party/WebKit/Source/platform/v8_inspector/V8InspectorSessionImpl.cpp
+++ b/third_party/WebKit/Source/platform/v8_inspector/V8InspectorSessionImpl.cpp
@@ -176,7 +176,7 @@
 
 void V8InspectorSessionImpl::addInspectedObject(PassOwnPtr<V8RuntimeAgent::Inspectable> inspectable)
 {
-    m_inspectedObjects.prepend(inspectable);
+    m_inspectedObjects.prepend(std::move(inspectable));
     while (m_inspectedObjects.size() > kInspectedObjectBufferSize)
         m_inspectedObjects.removeLast();
 }
@@ -190,7 +190,7 @@
 
 void V8InspectorSessionImpl::schedulePauseOnNextStatement(const String16& breakReason, PassOwnPtr<protocol::DictionaryValue> data)
 {
-    m_debuggerAgent->schedulePauseOnNextStatement(breakReason, data);
+    m_debuggerAgent->schedulePauseOnNextStatement(breakReason, std::move(data));
 }
 
 void V8InspectorSessionImpl::cancelPauseOnNextStatement()
@@ -200,12 +200,12 @@
 
 void V8InspectorSessionImpl::breakProgram(const String16& breakReason, PassOwnPtr<protocol::DictionaryValue> data)
 {
-    m_debuggerAgent->breakProgram(breakReason, data);
+    m_debuggerAgent->breakProgram(breakReason, std::move(data));
 }
 
 void V8InspectorSessionImpl::breakProgramOnException(const String16& breakReason, PassOwnPtr<protocol::DictionaryValue> data)
 {
-    m_debuggerAgent->breakProgramOnException(breakReason, data);
+    m_debuggerAgent->breakProgramOnException(breakReason, std::move(data));
 }
 
 void V8InspectorSessionImpl::setSkipAllPauses(bool skip)
diff --git a/third_party/WebKit/Source/wtf/Functional.h b/third_party/WebKit/Source/wtf/Functional.h
index 8aa0a938..43b97d6 100644
--- a/third_party/WebKit/Source/wtf/Functional.h
+++ b/third_party/WebKit/Source/wtf/Functional.h
@@ -214,14 +214,6 @@
     static typename RetainPtr<T>::PtrType unwrap(const StorageType& value) { return value.get(); }
 };
 
-template <>
-struct ParamStorageTraits<void*> {
-    typedef void* StorageType;
-
-    static StorageType wrap(void* value) { return value; }
-    static void* unwrap(const StorageType& value) { return value; }
-};
-
 template <typename T>
 struct ParamStorageTraits<PassedWrapper<T>> {
     typedef PassedWrapper<T> StorageType;
diff --git a/third_party/WebKit/Source/wtf/OwnPtr.h b/third_party/WebKit/Source/wtf/OwnPtr.h
index 391031ca4..687e4ea 100644
--- a/third_party/WebKit/Source/wtf/OwnPtr.h
+++ b/third_party/WebKit/Source/wtf/OwnPtr.h
@@ -43,9 +43,8 @@
     OwnPtr() : m_ptr(nullptr) {}
     OwnPtr(std::nullptr_t) : m_ptr(nullptr) {}
 
-    // See comment in PassOwnPtr.h for why this takes a const reference.
-    OwnPtr(const PassOwnPtr<T>&);
-    template <typename U> OwnPtr(const PassOwnPtr<U>&, EnsurePtrConvertibleArgDecl(U, T));
+    OwnPtr(PassOwnPtr<T>&&);
+    template <typename U> OwnPtr(PassOwnPtr<U>&&, EnsurePtrConvertibleArgDecl(U, T));
 
     // Hash table deleted values, which are only constructed and never copied or
     // destroyed.
@@ -72,9 +71,9 @@
     bool operator!() const { return !m_ptr; }
     explicit operator bool() const { return m_ptr; }
 
-    OwnPtr& operator=(const PassOwnPtr<T>&);
+    OwnPtr& operator=(PassOwnPtr<T>&&);
     OwnPtr& operator=(std::nullptr_t) { clear(); return *this; }
-    template <typename U> OwnPtr& operator=(const PassOwnPtr<U>&);
+    template <typename U> OwnPtr& operator=(PassOwnPtr<U>&&);
 
     OwnPtr(OwnPtr&&);
     template <typename U> OwnPtr(OwnPtr<U>&&);
@@ -114,13 +113,13 @@
     PtrType m_ptr;
 };
 
-template <typename T> inline OwnPtr<T>::OwnPtr(const PassOwnPtr<T>& o)
+template <typename T> inline OwnPtr<T>::OwnPtr(PassOwnPtr<T>&& o)
     : m_ptr(o.leakPtr())
 {
 }
 
 template <typename T>
-template <typename U> inline OwnPtr<T>::OwnPtr(const PassOwnPtr<U>& o, EnsurePtrConvertibleArgDefn(U, T))
+template <typename U> inline OwnPtr<T>::OwnPtr(PassOwnPtr<U>&& o, EnsurePtrConvertibleArgDefn(U, T))
     : m_ptr(o.leakPtr())
 {
     static_assert(!std::is_array<T>::value, "pointers to array must never be converted");
@@ -155,7 +154,7 @@
     return m_ptr[i];
 }
 
-template <typename T> inline OwnPtr<T>& OwnPtr<T>::operator=(const PassOwnPtr<T>& o)
+template <typename T> inline OwnPtr<T>& OwnPtr<T>::operator=(PassOwnPtr<T>&& o)
 {
     PtrType ptr = m_ptr;
     m_ptr = o.leakPtr();
@@ -165,7 +164,7 @@
 }
 
 template <typename T>
-template <typename U> inline OwnPtr<T>& OwnPtr<T>::operator=(const PassOwnPtr<U>& o)
+template <typename U> inline OwnPtr<T>& OwnPtr<T>::operator=(PassOwnPtr<U>&& o)
 {
     static_assert(!std::is_array<T>::value, "pointers to array must never be converted");
     PtrType ptr = m_ptr;
diff --git a/third_party/WebKit/Source/wtf/PassOwnPtr.h b/third_party/WebKit/Source/wtf/PassOwnPtr.h
index 131cb381..eb9a85c 100644
--- a/third_party/WebKit/Source/wtf/PassOwnPtr.h
+++ b/third_party/WebKit/Source/wtf/PassOwnPtr.h
@@ -47,18 +47,14 @@
     PassOwnPtr() : m_ptr(nullptr) {}
     PassOwnPtr(std::nullptr_t) : m_ptr(nullptr) {}
 
-    // It somewhat breaks the type system to allow transfer of ownership out of
-    // a const PassOwnPtr. However, it makes it much easier to work with
-    // PassOwnPtr temporaries, and we don't have a need to use real const
-    // PassOwnPtrs anyway.
-    PassOwnPtr(const PassOwnPtr& o) : m_ptr(o.leakPtr()) {}
-    template <typename U> PassOwnPtr(const PassOwnPtr<U>&, EnsurePtrConvertibleArgDecl(U, T));
+    PassOwnPtr(PassOwnPtr&& o) : m_ptr(o.leakPtr()) {}
+    template <typename U> PassOwnPtr(PassOwnPtr<U>&&, EnsurePtrConvertibleArgDecl(U, T));
 
     ~PassOwnPtr() { OwnedPtrDeleter<T>::deletePtr(m_ptr); }
 
     PtrType get() const { return m_ptr; }
 
-    PtrType leakPtr() const WARN_UNUSED_RETURN;
+    PtrType leakPtr() WARN_UNUSED_RETURN;
 
     ValueType& operator*() const { ASSERT(m_ptr); return *m_ptr; }
     PtrType operator->() const { ASSERT(m_ptr); return m_ptr; }
@@ -73,6 +69,7 @@
 private:
     explicit PassOwnPtr(PtrType ptr) : m_ptr(ptr) {}
 
+    PassOwnPtr(const PassOwnPtr&) = delete;
     PassOwnPtr& operator=(const PassOwnPtr&) = delete;
 
     // We should never have two OwnPtrs for the same underlying object
@@ -83,17 +80,17 @@
     template <typename U> bool operator==(const OwnPtr<U>&) const = delete;
     template <typename U> bool operator!=(const OwnPtr<U>&) const = delete;
 
-    mutable PtrType m_ptr;
+    PtrType m_ptr;
 };
 
 template <typename T>
-template <typename U> inline PassOwnPtr<T>::PassOwnPtr(const PassOwnPtr<U>& o, EnsurePtrConvertibleArgDefn(U, T))
+template <typename U> inline PassOwnPtr<T>::PassOwnPtr(PassOwnPtr<U>&& o, EnsurePtrConvertibleArgDefn(U, T))
     : m_ptr(o.leakPtr())
 {
     static_assert(!std::is_array<T>::value, "pointers to array must never be converted");
 }
 
-template <typename T> inline typename PassOwnPtr<T>::PtrType PassOwnPtr<T>::leakPtr() const
+template <typename T> inline typename PassOwnPtr<T>::PtrType PassOwnPtr<T>::leakPtr()
 {
     PtrType ptr = m_ptr;
     m_ptr = nullptr;
@@ -130,7 +127,7 @@
     return PassOwnPtr<T[]>(ptr);
 }
 
-template <typename T, typename U> inline PassOwnPtr<T> static_pointer_cast(const PassOwnPtr<U>& p)
+template <typename T, typename U> inline PassOwnPtr<T> static_pointer_cast(PassOwnPtr<U>&& p)
 {
     static_assert(!std::is_array<T>::value, "pointers to array must never be converted");
     return adoptPtr(static_cast<T*>(p.leakPtr()));
diff --git a/third_party/WebKit/public/platform/Platform.h b/third_party/WebKit/public/platform/Platform.h
index ca570973..03e769e 100644
--- a/third_party/WebKit/public/platform/Platform.h
+++ b/third_party/WebKit/public/platform/Platform.h
@@ -78,6 +78,7 @@
 class WebGestureCurve;
 class WebGraphicsContext3DProvider;
 class WebIDBFactory;
+class WebImageCaptureFrameGrabber;
 class WebInstalledApp;
 class WebMIDIAccessor;
 class WebMIDIAccessorClient;
@@ -499,11 +500,11 @@
 
     // WebRTC ----------------------------------------------------------
 
-    // Creates an WebRTCPeerConnectionHandler for RTCPeerConnection.
+    // Creates a WebRTCPeerConnectionHandler for RTCPeerConnection.
     // May return null if WebRTC functionality is not avaliable or if it's out of resources.
     virtual WebRTCPeerConnectionHandler* createRTCPeerConnectionHandler(WebRTCPeerConnectionHandlerClient*) { return nullptr; }
 
-    // Creates an WebMediaRecorderHandler to record MediaStreams.
+    // Creates a WebMediaRecorderHandler to record MediaStreams.
     // May return null if the functionality is not available or out of resources.
     virtual WebMediaRecorderHandler* createMediaRecorderHandler() { return nullptr; }
 
@@ -513,13 +514,17 @@
     // May return null if WebRTC functionality is not available or out of resources.
     virtual WebMediaStreamCenter* createMediaStreamCenter(WebMediaStreamCenterClient*) { return nullptr; }
 
-    // Creates an WebCanvasCaptureHandler to capture Canvas output.
+    // Creates a WebCanvasCaptureHandler to capture Canvas output.
     virtual WebCanvasCaptureHandler* createCanvasCaptureHandler(const WebSize&, double, WebMediaStreamTrack*) { return nullptr; }
 
     // Fills in the WebMediaStream to capture from the WebMediaPlayer identified
     // by the second parameter.
     virtual void createHTMLVideoElementCapturer(WebMediaStream*, WebMediaPlayer*) {}
 
+    // Creates a WebImageCaptureFrameGrabber to take a snapshot of a Video Tracks.
+    // May return null if the functionality is not available.
+    virtual WebImageCaptureFrameGrabber* createImageCaptureFrameGrabber() { return nullptr; }
+
     // WebWorker ----------------------------------------------------------
 
     virtual void didStartWorkerThread() { }
diff --git a/third_party/WebKit/public/platform/WebBlobData.h b/third_party/WebKit/public/platform/WebBlobData.h
index 98136cef..6a8949f 100644
--- a/third_party/WebKit/public/platform/WebBlobData.h
+++ b/third_party/WebKit/public/platform/WebBlobData.h
@@ -77,8 +77,8 @@
     BLINK_PLATFORM_EXPORT WebString contentType() const;
 
 #if INSIDE_BLINK
-    BLINK_PLATFORM_EXPORT WebBlobData(const WTF::PassOwnPtr<BlobData>&);
-    BLINK_PLATFORM_EXPORT WebBlobData& operator=(const WTF::PassOwnPtr<BlobData>&);
+    BLINK_PLATFORM_EXPORT WebBlobData(WTF::PassOwnPtr<BlobData>);
+    BLINK_PLATFORM_EXPORT WebBlobData& operator=(WTF::PassOwnPtr<BlobData>);
     BLINK_PLATFORM_EXPORT operator WTF::PassOwnPtr<BlobData>();
 #endif
 
diff --git a/third_party/WebKit/public/platform/WebImageCaptureFrameGrabber.h b/third_party/WebKit/public/platform/WebImageCaptureFrameGrabber.h
new file mode 100644
index 0000000..093f0828
--- /dev/null
+++ b/third_party/WebKit/public/platform/WebImageCaptureFrameGrabber.h
@@ -0,0 +1,30 @@
+// Copyright 2016 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 WebImageCaptureFrameGrabber_h
+#define WebImageCaptureFrameGrabber_h
+
+#include "public/platform/WebCallbacks.h"
+#include "public/platform/WebCommon.h"
+#include "third_party/skia/include/core/SkRefCnt.h"
+
+class SkImage;
+
+namespace blink {
+
+class WebMediaStreamTrack;
+
+using WebImageCaptureGrabFrameCallbacks = WebCallbacks<sk_sp<SkImage>, void>;
+
+// Platform interface of an ImageCapture class for grabFrame() calls.
+class WebImageCaptureFrameGrabber {
+public:
+    virtual ~WebImageCaptureFrameGrabber() { }
+
+    virtual void grabFrame(WebMediaStreamTrack*, WebImageCaptureGrabFrameCallbacks*) = 0;
+};
+
+} // namespace blink
+
+#endif // WebImageCaptureFrameGrabber_h
diff --git a/third_party/WebKit/public/platform/WebPrivateOwnPtr.h b/third_party/WebKit/public/platform/WebPrivateOwnPtr.h
index 060a621..64d0451 100644
--- a/third_party/WebKit/public/platform/WebPrivateOwnPtr.h
+++ b/third_party/WebKit/public/platform/WebPrivateOwnPtr.h
@@ -59,7 +59,8 @@
     T* get() const { return m_ptr; }
 
 #if INSIDE_BLINK
-    template<typename U> WebPrivateOwnPtr(const PassOwnPtr<U>&, EnsurePtrConvertibleArgDecl(U, T));
+    template <typename U>
+    WebPrivateOwnPtr(PassOwnPtr<U>, EnsurePtrConvertibleArgDecl(U, T));
 
     void reset(T* ptr)
     {
@@ -67,7 +68,7 @@
         m_ptr = ptr;
     }
 
-    void reset(const PassOwnPtr<T>& o)
+    void reset(PassOwnPtr<T> o)
     {
         reset(o.leakPtr());
     }
@@ -97,7 +98,9 @@
 };
 
 #if INSIDE_BLINK
-template<typename T> template<typename U> inline WebPrivateOwnPtr<T>::WebPrivateOwnPtr(const PassOwnPtr<U>& o, EnsurePtrConvertibleArgDefn(U, T))
+template <typename T>
+template <typename U>
+inline WebPrivateOwnPtr<T>::WebPrivateOwnPtr(PassOwnPtr<U> o, EnsurePtrConvertibleArgDefn(U, T))
     : m_ptr(o.leakPtr())
 {
     static_assert(!std::is_array<T>::value, "Pointers to array must never be converted");
diff --git a/third_party/boringssl/BUILD.gn b/third_party/boringssl/BUILD.gn
index fe2515c..8ad626b 100644
--- a/third_party/boringssl/BUILD.gn
+++ b/third_party/boringssl/BUILD.gn
@@ -178,6 +178,16 @@
         ":boringssl_fuzzer",
       ]
       seed_corpus = "src/fuzz/${fuzzer}_corpus"
+
+      if ("cert" == fuzzer) {
+        libfuzzer_options = [ "max_len=3072" ]
+      } else if ("client" == fuzzer) {
+        libfuzzer_options = [ "max_len=20000" ]
+      } else if ("privkey" == fuzzer) {
+        libfuzzer_options = [ "max_len=2048" ]
+      } else if ("server" == fuzzer) {
+        libfuzzer_options = [ "max_len=4096" ]
+      }
     }
   }
 }
diff --git a/tools/android/loading/analyze.py b/tools/android/loading/analyze.py
index db0106f..82cc071 100755
--- a/tools/android/loading/analyze.py
+++ b/tools/android/loading/analyze.py
@@ -59,16 +59,6 @@
   device.StartActivity(load_intent, blocking=True)
 
 
-def _WriteJson(output, json_data):
-  """Write JSON data in a nice way.
-
-  Args:
-    output: a file object
-    json_data: JSON data as a dict.
-  """
-  json.dump(json_data, output, sort_keys=True, indent=2)
-
-
 def _GetPrefetchHtml(graph_view, name=None):
   """Generate prefetch page for the resources in resource graph.
 
@@ -154,14 +144,14 @@
     logging.warning('Warm fetch')
     warm_data = _LogRequests(url, clear_cache_override=False)
     with open(json_output, 'w') as f:
-      _WriteJson(f, warm_data)
+      json.dump(warm_data, f)
     logging.warning('Wrote ' + json_output)
     with open(json_output + '.cold', 'w') as f:
-      _WriteJson(f, cold_data)
+      json.dump(cold_data, f)
     logging.warning('Wrote ' + json_output + '.cold')
   else:
     with open(json_output, 'w') as f:
-      _WriteJson(f, cold_data)
+      json.dump(cold_data, f)
     logging.warning('Wrote ' + json_output)
 
 
diff --git a/tools/android/loading/loading_trace.py b/tools/android/loading/loading_trace.py
index 2a291e5e..0804e27 100644
--- a/tools/android/loading/loading_trace.py
+++ b/tools/android/loading/loading_trace.py
@@ -52,7 +52,7 @@
     """Save a json file representing this instance."""
     json_dict = self.ToJsonDict()
     with open(json_path, 'w') as output_file:
-       json.dump(json_dict, output_file, indent=2)
+       json.dump(json_dict, output_file)
 
   @classmethod
   def FromJsonDict(cls, json_dict):
diff --git a/tools/android/loading/trace_to_chrome_trace.py b/tools/android/loading/trace_to_chrome_trace.py
index 382d87d..23c3632 100755
--- a/tools/android/loading/trace_to_chrome_trace.py
+++ b/tools/android/loading/trace_to_chrome_trace.py
@@ -5,12 +5,11 @@
 
 """Convert trace output for Chrome.
 
-Takes a loading trace from 'analyze.py log_requests' and outputs a zip'd json
+Takes a loading trace from 'analyze.py log_requests' and outputs a json file
 that can be loaded by chrome's about:tracing..
 """
 
 import argparse
-import gzip
 import json
 
 if __name__ == '__main__':
@@ -18,6 +17,6 @@
   parser.add_argument('input')
   parser.add_argument('output')
   args = parser.parse_args()
-  with gzip.GzipFile(args.output, 'w') as output_f, file(args.input) as input_f:
+  with file(args.output, 'w') as output_f, file(args.input) as input_f:
     events = json.load(input_f)['tracing_track']['events']
     json.dump({'traceEvents': events, 'metadata': {}}, output_f)
diff --git a/tools/clang/blink_gc_plugin/OWNERS b/tools/clang/blink_gc_plugin/OWNERS
index 9c24a96..789d7ef 100644
--- a/tools/clang/blink_gc_plugin/OWNERS
+++ b/tools/clang/blink_gc_plugin/OWNERS
@@ -1,5 +1,4 @@
-ager@chromium.org
 haraken@chromium.org
 kouhei@chromium.org
 tkent@chromium.org
-zerny@chromium.org
+sigbjornf@opera.com