diff --git a/BUILD.gn b/BUILD.gn
index 47536566..533f7c1 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -696,7 +696,10 @@
   }
 
   if (is_android) {
-    deps += [ "//build/android/gyp/test:hello_world" ]
+    deps += [
+      "//build/android/gyp/test:hello_world",
+      "//chrome/test/vr/perf/latency:motopho_latency_test",
+    ]
   }
 
   if (is_linux && use_ozone) {
diff --git a/DEPS b/DEPS
index 3b01e1f..7f1b974 100644
--- a/DEPS
+++ b/DEPS
@@ -44,7 +44,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': 'e9a711fa15ac8a3654d8f7c794965cc1965699a0',
+  'v8_revision': 'a478c171e6fe877506ccde3258ab93e47eea8d7f',
   # 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.
@@ -64,7 +64,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
-  'pdfium_revision': '5eb58cd552c184998ed24634db4b2e6e770f39bd',
+  'pdfium_revision': 'd20e3880234a35a558237316cac5d70fff4224bc',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling openmax_dl
   # and whatever else without interference from each other.
@@ -409,7 +409,7 @@
 
     # For Linux and Chromium OS.
     'src/third_party/cros_system_api':
-      Var('chromium_git') + '/chromiumos/platform/system_api.git' + '@' + 'b78cb4884c80ae158efa81b1c65c489cfbc97959',
+      Var('chromium_git') + '/chromiumos/platform/system_api.git' + '@' + '19115ef1bc72e0068951d236cdc0c549346adfda',
 
     'src/third_party/freetype/src':
       Var('chromium_git') + '/chromium/src/third_party/freetype2.git' + '@' + Var('freetype_revision'),
diff --git a/ash/display/resolution_notification_controller.cc b/ash/display/resolution_notification_controller.cc
index 23ce7b56..b6db541 100644
--- a/ash/display/resolution_notification_controller.cc
+++ b/ash/display/resolution_notification_controller.cc
@@ -80,7 +80,7 @@
   if (has_timeout_ && button_index == 0)
     controller_->AcceptResolutionChange(true);
   else
-    controller_->RevertResolutionChange();
+    controller_->RevertResolutionChange(false /* display_was_removed */);
 }
 
 }  // namespace
@@ -180,6 +180,14 @@
     original_resolution = change_info_->old_resolution;
   }
 
+  if (change_info_ && change_info_->display_id != display_id) {
+    // Preparing the notification for a new resolution change of another display
+    // before the previous one was accepted. We decided that it's safer to
+    // revert the previous resolution change since the user didn't explicitly
+    // accept it, and we have no way of knowing for sure that it worked.
+    RevertResolutionChange(false /* display_was_removed */);
+  }
+
   change_info_.reset(new ResolutionChangeInfo(display_id, old_resolution,
                                               new_resolution, accept_callback));
   if (original_resolution && !original_resolution->size().IsEmpty())
@@ -253,7 +261,7 @@
 
   --change_info_->timeout_count;
   if (change_info_->timeout_count == 0)
-    RevertResolutionChange();
+    RevertResolutionChange(false /* display_was_removed */);
   else
     CreateOrUpdateNotification(false);
 }
@@ -271,7 +279,8 @@
   callback.Run();
 }
 
-void ResolutionNotificationController::RevertResolutionChange() {
+void ResolutionNotificationController::RevertResolutionChange(
+    bool display_was_removed) {
   message_center::MessageCenter::Get()->RemoveNotification(kNotificationId,
                                                            false /* by_user */);
   if (!change_info_)
@@ -280,7 +289,16 @@
   scoped_refptr<display::ManagedDisplayMode> old_resolution =
       change_info_->old_resolution;
   change_info_.reset();
-  Shell::Get()->display_manager()->SetDisplayMode(display_id, old_resolution);
+  if (display_was_removed) {
+    // If display was removed then we are inside the stack of
+    // DisplayManager::UpdateDisplaysWith(), and we need to update the selected
+    // mode of this removed display without reentering again into
+    // UpdateDisplaysWith() because this can cause a crash. crbug.com/709722.
+    Shell::Get()->display_manager()->SetSelectedModeForDisplayId(
+        display_id, old_resolution);
+  } else {
+    Shell::Get()->display_manager()->SetDisplayMode(display_id, old_resolution);
+  }
 }
 
 void ResolutionNotificationController::OnDisplayAdded(
@@ -289,7 +307,7 @@
 void ResolutionNotificationController::OnDisplayRemoved(
     const display::Display& old_display) {
   if (change_info_ && change_info_->display_id == old_display.id())
-    RevertResolutionChange();
+    RevertResolutionChange(true /* display_was_removed */);
 }
 
 void ResolutionNotificationController::OnDisplayMetricsChanged(
diff --git a/ash/display/resolution_notification_controller.h b/ash/display/resolution_notification_controller.h
index 8ac70473..e12e1ba 100644
--- a/ash/display/resolution_notification_controller.h
+++ b/ash/display/resolution_notification_controller.h
@@ -60,7 +60,7 @@
 
   // Called by the notification delegate when the user wants to revert the
   // display resolution change.
-  void RevertResolutionChange();
+  void RevertResolutionChange(bool display_was_removed);
 
  private:
   friend class ResolutionNotificationControllerTest;
diff --git a/ash/display/resolution_notification_controller_unittest.cc b/ash/display/resolution_notification_controller_unittest.cc
index 0c43487b..977eacc 100644
--- a/ash/display/resolution_notification_controller_unittest.cc
+++ b/ash/display/resolution_notification_controller_unittest.cc
@@ -307,7 +307,6 @@
   scoped_refptr<display::ManagedDisplayMode> mode =
       display_manager()->GetSelectedModeForDisplayId(id2);
   EXPECT_TRUE(!!mode);
-  gfx::Size resolution;
   EXPECT_EQ("200x200", mode->size().ToString());
   EXPECT_EQ(59.0f, mode->refresh_rate());
 }
diff --git a/ash/display/screen_orientation_controller_chromeos.cc b/ash/display/screen_orientation_controller_chromeos.cc
index 4eb1740..0040a53 100644
--- a/ash/display/screen_orientation_controller_chromeos.cc
+++ b/ash/display/screen_orientation_controller_chromeos.cc
@@ -326,7 +326,7 @@
     observer.OnUserRotationLockChanged();
 }
 
-void ScreenOrientationController::OnMaximizeModeEnded() {
+void ScreenOrientationController::OnMaximizeModeEnding() {
   chromeos::AccelerometerReader::GetInstance()->RemoveObserver(this);
   ShellPort::Get()->RemoveDisplayObserver(this);
   if (!display::Display::HasInternalDisplay())
diff --git a/ash/display/screen_orientation_controller_chromeos.h b/ash/display/screen_orientation_controller_chromeos.h
index 7748e77..bfd802f 100644
--- a/ash/display/screen_orientation_controller_chromeos.h
+++ b/ash/display/screen_orientation_controller_chromeos.h
@@ -113,7 +113,7 @@
 
   // ShellObserver:
   void OnMaximizeModeStarted() override;
-  void OnMaximizeModeEnded() override;
+  void OnMaximizeModeEnding() override;
 
  private:
   friend class test::ScreenOrientationControllerTestApi;
diff --git a/ash/wm/default_state.cc b/ash/wm/default_state.cc
index f7899c2..7d3c552 100644
--- a/ash/wm/default_state.cc
+++ b/ash/wm/default_state.cc
@@ -346,6 +346,7 @@
       // If a window is opened as maximized or fullscreen, its bounds may be
       // empty, so update the bounds now before checking empty.
       if (window_state->is_dragged() ||
+          window_state->allow_set_bounds_direct() ||
           SetMaximizedOrFullscreenBounds(window_state)) {
         return true;
       }
@@ -380,6 +381,7 @@
     }
     case WM_EVENT_DISPLAY_BOUNDS_CHANGED: {
       if (window_state->is_dragged() ||
+          window_state->allow_set_bounds_direct() ||
           SetMaximizedOrFullscreenBounds(window_state)) {
         return true;
       }
@@ -405,6 +407,7 @@
         return true;
 
       if (window_state->is_dragged() ||
+          window_state->allow_set_bounds_direct() ||
           SetMaximizedOrFullscreenBounds(window_state)) {
         return true;
       }
@@ -446,6 +449,7 @@
 // static
 bool DefaultState::SetMaximizedOrFullscreenBounds(WindowState* window_state) {
   DCHECK(!window_state->is_dragged());
+  DCHECK(!window_state->allow_set_bounds_direct());
   if (window_state->IsMaximized()) {
     window_state->SetBoundsDirect(
         GetMaximizedWindowBoundsInParent(window_state->window()));
@@ -462,7 +466,7 @@
 // static
 void DefaultState::SetBounds(WindowState* window_state,
                              const SetBoundsEvent* event) {
-  if (window_state->is_dragged()) {
+  if (window_state->is_dragged() || window_state->allow_set_bounds_direct()) {
     // TODO(oshima|varkha): Is this still needed? crbug.com/485612.
     window_state->SetBoundsDirect(event->requested_bounds());
   } else if (window_state->IsSnapped()) {
@@ -472,8 +476,7 @@
     wm::AdjustBoundsSmallerThan(work_area_in_parent.size(), &child_bounds);
     window_state->AdjustSnappedBounds(&child_bounds);
     window_state->SetBoundsDirect(child_bounds);
-  } else if (!SetMaximizedOrFullscreenBounds(window_state) ||
-             window_state->allow_set_bounds_in_maximized()) {
+  } else if (!SetMaximizedOrFullscreenBounds(window_state)) {
     window_state->SetBoundsConstrained(event->requested_bounds());
   }
 }
diff --git a/ash/wm/maximize_mode/maximize_mode_controller.cc b/ash/wm/maximize_mode/maximize_mode_controller.cc
index 2c8e1f8..0c606b3 100644
--- a/ash/wm/maximize_mode/maximize_mode_controller.cc
+++ b/ash/wm/maximize_mode/maximize_mode_controller.cc
@@ -168,6 +168,7 @@
     });
 
   } else {
+    maximize_mode_window_manager_->SetIgnoreWmEventsForExit();
     Shell::Get()->NotifyMaximizeModeEnding();
     maximize_mode_window_manager_.reset();
     ShellPort::Get()->RecordUserMetricsAction(UMA_MAXIMIZE_MODE_DISABLED);
diff --git a/ash/wm/maximize_mode/maximize_mode_controller_unittest.cc b/ash/wm/maximize_mode/maximize_mode_controller_unittest.cc
index c39caa2..cf6bb66 100644
--- a/ash/wm/maximize_mode/maximize_mode_controller_unittest.cc
+++ b/ash/wm/maximize_mode/maximize_mode_controller_unittest.cc
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "ash/ash_switches.h"
+#include "ash/display/screen_orientation_controller_chromeos.h"
 #include "ash/shell.h"
 #include "ash/system/tray/system_tray_delegate.h"
 #include "ash/test/ash_test_base.h"
@@ -23,6 +24,7 @@
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
 #include "ui/display/manager/display_manager.h"
+#include "ui/display/screen.h"
 #include "ui/display/test/display_manager_test_api.h"
 #include "ui/events/event_handler.h"
 #include "ui/events/test/event_generator.h"
@@ -645,4 +647,25 @@
   EXPECT_TRUE(AreEventsBlocked());
 }
 
+TEST_F(MaximizeModeControllerTest, RestoreAfterExit) {
+  UpdateDisplay("1000x600");
+  std::unique_ptr<aura::Window> w1(
+      CreateTestWindowInShellWithBounds(gfx::Rect(10, 10, 900, 300)));
+  maximize_mode_controller()->EnableMaximizeModeWindowManager(true);
+  Shell::Get()->screen_orientation_controller()->SetLockToRotation(
+      display::Display::ROTATE_90);
+  display::Display display = display::Screen::GetScreen()->GetPrimaryDisplay();
+  EXPECT_EQ(display::Display::ROTATE_90, display.rotation());
+  EXPECT_LT(display.size().width(), display.size().height());
+  maximize_mode_controller()->EnableMaximizeModeWindowManager(false);
+  display = display::Screen::GetScreen()->GetPrimaryDisplay();
+  // Sanity checks.
+  EXPECT_EQ(display::Display::ROTATE_0, display.rotation());
+  EXPECT_GT(display.size().width(), display.size().height());
+
+  // The bounds should be restored to the original bounds, and
+  // should not be clamped by the portrait display in touch view.
+  EXPECT_EQ(gfx::Rect(10, 10, 900, 300), w1->bounds());
+}
+
 }  // namespace ash
diff --git a/ash/wm/maximize_mode/maximize_mode_window_manager.cc b/ash/wm/maximize_mode/maximize_mode_window_manager.cc
index 89f50ec..4a053c8 100644
--- a/ash/wm/maximize_mode/maximize_mode_window_manager.cc
+++ b/ash/wm/maximize_mode/maximize_mode_window_manager.cc
@@ -196,6 +196,12 @@
   // Nothing to do here.
 }
 
+void MaximizeModeWindowManager::SetIgnoreWmEventsForExit() {
+  for (auto& pair : window_state_map_) {
+    pair.second->set_ignore_wm_events(true);
+  }
+}
+
 MaximizeModeWindowManager::MaximizeModeWindowManager()
     : backdrops_hidden_(false) {
   // The overview mode needs to be ended before the maximize mode is started. To
@@ -266,7 +272,7 @@
 
   // If the changing bounds in the maximized/fullscreen is allowed, then
   // let the client manage it even in maximized mode.
-  if (window->GetWindowState()->allow_set_bounds_in_maximized())
+  if (window->GetWindowState()->allow_set_bounds_direct())
     return false;
 
   return window->GetType() == ui::wm::WINDOW_TYPE_NORMAL;
diff --git a/ash/wm/maximize_mode/maximize_mode_window_manager.h b/ash/wm/maximize_mode/maximize_mode_window_manager.h
index 081384cb..4caa571 100644
--- a/ash/wm/maximize_mode/maximize_mode_window_manager.h
+++ b/ash/wm/maximize_mode/maximize_mode_window_manager.h
@@ -71,6 +71,9 @@
   void OnDisplayMetricsChanged(const display::Display& display,
                                uint32_t metrics) override;
 
+  // Tell all managing windows not to handle WM events.
+  void SetIgnoreWmEventsForExit();
+
  protected:
   friend class MaximizeModeController;
 
diff --git a/ash/wm/maximize_mode/maximize_mode_window_manager_unittest.cc b/ash/wm/maximize_mode/maximize_mode_window_manager_unittest.cc
index b4a1b87..d0b512d 100644
--- a/ash/wm/maximize_mode/maximize_mode_window_manager_unittest.cc
+++ b/ash/wm/maximize_mode/maximize_mode_window_manager_unittest.cc
@@ -1595,7 +1595,7 @@
   std::unique_ptr<aura::Window> window(
       CreateWindow(ui::wm::WINDOW_TYPE_NORMAL, rect));
 
-  wm::GetWindowState(window.get())->set_allow_set_bounds_in_maximized(true);
+  wm::GetWindowState(window.get())->set_allow_set_bounds_direct(true);
 
   MaximizeModeWindowManager* manager = CreateMaximizeModeWindowManager();
   EXPECT_FALSE(wm::GetWindowState(window.get())->IsMaximized());
diff --git a/ash/wm/maximize_mode/maximize_mode_window_state.cc b/ash/wm/maximize_mode/maximize_mode_window_state.cc
index 9ff0a98..7dd4c267 100644
--- a/ash/wm/maximize_mode/maximize_mode_window_state.cc
+++ b/ash/wm/maximize_mode/maximize_mode_window_state.cc
@@ -121,6 +121,11 @@
 
 void MaximizeModeWindowState::OnWMEvent(wm::WindowState* window_state,
                                         const wm::WMEvent* event) {
+  // Ignore events that are sent during the exit transition.
+  if (ignore_wm_events_) {
+    return;
+  }
+
   switch (event->type()) {
     case wm::WM_EVENT_TOGGLE_FULLSCREEN:
       ToggleFullScreen(window_state, window_state->delegate());
@@ -156,10 +161,7 @@
     case wm::WM_EVENT_SHOW_INACTIVE:
       return;
     case wm::WM_EVENT_SET_BOUNDS:
-      if (window_state->allow_set_bounds_in_maximized()) {
-        window_state->SetBoundsConstrained(
-            static_cast<const wm::SetBoundsEvent*>(event)->requested_bounds());
-      } else if (current_state_type_ == wm::WINDOW_STATE_TYPE_MAXIMIZED) {
+      if (current_state_type_ == wm::WINDOW_STATE_TYPE_MAXIMIZED) {
         // Having a maximized window, it could have been created with an empty
         // size and the caller should get his size upon leaving the maximized
         // mode. As such we set the restore bounds to the requested bounds.
diff --git a/ash/wm/maximize_mode/maximize_mode_window_state.h b/ash/wm/maximize_mode/maximize_mode_window_state.h
index fe0878f..7cadc5f6 100644
--- a/ash/wm/maximize_mode/maximize_mode_window_state.h
+++ b/ash/wm/maximize_mode/maximize_mode_window_state.h
@@ -30,6 +30,8 @@
   MaximizeModeWindowState(WmWindow* window, MaximizeModeWindowManager* creator);
   ~MaximizeModeWindowState() override;
 
+  void set_ignore_wm_events(bool ignore) { ignore_wm_events_ = ignore; }
+
   // Leaves the maximize mode by reverting to previous state object.
   void LeaveMaximizeMode(wm::WindowState* window_state);
 
@@ -80,6 +82,9 @@
   // If true, do not update bounds.
   bool defer_bounds_updates_;
 
+  // If true, the state will not process events.
+  bool ignore_wm_events_ = false;
+
   DISALLOW_COPY_AND_ASSIGN(MaximizeModeWindowState);
 };
 
diff --git a/ash/wm/window_state.h b/ash/wm/window_state.h
index c837d1d1..9438cd7 100644
--- a/ash/wm/window_state.h
+++ b/ash/wm/window_state.h
@@ -294,14 +294,11 @@
     ignore_keyboard_bounds_change_ = ignore_keyboard_bounds_change;
   }
 
-  // True if the window's bounds can be updated using SET_BOUNDS event in
-  // maiximzed/fullscreen mode.
-  void set_allow_set_bounds_in_maximized(bool value) {
-    allow_set_bounds_in_maximized_ = value;
+  // True if the window bounds can be updated directly using SET_BOUNDS event.
+  void set_allow_set_bounds_direct(bool value) {
+    allow_set_bounds_direct_ = value;
   }
-  bool allow_set_bounds_in_maximized() const {
-    return allow_set_bounds_in_maximized_;
-  }
+  bool allow_set_bounds_direct() const { return allow_set_bounds_direct_; }
 
   // Creates and takes ownership of a pointer to DragDetails when resizing is
   // active. This should be done before a resizer gets created.
@@ -396,7 +393,7 @@
   bool minimum_visibility_;
   bool can_be_dragged_;
   bool cached_always_on_top_;
-  bool allow_set_bounds_in_maximized_ = false;
+  bool allow_set_bounds_direct_ = false;
 
   // A property to remember the window position which was set before the
   // auto window position manager changed the window bounds, so that it can get
diff --git a/ash/wm/window_state_unittest.cc b/ash/wm/window_state_unittest.cc
index 01aed837..ecb86cef 100644
--- a/ash/wm/window_state_unittest.cc
+++ b/ash/wm/window_state_unittest.cc
@@ -374,7 +374,7 @@
   EXPECT_FALSE(window_state->IsTrustedPinned());
 }
 
-TEST_F(WindowStateTest, AllowSetBoundsInMaximized) {
+TEST_F(WindowStateTest, AllowSetBoundsDirect) {
   std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithId(0));
   WindowState* window_state = GetWindowState(window.get());
   EXPECT_FALSE(window_state->IsMaximized());
@@ -384,7 +384,7 @@
   window->SetBounds(original_bounds);
   ASSERT_EQ(original_bounds, window->bounds());
 
-  window_state->set_allow_set_bounds_in_maximized(true);
+  window_state->set_allow_set_bounds_direct(true);
   window_state->Maximize();
 
   EXPECT_TRUE(window_state->IsMaximized());
@@ -398,7 +398,7 @@
   EXPECT_FALSE(window_state->IsMaximized());
   EXPECT_EQ(original_bounds, window->bounds());
 
-  window_state->set_allow_set_bounds_in_maximized(false);
+  window_state->set_allow_set_bounds_direct(false);
   window_state->Maximize();
 
   EXPECT_TRUE(window_state->IsMaximized());
diff --git a/build/android/play_services/config.json b/build/android/play_services/config.json
index d9a1e81..8a755f64 100644
--- a/build/android/play_services/config.json
+++ b/build/android/play_services/config.json
@@ -1,14 +1,15 @@
 {
   "clients": [
-    "play-services-basement",
-    "play-services-tasks",
-    "play-services-base",
     "play-services-auth-base",
     "play-services-auth",
+    "play-services-base",
+    "play-services-basement",
     "play-services-cast",
-    "play-services-iid",
     "play-services-gcm",
+    "play-services-iid",
+    "play-services-location",
     "play-services-nearby",
+    "play-services-tasks",
     "play-services-vision"
   ],
   "version_number": "10.2.0",
diff --git a/build/android/play_services/google_play_services_library.zip.sha1 b/build/android/play_services/google_play_services_library.zip.sha1
index 70df3c6..442310e 100644
--- a/build/android/play_services/google_play_services_library.zip.sha1
+++ b/build/android/play_services/google_play_services_library.zip.sha1
@@ -1 +1 @@
-7bef387dc3f3fa6fb62d29f26fd18814b3d51ecf
\ No newline at end of file
+c0867d3d4daf1fad7d460bcfd27effdf15bbd450
\ No newline at end of file
diff --git a/build/secondary/third_party/android_tools/BUILD.gn b/build/secondary/third_party/android_tools/BUILD.gn
index f11a2450..853b040 100644
--- a/build/secondary/third_party/android_tools/BUILD.gn
+++ b/build/secondary/third_party/android_tools/BUILD.gn
@@ -209,6 +209,7 @@
     ":google_play_services_cast_java",
     ":google_play_services_gcm_java",
     ":google_play_services_iid_java",
+    ":google_play_services_location_java",
     ":google_play_services_nearby_java",
     ":google_play_services_vision_java",
   ]
@@ -300,6 +301,16 @@
   ignore_manifest = true
 }
 
+android_aar_prebuilt("google_play_services_location_java") {
+  deps = [
+    ":google_play_services_base_java",
+    ":google_play_services_basement_java",
+  ]
+  _lib_name = "play-services-location"
+  aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar"
+  ignore_manifest = true
+}
+
 android_aar_prebuilt("google_play_services_nearby_java") {
   deps = [
     ":google_play_services_base_java",
diff --git a/chrome/VERSION b/chrome/VERSION
index b1c05cb2..d91d6a8 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=59
 MINOR=0
-BUILD=3070
+BUILD=3071
 PATCH=0
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
index a3ac422..36e7daaf 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
@@ -7,6 +7,7 @@
 import org.chromium.base.VisibleForTesting;
 import org.chromium.base.annotations.JNINamespace;
 import org.chromium.base.annotations.MainDex;
+import org.chromium.base.library_loader.LibraryLoader;
 
 import java.util.Map;
 
@@ -35,6 +36,22 @@
     }
 
     /**
+     * @return Whether the native FeatureList has been initialized. If this method returns false,
+     * none of the methods in this class that require native access should be called (except in
+     * tests if test features have been set).
+     */
+    public static boolean isInitialized() {
+        if (!LibraryLoader.isInitialized()) return false;
+
+        // Even if the native library is loaded, the C++ FeatureList might not be initialized yet.
+        // In that case, accessing it will not immediately fail, but instead cause a crash later
+        // when it is initialized. Return whether the native FeatureList has been initialized,
+        // so the return value can be tested, or asserted for a more actionable stack trace
+        // on failure.
+        return nativeIsInitialized();
+    }
+
+    /**
      * Returns whether the specified feature is enabled or not.
      *
      * Note: Features queried through this API must be added to the array
@@ -44,9 +61,14 @@
      * @return Whether the feature is enabled or not.
      */
     public static boolean isEnabled(String featureName) {
-        if (sTestFeatures == null) return nativeIsEnabled(featureName);
-        if (sTestFeatures.containsKey(featureName)) return sTestFeatures.get(featureName);
-        throw new IllegalArgumentException(featureName);
+        if (sTestFeatures != null) {
+            Boolean enabled = sTestFeatures.get(featureName);
+            if (enabled == null) throw new IllegalArgumentException(featureName);
+            return enabled.booleanValue();
+        }
+
+        assert isInitialized();
+        return nativeIsEnabled(featureName);
     }
 
     /**
@@ -61,6 +83,7 @@
      *   the specified parameter does not exist.
      */
     public static String getFieldTrialParamByFeature(String featureName, String paramName) {
+        assert isInitialized();
         return nativeGetFieldTrialParamByFeature(featureName, paramName);
     }
 
@@ -78,6 +101,7 @@
      */
     public static int getFieldTrialParamByFeatureAsInt(
             String featureName, String paramName, int defaultValue) {
+        assert isInitialized();
         return nativeGetFieldTrialParamByFeatureAsInt(featureName, paramName, defaultValue);
     }
 
@@ -95,6 +119,7 @@
      */
     public static double getFieldTrialParamByFeatureAsDouble(
             String featureName, String paramName, double defaultValue) {
+        assert isInitialized();
         return nativeGetFieldTrialParamByFeatureAsDouble(featureName, paramName, defaultValue);
     }
 
@@ -112,6 +137,7 @@
      */
     public static boolean getFieldTrialParamByFeatureAsBoolean(
             String featureName, String paramName, boolean defaultValue) {
+        assert isInitialized();
         return nativeGetFieldTrialParamByFeatureAsBoolean(featureName, paramName, defaultValue);
     }
 
@@ -163,6 +189,7 @@
     public static final String WEB_PAYMENTS_SINGLE_APP_UI_SKIP = "WebPaymentsSingleAppUiSkip";
     public static final String WEBVR_CARDBOARD_SUPPORT = "WebVRCardboardSupport";
 
+    private static native boolean nativeIsInitialized();
     private static native boolean nativeIsEnabled(String featureName);
     private static native String nativeGetFieldTrialParamByFeature(
             String featureName, String paramName);
diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd
index deb2dbe..399dcc45 100644
--- a/chrome/android/java/strings/android_chrome_strings.grd
+++ b/chrome/android/java/strings/android_chrome_strings.grd
@@ -483,7 +483,7 @@
         Search and site suggestions
       </message>
       <message name="IDS_SEARCH_SITE_SUGGESTIONS_SUMMARY" desc="Summary for search and site suggestions.">
-        Use prediction services to suggest searches and websites
+        Use prediction services to suggest search terms and websites
       </message>
       <message name="IDS_SAFE_BROWSING_EXTENDED_REPORTING_TITLE" desc="Title for checkbox that controls whether details of possible security incidents will be sent to Google.">
         Security incidents
@@ -1026,7 +1026,7 @@
       <message name="IDS_DATA_REDUCTION_CAVEATS_DESCRIPTION" desc="Description text for usage caveats">
         This feature may interfere with access to premium data services provided by your carrier.
       </message>
-      
+
       <!-- Old Data Saver stats page strings-->
       <message name="IDS_DATA_REDUCTION_STATS_TITLE" desc="Data reduction statistics title.">
         Data savings
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandlerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandlerTest.java
index 950fddb..48bf368 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandlerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandlerTest.java
@@ -127,7 +127,7 @@
         RecordHistogram.setDisabledForTests(true);
         mDelegate.mQueryIntentOverride = null;
         ChromeWebApkHost.initForTesting(false);  // disabled by default
-        mActivityTestRule.loadNativeLibraryNoBrowserProcess();
+        mActivityTestRule.loadNativeLibraryAndInitBrowserProcess();
     }
 
     @After
diff --git a/chrome/app/chromeos_strings.grdp b/chrome/app/chromeos_strings.grdp
index 79df369..c7c7b49 100644
--- a/chrome/app/chromeos_strings.grdp
+++ b/chrome/app/chromeos_strings.grdp
@@ -4725,6 +4725,9 @@
   <message name="IDS_KEYBOARD_OVERLAY_ROTATE_SCREEN" desc="The text in the keyboard overlay to explain the shortcut (rotate the screen).">
     Rotate screen
   </message>
+  <message name="IDS_KEYBOARD_OVERLAY_ROTATE_WINDOW" desc="The text in the keyboard overlay to explain the shortcut (rotate the window).">
+    Rotate window
+  </message>
   <message name="IDS_KEYBOARD_OVERLAY_SAVE" desc="The text in the keyboard overlay to explain the shortcut (save page as a file).">
     Save
   </message>
@@ -4755,6 +4758,9 @@
   <message name="IDS_KEYBOARD_OVERLAY_SHOW_STATUS_MENU" desc="The text in the keyboard overlay to explain the shortcut (show the status menu).">
     Status menu
   </message>
+  <message name="IDS_KEYBOARD_OVERLAY_SHOW_STYLUS_TOOLS" desc="The text in the keyboard overlay to explain the shortcut (show the stylus tools).">
+    Stylus tools
+  </message>
   <message name="IDS_KEYBOARD_OVERLAY_SIGN_OUT" desc="The text in the keyboard overlay to explain the shortcut.">
     Sign out
   </message>
@@ -4791,9 +4797,15 @@
   <message name="IDS_KEYBOARD_OVERLAY_TOGGLE_SPEECH_INPUT" desc="The text in the keyboard overlay to explain the shortcut (start or stop speech input).">
     Speech input
   </message>
+  <message name="IDS_KEYBOARD_OVERLAY_TOUCH_HUD_MODE_CHANGE" desc="The text in the keyboard overlay to explain the shortcut (touch hub mode change).">
+    Touch HUD mode change
+  </message>
   <message name="IDS_KEYBOARD_OVERLAY_UNDO" desc="The text in the keyboard overlay to explain the shortcut.">
     Undo
   </message>
+  <message name="IDS_KEYBOARD_OVERLAY_UNPIN" desc="The text in the keyboard overlay to explain the shortcut.">
+    Unpin
+  </message>
   <message name="IDS_KEYBOARD_OVERLAY_VIEW_KEYBOARD_OVERLAY" desc="The text in the keyboard overlay to explain the shortcut.">
     Keyboard overlay
   </message>
@@ -6568,6 +6580,9 @@
   <message name="IDS_ARC_MIGRATE_ENCRYPTION_NOTIFICATION_RESTART_BUTTON" desc="Label for the button in the notification that navigates the user to sign-out for completing the encryption update step.">
     Sign out &amp; sign back in
   </message>
+  <message name="IDS_ARC_MIGRATE_ENCRYPTION_SUCCESS_MESSAGE" desc="Message of the toast shown on the first sign-in after the successfully completed migration needed for using Android apps.">
+    Update successful. You can now use Android apps.
+  </message>
 
   <!-- Print Job Notification -->
   <message name="IDS_PRINT_JOB_WAITING_NOTIFICATION_MESSAGE" desc="Message of the waiting-for-printing notification.">
diff --git a/chrome/browser/android/chrome_feature_list.cc b/chrome/browser/android/chrome_feature_list.cc
index b1e79b3a..23e63e7 100644
--- a/chrome/browser/android/chrome_feature_list.cc
+++ b/chrome/browser/android/chrome_feature_list.cc
@@ -210,6 +210,10 @@
 const base::Feature kWebVRCardboardSupport{
     "WebVRCardboardSupport", base::FEATURE_ENABLED_BY_DEFAULT};
 
+static jboolean IsInitialized(JNIEnv* env, const JavaParamRef<jclass>& clazz) {
+  return !!base::FeatureList::GetInstance();
+}
+
 static jboolean IsEnabled(JNIEnv* env,
                           const JavaParamRef<jclass>& clazz,
                           const JavaParamRef<jstring>& jfeature_name) {
diff --git a/chrome/browser/android/vr_shell/vr_shell_gl.cc b/chrome/browser/android/vr_shell/vr_shell_gl.cc
index dbb009f..5736237 100644
--- a/chrome/browser/android/vr_shell/vr_shell_gl.cc
+++ b/chrome/browser/android/vr_shell/vr_shell_gl.cc
@@ -108,6 +108,40 @@
   return quat;
 }
 
+gvr::Mat4f PerspectiveMatrixFromView(const gvr::Rectf& fov,
+                                     float z_near,
+                                     float z_far) {
+  gvr::Mat4f result;
+  const float x_left = -std::tan(fov.left * M_PI / 180.0f) * z_near;
+  const float x_right = std::tan(fov.right * M_PI / 180.0f) * z_near;
+  const float y_bottom = -std::tan(fov.bottom * M_PI / 180.0f) * z_near;
+  const float y_top = std::tan(fov.top * M_PI / 180.0f) * z_near;
+
+  DCHECK(x_left < x_right && y_bottom < y_top && z_near < z_far &&
+         z_near > 0.0f && z_far > 0.0f);
+  const float X = (2 * z_near) / (x_right - x_left);
+  const float Y = (2 * z_near) / (y_top - y_bottom);
+  const float A = (x_right + x_left) / (x_right - x_left);
+  const float B = (y_top + y_bottom) / (y_top - y_bottom);
+  const float C = (z_near + z_far) / (z_near - z_far);
+  const float D = (2 * z_near * z_far) / (z_near - z_far);
+
+  for (int i = 0; i < 4; ++i) {
+    for (int j = 0; j < 4; ++j) {
+      result.m[i][j] = 0.0f;
+    }
+  }
+  result.m[0][0] = X;
+  result.m[0][2] = A;
+  result.m[1][1] = Y;
+  result.m[1][2] = B;
+  result.m[2][2] = C;
+  result.m[2][3] = D;
+  result.m[3][2] = -1;
+
+  return result;
+}
+
 std::unique_ptr<blink::WebMouseEvent> MakeMouseEvent(WebInputEvent::Type type,
                                                      double timestamp,
                                                      float x,
@@ -150,13 +184,13 @@
   *out = *reinterpret_cast<vr::Mat4f*>(const_cast<gvr::Mat4f*>(&in));
 }
 
-gvr::Rectf GvrRectFromGfxRect(gfx::RectF rect) {
-  // gvr::Rectf bottom/top are reverse of gfx::RectF bottom/top.
-  return {rect.x(), rect.x() + rect.width(), rect.y(), rect.bottom()};
+gvr::Rectf UVFromGfxRect(gfx::RectF rect) {
+  return {rect.x(), rect.x() + rect.width(), 1.0f - rect.bottom(),
+          1.0f - rect.y()};
 }
 
-gfx::RectF GfxRectFromGvrRect(gvr::Rectf rect) {
-  return gfx::RectF(rect.left, rect.bottom, rect.right - rect.left,
+gfx::RectF GfxRectFromUV(gvr::Rectf rect) {
+  return gfx::RectF(rect.left, 1.0 - rect.top, rect.right - rect.left,
                     rect.top - rect.bottom);
 }
 
@@ -785,9 +819,8 @@
         break;
 
       const WebVrBounds& bounds = pending_bounds_.front().second;
-      webvr_left_viewport_->SetSourceUv(GvrRectFromGfxRect(bounds.left_bounds));
-      webvr_right_viewport_->SetSourceUv(
-          GvrRectFromGfxRect(bounds.right_bounds));
+      webvr_left_viewport_->SetSourceUv(UVFromGfxRect(bounds.left_bounds));
+      webvr_right_viewport_->SetSourceUv(UVFromGfxRect(bounds.right_bounds));
       DVLOG(1) << __FUNCTION__ << ": resize from pending_bounds to "
                << bounds.source_size.width() << "x"
                << bounds.source_size.height();
@@ -889,7 +922,7 @@
   // After saving the timestamp, fps will be available via GetFPS().
   // TODO(vollick): enable rendering of this framerate in a HUD.
   fps_meter_->AddFrame(current_time);
-  LOG(ERROR) << "fps: " << fps_meter_->GetFPS();
+  DVLOG(1) << "fps: " << fps_meter_->GetFPS();
 #endif
 }
 
@@ -958,17 +991,17 @@
     GvrMatToMatf(gvr_api_->GetEyeFromHeadMatrix(eye), &eye_matrix);
     vr::MatrixMul(eye_matrix, head_pose, &eye_view_matrix);
 
-    const gfx::RectF& rect =
-        GfxRectFromGvrRect(buffer_viewport_->GetSourceUv());
+    const gfx::RectF& rect = GfxRectFromUV(buffer_viewport_->GetSourceUv());
     const gfx::Rect& pixel_rect = CalculatePixelSpaceRect(render_size, rect);
     glViewport(pixel_rect.x(), pixel_rect.y(), pixel_rect.width(),
                pixel_rect.height());
 
     vr::Mat4f render_matrix;
     vr::Mat4f perspective_matrix;
-    vr::PerspectiveMatrixFromView(
-        GfxRectFromGvrRect(buffer_viewport_->GetSourceFov()), kZNear, kZFar,
-        &perspective_matrix);
+    GvrMatToMatf(PerspectiveMatrixFromView(buffer_viewport_->GetSourceFov(),
+                                           kZNear, kZFar),
+                 &perspective_matrix);
+
     vr::MatrixMul(perspective_matrix, eye_view_matrix, &render_matrix);
 
     DrawElements(render_matrix, elementsInDrawOrder);
@@ -1207,8 +1240,8 @@
                                          const gfx::RectF& right_bounds,
                                          const gfx::Size& source_size) {
   if (frame_index < 0) {
-    webvr_left_viewport_->SetSourceUv(GvrRectFromGfxRect(left_bounds));
-    webvr_right_viewport_->SetSourceUv(GvrRectFromGfxRect(right_bounds));
+    webvr_left_viewport_->SetSourceUv(UVFromGfxRect(left_bounds));
+    webvr_right_viewport_->SetSourceUv(UVFromGfxRect(right_bounds));
     CreateOrResizeWebVRSurface(source_size);
   } else {
     pending_bounds_.emplace(
diff --git a/chrome/browser/devtools/chrome_devtools_manager_delegate.cc b/chrome/browser/devtools/chrome_devtools_manager_delegate.cc
index 3939cc6e..3fa7850 100644
--- a/chrome/browser/devtools/chrome_devtools_manager_delegate.cc
+++ b/chrome/browser/devtools/chrome_devtools_manager_delegate.cc
@@ -4,6 +4,8 @@
 
 #include "chrome/browser/devtools/chrome_devtools_manager_delegate.h"
 
+#include <utility>
+
 #include "base/memory/ptr_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
@@ -17,7 +19,10 @@
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/ui/browser_navigator.h"
 #include "chrome/browser/ui/browser_navigator_params.h"
+#include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/exclusive_access/exclusive_access_context.h"
 #include "chrome/browser/ui/tab_contents/tab_contents_iterator.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/grit/browser_resources.h"
 #include "components/guest_view/browser/guest_view_base.h"
 #include "content/public/browser/devtools_agent_host.h"
@@ -40,6 +45,43 @@
 char kHostParam[] = "host";
 char kPortParam[] = "port";
 
+BrowserWindow* GetBrowserWindow(int window_id) {
+  for (auto* b : *BrowserList::GetInstance()) {
+    if (b->session_id().id() == window_id)
+      return b->window();
+  }
+  return nullptr;
+}
+
+// Get the bounds and state of the browser window. The bounds is for the
+// restored window when the window is minimized. Otherwise, it is for the actual
+// window.
+std::unique_ptr<base::DictionaryValue> GetBounds(BrowserWindow* window) {
+  gfx::Rect bounds;
+  if (window->IsMinimized())
+    bounds = window->GetRestoredBounds();
+  else
+    bounds = window->GetBounds();
+
+  auto bounds_object = base::MakeUnique<base::DictionaryValue>();
+
+  bounds_object->SetInteger("left", bounds.x());
+  bounds_object->SetInteger("top", bounds.y());
+  bounds_object->SetInteger("width", bounds.width());
+  bounds_object->SetInteger("height", bounds.height());
+
+  std::string window_state = "normal";
+  if (window->IsMinimized())
+    window_state = "minimized";
+  if (window->IsMaximized())
+    window_state = "maximized";
+  if (window->IsFullscreen())
+    window_state = "fullscreen";
+  bounds_object->SetString("windowState", window_state);
+
+  return bounds_object;
+}
+
 bool GetExtensionInfo(content::RenderFrameHost* host,
                       std::string* name,
                       std::string* type) {
@@ -73,6 +115,184 @@
 
 }  // namespace
 
+// static
+std::unique_ptr<base::DictionaryValue>
+ChromeDevToolsManagerDelegate::GetWindowForTarget(
+    int id,
+    base::DictionaryValue* params) {
+  std::string target_id;
+  if (!params->GetString("targetId", &target_id))
+    return DevToolsProtocol::CreateInvalidParamsResponse(id, "targetId");
+
+  Browser* browser = nullptr;
+  scoped_refptr<DevToolsAgentHost> host =
+      DevToolsAgentHost::GetForId(target_id);
+  if (!host)
+    return DevToolsProtocol::CreateErrorResponse(id, "No target with given id");
+  content::WebContents* web_contents = host->GetWebContents();
+  if (!web_contents) {
+    return DevToolsProtocol::CreateErrorResponse(
+        id, "No web contents in the target");
+  }
+  for (auto* b : *BrowserList::GetInstance()) {
+    int tab_index = b->tab_strip_model()->GetIndexOfWebContents(web_contents);
+    if (tab_index != TabStripModel::kNoTab)
+      browser = b;
+  }
+  if (!browser) {
+    return DevToolsProtocol::CreateErrorResponse(id,
+                                                 "Browser window not found");
+  }
+
+  auto result = base::MakeUnique<base::DictionaryValue>();
+  result->SetInteger("windowId", browser->session_id().id());
+  result->Set("bounds", GetBounds(browser->window()));
+  return DevToolsProtocol::CreateSuccessResponse(id, std::move(result));
+}
+
+// static
+std::unique_ptr<base::DictionaryValue>
+ChromeDevToolsManagerDelegate::GetWindowBounds(int id,
+                                               base::DictionaryValue* params) {
+  int window_id;
+  if (!params->GetInteger("windowId", &window_id))
+    return DevToolsProtocol::CreateInvalidParamsResponse(id, "windowId");
+  BrowserWindow* window = GetBrowserWindow(window_id);
+  if (!window) {
+    return DevToolsProtocol::CreateErrorResponse(id,
+                                                 "Browser window not found");
+  }
+
+  auto result = base::MakeUnique<base::DictionaryValue>();
+  result->Set("bounds", GetBounds(window));
+  return DevToolsProtocol::CreateSuccessResponse(id, std::move(result));
+}
+
+// static
+std::unique_ptr<base::DictionaryValue>
+ChromeDevToolsManagerDelegate::SetWindowBounds(int id,
+                                               base::DictionaryValue* params) {
+  int window_id;
+  if (!params->GetInteger("windowId", &window_id))
+    return DevToolsProtocol::CreateInvalidParamsResponse(id, "windowId");
+  BrowserWindow* window = GetBrowserWindow(window_id);
+  if (!window) {
+    return DevToolsProtocol::CreateErrorResponse(id,
+                                                 "Browser window not found");
+  }
+
+  const base::Value* value = nullptr;
+  const base::DictionaryValue* bounds_dict = nullptr;
+  if (!params->Get("bounds", &value) || !value->GetAsDictionary(&bounds_dict))
+    return DevToolsProtocol::CreateInvalidParamsResponse(id, "bounds");
+
+  std::string window_state;
+  if (!bounds_dict->GetString("windowState", &window_state))
+    window_state = "normal";
+  else if (window_state != "normal" && window_state != "minimized" &&
+           window_state != "maximized" && window_state != "fullscreen")
+    return DevToolsProtocol::CreateInvalidParamsResponse(id, "windowState");
+
+  // Compute updated bounds when window state is normal.
+  bool set_bounds = false;
+  gfx::Rect bounds = window->GetBounds();
+  int left, top, width, height;
+  if (bounds_dict->GetInteger("left", &left)) {
+    bounds.set_x(left);
+    set_bounds = true;
+  }
+  if (bounds_dict->GetInteger("top", &top)) {
+    bounds.set_y(top);
+    set_bounds = true;
+  }
+  if (bounds_dict->GetInteger("width", &width)) {
+    if (width < 0)
+      return DevToolsProtocol::CreateInvalidParamsResponse(id, "width");
+    bounds.set_width(width);
+    set_bounds = true;
+  }
+  if (bounds_dict->GetInteger("height", &height)) {
+    if (height < 0)
+      return DevToolsProtocol::CreateInvalidParamsResponse(id, "height");
+    bounds.set_height(height);
+    set_bounds = true;
+  }
+
+  if (set_bounds && window_state != "normal") {
+    return DevToolsProtocol::CreateErrorResponse(
+        id,
+        "The 'minimized', 'maximized' and 'fullscreen' states cannot be "
+        "combined with 'left', 'top', 'width' or 'height'");
+  }
+
+  if (set_bounds && (window->IsMinimized() || window->IsMaximized() ||
+                     window->IsFullscreen())) {
+    return DevToolsProtocol::CreateErrorResponse(
+        id,
+        "To resize minimized/maximized/fullscreen window, restore it to normal "
+        "state first.");
+  }
+
+  if (window_state == "fullscreen") {
+    if (window->IsMinimized()) {
+      return DevToolsProtocol::CreateErrorResponse(id,
+                                                   "To make minimized window "
+                                                   "fullscreen, restore it to "
+                                                   "normal state first.");
+    }
+    window->GetExclusiveAccessContext()->EnterFullscreen(
+        GURL(), EXCLUSIVE_ACCESS_BUBBLE_TYPE_NONE);
+  }
+
+  if (window_state == "maximized") {
+    if (window->IsMinimized() || window->IsFullscreen()) {
+      return DevToolsProtocol::CreateErrorResponse(
+          id,
+          "To maximize a minimized or fullscreen window, restore it to normal "
+          "state first.");
+    }
+    window->Maximize();
+  }
+
+  if (window_state == "minimized") {
+    if (window->IsFullscreen()) {
+      return DevToolsProtocol::CreateErrorResponse(
+          id,
+          "To minimize a fullscreen window, restore it to normal "
+          "state first.");
+    }
+    window->Minimize();
+  }
+
+  if (window_state == "normal") {
+    if (window->IsFullscreen()) {
+      window->GetExclusiveAccessContext()->ExitFullscreen();
+    } else if (window->IsMinimized()) {
+      window->Show();
+    } else if (window->IsMaximized()) {
+      window->Restore();
+    } else if (set_bounds) {
+      window->SetBounds(bounds);
+    }
+  }
+
+  return DevToolsProtocol::CreateSuccessResponse(id, nullptr);
+}
+
+std::unique_ptr<base::DictionaryValue>
+ChromeDevToolsManagerDelegate::HandleBrowserCommand(
+    int id,
+    std::string method,
+    base::DictionaryValue* params) {
+  if (method == chrome::devtools::Browser::getWindowForTarget::kName)
+    return GetWindowForTarget(id, params);
+  if (method == chrome::devtools::Browser::getWindowBounds::kName)
+    return GetWindowBounds(id, params);
+  if (method == chrome::devtools::Browser::setWindowBounds::kName)
+    return SetWindowBounds(id, params);
+  return nullptr;
+}
+
 class ChromeDevToolsManagerDelegate::HostData {
  public:
   HostData() {}
@@ -112,6 +332,10 @@
   if (!DevToolsProtocol::ParseCommand(command_dict, &id, &method, &params))
     return nullptr;
 
+  if (agent_host->GetType() == DevToolsAgentHost::kTypeBrowser &&
+      method.find("Browser.") == 0)
+    return HandleBrowserCommand(id, method, params).release();
+
   if (method == chrome::devtools::Target::setRemoteLocations::kName)
     return SetRemoteLocations(agent_host, id, params).release();
 
@@ -284,7 +508,5 @@
   host_data_[agent_host]->set_remote_locations(tcp_locations);
   UpdateDeviceDiscovery();
 
-  std::unique_ptr<base::DictionaryValue> result(
-      base::MakeUnique<base::DictionaryValue>());
-  return DevToolsProtocol::CreateSuccessResponse(command_id, std::move(result));
+  return DevToolsProtocol::CreateSuccessResponse(command_id, nullptr);
 }
diff --git a/chrome/browser/devtools/chrome_devtools_manager_delegate.h b/chrome/browser/devtools/chrome_devtools_manager_delegate.h
index 6dcaef26..e79984f 100644
--- a/chrome/browser/devtools/chrome_devtools_manager_delegate.h
+++ b/chrome/browser/devtools/chrome_devtools_manager_delegate.h
@@ -8,6 +8,7 @@
 #include <map>
 #include <memory>
 #include <set>
+#include <string>
 
 #include "base/compiler_specific.h"
 #include "base/macros.h"
@@ -31,6 +32,7 @@
 
  private:
   class HostData;
+  friend class DevToolsManagerDelegateTest;
   using RemoteLocations = std::set<net::HostPortPair>;
 
   // content::DevToolsManagerDelegate implementation.
@@ -60,6 +62,20 @@
       int command_id,
       base::DictionaryValue* params);
 
+  std::unique_ptr<base::DictionaryValue> HandleBrowserCommand(
+      int id,
+      std::string method,
+      base::DictionaryValue* params);
+  static std::unique_ptr<base::DictionaryValue> GetWindowForTarget(
+      int id,
+      base::DictionaryValue* params);
+  static std::unique_ptr<base::DictionaryValue> GetWindowBounds(
+      int id,
+      base::DictionaryValue* params);
+  static std::unique_ptr<base::DictionaryValue> SetWindowBounds(
+      int id,
+      base::DictionaryValue* params);
+
   std::unique_ptr<DevToolsNetworkProtocolHandler> network_protocol_handler_;
   std::map<content::DevToolsAgentHost*, std::unique_ptr<HostData>> host_data_;
 
diff --git a/chrome/browser/devtools/devtools_protocol.cc b/chrome/browser/devtools/devtools_protocol.cc
index 5ba6a22..c6c8dad7 100644
--- a/chrome/browser/devtools/devtools_protocol.cc
+++ b/chrome/browser/devtools/devtools_protocol.cc
@@ -22,7 +22,7 @@
 const char kResultParam[] = "result";
 
 // JSON RPC 2.0 spec: http://www.jsonrpc.org/specification#error_object
-enum Error { kErrorInvalidParams = -32602 };
+enum Error { kErrorInvalidParams = -32602, kErrorServerError = -32000 };
 
 }  // namespace
 
@@ -58,6 +58,20 @@
 }
 
 // static
+std::unique_ptr<base::DictionaryValue> DevToolsProtocol::CreateErrorResponse(
+    int command_id,
+    const std::string& error_message) {
+  std::unique_ptr<base::DictionaryValue> response(new base::DictionaryValue());
+  response->SetInteger(kIdParam, command_id);
+  auto error_object = base::MakeUnique<base::DictionaryValue>();
+  error_object->SetInteger(kErrorCodeParam, kErrorServerError);
+  error_object->SetString(kErrorMessageParam, error_message);
+  response->Set(kErrorParam, std::move(error_object));
+
+  return response;
+}
+
+// static
 std::unique_ptr<base::DictionaryValue> DevToolsProtocol::CreateSuccessResponse(
     int command_id,
     std::unique_ptr<base::DictionaryValue> result) {
diff --git a/chrome/browser/devtools/devtools_protocol.h b/chrome/browser/devtools/devtools_protocol.h
index be1c5e3..7ba104df 100644
--- a/chrome/browser/devtools/devtools_protocol.h
+++ b/chrome/browser/devtools/devtools_protocol.h
@@ -41,6 +41,10 @@
       int command_id,
       const std::string& param);
 
+  static std::unique_ptr<base::DictionaryValue> CreateErrorResponse(
+      int command_id,
+      const std::string& error_message);
+
  private:
   DevToolsProtocol() {}
   ~DevToolsProtocol() {}
diff --git a/chrome/browser/devtools/devtools_sanity_interactive_browsertest.cc b/chrome/browser/devtools/devtools_sanity_interactive_browsertest.cc
new file mode 100644
index 0000000..1f65c52
--- /dev/null
+++ b/chrome/browser/devtools/devtools_sanity_interactive_browsertest.cc
@@ -0,0 +1,210 @@
+// Copyright 2017 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 "base/macros.h"
+#include "base/memory/ptr_util.h"
+#include "base/run_loop.h"
+#include "build/build_config.h"
+#include "chrome/browser/devtools/chrome_devtools_manager_delegate.h"
+#include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/exclusive_access/exclusive_access_context.h"
+#include "chrome/test/base/in_process_browser_test.h"
+
+#if defined(OS_MACOSX)
+#include "ui/base/test/scoped_fake_nswindow_fullscreen.h"
+#endif
+
+// Encapsulates waiting for the browser window to change state. This is
+// needed for example on Chrome desktop linux, where window state change is done
+// asynchronously as an event received from a different process.
+class CheckWaiter {
+ public:
+  explicit CheckWaiter(base::Callback<bool()> callback, bool expected)
+      : callback_(callback),
+        expected_(expected),
+        timeout_(base::Time::NowFromSystemTime() +
+                 base::TimeDelta::FromSeconds(1)) {}
+  ~CheckWaiter() = default;
+
+  // Blocks until the browser window becomes maximized.
+  void Wait() {
+    if (Check())
+      return;
+
+    base::RunLoop run_loop;
+    quit_ = run_loop.QuitClosure();
+    run_loop.Run();
+  }
+
+ private:
+  bool Check() {
+    if (callback_.Run() != expected_ &&
+        base::Time::NowFromSystemTime() < timeout_) {
+      base::MessageLoop::current()->task_runner()->PostTask(
+          FROM_HERE, base::Bind(base::IgnoreResult(&CheckWaiter::Check),
+                                base::Unretained(this)));
+      return false;
+    }
+
+    // Quit the run_loop to end the wait.
+    if (!quit_.is_null())
+      base::ResetAndReturn(&quit_).Run();
+    return true;
+  }
+
+  base::Callback<bool()> callback_;
+  bool expected_;
+  base::Time timeout_;
+  // The waiter's RunLoop quit closure.
+  base::Closure quit_;
+
+  DISALLOW_COPY_AND_ASSIGN(CheckWaiter);
+};
+
+class DevToolsManagerDelegateTest : public InProcessBrowserTest {
+ public:
+  std::unique_ptr<base::DictionaryValue> SendCommand(std::string state) {
+    auto params = base::MakeUnique<base::DictionaryValue>();
+    auto bounds_object = base::MakeUnique<base::DictionaryValue>();
+    bounds_object->SetString("windowState", state);
+    params->Set("bounds", std::move(bounds_object));
+    params->SetInteger("windowId", browser()->session_id().id());
+    return ChromeDevToolsManagerDelegate::SetWindowBounds(0, params.get());
+  }
+
+  std::unique_ptr<base::DictionaryValue> UpdateBounds() {
+    auto params = base::MakeUnique<base::DictionaryValue>();
+    auto bounds_object = base::MakeUnique<base::DictionaryValue>();
+    bounds_object->SetString("windowState", "normal");
+    bounds_object->SetInteger("left", 200);
+    bounds_object->SetInteger("height", 400);
+    params->Set("bounds", std::move(bounds_object));
+    params->SetInteger("windowId", browser()->session_id().id());
+    return ChromeDevToolsManagerDelegate::SetWindowBounds(0, params.get());
+  }
+
+  void CheckIsMaximized(bool maximized) {
+    CheckWaiter(base::Bind(&BrowserWindow::IsMaximized,
+                           base::Unretained(browser()->window())),
+                maximized)
+        .Wait();
+    EXPECT_EQ(maximized, browser()->window()->IsMaximized());
+  }
+
+  void CheckIsMinimized(bool minimized) {
+    CheckWaiter(base::Bind(&BrowserWindow::IsMinimized,
+                           base::Unretained(browser()->window())),
+                minimized)
+        .Wait();
+    EXPECT_EQ(minimized, browser()->window()->IsMinimized());
+  }
+
+  void CheckIsFullscreen(bool fullscreen) {
+    CheckWaiter(base::Bind(&BrowserWindow::IsFullscreen,
+                           base::Unretained(browser()->window())),
+                fullscreen)
+        .Wait();
+    EXPECT_EQ(fullscreen, browser()->window()->IsFullscreen());
+  }
+
+  bool IsWindowBoundsEqual(gfx::Rect expected) {
+    return browser()->window()->GetBounds() == expected;
+  }
+
+  void CheckWindowBounds(gfx::Rect expected) {
+    CheckWaiter(base::Bind(&DevToolsManagerDelegateTest::IsWindowBoundsEqual,
+                           base::Unretained(this), expected),
+                true)
+        .Wait();
+    EXPECT_EQ(expected, browser()->window()->GetBounds());
+  }
+};
+
+IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, NormalWindowChangeBounds) {
+  browser()->window()->SetBounds(gfx::Rect(100, 100, 500, 600));
+  CheckWindowBounds(gfx::Rect(100, 100, 500, 600));
+  UpdateBounds();
+  CheckWindowBounds(gfx::Rect(200, 100, 500, 400));
+}
+
+IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, NormalToMaximizedWindow) {
+  CheckIsMaximized(false);
+  SendCommand("maximized");
+  CheckIsMaximized(true);
+}
+
+IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, NormalToMinimizedWindow) {
+  CheckIsMinimized(false);
+  SendCommand("minimized");
+  CheckIsMinimized(true);
+}
+
+IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, NormalToFullscreenWindow) {
+#if defined(OS_MACOSX)
+  ui::test::ScopedFakeNSWindowFullscreen faker;
+#endif
+  CheckIsFullscreen(false);
+  SendCommand("fullscreen");
+#if defined(OS_MACOSX)
+  faker.FinishTransition();
+#endif
+  CheckIsFullscreen(true);
+}
+
+IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest,
+                       MaximizedToMinimizedWindow) {
+  browser()->window()->Maximize();
+  CheckIsMaximized(true);
+
+  CheckIsMinimized(false);
+  SendCommand("minimized");
+  CheckIsMinimized(true);
+}
+
+IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest,
+                       MaximizedToFullscreenWindow) {
+  browser()->window()->Maximize();
+  CheckIsMaximized(true);
+
+#if defined(OS_MACOSX)
+  ui::test::ScopedFakeNSWindowFullscreen faker;
+#endif
+  CheckIsFullscreen(false);
+  SendCommand("fullscreen");
+#if defined(OS_MACOSX)
+  faker.FinishTransition();
+#endif
+  CheckIsFullscreen(true);
+}
+
+IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, ShowMinimizedWindow) {
+  browser()->window()->Minimize();
+  CheckIsMinimized(true);
+  SendCommand("normal");
+  CheckIsMinimized(false);
+}
+
+IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, RestoreMaximizedWindow) {
+  browser()->window()->Maximize();
+  CheckIsMaximized(true);
+  SendCommand("normal");
+  CheckIsMaximized(false);
+}
+
+IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, ExitFullscreenWindow) {
+#if defined(OS_MACOSX)
+  ui::test::ScopedFakeNSWindowFullscreen faker;
+#endif
+  browser()->window()->GetExclusiveAccessContext()->EnterFullscreen(
+      GURL(), EXCLUSIVE_ACCESS_BUBBLE_TYPE_NONE);
+#if defined(OS_MACOSX)
+  faker.FinishTransition();
+#endif
+  CheckIsFullscreen(true);
+  SendCommand("normal");
+#if defined(OS_MACOSX)
+  faker.FinishTransition();
+#endif
+  CheckIsFullscreen(false);
+}
diff --git a/chrome/browser/google/google_brand.cc b/chrome/browser/google/google_brand.cc
index 7e07284e..33cf760f 100644
--- a/chrome/browser/google/google_brand.cc
+++ b/chrome/browser/google/google_brand.cc
@@ -90,21 +90,22 @@
   }
 #endif
 
-  const char* const kBrands[] = {
-      "CHCA", "CHCB", "CHCG", "CHCH", "CHCI", "CHCJ", "CHCK", "CHCL",
-      "CHFO", "CHFT", "CHHS", "CHHM", "CHMA", "CHMB", "CHME", "CHMF",
-      "CHMG", "CHMH", "CHMI", "CHMQ", "CHMV", "CHNB", "CHNC", "CHNG",
-      "CHNH", "CHNI", "CHOA", "CHOB", "CHOC", "CHON", "CHOO", "CHOP",
-      "CHOQ", "CHOR", "CHOS", "CHOT", "CHOU", "CHOX", "CHOY", "CHOZ",
-      "CHPD", "CHPE", "CHPF", "CHPG", "ECBA", "ECBB", "ECDA", "ECDB",
-      "ECSA", "ECSB", "ECVA", "ECVB", "ECWA", "ECWB", "ECWC", "ECWD",
-      "ECWE", "ECWF", "EUBB", "EUBC", "GGLA", "GGLS"
-  };
-  const char* const* end = &kBrands[arraysize(kBrands)];
-  const char* const* found = std::find(&kBrands[0], end, brand);
-  if (found != end)
+  const char* const kOrganicBrands[] = {
+      "CHCA", "CHCB", "CHCG", "CHCH", "CHCI", "CHCJ", "CHCK", "CHCL", "CHFO",
+      "CHFT", "CHHS", "CHHM", "CHMA", "CHMB", "CHME", "CHMF", "CHMG", "CHMH",
+      "CHMI", "CHMQ", "CHMV", "CHNB", "CHNC", "CHNG", "CHNH", "CHNI", "CHOA",
+      "CHOB", "CHOC", "CHON", "CHOO", "CHOP", "CHOQ", "CHOR", "CHOS", "CHOT",
+      "CHOU", "CHOX", "CHOY", "CHOZ", "CHPD", "CHPE", "CHPF", "CHPG", "ECBA",
+      "ECBB", "ECDA", "ECDB", "ECSA", "ECSB", "ECVA", "ECVB", "ECWA", "ECWB",
+      "ECWC", "ECWD", "ECWE", "ECWF", "EUBB", "EUBC", "GGLA", "GGLS"};
+  const char* const* end = &kOrganicBrands[arraysize(kOrganicBrands)];
+  if (std::binary_search(&kOrganicBrands[0], end, brand))
     return true;
 
+  // The Chrome enterprise brand code is the only GGR* brand to be non-organic.
+  if (brand == "GGRV")
+    return false;
+
   return base::StartsWith(brand, "EUB", base::CompareCase::SENSITIVE) ||
          base::StartsWith(brand, "EUC", base::CompareCase::SENSITIVE) ||
          base::StartsWith(brand, "GGR", base::CompareCase::SENSITIVE);
diff --git a/chrome/browser/google/google_update_settings_unittest.cc b/chrome/browser/google/google_update_settings_unittest.cc
index 8b3572a..c78235d1 100644
--- a/chrome/browser/google/google_update_settings_unittest.cc
+++ b/chrome/browser/google/google_update_settings_unittest.cc
@@ -50,6 +50,20 @@
 
 #endif  // defined(OS_WIN)
 
+TEST_F(GoogleUpdateTest, IsOrganic) {
+  // Test some brand codes to ensure that future changes to this method won't
+  // go unnoticed.
+
+  // GGRV is non-organic.
+  EXPECT_FALSE(google_brand::IsOrganic("GGRV"));
+
+  // Other GGR* are organic.
+  EXPECT_TRUE(google_brand::IsOrganic("GGRA"));
+
+  // GGLS must always be organic.
+  EXPECT_TRUE(google_brand::IsOrganic("GGLS"));
+}
+
 TEST_F(GoogleUpdateTest, IsOrganicFirstRunBrandCodes) {
   // Test some brand codes to ensure that future changes to this method won't
   // go unnoticed.
diff --git a/chrome/browser/resources/chromeos/keyboard_overlay.js b/chrome/browser/resources/chromeos/keyboard_overlay.js
index 5758dc7..86a3ab0 100644
--- a/chrome/browser/resources/chromeos/keyboard_overlay.js
+++ b/chrome/browser/resources/chromeos/keyboard_overlay.js
@@ -45,9 +45,11 @@
   'disabled': 'DISABLED'
 };
 
+// For KeyboardOverlayUIBrowserTest.
 var KEYCODE_TO_LABEL = {
   8: 'backspace',
   9: 'tab',
+  10: 'shift',
   13: 'enter',
   27: 'esc',
   32: 'space',
@@ -87,6 +89,15 @@
   119: 'mute',
   120: 'vol. down',
   121: 'vol. up',
+  152: 'power',
+  166: 'back',
+  167: 'forward',
+  168: 'reload',
+  173: 'mute',
+  174: 'vol. down',
+  175: 'vol. up',
+  183: 'full screen',
+  182: 'switch window',
   186: ';',
   187: '+',
   188: ',',
@@ -94,10 +105,14 @@
   190: '.',
   191: '/',
   192: '`',
+  216: 'bright down',
+  217: 'bright up',
+  218: 'bright down',
   219: '[',
   220: '\\',
   221: ']',
   222: '\'',
+  232: 'bright up',
 };
 
 /**
diff --git a/chrome/browser/resources/chromeos/keyboard_overlay_data.js b/chrome/browser/resources/chromeos/keyboard_overlay_data.js
index a678be1..352b929 100644
--- a/chrome/browser/resources/chromeos/keyboard_overlay_data.js
+++ b/chrome/browser/resources/chromeos/keyboard_overlay_data.js
@@ -15837,6 +15837,7 @@
     'enter<>CTRL': 'keyboardOverlayAddWwwAndComAndOpenAddress',
     'enter<>SHIFT': 'keyboardOverlayFindPreviousText',
     'esc<>SEARCH': 'keyboardOverlayTaskManager',
+    'esc<>SEARCH<>SHIFT': 'keyboardOverlayUnPin',
     'f<>ALT': 'keyboardOverlayShowWrenchMenu',
     'f<>CTRL': 'keyboardOverlayFindText',
     'f1<>CTRL<>SEARCH': 'keyboardOverlayFocusPreviousPane',
@@ -15867,10 +15868,12 @@
     'full screen<>ALT': 'keyboardOverlaySwapPrimaryMonitor',
     'full screen<>CTRL': 'keyboardOverlayMirrorMonitors',
     'full screen<>SEARCH': 'keyboardOverlayF4',
+    'full screen<>SHIFT': 'keyboardOverlayFullScreenKeyLabel',
     'g<>CTRL': 'keyboardOverlayFindTextAgain',
     'g<>CTRL<>SHIFT': 'keyboardOverlayFindPreviousText',
     'h<>CTRL': 'keyboardOverlayHistory',
     'h<>SEARCH<>SHIFT': 'keyboardOverlayToggleHighContrastMode',
+    'i<>ALT<>CTRL': 'keyboardOverlayTouchHudModeChange',
     'i<>ALT<>SHIFT': 'keyboardOverlayReportIssue',
     'i<>CTRL<>SHIFT': 'keyboardOverlayDeveloperTools',
     'j<>CTRL': 'keyboardOverlayDownloads',
@@ -15894,10 +15897,12 @@
     'o<>CTRL<>SHIFT': 'keyboardOverlayBookmarkManager',
     'p<>ALT<>CTRL': 'keyboardOverlayToggleProjectionTouchHud',
     'p<>CTRL': 'keyboardOverlayPrint',
+    'p<>ALT<>SHIFT': 'keyboardOverlayShowStylusTools',
     'power': 'keyboardOverlayLockScreenOrPowerOff',
     'q<>CTRL<>SHIFT': 'keyboardOverlaySignOut',
     'r<>CTRL': 'keyboardOverlayReloadCurrentPage',
     'r<>CTRL<>SHIFT': 'keyboardOverlayReloadBypassingCache',
+    'reload<>ALT<>CTRL<>SHIFT': 'keyboardOverlayRotateWindow',
     'reload<>CTRL<>SHIFT': 'keyboardOverlayRotateScreen',
     'reload<>SEARCH': 'keyboardOverlayF3',
     'right<>ALT': 'keyboardOverlayGoForward',
diff --git a/chrome/browser/resources/chromeos/login/encryption_migration.html b/chrome/browser/resources/chromeos/login/encryption_migration.html
index b1d5d84..24b4951 100644
--- a/chrome/browser/resources/chromeos/login/encryption_migration.html
+++ b/chrome/browser/resources/chromeos/login/encryption_migration.html
@@ -25,12 +25,21 @@
             String TBD.
           </div>
         </div>
-        <div class="bottom-buttons flex layout horizontal">
-          <div class="flex"></div>
-          <oobe-text-button on-tap="onSkip_">Skip</oobe-text-button>
-          <oobe-text-button inverse on-tap="onUpgrade_">Upgrade
-          </oobe-text-button>
-        </div>
+        <template is="dom-if" if="[[!isEnoughBattery]]">
+          <div class="footer flex layout vertical">
+            <div>Battery too low for update. <span>[[batteryPercent]]</span>%
+            </div>
+            <div>Please plug your Chromebook into a power source.</div>
+          </div>
+        </template>
+        <template is="dom-if" if="[[!isResuming]]">
+          <div class="bottom-buttons flex layout horizontal">
+            <div class="flex"></div>
+            <oobe-text-button on-tap="onSkip_">Skip</oobe-text-button>
+            <oobe-text-button inverse on-tap="onUpgrade_"
+                disabled="[[isMigrationAccepted]]">Upgrade</oobe-text-button>
+          </div>
+        </template>
       </oobe-dialog>
     </template>
     <template is="dom-if" if="[[isMigrating_(uiState)]]">
diff --git a/chrome/browser/resources/chromeos/login/encryption_migration.js b/chrome/browser/resources/chromeos/login/encryption_migration.js
index f78d68b8..494176a 100644
--- a/chrome/browser/resources/chromeos/login/encryption_migration.js
+++ b/chrome/browser/resources/chromeos/login/encryption_migration.js
@@ -50,6 +50,30 @@
       type: Boolean,
       value: false
     },
+
+    /**
+     * Battery level.
+     */
+    batteryPercent: {
+      type: Number,
+      value: 0
+    },
+
+    /**
+     * True if the battery level is enough to start migration.
+     */
+    isEnoughBattery: {
+      type: Boolean,
+      value: true
+    },
+
+    /**
+     * True if the user already accepted the migration.
+     */
+    isMigrationAccepted: {
+      type: Boolean,
+      value: false
+    },
   },
 
   /**
@@ -120,6 +144,7 @@
    * @private
    */
   onUpgrade_: function() {
+    this.isMigrationAccepted = true;
     this.fire('upgrade');
   },
 
diff --git a/chrome/browser/resources/chromeos/login/screen_encryption_migration.js b/chrome/browser/resources/chromeos/login/screen_encryption_migration.js
index ca8cc6d0..200ede4 100644
--- a/chrome/browser/resources/chromeos/login/screen_encryption_migration.js
+++ b/chrome/browser/resources/chromeos/login/screen_encryption_migration.js
@@ -9,6 +9,7 @@
       'setUIState',
       'setMigrationProgress',
       'setIsResuming',
+      'setBatteryPercent',
     ],
 
     /**
@@ -67,5 +68,16 @@
     setIsResuming: function(isResuming) {
       $('encryption-migration-element').isResuming = isResuming;
     },
+
+    /**
+     * Updates battery level of the device.
+     * @param {number} batteryPercent Battery level in percent.
+     * @param {boolean} isEnoughBattery True if the battery is enough.
+     */
+    setBatteryPercent: function(batteryPercent, isEnoughBattery) {
+      $('encryption-migration-element').batteryPercent =
+          Math.floor(batteryPercent);
+      $('encryption-migration-element').isEnoughBattery = isEnoughBattery;
+    },
   };
 });
diff --git a/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.html b/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.html
index 2174134..8f36235 100644
--- a/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.html
+++ b/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.html
@@ -20,11 +20,11 @@
       <neon-animatable route-path="default">
         <div id="bluetoothDevices"
             class="settings-box two-line" actionable on-tap="onTap_">
-          <iron-icon icon="[[getIcon_(bluetoothEnabled_)]]"></iron-icon>
+          <iron-icon icon="[[getIcon_(bluetoothToggleState_)]]"></iron-icon>
           <div class="middle">
             $i18n{bluetoothPageTitle}
             <div class="secondary" id="bluetoothSecondary">
-              [[getOnOffString_(bluetoothEnabled_,
+              [[getOnOffString_(bluetoothToggleState_,
               '$i18nPolymer{deviceOn}', '$i18nPolymer{deviceOff}')]]
             </div>
           </div>
@@ -41,8 +41,8 @@
           </template>
           <div class="secondary-action">
             <paper-toggle-button id="enableBluetooth"
-                checked="{{bluetoothEnabled_}}"
-                disabled="[[!adapterState_.available]]" on-tap="stopTap_"
+                checked="{{bluetoothToggleState_}}"
+                disabled$="[[bluetoothToggleDisabled_]]" on-tap="stopTap_"
                 aria-label="$i18n{bluetoothToggleA11yLabel}">
             </paper-toggle-button>
           </div>
@@ -54,7 +54,8 @@
             page-title="$i18n{bluetoothPageTitle}">
           <settings-bluetooth-subpage 
               adapter-state="[[adapterState_]]"
-              bluetooth-enabled="{{bluetoothEnabled_}}"
+              bluetooth-toggle-state="{{bluetoothToggleState_}}"
+              bluetooth-toggle-disabled="[[bluetoothToggleDisabled_]]"
               bluetooth="[[bluetooth]]"
               bluetooth-private="[[bluetoothPrivate]]">
           </settings-bluetooth-subpage>
diff --git a/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.js b/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.js
index e23ed90..6510e547 100644
--- a/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.js
+++ b/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.js
@@ -32,11 +32,27 @@
       notify: true,
     },
 
-    /** @private */
-    bluetoothEnabled_: {
+    /**
+     * Reflects the current state of the toggle buttons (in this page and the
+     * subpage). This will be set when the adapter state change or when the user
+     * changes the toggle.
+     * @private
+     */
+    bluetoothToggleState_: {
       type: Boolean,
-      observer: 'bluetoothEnabledChanged_',
-      notify: true,
+      observer: 'bluetoothToggleStateChanged_',
+    },
+
+    /**
+     * Set to true before the adapter state is received, when the adapter is
+     * unavailable, and while an adapter state change is requested. This
+     * prevents user changes while a change is in progress or when the adapter
+     * is not available.
+     * @private
+     */
+    bluetoothToggleDisabled_: {
+      type: Boolean,
+      value: true,
     },
 
     /**
@@ -111,7 +127,7 @@
    * @private
    */
   getIcon_: function() {
-    if (!this.bluetoothEnabled_)
+    if (!this.bluetoothToggleState_)
       return 'settings:bluetooth-disabled';
     return 'settings:bluetooth';
   },
@@ -134,15 +150,16 @@
    */
   onBluetoothAdapterStateChanged_: function(state) {
     this.adapterState_ = state;
-    this.bluetoothEnabled_ = state.powered;
+    this.bluetoothToggleState_ = state.powered;
+    this.bluetoothToggleDisabled_ = !state.available;
   },
 
   /** @private */
   onTap_: function() {
     if (this.adapterState_.available === false)
       return;
-    if (!this.bluetoothEnabled_)
-      this.bluetoothEnabled_ = true;
+    if (!this.bluetoothToggleState_)
+      this.bluetoothToggleState_ = true;
     else
       this.openSubpage_();
   },
@@ -165,9 +182,14 @@
   },
 
   /** @private */
-  bluetoothEnabledChanged_: function() {
+  bluetoothToggleStateChanged_: function() {
+    if (!this.adapterState_ || this.bluetoothToggleDisabled_ ||
+        this.bluetoothToggleState_ == this.adapterState_.powered) {
+      return;
+    }
+    this.bluetoothToggleDisabled_ = true;
     this.bluetoothPrivate.setAdapterState(
-        {powered: this.bluetoothEnabled_}, function() {
+        {powered: this.bluetoothToggleState_}, function() {
           if (chrome.runtime.lastError) {
             console.error(
                 'Error enabling bluetooth: ' +
diff --git a/chrome/browser/resources/settings/bluetooth_page/bluetooth_subpage.html b/chrome/browser/resources/settings/bluetooth_page/bluetooth_subpage.html
index b3c703c..531b3cc2 100644
--- a/chrome/browser/resources/settings/bluetooth_page/bluetooth_subpage.html
+++ b/chrome/browser/resources/settings/bluetooth_page/bluetooth_subpage.html
@@ -34,26 +34,28 @@
     </style>
 
     <div class="settings-box first">
-      <div id="onoff" class="start" on$="[[bluetoothEnabled]]">
-        [[getOnOffString_(bluetoothEnabled,
+      <div id="onoff" class="start" on$="[[bluetoothToggleState]]">
+        [[getOnOffString_(bluetoothToggleState,
           '$i18nPolymer{deviceOn}', '$i18nPolymer{deviceOff}')]]
       </div>
-      <paper-toggle-button id="enableBluetooth" checked="{{bluetoothEnabled}}"
+      <paper-toggle-button id="enableBluetooth"
+          checked="{{bluetoothToggleState}}"
+          disabled$="[[bluetoothToggleDisabled]]"
           aria-label="$i18n{bluetoothToggleA11yLabel}">
       </paper-toggle-button>
     </div>
 
     <!-- Paired device list -->
-    <div class="settings-box first header" hidden$="[[!bluetoothEnabled]]">
+    <div class="settings-box first header" hidden="[[!bluetoothToggleState]]">
       <div class="start">$i18n{bluetoothDeviceListPaired}</div>
     </div>
     <div id="noPairedDevices" class="list-frame"
-        hidden$="[[!showNoDevices_(bluetoothEnabled, pairedDeviceList_)]]">
+        hidden="[[!showNoDevices_(bluetoothToggleState, pairedDeviceList_)]]">
       $i18n{bluetoothNoDevices}
     </div>
     <div id="pairedContainer" class="container layout vertical"
         scrollable on-device-event="onDeviceEvent_"
-        hidden="[[!showDevices_(bluetoothEnabled, pairedDeviceList_)]]">
+        hidden="[[!showDevices_(bluetoothToggleState, pairedDeviceList_)]]">
       <iron-list id="pairedDevices" class="vertical-list"
           items="[[pairedDeviceList_]]"
           selection-enabled selected-item="{{selectedPairedItem_}}"
@@ -67,18 +69,18 @@
     </div>
 
     <!-- Unpaired device list -->
-    <div class="settings-box first header" hidden$="[[!bluetoothEnabled]]">
+    <div class="settings-box first header" hidden="[[!bluetoothToggleState]]">
       <div class="start">$i18n{bluetoothDeviceListUnpaired}</div>
       <paper-spinner active="[[showSpinner_]]">
       </paper-spinner>
     </div>
     <div id="noUnpairedDevices" class="list-frame"
-        hidden$="[[!showNoDevices_(bluetoothEnabled, unpairedDeviceList_)]]">
+        hidden="[[!showNoDevices_(bluetoothToggleState, unpairedDeviceList_)]]">
       $i18n{bluetoothNoDevicesFound}
     </div>
     <div id="unpairedContainer" class="container layout vertical"
         scrollable on-device-event="onDeviceEvent_"
-        hidden="[[!showDevices_(bluetoothEnabled, unpairedDeviceList_)]]">
+        hidden="[[!showDevices_(bluetoothToggleState, unpairedDeviceList_)]]">
       <iron-list id="unpairedDevices" class="vertical-list"
           items="[[unpairedDeviceList_]]"
           selection-enabled selected-item="{{selectedUnpairedItem_}}"
diff --git a/chrome/browser/resources/settings/bluetooth_page/bluetooth_subpage.js b/chrome/browser/resources/settings/bluetooth_page/bluetooth_subpage.js
index bbff7a4..686d001 100644
--- a/chrome/browser/resources/settings/bluetooth_page/bluetooth_subpage.js
+++ b/chrome/browser/resources/settings/bluetooth_page/bluetooth_subpage.js
@@ -22,11 +22,14 @@
 
   properties: {
     /** Reflects the bluetooth-page property. */
-    bluetoothEnabled: {
+    bluetoothToggleState: {
       type: Boolean,
       notify: true,
     },
 
+    /** Reflects the bluetooth-page property. */
+    bluetoothToggleDisabled: Boolean,
+
     /**
      * The bluetooth adapter state, cached by bluetooth-page.
      * @type {!chrome.bluetooth.AdapterState|undefined}
@@ -249,7 +252,7 @@
    * @private
    */
   updateDeviceList_: function() {
-    if (!this.bluetoothEnabled) {
+    if (!this.bluetoothToggleState) {
       this.deviceList_ = [];
       return;
     }
@@ -352,23 +355,23 @@
   },
 
   /**
-   * @param {boolean} bluetoothEnabled
+   * @param {boolean} bluetoothToggleState
    * @param {!Array<!chrome.bluetooth.Device>} deviceList
    * @return {boolean}
    * @private
    */
-  showDevices_: function(bluetoothEnabled, deviceList) {
-    return bluetoothEnabled && deviceList.length > 0;
+  showDevices_: function(bluetoothToggleState, deviceList) {
+    return bluetoothToggleState && deviceList.length > 0;
   },
 
   /**
-   * @param {boolean} bluetoothEnabled
+   * @param {boolean} bluetoothToggleState
    * @param {!Array<!chrome.bluetooth.Device>} deviceList
    * @return {boolean}
    * @private
    */
-  showNoDevices_: function(bluetoothEnabled, deviceList) {
-    return bluetoothEnabled && deviceList.length == 0;
+  showNoDevices_: function(bluetoothToggleState, deviceList) {
+    return bluetoothToggleState && deviceList.length == 0;
   },
 
   /**
diff --git a/chrome/browser/resources/settings/internet_page/internet_detail_page.html b/chrome/browser/resources/settings/internet_page/internet_detail_page.html
index 59baa4bb..77534d9 100644
--- a/chrome/browser/resources/settings/internet_page/internet_detail_page.html
+++ b/chrome/browser/resources/settings/internet_page/internet_detail_page.html
@@ -267,8 +267,7 @@
             </template>
 
             <!-- IP Config, Nameservers -->
-            <template is="dom-if"
-                if="[[isRememberedOrConnected_(networkProperties)]]">
+            <template is="dom-if" if="[[showIpConfig_(networkProperties)]]">
               <network-ip-config editable on-ip-change="onIPConfigChange_"
                   network-properties="[[networkProperties]]">
               </network-ip-config>
diff --git a/chrome/browser/resources/settings/internet_page/internet_detail_page.js b/chrome/browser/resources/settings/internet_page/internet_detail_page.js
index 9b87611..a455416 100644
--- a/chrome/browser/resources/settings/internet_page/internet_detail_page.js
+++ b/chrome/browser/resources/settings/internet_page/internet_detail_page.js
@@ -686,12 +686,13 @@
   },
 
   /**
+   * @param {!CrOnc.NetworkProperties} networkProperties
    * @return {boolean} True if the shared message should be shown.
    * @private
    */
-  showShared_: function() {
-    return this.networkProperties.Source == 'Device' ||
-        this.networkProperties.Source == 'DevicePolicy';
+  showShared_: function(networkProperties) {
+    return networkProperties.Source == 'Device' ||
+        networkProperties.Source == 'DevicePolicy';
   },
 
   /**
@@ -700,7 +701,7 @@
    * @private
    */
   showAutoConnect_: function(networkProperties) {
-    return this.networkProperties.Type != CrOnc.Type.ETHERNET &&
+    return networkProperties.Type != CrOnc.Type.ETHERNET &&
         this.isRemembered_(networkProperties);
   },
 
@@ -881,23 +882,36 @@
 
   /**
    * @param {string} type The network type.
+   * @param {!CrOnc.NetworkProperties} networkProperties
    * @return {boolean} True if the network type matches 'type'.
    * @private
    */
-  isType_: function(type) {
-    return this.networkProperties.Type == type;
+  isType_: function(type, networkProperties) {
+    return networkProperties.Type == type;
   },
 
   /**
-   * @return {boolean} True if the Cellular SIM section should be shown.
+   * @param {!CrOnc.NetworkProperties} networkProperties
+   * @return {boolean}
    * @private
    */
-  showCellularSim_: function() {
-    if (this.networkProperties.Type != 'Cellular' ||
-        !this.networkProperties.Cellular) {
+  showCellularSim_: function(networkProperties) {
+    if (networkProperties.Type != 'Cellular' ||
+        !networkProperties.Cellular) {
       return false;
     }
-    return this.networkProperties.Cellular.Family == 'GSM';
+    return networkProperties.Cellular.Family == 'GSM';
+  },
+
+  /**
+   * @param {!CrOnc.NetworkProperties} networkProperties
+   * @return {boolean}
+   * @private
+   */
+  showIpConfig_: function(networkProperties) {
+    if (!this.isRememberedOrConnected_(networkProperties))
+      return false;
+    return !!networkProperties.IPAddressConfigType;
   },
 
   /**
diff --git a/chrome/browser/resources/settings/internet_page/network_ip_config.js b/chrome/browser/resources/settings/internet_page/network_ip_config.js
index 43f34e18..2d056e6 100644
--- a/chrome/browser/resources/settings/internet_page/network_ip_config.js
+++ b/chrome/browser/resources/settings/internet_page/network_ip_config.js
@@ -35,7 +35,7 @@
      */
     automatic_: {
       type: Boolean,
-      value: false,
+      value: true,
       observer: 'automaticChanged_',
     },
 
@@ -84,49 +84,39 @@
       this.savedStaticIp_ = undefined;
 
     // Update the 'automatic' property.
-    var ipConfigType =
-        CrOnc.getActiveValue(this.networkProperties.IPAddressConfigType);
-    this.automatic_ = (ipConfigType != CrOnc.IPConfigType.STATIC);
+    if (this.networkProperties.IPAddressConfigType ) {
+      var ipConfigType =
+          CrOnc.getActiveValue(this.networkProperties.IPAddressConfigType);
+      this.automatic_ = (ipConfigType != CrOnc.IPConfigType.STATIC);
+    }
 
-    // Update the 'ipConfig' property.
-    var ipv4 =
-        CrOnc.getIPConfigForType(this.networkProperties, CrOnc.IPType.IPV4);
-    var ipv6 =
-        CrOnc.getIPConfigForType(this.networkProperties, CrOnc.IPType.IPV6);
-    this.ipConfig_ = {
-      ipv4: this.getIPConfigUIProperties_(ipv4),
-      ipv6: this.getIPConfigUIProperties_(ipv6)
-    };
+    if (this.networkProperties.IPConfigs) {
+      // Update the 'ipConfig' property.
+      var ipv4 =
+          CrOnc.getIPConfigForType(this.networkProperties, CrOnc.IPType.IPV4);
+      var ipv6 =
+          CrOnc.getIPConfigForType(this.networkProperties, CrOnc.IPType.IPV6);
+      this.ipConfig_ = {
+        ipv4: this.getIPConfigUIProperties_(ipv4),
+        ipv6: this.getIPConfigUIProperties_(ipv6)
+      };
+    }
   },
 
-  /**
-   * Polymer automatic changed method.
-   */
+  /** @private */
   automaticChanged_: function() {
-    if (!this.automatic_ || !this.ipConfig_)
+    if (!this.automatic_ || !this.ipConfig_) {
+      // When switching from automatic, don't send any changes, ip-change will
+      // be fired in onIPChange when a field is changed.
       return;
-    if (this.automatic_ || !this.savedStaticIp_) {
-      // Save the static IP configuration when switching to automatic.
-      this.savedStaticIp_ = this.ipConfig_.ipv4;
-      var configType =
-          this.automatic_ ? CrOnc.IPConfigType.DHCP : CrOnc.IPConfigType.STATIC;
-      this.fire('ip-change', {
-        field: 'IPAddressConfigType',
-        value: configType,
-      });
-    } else {
-      // Restore the saved static IP configuration.
-      var ipconfig = {
-        Gateway: this.savedStaticIp_.Gateway,
-        IPAddress: this.savedStaticIp_.IPAddress,
-        RoutingPrefix: this.savedStaticIp_.RoutingPrefix,
-        Type: this.savedStaticIp_.Type,
-      };
-      this.fire('ip-change', {
-        field: 'StaticIPConfig',
-        value: this.getIPConfigProperties_(ipconfig),
-      });
     }
+    // Save the static IP configuration when switching to automatic.
+    this.savedStaticIp_ = this.ipConfig_.ipv4;
+    // Send the change.
+    this.fire('ip-change', {
+      field: 'IPAddressConfigType',
+      value: CrOnc.IPConfigType.DHCP,
+    });
   },
 
   /**
@@ -203,6 +193,7 @@
     var value = event.detail.value;
     // Note: |field| includes the 'ipv4.' prefix.
     this.set('ipConfig_.' + field, value);
+    // This will also set IPAddressConfigType to STATIC.
     this.fire('ip-change', {
       field: 'StaticIPConfig',
       value: this.getIPConfigProperties_(this.ipConfig_.ipv4)
diff --git a/chrome/browser/safe_browsing/srt_chrome_prompt_impl.cc b/chrome/browser/safe_browsing/srt_chrome_prompt_impl.cc
index 4e60db0..38bb601 100644
--- a/chrome/browser/safe_browsing/srt_chrome_prompt_impl.cc
+++ b/chrome/browser/safe_browsing/srt_chrome_prompt_impl.cc
@@ -10,6 +10,7 @@
 
 using chrome_cleaner::mojom::ChromePrompt;
 using chrome_cleaner::mojom::ChromePromptRequest;
+using chrome_cleaner::mojom::ElevationStatus;
 using chrome_cleaner::mojom::PromptAcceptance;
 using chrome_cleaner::mojom::UwSPtr;
 
@@ -20,7 +21,7 @@
 
 void ChromePromptImpl::PromptUser(
     std::vector<UwSPtr> removable_uws_found,
-    bool elevation_required,
+    ElevationStatus elevation_status,
     const ChromePrompt::PromptUserCallback& callback) {
   // Placeholder. The actual implementation will show the prompt dialog to the
   // user and invoke this callback depending on the user's response.
diff --git a/chrome/browser/safe_browsing/srt_chrome_prompt_impl.h b/chrome/browser/safe_browsing/srt_chrome_prompt_impl.h
index fbba20c..bf14b30 100644
--- a/chrome/browser/safe_browsing/srt_chrome_prompt_impl.h
+++ b/chrome/browser/safe_browsing/srt_chrome_prompt_impl.h
@@ -18,7 +18,7 @@
 
   void PromptUser(
       std::vector<chrome_cleaner::mojom::UwSPtr> removable_uws_found,
-      bool elevation_required,
+      chrome_cleaner::mojom::ElevationStatus elevation_status,
       const chrome_cleaner::mojom::ChromePrompt::PromptUserCallback& callback)
       override;
 
diff --git a/chrome/browser/safe_browsing/srt_fetcher_browsertest_win.cc b/chrome/browser/safe_browsing/srt_fetcher_browsertest_win.cc
index 60053da..3d7336b 100644
--- a/chrome/browser/safe_browsing/srt_fetcher_browsertest_win.cc
+++ b/chrome/browser/safe_browsing/srt_fetcher_browsertest_win.cc
@@ -49,6 +49,7 @@
 
 namespace {
 
+using chrome_cleaner::mojom::ElevationStatus;
 using chrome_cleaner::mojom::PromptAcceptance;
 
 // Special switches passed by the parent process (test case) to the reporter
@@ -136,14 +137,16 @@
     uws->observed_behaviours = chrome_cleaner::mojom::ObservedBehaviours::New();
     removable_uws_found.push_back(std::move(uws));
   }
-  const bool elevation_required =
-      command_line.HasSwitch(kReportElevationRequiredSwitch);
+  const ElevationStatus elevation_status =
+      command_line.HasSwitch(kReportElevationRequiredSwitch)
+          ? ElevationStatus::REQUIRED
+          : ElevationStatus::NOT_REQUIRED;
   const PromptAcceptance expected_prompt_acceptance =
       PromptAcceptanceFromCommandLine(command_line);
 
   (*g_chrome_prompt_ptr)
       ->PromptUser(
-          std::move(removable_uws_found), elevation_required,
+          std::move(removable_uws_found), elevation_status,
           base::Bind(&PromptUserCallback, done, expected_prompt_acceptance,
                      expected_value_received));
 }
@@ -208,20 +211,22 @@
 //  - bool in_browser_cleaner_ui: indicates if InBrowserCleanerUI experiment
 //    is enabled; if so, the parent and the child processes will communicate
 //    via a Mojo IPC;
-//  - bool elevation_required: indicates if the scan results sent by the child
-//    process should consider that elevation will be required for cleanup.
+//  - ElevationStatus elevation_status: indicates if the scan results sent by
+//    the child process should consider that elevation will be required for
+//    cleanup.
 class SRTFetcherTest
     : public InProcessBrowserTest,
       public SwReporterTestingDelegate,
-      public ::testing::WithParamInterface<std::tuple<bool, bool>> {
+      public ::testing::WithParamInterface<std::tuple<bool, ElevationStatus>> {
  public:
   void SetUpInProcessBrowserTestFixture() override {
     SetSwReporterTestingDelegate(this);
 
-    std::tie(in_browser_cleaner_ui_, elevation_required_) = GetParam();
-    // The config should only accept elevation_required_ if InBrowserCleanerUI
+    std::tie(in_browser_cleaner_ui_, elevation_status_) = GetParam();
+    // The config should only accept elevation_status_ if InBrowserCleanerUI
     // feature is enabled.
-    ASSERT_TRUE(!elevation_required_ || in_browser_cleaner_ui_);
+    ASSERT_TRUE(elevation_status_ == ElevationStatus::NOT_REQUIRED ||
+                in_browser_cleaner_ui_);
 
     if (in_browser_cleaner_ui_)
       scoped_feature_list_.InitAndEnableFeature(kInBrowserCleanerUIFeature);
@@ -284,7 +289,7 @@
       AddPromptAcceptanceToCommandLine(PromptAcceptance::DENIED, &command_line);
       if (exit_code_to_report_ == kSwReporterCleanupNeeded) {
         command_line.AppendSwitch(kReportUwSFoundSwitch);
-        if (elevation_required_)
+        if (elevation_status_ == ElevationStatus::REQUIRED)
           command_line.AppendSwitch(kReportElevationRequiredSwitch);
       }
     }
@@ -459,7 +464,7 @@
   scoped_refptr<base::SingleThreadTaskRunner> saved_task_runner_;
 
   bool in_browser_cleaner_ui_;
-  bool elevation_required_;
+  ElevationStatus elevation_status_;
 
   bool prompt_trigger_called_ = false;
   int reporter_launch_count_ = 0;
@@ -794,15 +799,18 @@
   ExpectToRunAgain(kDaysBetweenSuccessfulSwReporterRuns);
 }
 
-INSTANTIATE_TEST_CASE_P(NoInBrowserCleanerUI,
-                        SRTFetcherTest,
-                        testing::Combine(testing::Values(false),
-                                         testing::Values(false)));
+INSTANTIATE_TEST_CASE_P(
+    NoInBrowserCleanerUI,
+    SRTFetcherTest,
+    testing::Combine(testing::Values(false),
+                     testing::Values(ElevationStatus::NOT_REQUIRED)));
 
-INSTANTIATE_TEST_CASE_P(InBrowserCleanerUI,
-                        SRTFetcherTest,
-                        testing::Combine(testing::Values(true),
-                                         testing::Bool()));
+INSTANTIATE_TEST_CASE_P(
+    InBrowserCleanerUI,
+    SRTFetcherTest,
+    testing::Combine(testing::Values(true),
+                     testing::Values(ElevationStatus::NOT_REQUIRED,
+                                     ElevationStatus::REQUIRED)));
 
 // This provide tests which allows explicit invocation of the SRT Prompt
 // useful for checking dialog layout or any other interactive functionality
diff --git a/chrome/browser/ui/webui/chromeos/keyboard_overlay_ui.cc b/chrome/browser/ui/webui/chromeos/keyboard_overlay_ui.cc
index c578db1..ae29d008 100644
--- a/chrome/browser/ui/webui/chromeos/keyboard_overlay_ui.cc
+++ b/chrome/browser/ui/webui/chromeos/keyboard_overlay_ui.cc
@@ -67,214 +67,216 @@
   const char* i18n_content;
   int message;
 } kI18nContentToMessage[] = {
-  { "keyboardOverlayLearnMore", IDS_KEYBOARD_OVERLAY_LEARN_MORE },
-  { "keyboardOverlayTitle", IDS_KEYBOARD_OVERLAY_TITLE },
-  { "keyboardOverlayEscKeyLabel", IDS_KEYBOARD_OVERLAY_ESC_KEY_LABEL },
-  { "keyboardOverlayBackKeyLabel", IDS_KEYBOARD_OVERLAY_BACK_KEY_LABEL },
-  { "keyboardOverlayForwardKeyLabel", IDS_KEYBOARD_OVERLAY_FORWARD_KEY_LABEL },
-  { "keyboardOverlayReloadKeyLabel", IDS_KEYBOARD_OVERLAY_RELOAD_KEY_LABEL },
-  { "keyboardOverlayFullScreenKeyLabel",
-      IDS_KEYBOARD_OVERLAY_FULL_SCREEN_KEY_LABEL },
-  { "keyboardOverlaySwitchWinKeyLabel",
-      IDS_KEYBOARD_OVERLAY_SWITCH_WIN_KEY_LABEL },
-  { "keyboardOverlayBrightDownKeyLabel",
-      IDS_KEYBOARD_OVERLAY_BRIGHT_DOWN_KEY_LABEL },
-  { "keyboardOverlayBrightUpKeyLabel",
-      IDS_KEYBOARD_OVERLAY_BRIGHT_UP_KEY_LABEL },
-  { "keyboardOverlayMuteKeyLabel", IDS_KEYBOARD_OVERLAY_MUTE_KEY_LABEL },
-  { "keyboardOverlayVolDownKeyLabel", IDS_KEYBOARD_OVERLAY_VOL_DOWN_KEY_LABEL },
-  { "keyboardOverlayVolUpKeyLabel", IDS_KEYBOARD_OVERLAY_VOL_UP_KEY_LABEL },
-  { "keyboardOverlayPowerKeyLabel", IDS_KEYBOARD_OVERLAY_POWER_KEY_LABEL },
-  { "keyboardOverlayBackspaceKeyLabel",
-      IDS_KEYBOARD_OVERLAY_BACKSPACE_KEY_LABEL },
-  { "keyboardOverlayTabKeyLabel", IDS_KEYBOARD_OVERLAY_TAB_KEY_LABEL },
-  { "keyboardOverlaySearchKeyLabel", IDS_KEYBOARD_OVERLAY_SEARCH_KEY_LABEL },
-  { "keyboardOverlayEnterKeyLabel", IDS_KEYBOARD_OVERLAY_ENTER_KEY_LABEL },
-  { "keyboardOverlayShiftKeyLabel", IDS_KEYBOARD_OVERLAY_SHIFT_KEY_LABEL },
-  { "keyboardOverlayCtrlKeyLabel", IDS_KEYBOARD_OVERLAY_CTRL_KEY_LABEL },
-  { "keyboardOverlayAltKeyLabel", IDS_KEYBOARD_OVERLAY_ALT_KEY_LABEL },
-  { "keyboardOverlayLeftKeyLabel", IDS_KEYBOARD_OVERLAY_LEFT_KEY_LABEL },
-  { "keyboardOverlayRightKeyLabel", IDS_KEYBOARD_OVERLAY_RIGHT_KEY_LABEL },
-  { "keyboardOverlayUpKeyLabel", IDS_KEYBOARD_OVERLAY_UP_KEY_LABEL },
-  { "keyboardOverlayDownKeyLabel", IDS_KEYBOARD_OVERLAY_DOWN_KEY_LABEL },
-  { "keyboardOverlayInstructions", IDS_KEYBOARD_OVERLAY_INSTRUCTIONS },
-  { "keyboardOverlayInstructionsHide", IDS_KEYBOARD_OVERLAY_INSTRUCTIONS_HIDE },
-  { "keyboardOverlayActivateLastShelfItem",
-    IDS_KEYBOARD_OVERLAY_ACTIVATE_LAST_SHELF_ITEM },
-  { "keyboardOverlayActivateLastTab", IDS_KEYBOARD_OVERLAY_ACTIVATE_LAST_TAB },
-  { "keyboardOverlayActivateShelfItem1",
-    IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_1 },
-  { "keyboardOverlayActivateShelfItem2",
-    IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_2 },
-  { "keyboardOverlayActivateShelfItem3",
-    IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_3 },
-  { "keyboardOverlayActivateShelfItem4",
-    IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_4 },
-  { "keyboardOverlayActivateShelfItem5",
-    IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_5 },
-  { "keyboardOverlayActivateShelfItem6",
-    IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_6 },
-  { "keyboardOverlayActivateShelfItem7",
-    IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_7 },
-  { "keyboardOverlayActivateShelfItem8",
-    IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_8 },
-  { "keyboardOverlayActivateNextTab", IDS_KEYBOARD_OVERLAY_ACTIVATE_NEXT_TAB },
-  { "keyboardOverlayActivatePreviousTab",
-    IDS_KEYBOARD_OVERLAY_ACTIVATE_PREVIOUS_TAB },
-  { "keyboardOverlayActivateTab1", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_1 },
-  { "keyboardOverlayActivateTab2", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_2 },
-  { "keyboardOverlayActivateTab3", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_3 },
-  { "keyboardOverlayActivateTab4", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_4 },
-  { "keyboardOverlayActivateTab5", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_5 },
-  { "keyboardOverlayActivateTab6", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_6 },
-  { "keyboardOverlayActivateTab7", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_7 },
-  { "keyboardOverlayActivateTab8", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_8 },
-  { "keyboardOverlayAddWwwAndComAndOpenAddress",
-    IDS_KEYBOARD_OVERLAY_ADD_WWW_AND_COM_AND_OPEN_ADDRESS },
-  { "keyboardOverlayBookmarkAllTabs", IDS_KEYBOARD_OVERLAY_BOOKMARK_ALL_TABS },
-  { "keyboardOverlayBookmarkCurrentPage",
-    IDS_KEYBOARD_OVERLAY_BOOKMARK_CURRENT_PAGE },
-  { "keyboardOverlayBookmarkManager", IDS_KEYBOARD_OVERLAY_BOOKMARK_MANAGER },
-  { "keyboardOverlayCenterWindow", IDS_KEYBOARD_OVERLAY_CENTER_WINDOW },
-  { "keyboardOverlayClearBrowsingDataDialog",
-    IDS_KEYBOARD_OVERLAY_CLEAR_BROWSING_DATA_DIALOG },
-  { "keyboardOverlayCloseTab", IDS_KEYBOARD_OVERLAY_CLOSE_TAB },
-  { "keyboardOverlayCloseWindow", IDS_KEYBOARD_OVERLAY_CLOSE_WINDOW },
-  { "keyboardOverlayContextMenu", IDS_KEYBOARD_OVERLAY_CONTEXT_MENU },
-  { "keyboardOverlayCopy", IDS_KEYBOARD_OVERLAY_COPY },
-  { "keyboardOverlayCut", IDS_KEYBOARD_OVERLAY_CUT },
-  { "keyboardOverlayCycleThroughInputMethods",
-    IDS_KEYBOARD_OVERLAY_CYCLE_THROUGH_INPUT_METHODS },
-  { "keyboardOverlayDecreaseKeyBrightness",
-    IDS_KEYBOARD_OVERLAY_DECREASE_KEY_BRIGHTNESS },
-  { "keyboardOverlayDelete", IDS_KEYBOARD_OVERLAY_DELETE },
-  { "keyboardOverlayDeleteWord", IDS_KEYBOARD_OVERLAY_DELETE_WORD },
-  { "keyboardOverlayDeveloperTools", IDS_KEYBOARD_OVERLAY_DEVELOPER_TOOLS },
-  { "keyboardOverlayDockWindowLeft", IDS_KEYBOARD_OVERLAY_DOCK_WINDOW_LEFT },
-  { "keyboardOverlayDockWindowRight", IDS_KEYBOARD_OVERLAY_DOCK_WINDOW_RIGHT },
-  { "keyboardOverlayDomInspector", IDS_KEYBOARD_OVERLAY_DOM_INSPECTOR },
-  { "keyboardOverlayDownloads", IDS_KEYBOARD_OVERLAY_DOWNLOADS },
-  { "keyboardOverlayEnd", IDS_KEYBOARD_OVERLAY_END },
-  { "keyboardOverlayF1", IDS_KEYBOARD_OVERLAY_F1 },
-  { "keyboardOverlayF10", IDS_KEYBOARD_OVERLAY_F10 },
-  { "keyboardOverlayF11", IDS_KEYBOARD_OVERLAY_F11 },
-  { "keyboardOverlayF12", IDS_KEYBOARD_OVERLAY_F12 },
-  { "keyboardOverlayF2", IDS_KEYBOARD_OVERLAY_F2 },
-  { "keyboardOverlayF3", IDS_KEYBOARD_OVERLAY_F3 },
-  { "keyboardOverlayF4", IDS_KEYBOARD_OVERLAY_F4 },
-  { "keyboardOverlayF5", IDS_KEYBOARD_OVERLAY_F5 },
-  { "keyboardOverlayF6", IDS_KEYBOARD_OVERLAY_F6 },
-  { "keyboardOverlayF7", IDS_KEYBOARD_OVERLAY_F7 },
-  { "keyboardOverlayF8", IDS_KEYBOARD_OVERLAY_F8 },
-  { "keyboardOverlayF9", IDS_KEYBOARD_OVERLAY_F9 },
-  { "keyboardOverlayFindPreviousText",
-    IDS_KEYBOARD_OVERLAY_FIND_PREVIOUS_TEXT },
-  { "keyboardOverlayFindText", IDS_KEYBOARD_OVERLAY_FIND_TEXT },
-  { "keyboardOverlayFindTextAgain", IDS_KEYBOARD_OVERLAY_FIND_TEXT_AGAIN },
-  { "keyboardOverlayFocusAddressBar", IDS_KEYBOARD_OVERLAY_FOCUS_ADDRESS_BAR },
-  { "keyboardOverlayFocusAddressBarInSearchMode",
-    IDS_KEYBOARD_OVERLAY_FOCUS_ADDRESS_BAR_IN_SEARCH_MODE },
-  { "keyboardOverlayFocusBookmarks", IDS_KEYBOARD_OVERLAY_FOCUS_BOOKMARKS },
-  { "keyboardOverlayFocusShelf", IDS_KEYBOARD_OVERLAY_FOCUS_SHELF },
-  { "keyboardOverlayFocusNextPane", IDS_KEYBOARD_OVERLAY_FOCUS_NEXT_PANE },
-  { "keyboardOverlayFocusPreviousPane",
-    IDS_KEYBOARD_OVERLAY_FOCUS_PREVIOUS_PANE },
-  { "keyboardOverlayFocusToolbar", IDS_KEYBOARD_OVERLAY_FOCUS_TOOLBAR },
-  { "keyboardOverlayGoBack", IDS_KEYBOARD_OVERLAY_GO_BACK },
-  { "keyboardOverlayGoForward", IDS_KEYBOARD_OVERLAY_GO_FORWARD },
-  { "keyboardOverlayHelp", IDS_KEYBOARD_OVERLAY_HELP },
-  { "keyboardOverlayHistory", IDS_KEYBOARD_OVERLAY_HISTORY },
-  { "keyboardOverlayHome", IDS_KEYBOARD_OVERLAY_HOME },
-  { "keyboardOverlayIncreaseKeyBrightness",
-    IDS_KEYBOARD_OVERLAY_INCREASE_KEY_BRIGHTNESS },
-  { "keyboardOverlayInputUnicodeCharacters",
-    IDS_KEYBOARD_OVERLAY_INPUT_UNICODE_CHARACTERS },
-  { "keyboardOverlayInsert", IDS_KEYBOARD_OVERLAY_INSERT },
-  { "keyboardOverlayJavascriptConsole",
-    IDS_KEYBOARD_OVERLAY_JAVASCRIPT_CONSOLE },
-  { "keyboardOverlayLockScreen", IDS_KEYBOARD_OVERLAY_LOCK_SCREEN },
-  { "keyboardOverlayLockScreenOrPowerOff",
-    IDS_KEYBOARD_OVERLAY_LOCK_SCREEN_OR_POWER_OFF },
-  { "keyboardOverlayMagnifierDecreaseZoom",
-    IDS_KEYBOARD_OVERLAY_MAGNIFIER_DECREASE_ZOOM },
-  { "keyboardOverlayMagnifierIncreaseZoom",
-    IDS_KEYBOARD_OVERLAY_MAGNIFIER_INCREASE_ZOOM },
-  { "keyboardOverlayMaximizeWindow", IDS_KEYBOARD_OVERLAY_MAXIMIZE_WINDOW },
-  { "keyboardOverlayMinimizeWindow", IDS_KEYBOARD_OVERLAY_MINIMIZE_WINDOW },
-  { "keyboardOverlayMirrorMonitors", IDS_KEYBOARD_OVERLAY_MIRROR_MONITORS },
-  { "keyboardOverlayNewIncognitoWindow",
-    IDS_KEYBOARD_OVERLAY_NEW_INCOGNITO_WINDOW },
-  { "keyboardOverlayNewTab", IDS_KEYBOARD_OVERLAY_NEW_TAB },
-  { "keyboardOverlayNewTerminal", IDS_KEYBOARD_OVERLAY_NEW_TERMINAL },
-  { "keyboardOverlayNewWindow", IDS_KEYBOARD_OVERLAY_NEW_WINDOW },
-  { "keyboardOverlayNextUser", IDS_KEYBOARD_OVERLAY_NEXT_USER },
-  { "keyboardOverlayNextWindow", IDS_KEYBOARD_OVERLAY_NEXT_WINDOW },
-  { "keyboardOverlayNextWord", IDS_KEYBOARD_OVERLAY_NEXT_WORD },
-  { "keyboardOverlayOpen", IDS_KEYBOARD_OVERLAY_OPEN },
-  { "keyboardOverlayOpenAddressInNewTab",
-    IDS_KEYBOARD_OVERLAY_OPEN_ADDRESS_IN_NEW_TAB },
-  { "keyboardOverlayOpenFileManager", IDS_KEYBOARD_OVERLAY_OPEN_FILE_MANAGER },
-  { "keyboardOverlayPageDown", IDS_KEYBOARD_OVERLAY_PAGE_DOWN },
-  { "keyboardOverlayPageUp", IDS_KEYBOARD_OVERLAY_PAGE_UP },
-  { "keyboardOverlayPaste", IDS_KEYBOARD_OVERLAY_PASTE },
-  { "keyboardOverlayPasteAsPlainText",
-    IDS_KEYBOARD_OVERLAY_PASTE_AS_PLAIN_TEXT },
-  { "keyboardOverlayPreviousUser", IDS_KEYBOARD_OVERLAY_PREVIOUS_USER },
-  { "keyboardOverlayPreviousWindow", IDS_KEYBOARD_OVERLAY_PREVIOUS_WINDOW },
-  { "keyboardOverlayPreviousWord", IDS_KEYBOARD_OVERLAY_PREVIOUS_WORD },
-  { "keyboardOverlayPrint", IDS_KEYBOARD_OVERLAY_PRINT },
-  { "keyboardOverlayReloadCurrentPage",
-    IDS_KEYBOARD_OVERLAY_RELOAD_CURRENT_PAGE },
-  { "keyboardOverlayReloadBypassingCache",
-    IDS_KEYBOARD_OVERLAY_RELOAD_BYPASSING_CACHE },
-  { "keyboardOverlayReopenLastClosedTab",
-    IDS_KEYBOARD_OVERLAY_REOPEN_LAST_CLOSED_TAB },
-  { "keyboardOverlayReportIssue", IDS_KEYBOARD_OVERLAY_REPORT_ISSUE },
-  { "keyboardOverlayResetScreenZoom", IDS_KEYBOARD_OVERLAY_RESET_SCREEN_ZOOM },
-  { "keyboardOverlayResetZoom", IDS_KEYBOARD_OVERLAY_RESET_ZOOM },
-  { "keyboardOverlayRotateScreen", IDS_KEYBOARD_OVERLAY_ROTATE_SCREEN },
-  { "keyboardOverlaySave", IDS_KEYBOARD_OVERLAY_SAVE },
-  { "keyboardOverlayScreenshotRegion",
-    IDS_KEYBOARD_OVERLAY_SCREENSHOT_REGION },
-  { "keyboardOverlayScreenshotWindow",
-    IDS_KEYBOARD_OVERLAY_SCREENSHOT_WINDOW },
-  { "keyboardOverlayScrollUpOnePage",
-    IDS_KEYBOARD_OVERLAY_SCROLL_UP_ONE_PAGE },
-  { "keyboardOverlaySelectAll", IDS_KEYBOARD_OVERLAY_SELECT_ALL },
-  { "keyboardOverlaySelectPreviousInputMethod",
-    IDS_KEYBOARD_OVERLAY_SELECT_PREVIOUS_INPUT_METHOD },
-  { "keyboardOverlaySelectWordAtATime",
-    IDS_KEYBOARD_OVERLAY_SELECT_WORD_AT_A_TIME },
-  { "keyboardOverlayShowImeBubble", IDS_KEYBOARD_OVERLAY_SHOW_IME_BUBBLE },
-  { "keyboardOverlayShowMessageCenter",
-    IDS_KEYBOARD_OVERLAY_SHOW_MESSAGE_CENTER },
-  { "keyboardOverlayShowStatusMenu", IDS_KEYBOARD_OVERLAY_SHOW_STATUS_MENU },
-  { "keyboardOverlayShowWrenchMenu", IDS_KEYBOARD_OVERLAY_SHOW_WRENCH_MENU },
-  { "keyboardOverlaySignOut", IDS_KEYBOARD_OVERLAY_SIGN_OUT },
-  { "keyboardOverlaySuspend", IDS_KEYBOARD_OVERLAY_SUSPEND },
-  { "keyboardOverlaySwapPrimaryMonitor",
-    IDS_KEYBOARD_OVERLAY_SWAP_PRIMARY_MONITOR },
-  { "keyboardOverlayTakeScreenshot", IDS_KEYBOARD_OVERLAY_TAKE_SCREENSHOT },
-  { "keyboardOverlayTaskManager", IDS_KEYBOARD_OVERLAY_TASK_MANAGER },
-  { "keyboardOverlayToggleBookmarkBar",
-    IDS_KEYBOARD_OVERLAY_TOGGLE_BOOKMARK_BAR },
-  { "keyboardOverlayToggleCapsLock", IDS_KEYBOARD_OVERLAY_TOGGLE_CAPS_LOCK },
-  { "keyboardOverlayDisableCapsLock", IDS_KEYBOARD_OVERLAY_DISABLE_CAPS_LOCK },
-  { "keyboardOverlayToggleChromevoxSpokenFeedback",
-    IDS_KEYBOARD_OVERLAY_TOGGLE_CHROMEVOX_SPOKEN_FEEDBACK },
-  { "keyboardOverlayToggleHighContrastMode",
-    IDS_KEYBOARD_OVERLAY_TOGGLE_HIGH_CONTRAST_MODE },
-  { "keyboardOverlayToggleProjectionTouchHud",
-    IDS_KEYBOARD_OVERLAY_TOGGLE_PROJECTION_TOUCH_HUD },
-  { "keyboardOverlayUndo", IDS_KEYBOARD_OVERLAY_UNDO },
-  { "keyboardOverlayViewKeyboardOverlay",
-    IDS_KEYBOARD_OVERLAY_VIEW_KEYBOARD_OVERLAY },
-  { "keyboardOverlayViewSource", IDS_KEYBOARD_OVERLAY_VIEW_SOURCE },
-  { "keyboardOverlayWordMove", IDS_KEYBOARD_OVERLAY_WORD_MOVE },
-  { "keyboardOverlayZoomIn", IDS_KEYBOARD_OVERLAY_ZOOM_IN },
-  { "keyboardOverlayZoomOut", IDS_KEYBOARD_OVERLAY_ZOOM_OUT },
-  { "keyboardOverlayZoomScreenIn", IDS_KEYBOARD_OVERLAY_ZOOM_SCREEN_IN },
-  { "keyboardOverlayZoomScreenOut", IDS_KEYBOARD_OVERLAY_ZOOM_SCREEN_OUT },
+    {"keyboardOverlayLearnMore", IDS_KEYBOARD_OVERLAY_LEARN_MORE},
+    {"keyboardOverlayTitle", IDS_KEYBOARD_OVERLAY_TITLE},
+    {"keyboardOverlayEscKeyLabel", IDS_KEYBOARD_OVERLAY_ESC_KEY_LABEL},
+    {"keyboardOverlayBackKeyLabel", IDS_KEYBOARD_OVERLAY_BACK_KEY_LABEL},
+    {"keyboardOverlayForwardKeyLabel", IDS_KEYBOARD_OVERLAY_FORWARD_KEY_LABEL},
+    {"keyboardOverlayReloadKeyLabel", IDS_KEYBOARD_OVERLAY_RELOAD_KEY_LABEL},
+    {"keyboardOverlayFullScreenKeyLabel",
+     IDS_KEYBOARD_OVERLAY_FULL_SCREEN_KEY_LABEL},
+    {"keyboardOverlaySwitchWinKeyLabel",
+     IDS_KEYBOARD_OVERLAY_SWITCH_WIN_KEY_LABEL},
+    {"keyboardOverlayBrightDownKeyLabel",
+     IDS_KEYBOARD_OVERLAY_BRIGHT_DOWN_KEY_LABEL},
+    {"keyboardOverlayBrightUpKeyLabel",
+     IDS_KEYBOARD_OVERLAY_BRIGHT_UP_KEY_LABEL},
+    {"keyboardOverlayMuteKeyLabel", IDS_KEYBOARD_OVERLAY_MUTE_KEY_LABEL},
+    {"keyboardOverlayVolDownKeyLabel", IDS_KEYBOARD_OVERLAY_VOL_DOWN_KEY_LABEL},
+    {"keyboardOverlayVolUpKeyLabel", IDS_KEYBOARD_OVERLAY_VOL_UP_KEY_LABEL},
+    {"keyboardOverlayPowerKeyLabel", IDS_KEYBOARD_OVERLAY_POWER_KEY_LABEL},
+    {"keyboardOverlayBackspaceKeyLabel",
+     IDS_KEYBOARD_OVERLAY_BACKSPACE_KEY_LABEL},
+    {"keyboardOverlayTabKeyLabel", IDS_KEYBOARD_OVERLAY_TAB_KEY_LABEL},
+    {"keyboardOverlaySearchKeyLabel", IDS_KEYBOARD_OVERLAY_SEARCH_KEY_LABEL},
+    {"keyboardOverlayEnterKeyLabel", IDS_KEYBOARD_OVERLAY_ENTER_KEY_LABEL},
+    {"keyboardOverlayShiftKeyLabel", IDS_KEYBOARD_OVERLAY_SHIFT_KEY_LABEL},
+    {"keyboardOverlayCtrlKeyLabel", IDS_KEYBOARD_OVERLAY_CTRL_KEY_LABEL},
+    {"keyboardOverlayAltKeyLabel", IDS_KEYBOARD_OVERLAY_ALT_KEY_LABEL},
+    {"keyboardOverlayLeftKeyLabel", IDS_KEYBOARD_OVERLAY_LEFT_KEY_LABEL},
+    {"keyboardOverlayRightKeyLabel", IDS_KEYBOARD_OVERLAY_RIGHT_KEY_LABEL},
+    {"keyboardOverlayUpKeyLabel", IDS_KEYBOARD_OVERLAY_UP_KEY_LABEL},
+    {"keyboardOverlayDownKeyLabel", IDS_KEYBOARD_OVERLAY_DOWN_KEY_LABEL},
+    {"keyboardOverlayInstructions", IDS_KEYBOARD_OVERLAY_INSTRUCTIONS},
+    {"keyboardOverlayInstructionsHide", IDS_KEYBOARD_OVERLAY_INSTRUCTIONS_HIDE},
+    {"keyboardOverlayActivateLastShelfItem",
+     IDS_KEYBOARD_OVERLAY_ACTIVATE_LAST_SHELF_ITEM},
+    {"keyboardOverlayActivateLastTab", IDS_KEYBOARD_OVERLAY_ACTIVATE_LAST_TAB},
+    {"keyboardOverlayActivateShelfItem1",
+     IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_1},
+    {"keyboardOverlayActivateShelfItem2",
+     IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_2},
+    {"keyboardOverlayActivateShelfItem3",
+     IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_3},
+    {"keyboardOverlayActivateShelfItem4",
+     IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_4},
+    {"keyboardOverlayActivateShelfItem5",
+     IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_5},
+    {"keyboardOverlayActivateShelfItem6",
+     IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_6},
+    {"keyboardOverlayActivateShelfItem7",
+     IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_7},
+    {"keyboardOverlayActivateShelfItem8",
+     IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_8},
+    {"keyboardOverlayActivateNextTab", IDS_KEYBOARD_OVERLAY_ACTIVATE_NEXT_TAB},
+    {"keyboardOverlayActivatePreviousTab",
+     IDS_KEYBOARD_OVERLAY_ACTIVATE_PREVIOUS_TAB},
+    {"keyboardOverlayActivateTab1", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_1},
+    {"keyboardOverlayActivateTab2", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_2},
+    {"keyboardOverlayActivateTab3", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_3},
+    {"keyboardOverlayActivateTab4", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_4},
+    {"keyboardOverlayActivateTab5", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_5},
+    {"keyboardOverlayActivateTab6", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_6},
+    {"keyboardOverlayActivateTab7", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_7},
+    {"keyboardOverlayActivateTab8", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_8},
+    {"keyboardOverlayAddWwwAndComAndOpenAddress",
+     IDS_KEYBOARD_OVERLAY_ADD_WWW_AND_COM_AND_OPEN_ADDRESS},
+    {"keyboardOverlayBookmarkAllTabs", IDS_KEYBOARD_OVERLAY_BOOKMARK_ALL_TABS},
+    {"keyboardOverlayBookmarkCurrentPage",
+     IDS_KEYBOARD_OVERLAY_BOOKMARK_CURRENT_PAGE},
+    {"keyboardOverlayBookmarkManager", IDS_KEYBOARD_OVERLAY_BOOKMARK_MANAGER},
+    {"keyboardOverlayCenterWindow", IDS_KEYBOARD_OVERLAY_CENTER_WINDOW},
+    {"keyboardOverlayClearBrowsingDataDialog",
+     IDS_KEYBOARD_OVERLAY_CLEAR_BROWSING_DATA_DIALOG},
+    {"keyboardOverlayCloseTab", IDS_KEYBOARD_OVERLAY_CLOSE_TAB},
+    {"keyboardOverlayCloseWindow", IDS_KEYBOARD_OVERLAY_CLOSE_WINDOW},
+    {"keyboardOverlayContextMenu", IDS_KEYBOARD_OVERLAY_CONTEXT_MENU},
+    {"keyboardOverlayCopy", IDS_KEYBOARD_OVERLAY_COPY},
+    {"keyboardOverlayCut", IDS_KEYBOARD_OVERLAY_CUT},
+    {"keyboardOverlayCycleThroughInputMethods",
+     IDS_KEYBOARD_OVERLAY_CYCLE_THROUGH_INPUT_METHODS},
+    {"keyboardOverlayDecreaseKeyBrightness",
+     IDS_KEYBOARD_OVERLAY_DECREASE_KEY_BRIGHTNESS},
+    {"keyboardOverlayDelete", IDS_KEYBOARD_OVERLAY_DELETE},
+    {"keyboardOverlayDeleteWord", IDS_KEYBOARD_OVERLAY_DELETE_WORD},
+    {"keyboardOverlayDeveloperTools", IDS_KEYBOARD_OVERLAY_DEVELOPER_TOOLS},
+    {"keyboardOverlayDockWindowLeft", IDS_KEYBOARD_OVERLAY_DOCK_WINDOW_LEFT},
+    {"keyboardOverlayDockWindowRight", IDS_KEYBOARD_OVERLAY_DOCK_WINDOW_RIGHT},
+    {"keyboardOverlayDomInspector", IDS_KEYBOARD_OVERLAY_DOM_INSPECTOR},
+    {"keyboardOverlayDownloads", IDS_KEYBOARD_OVERLAY_DOWNLOADS},
+    {"keyboardOverlayEnd", IDS_KEYBOARD_OVERLAY_END},
+    {"keyboardOverlayF1", IDS_KEYBOARD_OVERLAY_F1},
+    {"keyboardOverlayF10", IDS_KEYBOARD_OVERLAY_F10},
+    {"keyboardOverlayF11", IDS_KEYBOARD_OVERLAY_F11},
+    {"keyboardOverlayF12", IDS_KEYBOARD_OVERLAY_F12},
+    {"keyboardOverlayF2", IDS_KEYBOARD_OVERLAY_F2},
+    {"keyboardOverlayF3", IDS_KEYBOARD_OVERLAY_F3},
+    {"keyboardOverlayF4", IDS_KEYBOARD_OVERLAY_F4},
+    {"keyboardOverlayF5", IDS_KEYBOARD_OVERLAY_F5},
+    {"keyboardOverlayF6", IDS_KEYBOARD_OVERLAY_F6},
+    {"keyboardOverlayF7", IDS_KEYBOARD_OVERLAY_F7},
+    {"keyboardOverlayF8", IDS_KEYBOARD_OVERLAY_F8},
+    {"keyboardOverlayF9", IDS_KEYBOARD_OVERLAY_F9},
+    {"keyboardOverlayFindPreviousText",
+     IDS_KEYBOARD_OVERLAY_FIND_PREVIOUS_TEXT},
+    {"keyboardOverlayFindText", IDS_KEYBOARD_OVERLAY_FIND_TEXT},
+    {"keyboardOverlayFindTextAgain", IDS_KEYBOARD_OVERLAY_FIND_TEXT_AGAIN},
+    {"keyboardOverlayFocusAddressBar", IDS_KEYBOARD_OVERLAY_FOCUS_ADDRESS_BAR},
+    {"keyboardOverlayFocusAddressBarInSearchMode",
+     IDS_KEYBOARD_OVERLAY_FOCUS_ADDRESS_BAR_IN_SEARCH_MODE},
+    {"keyboardOverlayFocusBookmarks", IDS_KEYBOARD_OVERLAY_FOCUS_BOOKMARKS},
+    {"keyboardOverlayFocusShelf", IDS_KEYBOARD_OVERLAY_FOCUS_SHELF},
+    {"keyboardOverlayFocusNextPane", IDS_KEYBOARD_OVERLAY_FOCUS_NEXT_PANE},
+    {"keyboardOverlayFocusPreviousPane",
+     IDS_KEYBOARD_OVERLAY_FOCUS_PREVIOUS_PANE},
+    {"keyboardOverlayFocusToolbar", IDS_KEYBOARD_OVERLAY_FOCUS_TOOLBAR},
+    {"keyboardOverlayGoBack", IDS_KEYBOARD_OVERLAY_GO_BACK},
+    {"keyboardOverlayGoForward", IDS_KEYBOARD_OVERLAY_GO_FORWARD},
+    {"keyboardOverlayHelp", IDS_KEYBOARD_OVERLAY_HELP},
+    {"keyboardOverlayHistory", IDS_KEYBOARD_OVERLAY_HISTORY},
+    {"keyboardOverlayHome", IDS_KEYBOARD_OVERLAY_HOME},
+    {"keyboardOverlayIncreaseKeyBrightness",
+     IDS_KEYBOARD_OVERLAY_INCREASE_KEY_BRIGHTNESS},
+    {"keyboardOverlayInputUnicodeCharacters",
+     IDS_KEYBOARD_OVERLAY_INPUT_UNICODE_CHARACTERS},
+    {"keyboardOverlayInsert", IDS_KEYBOARD_OVERLAY_INSERT},
+    {"keyboardOverlayJavascriptConsole",
+     IDS_KEYBOARD_OVERLAY_JAVASCRIPT_CONSOLE},
+    {"keyboardOverlayLockScreen", IDS_KEYBOARD_OVERLAY_LOCK_SCREEN},
+    {"keyboardOverlayLockScreenOrPowerOff",
+     IDS_KEYBOARD_OVERLAY_LOCK_SCREEN_OR_POWER_OFF},
+    {"keyboardOverlayMagnifierDecreaseZoom",
+     IDS_KEYBOARD_OVERLAY_MAGNIFIER_DECREASE_ZOOM},
+    {"keyboardOverlayMagnifierIncreaseZoom",
+     IDS_KEYBOARD_OVERLAY_MAGNIFIER_INCREASE_ZOOM},
+    {"keyboardOverlayMaximizeWindow", IDS_KEYBOARD_OVERLAY_MAXIMIZE_WINDOW},
+    {"keyboardOverlayMinimizeWindow", IDS_KEYBOARD_OVERLAY_MINIMIZE_WINDOW},
+    {"keyboardOverlayMirrorMonitors", IDS_KEYBOARD_OVERLAY_MIRROR_MONITORS},
+    {"keyboardOverlayNewIncognitoWindow",
+     IDS_KEYBOARD_OVERLAY_NEW_INCOGNITO_WINDOW},
+    {"keyboardOverlayNewTab", IDS_KEYBOARD_OVERLAY_NEW_TAB},
+    {"keyboardOverlayNewTerminal", IDS_KEYBOARD_OVERLAY_NEW_TERMINAL},
+    {"keyboardOverlayNewWindow", IDS_KEYBOARD_OVERLAY_NEW_WINDOW},
+    {"keyboardOverlayNextUser", IDS_KEYBOARD_OVERLAY_NEXT_USER},
+    {"keyboardOverlayNextWindow", IDS_KEYBOARD_OVERLAY_NEXT_WINDOW},
+    {"keyboardOverlayNextWord", IDS_KEYBOARD_OVERLAY_NEXT_WORD},
+    {"keyboardOverlayOpen", IDS_KEYBOARD_OVERLAY_OPEN},
+    {"keyboardOverlayOpenAddressInNewTab",
+     IDS_KEYBOARD_OVERLAY_OPEN_ADDRESS_IN_NEW_TAB},
+    {"keyboardOverlayOpenFileManager", IDS_KEYBOARD_OVERLAY_OPEN_FILE_MANAGER},
+    {"keyboardOverlayPageDown", IDS_KEYBOARD_OVERLAY_PAGE_DOWN},
+    {"keyboardOverlayPageUp", IDS_KEYBOARD_OVERLAY_PAGE_UP},
+    {"keyboardOverlayPaste", IDS_KEYBOARD_OVERLAY_PASTE},
+    {"keyboardOverlayPasteAsPlainText",
+     IDS_KEYBOARD_OVERLAY_PASTE_AS_PLAIN_TEXT},
+    {"keyboardOverlayPreviousUser", IDS_KEYBOARD_OVERLAY_PREVIOUS_USER},
+    {"keyboardOverlayPreviousWindow", IDS_KEYBOARD_OVERLAY_PREVIOUS_WINDOW},
+    {"keyboardOverlayPreviousWord", IDS_KEYBOARD_OVERLAY_PREVIOUS_WORD},
+    {"keyboardOverlayPrint", IDS_KEYBOARD_OVERLAY_PRINT},
+    {"keyboardOverlayReloadCurrentPage",
+     IDS_KEYBOARD_OVERLAY_RELOAD_CURRENT_PAGE},
+    {"keyboardOverlayReloadBypassingCache",
+     IDS_KEYBOARD_OVERLAY_RELOAD_BYPASSING_CACHE},
+    {"keyboardOverlayReopenLastClosedTab",
+     IDS_KEYBOARD_OVERLAY_REOPEN_LAST_CLOSED_TAB},
+    {"keyboardOverlayReportIssue", IDS_KEYBOARD_OVERLAY_REPORT_ISSUE},
+    {"keyboardOverlayResetScreenZoom", IDS_KEYBOARD_OVERLAY_RESET_SCREEN_ZOOM},
+    {"keyboardOverlayResetZoom", IDS_KEYBOARD_OVERLAY_RESET_ZOOM},
+    {"keyboardOverlayRotateScreen", IDS_KEYBOARD_OVERLAY_ROTATE_SCREEN},
+    {"keyboardOverlayRotateWindow", IDS_KEYBOARD_OVERLAY_ROTATE_WINDOW},
+    {"keyboardOverlaySave", IDS_KEYBOARD_OVERLAY_SAVE},
+    {"keyboardOverlayScreenshotRegion", IDS_KEYBOARD_OVERLAY_SCREENSHOT_REGION},
+    {"keyboardOverlayScreenshotWindow", IDS_KEYBOARD_OVERLAY_SCREENSHOT_WINDOW},
+    {"keyboardOverlayScrollUpOnePage", IDS_KEYBOARD_OVERLAY_SCROLL_UP_ONE_PAGE},
+    {"keyboardOverlaySelectAll", IDS_KEYBOARD_OVERLAY_SELECT_ALL},
+    {"keyboardOverlaySelectPreviousInputMethod",
+     IDS_KEYBOARD_OVERLAY_SELECT_PREVIOUS_INPUT_METHOD},
+    {"keyboardOverlaySelectWordAtATime",
+     IDS_KEYBOARD_OVERLAY_SELECT_WORD_AT_A_TIME},
+    {"keyboardOverlayShowImeBubble", IDS_KEYBOARD_OVERLAY_SHOW_IME_BUBBLE},
+    {"keyboardOverlayShowMessageCenter",
+     IDS_KEYBOARD_OVERLAY_SHOW_MESSAGE_CENTER},
+    {"keyboardOverlayShowStatusMenu", IDS_KEYBOARD_OVERLAY_SHOW_STATUS_MENU},
+    {"keyboardOverlayShowStylusTools", IDS_KEYBOARD_OVERLAY_SHOW_STYLUS_TOOLS},
+    {"keyboardOverlayShowWrenchMenu", IDS_KEYBOARD_OVERLAY_SHOW_WRENCH_MENU},
+    {"keyboardOverlaySignOut", IDS_KEYBOARD_OVERLAY_SIGN_OUT},
+    {"keyboardOverlaySuspend", IDS_KEYBOARD_OVERLAY_SUSPEND},
+    {"keyboardOverlaySwapPrimaryMonitor",
+     IDS_KEYBOARD_OVERLAY_SWAP_PRIMARY_MONITOR},
+    {"keyboardOverlayTakeScreenshot", IDS_KEYBOARD_OVERLAY_TAKE_SCREENSHOT},
+    {"keyboardOverlayTaskManager", IDS_KEYBOARD_OVERLAY_TASK_MANAGER},
+    {"keyboardOverlayToggleBookmarkBar",
+     IDS_KEYBOARD_OVERLAY_TOGGLE_BOOKMARK_BAR},
+    {"keyboardOverlayToggleCapsLock", IDS_KEYBOARD_OVERLAY_TOGGLE_CAPS_LOCK},
+    {"keyboardOverlayDisableCapsLock", IDS_KEYBOARD_OVERLAY_DISABLE_CAPS_LOCK},
+    {"keyboardOverlayToggleChromevoxSpokenFeedback",
+     IDS_KEYBOARD_OVERLAY_TOGGLE_CHROMEVOX_SPOKEN_FEEDBACK},
+    {"keyboardOverlayToggleHighContrastMode",
+     IDS_KEYBOARD_OVERLAY_TOGGLE_HIGH_CONTRAST_MODE},
+    {"keyboardOverlayToggleProjectionTouchHud",
+     IDS_KEYBOARD_OVERLAY_TOGGLE_PROJECTION_TOUCH_HUD},
+    {"keyboardOverlayTouchHudModeChange",
+     IDS_KEYBOARD_OVERLAY_TOUCH_HUD_MODE_CHANGE},
+    {"keyboardOverlayUndo", IDS_KEYBOARD_OVERLAY_UNDO},
+    {"keyboardOverlayUnpin", IDS_KEYBOARD_OVERLAY_UNPIN},
+    {"keyboardOverlayViewKeyboardOverlay",
+     IDS_KEYBOARD_OVERLAY_VIEW_KEYBOARD_OVERLAY},
+    {"keyboardOverlayViewSource", IDS_KEYBOARD_OVERLAY_VIEW_SOURCE},
+    {"keyboardOverlayWordMove", IDS_KEYBOARD_OVERLAY_WORD_MOVE},
+    {"keyboardOverlayZoomIn", IDS_KEYBOARD_OVERLAY_ZOOM_IN},
+    {"keyboardOverlayZoomOut", IDS_KEYBOARD_OVERLAY_ZOOM_OUT},
+    {"keyboardOverlayZoomScreenIn", IDS_KEYBOARD_OVERLAY_ZOOM_SCREEN_IN},
+    {"keyboardOverlayZoomScreenOut", IDS_KEYBOARD_OVERLAY_ZOOM_SCREEN_OUT},
 };
 
 bool TopRowKeysAreFunctionKeys(Profile* profile) {
diff --git a/chrome/browser/ui/webui/chromeos/keyboard_overlay_ui_browsertest.cc b/chrome/browser/ui/webui/chromeos/keyboard_overlay_ui_browsertest.cc
new file mode 100644
index 0000000..99eedb3c
--- /dev/null
+++ b/chrome/browser/ui/webui/chromeos/keyboard_overlay_ui_browsertest.cc
@@ -0,0 +1,124 @@
+// Copyright 2017 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 "ash/accelerators/accelerator_table.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/common/url_constants.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "chrome/test/base/ui_test_utils.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/browser/web_ui_message_handler.h"
+#include "content/public/test/browser_test_utils.h"
+#include "ui/events/keycodes/keyboard_code_conversion.h"
+
+namespace {
+
+class TestWebUIMessageHandler : public content::WebUIMessageHandler {
+ public:
+  TestWebUIMessageHandler() = default;
+  ~TestWebUIMessageHandler() override = default;
+
+  // content::WebUIMessageHandler:
+  void RegisterMessages() override {
+    web_ui()->RegisterMessageCallback(
+        "didPaint", base::Bind(&TestWebUIMessageHandler::HandleDidPaint,
+                               base::Unretained(this)));
+  }
+
+ private:
+  void HandleDidPaint(const base::ListValue*) {}
+
+  DISALLOW_COPY_AND_ASSIGN(TestWebUIMessageHandler);
+};
+
+}  // namespace
+
+using KeyboardOverlayUIBrowserTest = InProcessBrowserTest;
+
+IN_PROC_BROWSER_TEST_F(KeyboardOverlayUIBrowserTest,
+                       ShouldHaveKeyboardOverlay) {
+  ui_test_utils::NavigateToURL(browser(),
+                               GURL(chrome::kChromeUIKeyboardOverlayURL));
+  content::WebContents* web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  web_contents->GetWebUI()->AddMessageHandler(
+      base::MakeUnique<TestWebUIMessageHandler>());
+
+  bool is_display_ui_scaling_enabled;
+  ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
+      web_contents,
+      "domAutomationController.send(isDisplayUIScalingEnabled());",
+      &is_display_ui_scaling_enabled));
+
+  for (size_t i = 0; i < ash::kAcceleratorDataLength; ++i) {
+    const ash::AcceleratorData& entry = ash::kAcceleratorData[i];
+    // Skip some accelerators in this test:
+    // 1. If the accelerator has no modifier, i.e. ui::EF_NONE, or for "Caps
+    // Lock", such as ui::VKEY_MENU and ui::VKEY_LWIN, the logic to show it on
+    // the keyboard overlay is not by the mapping of
+    // keyboardOverlayData['shortcut'], so it can not be tested by this test.
+    // 2. If it has debug modifiers: ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
+    // ui::EF_SHIFT_DOWN
+    if (entry.keycode == ui::VKEY_MENU ||
+        entry.keycode == ui::VKEY_LWIN ||
+        entry.modifiers == ui::EF_NONE ||
+        entry.modifiers ==
+            (ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN)) {
+      continue;
+    }
+
+    std::string shortcut;
+    ASSERT_TRUE(content::ExecuteScriptAndExtractString(
+        web_contents,
+        "domAutomationController.send("
+        "  (function(number) {"
+        "       if (!!KEYCODE_TO_LABEL[number]) {"
+        "             return KEYCODE_TO_LABEL[number];"
+        "       } else {"
+        "             return 'NONE';"
+        "       }"
+        "  })(" + std::to_string(static_cast<unsigned int>(entry.keycode)) + ")"
+        ");",
+        &shortcut));
+    if (shortcut == "NONE") {
+      shortcut = base::ToLowerASCII(
+          static_cast<char>(LocatedToNonLocatedKeyboardCode(entry.keycode)));
+    }
+
+    // The order of the "if" conditions should not be changed because the
+    // modifiers are expected to be alphabetical sorted in the generated
+    // shortcut.
+    if (entry.modifiers & ui::EF_ALT_DOWN)
+      shortcut.append("<>ALT");
+    if (entry.modifiers & ui::EF_CONTROL_DOWN)
+      shortcut.append("<>CTRL");
+    if (entry.modifiers & ui::EF_COMMAND_DOWN)
+      shortcut.append("<>SEARCH");
+    if (entry.modifiers & ui::EF_SHIFT_DOWN)
+      shortcut.append("<>SHIFT");
+
+    if (!is_display_ui_scaling_enabled) {
+      if (shortcut == "-<>CTRL<>SHIFT" || shortcut == "+<>CTRL<>SHIFT" ||
+          shortcut == "0<>CTRL<>SHIFT")
+        continue;
+    }
+
+    bool contains;
+    ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
+        web_contents,
+        "domAutomationController.send("
+        "  !!keyboardOverlayData['shortcut']['" + shortcut + "']"
+        ");",
+        &contains));
+    ASSERT_TRUE(contains) << "Please add the new accelerators to keyboard "
+                             "overlay. Add one entry '" +
+                                 shortcut +
+                                 "' in the 'shortcut' section"
+                                 " at the bottom of the file of "
+                                 "'/chrome/browser/resources/chromeos/"
+                                 "keyboard_overlay_data.js'. Please keep it in "
+                                 "alphabetical order.";
+  }
+}
diff --git a/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.cc
index e864c38..6b118ce 100644
--- a/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.cc
@@ -7,13 +7,17 @@
 #include <string>
 #include <utility>
 
+#include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/sys_info.h"
 #include "base/task_scheduler/post_task.h"
 #include "chrome/browser/lifetime/application_lifetime.h"
+#include "chromeos/chromeos_switches.h"
 #include "chromeos/cryptohome/homedir_methods.h"
 #include "chromeos/dbus/cryptohome_client.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/dbus/power_manager/power_supply_properties.pb.h"
+#include "chromeos/dbus/power_manager_client.h"
 
 namespace {
 
@@ -25,11 +29,19 @@
 // The minimum size of available space to start the migration.
 constexpr int64_t kMinimumAvailableStorage = 10LL * 1024 * 1024;  // 10MB
 
+// The minimum battery level to start the migration.
+constexpr double kMinimumBatteryPercent = 30;
+
 // JS API callbacks names.
 constexpr char kJsApiStartMigration[] = "startMigration";
 constexpr char kJsApiSkipMigration[] = "skipMigration";
 constexpr char kJsApiRequestRestart[] = "requestRestart";
 
+bool IsTestingUI() {
+  return base::CommandLine::ForCurrentProcess()->HasSwitch(
+      chromeos::switches::kTestEncryptionMigrationUI);
+}
+
 }  // namespace
 
 namespace chromeos {
@@ -37,9 +49,11 @@
 EncryptionMigrationScreenHandler::EncryptionMigrationScreenHandler()
     : BaseScreenHandler(kScreenId), weak_ptr_factory_(this) {
   set_call_js_prefix(kJsScreenPath);
+  DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this);
 }
 
 EncryptionMigrationScreenHandler::~EncryptionMigrationScreenHandler() {
+  DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this);
   if (delegate_)
     delegate_->OnViewDestroyed(this);
 }
@@ -69,6 +83,7 @@
 
 void EncryptionMigrationScreenHandler::SetShouldResume(bool should_resume) {
   should_resume_ = should_resume;
+  CallJS("setIsResuming", should_resume_);
 }
 
 void EncryptionMigrationScreenHandler::SetContinueLoginCallback(
@@ -102,8 +117,23 @@
               &EncryptionMigrationScreenHandler::HandleRequestRestart);
 }
 
+void EncryptionMigrationScreenHandler::PowerChanged(
+    const power_manager::PowerSupplyProperties& proto) {
+  current_battery_percent_ = proto.battery_percent();
+  CallJS("setBatteryPercent", current_battery_percent_,
+         current_battery_percent_ >= kMinimumBatteryPercent);
+
+  // If the migration was already requested and the bettery level is enough now,
+  // The migration should start immediately.
+  if (current_battery_percent_ >= kMinimumBatteryPercent &&
+      should_migrate_on_enough_battery_) {
+    should_migrate_on_enough_battery_ = false;
+    StartMigration();
+  }
+}
+
 void EncryptionMigrationScreenHandler::HandleStartMigration() {
-  StartMigration();
+  WaitBatteryAndMigrate();
 }
 
 void EncryptionMigrationScreenHandler::HandleSkipMigration() {
@@ -131,6 +161,11 @@
 
   current_ui_state_ = state;
   CallJS("setUIState", static_cast<int>(state));
+
+  // When this handler is about to show the READY screen, we should get the
+  // latest battery status and show it on the screen.
+  if (state == UIState::READY)
+    DBusThreadManager::Get()->GetPowerManagerClient()->RequestStatusUpdate();
 }
 
 void EncryptionMigrationScreenHandler::CheckAvailableStorage() {
@@ -145,20 +180,31 @@
 }
 
 void EncryptionMigrationScreenHandler::OnGetAvailableStorage(int64_t size) {
-  if (size < kMinimumAvailableStorage) {
-    UpdateUIState(NOT_ENOUGH_STORAGE);
-    CallJS("setIsResuming", should_resume_);
-  } else {
+  if (size >= kMinimumAvailableStorage || IsTestingUI()) {
     if (should_resume_) {
-      // TODO(fukino): Check the battery level.
-      StartMigration();
+      WaitBatteryAndMigrate();
     } else {
-      UpdateUIState(READY);
+      UpdateUIState(UIState::READY);
     }
+  } else {
+    UpdateUIState(UIState::NOT_ENOUGH_STORAGE);
   }
 }
 
+void EncryptionMigrationScreenHandler::WaitBatteryAndMigrate() {
+  if (current_battery_percent_ >= kMinimumBatteryPercent) {
+    StartMigration();
+    return;
+  }
+  UpdateUIState(UIState::READY);
+
+  should_migrate_on_enough_battery_ = true;
+  DBusThreadManager::Get()->GetPowerManagerClient()->RequestStatusUpdate();
+}
+
 void EncryptionMigrationScreenHandler::StartMigration() {
+  UpdateUIState(UIState::MIGRATING);
+
   DBusThreadManager::Get()
       ->GetCryptohomeClient()
       ->SetDircryptoMigrationProgressHandler(
@@ -182,7 +228,6 @@
       cryptohome::Authorization(auth_key),
       base::Bind(&EncryptionMigrationScreenHandler::OnMigrationRequested,
                  weak_ptr_factory_.GetWeakPtr()));
-  UpdateUIState(UIState::MIGRATING);
 }
 
 void EncryptionMigrationScreenHandler::OnMigrationProgress(
diff --git a/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.h
index c2604b4..b4e9cd6 100644
--- a/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.h
+++ b/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.h
@@ -8,6 +8,7 @@
 #include "base/macros.h"
 #include "chrome/browser/chromeos/login/screens/encryption_migration_screen_view.h"
 #include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h"
+#include "chromeos/dbus/power_manager_client.h"
 #include "chromeos/login/auth/user_context.h"
 #include "third_party/cros_system_api/dbus/cryptohome/dbus-constants.h"
 
@@ -15,7 +16,8 @@
 
 // WebUI implementation of EncryptionMigrationScreenView
 class EncryptionMigrationScreenHandler : public EncryptionMigrationScreenView,
-                                         public BaseScreenHandler {
+                                         public BaseScreenHandler,
+                                         public PowerManagerClient::Observer {
  public:
   EncryptionMigrationScreenHandler();
   ~EncryptionMigrationScreenHandler() override;
@@ -49,6 +51,9 @@
   // WebUIMessageHandler implementation:
   void RegisterMessages() override;
 
+  // PowerManagerClient::Observer implementation:
+  void PowerChanged(const power_manager::PowerSupplyProperties& proto) override;
+
   // Handlers for JS API callbacks.
   void HandleStartMigration();
   void HandleSkipMigration();
@@ -60,6 +65,7 @@
   // Requests cryptohome to start encryption migration.
   void CheckAvailableStorage();
   void OnGetAvailableStorage(int64_t size);
+  void WaitBatteryAndMigrate();
   void StartMigration();
 
   // Handlers for cryptohome API callbacks.
@@ -84,6 +90,13 @@
   // True if the system should resume the previous incomplete migration.
   bool should_resume_ = false;
 
+  // The current battery level.
+  double current_battery_percent_ = 0.0;
+
+  // True if the migration should start immediately once the battery level gets
+  // sufficient.
+  bool should_migrate_on_enough_battery_ = false;
+
   base::WeakPtrFactory<EncryptionMigrationScreenHandler> weak_ptr_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(EncryptionMigrationScreenHandler);
diff --git a/chrome/common/pepper_flash.cc b/chrome/common/pepper_flash.cc
index 0eb72dd..86d9c6f5 100644
--- a/chrome/common/pepper_flash.cc
+++ b/chrome/common/pepper_flash.cc
@@ -102,10 +102,7 @@
                               base::Version* version_out) {
   std::string name;
   manifest.GetStringASCII("name", &name);
-  // TODO(viettrungluu): Support WinFlapper for now, while we change the format
-  // of the manifest. (Should be safe to remove checks for "WinFlapper" in, say,
-  // Nov. 2011.)  crbug.com/98458
-  if (name != kPepperFlashManifestName && name != "WinFlapper")
+  if (name != kPepperFlashManifestName)
     return false;
 
   std::string proposed_version;
@@ -117,12 +114,6 @@
   if (!CheckPepperFlashInterfaces(manifest))
     return false;
 
-  // TODO(viettrungluu): See above TODO.
-  if (name == "WinFlapper") {
-    *version_out = version;
-    return true;
-  }
-
   std::string os;
   manifest.GetStringASCII("x-ppapi-os", &os);
   if (os != kPepperFlashOperatingSystem)
diff --git a/chrome/renderer/chrome_render_frame_observer.cc b/chrome/renderer/chrome_render_frame_observer.cc
index b566854..366b3941 100644
--- a/chrome/renderer/chrome_render_frame_observer.cc
+++ b/chrome/renderer/chrome_render_frame_observer.cc
@@ -82,7 +82,7 @@
   if (image.IsNull())
     return SkBitmap();
 
-  gfx::Size image_size = image.size();
+  gfx::Size image_size = image.Size();
 
   if (image_size.GetArea() < thumbnail_min_area_pixels)
     return image.GetSkBitmap();
@@ -196,7 +196,7 @@
   gfx::Size original_size;
   if (!context_node.IsNull() && context_node.IsElementNode()) {
     blink::WebImage image = context_node.To<WebElement>().ImageContents();
-    original_size = image.size();
+    original_size = image.Size();
     thumbnail = Downscale(image,
                           thumbnail_min_area_pixels,
                           thumbnail_max_size_pixels);
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 4b8fc59..42b6979 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -355,6 +355,7 @@
       "../browser/autofill/autofill_uitest_util.cc",
       "../browser/autofill/autofill_uitest_util.h",
       "../browser/browser_keyevents_browsertest.cc",
+      "../browser/devtools/devtools_sanity_interactive_browsertest.cc",
       "../browser/extensions/api/extension_action/browser_action_interactive_test.cc",
       "../browser/extensions/api/notifications/notifications_apitest.cc",
       "../browser/extensions/api/omnibox/omnibox_api_interactive_test.cc",
@@ -2372,6 +2373,7 @@
         "../browser/ui/ash/launcher/arc_app_launcher_browsertest.cc",
         "../browser/ui/views/arc_app_dialog_view_browsertest.cc",
         "../browser/ui/views/frame/browser_frame_ash_browsertest.cc",
+        "../browser/ui/webui/chromeos/keyboard_overlay_ui_browsertest.cc",
         "../browser/ui/webui/options/chromeos/accounts_options_browsertest.cc",
         "../browser/ui/webui/options/chromeos/guest_mode_options_browsertest.cc",
         "../browser/ui/webui/options/chromeos/guest_mode_options_browsertest.h",
diff --git a/chrome/test/data/webui/settings/bluetooth_page_tests.js b/chrome/test/data/webui/settings/bluetooth_page_tests.js
index 820f84c..5644558 100644
--- a/chrome/test/data/webui/settings/bluetooth_page_tests.js
+++ b/chrome/test/data/webui/settings/bluetooth_page_tests.js
@@ -72,38 +72,41 @@
   });
 
   test('MainPage', function() {
-    assertFalse(bluetoothApi_.adapterState.powered);
-    assertFalse(bluetoothPage.bluetoothEnabled_);
+    assertFalse(bluetoothApi_.getAdapterStateForTest().powered);
+    assertFalse(bluetoothPage.bluetoothToggleState_);
     // Test that tapping the single settings-box div enables bluetooth.
     var div = bluetoothPage.$$('div.settings-box');
     assertTrue(!!div);
     MockInteractions.tap(div);
-    assertTrue(bluetoothPage.bluetoothEnabled_);
-    assertTrue(bluetoothApi_.adapterState.powered);
+    assertTrue(bluetoothPage.bluetoothToggleState_);
+    assertTrue(bluetoothApi_.getAdapterStateForTest().powered);
   });
 
   suite('SubPage', function() {
     var subpage;
 
     setup(function() {
-      bluetoothPage.bluetoothEnabled_ = true;
+      bluetoothApi_.setEnabled(true);
+      Polymer.dom.flush();
       var div = bluetoothPage.$$('div.settings-box');
       MockInteractions.tap(div);
       subpage = bluetoothPage.$$('settings-bluetooth-subpage');
       assertTrue(!!subpage);
+      assertTrue(subpage.bluetoothToggleState);
+      assertFalse(subpage.bluetoothToggleDisabled);
     });
 
     test('toggle', function() {
-      assertTrue(subpage.bluetoothEnabled);
+      assertTrue(subpage.bluetoothToggleState);
 
       var enableButton = subpage.$.enableBluetooth;
       assertTrue(!!enableButton);
       assertTrue(enableButton.checked);
 
-      subpage.bluetoothEnabled = false;
+      subpage.bluetoothToggleState = false;
       assertFalse(enableButton.checked);
-      assertFalse(bluetoothApi_.adapterState.powered);;
-      assertFalse(bluetoothPage.bluetoothEnabled_);
+      assertFalse(bluetoothApi_.getAdapterStateForTest().powered);
+      assertFalse(bluetoothPage.bluetoothToggleState_);
     });
 
     test('paired device list', function() {
diff --git a/chrome/test/data/webui/settings/fake_bluetooth.js b/chrome/test/data/webui/settings/fake_bluetooth.js
index 8af4983c..e6a5601 100644
--- a/chrome/test/data/webui/settings/fake_bluetooth.js
+++ b/chrome/test/data/webui/settings/fake_bluetooth.js
@@ -12,7 +12,7 @@
    * @implements {Bluetooth}
    */
   function FakeBluetooth() {
-    /** @type {!chrome.bluetooth.AdapterState} */ this.adapterState = {
+    /** @type {!chrome.bluetooth.AdapterState} */ this.adapterState_ = {
       address: '00:11:22:33:44:55:66',
       name: 'Fake Adapter',
       powered: false,
@@ -27,8 +27,19 @@
     // Public testing methods.
     /** @param {boolean} enabled */
     setEnabled: function(enabled) {
-      this.adapterState.powered = enabled;
-      this.onAdapterStateChanged.callListeners(this.adapterState);
+      this.setAdapterState({powered: enabled});
+    },
+
+    /** @param {!chrome.bluetooth.AdapterState} state*/
+    setAdapterState: function(state) {
+      Object.assign(this.adapterState_, state);
+      this.onAdapterStateChanged.callListeners(
+          Object.assign({}, this.adapterState_));
+    },
+
+    /** @return {!chrome.bluetooth.AdapterState} */
+    getAdapterStateForTest: function() {
+      return Object.assign({}, this.adapterState_);
     },
 
     /** @param {!Array<!chrome.bluetooth.Device>} devices */
@@ -67,7 +78,7 @@
     // Bluetooth overrides.
     /** @override */
     getAdapterState: function(callback) {
-      callback(this.adapterState);
+      callback(Object.assign({}, this.adapterState_));
     },
 
     /** @override */
diff --git a/chrome/test/data/webui/settings/fake_bluetooth_private.js b/chrome/test/data/webui/settings/fake_bluetooth_private.js
index efbe7073..d3a3cec5 100644
--- a/chrome/test/data/webui/settings/fake_bluetooth_private.js
+++ b/chrome/test/data/webui/settings/fake_bluetooth_private.js
@@ -24,7 +24,7 @@
   FakeBluetoothPrivate.prototype = {
     /** @override */
     setAdapterState: function(state, opt_callback) {
-      this.bluetoothApi_.adapterState = state;
+      this.bluetoothApi_.setAdapterState(state);
       if (opt_callback)
         opt_callback();
     },
diff --git a/chrome/test/vr/perf/latency/BUILD.gn b/chrome/test/vr/perf/latency/BUILD.gn
new file mode 100644
index 0000000..6e158dd
--- /dev/null
+++ b/chrome/test/vr/perf/latency/BUILD.gn
@@ -0,0 +1,13 @@
+# Copyright 2017 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.
+
+group("motopho_latency_test") {
+  testonly = true
+  data = [
+    "./run_latency_test.py",
+  ]
+  data_deps = [
+    "//chrome/android:chrome_public_apk",
+  ]
+}
diff --git a/chrome/test/vr/perf/latency/run_latency_test.py b/chrome/test/vr/perf/latency/run_latency_test.py
new file mode 100644
index 0000000..852b420
--- /dev/null
+++ b/chrome/test/vr/perf/latency/run_latency_test.py
@@ -0,0 +1,283 @@
+# Copyright 2017 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.
+
+"""Script for automatically measuring motion-to-photon latency for VR.
+
+Doing so requires two specialized pieces of hardware. The first is a Motopho,
+which when used with a VR flicker app, finds the delay between movement and
+the test device's screen updating in response to the movement. The second is
+a set of servos, which physically moves the test device and Motopho during the
+latency test.
+"""
+
+import argparse
+import glob
+import httplib
+import logging
+import os
+import re
+import serial
+import subprocess
+import sys
+import threading
+import time
+
+# RobotArm connection constants
+BAUD_RATE = 115200
+CONNECTION_TIMEOUT = 3.0
+NUM_TRIES = 5
+# Motopho constants
+DEFAULT_ADB_PATH = os.path.join(os.path.expanduser('~'),
+                                'tools/android/android-sdk-linux',
+                                'platform-tools/adb')
+# TODO(bsheedy): See about adding tool via DEPS instead of relying on it
+# existing on the bot already
+DEFAULT_MOTOPHO_PATH = os.path.join(os.path.expanduser('~'), 'motopho/Motopho')
+MOTOPHO_THREAD_TIMEOUT = 30
+
+class MotophoThread(threading.Thread):
+  """Handles the running of the Motopho script and extracting results."""
+  def __init__(self):
+    threading.Thread.__init__(self)
+    self._latency = None
+    self._max_correlation = None
+
+  def run(self):
+    motopho_output = ""
+    try:
+      motopho_output = subprocess.check_output(["./motophopro_nograph"],
+                                               stderr=subprocess.STDOUT)
+    except subprocess.CalledProcessError as e:
+      logging.error('Failed to run Motopho script: %s', e.output)
+      raise e
+
+    if "FAIL" in motopho_output:
+      logging.error('Failed to get latency, logging raw output: %s',
+                    motopho_output)
+      raise RuntimeError('Failed to get latency - correlation likely too low')
+
+    self._latency = None
+    self._max_correlation = None
+    for line in motopho_output.split("\n"):
+      if 'Motion-to-photon latency:' in line:
+        self._latency = float(line.split(" ")[-2])
+      if 'Max correlation is' in line:
+        self._max_correlation = float(line.split(' ')[-1])
+      if self._latency and self._max_correlation:
+        break;
+
+  @property
+  def latency(self):
+    return self._latency
+
+  @property
+  def max_correlation(self):
+    return self._max_correlation
+
+
+class RobotArm():
+  """Handles the serial communication with the servos/arm used for movement."""
+  def __init__(self, device_name, num_tries, baud, timeout):
+    self._connection = None
+    connected = False
+    for _ in xrange(num_tries):
+      try:
+        self._connection = serial.Serial('/dev/' + device_name,
+                                         baud,
+                                         timeout=timeout)
+      except serial.SerialException as e:
+        pass
+      if self._connection and 'Enter parameters' in self._connection.read(1024):
+        connected = True
+        break
+    if not connected:
+      raise serial.SerialException('Failed to connect to the robot arm.')
+
+  def StartMotophoMovement(self):
+    if not self._connection:
+      return
+    self._connection.write('9\n')
+
+  def StopAllMovement(self):
+    if not self._connection:
+      return
+    self._connection.write('0\n')
+
+
+def GetParsedArgs():
+  """Parses the command line arguments passed to the script.
+
+  Fails if any unknown arguments are present.
+  """
+  parser = argparse.ArgumentParser()
+  parser.add_argument('--adb-path',
+                      type=os.path.realpath,
+                      help='The absolute path to adb',
+                      default=DEFAULT_ADB_PATH)
+  parser.add_argument('--motopho-path',
+                      type=os.path.realpath,
+                      help='The absolute path to the directory with Motopho '
+                           'scripts',
+                      default=DEFAULT_MOTOPHO_PATH)
+  parser.add_argument('--output-dir',
+                      type=os.path.realpath,
+                      help='The directory where the script\'s output files '
+                           'will be saved')
+  parser.add_argument('-v', '--verbose',
+                      dest='verbose_count', default=0, action='count',
+                      help='Verbose level (multiple times for more)')
+  (args, unknown_args) = parser.parse_known_args()
+  SetLogLevel(args.verbose_count)
+  if unknown_args:
+    parser.error('Received unknown arguments: %s' % ' '.join(unknown_args))
+  return args
+
+
+def SetLogLevel(verbose_count):
+  """Sets the log level based on the command line arguments."""
+  log_level = logging.WARNING
+  if verbose_count == 1:
+    log_level = logging.INFO
+  elif verbose_count >= 2:
+    log_level = logging.DEBUG
+  logger = logging.getLogger()
+  logger.setLevel(log_level)
+
+
+def GetTtyDevices(tty_pattern, vendor_ids):
+  """Find all devices connected to tty that match a pattern and device id.
+
+  If a serial device is connected to the computer via USB, this function
+  will check all tty devices that match tty_pattern, and return the ones
+  that have vendor identification number in the list vendor_ids.
+
+  Args:
+    tty_pattern: The search pattern, such as r'ttyACM\d+'.
+    vendor_ids: The list of 16-bit USB vendor ids, such as [0x2a03].
+
+  Returns:
+    A list of strings of tty devices, for example ['ttyACM0'].
+  """
+  product_string = 'PRODUCT='
+  sys_class_dir = '/sys/class/tty/'
+
+  tty_devices = glob.glob(sys_class_dir + '*')
+
+  matcher = re.compile('.*' + tty_pattern)
+  tty_matches = [x for x in tty_devices if matcher.search(x)]
+  tty_matches = [x[len(sys_class_dir):] for x in tty_matches]
+
+  found_devices = []
+  for match in tty_matches:
+    class_filename = sys_class_dir + match + '/device/uevent'
+    with open(class_filename, 'r') as uevent_file:
+      # Look for the desired product id in the uevent text.
+      for line in uevent_file:
+        if product_string in line:
+          ids = line[len(product_string):].split('/')
+          ids = [int(x, 16) for x in ids]
+
+          for desired_id in vendor_ids:
+            if desired_id in ids:
+              found_devices.append(match)
+
+  return found_devices
+
+
+def RunCommand(cmd):
+  """Runs the given cmd list.
+
+  Prints the command's output and exits if any error occurs.
+  """
+  try:
+    subprocess.check_output(cmd, stderr=subprocess.STDOUT)
+  except subprocess.CalledProcessError as e:
+    logging.error('Failed command output: %s', e.output)
+    raise e
+
+
+def SetChromeCommandLineFlags(adb_path, flags):
+  """Sets the given Chrome command line flags."""
+  RunCommand([adb_path,
+                'shell', "echo 'chrome " + ' '.join(flags) + "' > "
+                + '/data/local/tmp/chrome-command-line'])
+
+
+def main():
+  args = GetParsedArgs()
+
+  RunCommand([args.adb_path, 'root'])
+  RunCommand([args.adb_path, 'install', '-r', 'apks/ChromePublic.apk'])
+  # Force WebVR support and don't have first run experience
+  SetChromeCommandLineFlags(args.adb_path, ['--enable-webvr', '--disable-fre'])
+
+  # Motopho scripts use relative paths, so switch to the Motopho directory
+  os.chdir(args.motopho_path)
+
+  # Connect to the Arduino that drives the servos
+  devices = GetTtyDevices(r'ttyACM\d+', [0x2a03, 0x2341])
+  if len(devices) != 1:
+    logging.error('Found %d devices, expected 1', len(devices))
+    return 1
+  robot_arm = RobotArm(devices[0], NUM_TRIES, BAUD_RATE, CONNECTION_TIMEOUT)
+
+  # Wake the device
+  RunCommand([args.adb_path, 'shell', 'input', 'keyevent', 'KEYCODE_WAKEUP'])
+  # Sleep a bit, otherwise WebGL can crash when Canary starts
+  time.sleep(1)
+
+  # Start Chrome and go to the flicker app
+  # TODO(bsheedy): See about having versioned copies of the flicker app instead
+  # of using personal github.
+  RunCommand([args.adb_path, 'shell', 'am', 'start',
+               '-a', 'android.intent.action.MAIN',
+               '-n', 'org.chromium.chrome/com.google.android.apps.chrome.Main',
+               'https://weableandbob.github.io/Motopho/flicker_apps/webvr/webvr-flicker-app-klaus.html?polyfill=0\&canvasClickPresents=1'])
+  time.sleep(10)
+
+  # Tap the screen to start presenting
+  RunCommand(
+      [args.adb_path, 'shell', 'input', 'touchscreen', 'tap', '800', '800'])
+  # Wait for VR to fully start up
+  time.sleep(5)
+
+  # Start the Motopho script
+  motopho_thread = MotophoThread()
+  motopho_thread.start()
+  # Let the Motopho be stationary so the script can calculate its bias
+  time.sleep(3)
+
+  # Move so we can measure latency
+  robot_arm.StartMotophoMovement()
+  motopho_thread.join(MOTOPHO_THREAD_TIMEOUT)
+  if motopho_thread.isAlive():
+    # TODO(bsheedy): Look into ways to prevent Motopho from not sending any
+    # data until unplugged and replugged into the machine after a reboot.
+    logging.error('Motopho thread timeout, Motopho may need to be replugged.')
+  robot_arm.StopAllMovement()
+
+  logging.info('Latency: %s', motopho_thread.latency)
+  logging.info('Max correlation: %s', motopho_thread.max_correlation)
+
+  # TODO(bsheedy): Change this to output JSON compatible with the performance
+  # dashboard.
+  if args.output_dir and os.path.isdir(args.output_dir):
+    with file(os.path.join(args.output_dir, 'output.txt'), 'w') as outfile:
+      outfile.write('Latency: %s\nMax correlation: %s\n' %
+                    (motopho_thread.latency, motopho_thread.max_correlation))
+
+  # Exit VR and Close Chrome
+  # TODO(bsheedy): See about closing current tab before exiting so they don't
+  # pile up over time.
+  RunCommand([args.adb_path, 'shell', 'input', 'keyevent', 'KEYCODE_BACK'])
+  RunCommand([args.adb_path, 'shell', 'am', 'force-stop',
+                'org.chromium.chrome'])
+
+  # Turn off the screen
+  RunCommand([args.adb_path, 'shell', 'input', 'keyevent', 'KEYCODE_POWER'])
+
+  return 0
+
+if __name__ == '__main__':
+  sys.exit(main())
diff --git a/components/chrome_cleaner/public/interfaces/chrome_prompt.mojom b/components/chrome_cleaner/public/interfaces/chrome_prompt.mojom
index 04d986e..7458a8e 100644
--- a/components/chrome_cleaner/public/interfaces/chrome_prompt.mojom
+++ b/components/chrome_cleaner/public/interfaces/chrome_prompt.mojom
@@ -30,6 +30,13 @@
   array<string> files_to_delete;
 };
 
+// Indicates if elevation will be required for cleanup.
+[Extensible]
+enum ElevationStatus {
+  NOT_REQUIRED = 0,
+  REQUIRED = 1,
+};
+
 [Extensible]
 enum PromptAcceptance {
   UNSPECIFIED = 0,
@@ -55,11 +62,11 @@
 interface ChromePrompt {
   // Params:
   //  - removable_uws_found: the list of UwS detected by the reporter;
-  //  - elevation_required: if the cleaner will need to run in elevated mode.
+  //  - elevation_status: if the cleaner will need to run in elevated mode.
   // Returns:
   //  - prompt_acceptance: indicates if the user accepted the prompt; if the
   //                       prompt is accepted, it also indicates if logs
   //                       uploading is allowed.
-  PromptUser(array<UwS> removable_uws_found, bool elevation_required)
+  PromptUser(array<UwS> removable_uws_found, ElevationStatus elevation_status)
       => (PromptAcceptance prompt_acceptance);
 };
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_compression_stats.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_compression_stats.cc
index bbfef49..04280b0 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_compression_stats.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_compression_stats.cc
@@ -705,6 +705,44 @@
 void DataReductionProxyCompressionStats::ClearDataSavingStatistics() {
   DeleteHistoricalDataUsage();
 
+  pref_service_->ClearPref(prefs::kDailyHttpContentLengthLastUpdateDate);
+  pref_service_->ClearPref(prefs::kHttpReceivedContentLength);
+  pref_service_->ClearPref(prefs::kHttpOriginalContentLength);
+
+  pref_service_->ClearPref(prefs::kDailyHttpOriginalContentLengthApplication);
+  pref_service_->ClearPref(prefs::kDailyHttpOriginalContentLengthVideo);
+  pref_service_->ClearPref(prefs::kDailyHttpOriginalContentLengthUnknown);
+  pref_service_->ClearPref(prefs::kDailyHttpReceivedContentLengthApplication);
+  pref_service_->ClearPref(prefs::kDailyHttpReceivedContentLengthVideo);
+  pref_service_->ClearPref(prefs::kDailyHttpReceivedContentLengthUnknown);
+
+  pref_service_->ClearPref(
+      prefs::kDailyOriginalContentLengthViaDataReductionProxyApplication);
+  pref_service_->ClearPref(
+      prefs::kDailyOriginalContentLengthViaDataReductionProxyVideo);
+  pref_service_->ClearPref(
+      prefs::kDailyOriginalContentLengthViaDataReductionProxyUnknown);
+  pref_service_->ClearPref(
+      prefs::kDailyContentLengthViaDataReductionProxyApplication);
+  pref_service_->ClearPref(
+      prefs::kDailyContentLengthViaDataReductionProxyVideo);
+  pref_service_->ClearPref(
+      prefs::kDailyContentLengthViaDataReductionProxyUnknown);
+
+  pref_service_->ClearPref(
+      prefs::
+          kDailyOriginalContentLengthWithDataReductionProxyEnabledApplication);
+  pref_service_->ClearPref(
+      prefs::kDailyOriginalContentLengthWithDataReductionProxyEnabledVideo);
+  pref_service_->ClearPref(
+      prefs::kDailyOriginalContentLengthWithDataReductionProxyEnabledUnknown);
+  pref_service_->ClearPref(
+      prefs::kDailyContentLengthWithDataReductionProxyEnabledApplication);
+  pref_service_->ClearPref(
+      prefs::kDailyContentLengthWithDataReductionProxyEnabledVideo);
+  pref_service_->ClearPref(
+      prefs::kDailyContentLengthWithDataReductionProxyEnabledUnknown);
+
   pref_service_->ClearPref(
       prefs::kDailyContentLengthHttpsWithDataReductionProxyEnabled);
   pref_service_->ClearPref(
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_compression_stats_unittest.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_compression_stats_unittest.cc
index 3629386e..e9a5338 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_compression_stats_unittest.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_compression_stats_unittest.cc
@@ -226,17 +226,20 @@
   // Verify the pref list values are equal to the given values.
   // If the count of values is less than kNumDaysInHistory, zeros are assumed
   // at the beginning.
-  void VerifyPrefList(const char* pref, const int64_t* values, size_t count) {
-    ASSERT_GE(kNumDaysInHistory, count);
+  void VerifyPrefList(const char* pref,
+                      const int64_t* values,
+                      size_t count,
+                      size_t num_days_in_history) {
+    ASSERT_GE(num_days_in_history, count);
     base::ListValue* update = compression_stats_->GetList(pref);
-    ASSERT_EQ(kNumDaysInHistory, update->GetSize()) << "Pref: " << pref;
+    ASSERT_EQ(num_days_in_history, update->GetSize()) << "Pref: " << pref;
 
     for (size_t i = 0; i < count; ++i) {
       EXPECT_EQ(values[i],
-                GetListPrefInt64Value(*update, kNumDaysInHistory - count + i))
-          << pref << "; index=" << (kNumDaysInHistory - count + i);
+                GetListPrefInt64Value(*update, num_days_in_history - count + i))
+          << pref << "; index=" << (num_days_in_history - count + i);
     }
-    for (size_t i = 0; i < kNumDaysInHistory - count; ++i) {
+    for (size_t i = 0; i < num_days_in_history - count; ++i) {
       EXPECT_EQ(0, GetListPrefInt64Value(*update, i)) << "index=" << i;
     }
   }
@@ -259,31 +262,31 @@
       const int64_t* original_via_data_reduction_proxy_values,
       size_t original_via_data_reduction_proxy_count,
       const int64_t* received_via_data_reduction_proxy_values,
-      size_t received_via_data_reduction_proxy_count) {
+      size_t received_via_data_reduction_proxy_count,
+      size_t num_days_in_history) {
     VerifyPrefList(data_reduction_proxy::prefs::kDailyHttpOriginalContentLength,
-                   original_values, original_count);
+                   original_values, original_count, num_days_in_history);
     VerifyPrefList(data_reduction_proxy::prefs::kDailyHttpReceivedContentLength,
-                   received_values, received_count);
+                   received_values, received_count, num_days_in_history);
+    VerifyPrefList(data_reduction_proxy::prefs::
+                       kDailyOriginalContentLengthWithDataReductionProxyEnabled,
+                   original_with_data_reduction_proxy_enabled_values,
+                   original_with_data_reduction_proxy_enabled_count,
+                   num_days_in_history);
+    VerifyPrefList(data_reduction_proxy::prefs::
+                       kDailyContentLengthWithDataReductionProxyEnabled,
+                   received_with_data_reduction_proxy_enabled_values,
+                   received_with_data_reduction_proxy_count,
+                   num_days_in_history);
+    VerifyPrefList(data_reduction_proxy::prefs::
+                       kDailyOriginalContentLengthViaDataReductionProxy,
+                   original_via_data_reduction_proxy_values,
+                   original_via_data_reduction_proxy_count,
+                   num_days_in_history);
     VerifyPrefList(
-        data_reduction_proxy::prefs::
-            kDailyOriginalContentLengthWithDataReductionProxyEnabled,
-        original_with_data_reduction_proxy_enabled_values,
-        original_with_data_reduction_proxy_enabled_count);
-    VerifyPrefList(
-        data_reduction_proxy::prefs::
-            kDailyContentLengthWithDataReductionProxyEnabled,
-        received_with_data_reduction_proxy_enabled_values,
-        received_with_data_reduction_proxy_count);
-    VerifyPrefList(
-        data_reduction_proxy::prefs::
-            kDailyOriginalContentLengthViaDataReductionProxy,
-        original_via_data_reduction_proxy_values,
-        original_via_data_reduction_proxy_count);
-    VerifyPrefList(
-        data_reduction_proxy::prefs::
-            kDailyContentLengthViaDataReductionProxy,
+        data_reduction_proxy::prefs::kDailyContentLengthViaDataReductionProxy,
         received_via_data_reduction_proxy_values,
-        received_via_data_reduction_proxy_count);
+        received_via_data_reduction_proxy_count, num_days_in_history);
 
     VerifyPrefInt64(
         data_reduction_proxy::prefs::kDailyHttpOriginalContentLengthApplication,
@@ -341,39 +344,39 @@
       const int64_t* unknown_with_data_reduction_proxy_enabled_values,
       size_t unknown_with_data_reduction_proxy_enabled_count) {
     VerifyPrefList(data_reduction_proxy::prefs::kDailyHttpOriginalContentLength,
-                   original_values, original_count);
+                   original_values, original_count, kNumDaysInHistory);
     VerifyPrefList(data_reduction_proxy::prefs::kDailyHttpReceivedContentLength,
-                   received_values, received_count);
-    VerifyPrefList(
-        data_reduction_proxy::prefs::
-            kDailyOriginalContentLengthWithDataReductionProxyEnabled,
-        original_with_data_reduction_proxy_enabled_values,
-        original_with_data_reduction_proxy_enabled_count);
-    VerifyPrefList(
-        data_reduction_proxy::prefs::
-            kDailyContentLengthWithDataReductionProxyEnabled,
-        received_with_data_reduction_proxy_enabled_values,
-        received_with_data_reduction_proxy_count);
-    VerifyPrefList(
-        data_reduction_proxy::prefs::
-            kDailyContentLengthHttpsWithDataReductionProxyEnabled,
-        https_with_data_reduction_proxy_enabled_values,
-        https_with_data_reduction_proxy_enabled_count);
+                   received_values, received_count, kNumDaysInHistory);
+    VerifyPrefList(data_reduction_proxy::prefs::
+                       kDailyOriginalContentLengthWithDataReductionProxyEnabled,
+                   original_with_data_reduction_proxy_enabled_values,
+                   original_with_data_reduction_proxy_enabled_count,
+                   kNumDaysInHistory);
+    VerifyPrefList(data_reduction_proxy::prefs::
+                       kDailyContentLengthWithDataReductionProxyEnabled,
+                   received_with_data_reduction_proxy_enabled_values,
+                   received_with_data_reduction_proxy_count, kNumDaysInHistory);
+    VerifyPrefList(data_reduction_proxy::prefs::
+                       kDailyContentLengthHttpsWithDataReductionProxyEnabled,
+                   https_with_data_reduction_proxy_enabled_values,
+                   https_with_data_reduction_proxy_enabled_count,
+                   kNumDaysInHistory);
     VerifyPrefList(
         data_reduction_proxy::prefs::
             kDailyContentLengthShortBypassWithDataReductionProxyEnabled,
         short_bypass_with_data_reduction_proxy_enabled_values,
-        short_bypass_with_data_reduction_proxy_enabled_count);
+        short_bypass_with_data_reduction_proxy_enabled_count,
+        kNumDaysInHistory);
     VerifyPrefList(
         data_reduction_proxy::prefs::
             kDailyContentLengthLongBypassWithDataReductionProxyEnabled,
         long_bypass_with_data_reduction_proxy_enabled_values,
-        long_bypass_with_data_reduction_proxy_enabled_count);
-    VerifyPrefList(
-        data_reduction_proxy::prefs::
-            kDailyContentLengthUnknownWithDataReductionProxyEnabled,
-        unknown_with_data_reduction_proxy_enabled_values,
-        unknown_with_data_reduction_proxy_enabled_count);
+        long_bypass_with_data_reduction_proxy_enabled_count, kNumDaysInHistory);
+    VerifyPrefList(data_reduction_proxy::prefs::
+                       kDailyContentLengthUnknownWithDataReductionProxyEnabled,
+                   unknown_with_data_reduction_proxy_enabled_values,
+                   unknown_with_data_reduction_proxy_enabled_count,
+                   kNumDaysInHistory);
   }
 
   int64_t GetInt64(const char* pref_path) {
@@ -432,6 +435,10 @@
     compression_stats_->DeleteHistoricalDataUsage();
   }
 
+  void ClearDataSavingStatistics() {
+    compression_stats_->ClearDataSavingStatistics();
+  }
+
   void DeleteBrowsingHistory(const base::Time& start, const base::Time& end) {
     compression_stats_->DeleteBrowsingHistory(start, end);
   }
@@ -594,9 +601,8 @@
       FakeNow());
 
   VerifyDailyDataSavingContentLengthPrefLists(
-      original, 1, received, 1,
-      original, 1, received, 1,
-      original, 1, received, 1);
+      original, 1, received, 1, original, 1, received, 1, original, 1, received,
+      1, kNumDaysInHistory);
 }
 
 TEST_F(DataReductionProxyCompressionStatsTest, MultipleResponses) {
@@ -606,9 +612,9 @@
   int64_t received[] = {kReceivedLength};
   RecordContentLengthPrefs(
       kReceivedLength, kOriginalLength, false, UNKNOWN_TYPE, FakeNow());
-  VerifyDailyDataSavingContentLengthPrefLists(
-      original, 1, received, 1,
-      NULL, 0, NULL, 0, NULL, 0, NULL, 0);
+  VerifyDailyDataSavingContentLengthPrefLists(original, 1, received, 1, NULL, 0,
+                                              NULL, 0, NULL, 0, NULL, 0,
+                                              kNumDaysInHistory);
 
   RecordContentLengthPrefs(
       kReceivedLength, kOriginalLength, true, UNKNOWN_TYPE, FakeNow());
@@ -617,9 +623,8 @@
   int64_t original_proxy_enabled[] = {kOriginalLength};
   int64_t received_proxy_enabled[] = {kReceivedLength};
   VerifyDailyDataSavingContentLengthPrefLists(
-      original, 1, received, 1,
-      original_proxy_enabled, 1, received_proxy_enabled, 1,
-      NULL, 0, NULL, 0);
+      original, 1, received, 1, original_proxy_enabled, 1,
+      received_proxy_enabled, 1, NULL, 0, NULL, 0, kNumDaysInHistory);
 
   RecordContentLengthPrefs(
       kReceivedLength, kOriginalLength, true, VIA_DATA_REDUCTION_PROXY,
@@ -631,9 +636,9 @@
   int64_t original_via_proxy[] = {kOriginalLength};
   int64_t received_via_proxy[] = {kReceivedLength};
   VerifyDailyDataSavingContentLengthPrefLists(
-      original, 1, received, 1,
-      original_proxy_enabled, 1, received_proxy_enabled, 1,
-      original_via_proxy, 1, received_via_proxy, 1);
+      original, 1, received, 1, original_proxy_enabled, 1,
+      received_proxy_enabled, 1, original_via_proxy, 1, received_via_proxy, 1,
+      kNumDaysInHistory);
 
   RecordContentLengthPrefs(
       kReceivedLength, kOriginalLength, true, UNKNOWN_TYPE, FakeNow());
@@ -642,18 +647,18 @@
   original_proxy_enabled[0] += kOriginalLength;
   received_proxy_enabled[0] += kReceivedLength;
   VerifyDailyDataSavingContentLengthPrefLists(
-      original, 1, received, 1,
-      original_proxy_enabled, 1, received_proxy_enabled, 1,
-      original_via_proxy, 1, received_via_proxy, 1);
+      original, 1, received, 1, original_proxy_enabled, 1,
+      received_proxy_enabled, 1, original_via_proxy, 1, received_via_proxy, 1,
+      kNumDaysInHistory);
 
   RecordContentLengthPrefs(
       kReceivedLength, kOriginalLength, false, UNKNOWN_TYPE, FakeNow());
   original[0] += kOriginalLength;
   received[0] += kReceivedLength;
   VerifyDailyDataSavingContentLengthPrefLists(
-      original, 1, received, 1,
-      original_proxy_enabled, 1, received_proxy_enabled, 1,
-      original_via_proxy, 1, received_via_proxy, 1);
+      original, 1, received, 1, original_proxy_enabled, 1,
+      received_proxy_enabled, 1, original_via_proxy, 1, received_via_proxy, 1,
+      kNumDaysInHistory);
 }
 
 TEST_F(DataReductionProxyCompressionStatsTest, RequestType) {
@@ -761,12 +766,10 @@
   int64_t original_via_data_reduction_proxy[] = {kOriginalLength, 0};
   int64_t received_via_data_reduction_proxy[] = {kReceivedLength, 0};
   VerifyDailyDataSavingContentLengthPrefLists(
-      original, 2,
-      received, 2,
-      original_with_data_reduction_proxy_enabled, 2,
+      original, 2, received, 2, original_with_data_reduction_proxy_enabled, 2,
       received_with_data_reduction_proxy_enabled, 2,
-      original_via_data_reduction_proxy, 2,
-      received_via_data_reduction_proxy, 2);
+      original_via_data_reduction_proxy, 2, received_via_data_reduction_proxy,
+      2, kNumDaysInHistory);
 
   // Proxy enabled. Not via proxy.
   RecordContentLengthPrefs(
@@ -776,12 +779,10 @@
   original_with_data_reduction_proxy_enabled[1] += kOriginalLength;
   received_with_data_reduction_proxy_enabled[1] += kReceivedLength;
   VerifyDailyDataSavingContentLengthPrefLists(
-      original, 2,
-      received, 2,
-      original_with_data_reduction_proxy_enabled, 2,
+      original, 2, received, 2, original_with_data_reduction_proxy_enabled, 2,
       received_with_data_reduction_proxy_enabled, 2,
-      original_via_data_reduction_proxy, 2,
-      received_via_data_reduction_proxy, 2);
+      original_via_data_reduction_proxy, 2, received_via_data_reduction_proxy,
+      2, kNumDaysInHistory);
 
   // Proxy enabled and via proxy.
   RecordContentLengthPrefs(
@@ -794,12 +795,10 @@
   original_via_data_reduction_proxy[1] += kOriginalLength;
   received_via_data_reduction_proxy[1] += kReceivedLength;
   VerifyDailyDataSavingContentLengthPrefLists(
-      original, 2,
-      received, 2,
-      original_with_data_reduction_proxy_enabled, 2,
+      original, 2, received, 2, original_with_data_reduction_proxy_enabled, 2,
       received_with_data_reduction_proxy_enabled, 2,
-      original_via_data_reduction_proxy, 2,
-      received_via_data_reduction_proxy, 2);
+      original_via_data_reduction_proxy, 2, received_via_data_reduction_proxy,
+      2, kNumDaysInHistory);
 
   // Proxy enabled and via proxy, with content length greater than max int32_t.
   const int64_t kBigOriginalLength = 0x300000000LL;  // 12G.
@@ -816,7 +815,7 @@
       original, 2, received, 2, original_with_data_reduction_proxy_enabled, 2,
       received_with_data_reduction_proxy_enabled, 2,
       original_via_data_reduction_proxy, 2, received_via_data_reduction_proxy,
-      2);
+      2, kNumDaysInHistory);
 }
 
 TEST_F(DataReductionProxyCompressionStatsTest, PartialDayTimeChange) {
@@ -829,9 +828,8 @@
       kReceivedLength, kOriginalLength, true, VIA_DATA_REDUCTION_PROXY,
       FakeNow());
   VerifyDailyDataSavingContentLengthPrefLists(
-      original, 2, received, 2,
-      original, 2, received, 2,
-      original, 2, received, 2);
+      original, 2, received, 2, original, 2, received, 2, original, 2, received,
+      2, kNumDaysInHistory);
 
   // Forward 10 hours, stay in the same day.
   // See kLastUpdateTime: "Now" in test is 03:45am.
@@ -842,9 +840,8 @@
   original[1] += kOriginalLength;
   received[1] += kReceivedLength;
   VerifyDailyDataSavingContentLengthPrefLists(
-      original, 2, received, 2,
-      original, 2, received, 2,
-      original, 2, received, 2);
+      original, 2, received, 2, original, 2, received, 2, original, 2, received,
+      2, kNumDaysInHistory);
 
   // Forward 11 more hours, comes to tomorrow.
   AddFakeTimeDeltaInHours(11);
@@ -854,9 +851,8 @@
   int64_t original2[] = {kOriginalLength * 2, kOriginalLength};
   int64_t received2[] = {kReceivedLength * 2, kReceivedLength};
   VerifyDailyDataSavingContentLengthPrefLists(
-      original2, 2, received2, 2,
-      original2, 2, received2, 2,
-      original2, 2, received2, 2);
+      original2, 2, received2, 2, original2, 2, received2, 2, original2, 2,
+      received2, 2, kNumDaysInHistory);
 }
 
 TEST_F(DataReductionProxyCompressionStatsTest, ForwardMultipleDays) {
@@ -881,9 +877,8 @@
   int64_t original[] = {kOriginalLength, 0, 0, kOriginalLength};
   int64_t received[] = {kReceivedLength, 0, 0, kReceivedLength};
   VerifyDailyDataSavingContentLengthPrefLists(
-      original, 4, received, 4,
-      original, 4, received, 4,
-      original, 4, received, 4);
+      original, 4, received, 4, original, 4, received, 4, original, 4, received,
+      4, kNumDaysInHistory);
 
   // Forward four more days.
   AddFakeTimeDeltaInHours(4 * 24);
@@ -897,9 +892,8 @@
       kReceivedLength, 0, 0, kReceivedLength, 0, 0, 0, kReceivedLength,
   };
   VerifyDailyDataSavingContentLengthPrefLists(
-      original2, 8, received2, 8,
-      original2, 8, received2, 8,
-      original2, 8, received2, 8);
+      original2, 8, received2, 8, original2, 8, received2, 8, original2, 8,
+      received2, 8, kNumDaysInHistory);
   histogram_tester.ExpectUniqueSample(
       "DataReductionProxy.SavingsCleared.NegativeSystemClock", false, 3);
 
@@ -911,9 +905,8 @@
   int64_t original3[] = {kOriginalLength};
   int64_t received3[] = {kReceivedLength};
   VerifyDailyDataSavingContentLengthPrefLists(
-      original3, 1, received3, 1,
-      original3, 1, received3, 1,
-      original3, 1, received3, 1);
+      original3, 1, received3, 1, original3, 1, received3, 1, original3, 1,
+      received3, 1, kNumDaysInHistory);
   histogram_tester.ExpectUniqueSample(
       "DataReductionProxy.SavingsCleared.NegativeSystemClock", false, 4);
 
@@ -923,9 +916,8 @@
       kReceivedLength, kOriginalLength, true, VIA_DATA_REDUCTION_PROXY,
       FakeNow());
   VerifyDailyDataSavingContentLengthPrefLists(
-      original3, 1, received3, 1,
-      original3, 1, received3, 1,
-      original3, 1, received3, 1);
+      original3, 1, received3, 1, original3, 1, received3, 1, original3, 1,
+      received3, 1, kNumDaysInHistory);
   histogram_tester.ExpectUniqueSample(
       "DataReductionProxy.SavingsCleared.NegativeSystemClock", false, 5);
 }
@@ -951,9 +943,8 @@
   original[0] += kOriginalLength;
   received[0] += kReceivedLength;
   VerifyDailyDataSavingContentLengthPrefLists(
-      original, 1, received, 1,
-      original, 1, received, 1,
-      original, 1, received, 1);
+      original, 1, received, 1, original, 1, received, 1, original, 1, received,
+      1, kNumDaysInHistory);
   histogram_tester.ExpectUniqueSample(
       "DataReductionProxy.SavingsCleared.NegativeSystemClock", false, 2);
 
@@ -965,9 +956,8 @@
   int64_t original2[] = {kOriginalLength * 2, kOriginalLength};
   int64_t received2[] = {kReceivedLength * 2, kReceivedLength};
   VerifyDailyDataSavingContentLengthPrefLists(
-      original2, 2, received2, 2,
-      original2, 2, received2, 2,
-      original2, 2, received2, 2);
+      original2, 2, received2, 2, original2, 2, received2, 2, original2, 2,
+      received2, 2, kNumDaysInHistory);
   histogram_tester.ExpectUniqueSample(
       "DataReductionProxy.SavingsCleared.NegativeSystemClock", false, 3);
 }
@@ -991,9 +981,8 @@
       kReceivedLength, kOriginalLength, true, VIA_DATA_REDUCTION_PROXY,
       FakeNow());
   VerifyDailyDataSavingContentLengthPrefLists(
-      original, 1, received, 1,
-      original, 1, received, 1,
-      original, 1, received, 1);
+      original, 1, received, 1, original, 1, received, 1, original, 1, received,
+      1, kNumDaysInHistory);
   histogram_tester.ExpectTotalCount(
       "DataReductionProxy.SavingsCleared.NegativeSystemClock", 2);
   histogram_tester.ExpectBucketCount(
@@ -1339,4 +1328,45 @@
   base::RunLoop().RunUntilIdle();
 }
 
+TEST_F(DataReductionProxyCompressionStatsTest, ClearDataSavingStatistics) {
+  EnableDataUsageReporting();
+  base::RunLoop().RunUntilIdle();
+
+  base::Time now = base::Time::Now();
+  base::Time fifteen_mins_ago = now - TimeDelta::FromMinutes(15);
+  // Fake record to be from 15 minutes ago so that it is flushed to storage.
+  RecordDataUsage("https://www.bar.com", 900, 1100, fifteen_mins_ago);
+
+  RecordDataUsage("https://www.foo.com", 1000, 1250, now);
+
+  const int64_t kOriginalLength = 200;
+  const int64_t kReceivedLength = 100;
+  int64_t original[] = {kOriginalLength};
+  int64_t received[] = {kReceivedLength};
+
+  RecordContentLengthPrefs(kReceivedLength, kOriginalLength, true,
+                           VIA_DATA_REDUCTION_PROXY, FakeNow());
+
+  VerifyDailyDataSavingContentLengthPrefLists(
+      original, 1, received, 1, original, 1, received, 1, original, 1, received,
+      1, kNumDaysInHistory);
+
+  ClearDataSavingStatistics();
+  base::RunLoop().RunUntilIdle();
+
+  auto expected_data_usage =
+      base::MakeUnique<std::vector<data_reduction_proxy::DataUsageBucket>>(
+          kNumExpectedBuckets);
+  DataUsageLoadVerifier verifier(std::move(expected_data_usage));
+
+  GetHistoricalDataUsage(base::Bind(&DataUsageLoadVerifier::OnLoadDataUsage,
+                                    base::Unretained(&verifier)),
+                         now);
+  base::RunLoop().RunUntilIdle();
+
+  VerifyDailyDataSavingContentLengthPrefLists(nullptr, 0, nullptr, 0, nullptr,
+                                              0, nullptr, 0, nullptr, 0,
+                                              nullptr, 0, 0);
+}
+
 }  // namespace data_reduction_proxy
diff --git a/components/exo/shell_surface.cc b/components/exo/shell_surface.cc
index 7fe5345..85a41b8 100644
--- a/components/exo/shell_surface.cc
+++ b/components/exo/shell_surface.cc
@@ -1195,8 +1195,7 @@
 
   // Allow the client to request bounds that do not fill the entire work area
   // when maximized, or the entire display when fullscreen.
-  window_state->set_allow_set_bounds_in_maximized(
-      bounds_mode_ == BoundsMode::CLIENT);
+  window_state->set_allow_set_bounds_direct(bounds_mode_ == BoundsMode::CLIENT);
 
   // Notify client of initial state if different than normal.
   if (window_state->GetStateType() != ash::wm::WINDOW_STATE_TYPE_NORMAL &&
@@ -1473,7 +1472,7 @@
   ash::wm::WindowState* window_state =
       ash::wm::GetWindowState(widget_->GetNativeWindow());
   if (window_state->IsMaximizedOrFullscreenOrPinned() &&
-      !window_state->allow_set_bounds_in_maximized()) {
+      !window_state->allow_set_bounds_direct()) {
     return;
   }
 
@@ -1642,7 +1641,7 @@
     //    not cover the entire background, e.g. overview mode).
     if ((widget_->IsFullscreen() || widget_->IsMaximized() ||
          underlay_capture_events) &&
-        ash::wm::GetWindowState(window)->allow_set_bounds_in_maximized() &&
+        ash::wm::GetWindowState(window)->allow_set_bounds_direct() &&
         window->layer()->GetTargetTransform().IsIdentity()) {
       if (shadow_underlay_in_surface_) {
         shadow_underlay_bounds = gfx::Rect(surface_->window()->bounds().size());
diff --git a/components/printing/renderer/print_web_view_helper.cc b/components/printing/renderer/print_web_view_helper.cc
index 70147aba..7f22427 100644
--- a/components/printing/renderer/print_web_view_helper.cc
+++ b/components/printing/renderer/print_web_view_helper.cc
@@ -762,7 +762,7 @@
     if (web_frame->IsWebLocalFrame())
       prev_scroll_offset_ = web_frame->GetScrollOffset();
   }
-  prev_view_size_ = web_view->size();
+  prev_view_size_ = web_view->Size();
 
   web_view->Resize(print_layout_size);
 }
diff --git a/components/safe_browsing/csd.proto b/components/safe_browsing/csd.proto
index 04316444..023abe4 100644
--- a/components/safe_browsing/csd.proto
+++ b/components/safe_browsing/csd.proto
@@ -248,19 +248,8 @@
   // a substring of page_url.
   optional string cache_expression = 3;
 
-  // If set true, we match target URL with cache expression up to both of their
-  // last /'s.
-  //
-  // Examples:
-  //    If set true, a cache_expression "foo.com/bar" will match
-  //      "foo.com/bar",
-  //      "foo.com/bar/bar.cgi",
-  //      "foo.com/bar/login.html?param=val",
-  //    but will NOT match
-  //      "foo.com",
-  //      "foo.com/abc/",
-  //      "foo.com/bar/abc/edf.cgi"
-  optional bool cache_expression_exact_match = 4;
+  // Deprecated.
+  optional bool DEPRECATED_cache_expression_exact_match = 4 [deprecated = true];
 }
 
 message ClientMalwareResponse {
diff --git a/components/safe_browsing/password_protection/password_protection_service.cc b/components/safe_browsing/password_protection/password_protection_service.cc
index 1190cde..3aee7ac 100644
--- a/components/safe_browsing/password_protection/password_protection_service.cc
+++ b/components/safe_browsing/password_protection/password_protection_service.cc
@@ -131,7 +131,7 @@
 
   std::vector<std::string> paths;
   GeneratePathVariantsWithoutQuery(url, &paths);
-  size_t max_path_depth = 0U;
+  int max_path_depth = -1;
   LoginReputationClientResponse::VerdictType most_matching_verdict =
       LoginReputationClientResponse::VERDICT_TYPE_UNSPECIFIED;
   // For all the verdicts of the same origin, we key them by |cache_expression|.
@@ -150,28 +150,18 @@
     std::string cache_expression_path =
         GetCacheExpressionPath(verdict.cache_expression());
 
-    if (verdict.cache_expression_exact_match()) {
-      if (PathMatchCacheExpressionExactly(paths, cache_expression_path)) {
-        if (!IsCacheExpired(verdict_received_time,
-                            verdict.cache_duration_sec())) {
-          out_response->CopyFrom(verdict);
-          return verdict.verdict_type();
-        } else {  // verdict expired
-          return LoginReputationClientResponse::VERDICT_TYPE_UNSPECIFIED;
-        }
-      }
-    } else {
-      // If it doesn't require exact match, we need to find the most specific
-      // match.
-      size_t path_depth = GetPathDepth(cache_expression_path);
-      if (path_depth > max_path_depth &&
-          PathVariantsMatchCacheExpression(paths, cache_expression_path) &&
-          !IsCacheExpired(verdict_received_time,
-                          verdict.cache_duration_sec())) {
-        max_path_depth = path_depth;
-        most_matching_verdict = verdict.verdict_type();
-        out_response->CopyFrom(verdict);
-      }
+    // Finds the most specific match.
+    int path_depth = static_cast<int>(GetPathDepth(cache_expression_path));
+    if (path_depth > max_path_depth &&
+        PathVariantsMatchCacheExpression(paths, cache_expression_path)) {
+      max_path_depth = path_depth;
+      // If the most matching verdict is expired, set the result to
+      // VERDICT_TYPE_UNSPECIFIED.
+      most_matching_verdict =
+          IsCacheExpired(verdict_received_time, verdict.cache_duration_sec())
+              ? LoginReputationClientResponse::VERDICT_TYPE_UNSPECIFIED
+              : verdict.verdict_type();
+      out_response->CopyFrom(verdict);
     }
   }
   return most_matching_verdict;
@@ -374,26 +364,12 @@
   return out_verdict->ParseFromString(serialized_verdict_proto);
 }
 
-bool PasswordProtectionService::PathMatchCacheExpressionExactly(
-    const std::vector<std::string>& generated_paths,
-    const std::string& cache_expression_path) {
-  size_t cache_expression_path_depth = GetPathDepth(cache_expression_path);
-  if (generated_paths.size() <= cache_expression_path_depth) {
-    return false;
-  }
-  std::string canonical_path = generated_paths.back();
-  size_t last_slash_pos = canonical_path.find_last_of("/");
-  DCHECK_NE(std::string::npos, last_slash_pos);
-  return canonical_path.substr(0, last_slash_pos + 1) == cache_expression_path;
-}
-
 bool PasswordProtectionService::PathVariantsMatchCacheExpression(
     const std::vector<std::string>& generated_paths,
     const std::string& cache_expression_path) {
   for (const auto& path : generated_paths) {
-    if (cache_expression_path == path) {
+    if (cache_expression_path == path)
       return true;
-    }
   }
   return false;
 }
diff --git a/components/safe_browsing/password_protection/password_protection_service.h b/components/safe_browsing/password_protection/password_protection_service.h
index 327bace..d025871 100644
--- a/components/safe_browsing/password_protection/password_protection_service.h
+++ b/components/safe_browsing/password_protection/password_protection_service.h
@@ -129,8 +129,6 @@
   FRIEND_TEST_ALL_PREFIXES(PasswordProtectionServiceTest,
                            TestPathVariantsMatchCacheExpression);
   FRIEND_TEST_ALL_PREFIXES(PasswordProtectionServiceTest,
-                           TestPathMatchCacheExpressionExactly);
-  FRIEND_TEST_ALL_PREFIXES(PasswordProtectionServiceTest,
                            TestCleanUpCachedVerdicts);
 
   // Overridden from history::HistoryServiceObserver.
@@ -152,10 +150,6 @@
                                 int* out_verdict_received_time,
                                 LoginReputationClientResponse* out_verdict);
 
-  static bool PathMatchCacheExpressionExactly(
-      const std::vector<std::string>& generated_paths,
-      const std::string& cache_expression_path);
-
   static bool PathVariantsMatchCacheExpression(
       const std::vector<std::string>& generated_paths,
       const std::string& cache_expression_path);
diff --git a/components/safe_browsing/password_protection/password_protection_service_unittest.cc b/components/safe_browsing/password_protection/password_protection_service_unittest.cc
index 022fa2c..e792f617c 100644
--- a/components/safe_browsing/password_protection/password_protection_service_unittest.cc
+++ b/components/safe_browsing/password_protection/password_protection_service_unittest.cc
@@ -115,13 +115,11 @@
   LoginReputationClientResponse CreateVerdictProto(
       LoginReputationClientResponse::VerdictType verdict,
       int cache_duration_sec,
-      const std::string& cache_expression,
-      bool exact_match) {
+      const std::string& cache_expression) {
     LoginReputationClientResponse verdict_proto;
     verdict_proto.set_verdict_type(verdict);
     verdict_proto.set_cache_duration_sec(cache_duration_sec);
     verdict_proto.set_cache_expression(cache_expression);
-    verdict_proto.set_cache_expression_exact_match(exact_match);
     return verdict_proto;
   }
 
@@ -162,23 +160,13 @@
         PasswordProtectionService::GetCacheExpressionPath(cache_expression));
   }
 
-  bool PathMatchCacheExpressionExactly(const GURL& url,
-                                       const std::string& cache_expression) {
-    std::vector<std::string> paths;
-    PasswordProtectionService::GeneratePathVariantsWithoutQuery(url, &paths);
-    return PasswordProtectionService::PathMatchCacheExpressionExactly(
-        paths,
-        PasswordProtectionService::GetCacheExpressionPath(cache_expression));
-  }
-
   void CacheVerdict(const GURL& url,
                     LoginReputationClientResponse::VerdictType verdict,
                     int cache_duration_sec,
                     const std::string& cache_expression,
-                    bool exact_match,
                     const base::Time& verdict_received_time) {
-    LoginReputationClientResponse response(CreateVerdictProto(
-        verdict, cache_duration_sec, cache_expression, exact_match));
+    LoginReputationClientResponse response(
+        CreateVerdictProto(verdict, cache_duration_sec, cache_expression));
     password_protection_service_->CacheVerdict(url, &response,
                                                verdict_received_time);
   }
@@ -250,7 +238,7 @@
 TEST_F(PasswordProtectionServiceTest, TestParseValidVerdictEntry) {
   base::Time expected_creation_time = base::Time::Now();
   LoginReputationClientResponse expected_verdict(CreateVerdictProto(
-      LoginReputationClientResponse::SAFE, 10 * 60, "test.com/foo", true));
+      LoginReputationClientResponse::SAFE, 10 * 60, "test.com/foo"));
   std::unique_ptr<base::DictionaryValue> valid_verdict_entry =
       PasswordProtectionService::CreateDictionaryFromVerdict(
           &expected_verdict, expected_creation_time);
@@ -267,8 +255,6 @@
   EXPECT_EQ(expected_verdict.verdict_type(), actual_verdict.verdict_type());
   EXPECT_EQ(expected_verdict.cache_expression(),
             actual_verdict.cache_expression());
-  EXPECT_EQ(expected_verdict.cache_expression_exact_match(),
-            actual_verdict.cache_expression_exact_match());
 }
 
 TEST_F(PasswordProtectionServiceTest, TestPathVariantsMatchCacheExpression) {
@@ -309,43 +295,13 @@
       GURL("http://evil.com/worse/index.html"), cache_expression_with_slash));
 }
 
-TEST_F(PasswordProtectionServiceTest, TestPathMatchCacheExpressionExactly) {
-  // Cache expression without path.
-  std::string cache_expression("www.google.com");
-  EXPECT_TRUE(PathMatchCacheExpressionExactly(GURL("https://www.google.com"),
-                                              cache_expression));
-  EXPECT_TRUE(PathMatchCacheExpressionExactly(GURL("https://www.google.com/"),
-                                              cache_expression));
-  EXPECT_TRUE(PathMatchCacheExpressionExactly(
-      GURL("https://www.google.com/index.html"), cache_expression));
-  EXPECT_FALSE(PathMatchCacheExpressionExactly(
-      GURL("https://www.google.com/abc/"), cache_expression));
-  EXPECT_FALSE(PathMatchCacheExpressionExactly(
-      GURL("https://www.google.com/def/login"), cache_expression));
-
-  // Cache expression with path.
-  cache_expression = "evil.com/bad";
-  EXPECT_FALSE(PathMatchCacheExpressionExactly(GURL("http://evil.com"),
-                                               cache_expression));
-  EXPECT_FALSE(PathMatchCacheExpressionExactly(GURL("http://evil.com/"),
-                                               cache_expression));
-  EXPECT_TRUE(PathMatchCacheExpressionExactly(GURL("http://evil.com/bad/"),
-                                              cache_expression));
-  EXPECT_TRUE(PathMatchCacheExpressionExactly(
-      GURL("http://evil.com/bad/index.html"), cache_expression));
-  EXPECT_FALSE(PathMatchCacheExpressionExactly(GURL("http://evil.com/bad/abc/"),
-                                               cache_expression));
-  EXPECT_FALSE(PathMatchCacheExpressionExactly(
-      GURL("http://evil.com/bad/abc/login.jsp"), cache_expression));
-}
-
 TEST_F(PasswordProtectionServiceTest, TestCachedVerdicts) {
   ASSERT_EQ(0U, GetStoredVerdictCount());
   // Assume each verdict has a TTL of 10 minutes.
   // Cache a verdict for http://www.test.com/foo/index.html
   CacheVerdict(GURL("http://www.test.com/foo/index.html"),
                LoginReputationClientResponse::SAFE, 10 * 60, "test.com/foo",
-               false, base::Time::Now());
+               base::Time::Now());
 
   EXPECT_EQ(1U, GetStoredVerdictCount());
 
@@ -353,7 +309,7 @@
   // override the cache.
   CacheVerdict(GURL("http://www.test.com/foo/index2.html"),
                LoginReputationClientResponse::PHISHING, 10 * 60, "test.com/foo",
-               false, base::Time::Now());
+               base::Time::Now());
   EXPECT_EQ(1U, GetStoredVerdictCount());
   LoginReputationClientResponse out_verdict;
   EXPECT_EQ(LoginReputationClientResponse::PHISHING,
@@ -365,29 +321,23 @@
   // in the given origin.
   CacheVerdict(GURL("http://www.test.com/bar/index2.html"),
                LoginReputationClientResponse::SAFE, 10 * 60, "test.com/bar",
-               false, base::Time::Now());
+               base::Time::Now());
   EXPECT_EQ(2U, GetStoredVerdictCount());
 }
 
 TEST_F(PasswordProtectionServiceTest, TestGetCachedVerdicts) {
   ASSERT_EQ(0U, GetStoredVerdictCount());
-  // Prepare 3 verdicts of the same origin with different cache expressions:
-  // (1) require exact match, not expired.
-  // (2) not require exact match, not expired.
-  // (3) require exact match, expired.
+  // Prepare 2 verdicts of the same origin with different cache expressions,
+  // one is expired, the other is not.
   base::Time now = base::Time::Now();
   CacheVerdict(GURL("http://test.com/login.html"),
-               LoginReputationClientResponse::SAFE, 10 * 60, "test.com", true,
-               now);
-  CacheVerdict(GURL("http://test.com/abc/index.jsp"),
-               LoginReputationClientResponse::LOW_REPUTATION, 10 * 60,
-               "test.com/abc", false, now);
+               LoginReputationClientResponse::SAFE, 10 * 60, "test.com", now);
   CacheVerdict(
       GURL("http://test.com/def/index.jsp"),
-      LoginReputationClientResponse::PHISHING, 10 * 60, "test.com/def", false,
+      LoginReputationClientResponse::PHISHING, 10 * 60, "test.com/def",
       base::Time::FromDoubleT(now.ToDoubleT() -
                               24.0 * 60.0 * 60.0));  // Yesterday, expired.
-  ASSERT_EQ(3U, GetStoredVerdictCount());
+  ASSERT_EQ(2U, GetStoredVerdictCount());
 
   // Return VERDICT_TYPE_UNSPECIFIED if look up for a URL with unknown origin.
   LoginReputationClientResponse actual_verdict;
@@ -395,39 +345,16 @@
             password_protection_service_->GetCachedVerdict(
                 GURL("http://www.unknown.com/"), &actual_verdict));
 
-  // Return VERDICT_TYPE_UNSPECIFIED if look up for a URL with http://test.com
-  // origin, but doesn't match any known cache_expression.
-  EXPECT_EQ(LoginReputationClientResponse::VERDICT_TYPE_UNSPECIFIED,
+  // Return SAFE if look up for a URL that matches "test.com" cache expression.
+  EXPECT_EQ(LoginReputationClientResponse::SAFE,
             password_protection_service_->GetCachedVerdict(
                 GURL("http://test.com/xyz/foo.jsp"), &actual_verdict));
 
   // Return VERDICT_TYPE_UNSPECIFIED if look up for a URL whose variants match
-  // test.com/def, since corresponding entry is expired.
+  // test.com/def, but the corresponding verdict is expired.
   EXPECT_EQ(LoginReputationClientResponse::VERDICT_TYPE_UNSPECIFIED,
             password_protection_service_->GetCachedVerdict(
                 GURL("http://test.com/def/ghi/index.html"), &actual_verdict));
-
-  // Return VERDICT_TYPE_UNSPECIFIED if look up for a URL whose variants match
-  // test.com, but not match it exactly. Return SAFE if it is a exact match of
-  // test.com.
-  EXPECT_EQ(LoginReputationClientResponse::VERDICT_TYPE_UNSPECIFIED,
-            password_protection_service_->GetCachedVerdict(
-                GURL("http://test.com/ghi/index.html"), &actual_verdict));
-  EXPECT_EQ(LoginReputationClientResponse::SAFE,
-            password_protection_service_->GetCachedVerdict(
-                GURL("http://test.com/term_of_service.html"), &actual_verdict));
-
-  // Return LOW_REPUTATION if look up for a URL whose variants match
-  // test.com/abc.
-  EXPECT_EQ(LoginReputationClientResponse::LOW_REPUTATION,
-            password_protection_service_->GetCachedVerdict(
-                GURL("http://test.com/abc/"), &actual_verdict));
-  EXPECT_EQ(LoginReputationClientResponse::LOW_REPUTATION,
-            password_protection_service_->GetCachedVerdict(
-                GURL("http://test.com/abc/bar.jsp"), &actual_verdict));
-  EXPECT_EQ(LoginReputationClientResponse::LOW_REPUTATION,
-            password_protection_service_->GetCachedVerdict(
-                GURL("http://test.com/abc/foo/bar.html"), &actual_verdict));
 }
 
 TEST_F(PasswordProtectionServiceTest, TestCleanUpCachedVerdicts) {
@@ -437,10 +364,10 @@
   base::Time now = base::Time::Now();
   CacheVerdict(GURL("http://foo.com/abc/index.jsp"),
                LoginReputationClientResponse::LOW_REPUTATION, 10 * 60,
-               "foo.com/abc", false, now);
+               "foo.com/abc", now);
   CacheVerdict(GURL("http://bar.com/index.jsp"),
                LoginReputationClientResponse::PHISHING, 10 * 60, "bar.com",
-               false, now);
+               now);
   ASSERT_EQ(2U, GetStoredVerdictCount());
 
   // Delete a bar.com URL. Corresponding content setting keyed on
@@ -505,7 +432,7 @@
 TEST_F(PasswordProtectionServiceTest, TestNoRequestSentIfVerdictAlreadyCached) {
   histograms_.ExpectTotalCount(kRequestOutcomeHistogramName, 0);
   CacheVerdict(GURL(kTargetUrl), LoginReputationClientResponse::LOW_REPUTATION,
-               600, GURL(kTargetUrl).host(), true, base::Time::Now());
+               600, GURL(kTargetUrl).host(), base::Time::Now());
   InitializeAndStartRequest(false /* match whitelist */,
                             10000 /* timeout in ms*/);
   base::RunLoop().RunUntilIdle();
@@ -568,9 +495,8 @@
   fetcher.set_status(
       net::URLRequestStatus(net::URLRequestStatus::SUCCESS, net::OK));
   fetcher.set_response_code(200);
-  LoginReputationClientResponse expected_response =
-      CreateVerdictProto(LoginReputationClientResponse::PHISHING, 600,
-                         GURL(kTargetUrl).host(), true);
+  LoginReputationClientResponse expected_response = CreateVerdictProto(
+      LoginReputationClientResponse::PHISHING, 600, GURL(kTargetUrl).host());
   fetcher.SetResponseString(expected_response.SerializeAsString());
 
   InitializeAndStartRequest(false /* match whitelist */,
@@ -584,8 +510,6 @@
   EXPECT_EQ(expected_response.verdict_type(), actual_response->verdict_type());
   EXPECT_EQ(expected_response.cache_expression(),
             actual_response->cache_expression());
-  EXPECT_EQ(expected_response.cache_expression_exact_match(),
-            actual_response->cache_expression_exact_match());
   EXPECT_EQ(expected_response.cache_duration_sec(),
             actual_response->cache_duration_sec());
 }
diff --git a/content/browser/download/download_item_impl.cc b/content/browser/download/download_item_impl.cc
index 966bbae..2d0a2c4 100644
--- a/content/browser/download/download_item_impl.cc
+++ b/content/browser/download/download_item_impl.cc
@@ -1224,6 +1224,9 @@
   download_file_ = std::move(file);
   job_ = DownloadJobFactory::CreateJob(this, std::move(req_handle),
                                        new_create_info);
+  if (job_->UsesParallelRequests())
+    RecordParallelDownloadCount(START_COUNT);
+
   deferred_interrupt_reason_ = DOWNLOAD_INTERRUPT_REASON_NONE;
 
   if (state_ == CANCELLED_INTERNAL) {
@@ -1273,6 +1276,8 @@
 
   if (state_ == INITIAL_INTERNAL) {
     RecordDownloadCount(NEW_DOWNLOAD_COUNT);
+    if (job_->UsesParallelRequests())
+      RecordParallelDownloadCount(NEW_DOWNLOAD_COUNT);
     RecordDownloadMimeType(mime_type_);
     if (!GetBrowserContext()->IsOffTheRecord()) {
       RecordDownloadCount(NEW_DOWNLOAD_COUNT_NORMAL_PROFILE);
@@ -1287,9 +1292,6 @@
   if (state_ == RESUMING_INTERNAL)
     UpdateValidatorsOnResumption(new_create_info);
 
-  if (state_ == INITIAL_INTERNAL && job_->UsesParallelRequests())
-    RecordParallelDownloadCount(START_COUNT);
-
   TransitionTo(TARGET_PENDING_INTERNAL);
 
   job_->Start();
diff --git a/content/browser/service_worker/service_worker_dispatcher_host.cc b/content/browser/service_worker/service_worker_dispatcher_host.cc
index 004b0cc5..730eb24 100644
--- a/content/browser/service_worker/service_worker_dispatcher_host.cc
+++ b/content/browser/service_worker/service_worker_dispatcher_host.cc
@@ -80,27 +80,6 @@
   return WebContents::FromRenderFrameHost(rfh);
 }
 
-std::string GetNavigationPreloadDisabledErrorMessage(
-    ServiceWorkerVersion::NavigationPreloadSupportStatus support_status) {
-  switch (support_status) {
-    case ServiceWorkerVersion::NavigationPreloadSupportStatus::SUPPORTED:
-      NOTREACHED();
-      break;
-    case ServiceWorkerVersion::NavigationPreloadSupportStatus::
-        NOT_SUPPORTED_FIELD_TRIAL_STOPPED:
-      return "The Navigation Preload Origin Trial has ended.";
-    case ServiceWorkerVersion::NavigationPreloadSupportStatus::
-        NOT_SUPPORTED_DISABLED_BY_COMMAND_LINE:
-      return "Navigation Preload is disabled by command line flag.";
-    case ServiceWorkerVersion::NavigationPreloadSupportStatus::
-        NOT_SUPPORTED_NO_VALID_ORIGIN_TRIAL_TOKEN:
-      return "The service worker script does not have a valid Navigation "
-             "Preload Origin Trial token.";
-  }
-  NOTREACHED();
-  return "";
-}
-
 }  // namespace
 
 ServiceWorkerDispatcherHost::ServiceWorkerDispatcherHost(
@@ -723,17 +702,6 @@
     return;
   }
 
-  ServiceWorkerVersion::NavigationPreloadSupportStatus support_status =
-      registration->active_version()->GetNavigationPreloadSupportStatus();
-  if (support_status !=
-      ServiceWorkerVersion::NavigationPreloadSupportStatus::SUPPORTED) {
-    Send(new ServiceWorkerMsg_EnableNavigationPreloadError(
-        thread_id, request_id, WebServiceWorkerError::kErrorTypeAbort,
-        std::string(kEnableNavigationPreloadErrorPrefix) +
-            GetNavigationPreloadDisabledErrorMessage(support_status)));
-    return;
-  }
-
   std::vector<GURL> urls = {provider_host->document_url(),
                             registration->pattern()};
   if (!ServiceWorkerUtils::AllOriginsMatchAndCanAccessServiceWorkers(urls)) {
@@ -876,16 +844,6 @@
     return;
   }
 
-  ServiceWorkerVersion::NavigationPreloadSupportStatus support_status =
-      registration->active_version()->GetNavigationPreloadSupportStatus();
-  if (support_status !=
-      ServiceWorkerVersion::NavigationPreloadSupportStatus::SUPPORTED) {
-    Send(new ServiceWorkerMsg_SetNavigationPreloadHeaderError(
-        thread_id, request_id, WebServiceWorkerError::kErrorTypeAbort,
-        std::string(kSetNavigationPreloadHeaderErrorPrefix) +
-            GetNavigationPreloadDisabledErrorMessage(support_status)));
-    return;
-  }
   std::vector<GURL> urls = {provider_host->document_url(),
                             registration->pattern()};
   if (!ServiceWorkerUtils::AllOriginsMatchAndCanAccessServiceWorkers(urls)) {
diff --git a/content/browser/service_worker/service_worker_fetch_dispatcher.cc b/content/browser/service_worker/service_worker_fetch_dispatcher.cc
index 26fadca..806edde 100644
--- a/content/browser/service_worker/service_worker_fetch_dispatcher.cc
+++ b/content/browser/service_worker/service_worker_fetch_dispatcher.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/feature_list.h"
 #include "base/memory/ptr_util.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
@@ -27,6 +28,7 @@
 #include "content/common/service_worker/service_worker_utils.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/common/browser_side_navigation_policy.h"
+#include "content/public/common/content_features.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "net/base/request_priority.h"
 #include "net/http/http_util.h"
@@ -527,12 +529,8 @@
   if (!request_->blob_uuid.empty())
     return false;
 
-  ServiceWorkerVersion::NavigationPreloadSupportStatus support_status =
-      version_->GetNavigationPreloadSupportStatus();
-  if (support_status !=
-      ServiceWorkerVersion::NavigationPreloadSupportStatus::SUPPORTED) {
+  if (!base::FeatureList::IsEnabled(features::kServiceWorkerNavigationPreload))
     return false;
-  }
 
   ResourceRequestInfoImpl* original_info =
       ResourceRequestInfoImpl::ForRequest(original_request);
diff --git a/content/browser/service_worker/service_worker_version.cc b/content/browser/service_worker/service_worker_version.cc
index f99625c3..d3385d0 100644
--- a/content/browser/service_worker/service_worker_version.cc
+++ b/content/browser/service_worker/service_worker_version.cc
@@ -12,7 +12,6 @@
 
 #include "base/command_line.h"
 #include "base/debug/alias.h"
-#include "base/feature_list.h"
 #include "base/guid.h"
 #include "base/location.h"
 #include "base/macros.h"
@@ -44,7 +43,6 @@
 #include "content/public/browser/content_browser_client.h"
 #include "content/public/browser/render_process_host.h"
 #include "content/public/common/content_client.h"
-#include "content/public/common/content_features.h"
 #include "content/public/common/content_switches.h"
 #include "content/public/common/result_codes.h"
 #include "net/http/http_response_headers.h"
@@ -1061,42 +1059,6 @@
   callback.Run(status);
 }
 
-ServiceWorkerVersion::NavigationPreloadSupportStatus
-ServiceWorkerVersion::GetNavigationPreloadSupportStatus() const {
-  // The origin trial of Navigation Preload started from M57. And the worker
-  // entry in the database written by Chrome (>= M56) must have the
-  // origin_trial_tokens field.
-  const bool has_valid_token =
-      origin_trial_tokens_ &&
-      base::ContainsKey(*origin_trial_tokens_,
-                        "ServiceWorkerNavigationPreload");
-  if (!has_valid_token) {
-    if (base::FeatureList::GetInstance()->IsFeatureOverriddenFromCommandLine(
-            features::kServiceWorkerNavigationPreload.name,
-            base::FeatureList::OVERRIDE_ENABLE_FEATURE)) {
-      return NavigationPreloadSupportStatus::SUPPORTED;
-    } else {
-      return NavigationPreloadSupportStatus::
-          NOT_SUPPORTED_NO_VALID_ORIGIN_TRIAL_TOKEN;
-    }
-  }
-  if (base::FeatureList::GetInstance()->IsFeatureOverriddenFromCommandLine(
-          features::kServiceWorkerNavigationPreload.name,
-          base::FeatureList::OVERRIDE_ENABLE_FEATURE)) {
-    return NavigationPreloadSupportStatus::SUPPORTED;
-  }
-  if (base::FeatureList::GetInstance()->IsFeatureOverriddenFromCommandLine(
-          features::kServiceWorkerNavigationPreload.name,
-          base::FeatureList::OVERRIDE_DISABLE_FEATURE)) {
-    return NavigationPreloadSupportStatus::
-        NOT_SUPPORTED_DISABLED_BY_COMMAND_LINE;
-  }
-  if (base::FeatureList::IsEnabled(features::kServiceWorkerNavigationPreload)) {
-    return NavigationPreloadSupportStatus::SUPPORTED;
-  }
-  return NavigationPreloadSupportStatus::NOT_SUPPORTED_FIELD_TRIAL_STOPPED;
-}
-
 void ServiceWorkerVersion::CountFeature(uint32_t feature) {
   if (!used_features_.insert(feature).second)
     return;
diff --git a/content/browser/service_worker/service_worker_version.h b/content/browser/service_worker/service_worker_version.h
index 6325a5f..7419d117 100644
--- a/content/browser/service_worker/service_worker_version.h
+++ b/content/browser/service_worker/service_worker_version.h
@@ -102,14 +102,6 @@
     DOES_NOT_EXIST,
   };
 
-  // Navigation Preload support status of the service worker.
-  enum class NavigationPreloadSupportStatus {
-    SUPPORTED,
-    NOT_SUPPORTED_FIELD_TRIAL_STOPPED,
-    NOT_SUPPORTED_DISABLED_BY_COMMAND_LINE,
-    NOT_SUPPORTED_NO_VALID_ORIGIN_TRIAL_TOKEN,
-  };
-
   class Listener {
    public:
     virtual void OnRunningStateChanged(ServiceWorkerVersion* version) {}
@@ -409,41 +401,6 @@
     return max_request_expiration_time_ - tick_clock_->NowTicks();
   }
 
-  // Returns the Navigation Preload support status of the service worker.
-  //  - Origin Trial: Have an effective token.
-  //                                 Command line
-  //                             Default  Enable  Disabled
-  //                   Default      A       A        B2
-  //      Field trial  Enabled      A       A        B2
-  //                   Disabled     B1      A        B2
-  //
-  //  - Origin Trial: No token.
-  //                                 Command line
-  //                             Default  Enable  Disabled
-  //                   Default      C       A        C
-  //      Field trial  Enabled      C       A        C
-  //                   Disabled     C       A        C
-  //
-  //   * A  = SUPPORTED
-  //     B1 = NOT_SUPPORTED_FIELD_TRIAL_STOPPED
-  //     B2 = NOT_SUPPORTED_DISABLED_BY_COMMAND_LINE
-  //     C  = NOT_SUPPORTED_NO_VALID_ORIGIN_TRIAL_TOKEN
-  //
-  // There are three types of behaviors:
-  //  - A: Navigation Preload related methods and attributes are available in JS
-  //       and work correctly.
-  //  - B: Navigation Preload related methods and attributes are available in
-  //       JS. But NavigationPreloadManager's enable, disable and setHeaderValue
-  //       methods always return a rejected promise. And FetchEvent's
-  //       preloadResponse attribute returns a promise which always resolve with
-  //       undefined.
-  //  - C: Navigation Preload related methods and attributes are not available
-  //       in JS.
-  // This method returns SUPPORTED only for A case.
-  // blink::OriginTrials::serviceWorkerNavigationPreloadEnabled() returns true
-  // for both A and B case. So the methods and attributes are available in JS.
-  NavigationPreloadSupportStatus GetNavigationPreloadSupportStatus() const;
-
   void CountFeature(uint32_t feature);
   void set_used_features(const std::set<uint32_t>& used_features) {
     used_features_ = used_features;
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
index b334d5b..15426d87 100644
--- a/content/child/runtime_features.cc
+++ b/content/child/runtime_features.cc
@@ -333,20 +333,8 @@
       base::FeatureList::IsEnabled(features::kWebPayments));
 #endif
 
-  // Sets the RuntimeEnabledFeatures for Navigation Preload feature only when
-  // '--enable-features' command line flag is given. While experimenting this
-  // feature using Origin-Trial, this base::Feature is enabled by default in
-  // content_features.cc. So FeatureList::IsEnabled() always returns true. But,
-  // unless the command line explicitly enabled the feature, this feature should
-  // be available only when a valid origin trial token is set. This check is
-  // done by the generated code of
-  // blink::OriginTrials::serviceWorkerNavigationPreloadEnabled(). See the
-  // comments in service_worker_version.h for the details.
-  if (base::FeatureList::GetInstance()->IsFeatureOverriddenFromCommandLine(
-          features::kServiceWorkerNavigationPreload.name,
-          base::FeatureList::OVERRIDE_ENABLE_FEATURE)) {
-    WebRuntimeFeatures::EnableServiceWorkerNavigationPreload(true);
-  }
+  WebRuntimeFeatures::EnableServiceWorkerNavigationPreload(
+      base::FeatureList::IsEnabled(features::kServiceWorkerNavigationPreload));
 
   if (base::FeatureList::IsEnabled(features::kGamepadExtensions))
     WebRuntimeFeatures::EnableGamepadExtensions(true);
diff --git a/content/public/android/java/src/org/chromium/content/browser/installedapp/InstalledAppProviderImpl.java b/content/public/android/java/src/org/chromium/content/browser/installedapp/InstalledAppProviderImpl.java
index d07abed0..6258aa3b 100644
--- a/content/public/android/java/src/org/chromium/content/browser/installedapp/InstalledAppProviderImpl.java
+++ b/content/public/android/java/src/org/chromium/content/browser/installedapp/InstalledAppProviderImpl.java
@@ -9,6 +9,7 @@
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.res.Resources;
+import android.os.AsyncTask;
 
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -68,13 +69,46 @@
 
     @Override
     public void filterInstalledApps(
-            RelatedApplication[] relatedApps, FilterInstalledAppsResponse callback) {
+            final RelatedApplication[] relatedApps, final FilterInstalledAppsResponse callback) {
         if (mFrameUrlDelegate.isIncognito()) {
             callback.call(new RelatedApplication[0]);
             return;
         }
 
-        URI frameUrl = mFrameUrlDelegate.getUrl();
+        final URI frameUrl = mFrameUrlDelegate.getUrl();
+
+        // Use an AsyncTask to execute the installed/related checks on a background thread (so as
+        // not to block the UI thread).
+        new AsyncTask<Void, Void, RelatedApplication[]>() {
+            @Override
+            protected RelatedApplication[] doInBackground(Void... unused) {
+                return filterInstalledAppsOnBackgroundThread(relatedApps, frameUrl);
+            }
+
+            @Override
+            protected void onPostExecute(RelatedApplication[] installedApps) {
+                callback.call(installedApps);
+            }
+        }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+    }
+
+    @Override
+    public void close() {}
+
+    @Override
+    public void onConnectionError(MojoException e) {}
+
+    /**
+     * Filters a list of apps, returning those that are both installed and match the origin.
+     *
+     * This method is expected to be called on a background thread (not the main UI thread).
+     *
+     * @param relatedApps A list of applications to be filtered.
+     * @param frameUrl The URL of the frame this operation was called from.
+     * @return A subsequence of applications that meet the criteria.
+     */
+    private RelatedApplication[] filterInstalledAppsOnBackgroundThread(
+            RelatedApplication[] relatedApps, URI frameUrl) {
         ArrayList<RelatedApplication> installedApps = new ArrayList<RelatedApplication>();
         PackageManager pm = mContext.getPackageManager();
         for (RelatedApplication app : relatedApps) {
@@ -92,15 +126,9 @@
 
         RelatedApplication[] installedAppsArray = new RelatedApplication[installedApps.size()];
         installedApps.toArray(installedAppsArray);
-        callback.call(installedAppsArray);
+        return installedAppsArray;
     }
 
-    @Override
-    public void close() {}
-
-    @Override
-    public void onConnectionError(MojoException e) {}
-
     /**
      * Determines whether a particular app is installed and matches the origin.
      *
diff --git a/content/public/android/junit/src/org/chromium/content/browser/installedapp/InstalledAppProviderTest.java b/content/public/android/junit/src/org/chromium/content/browser/installedapp/InstalledAppProviderTest.java
index 5c81447..26ca0e7 100644
--- a/content/public/android/junit/src/org/chromium/content/browser/installedapp/InstalledAppProviderTest.java
+++ b/content/public/android/junit/src/org/chromium/content/browser/installedapp/InstalledAppProviderTest.java
@@ -23,6 +23,7 @@
 import org.chromium.base.test.util.Feature;
 import org.chromium.installedapp.mojom.InstalledAppProvider;
 import org.chromium.installedapp.mojom.RelatedApplication;
+import org.chromium.testing.local.CustomShadowAsyncTask;
 import org.chromium.testing.local.LocalRobolectricTestRunner;
 
 import java.net.URI;
@@ -33,7 +34,7 @@
  * Ensure that the InstalledAppProvider returns the correct apps.
  */
 @RunWith(LocalRobolectricTestRunner.class)
-@Config(manifest = Config.NONE)
+@Config(manifest = Config.NONE, shadows = {CustomShadowAsyncTask.class})
 public class InstalledAppProviderTest {
     private static final String ASSET_STATEMENTS_KEY =
             InstalledAppProviderImpl.ASSET_STATEMENTS_KEY;
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc
index 68111f4..1436426c 100644
--- a/content/public/common/content_features.cc
+++ b/content/public/common/content_features.cc
@@ -202,10 +202,6 @@
                                      base::FEATURE_ENABLED_BY_DEFAULT};
 
 // Navigation preload feature of service workers.
-// Enables this base::Feature by default for Origin-Trial, but enables the
-// corresponding blink::WebRuntimeFeatures only when '--enable-features' command
-// line flag is given. See the comments in runtime_features.cc and
-// service_worker_version.h for the details.
 const base::Feature kServiceWorkerNavigationPreload{
     "ServiceWorkerNavigationPreload", base::FEATURE_ENABLED_BY_DEFAULT};
 
diff --git a/content/renderer/media/webmediaplayer_ms.cc b/content/renderer/media/webmediaplayer_ms.cc
index 98f53696..e2adb547 100644
--- a/content/renderer/media/webmediaplayer_ms.cc
+++ b/content/renderer/media/webmediaplayer_ms.cc
@@ -578,6 +578,9 @@
 bool WebMediaPlayerMS::CopyVideoTextureToPlatformTexture(
     gpu::gles2::GLES2Interface* gl,
     unsigned int texture,
+    unsigned internal_format,
+    unsigned format,
+    unsigned type,
     bool premultiply_alpha,
     bool flip_y) {
   TRACE_EVENT0("media", "WebMediaPlayerMS:copyVideoTextureToPlatformTexture");
@@ -598,7 +601,8 @@
   context_3d = media::Context3D(provider->ContextGL(), provider->GrContext());
   DCHECK(context_3d.gl);
   return video_renderer_.CopyVideoFrameTexturesToGLTexture(
-      context_3d, gl, video_frame.get(), texture, premultiply_alpha, flip_y);
+      context_3d, gl, video_frame.get(), texture, internal_format, format, type,
+      premultiply_alpha, flip_y);
 }
 
 bool WebMediaPlayerMS::TexImageImpl(TexImageFunctionID functionID,
diff --git a/content/renderer/media/webmediaplayer_ms.h b/content/renderer/media/webmediaplayer_ms.h
index a3600eb..d44d94e 100644
--- a/content/renderer/media/webmediaplayer_ms.h
+++ b/content/renderer/media/webmediaplayer_ms.h
@@ -155,6 +155,9 @@
 
   bool CopyVideoTextureToPlatformTexture(gpu::gles2::GLES2Interface* gl,
                                          unsigned int texture,
+                                         unsigned internal_format,
+                                         unsigned format,
+                                         unsigned type,
                                          bool premultiply_alpha,
                                          bool flip_y) override;
 
diff --git a/content/renderer/render_frame_impl_browsertest.cc b/content/renderer/render_frame_impl_browsertest.cc
index 3306070..8c607f67 100644
--- a/content/renderer/render_frame_impl_browsertest.cc
+++ b/content/renderer/render_frame_impl_browsertest.cc
@@ -149,7 +149,7 @@
   ViewMsg_Resize resize_message(0, resize_params);
   frame_widget()->OnMessageReceived(resize_message);
 
-  EXPECT_EQ(frame_widget()->GetWebWidget()->size(), blink::WebSize(size));
+  EXPECT_EQ(frame_widget()->GetWebWidget()->Size(), blink::WebSize(size));
 }
 
 // Verify a subframe RenderWidget properly processes a WasShown message.
diff --git a/content/renderer/render_widget_browsertest.cc b/content/renderer/render_widget_browsertest.cc
index 74b4398..3f8fcf9 100644
--- a/content/renderer/render_widget_browsertest.cc
+++ b/content/renderer/render_widget_browsertest.cc
@@ -120,7 +120,7 @@
 
 TEST_F(RenderWidgetInitialSizeTest, InitialSize) {
   EXPECT_EQ(initial_size_, widget()->size());
-  EXPECT_EQ(initial_size_, gfx::Size(widget()->GetWebWidget()->size()));
+  EXPECT_EQ(initial_size_, gfx::Size(widget()->GetWebWidget()->Size()));
   EXPECT_TRUE(next_paint_is_resize_ack());
 }
 
diff --git a/content/renderer/render_widget_fullscreen_pepper.cc b/content/renderer/render_widget_fullscreen_pepper.cc
index d107f23..c439456f 100644
--- a/content/renderer/render_widget_fullscreen_pepper.cc
+++ b/content/renderer/render_widget_fullscreen_pepper.cc
@@ -138,7 +138,7 @@
   // WebWidget API
   void Close() override { delete this; }
 
-  WebSize size() override { return size_; }
+  WebSize Size() override { return size_; }
 
   void Resize(const WebSize& size) override {
     if (!widget_->plugin() || size_ == size)
diff --git a/content/shell/test_runner/pixel_dump.cc b/content/shell/test_runner/pixel_dump.cc
index eebc4ef..6252a44 100644
--- a/content/shell/test_runner/pixel_dump.cc
+++ b/content/shell/test_runner/pixel_dump.cc
@@ -91,7 +91,7 @@
 void CapturePixelsForPrinting(std::unique_ptr<PixelsDumpRequest> dump_request) {
   dump_request->web_view->UpdateAllLifecyclePhases();
 
-  blink::WebSize page_size_in_pixels = dump_request->web_view->size();
+  blink::WebSize page_size_in_pixels = dump_request->web_view->Size();
   blink::WebFrame* web_frame = dump_request->web_view->MainFrame();
 
   int page_count = web_frame->PrintBegin(page_size_in_pixels);
diff --git a/content/shell/test_runner/web_view_test_client.cc b/content/shell/test_runner/web_view_test_client.cc
index 0969649..0baeb96 100644
--- a/content/shell/test_runner/web_view_test_client.cc
+++ b/content/shell/test_runner/web_view_test_client.cc
@@ -82,7 +82,7 @@
 
 // Simulate a print by going into print mode and then exit straight away.
 void WebViewTestClient::PrintPage(blink::WebLocalFrame* frame) {
-  blink::WebSize page_size_in_pixels = frame->View()->size();
+  blink::WebSize page_size_in_pixels = frame->View()->Size();
   if (page_size_in_pixels.IsEmpty())
     return;
   blink::WebPrintParams printParams(page_size_in_pixels);
diff --git a/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py b/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py
index 507f23b..c32c1cb1 100644
--- a/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py
+++ b/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py
@@ -44,10 +44,6 @@
     self.Flaky('conformance2/query/occlusion-query.html', bug=603168)
     self.Fail('conformance2/glsl3/tricky-loop-conditions.html', bug=483282)
 
-    # Temporary suppression; will be removed after bug fix.
-    self.Fail('conformance/textures/misc/texture-corner-case-videos.html',
-              bug=701060)
-
     # canvas.commit() promise synchronization isn't fully reliable yet.
     self.Fail('conformance/offscreencanvas/offscreencanvas-resize.html',
               bug=709484)
diff --git a/content/test/gpu/gpu_tests/webgl_conformance_expectations.py b/content/test/gpu/gpu_tests/webgl_conformance_expectations.py
index cdd41f4..a314343 100644
--- a/content/test/gpu/gpu_tests/webgl_conformance_expectations.py
+++ b/content/test/gpu/gpu_tests/webgl_conformance_expectations.py
@@ -101,10 +101,6 @@
     self.Fail('conformance/textures/misc/tex-sub-image-2d-bad-args.html',
         bug=625738)
 
-    # Temporary suppression; will be removed after bug fix.
-    self.Fail('conformance/textures/misc/texture-corner-case-videos.html',
-              bug=701060)
-
     # canvas.commit() promise synchronization isn't fully reliable yet.
     self.Fail('conformance/offscreencanvas/offscreencanvas-resize.html',
               bug=709484)
diff --git a/device/vr/vr_math.cc b/device/vr/vr_math.cc
index 77613963..cd95d5eb 100644
--- a/device/vr/vr_math.cc
+++ b/device/vr/vr_math.cc
@@ -99,36 +99,6 @@
   }
 }
 
-void PerspectiveMatrixFromView(const gfx::RectF& fov,
-                               float z_near,
-                               float z_far,
-                               Mat4f* out) {
-  const float x_left = -std::tan(fov.x() * M_PI / 180.0f) * z_near;
-  const float x_right = std::tan(fov.right() * M_PI / 180.0f) * z_near;
-  const float y_bottom = -std::tan(fov.bottom() * M_PI / 180.0f) * z_near;
-  const float y_top = std::tan(fov.y() * M_PI / 180.0f) * z_near;
-
-  DCHECK(x_left < x_right && y_bottom < y_top && z_near < z_far &&
-         z_near > 0.0f && z_far > 0.0f);
-  const float X = (2 * z_near) / (x_right - x_left);
-  const float Y = (2 * z_near) / (y_top - y_bottom);
-  const float A = (x_right + x_left) / (x_right - x_left);
-  const float B = (y_top + y_bottom) / (y_top - y_bottom);
-  const float C = (z_near + z_far) / (z_near - z_far);
-  const float D = (2 * z_near * z_far) / (z_near - z_far);
-
-  for (int i = 0; i < 4; ++i) {
-    (*out)[i].fill(0.0f);
-  }
-  (*out)[0][0] = X;
-  (*out)[0][2] = A;
-  (*out)[1][1] = Y;
-  (*out)[1][2] = B;
-  (*out)[2][2] = C;
-  (*out)[2][3] = D;
-  (*out)[3][2] = -1;
-}
-
 gfx::Vector3dF GetForwardVector(const Mat4f& matrix) {
   // Same as multiplying the inverse of the rotation component of the matrix by
   // (0, 0, -1, 0).
diff --git a/device/vr/vr_math.h b/device/vr/vr_math.h
index 72e21808..2426b3dc 100644
--- a/device/vr/vr_math.h
+++ b/device/vr/vr_math.h
@@ -25,10 +25,6 @@
 void DEVICE_VR_EXPORT MatrixMul(const Mat4f& matrix1,
                                 const Mat4f& matrix2,
                                 Mat4f* out);
-void DEVICE_VR_EXPORT PerspectiveMatrixFromView(const gfx::RectF& fov,
-                                                float z_near,
-                                                float z_far,
-                                                Mat4f* out);
 
 // Provides the direction the head is looking towards as a 3x1 unit vector.
 gfx::Vector3dF DEVICE_VR_EXPORT GetForwardVector(const Mat4f& matrix);
diff --git a/extensions/browser/api/DEPS b/extensions/browser/api/DEPS
index f3a07563..93ccbfe4 100644
--- a/extensions/browser/api/DEPS
+++ b/extensions/browser/api/DEPS
@@ -1,4 +1,5 @@
 include_rules = [
+  "+components/device_event_log",
   "+device/base",
   "+device/hid",
   "+storage/browser/fileapi",
diff --git a/extensions/browser/api/bluetooth/bluetooth_api.cc b/extensions/browser/api/bluetooth/bluetooth_api.cc
index 453ff77..2e9e40a 100644
--- a/extensions/browser/api/bluetooth/bluetooth_api.cc
+++ b/extensions/browser/api/bluetooth/bluetooth_api.cc
@@ -11,6 +11,7 @@
 #include "base/bind_helpers.h"
 #include "base/lazy_instance.h"
 #include "base/memory/ref_counted.h"
+#include "components/device_event_log/device_event_log.h"
 #include "content/public/browser/browser_thread.h"
 #include "device/bluetooth/bluetooth_adapter.h"
 #include "device/bluetooth/bluetooth_device.h"
@@ -64,6 +65,7 @@
 BluetoothAPI::BluetoothAPI(content::BrowserContext* context)
     : browser_context_(context) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  BLUETOOTH_LOG(EVENT) << "BluetoothAPI: " << browser_context_;
   EventRouter* event_router = EventRouter::Get(browser_context_);
   event_router->RegisterObserver(this,
                                  bluetooth::OnAdapterStateChanged::kEventName);
@@ -72,11 +74,14 @@
   event_router->RegisterObserver(this, bluetooth::OnDeviceRemoved::kEventName);
 }
 
-BluetoothAPI::~BluetoothAPI() {}
+BluetoothAPI::~BluetoothAPI() {
+  BLUETOOTH_LOG(EVENT) << "~BluetoothAPI: " << browser_context_;
+}
 
 BluetoothEventRouter* BluetoothAPI::event_router() {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   if (!event_router_) {
+    BLUETOOTH_LOG(EVENT) << "BluetoothAPI: Creating BluetoothEventRouter";
     event_router_.reset(new BluetoothEventRouter(browser_context_));
   }
   return event_router_.get();
@@ -84,19 +89,20 @@
 
 void BluetoothAPI::Shutdown() {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  BLUETOOTH_LOG(EVENT) << "BluetoothAPI: Shutdown";
   EventRouter::Get(browser_context_)->UnregisterObserver(this);
 }
 
 void BluetoothAPI::OnListenerAdded(const EventListenerInfo& details) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   if (event_router()->IsBluetoothSupported())
-    event_router()->OnListenerAdded();
+    event_router()->OnListenerAdded(details);
 }
 
 void BluetoothAPI::OnListenerRemoved(const EventListenerInfo& details) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   if (event_router()->IsBluetoothSupported())
-    event_router()->OnListenerRemoved();
+    event_router()->OnListenerRemoved(details);
 }
 
 namespace api {
diff --git a/extensions/browser/api/bluetooth/bluetooth_event_router.cc b/extensions/browser/api/bluetooth/bluetooth_event_router.cc
index 841935dc..dbb2385 100644
--- a/extensions/browser/api/bluetooth/bluetooth_event_router.cc
+++ b/extensions/browser/api/bluetooth/bluetooth_event_router.cc
@@ -16,6 +16,7 @@
 #include "base/stl_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
+#include "components/device_event_log/device_event_log.h"
 #include "content/public/browser/notification_details.h"
 #include "content/public/browser/notification_source.h"
 #include "device/bluetooth/bluetooth_adapter.h"
@@ -44,6 +45,11 @@
   callback.Run();
 }
 
+std::string GetListenerId(const extensions::EventListenerInfo& details) {
+  return !details.extension_id.empty() ? details.extension_id
+                                       : details.listener_url.host();
+}
+
 }  // namespace
 
 namespace bluetooth = api::bluetooth;
@@ -52,19 +58,19 @@
 BluetoothEventRouter::BluetoothEventRouter(content::BrowserContext* context)
     : browser_context_(context),
       adapter_(nullptr),
-      num_event_listeners_(0),
       extension_registry_observer_(this),
       weak_ptr_factory_(this) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  BLUETOOTH_LOG(USER) << "BluetoothEventRouter()";
   DCHECK(browser_context_);
-  registrar_.Add(this,
-                 extensions::NOTIFICATION_EXTENSION_HOST_DESTROYED,
+  registrar_.Add(this, extensions::NOTIFICATION_EXTENSION_HOST_DESTROYED,
                  content::Source<content::BrowserContext>(browser_context_));
   extension_registry_observer_.Add(ExtensionRegistry::Get(browser_context_));
 }
 
 BluetoothEventRouter::~BluetoothEventRouter() {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  BLUETOOTH_LOG(USER) << "~BluetoothEventRouter()";
   if (adapter_.get()) {
     adapter_->RemoveObserver(this);
     adapter_ = nullptr;
@@ -113,23 +119,26 @@
     const base::Closure& callback,
     const base::Closure& error_callback) {
   if (!adapter_.get()) {
-    LOG(ERROR) << "Unable to get Bluetooth adapter.";
+    BLUETOOTH_LOG(ERROR) << "Unable to get Bluetooth adapter.";
     error_callback.Run();
     return;
   }
   if (adapter != adapter_.get()) {
-    LOG(ERROR) << "Bluetooth adapter mismatch.";
+    BLUETOOTH_LOG(ERROR) << "Bluetooth adapter mismatch.";
     error_callback.Run();
     return;
   }
   DiscoverySessionMap::iterator iter =
       discovery_session_map_.find(extension_id);
   if (iter != discovery_session_map_.end() && iter->second->IsActive()) {
-    DVLOG(1) << "An active discovery session exists for extension.";
+    BLUETOOTH_LOG(DEBUG) << "An active discovery session exists for extension: "
+                         << extension_id;
     error_callback.Run();
     return;
   }
 
+  BLUETOOTH_LOG(USER) << "StartDiscoverySession: " << extension_id;
+
   // Check whether user pre set discovery filter by calling SetDiscoveryFilter
   // before. If the user has set a discovery filter then start a filtered
   // discovery session, otherwise start a regular session
@@ -162,10 +171,11 @@
   DiscoverySessionMap::iterator iter =
       discovery_session_map_.find(extension_id);
   if (iter == discovery_session_map_.end() || !iter->second->IsActive()) {
-    DVLOG(1) << "No active discovery session exists for extension.";
+    BLUETOOTH_LOG(DEBUG) << "No active discovery session exists for extension.";
     error_callback.Run();
     return;
   }
+  BLUETOOTH_LOG(USER) << "StopDiscoverySession: " << extension_id;
   device::BluetoothDiscoverySession* session = iter->second;
   session->Stop(callback, error_callback);
 }
@@ -176,7 +186,7 @@
     const std::string& extension_id,
     const base::Closure& callback,
     const base::Closure& error_callback) {
-  DVLOG(1) << "SetDiscoveryFilter";
+  BLUETOOTH_LOG(USER) << "SetDiscoveryFilter";
   if (adapter != adapter_.get()) {
     error_callback.Run();
     return;
@@ -185,8 +195,8 @@
   DiscoverySessionMap::iterator iter =
       discovery_session_map_.find(extension_id);
   if (iter == discovery_session_map_.end() || !iter->second->IsActive()) {
-    DVLOG(1) << "No active discovery session exists for extension, so caching "
-                "filter for later use.";
+    BLUETOOTH_LOG(DEBUG) << "No active discovery session exists for extension, "
+                         << "so caching filter for later use.";
     pre_set_filter_map_[extension_id] = discovery_filter.release();
     callback.Run();
     return;
@@ -216,9 +226,9 @@
 }
 
 void BluetoothEventRouter::MaybeReleaseAdapter() {
-  if (adapter_.get() && num_event_listeners_ == 0 &&
+  if (adapter_.get() && event_listener_count_.empty() &&
       pairing_delegate_map_.empty()) {
-    VLOG(1) << "Releasing Adapter.";
+    BLUETOOTH_LOG(EVENT) << "Releasing Adapter.";
     adapter_->RemoveObserver(this);
     adapter_ = nullptr;
   }
@@ -244,8 +254,8 @@
   if (base::ContainsKey(pairing_delegate_map_, extension_id)) {
     // For WebUI there may be more than one page open to the same url
     // (e.g. chrome://settings). These will share the same pairing delegate.
-    VLOG(1) << "Pairing delegate already exists for extension_id: "
-            << extension_id;
+    BLUETOOTH_LOG(EVENT) << "Pairing delegate already exists for extension_id: "
+                         << extension_id;
     return;
   }
   BluetoothApiPairingDelegate* delegate =
@@ -273,7 +283,8 @@
     bool present) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   if (adapter != adapter_.get()) {
-    DVLOG(1) << "Ignoring event for adapter " << adapter->GetAddress();
+    BLUETOOTH_LOG(DEBUG) << "Ignoring event for adapter "
+                         << adapter->GetAddress();
     return;
   }
   DispatchAdapterStateEvent();
@@ -284,7 +295,8 @@
     bool has_power) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   if (adapter != adapter_.get()) {
-    DVLOG(1) << "Ignoring event for adapter " << adapter->GetAddress();
+    BLUETOOTH_LOG(DEBUG) << "Ignoring event for adapter "
+                         << adapter->GetAddress();
     return;
   }
   DispatchAdapterStateEvent();
@@ -295,7 +307,8 @@
     bool discovering) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   if (adapter != adapter_.get()) {
-    DVLOG(1) << "Ignoring event for adapter " << adapter->GetAddress();
+    BLUETOOTH_LOG(DEBUG) << "Ignoring event for adapter "
+                         << adapter->GetAddress();
     return;
   }
 
@@ -303,8 +316,7 @@
     // If any discovery sessions are inactive, clean them up.
     DiscoverySessionMap active_session_map;
     for (DiscoverySessionMap::iterator iter = discovery_session_map_.begin();
-         iter != discovery_session_map_.end();
-         ++iter) {
+         iter != discovery_session_map_.end(); ++iter) {
       device::BluetoothDiscoverySession* session = iter->second;
       if (session->IsActive()) {
         active_session_map[iter->first] = session;
@@ -326,7 +338,8 @@
                                        device::BluetoothDevice* device) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   if (adapter != adapter_.get()) {
-    DVLOG(1) << "Ignoring event for adapter " << adapter->GetAddress();
+    BLUETOOTH_LOG(DEBUG) << "Ignoring event for adapter "
+                         << adapter->GetAddress();
     return;
   }
 
@@ -338,7 +351,8 @@
                                          device::BluetoothDevice* device) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   if (adapter != adapter_.get()) {
-    DVLOG(1) << "Ignoring event for adapter " << adapter->GetAddress();
+    BLUETOOTH_LOG(DEBUG) << "Ignoring event for adapter "
+                         << adapter->GetAddress();
     return;
   }
 
@@ -350,7 +364,8 @@
                                          device::BluetoothDevice* device) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   if (adapter != adapter_.get()) {
-    DVLOG(1) << "Ignoring event for adapter " << adapter->GetAddress();
+    BLUETOOTH_LOG(DEBUG) << "Ignoring event for adapter "
+                         << adapter->GetAddress();
     return;
   }
 
@@ -358,16 +373,29 @@
                       bluetooth::OnDeviceRemoved::kEventName, device);
 }
 
-void BluetoothEventRouter::OnListenerAdded() {
-  num_event_listeners_++;
+void BluetoothEventRouter::OnListenerAdded(const EventListenerInfo& details) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  std::string id = GetListenerId(details);
+  int count = ++event_listener_count_[id];
+  BLUETOOTH_LOG(EVENT) << "Event Listener Added: " << id << " Count: " << count;
   if (!adapter_.get())
     GetAdapter(base::Bind(&IgnoreAdapterResult));
 }
 
-void BluetoothEventRouter::OnListenerRemoved() {
-  if (num_event_listeners_ > 0)
-    num_event_listeners_--;
+void BluetoothEventRouter::OnListenerRemoved(const EventListenerInfo& details) {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  std::string id = GetListenerId(details);
+  auto iter = event_listener_count_.find(id);
+  CHECK(iter != event_listener_count_.end());
+  int count = --(iter->second);
+  BLUETOOTH_LOG(EVENT) << "Event Listener Removed: " << id
+                       << " Count: " << count;
+  if (count == 0) {
+    event_listener_count_.erase(iter);
+    // When all listeners for a listener id have been removed, remove any
+    // pairing delegate or discovery session and filters.
+    CleanUpForExtension(id);
+  }
   MaybeReleaseAdapter();
 }
 
@@ -402,6 +430,7 @@
 
 void BluetoothEventRouter::CleanUpForExtension(
     const std::string& extension_id) {
+  BLUETOOTH_LOG(DEBUG) << "CleanUpForExtension: " << extension_id;
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   RemovePairingDelegate(extension_id);
 
@@ -422,14 +451,16 @@
 }
 
 void BluetoothEventRouter::CleanUpAllExtensions() {
+  BLUETOOTH_LOG(DEBUG) << "CleanUpAllExtensions";
+
   for (auto& it : pre_set_filter_map_)
     delete it.second;
-
   pre_set_filter_map_.clear();
 
-  for (auto& it : discovery_session_map_)
+  for (auto& it : discovery_session_map_) {
+    BLUETOOTH_LOG(DEBUG) << "Clean up Discovery Session: " << it.first;
     delete it.second;
-
+  }
   discovery_session_map_.clear();
 
   PairingDelegateMap::iterator pairing_iter = pairing_delegate_map_.begin();
@@ -441,6 +472,7 @@
     const std::string& extension_id,
     const base::Closure& callback,
     std::unique_ptr<device::BluetoothDiscoverySession> discovery_session) {
+  BLUETOOTH_LOG(EVENT) << "OnStartDiscoverySession: " << extension_id;
   // Clean up any existing session instance for the extension.
   DiscoverySessionMap::iterator iter =
       discovery_session_map_.find(extension_id);
@@ -452,7 +484,7 @@
 
 void BluetoothEventRouter::OnSetDiscoveryFilter(const std::string& extension_id,
                                                 const base::Closure& callback) {
-  DVLOG(1) << "Successfully set DiscoveryFilter.";
+  BLUETOOTH_LOG(DEBUG) << "Successfully set DiscoveryFilter.";
   callback.Run();
 }
 
@@ -463,6 +495,7 @@
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   DCHECK_EQ(extensions::NOTIFICATION_EXTENSION_HOST_DESTROYED, type);
   ExtensionHost* host = content::Details<ExtensionHost>(details).ptr();
+  BLUETOOTH_LOG(DEBUG) << "Host Destroyed: " << host->extension_id();
   CleanUpForExtension(host->extension_id());
 }
 
diff --git a/extensions/browser/api/bluetooth/bluetooth_event_router.h b/extensions/browser/api/bluetooth/bluetooth_event_router.h
index 4d2fb55..ed90b1a8 100644
--- a/extensions/browser/api/bluetooth/bluetooth_event_router.h
+++ b/extensions/browser/api/bluetooth/bluetooth_event_router.h
@@ -35,6 +35,7 @@
 namespace extensions {
 class BluetoothApiPairingDelegate;
 class ExtensionRegistry;
+struct EventListenerInfo;
 
 class BluetoothEventRouter : public device::BluetoothAdapter::Observer,
                              public content::NotificationObserver,
@@ -81,10 +82,10 @@
       const base::Closure& error_callback);
 
   // Called when a bluetooth event listener is added.
-  void OnListenerAdded();
+  void OnListenerAdded(const EventListenerInfo& details);
 
   // Called when a bluetooth event listener is removed.
-  void OnListenerRemoved();
+  void OnListenerRemoved(const EventListenerInfo& details);
 
   // Adds a pairing delegate for an extension.
   void AddPairingDelegate(const std::string& extension_id);
@@ -159,7 +160,8 @@
   content::BrowserContext* browser_context_;
   scoped_refptr<device::BluetoothAdapter> adapter_;
 
-  int num_event_listeners_;
+  // Map of listener id -> listener count.
+  std::map<std::string, int> event_listener_count_;
 
   // A map that maps extension ids to BluetoothDiscoverySession pointers.
   typedef std::map<std::string, device::BluetoothDiscoverySession*>
diff --git a/extensions/browser/api/bluetooth/bluetooth_event_router_unittest.cc b/extensions/browser/api/bluetooth/bluetooth_event_router_unittest.cc
index 474a85e..533fec0 100644
--- a/extensions/browser/api/bluetooth/bluetooth_event_router_unittest.cc
+++ b/extensions/browser/api/bluetooth/bluetooth_event_router_unittest.cc
@@ -16,6 +16,7 @@
 #include "device/bluetooth/bluetooth_common.h"
 #include "device/bluetooth/bluetooth_uuid.h"
 #include "device/bluetooth/test/mock_bluetooth_adapter.h"
+#include "extensions/browser/event_router.h"
 #include "extensions/browser/extension_registry.h"
 #include "extensions/browser/extensions_test.h"
 #include "extensions/common/api/bluetooth.h"
@@ -64,19 +65,22 @@
 };
 
 TEST_F(BluetoothEventRouterTest, BluetoothEventListener) {
-  router_->OnListenerAdded();
+  EventListenerInfo info("", "", GURL(), nullptr);
+  router_->OnListenerAdded(info);
   EXPECT_CALL(*mock_adapter_, RemoveObserver(testing::_)).Times(1);
-  router_->OnListenerRemoved();
+  router_->OnListenerRemoved(info);
 }
 
 TEST_F(BluetoothEventRouterTest, MultipleBluetoothEventListeners) {
-  router_->OnListenerAdded();
-  router_->OnListenerAdded();
-  router_->OnListenerAdded();
-  router_->OnListenerRemoved();
-  router_->OnListenerRemoved();
+  // TODO(rkc/stevenjb): Test multiple extensions and WebUI.
+  EventListenerInfo info("", "", GURL(), nullptr);
+  router_->OnListenerAdded(info);
+  router_->OnListenerAdded(info);
+  router_->OnListenerAdded(info);
+  router_->OnListenerRemoved(info);
+  router_->OnListenerRemoved(info);
   EXPECT_CALL(*mock_adapter_, RemoveObserver(testing::_)).Times(1);
-  router_->OnListenerRemoved();
+  router_->OnListenerRemoved(info);
 }
 
 TEST_F(BluetoothEventRouterTest, UnloadExtension) {
diff --git a/extensions/browser/api/bluetooth/bluetooth_private_api.cc b/extensions/browser/api/bluetooth/bluetooth_private_api.cc
index 41b3f3b0..fc32507 100644
--- a/extensions/browser/api/bluetooth/bluetooth_private_api.cc
+++ b/extensions/browser/api/bluetooth/bluetooth_private_api.cc
@@ -12,6 +12,7 @@
 #include "base/lazy_instance.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
+#include "components/device_event_log/device_event_log.h"
 #include "device/bluetooth/bluetooth_adapter.h"
 #include "device/bluetooth/bluetooth_adapter_factory.h"
 #include "device/bluetooth/bluetooth_common.h"
@@ -162,18 +163,21 @@
   bool* discoverable = new_state.discoverable.get();
 
   if (name && adapter->GetName() != *name) {
+    BLUETOOTH_LOG(USER) << "SetAdapterState: name=" << *name;
     pending_properties_.insert(kNameProperty);
     adapter->SetName(*name, CreatePropertySetCallback(kNameProperty),
                      CreatePropertyErrorCallback(kNameProperty));
   }
 
   if (powered && adapter->IsPowered() != *powered) {
+    BLUETOOTH_LOG(USER) << "SetAdapterState: powerd=" << *powered;
     pending_properties_.insert(kPoweredProperty);
     adapter->SetPowered(*powered, CreatePropertySetCallback(kPoweredProperty),
                         CreatePropertyErrorCallback(kPoweredProperty));
   }
 
   if (discoverable && adapter->IsDiscoverable() != *discoverable) {
+    BLUETOOTH_LOG(USER) << "SetAdapterState: discoverable=" << *discoverable;
     pending_properties_.insert(kDiscoverableProperty);
     adapter->SetDiscoverable(
         *discoverable, CreatePropertySetCallback(kDiscoverableProperty),
@@ -190,6 +194,7 @@
 base::Closure
 BluetoothPrivateSetAdapterStateFunction::CreatePropertySetCallback(
     const std::string& property_name) {
+  BLUETOOTH_LOG(DEBUG) << "Set property succeeded: " << property_name;
   return base::Bind(
       &BluetoothPrivateSetAdapterStateFunction::OnAdapterPropertySet, this,
       property_name);
@@ -198,6 +203,7 @@
 base::Closure
 BluetoothPrivateSetAdapterStateFunction::CreatePropertyErrorCallback(
     const std::string& property_name) {
+  BLUETOOTH_LOG(DEBUG) << "Set property failed: " << property_name;
   return base::Bind(
       &BluetoothPrivateSetAdapterStateFunction::OnAdapterPropertyError, this,
       property_name);
diff --git a/extensions/browser/api/networking_private/BUILD.gn b/extensions/browser/api/networking_private/BUILD.gn
index c74f2a6..721df15 100644
--- a/extensions/browser/api/networking_private/BUILD.gn
+++ b/extensions/browser/api/networking_private/BUILD.gn
@@ -22,6 +22,7 @@
 
   deps = [
     "//extensions/common/api",
+    "//net",
   ]
 
   if (!is_chromeos && is_linux) {
diff --git a/gpu/config/BUILD.gn b/gpu/config/BUILD.gn
index fb5cfb4..f8d7af0 100644
--- a/gpu/config/BUILD.gn
+++ b/gpu/config/BUILD.gn
@@ -28,6 +28,36 @@
   ]
 }
 
+process_json_outputs = [
+  "$target_gen_dir/gpu_driver_bug_list_arrays_and_structs_autogen.h",
+  "$target_gen_dir/gpu_driver_bug_list_autogen.cc",
+  "$target_gen_dir/gpu_driver_bug_list_autogen.h",
+  "$target_gen_dir/gpu_driver_bug_list_exceptions_autogen.h",
+  "$target_gen_dir/software_rendering_list_arrays_and_structs_autogen.h",
+  "$target_gen_dir/software_rendering_list_autogen.cc",
+  "$target_gen_dir/software_rendering_list_autogen.h",
+  "$target_gen_dir/software_rendering_list_exceptions_autogen.h",
+]
+
+action("process_json") {
+  script = "process_json.py"
+
+  inputs = [
+    "gpu_driver_bug_list.json",
+    "gpu_driver_bug_workaround_type.h",
+    "gpu_feature_type.h",
+    "software_rendering_list.json",
+  ]
+
+  outputs = process_json_outputs
+
+  args = [
+    "--output-dir",
+    rebase_path("$target_gen_dir", root_build_dir),
+    "--skip-testing-data",
+  ]
+}
+
 source_set("config_sources") {
   # External code should depend on this via //gpu/config above rather than
   # depending on this directly or the component build will break.
@@ -42,10 +72,6 @@
     "gpu_control_list.h",
     "gpu_driver_bug_list.cc",
     "gpu_driver_bug_list.h",
-    "gpu_driver_bug_list_arrays_and_structs_autogen.h",
-    "gpu_driver_bug_list_autogen.cc",
-    "gpu_driver_bug_list_autogen.h",
-    "gpu_driver_bug_list_exceptions_autogen.h",
     "gpu_driver_bug_workaround_type.h",
     "gpu_driver_bug_workarounds.cc",
     "gpu_driver_bug_workarounds.h",
@@ -71,12 +97,10 @@
     "gpu_test_expectations_parser.h",
     "gpu_util.cc",
     "gpu_util.h",
-    "software_rendering_list_arrays_and_structs_autogen.h",
-    "software_rendering_list_autogen.cc",
-    "software_rendering_list_autogen.h",
-    "software_rendering_list_exceptions_autogen.h",
   ]
 
+  sources += process_json_outputs
+
   configs += [
     # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
     "//build/config/compiler:no_size_t_to_int_warning",
@@ -85,6 +109,7 @@
 
   deps = [
     ":crash_keys",
+    ":process_json",
     "//base",
     "//third_party/re2",
     "//ui/gl",
diff --git a/gpu/config/gpu_driver_bug_list_arrays_and_structs_autogen.h b/gpu/config/gpu_driver_bug_list_arrays_and_structs_autogen.h
deleted file mode 100644
index 355a9ed9..0000000
--- a/gpu/config/gpu_driver_bug_list_arrays_and_structs_autogen.h
+++ /dev/null
@@ -1,2126 +0,0 @@
-// Copyright 2017 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.
-
-// This file is auto-generated from
-//    gpu/config/process_json.py
-// It's formatted by clang-format using chromium coding style:
-//    clang-format -i -style=chromium filename
-// DO NOT EDIT!
-
-#ifndef GPU_CONFIG_GPU_DRIVER_BUG_LIST_ARRAYS_AND_STRUCTS_AUTOGEN_H_
-#define GPU_CONFIG_GPU_DRIVER_BUG_LIST_ARRAYS_AND_STRUCTS_AUTOGEN_H_
-
-#include "gpu/config/gpu_driver_bug_workaround_type.h"
-
-namespace gpu {
-const int kFeatureListForEntry1[1] = {
-    USE_CLIENT_SIDE_ARRAYS_FOR_STREAM_BUFFERS,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry1 = {
-    "Imagination.*", nullptr, nullptr, nullptr,
-};
-
-const int kFeatureListForEntry2[1] = {
-    USE_CLIENT_SIDE_ARRAYS_FOR_STREAM_BUFFERS,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry2 = {
-    "ARM.*", nullptr, nullptr, nullptr,
-};
-
-const int kFeatureListForEntry6[1] = {
-    RESTORE_SCISSOR_ON_FBO_CHANGE,
-};
-
-const uint32_t kCrBugsForEntry6[2] = {
-    165493, 222018,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry6 = {
-    "Qualcomm.*", nullptr, nullptr, nullptr,
-};
-
-const int kFeatureListForEntry7[1] = {
-    NEEDS_OFFSCREEN_BUFFER_WORKAROUND,
-};
-
-const uint32_t kCrBugsForEntry7[1] = {
-    89557,
-};
-
-const int kFeatureListForEntry17[1] = {
-    EXIT_ON_CONTEXT_LOST,
-};
-
-const int kFeatureListForEntry19[1] = {
-    DISABLE_DEPTH_TEXTURE,
-};
-
-const char* kDisabledExtensionsForEntry19[1] = {
-    "GL_OES_depth_texture",
-};
-
-const uint32_t kCrBugsForEntry19[1] = {
-    682075,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry19 = {
-    nullptr, "Adreno \\(TM\\) [23].*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry20[1] = {
-    DISABLE_EXT_DRAW_BUFFERS,
-};
-
-const uint32_t kDeviceIDsForEntry20[1] = {
-    0x0fd5,
-};
-
-const int kFeatureListForEntry21[1] = {
-    UNBIND_FBO_ON_CONTEXT_SWITCH,
-};
-
-const uint32_t kCrBugsForEntry21[2] = {
-    179250, 235935,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry21 = {
-    nullptr, nullptr, ".*GL_VIV_shader_binary.*", nullptr,
-};
-
-const int kFeatureListForEntry22[1] = {
-    UNBIND_FBO_ON_CONTEXT_SWITCH,
-};
-
-const uint32_t kCrBugsForEntry22[1] = {
-    230896,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry22 = {
-    "Imagination.*", nullptr, nullptr, nullptr,
-};
-
-const char* kDisabledExtensionsForEntry23[1] = {
-    "GL_OES_standard_derivatives",
-};
-
-const uint32_t kCrBugsForEntry23[1] = {
-    243038,
-};
-
-const uint32_t kDeviceIDsForEntry23[2] = {
-    0xa011, 0xa012,
-};
-
-const int kFeatureListForEntry24[1] = {
-    USE_NON_ZERO_SIZE_FOR_CLIENT_SIDE_STREAM_BUFFERS,
-};
-
-const uint32_t kCrBugsForEntry24[1] = {
-    231082,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry24 = {
-    "ARM.*", ".*Mali-4.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry26[1] = {
-    DISABLE_D3D11,
-};
-
-const int kFeatureListForEntry27[1] = {
-    SWIZZLE_RGBA_FOR_ASYNC_READPIXELS,
-};
-
-const uint32_t kCrBugsForEntry27[1] = {
-    265115,
-};
-
-const uint32_t kDeviceIDsForEntry27[11] = {
-    0x0402, 0x0406, 0x040a, 0x0412, 0x0416, 0x041a,
-    0x0a04, 0x0a16, 0x0a22, 0x0a26, 0x0a2a,
-};
-
-const int kFeatureListForEntry30[1] = {
-    DISABLE_MULTIMONITOR_MULTISAMPLING,
-};
-
-const uint32_t kCrBugsForEntry30[1] = {
-    237931,
-};
-
-const int kFeatureListForEntry31[1] = {
-    USE_VIRTUALIZED_GL_CONTEXTS,
-};
-
-const uint32_t kCrBugsForEntry31[5] = {
-    154715, 10068, 269829, 294779, 285292,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry31 = {
-    "ARM.*", "Mali-T.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry32[1] = {
-    USE_VIRTUALIZED_GL_CONTEXTS,
-};
-
-const uint32_t kCrBugsForEntry32[1] = {
-    179815,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry32 = {
-    "Broadcom.*", nullptr, nullptr, nullptr,
-};
-
-const int kFeatureListForEntry33[1] = {
-    USE_VIRTUALIZED_GL_CONTEXTS,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry33 = {
-    "Imagination.*", nullptr, nullptr, nullptr,
-};
-
-const int kFeatureListForEntry34[1] = {
-    USE_VIRTUALIZED_GL_CONTEXTS,
-};
-
-const uint32_t kCrBugsForEntry34[3] = {
-    179250, 229643, 230896,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry34 = {
-    nullptr, nullptr, ".*GL_VIV_shader_binary.*", nullptr,
-};
-
-const int kFeatureListForEntry35[1] = {
-    USE_VIRTUALIZED_GL_CONTEXTS,
-};
-
-const uint32_t kCrBugsForEntry35[1] = {
-    163464,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry35 = {
-    "NVIDIA.*", nullptr, nullptr, nullptr,
-};
-
-const int kFeatureListForEntry36[1] = {
-    USE_VIRTUALIZED_GL_CONTEXTS,
-};
-
-const uint32_t kCrBugsForEntry36[2] = {
-    163464, 233612,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry36 = {
-    "Qualcomm.*", nullptr, nullptr, nullptr,
-};
-
-const int kFeatureListForEntry37[1] = {
-    INIT_GL_POSITION_IN_VERTEX_SHADER,
-};
-
-const uint32_t kCrBugsForEntry37[1] = {
-    286468,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry37 = {
-    "NVIDIA.*", nullptr, nullptr, nullptr,
-};
-
-const int kFeatureListForEntry38[1] = {
-    USE_VIRTUALIZED_GL_CONTEXTS,
-};
-
-const uint32_t kCrBugsForEntry38[1] = {
-    289461,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry38 = {
-    "Qualcomm.*", nullptr, nullptr, nullptr,
-};
-
-const int kFeatureListForEntry39[1] = {
-    VALIDATE_MULTISAMPLE_BUFFER_ALLOCATION,
-};
-
-const uint32_t kCrBugsForEntry39[1] = {
-    290391,
-};
-
-const int kFeatureListForEntry40[1] = {
-    DISABLE_DISCARD_FRAMEBUFFER,
-};
-
-const uint32_t kCrBugsForEntry40[1] = {
-    290876,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry40 = {
-    "ARM.*", nullptr, nullptr, nullptr,
-};
-
-const int kFeatureListForEntry42[1] = {
-    DISABLE_DISCARD_FRAMEBUFFER,
-};
-
-const uint32_t kCrBugsForEntry42[2] = {
-    290876, 488463,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry42 = {
-    "Imagination.*", "PowerVR SGX 5.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry43[1] = {
-    DISABLE_DISCARD_FRAMEBUFFER,
-};
-
-const uint32_t kCrBugsForEntry43[1] = {
-    299494,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry43 = {
-    nullptr, nullptr, ".*GL_VIV_shader_binary.*", nullptr,
-};
-
-const int kFeatureListForEntry44[1] = {
-    DISABLE_DISCARD_FRAMEBUFFER,
-};
-
-const uint32_t kCrBugsForEntry44[1] = {
-    301988,
-};
-
-const int kFeatureListForEntry45[1] = {
-    UNFOLD_SHORT_CIRCUIT_AS_TERNARY_OPERATION,
-};
-
-const uint32_t kCrBugsForEntry45[1] = {
-    307751,
-};
-
-const int kFeatureListForEntry48[1] = {
-    FORCE_DISCRETE_GPU,
-};
-
-const uint32_t kCrBugsForEntry48[1] = {
-    113703,
-};
-
-const char* kMachineModelNameForEntry48[1] = {
-    "MacBookPro",
-};
-
-const GpuControlList::MachineModelInfo kMachineModelInfoForEntry48 = {
-    arraysize(kMachineModelNameForEntry48),  // machine model name size
-    kMachineModelNameForEntry48,             // machine model names
-    {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "8",
-     nullptr},  // machine model version
-};
-
-const GpuControlList::More kMoreForEntry48 = {
-    GpuControlList::kGLTypeNone,  // gl_type
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gl_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // pixel_shader_version
-    false,      // in_process_gpu
-    0,          // gl_reset_notification_strategy
-    true,       // direct_rendering
-    {GpuControlList::kEQ, GpuControlList::kVersionStyleNumerical, "2",
-     nullptr},  // gpu_count
-};
-
-const int kFeatureListForEntry49[1] = {
-    WAKE_UP_GPU_BEFORE_DRAWING,
-};
-
-const uint32_t kCrBugsForEntry49[1] = {
-    309734,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry49 = {
-    "Qualcomm.*", nullptr, nullptr, nullptr,
-};
-
-const int kFeatureListForEntry51[1] = {
-    TEXSUBIMAGE_FASTER_THAN_TEXIMAGE,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry51 = {
-    nullptr, "ANGLE.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry54[1] = {
-    CLEAR_UNIFORMS_BEFORE_FIRST_PROGRAM_USE,
-};
-
-const uint32_t kCrBugsForEntry54[2] = {
-    124764, 349137,
-};
-
-const int kFeatureListForEntry55[1] = {
-    COUNT_ALL_IN_VARYINGS_PACKING,
-};
-
-const uint32_t kCrBugsForEntry55[1] = {
-    333885,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry55 = {
-    "Mesa",  // driver_vendor
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry56[1] = {
-    COUNT_ALL_IN_VARYINGS_PACKING,
-};
-
-const uint32_t kCrBugsForEntry56[1] = {
-    333885,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry56 = {
-    "Mesa",  // driver_vendor
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry59[1] = {
-    DISABLE_CHROMIUM_FRAMEBUFFER_MULTISAMPLE,
-};
-
-const uint32_t kCrBugsForEntry59[1] = {
-    116370,
-};
-
-const uint32_t kDeviceIDsForEntry59[5] = {
-    0x0152, 0x0156, 0x015a, 0x0162, 0x0166,
-};
-
-const int kFeatureListForEntry64[1] = {
-    INIT_TEXTURE_MAX_ANISOTROPY,
-};
-
-const uint32_t kCrBugsForEntry64[1] = {
-    348237,
-};
-
-const int kFeatureListForEntry65[1] = {
-    INIT_VERTEX_ATTRIBUTES,
-};
-
-const uint32_t kCrBugsForEntry65[1] = {
-    351528,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry65 = {
-    "NVIDIA.*", nullptr, nullptr, nullptr,
-};
-
-const int kFeatureListForEntry68[1] = {
-    DISABLE_POST_SUB_BUFFERS_FOR_ONSCREEN_SURFACES,
-};
-
-const uint32_t kCrBugsForEntry68[1] = {
-    339493,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry68 = {
-    nullptr, ".*Mesa.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry69[3] = {
-    MAX_VARYING_VECTORS_16, MAX_VERTEX_UNIFORM_VECTORS_256,
-    MAX_FRAGMENT_UNIFORM_VECTORS_32,
-};
-
-const uint32_t kCrBugsForEntry69[1] = {
-    174845,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry69 = {
-    "osmesa",  // driver_vendor
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry70[1] = {
-    DISABLE_D3D11,
-};
-
-const uint32_t kCrBugsForEntry70[1] = {
-    349929,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry70 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kLE, GpuControlList::kVersionStyleNumerical,
-     "8.17.12.6973", nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const char* kDisabledExtensionsForEntry71[1] = {
-    "GL_OES_standard_derivatives",
-};
-
-const uint32_t kCrBugsForEntry71[1] = {
-    368005,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry71 = {
-    nullptr, nullptr, ".*GL_VIV_shader_binary.*", nullptr,
-};
-
-const int kFeatureListForEntry72[1] = {
-    USE_VIRTUALIZED_GL_CONTEXTS,
-};
-
-const uint32_t kCrBugsForEntry72[1] = {
-    369316,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry72 = {
-    "NVIDIA.*", nullptr, nullptr, nullptr,
-};
-
-const GpuControlList::More kMoreForEntry72 = {
-    GpuControlList::kGLTypeGLES,  // gl_type
-    {GpuControlList::kEQ, GpuControlList::kVersionStyleNumerical, "3.1",
-     nullptr},  // gl_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // pixel_shader_version
-    false,      // in_process_gpu
-    0,          // gl_reset_notification_strategy
-    true,       // direct_rendering
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gpu_count
-};
-
-const char* kDisabledExtensionsForEntry74[1] = {
-    "EGL_KHR_fence_sync",
-};
-
-const uint32_t kCrBugsForEntry74[2] = {
-    278606, 382686,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry74 = {
-    "Qualcomm.*", nullptr, nullptr, nullptr,
-};
-
-const char* kDisabledExtensionsForEntry75[1] = {
-    "GL_EXT_multisampled_render_to_texture",
-};
-
-const uint32_t kCrBugsForEntry75[1] = {
-    362435,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry75 = {
-    "ARM.*", ".*Mali-4.*", nullptr, nullptr,
-};
-
-const char* kDisabledExtensionsForEntry76[1] = {
-    "EGL_KHR_fence_sync",
-};
-
-const uint32_t kCrBugsForEntry76[1] = {
-    371530,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry76 = {
-    "Imagination Technologies.*", nullptr, nullptr, nullptr,
-};
-
-const char* kDisabledExtensionsForEntry77[1] = {
-    "EGL_KHR_fence_sync",
-};
-
-const uint32_t kCrBugsForEntry77[4] = {
-    378691, 373360, 371530, 398964,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry77 = {
-    "ARM.*", "Mali.*", nullptr, nullptr,
-};
-
-const GpuControlList::More kMoreForEntry77 = {
-    GpuControlList::kGLTypeGLES,  // gl_type
-    {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "3.0",
-     nullptr},  // gl_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // pixel_shader_version
-    false,      // in_process_gpu
-    0,          // gl_reset_notification_strategy
-    true,       // direct_rendering
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gpu_count
-};
-
-const char* kDisabledExtensionsForEntry78[1] = {
-    "EGL_KHR_fence_sync",
-};
-
-const uint32_t kCrBugsForEntry78[3] = {
-    378691, 373360, 371530,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry78 = {
-    "Broadcom.*", nullptr, nullptr, nullptr,
-};
-
-const int kFeatureListForEntry82[1] = {
-    DISABLE_ASYNC_READPIXELS,
-};
-
-const uint32_t kCrBugsForEntry82[1] = {
-    394510,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry82 = {
-    "Qualcomm.*", nullptr, nullptr, nullptr,
-};
-
-const int kFeatureListForEntry86[1] = {
-    DISABLE_D3D11,
-};
-
-const uint32_t kCrBugsForEntry86[1] = {
-    395861,
-};
-
-const int kFeatureListForEntry87[1] = {
-    DISABLE_D3D11,
-};
-
-const uint32_t kCrBugsForEntry87[1] = {
-    402134,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry87 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_version
-    {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "2011.1",
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry88[1] = {
-    SCALARIZE_VEC_AND_MAT_CONSTRUCTOR_ARGS,
-};
-
-const uint32_t kCrBugsForEntry88[1] = {
-    398694,
-};
-
-const int kFeatureListForEntry89[1] = {
-    REGENERATE_STRUCT_NAMES,
-};
-
-const uint32_t kCrBugsForEntry89[1] = {
-    403957,
-};
-
-const int kFeatureListForEntry90[1] = {
-    REGENERATE_STRUCT_NAMES,
-};
-
-const uint32_t kCrBugsForEntry90[1] = {
-    403957,
-};
-
-const int kFeatureListForEntry91[1] = {
-    ETC1_POWER_OF_TWO_ONLY,
-};
-
-const uint32_t kCrBugsForEntry91[2] = {
-    150500, 414816,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry91 = {
-    "Imagination.*", "PowerVR SGX 5.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry92[1] = {
-    DISABLE_D3D11,
-};
-
-const uint32_t kCrBugsForEntry92[1] = {
-    363721,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry92 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "8.16",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry93[1] = {
-    DISABLE_ASYNC_READPIXELS,
-};
-
-const uint32_t kCrBugsForEntry93[1] = {
-    340882,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry93 = {
-    "VMware.*", "Gallium.*", nullptr, nullptr,
-};
-
-const GpuControlList::More kMoreForEntry93 = {
-    GpuControlList::kGLTypeGLES,  // gl_type
-    {GpuControlList::kEQ, GpuControlList::kVersionStyleNumerical, "3.0",
-     nullptr},  // gl_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // pixel_shader_version
-    false,      // in_process_gpu
-    0,          // gl_reset_notification_strategy
-    true,       // direct_rendering
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gpu_count
-};
-
-const char* kDisabledExtensionsForEntry94[1] = {
-    "EGL_KHR_wait_sync",
-};
-
-const uint32_t kCrBugsForEntry94[1] = {
-    433057,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry94 = {
-    "NVIDIA.*", nullptr, nullptr, nullptr,
-};
-
-const GpuControlList::More kMoreForEntry94 = {
-    GpuControlList::kGLTypeGLES,  // gl_type
-    {GpuControlList::kEQ, GpuControlList::kVersionStyleNumerical, "3.1",
-     nullptr},  // gl_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // pixel_shader_version
-    false,      // in_process_gpu
-    0,          // gl_reset_notification_strategy
-    true,       // direct_rendering
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gpu_count
-};
-
-const int kFeatureListForEntry95[1] = {
-    GL_CLEAR_BROKEN,
-};
-
-const uint32_t kCrBugsForEntry95[1] = {
-    421271,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry95 = {
-    "Imagination.*", nullptr, nullptr, nullptr,
-};
-
-const GpuControlList::More kMoreForEntry95 = {
-    GpuControlList::kGLTypeGLES,  // gl_type
-    {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "3.0",
-     nullptr},  // gl_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // pixel_shader_version
-    false,      // in_process_gpu
-    0,          // gl_reset_notification_strategy
-    true,       // direct_rendering
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gpu_count
-};
-
-const int kFeatureListForEntry97[1] = {
-    DISABLE_CHROMIUM_FRAMEBUFFER_MULTISAMPLE,
-};
-
-const uint32_t kCrBugsForEntry97[1] = {
-    443517,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry97 = {
-    "Intel", "Intel.*BayTrail", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry98[1] = {
-    USE_NON_ZERO_SIZE_FOR_CLIENT_SIDE_STREAM_BUFFERS,
-};
-
-const uint32_t kCrBugsForEntry98[1] = {
-    451501,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry98 = {
-    "Imagination.*", "PowerVR SGX 540", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry99[1] = {
-    IGNORE_EGL_SYNC_FAILURES,
-};
-
-const uint32_t kCrBugsForEntry99[1] = {
-    453857,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry99 = {
-    "Qualcomm.*", nullptr, nullptr, nullptr,
-};
-
-const int kFeatureListForEntry100[1] = {
-    DISABLE_D3D11,
-};
-
-const uint32_t kCrBugsForEntry100[1] = {
-    451420,
-};
-
-const int kFeatureListForEntry101[1] = {
-    DISABLE_POST_SUB_BUFFERS_FOR_ONSCREEN_SURFACES,
-};
-
-const uint32_t kCrBugsForEntry101[1] = {
-    457511,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry101 = {
-    "ARM.*", "Mali-T.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry102[1] = {
-    UNBIND_ATTACHMENTS_ON_BOUND_RENDER_FBO_DELETE,
-};
-
-const uint32_t kCrBugsForEntry102[1] = {
-    457027,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry102 = {
-    nullptr, "Adreno \\(TM\\) 4.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry103[1] = {
-    DISABLE_DISCARD_FRAMEBUFFER,
-};
-
-const uint32_t kCrBugsForEntry103[1] = {
-    443060,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry103 = {
-    nullptr, "Adreno \\(TM\\) 4.*", nullptr, nullptr,
-};
-
-const char* kDisabledExtensionsForEntry104[1] = {
-    "GL_EXT_occlusion_query_boolean",
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry104 = {
-    "Imagination.*", "PowerVR Rogue Han", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry105[1] = {
-    DISABLE_DISCARD_FRAMEBUFFER,
-};
-
-const uint32_t kCrBugsForEntry105[2] = {
-    449488, 451230,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry105 = {
-    nullptr, "Mali-4.*", nullptr, nullptr,
-};
-
-const char* kDisabledExtensionsForEntry106[1] = {
-    "GL_EXT_occlusion_query_boolean",
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry106 = {
-    "Imagination.*", "PowerVR SGX 544", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry107[1] = {
-    AVOID_EGL_IMAGE_TARGET_TEXTURE_REUSE,
-};
-
-const char* kDisabledExtensionsForEntry107[1] = {
-    "EGL_KHR_wait_sync",
-};
-
-const uint32_t kCrBugsForEntry107[1] = {
-    480992,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry107 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kBetween, GpuControlList::kVersionStyleNumerical, "1.3",
-     "1.4"},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry107 = {
-    "Imagination.*", "PowerVR Rogue.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry108[1] = {
-    DISABLE_GL_RGB_FORMAT,
-};
-
-const uint32_t kCrBugsForEntry108[1] = {
-    449150,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry108 = {
-    "ARM.*", ".*Mali-4.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry109[1] = {
-    USE_VIRTUALIZED_GL_CONTEXTS,
-};
-
-const uint32_t kCrBugsForEntry109[2] = {
-    449150, 514510,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry109 = {
-    "NVIDIA.*", nullptr, nullptr, nullptr,
-};
-
-const char* kDisabledExtensionsForEntry110[1] = {
-    "EGL_KHR_wait_sync",
-};
-
-const uint32_t kCrBugsForEntry110[1] = {
-    482298,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry110 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "95",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry110 = {
-    "Qualcomm.*", "Adreno \\(TM\\) [23].*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry111[1] = {
-    DISABLE_DISCARD_FRAMEBUFFER,
-};
-
-const uint32_t kCrBugsForEntry111[1] = {
-    485814,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry111 = {
-    "ARM.*", ".*Mali-4.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry112[1] = {
-    DISABLE_TIMESTAMP_QUERIES,
-};
-
-const uint32_t kCrBugsForEntry112[1] = {
-    477514,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry112 = {
-    "Qualcomm.*", "Adreno \\(TM\\) 3.*", nullptr, nullptr,
-};
-
-const char* kDisabledExtensionsForEntry113[1] = {
-    "GL_EXT_disjoint_timer_query",
-};
-
-const uint32_t kCrBugsForEntry113[1] = {
-    477514,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry113 = {
-    nullptr, "Adreno \\(TM\\) 4.*", nullptr, nullptr,
-};
-
-const char* kDisabledExtensionsForEntry115[1] = {
-    "GL_EXT_disjoint_timer_query",
-};
-
-const uint32_t kCrBugsForEntry115[1] = {
-    462553,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry115 = {
-    "NVIDIA.*", nullptr, nullptr, nullptr,
-};
-
-const GpuControlList::More kMoreForEntry115 = {
-    GpuControlList::kGLTypeGLES,  // gl_type
-    {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, "3.0",
-     nullptr},  // gl_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // pixel_shader_version
-    false,      // in_process_gpu
-    0,          // gl_reset_notification_strategy
-    true,       // direct_rendering
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gpu_count
-};
-
-const char* kDisabledExtensionsForEntry116[1] = {
-    "GL_EXT_multisampled_render_to_texture",
-};
-
-const uint32_t kCrBugsForEntry116[1] = {
-    490379,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry116 = {
-    nullptr, "Adreno \\(TM\\) 4.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry117[1] = {
-    DISABLE_BLEND_EQUATION_ADVANCED,
-};
-
-const uint32_t kCrBugsForEntry117[1] = {
-    488485,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry117 = {
-    "Qualcomm.*", ".*4\\d\\d", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry118[1] = {
-    REMOVE_POW_WITH_CONSTANT_EXPONENT,
-};
-
-const uint32_t kCrBugsForEntry118[1] = {
-    477306,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry118 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kLE, GpuControlList::kVersionStyleNumerical, "331",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry118 = {
-    "NVIDIA.*", nullptr, nullptr, nullptr,
-};
-
-const int kFeatureListForEntry119[1] = {
-    EXIT_ON_CONTEXT_LOST,
-};
-
-const uint32_t kCrBugsForEntry119[1] = {
-    496438,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry119 = {
-    "ARM.*", ".*Mali-4.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry120[1] = {
-    MAX_COPY_TEXTURE_CHROMIUM_SIZE_262144,
-};
-
-const uint32_t kCrBugsForEntry120[1] = {
-    498443,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry120 = {
-    "ARM.*", "Mali.*", nullptr, nullptr,
-};
-
-const char* kDisabledExtensionsForEntry123[1] = {
-    "GL_NV_path_rendering",
-};
-
-const uint32_t kCrBugsForEntry123[1] = {
-    344330,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry123 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "346",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry125[1] = {
-    UNBIND_EGL_CONTEXT_TO_FLUSH_DRIVER_CACHES,
-};
-
-const uint32_t kCrBugsForEntry125[1] = {
-    509727,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry125 = {
-    nullptr, "Adreno.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry126[1] = {
-    DISABLE_PROGRAM_CACHE,
-};
-
-const uint32_t kCrBugsForEntry126[1] = {
-    510637,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry126 = {
-    nullptr, "Adreno \\(TM\\) 3.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry127[1] = {
-    FORCE_CUBE_MAP_POSITIVE_X_ALLOCATION,
-};
-
-const uint32_t kCrBugsForEntry127[1] = {
-    518889,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry127 = {
-    nullptr, "Adreno.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry128[1] = {
-    FORCE_CUBE_MAP_POSITIVE_X_ALLOCATION,
-};
-
-const uint32_t kCrBugsForEntry128[1] = {
-    518889,
-};
-
-const int kFeatureListForEntry129[1] = {
-    FORCE_CUBE_COMPLETE,
-};
-
-const uint32_t kCrBugsForEntry129[1] = {
-    518889,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry129 = {
-    nullptr, "ANGLE.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry130[1] = {
-    FORCE_CUBE_COMPLETE,
-};
-
-const uint32_t kCrBugsForEntry130[1] = {
-    518889,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry130 = {
-    "NVIDIA.*", nullptr, nullptr, nullptr,
-};
-
-const int kFeatureListForEntry131[1] = {
-    DISABLE_TEXTURE_STORAGE,
-};
-
-const uint32_t kCrBugsForEntry131[1] = {
-    521904,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry131 = {
-    "Mesa",  // driver_vendor
-    {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "10.6",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry132[1] = {
-    MSAA_IS_SLOW,
-};
-
-const uint32_t kCrBugsForEntry132[1] = {
-    527565,
-};
-
-const int kFeatureListForEntry133[1] = {
-    MAX_COPY_TEXTURE_CHROMIUM_SIZE_1048576,
-};
-
-const uint32_t kCrBugsForEntry133[1] = {
-    542478,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry133 = {
-    nullptr, "Adreno.*", nullptr, nullptr,
-};
-
-const char* kDisabledExtensionsForEntry134[1] = {
-    "GL_EXT_sRGB",
-};
-
-const uint32_t kCrBugsForEntry134[1] = {
-    550292,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry134 = {
-    "Qualcomm.*", nullptr, nullptr, nullptr,
-};
-
-const int kFeatureListForEntry135[2] = {
-    DISABLE_OVERLAY_CA_LAYERS, DISABLE_POST_SUB_BUFFERS_FOR_ONSCREEN_SURFACES,
-};
-
-const uint32_t kCrBugsForEntry135[1] = {
-    543324,
-};
-
-const uint32_t kDeviceIDsForEntry135[4] = {
-    0x9440, 0x944a, 0x9488, 0x9490,
-};
-
-const int kFeatureListForEntry136[1] = {
-    SET_ZERO_LEVEL_BEFORE_GENERATING_MIPMAP,
-};
-
-const uint32_t kCrBugsForEntry136[1] = {
-    560499,
-};
-
-const int kFeatureListForEntry137[1] = {
-    FORCE_CUBE_COMPLETE,
-};
-
-const uint32_t kCrBugsForEntry137[1] = {
-    518889,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry137 = {
-    "NVIDIA.*", nullptr, nullptr, nullptr,
-};
-
-const char* kDisabledExtensionsForEntry138[1] = {
-    "GL_NV_path_rendering",
-};
-
-const uint32_t kCrBugsForEntry138[1] = {
-    344330,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry138 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "346",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry138 = {
-    "NVIDIA.*", nullptr, nullptr, nullptr,
-};
-
-const char* kDisabledExtensionsForEntry139[1] = {
-    "GL_EXT_texture_rg",
-};
-
-const uint32_t kCrBugsForEntry139[1] = {
-    545904,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry139 = {
-    "Mesa",  // driver_vendor
-    {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "11.1",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const GpuControlList::More kMoreForEntry139 = {
-    GpuControlList::kGLTypeGLES,  // gl_type
-    {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "3.0",
-     nullptr},  // gl_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // pixel_shader_version
-    false,      // in_process_gpu
-    0,          // gl_reset_notification_strategy
-    true,       // direct_rendering
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gpu_count
-};
-
-const char* kDisabledExtensionsForEntry140[1] = {
-    "GL_EXT_sRGB",
-};
-
-const uint32_t kCrBugsForEntry140[2] = {
-    550292, 565179,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry140 = {
-    "Qualcomm", "Adreno \\(TM\\) 4.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry141[1] = {
-    DISABLE_DISCARD_FRAMEBUFFER,
-};
-
-const uint32_t kCrBugsForEntry141[1] = {
-    570897,
-};
-
-const int kFeatureListForEntry142[1] = {
-    PACK_PARAMETERS_WORKAROUND_WITH_PACK_BUFFER,
-};
-
-const uint32_t kCrBugsForEntry142[1] = {
-    563714,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry142 = {
-    "NVIDIA.*", nullptr, nullptr, nullptr,
-};
-
-const char* kDisabledExtensionsForEntry143[2] = {
-    "GL_ARB_timer_query", "GL_EXT_timer_query",
-};
-
-const uint32_t kCrBugsForEntry143[2] = {
-    540543, 576991,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry143 = {
-    "Mesa",  // driver_vendor
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry144[1] = {
-    PACK_PARAMETERS_WORKAROUND_WITH_PACK_BUFFER,
-};
-
-const uint32_t kCrBugsForEntry144[1] = {
-    563714,
-};
-
-const int kFeatureListForEntry145[1] = {
-    BROKEN_EGL_IMAGE_REF_COUNTING,
-};
-
-const uint32_t kCrBugsForEntry145[1] = {
-    585250,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry145 = {
-    "Qualcomm.*", "Adreno \\(TM\\) [45].*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry147[1] = {
-    MAX_TEXTURE_SIZE_LIMIT_4096,
-};
-
-const int kFeatureListForEntry148[1] = {
-    SURFACE_TEXTURE_CANT_DETACH,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry148 = {
-    nullptr, ".*Mali-4.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry149[1] = {
-    DISABLE_DIRECT_COMPOSITION,
-};
-
-const uint32_t kCrBugsForEntry149[1] = {
-    588588,
-};
-
-const int kFeatureListForEntry150[1] = {
-    UNPACK_ALIGNMENT_WORKAROUND_WITH_UNPACK_BUFFER,
-};
-
-const uint32_t kCrBugsForEntry150[1] = {
-    563714,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry150 = {
-    "NVIDIA.*", nullptr, nullptr, nullptr,
-};
-
-const int kFeatureListForEntry151[1] = {
-    UNPACK_ALIGNMENT_WORKAROUND_WITH_UNPACK_BUFFER,
-};
-
-const uint32_t kCrBugsForEntry151[1] = {
-    563714,
-};
-
-const int kFeatureListForEntry152[1] = {
-    USE_INTERMEDIARY_FOR_COPY_TEXTURE_IMAGE,
-};
-
-const uint32_t kCrBugsForEntry152[1] = {
-    581777,
-};
-
-const char* kDisabledExtensionsForEntry153[1] = {
-    "GL_EXT_multisampled_render_to_texture",
-};
-
-const uint32_t kCrBugsForEntry153[1] = {
-    594016,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry153 = {
-    "Vivante Corporation", "Vivante GC1000", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry156[1] = {
-    AVDA_DONT_COPY_PICTURES,
-};
-
-const uint32_t kCrBugsForEntry156[1] = {
-    598474,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry156 = {
-    "Imagination.*", "PowerVR SGX 544MP", nullptr, nullptr,
-};
-
-const char* kDisabledExtensionsForEntry157[1] = {
-    "EGL_KHR_fence_sync",
-};
-
-const uint32_t kCrBugsForEntry157[1] = {
-    589814,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry157 = {
-    "ARM.*", "Mali.*", nullptr, nullptr,
-};
-
-const char* kMachineModelNameForEntry157[2] = {
-    "SM-G361H", "SM-G531H",
-};
-
-const GpuControlList::MachineModelInfo kMachineModelInfoForEntry157 = {
-    arraysize(kMachineModelNameForEntry157),  // machine model name size
-    kMachineModelNameForEntry157,             // machine model names
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // machine model version
-};
-
-const GpuControlList::More kMoreForEntry157 = {
-    GpuControlList::kGLTypeGLES,  // gl_type
-    {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "3.0",
-     nullptr},  // gl_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // pixel_shader_version
-    false,      // in_process_gpu
-    0,          // gl_reset_notification_strategy
-    true,       // direct_rendering
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gpu_count
-};
-
-const int kFeatureListForEntry158[1] = {
-    DISABLE_OVERLAY_CA_LAYERS,
-};
-
-const uint32_t kCrBugsForEntry158[1] = {
-    580616,
-};
-
-const uint32_t kDeviceIDsForEntry158[1] = {
-    0x0fd5,
-};
-
-const int kFeatureListForEntry159[1] = {
-    DISABLE_DISCARD_FRAMEBUFFER,
-};
-
-const uint32_t kCrBugsForEntry159[1] = {
-    570897,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry159 = {
-    "NVIDIA.*", nullptr, nullptr, nullptr,
-};
-
-const int kFeatureListForEntry160[1] = {
-    DISABLE_DISCARD_FRAMEBUFFER,
-};
-
-const uint32_t kCrBugsForEntry160[1] = {
-    601753,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry160 = {
-    "NVIDIA.*", nullptr, nullptr, nullptr,
-};
-
-const GpuControlList::More kMoreForEntry160 = {
-    GpuControlList::kGLTypeGLES,  // gl_type
-    {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, "3.0",
-     nullptr},  // gl_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // pixel_shader_version
-    false,      // in_process_gpu
-    0,          // gl_reset_notification_strategy
-    true,       // direct_rendering
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gpu_count
-};
-
-const int kFeatureListForEntry161[1] = {
-    DISABLE_DISCARD_FRAMEBUFFER,
-};
-
-const uint32_t kCrBugsForEntry161[1] = {
-    601753,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry161 = {
-    "NVIDIA.*", nullptr, nullptr, nullptr,
-};
-
-const GpuControlList::More kMoreForEntry161 = {
-    GpuControlList::kGLTypeGLES,  // gl_type
-    {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, "3.0",
-     nullptr},  // gl_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // pixel_shader_version
-    false,      // in_process_gpu
-    0,          // gl_reset_notification_strategy
-    true,       // direct_rendering
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gpu_count
-};
-
-const int kFeatureListForEntry162[1] = {
-    DISABLE_DISCARD_FRAMEBUFFER,
-};
-
-const uint32_t kCrBugsForEntry162[1] = {
-    601753,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry162 = {
-    "NVIDIA.*", nullptr, nullptr, nullptr,
-};
-
-const GpuControlList::More kMoreForEntry162 = {
-    GpuControlList::kGLTypeGLES,  // gl_type
-    {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, "3.0",
-     nullptr},  // gl_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // pixel_shader_version
-    false,      // in_process_gpu
-    0,          // gl_reset_notification_strategy
-    true,       // direct_rendering
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gpu_count
-};
-
-const int kFeatureListForEntry163[1] = {
-    DISABLE_WEBGL_RGB_MULTISAMPLING_USAGE,
-};
-
-const uint32_t kCrBugsForEntry163[1] = {
-    607130,
-};
-
-const int kFeatureListForEntry164[1] = {
-    DISABLE_MULTISAMPLING_COLOR_MASK_USAGE,
-};
-
-const uint32_t kCrBugsForEntry164[1] = {
-    595948,
-};
-
-const uint32_t kDeviceIDsForEntry164[4] = {
-    0x6720, 0x6740, 0x6741, 0x68b8,
-};
-
-const int kFeatureListForEntry165[1] = {
-    UNPACK_OVERLAPPING_ROWS_SEPARATELY_UNPACK_BUFFER,
-};
-
-const uint32_t kCrBugsForEntry165[1] = {
-    596774,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry165 = {
-    "NVIDIA.*", nullptr, nullptr, nullptr,
-};
-
-const int kFeatureListForEntry167[1] = {
-    AVDA_DONT_COPY_PICTURES,
-};
-
-const uint32_t kCrBugsForEntry167[1] = {
-    610516,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry167 = {
-    "ARM.*", ".*Mali-4.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry168[1] = {
-    DISABLE_POST_SUB_BUFFERS_FOR_ONSCREEN_SURFACES,
-};
-
-const uint32_t kCrBugsForEntry168[1] = {
-    613722,
-};
-
-const int kFeatureListForEntry169[1] = {
-    USE_SHADOWED_TEX_LEVEL_PARAMS,
-};
-
-const uint32_t kCrBugsForEntry169[1] = {
-    610153,
-};
-
-const int kFeatureListForEntry170[1] = {
-    DISABLE_DXGI_ZERO_COPY_VIDEO,
-};
-
-const uint32_t kCrBugsForEntry170[1] = {
-    621190,
-};
-
-const int kFeatureListForEntry172[1] = {
-    DISABLE_FRAMEBUFFER_CMAA,
-};
-
-const uint32_t kCrBugsForEntry172[1] = {
-    535198,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry172Exception0 = {
-    "Mesa",  // driver_vendor
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry172Exception0 = {
-    "Intel.*", ".*Intel.*(Braswell|Broadwell|Skylake).*", nullptr, nullptr,
-};
-
-const GpuControlList::More kMoreForEntry172Exception0 = {
-    GpuControlList::kGLTypeGLES,  // gl_type
-    {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, "3.1",
-     nullptr},  // gl_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // pixel_shader_version
-    false,      // in_process_gpu
-    0,          // gl_reset_notification_strategy
-    true,       // direct_rendering
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gpu_count
-};
-
-const char* kDisabledExtensionsForEntry174[1] = {
-    "GL_EXT_multisampled_render_to_texture",
-};
-
-const uint32_t kCrBugsForEntry174[1] = {
-    612474,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry174 = {
-    nullptr, "Adreno \\(TM\\) 4.*", nullptr, nullptr,
-};
-
-const char* kDisabledExtensionsForEntry175[1] = {
-    "GL_EXT_multisampled_render_to_texture",
-};
-
-const uint32_t kCrBugsForEntry175[1] = {
-    612474,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry175 = {
-    nullptr, "Adreno \\(TM\\) 5.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry176[1] = {
-    GL_CLEAR_BROKEN,
-};
-
-const uint32_t kCrBugsForEntry176[1] = {
-    633634,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry176 = {
-    "Intel", ".*Atom.*x5/x7.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry177[1] = {
-    GET_FRAG_DATA_INFO_BUG,
-};
-
-const uint32_t kCrBugsForEntry177[1] = {
-    638340,
-};
-
-const int kFeatureListForEntry178[1] = {
-    DISABLE_BLEND_EQUATION_ADVANCED,
-};
-
-const uint32_t kCrBugsForEntry178[1] = {
-    639470,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry178 = {
-    "Intel.*", "Intel(R) HD Graphics for BayTrail", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry179[1] = {
-    REBIND_TRANSFORM_FEEDBACK_BEFORE_RESUME,
-};
-
-const uint32_t kCrBugsForEntry179[1] = {
-    638514,
-};
-
-const int kFeatureListForEntry180[1] = {
-    AVOID_ONE_COMPONENT_EGL_IMAGES,
-};
-
-const uint32_t kCrBugsForEntry180[2] = {
-    579060, 632461,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry180 = {
-    "Imagination.*", "PowerVR .*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry181[1] = {
-    RESET_BASE_MIPMAP_LEVEL_BEFORE_TEXSTORAGE,
-};
-
-const uint32_t kCrBugsForEntry181[1] = {
-    640506,
-};
-
-const int kFeatureListForEntry182[1] = {
-    GL_CLEAR_BROKEN,
-};
-
-const uint32_t kCrBugsForEntry182[1] = {
-    638691,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry182 = {
-    nullptr, ".*Mali-T7.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry183[1] = {
-    EMULATE_ABS_INT_FUNCTION,
-};
-
-const uint32_t kCrBugsForEntry183[1] = {
-    642227,
-};
-
-const int kFeatureListForEntry184[1] = {
-    REWRITE_TEXELFETCHOFFSET_TO_TEXELFETCH,
-};
-
-const uint32_t kCrBugsForEntry184[1] = {
-    642605,
-};
-
-const int kFeatureListForEntry185[1] = {
-    DISABLE_DXGI_ZERO_COPY_VIDEO,
-};
-
-const uint32_t kCrBugsForEntry185[1] = {
-    635319,
-};
-
-const int kFeatureListForEntry186[1] = {
-    ADD_AND_TRUE_TO_LOOP_CONDITION,
-};
-
-const uint32_t kCrBugsForEntry186[1] = {
-    644669,
-};
-
-const int kFeatureListForEntry187[1] = {
-    REWRITE_DO_WHILE_LOOPS,
-};
-
-const uint32_t kCrBugsForEntry187[1] = {
-    644669,
-};
-
-const int kFeatureListForEntry188[1] = {
-    DISABLE_AV_SAMPLE_BUFFER_DISPLAY_LAYER,
-};
-
-const uint32_t kCrBugsForEntry188[1] = {
-    632178,
-};
-
-const int kFeatureListForEntry189[1] = {
-    INIT_ONE_CUBE_MAP_LEVEL_BEFORE_COPYTEXIMAGE,
-};
-
-const uint32_t kCrBugsForEntry189[1] = {
-    648197,
-};
-
-const int kFeatureListForEntry190[1] = {
-    DISABLE_POST_SUB_BUFFERS_FOR_ONSCREEN_SURFACES,
-};
-
-const uint32_t kCrBugsForEntry190[1] = {
-    339493,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry190 = {
-    nullptr, nullptr, nullptr, ".*Mesa.*",
-};
-
-const int kFeatureListForEntry191[1] = {
-    EMULATE_ISNAN_ON_FLOAT,
-};
-
-const uint32_t kCrBugsForEntry191[1] = {
-    650547,
-};
-
-const uint32_t kDeviceIDsForEntry191[25] = {
-    0x1902, 0x1906, 0x190A, 0x190B, 0x190E, 0x1912, 0x1913, 0x1915, 0x1916,
-    0x1917, 0x191A, 0x191B, 0x191D, 0x191E, 0x1921, 0x1923, 0x1926, 0x1927,
-    0x192A, 0x192B, 0x192D, 0x1932, 0x193A, 0x193B, 0x193D,
-};
-
-const int kFeatureListForEntry192[1] = {
-    DECODE_ENCODE_SRGB_FOR_GENERATEMIPMAP,
-};
-
-const uint32_t kCrBugsForEntry192[1] = {
-    634519,
-};
-
-const GpuControlList::More kMoreForEntry192 = {
-    GpuControlList::kGLTypeGL,  // gl_type
-    {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "4.4",
-     nullptr},  // gl_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // pixel_shader_version
-    false,      // in_process_gpu
-    0,          // gl_reset_notification_strategy
-    true,       // direct_rendering
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gpu_count
-};
-
-const int kFeatureListForEntry193[1] = {
-    DECODE_ENCODE_SRGB_FOR_GENERATEMIPMAP,
-};
-
-const uint32_t kCrBugsForEntry193[1] = {
-    634519,
-};
-
-const int kFeatureListForEntry194[1] = {
-    INIT_TWO_CUBE_MAP_LEVELS_BEFORE_COPYTEXIMAGE,
-};
-
-const uint32_t kCrBugsForEntry194[1] = {
-    648197,
-};
-
-const int kFeatureListForEntry195[1] = {
-    USE_UNUSED_STANDARD_SHARED_BLOCKS,
-};
-
-const uint32_t kCrBugsForEntry195[1] = {
-    618464,
-};
-
-const int kFeatureListForEntry196[1] = {
-    UNPACK_IMAGE_HEIGHT_WORKAROUND_WITH_UNPACK_BUFFER,
-};
-
-const uint32_t kCrBugsForEntry196[1] = {
-    654258,
-};
-
-const int kFeatureListForEntry197[1] = {
-    ADJUST_SRC_DST_REGION_FOR_BLITFRAMEBUFFER,
-};
-
-const uint32_t kCrBugsForEntry197[1] = {
-    644740,
-};
-
-const int kFeatureListForEntry198[1] = {
-    ADJUST_SRC_DST_REGION_FOR_BLITFRAMEBUFFER,
-};
-
-const uint32_t kCrBugsForEntry198[1] = {
-    664740,
-};
-
-const int kFeatureListForEntry199[1] = {
-    ADJUST_SRC_DST_REGION_FOR_BLITFRAMEBUFFER,
-};
-
-const uint32_t kCrBugsForEntry199[1] = {
-    664740,
-};
-
-const int kFeatureListForEntry200[1] = {
-    DISABLE_ES3_GL_CONTEXT,
-};
-
-const uint32_t kCrBugsForEntry200[1] = {
-    657925,
-};
-
-const int kFeatureListForEntry201[2] = {
-    REMOVE_INVARIANT_AND_CENTROID_FOR_ESSL3,
-    DONT_REMOVE_INVARIANT_FOR_FRAGMENT_INPUT,
-};
-
-const uint32_t kCrBugsForEntry201[2] = {
-    659326, 639760,
-};
-
-const int kFeatureListForEntry202[1] = {
-    REMOVE_INVARIANT_AND_CENTROID_FOR_ESSL3,
-};
-
-const uint32_t kCrBugsForEntry202[2] = {
-    639760, 641129,
-};
-
-const int kFeatureListForEntry203[1] = {
-    REMOVE_INVARIANT_AND_CENTROID_FOR_ESSL3,
-};
-
-const uint32_t kCrBugsForEntry203[2] = {
-    639760, 641129,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry203 = {
-    "Mesa",  // driver_vendor
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const GpuControlList::More kMoreForEntry203 = {
-    GpuControlList::kGLTypeNone,  // gl_type
-    {GpuControlList::kEQ, GpuControlList::kVersionStyleNumerical, "3.3",
-     nullptr},  // gl_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // pixel_shader_version
-    false,      // in_process_gpu
-    0,          // gl_reset_notification_strategy
-    true,       // direct_rendering
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gpu_count
-};
-
-const char* kDisabledExtensionsForEntry205[1] = {
-    "GL_EXT_multisampled_render_to_texture",
-};
-
-const uint32_t kCrBugsForEntry205[1] = {
-    663811,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry205 = {
-    nullptr, "Adreno \\(TM\\) 5.*", nullptr, nullptr,
-};
-
-const char* kDisabledExtensionsForEntry206[2] = {
-    "GL_KHR_blend_equation_advanced", "GL_KHR_blend_equation_advanced_coherent",
-};
-
-const uint32_t kCrBugsForEntry206[1] = {
-    661715,
-};
-
-const int kFeatureListForEntry207[1] = {
-    DECODE_ENCODE_SRGB_FOR_GENERATEMIPMAP,
-};
-
-const uint32_t kCrBugsForEntry207[1] = {
-    634519,
-};
-
-const int kFeatureListForEntry208[1] = {
-    DECODE_ENCODE_SRGB_FOR_GENERATEMIPMAP,
-};
-
-const uint32_t kCrBugsForEntry208[1] = {
-    634519,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry208 = {
-    nullptr, "ANGLE.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry209[1] = {
-    DECODE_ENCODE_SRGB_FOR_GENERATEMIPMAP,
-};
-
-const uint32_t kCrBugsForEntry209[1] = {
-    634519,
-};
-
-const int kFeatureListForEntry210[1] = {
-    DECODE_ENCODE_SRGB_FOR_GENERATEMIPMAP,
-};
-
-const uint32_t kCrBugsForEntry210[1] = {
-    634519,
-};
-
-const int kFeatureListForEntry211[1] = {
-    REWRITE_FLOAT_UNARY_MINUS_OPERATOR,
-};
-
-const uint32_t kCrBugsForEntry211[1] = {
-    672380,
-};
-
-const int kFeatureListForEntry212[1] = {
-    DISABLE_PROGRAM_CACHING_FOR_TRANSFORM_FEEDBACK,
-};
-
-const uint32_t kCrBugsForEntry212[1] = {
-    658074,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry212 = {
-    nullptr, "Adreno.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry213[1] = {
-    USE_VIRTUALIZED_GL_CONTEXTS,
-};
-
-const uint32_t kCrBugsForEntry213[1] = {
-    678508,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry213 = {
-    "ARM.*", "Mali-G.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry214[2] = {
-    DISABLE_CHROMIUM_FRAMEBUFFER_MULTISAMPLE,
-    FORCE_UPDATE_SCISSOR_STATE_WHEN_BINDING_FBO0,
-};
-
-const uint32_t kCrBugsForEntry214[5] = {
-    670607, 682075, 696627, 698197, 707839,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry214 = {
-    nullptr, "Adreno \\(TM\\) 3.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry215[1] = {
-    USE_GPU_DRIVER_WORKAROUND_FOR_TESTING,
-};
-
-const uint32_t kCrBugsForEntry215[1] = {
-    682912,
-};
-
-const uint32_t kDeviceIDsForEntry215[1] = {
-    0xbad9,
-};
-
-const int kFeatureListForEntry216[1] = {
-    PACK_PARAMETERS_WORKAROUND_WITH_PACK_BUFFER,
-};
-
-const uint32_t kCrBugsForEntry216[1] = {
-    698926,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry216 = {
-    "NVIDIA.*", nullptr, nullptr, nullptr,
-};
-
-const int kFeatureListForEntry217[1] = {
-    UNPACK_ALIGNMENT_WORKAROUND_WITH_UNPACK_BUFFER,
-};
-
-const uint32_t kCrBugsForEntry217[1] = {
-    698926,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry217 = {
-    "NVIDIA.*", nullptr, nullptr, nullptr,
-};
-
-const int kFeatureListForEntry219[1] = {
-    DISABLE_DXGI_ZERO_COPY_VIDEO,
-};
-
-const uint32_t kCrBugsForEntry219[1] = {
-    623029,
-};
-
-const int kFeatureListForEntry220[1] = {
-    DISABLE_NV12_DXGI_VIDEO,
-};
-
-const uint32_t kCrBugsForEntry220[1] = {
-    644293,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry220 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "21.19.519.2",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry221[1] = {
-    DISALLOW_LARGE_INSTANCED_DRAW,
-};
-
-const uint32_t kCrBugsForEntry221[1] = {
-    701682,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry221 = {
-    nullptr, "Adreno \\(TM\\) 3.*", nullptr, nullptr,
-};
-
-}  // namespace gpu
-
-#endif  // GPU_CONFIG_GPU_DRIVER_BUG_LIST_ARRAYS_AND_STRUCTS_AUTOGEN_H_
diff --git a/gpu/config/gpu_driver_bug_list_autogen.cc b/gpu/config/gpu_driver_bug_list_autogen.cc
deleted file mode 100644
index afdc5f9..0000000
--- a/gpu/config/gpu_driver_bug_list_autogen.cc
+++ /dev/null
@@ -1,4528 +0,0 @@
-// Copyright 2017 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.
-
-// This file is auto-generated from
-//    gpu/config/process_json.py
-// It's formatted by clang-format using chromium coding style:
-//    clang-format -i -style=chromium filename
-// DO NOT EDIT!
-
-#include "gpu/config/gpu_driver_bug_list_autogen.h"
-
-#include "gpu/config/gpu_driver_bug_list_arrays_and_structs_autogen.h"
-#include "gpu/config/gpu_driver_bug_list_exceptions_autogen.h"
-
-namespace gpu {
-
-const char kGpuDriverBugListVersion[] = "10.2";
-
-const size_t kGpuDriverBugListEntryCount = 171;
-const GpuControlList::Entry kGpuDriverBugListEntries[171] = {
-    {
-        1,  // id
-        "Imagination driver doesn't like uploading lots of buffer data "
-        "constantly",
-        arraysize(kFeatureListForEntry1),  // features size
-        kFeatureListForEntry1,             // features
-        0,                                 // DisabledExtensions size
-        nullptr,                           // DisabledExtensions
-        0,                                 // CrBugs size
-        nullptr,                           // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry1,                   // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        2,  // id
-        "ARM driver doesn't like uploading lots of buffer data constantly",
-        arraysize(kFeatureListForEntry2),  // features size
-        kFeatureListForEntry2,             // features
-        0,                                 // DisabledExtensions size
-        nullptr,                           // DisabledExtensions
-        0,                                 // CrBugs size
-        nullptr,                           // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry2,                   // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        6,  // id
-        "Restore scissor on FBO change with Qualcomm GPUs on older versions of "
-        "Android",
-        arraysize(kFeatureListForEntry6),  // features size
-        kFeatureListForEntry6,             // features
-        0,                                 // DisabledExtensions size
-        nullptr,                           // DisabledExtensions
-        arraysize(kCrBugsForEntry6),       // CrBugs size
-        kCrBugsForEntry6,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "4.3",
-             nullptr},                              // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry6,                   // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        7,  // id
-        "Work around a bug in offscreen buffers on NVIDIA GPUs on Macs",
-        arraysize(kFeatureListForEntry7),  // features size
-        kFeatureListForEntry7,             // features
-        0,                                 // DisabledExtensions size
-        nullptr,                           // DisabledExtensions
-        arraysize(kCrBugsForEntry7),       // CrBugs size
-        kCrBugsForEntry7,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        17,  // id
-        "Some drivers are unable to reset the D3D device in the GPU process "
-        "sandbox",
-        arraysize(kFeatureListForEntry17),  // features size
-        kFeatureListForEntry17,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        0,                                  // CrBugs size
-        nullptr,                            // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        19,  // id
-        "Disable depth textures on older Qualcomm GPUs (legacy blacklist "
-        "entry, original problem unclear)",
-        arraysize(kFeatureListForEntry19),         // features size
-        kFeatureListForEntry19,                    // features
-        arraysize(kDisabledExtensionsForEntry19),  // DisabledExtensions size
-        kDisabledExtensionsForEntry19,             // DisabledExtensions
-        arraysize(kCrBugsForEntry19),              // CrBugs size
-        kCrBugsForEntry19,                         // CrBugs
-        {
-            GpuControlList::kOsAny,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry19,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        20,  // id
-        "Disable EXT_draw_buffers on GeForce GT 650M on Mac OS X due to driver "
-        "bugs",
-        arraysize(kFeatureListForEntry20),  // features size
-        kFeatureListForEntry20,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        0,                                  // CrBugs size
-        nullptr,                            // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                    // os_version
-            0x10de,                                // vendor_id
-            arraysize(kDeviceIDsForEntry20),       // DeviceIDs size
-            kDeviceIDsForEntry20,                  // DeviceIDs
-            GpuControlList::kMultiGpuCategoryAny,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,    // multi_gpu_style
-            nullptr,                               // driver info
-            nullptr,                               // GL strings
-            nullptr,                               // machine model info
-            nullptr,                               // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        21,  // id
-        "Vivante GPUs are buggy with context switching",
-        arraysize(kFeatureListForEntry21),  // features size
-        kFeatureListForEntry21,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry21),       // CrBugs size
-        kCrBugsForEntry21,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry21,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        22,  // id
-        "Imagination drivers are buggy with context switching",
-        arraysize(kFeatureListForEntry22),  // features size
-        kFeatureListForEntry22,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry22),       // CrBugs size
-        kCrBugsForEntry22,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry22,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        23,  // id
-        "Disable OES_standard_derivative on Intel Pineview M Gallium drivers",
-        0,                                         // feature size
-        nullptr,                                   // features
-        arraysize(kDisabledExtensionsForEntry23),  // DisabledExtensions size
-        kDisabledExtensionsForEntry23,             // DisabledExtensions
-        arraysize(kCrBugsForEntry23),              // CrBugs size
-        kCrBugsForEntry23,                         // CrBugs
-        {
-            GpuControlList::kOsChromeOS,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            arraysize(kDeviceIDsForEntry23),        // DeviceIDs size
-            kDeviceIDsForEntry23,                   // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        24,  // id
-        "Mali-4xx drivers throw an error when a buffer object's size is set to "
-        "0",
-        arraysize(kFeatureListForEntry24),  // features size
-        kFeatureListForEntry24,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry24),       // CrBugs size
-        kCrBugsForEntry24,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry24,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        26,  // id
-        "Disable use of Direct3D 11 on Windows Vista and lower",
-        arraysize(kFeatureListForEntry26),  // features size
-        kFeatureListForEntry26,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        0,                                  // CrBugs size
-        nullptr,                            // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kLE, GpuControlList::kVersionStyleNumerical, "6.0",
-             nullptr},                              // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        27,  // id
-        "Async Readpixels with GL_BGRA format is broken on Haswell chipset on "
-        "Macs",
-        arraysize(kFeatureListForEntry27),  // features size
-        kFeatureListForEntry27,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry27),       // CrBugs size
-        kCrBugsForEntry27,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            arraysize(kDeviceIDsForEntry27),        // DeviceIDs size
-            kDeviceIDsForEntry27,                   // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        30,  // id
-        "Multisampling is buggy on OSX when multiple monitors are connected",
-        arraysize(kFeatureListForEntry30),  // features size
-        kFeatureListForEntry30,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry30),       // CrBugs size
-        kCrBugsForEntry30,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        31,  // id
-        "The Mali-Txxx driver does not guarantee flush ordering",
-        arraysize(kFeatureListForEntry31),  // features size
-        kFeatureListForEntry31,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry31),       // CrBugs size
-        kCrBugsForEntry31,                  // CrBugs
-        {
-            GpuControlList::kOsAny,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry31,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        32,  // id
-        "Share groups are not working on (older?) Broadcom drivers",
-        arraysize(kFeatureListForEntry32),  // features size
-        kFeatureListForEntry32,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry32),       // CrBugs size
-        kCrBugsForEntry32,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry32,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        33,  // id
-        "Share group-related crashes and poor context switching perf on "
-        "Imagination drivers",
-        arraysize(kFeatureListForEntry33),  // features size
-        kFeatureListForEntry33,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        0,                                  // CrBugs size
-        nullptr,                            // CrBugs
-        {
-            GpuControlList::kOsAny,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry33,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        34,  // id
-        "Share groups are not working on (older?) Vivante drivers",
-        arraysize(kFeatureListForEntry34),  // features size
-        kFeatureListForEntry34,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry34),       // CrBugs size
-        kCrBugsForEntry34,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry34,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        35,  // id
-        "Share-group related crashes on older NVIDIA drivers",
-        arraysize(kFeatureListForEntry35),  // features size
-        kFeatureListForEntry35,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry35),       // CrBugs size
-        kCrBugsForEntry35,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "4.3",
-             nullptr},                              // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry35,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        36,  // id
-        "Share-group related crashes on Qualcomm drivers",
-        arraysize(kFeatureListForEntry36),  // features size
-        kFeatureListForEntry36,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry36),       // CrBugs size
-        kCrBugsForEntry36,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "4.3",
-             nullptr},                              // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry36,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        37,  // id
-        "Program link fails in NVIDIA Linux if gl_Position is not set",
-        arraysize(kFeatureListForEntry37),  // features size
-        kFeatureListForEntry37,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry37),       // CrBugs size
-        kCrBugsForEntry37,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry37,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        38,  // id
-        "Non-virtual contexts on Qualcomm sometimes cause out-of-order frames",
-        arraysize(kFeatureListForEntry38),  // features size
-        kFeatureListForEntry38,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry38),       // CrBugs size
-        kCrBugsForEntry38,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry38,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        39,  // id
-        "Multisampled renderbuffer allocation must be validated on some Macs",
-        arraysize(kFeatureListForEntry39),  // features size
-        kFeatureListForEntry39,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry39),       // CrBugs size
-        kCrBugsForEntry39,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical,
-             "10.10", nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        40,  // id
-        "Framebuffer discarding causes flickering on old ARM drivers",
-        arraysize(kFeatureListForEntry40),  // features size
-        kFeatureListForEntry40,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry40),       // CrBugs size
-        kCrBugsForEntry40,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "4.4",
-             nullptr},                              // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry40,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        42,  // id
-        "Framebuffer discarding causes flickering on older IMG drivers",
-        arraysize(kFeatureListForEntry42),  // features size
-        kFeatureListForEntry42,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry42),       // CrBugs size
-        kCrBugsForEntry42,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry42,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        43,  // id
-        "Framebuffer discarding doesn't accept trivial attachments on Vivante",
-        arraysize(kFeatureListForEntry43),  // features size
-        kFeatureListForEntry43,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry43),       // CrBugs size
-        kCrBugsForEntry43,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry43,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        44,  // id
-        "Framebuffer discarding causes jumpy scrolling on Mali drivers",
-        arraysize(kFeatureListForEntry44),  // features size
-        kFeatureListForEntry44,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry44),       // CrBugs size
-        kCrBugsForEntry44,                  // CrBugs
-        {
-            GpuControlList::kOsChromeOS,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        45,  // id
-        "Unfold short circuit on Mac OS X",
-        arraysize(kFeatureListForEntry45),  // features size
-        kFeatureListForEntry45,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry45),       // CrBugs size
-        kCrBugsForEntry45,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        48,  // id
-        "Force to use discrete GPU on older MacBookPro models",
-        arraysize(kFeatureListForEntry48),  // features size
-        kFeatureListForEntry48,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry48),       // CrBugs size
-        kCrBugsForEntry48,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            &kMachineModelInfoForEntry48,           // machine model info
-            &kMoreForEntry48,                       // more data
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        49,  // id
-        "The first draw operation from an idle state is slow",
-        arraysize(kFeatureListForEntry49),  // features size
-        kFeatureListForEntry49,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry49),       // CrBugs size
-        kCrBugsForEntry49,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry49,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        51,  // id
-        "TexSubImage is faster for full uploads on ANGLE",
-        arraysize(kFeatureListForEntry51),  // features size
-        kFeatureListForEntry51,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        0,                                  // CrBugs size
-        nullptr,                            // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry51,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        54,  // id
-        "Clear uniforms before first program use on all platforms",
-        arraysize(kFeatureListForEntry54),  // features size
-        kFeatureListForEntry54,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry54),       // CrBugs size
-        kCrBugsForEntry54,                  // CrBugs
-        {
-            GpuControlList::kOsAny,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        arraysize(kExceptionsForEntry54),  // exceptions count
-        kExceptionsForEntry54,             // exceptions
-    },
-    {
-        55,  // id
-        "Mesa drivers in Linux handle varyings without static use incorrectly",
-        arraysize(kFeatureListForEntry55),  // features size
-        kFeatureListForEntry55,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry55),       // CrBugs size
-        kCrBugsForEntry55,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry55,                 // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        56,  // id
-        "Mesa drivers in ChromeOS handle varyings without static use "
-        "incorrectly",
-        arraysize(kFeatureListForEntry56),  // features size
-        kFeatureListForEntry56,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry56),       // CrBugs size
-        kCrBugsForEntry56,                  // CrBugs
-        {
-            GpuControlList::kOsChromeOS,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry56,                 // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        59,  // id
-        "Multisampling is buggy in Intel IvyBridge",
-        arraysize(kFeatureListForEntry59),  // features size
-        kFeatureListForEntry59,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry59),       // CrBugs size
-        kCrBugsForEntry59,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            arraysize(kDeviceIDsForEntry59),        // DeviceIDs size
-            kDeviceIDsForEntry59,                   // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        64,  // id
-        "Linux AMD drivers incorrectly return initial value of 1 for "
-        "TEXTURE_MAX_ANISOTROPY",
-        arraysize(kFeatureListForEntry64),  // features size
-        kFeatureListForEntry64,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry64),       // CrBugs size
-        kCrBugsForEntry64,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x1002,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        65,  // id
-        "Linux NVIDIA drivers don't have the correct defaults for vertex "
-        "attributes",
-        arraysize(kFeatureListForEntry65),  // features size
-        kFeatureListForEntry65,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry65),       // CrBugs size
-        kCrBugsForEntry65,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry65,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        68,  // id
-        "Disable partial swaps on Mesa drivers (detected with GL_RENDERER)",
-        arraysize(kFeatureListForEntry68),  // features size
-        kFeatureListForEntry68,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry68),       // CrBugs size
-        kCrBugsForEntry68,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry68,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        69,  // id
-        "Some shaders in Skia need more than the min available vertex and "
-        "fragment shader uniform vectors in case of OSMesa",
-        arraysize(kFeatureListForEntry69),  // features size
-        kFeatureListForEntry69,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry69),       // CrBugs size
-        kCrBugsForEntry69,                  // CrBugs
-        {
-            GpuControlList::kOsAny,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry69,                 // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        70,  // id
-        "Disable D3D11 on older nVidia drivers",
-        arraysize(kFeatureListForEntry70),  // features size
-        kFeatureListForEntry70,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry70),       // CrBugs size
-        kCrBugsForEntry70,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry70,                 // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        71,  // id
-        "Vivante's support of OES_standard_derivatives is buggy",
-        0,                                         // feature size
-        nullptr,                                   // features
-        arraysize(kDisabledExtensionsForEntry71),  // DisabledExtensions size
-        kDisabledExtensionsForEntry71,             // DisabledExtensions
-        arraysize(kCrBugsForEntry71),              // CrBugs size
-        kCrBugsForEntry71,                         // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry71,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        72,  // id
-        "Use virtual contexts on NVIDIA with GLES 3.1",
-        arraysize(kFeatureListForEntry72),  // features size
-        kFeatureListForEntry72,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry72),       // CrBugs size
-        kCrBugsForEntry72,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry72,                  // GL strings
-            nullptr,                                // machine model info
-            &kMoreForEntry72,                       // more data
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        74,  // id
-        "Testing EGL sync fences was broken on most Qualcomm drivers",
-        0,                                         // feature size
-        nullptr,                                   // features
-        arraysize(kDisabledExtensionsForEntry74),  // DisabledExtensions size
-        kDisabledExtensionsForEntry74,             // DisabledExtensions
-        arraysize(kCrBugsForEntry74),              // CrBugs size
-        kCrBugsForEntry74,                         // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kLE, GpuControlList::kVersionStyleNumerical,
-             "4.4.4", nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry74,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        75,  // id
-        "Mali-4xx support of EXT_multisampled_render_to_texture is buggy on "
-        "Android < 4.3",
-        0,                                         // feature size
-        nullptr,                                   // features
-        arraysize(kDisabledExtensionsForEntry75),  // DisabledExtensions size
-        kDisabledExtensionsForEntry75,             // DisabledExtensions
-        arraysize(kCrBugsForEntry75),              // CrBugs size
-        kCrBugsForEntry75,                         // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "4.3",
-             nullptr},                              // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry75,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        76,  // id
-        "Testing EGL sync fences was broken on IMG",
-        0,                                         // feature size
-        nullptr,                                   // features
-        arraysize(kDisabledExtensionsForEntry76),  // DisabledExtensions size
-        kDisabledExtensionsForEntry76,             // DisabledExtensions
-        arraysize(kCrBugsForEntry76),              // CrBugs size
-        kCrBugsForEntry76,                         // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kLE, GpuControlList::kVersionStyleNumerical,
-             "4.4.4", nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry76,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        77,  // id
-        "Testing fences was broken on Mali ES2 drivers",
-        0,                                         // feature size
-        nullptr,                                   // features
-        arraysize(kDisabledExtensionsForEntry77),  // DisabledExtensions size
-        kDisabledExtensionsForEntry77,             // DisabledExtensions
-        arraysize(kCrBugsForEntry77),              // CrBugs size
-        kCrBugsForEntry77,                         // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kLE, GpuControlList::kVersionStyleNumerical,
-             "4.4.4", nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry77,                  // GL strings
-            nullptr,                                // machine model info
-            &kMoreForEntry77,                       // more data
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        78,  // id
-        "Testing fences was broken on Broadcom drivers",
-        0,                                         // feature size
-        nullptr,                                   // features
-        arraysize(kDisabledExtensionsForEntry78),  // DisabledExtensions size
-        kDisabledExtensionsForEntry78,             // DisabledExtensions
-        arraysize(kCrBugsForEntry78),              // CrBugs size
-        kCrBugsForEntry78,                         // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kLE, GpuControlList::kVersionStyleNumerical,
-             "4.4.4", nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry78,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        82,  // id
-        "PBO mappings segfault on certain older Qualcomm drivers",
-        arraysize(kFeatureListForEntry82),  // features size
-        kFeatureListForEntry82,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry82),       // CrBugs size
-        kCrBugsForEntry82,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "4.3",
-             nullptr},                              // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry82,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        86,  // id
-        "Disable use of Direct3D 11 on Matrox video cards",
-        arraysize(kFeatureListForEntry86),  // features size
-        kFeatureListForEntry86,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry86),       // CrBugs size
-        kCrBugsForEntry86,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x102b,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        87,  // id
-        "Disable use of Direct3D 11 on older AMD drivers",
-        arraysize(kFeatureListForEntry87),  // features size
-        kFeatureListForEntry87,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry87),       // CrBugs size
-        kCrBugsForEntry87,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x1002,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry87,                 // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        88,  // id
-        "Always rewrite vec/mat constructors to be consistent",
-        arraysize(kFeatureListForEntry88),  // features size
-        kFeatureListForEntry88,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry88),       // CrBugs size
-        kCrBugsForEntry88,                  // CrBugs
-        {
-            GpuControlList::kOsAny,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        89,  // id
-        "Mac drivers handle struct scopes incorrectly",
-        arraysize(kFeatureListForEntry89),  // features size
-        kFeatureListForEntry89,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry89),       // CrBugs size
-        kCrBugsForEntry89,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        90,  // id
-        "Linux AMD drivers handle struct scopes incorrectly",
-        arraysize(kFeatureListForEntry90),  // features size
-        kFeatureListForEntry90,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry90),       // CrBugs size
-        kCrBugsForEntry90,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x1002,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        91,  // id
-        "ETC1 non-power-of-two sized textures crash older IMG drivers",
-        arraysize(kFeatureListForEntry91),  // features size
-        kFeatureListForEntry91,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry91),       // CrBugs size
-        kCrBugsForEntry91,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry91,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        92,  // id
-        "Old Intel drivers cannot reliably support D3D11",
-        arraysize(kFeatureListForEntry92),  // features size
-        kFeatureListForEntry92,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry92),       // CrBugs size
-        kCrBugsForEntry92,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry92,                 // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        93,  // id
-        "The GL implementation on the Android emulator has problems with PBOs.",
-        arraysize(kFeatureListForEntry93),  // features size
-        kFeatureListForEntry93,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry93),       // CrBugs size
-        kCrBugsForEntry93,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry93,                  // GL strings
-            nullptr,                                // machine model info
-            &kMoreForEntry93,                       // more data
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        94,  // id
-        "Disable EGL_KHR_wait_sync on NVIDIA with GLES 3.1",
-        0,                                         // feature size
-        nullptr,                                   // features
-        arraysize(kDisabledExtensionsForEntry94),  // DisabledExtensions size
-        kDisabledExtensionsForEntry94,             // DisabledExtensions
-        arraysize(kCrBugsForEntry94),              // CrBugs size
-        kCrBugsForEntry94,                         // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kLE, GpuControlList::kVersionStyleNumerical,
-             "5.0.2", nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry94,                  // GL strings
-            nullptr,                                // machine model info
-            &kMoreForEntry94,                       // more data
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        95,  // id
-        "glClear does not always work on these drivers",
-        arraysize(kFeatureListForEntry95),  // features size
-        kFeatureListForEntry95,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry95),       // CrBugs size
-        kCrBugsForEntry95,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry95,                  // GL strings
-            nullptr,                                // machine model info
-            &kMoreForEntry95,                       // more data
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        97,  // id
-        "Multisampling has poor performance in Intel BayTrail",
-        arraysize(kFeatureListForEntry97),  // features size
-        kFeatureListForEntry97,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry97),       // CrBugs size
-        kCrBugsForEntry97,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry97,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        98,  // id
-        "PowerVR SGX 540 drivers throw GL_OUT_OF_MEMORY error when a buffer "
-        "object's size is set to 0",
-        arraysize(kFeatureListForEntry98),  // features size
-        kFeatureListForEntry98,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry98),       // CrBugs size
-        kCrBugsForEntry98,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry98,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        99,  // id
-        "Qualcomm driver before Lollipop deletes egl sync objects after "
-        "context destruction",
-        arraysize(kFeatureListForEntry99),  // features size
-        kFeatureListForEntry99,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry99),       // CrBugs size
-        kCrBugsForEntry99,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical,
-             "5.0.0", nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry99,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        100,  // id
-        "Disable Direct3D11 on systems with AMD switchable graphics",
-        arraysize(kFeatureListForEntry100),  // features size
-        kFeatureListForEntry100,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry100),       // CrBugs size
-        kCrBugsForEntry100,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                           // os_version
-            0x00,                                         // vendor_id
-            0,                                            // DeviceIDs size
-            nullptr,                                      // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,        // multi_gpu_category
-            GpuControlList::kMultiGpuStyleAMDSwitchable,  // multi_gpu_style
-            nullptr,                                      // driver info
-            nullptr,                                      // GL strings
-            nullptr,                                      // machine model info
-            nullptr,                                      // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        101,  // id
-        "The Mali-Txxx driver hangs when reading from currently displayed "
-        "buffer",
-        arraysize(kFeatureListForEntry101),  // features size
-        kFeatureListForEntry101,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry101),       // CrBugs size
-        kCrBugsForEntry101,                  // CrBugs
-        {
-            GpuControlList::kOsChromeOS,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry101,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        102,  // id
-        "Adreno 420 driver loses FBO attachment contents on bound FBO deletion",
-        arraysize(kFeatureListForEntry102),  // features size
-        kFeatureListForEntry102,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry102),       // CrBugs size
-        kCrBugsForEntry102,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kGT, GpuControlList::kVersionStyleNumerical,
-             "5.0.2", nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry102,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        103,  // id
-        "Adreno 420 driver drops draw calls after FBO invalidation",
-        arraysize(kFeatureListForEntry103),  // features size
-        kFeatureListForEntry103,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry103),       // CrBugs size
-        kCrBugsForEntry103,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry103,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        104,  // id
-        "EXT_occlusion_query_boolean hangs on MediaTek MT8135 pre-Lollipop",
-        0,                                          // feature size
-        nullptr,                                    // features
-        arraysize(kDisabledExtensionsForEntry104),  // DisabledExtensions size
-        kDisabledExtensionsForEntry104,             // DisabledExtensions
-        0,                                          // CrBugs size
-        nullptr,                                    // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical,
-             "5.0.0", nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry104,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        105,  // id
-        "Framebuffer discarding causes corruption on Mali-4xx",
-        arraysize(kFeatureListForEntry105),  // features size
-        kFeatureListForEntry105,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry105),       // CrBugs size
-        kCrBugsForEntry105,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry105,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        106,  // id
-        "EXT_occlusion_query_boolean hangs on PowerVR SGX 544 (IMG) drivers",
-        0,                                          // feature size
-        nullptr,                                    // features
-        arraysize(kDisabledExtensionsForEntry106),  // DisabledExtensions size
-        kDisabledExtensionsForEntry106,             // DisabledExtensions
-        0,                                          // CrBugs size
-        nullptr,                                    // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry106,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        107,  // id
-        "Workaround IMG PowerVR G6xxx drivers bugs",
-        arraysize(kFeatureListForEntry107),         // features size
-        kFeatureListForEntry107,                    // features
-        arraysize(kDisabledExtensionsForEntry107),  // DisabledExtensions size
-        kDisabledExtensionsForEntry107,             // DisabledExtensions
-        arraysize(kCrBugsForEntry107),              // CrBugs size
-        kCrBugsForEntry107,                         // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kBetween, GpuControlList::kVersionStyleNumerical,
-             "5.0.0", "5.1.99"},                    // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry107,                // driver info
-            &kGLStringsForEntry107,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        108,  // id
-        "Mali-4xx does not support GL_RGB format",
-        arraysize(kFeatureListForEntry108),  // features size
-        kFeatureListForEntry108,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry108),       // CrBugs size
-        kCrBugsForEntry108,                  // CrBugs
-        {
-            GpuControlList::kOsAny,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry108,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        109,  // id
-        "MakeCurrent is slow on Linux with NVIDIA drivers",
-        arraysize(kFeatureListForEntry109),  // features size
-        kFeatureListForEntry109,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry109),       // CrBugs size
-        kCrBugsForEntry109,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry109,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        110,  // id
-        "EGL Sync server causes crashes on Adreno 2xx and 3xx drivers",
-        0,                                          // feature size
-        nullptr,                                    // features
-        arraysize(kDisabledExtensionsForEntry110),  // DisabledExtensions size
-        kDisabledExtensionsForEntry110,             // DisabledExtensions
-        arraysize(kCrBugsForEntry110),              // CrBugs size
-        kCrBugsForEntry110,                         // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry110,                // driver info
-            &kGLStringsForEntry110,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        111,  // id
-        "Discard Framebuffer breaks WebGL on Mali-4xx Linux",
-        arraysize(kFeatureListForEntry111),  // features size
-        kFeatureListForEntry111,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry111),       // CrBugs size
-        kCrBugsForEntry111,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry111,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        112,  // id
-        "EXT_disjoint_timer_query fails after 2 queries on adreno 3xx in "
-        "lollypop",
-        arraysize(kFeatureListForEntry112),  // features size
-        kFeatureListForEntry112,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry112),       // CrBugs size
-        kCrBugsForEntry112,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical,
-             "5.0.0", nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry112,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        113,  // id
-        "EXT_disjoint_timer_query fails after 256 queries on adreno 4xx",
-        0,                                          // feature size
-        nullptr,                                    // features
-        arraysize(kDisabledExtensionsForEntry113),  // DisabledExtensions size
-        kDisabledExtensionsForEntry113,             // DisabledExtensions
-        arraysize(kCrBugsForEntry113),              // CrBugs size
-        kCrBugsForEntry113,                         // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry113,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        115,  // id
-        "glGetIntegerv with GL_GPU_DISJOINT_EXT causes GL_INVALID_ENUM error",
-        0,                                          // feature size
-        nullptr,                                    // features
-        arraysize(kDisabledExtensionsForEntry115),  // DisabledExtensions size
-        kDisabledExtensionsForEntry115,             // DisabledExtensions
-        arraysize(kCrBugsForEntry115),              // CrBugs size
-        kCrBugsForEntry115,                         // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry115,                 // GL strings
-            nullptr,                                // machine model info
-            &kMoreForEntry115,                      // more data
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        116,  // id
-        "Adreno 420 support for EXT_multisampled_render_to_texture is buggy on "
-        "Android < 5.1",
-        0,                                          // feature size
-        nullptr,                                    // features
-        arraysize(kDisabledExtensionsForEntry116),  // DisabledExtensions size
-        kDisabledExtensionsForEntry116,             // DisabledExtensions
-        arraysize(kCrBugsForEntry116),              // CrBugs size
-        kCrBugsForEntry116,                         // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "5.1",
-             nullptr},                              // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry116,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        117,  // id
-        "GL_KHR_blend_equation_advanced breaks blending on Adreno 4xx",
-        arraysize(kFeatureListForEntry117),  // features size
-        kFeatureListForEntry117,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry117),       // CrBugs size
-        kCrBugsForEntry117,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry117,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        118,  // id
-        "NVIDIA 331 series drivers shader compiler may crash when attempting "
-        "to optimize pow()",
-        arraysize(kFeatureListForEntry118),  // features size
-        kFeatureListForEntry118,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry118),       // CrBugs size
-        kCrBugsForEntry118,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry118,                // driver info
-            &kGLStringsForEntry118,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        119,  // id
-        "Context lost recovery often fails on Mali-400/450 on Android.",
-        arraysize(kFeatureListForEntry119),  // features size
-        kFeatureListForEntry119,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry119),       // CrBugs size
-        kCrBugsForEntry119,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry119,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        120,  // id
-        "CHROMIUM_copy_texture is slow on Mali pre-Lollipop",
-        arraysize(kFeatureListForEntry120),  // features size
-        kFeatureListForEntry120,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry120),       // CrBugs size
-        kCrBugsForEntry120,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical,
-             "5.0.0", nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry120,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        123,  // id
-        "NVIDIA drivers before 346 lack features in NV_path_rendering and "
-        "related extensions to implement driver level path rendering.",
-        0,                                          // feature size
-        nullptr,                                    // features
-        arraysize(kDisabledExtensionsForEntry123),  // DisabledExtensions size
-        kDisabledExtensionsForEntry123,             // DisabledExtensions
-        arraysize(kCrBugsForEntry123),              // CrBugs size
-        kCrBugsForEntry123,                         // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry123,                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        125,  // id
-        "glFinish doesn't clear caches on Android",
-        arraysize(kFeatureListForEntry125),  // features size
-        kFeatureListForEntry125,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry125),       // CrBugs size
-        kCrBugsForEntry125,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry125,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        126,  // id
-        "Program binaries contain incorrect bound attribute locations on "
-        "Adreno 3xx GPUs",
-        arraysize(kFeatureListForEntry126),  // features size
-        kFeatureListForEntry126,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry126),       // CrBugs size
-        kCrBugsForEntry126,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry126,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        127,  // id
-        "Android Adreno crashes on binding incomplete cube map texture to FBO",
-        arraysize(kFeatureListForEntry127),  // features size
-        kFeatureListForEntry127,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry127),       // CrBugs size
-        kCrBugsForEntry127,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry127,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        128,  // id
-        "Linux ATI drivers crash on binding incomplete cube map texture to FBO",
-        arraysize(kFeatureListForEntry128),  // features size
-        kFeatureListForEntry128,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry128),       // CrBugs size
-        kCrBugsForEntry128,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x1002,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        129,  // id
-        "ANGLE crash on glReadPixels from incomplete cube map texture",
-        arraysize(kFeatureListForEntry129),  // features size
-        kFeatureListForEntry129,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry129),       // CrBugs size
-        kCrBugsForEntry129,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry129,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        130,  // id
-        "NVIDIA fails glReadPixels from incomplete cube map texture",
-        arraysize(kFeatureListForEntry130),  // features size
-        kFeatureListForEntry130,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry130),       // CrBugs size
-        kCrBugsForEntry130,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry130,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        131,  // id
-        "Linux Mesa drivers crash on glTexSubImage2D() to texture storage "
-        "bound to FBO",
-        arraysize(kFeatureListForEntry131),  // features size
-        kFeatureListForEntry131,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry131),       // CrBugs size
-        kCrBugsForEntry131,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry131,                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        132,  // id
-        "On Intel GPUs MSAA performance is not acceptable for GPU "
-        "rasterization",
-        arraysize(kFeatureListForEntry132),  // features size
-        kFeatureListForEntry132,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry132),       // CrBugs size
-        kCrBugsForEntry132,                  // CrBugs
-        {
-            GpuControlList::kOsAny,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                       // os_version
-            0x8086,                                   // vendor_id
-            0,                                        // DeviceIDs size
-            nullptr,                                  // DeviceIDs
-            GpuControlList::kMultiGpuCategoryActive,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,       // multi_gpu_style
-            nullptr,                                  // driver info
-            nullptr,                                  // GL strings
-            nullptr,                                  // machine model info
-            nullptr,                                  // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        133,  // id
-        "CHROMIUM_copy_texture with 1MB copy per flush to avoid unwanted cache "
-        "growth on Adreno",
-        arraysize(kFeatureListForEntry133),  // features size
-        kFeatureListForEntry133,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry133),       // CrBugs size
-        kCrBugsForEntry133,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry133,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        134,  // id
-        "glReadPixels fails on FBOs with SRGB_ALPHA textures",
-        0,                                          // feature size
-        nullptr,                                    // features
-        arraysize(kDisabledExtensionsForEntry134),  // DisabledExtensions size
-        kDisabledExtensionsForEntry134,             // DisabledExtensions
-        arraysize(kCrBugsForEntry134),              // CrBugs size
-        kCrBugsForEntry134,                         // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "5.0",
-             nullptr},                              // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry134,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        135,  // id
-        "Screen flickers on 2009 iMacs",
-        arraysize(kFeatureListForEntry135),  // features size
-        kFeatureListForEntry135,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry135),       // CrBugs size
-        kCrBugsForEntry135,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x1002,                                 // vendor_id
-            arraysize(kDeviceIDsForEntry135),       // DeviceIDs size
-            kDeviceIDsForEntry135,                  // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        136,  // id
-        "glGenerateMipmap fails if the zero texture level is not set on some "
-        "Mac drivers",
-        arraysize(kFeatureListForEntry136),  // features size
-        kFeatureListForEntry136,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry136),       // CrBugs size
-        kCrBugsForEntry136,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        137,  // id
-        "NVIDIA fails glReadPixels from incomplete cube map texture",
-        arraysize(kFeatureListForEntry137),  // features size
-        kFeatureListForEntry137,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry137),       // CrBugs size
-        kCrBugsForEntry137,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry137,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        138,  // id
-        "NVIDIA drivers before 346 lack features in NV_path_rendering and "
-        "related extensions to implement driver level path rendering.",
-        0,                                          // feature size
-        nullptr,                                    // features
-        arraysize(kDisabledExtensionsForEntry138),  // DisabledExtensions size
-        kDisabledExtensionsForEntry138,             // DisabledExtensions
-        arraysize(kCrBugsForEntry138),              // CrBugs size
-        kCrBugsForEntry138,                         // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry138,                // driver info
-            &kGLStringsForEntry138,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        139,  // id
-        "Mesa drivers wrongly report supporting GL_EXT_texture_rg with GLES "
-        "2.0 prior version 11.1",
-        0,                                          // feature size
-        nullptr,                                    // features
-        arraysize(kDisabledExtensionsForEntry139),  // DisabledExtensions size
-        kDisabledExtensionsForEntry139,             // DisabledExtensions
-        arraysize(kCrBugsForEntry139),              // CrBugs size
-        kCrBugsForEntry139,                         // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry139,                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            &kMoreForEntry139,                      // more data
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        140,  // id
-        "glReadPixels fails on FBOs with SRGB_ALPHA textures, Nexus 5X",
-        0,                                          // feature size
-        nullptr,                                    // features
-        arraysize(kDisabledExtensionsForEntry140),  // DisabledExtensions size
-        kDisabledExtensionsForEntry140,             // DisabledExtensions
-        arraysize(kCrBugsForEntry140),              // CrBugs size
-        kCrBugsForEntry140,                         // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry140,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        141,  // id
-        "Framebuffer discarding can hurt performance on non-tilers",
-        arraysize(kFeatureListForEntry141),  // features size
-        kFeatureListForEntry141,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry141),       // CrBugs size
-        kCrBugsForEntry141,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        142,  // id
-        "Pack parameters work incorrectly with pack buffer bound",
-        arraysize(kFeatureListForEntry142),  // features size
-        kFeatureListForEntry142,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry142),       // CrBugs size
-        kCrBugsForEntry142,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry142,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        143,  // id
-        "Timer queries crash on Intel GPUs on Linux",
-        0,                                          // feature size
-        nullptr,                                    // features
-        arraysize(kDisabledExtensionsForEntry143),  // DisabledExtensions size
-        kDisabledExtensionsForEntry143,             // DisabledExtensions
-        arraysize(kCrBugsForEntry143),              // CrBugs size
-        kCrBugsForEntry143,                         // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry143,                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        144,  // id
-        "Pack parameters work incorrectly with pack buffer bound",
-        arraysize(kFeatureListForEntry144),  // features size
-        kFeatureListForEntry144,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry144),       // CrBugs size
-        kCrBugsForEntry144,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        145,  // id
-        "EGLImage ref counting across EGLContext/threads is broken",
-        arraysize(kFeatureListForEntry145),  // features size
-        kFeatureListForEntry145,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry145),       // CrBugs size
-        kCrBugsForEntry145,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry145,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        147,  // id
-        "Limit max texure size to 4096 on all of Android",
-        arraysize(kFeatureListForEntry147),  // features size
-        kFeatureListForEntry147,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        0,                                   // CrBugs size
-        nullptr,                             // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        148,  // id
-        "Mali-4xx GPU on JB doesn't support DetachGLContext",
-        arraysize(kFeatureListForEntry148),  // features size
-        kFeatureListForEntry148,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        0,                                   // CrBugs size
-        nullptr,                             // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kLE, GpuControlList::kVersionStyleNumerical,
-             "4.4.4", nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry148,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        149,  // id
-        "Direct composition flashes black initially on Win <10",
-        arraysize(kFeatureListForEntry149),  // features size
-        kFeatureListForEntry149,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry149),       // CrBugs size
-        kCrBugsForEntry149,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical,
-             "10.0", nullptr},                      // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        150,  // id
-        "Alignment works incorrectly with unpack buffer bound",
-        arraysize(kFeatureListForEntry150),  // features size
-        kFeatureListForEntry150,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry150),       // CrBugs size
-        kCrBugsForEntry150,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry150,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        151,  // id
-        "Alignment works incorrectly with unpack buffer bound",
-        arraysize(kFeatureListForEntry151),  // features size
-        kFeatureListForEntry151,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry151),       // CrBugs size
-        kCrBugsForEntry151,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        152,  // id
-        "copyTexImage2D fails when reading from IOSurface on multiple GPU "
-        "types.",
-        arraysize(kFeatureListForEntry152),  // features size
-        kFeatureListForEntry152,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry152),       // CrBugs size
-        kCrBugsForEntry152,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        153,  // id
-        "Vivante GC1000 with EXT_multisampled_render_to_texture fails "
-        "glReadPixels",
-        0,                                          // feature size
-        nullptr,                                    // features
-        arraysize(kDisabledExtensionsForEntry153),  // DisabledExtensions size
-        kDisabledExtensionsForEntry153,             // DisabledExtensions
-        arraysize(kCrBugsForEntry153),              // CrBugs size
-        kCrBugsForEntry153,                         // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry153,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        156,  // id
-        "glEGLImageTargetTexture2DOES crashes",
-        arraysize(kFeatureListForEntry156),  // features size
-        kFeatureListForEntry156,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry156),       // CrBugs size
-        kCrBugsForEntry156,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kBetween, GpuControlList::kVersionStyleNumerical,
-             "4.4", "4.4.4"},                       // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry156,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        157,  // id
-        "Testing fences was broken on Mali ES2 drivers for specific phone "
-        "models",
-        0,                                          // feature size
-        nullptr,                                    // features
-        arraysize(kDisabledExtensionsForEntry157),  // DisabledExtensions size
-        kDisabledExtensionsForEntry157,             // DisabledExtensions
-        arraysize(kCrBugsForEntry157),              // CrBugs size
-        kCrBugsForEntry157,                         // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry157,                 // GL strings
-            &kMachineModelInfoForEntry157,          // machine model info
-            &kMoreForEntry157,                      // more data
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        158,  // id
-        "IOSurface use becomes pathologically slow over time on 10.10.",
-        arraysize(kFeatureListForEntry158),  // features size
-        kFeatureListForEntry158,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry158),       // CrBugs size
-        kCrBugsForEntry158,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kEQ, GpuControlList::kVersionStyleNumerical,
-             "10.10", nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            arraysize(kDeviceIDsForEntry158),       // DeviceIDs size
-            kDeviceIDsForEntry158,                  // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        159,  // id
-        "Framebuffer discarding can hurt performance on non-tilers",
-        arraysize(kFeatureListForEntry159),  // features size
-        kFeatureListForEntry159,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry159),       // CrBugs size
-        kCrBugsForEntry159,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry159,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        160,  // id
-        "Framebuffer discarding not useful on NVIDIA Kepler architecture and "
-        "later",
-        arraysize(kFeatureListForEntry160),  // features size
-        kFeatureListForEntry160,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry160),       // CrBugs size
-        kCrBugsForEntry160,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry160,                 // GL strings
-            nullptr,                                // machine model info
-            &kMoreForEntry160,                      // more data
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        161,  // id
-        "Framebuffer discarding not useful on NVIDIA Kepler architecture and "
-        "later",
-        arraysize(kFeatureListForEntry161),  // features size
-        kFeatureListForEntry161,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry161),       // CrBugs size
-        kCrBugsForEntry161,                  // CrBugs
-        {
-            GpuControlList::kOsChromeOS,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry161,                 // GL strings
-            nullptr,                                // machine model info
-            &kMoreForEntry161,                      // more data
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        162,  // id
-        "Framebuffer discarding not useful on NVIDIA Kepler architecture and "
-        "later",
-        arraysize(kFeatureListForEntry162),  // features size
-        kFeatureListForEntry162,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry162),       // CrBugs size
-        kCrBugsForEntry162,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry162,                 // GL strings
-            nullptr,                                // machine model info
-            &kMoreForEntry162,                      // more data
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        163,  // id
-        "Multisample renderbuffers with format GL_RGB8 have performance issues "
-        "on Intel GPUs.",
-        arraysize(kFeatureListForEntry163),  // features size
-        kFeatureListForEntry163,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry163),       // CrBugs size
-        kCrBugsForEntry163,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        164,  // id
-        "glColorMask does not work for multisample renderbuffers on old AMD "
-        "GPUs.",
-        arraysize(kFeatureListForEntry164),  // features size
-        kFeatureListForEntry164,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry164),       // CrBugs size
-        kCrBugsForEntry164,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x1002,                                 // vendor_id
-            arraysize(kDeviceIDsForEntry164),       // DeviceIDs size
-            kDeviceIDsForEntry164,                  // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        165,  // id
-        "Unpacking overlapping rows from unpack buffers is unstable on NVIDIA "
-        "GL driver",
-        arraysize(kFeatureListForEntry165),  // features size
-        kFeatureListForEntry165,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry165),       // CrBugs size
-        kCrBugsForEntry165,                  // CrBugs
-        {
-            GpuControlList::kOsAny,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry165,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        167,  // id
-        "glEGLImageTargetTexture2DOES crashes on Mali-400",
-        arraysize(kFeatureListForEntry167),  // features size
-        kFeatureListForEntry167,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry167),       // CrBugs size
-        kCrBugsForEntry167,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry167,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        168,  // id
-        "VirtualBox driver doesn't correctly support partial swaps.",
-        arraysize(kFeatureListForEntry168),  // features size
-        kFeatureListForEntry168,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry168),       // CrBugs size
-        kCrBugsForEntry168,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x80ee,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        169,  // id
-        "Mac Drivers store texture level parameters on int16_t that overflow",
-        arraysize(kFeatureListForEntry169),  // features size
-        kFeatureListForEntry169,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry169),       // CrBugs size
-        kCrBugsForEntry169,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical,
-             "10.12.2", nullptr},                   // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        170,  // id
-        "Zero copy DXGI video hangs on shutdown on Win < 8.1",
-        arraysize(kFeatureListForEntry170),  // features size
-        kFeatureListForEntry170,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry170),       // CrBugs size
-        kCrBugsForEntry170,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "8.1",
-             nullptr},                              // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        172,  // id
-        "Limited enabling of Chromium GL_INTEL_framebuffer_CMAA",
-        arraysize(kFeatureListForEntry172),  // features size
-        kFeatureListForEntry172,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry172),       // CrBugs size
-        kCrBugsForEntry172,                  // CrBugs
-        {
-            GpuControlList::kOsAny,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        arraysize(kExceptionsForEntry172),  // exceptions count
-        kExceptionsForEntry172,             // exceptions
-    },
-    {
-        174,  // id
-        "Adreno 4xx support for EXT_multisampled_render_to_texture is buggy on "
-        "Android 7.0",
-        0,                                          // feature size
-        nullptr,                                    // features
-        arraysize(kDisabledExtensionsForEntry174),  // DisabledExtensions size
-        kDisabledExtensionsForEntry174,             // DisabledExtensions
-        arraysize(kCrBugsForEntry174),              // CrBugs size
-        kCrBugsForEntry174,                         // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kBetween, GpuControlList::kVersionStyleNumerical,
-             "7.0.0", "7.0.99"},                    // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry174,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        175,  // id
-        "Adreno 5xx support for EXT_multisampled_render_to_texture is buggy on "
-        "Android < 7.0",
-        0,                                          // feature size
-        nullptr,                                    // features
-        arraysize(kDisabledExtensionsForEntry175),  // DisabledExtensions size
-        kDisabledExtensionsForEntry175,             // DisabledExtensions
-        arraysize(kCrBugsForEntry175),              // CrBugs size
-        kCrBugsForEntry175,                         // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "7.0",
-             nullptr},                              // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry175,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        176,  // id
-        "glClear does not work on Acer Predator GT-810",
-        arraysize(kFeatureListForEntry176),  // features size
-        kFeatureListForEntry176,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry176),       // CrBugs size
-        kCrBugsForEntry176,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry176,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        177,  // id
-        "glGetFragData{Location|Index} works incorrectly on Max",
-        arraysize(kFeatureListForEntry177),  // features size
-        kFeatureListForEntry177,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry177),       // CrBugs size
-        kCrBugsForEntry177,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        178,  // id
-        "GL_KHR_blend_equation_advanced is incorrectly implemented on Intel "
-        "BayTrail on KitKat",
-        arraysize(kFeatureListForEntry178),  // features size
-        kFeatureListForEntry178,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry178),       // CrBugs size
-        kCrBugsForEntry178,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "5.0",
-             nullptr},                              // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry178,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        179,  // id
-        "glResumeTransformFeedback works incorrectly on Intel GPUs",
-        arraysize(kFeatureListForEntry179),  // features size
-        kFeatureListForEntry179,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry179),       // CrBugs size
-        kCrBugsForEntry179,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        180,  // id
-        "eglCreateImageKHR fails for one component textures on PowerVR",
-        arraysize(kFeatureListForEntry180),  // features size
-        kFeatureListForEntry180,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry180),       // CrBugs size
-        kCrBugsForEntry180,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry180,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        181,  // id
-        "glTexStorage* are buggy when base mipmap level is not 0",
-        arraysize(kFeatureListForEntry181),  // features size
-        kFeatureListForEntry181,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry181),       // CrBugs size
-        kCrBugsForEntry181,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical,
-             "10.12.4", nullptr},                   // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        182,  // id
-        "Frequent hang in glClear on old android versions on Mali-T7xx",
-        arraysize(kFeatureListForEntry182),  // features size
-        kFeatureListForEntry182,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry182),       // CrBugs size
-        kCrBugsForEntry182,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "6.0",
-             nullptr},                              // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry182,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        183,  // id
-        "Result of abs(i) where i is an integer in vertex shader is wrong",
-        arraysize(kFeatureListForEntry183),  // features size
-        kFeatureListForEntry183,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry183),       // CrBugs size
-        kCrBugsForEntry183,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        184,  // id
-        "Rewrite texelFetchOffset to texelFetch for Intel Mac",
-        arraysize(kFeatureListForEntry184),  // features size
-        kFeatureListForEntry184,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry184),       // CrBugs size
-        kCrBugsForEntry184,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        185,  // id
-        "Zero-copy NV12 video displays incorrect colors on NVIDIA drivers.",
-        arraysize(kFeatureListForEntry185),  // features size
-        kFeatureListForEntry185,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry185),       // CrBugs size
-        kCrBugsForEntry185,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        186,  // id
-        "Rewrite condition in for and while loops for Intel Mac",
-        arraysize(kFeatureListForEntry186),  // features size
-        kFeatureListForEntry186,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry186),       // CrBugs size
-        kCrBugsForEntry186,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        187,  // id
-        "Rewrite do-while loops to simpler constructs on Mac",
-        arraysize(kFeatureListForEntry187),  // features size
-        kFeatureListForEntry187,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry187),       // CrBugs size
-        kCrBugsForEntry187,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical,
-             "10.11", nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        188,  // id
-        "AVSampleBufferDisplayLayer leaks IOSurfaces on 10.9.",
-        arraysize(kFeatureListForEntry188),  // features size
-        kFeatureListForEntry188,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry188),       // CrBugs size
-        kCrBugsForEntry188,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kLE, GpuControlList::kVersionStyleNumerical,
-             "10.10", nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        189,  // id
-        "Do TexImage2D first before CopyTexImage2D for cube map texture on "
-        "Intel Mac 10.11",
-        arraysize(kFeatureListForEntry189),  // features size
-        kFeatureListForEntry189,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry189),       // CrBugs size
-        kCrBugsForEntry189,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kLE, GpuControlList::kVersionStyleNumerical,
-             "10.11", nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        190,  // id
-        "Disable partial swaps on Mesa drivers (detected with GL_VERSION)",
-        arraysize(kFeatureListForEntry190),  // features size
-        kFeatureListForEntry190,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry190),       // CrBugs size
-        kCrBugsForEntry190,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry190,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        191,  // id
-        "Emulate GLSL function isnan() on Intel Mac",
-        arraysize(kFeatureListForEntry191),  // features size
-        kFeatureListForEntry191,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry191),       // CrBugs size
-        kCrBugsForEntry191,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            arraysize(kDeviceIDsForEntry191),       // DeviceIDs size
-            kDeviceIDsForEntry191,                  // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        192,  // id
-        "Decode and encode before generateMipmap for srgb format textures on "
-        "os except macosx",
-        arraysize(kFeatureListForEntry192),  // features size
-        kFeatureListForEntry192,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry192),       // CrBugs size
-        kCrBugsForEntry192,                  // CrBugs
-        {
-            GpuControlList::kOsAny,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            &kMoreForEntry192,                      // more data
-        },
-        arraysize(kExceptionsForEntry192),  // exceptions count
-        kExceptionsForEntry192,             // exceptions
-    },
-    {
-        193,  // id
-        "Decode and encode before generateMipmap for srgb format textures on "
-        "macosx",
-        arraysize(kFeatureListForEntry193),  // features size
-        kFeatureListForEntry193,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry193),       // CrBugs size
-        kCrBugsForEntry193,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        194,  // id
-        "Init first two levels before CopyTexImage2D for cube map texture on "
-        "Intel Mac 10.12",
-        arraysize(kFeatureListForEntry194),  // features size
-        kFeatureListForEntry194,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry194),       // CrBugs size
-        kCrBugsForEntry194,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical,
-             "10.12", nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        195,  // id
-        "Insert statements to reference all members in unused std140/shared "
-        "blocks on Mac",
-        arraysize(kFeatureListForEntry195),  // features size
-        kFeatureListForEntry195,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry195),       // CrBugs size
-        kCrBugsForEntry195,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        196,  // id
-        "Tex(Sub)Image3D performs incorrectly when uploading from unpack "
-        "buffer with GL_UNPACK_IMAGE_HEIGHT greater than zero on Intel Macs",
-        arraysize(kFeatureListForEntry196),  // features size
-        kFeatureListForEntry196,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry196),       // CrBugs size
-        kCrBugsForEntry196,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        197,  // id
-        "adjust src/dst region if blitting pixels outside read framebuffer on "
-        "Mac",
-        arraysize(kFeatureListForEntry197),  // features size
-        kFeatureListForEntry197,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry197),       // CrBugs size
-        kCrBugsForEntry197,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        198,  // id
-        "adjust src/dst region if blitting pixels outside read framebuffer on "
-        "Linux Intel",
-        arraysize(kFeatureListForEntry198),  // features size
-        kFeatureListForEntry198,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry198),       // CrBugs size
-        kCrBugsForEntry198,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        199,  // id
-        "adjust src/dst region if blitting pixels outside read framebuffer on "
-        "Linux AMD",
-        arraysize(kFeatureListForEntry199),  // features size
-        kFeatureListForEntry199,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry199),       // CrBugs size
-        kCrBugsForEntry199,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x1002,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        200,  // id
-        "ES3 support is unreliable on some older drivers",
-        arraysize(kFeatureListForEntry200),  // features size
-        kFeatureListForEntry200,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry200),       // CrBugs size
-        kCrBugsForEntry200,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "4.4",
-             nullptr},                              // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        201,  // id
-        "AMD drivers in Linux require invariant qualifier to match between "
-        "vertex and fragment shaders",
-        arraysize(kFeatureListForEntry201),  // features size
-        kFeatureListForEntry201,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry201),       // CrBugs size
-        kCrBugsForEntry201,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x1002,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        202,  // id
-        "Mac driver GL 4.1 requires invariant and centroid to match between "
-        "shaders",
-        arraysize(kFeatureListForEntry202),  // features size
-        kFeatureListForEntry202,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry202),       // CrBugs size
-        kCrBugsForEntry202,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        203,  // id
-        "Mesa driver GL 3.3 requires invariant and centroid to match between "
-        "shaders",
-        arraysize(kFeatureListForEntry203),  // features size
-        kFeatureListForEntry203,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry203),       // CrBugs size
-        kCrBugsForEntry203,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry203,                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            &kMoreForEntry203,                      // more data
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        205,  // id
-        "Adreno 5xx support for EXT_multisampled_render_to_texture is buggy on "
-        "Android 7.1",
-        0,                                          // feature size
-        nullptr,                                    // features
-        arraysize(kDisabledExtensionsForEntry205),  // DisabledExtensions size
-        kDisabledExtensionsForEntry205,             // DisabledExtensions
-        arraysize(kCrBugsForEntry205),              // CrBugs size
-        kCrBugsForEntry205,                         // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kEQ, GpuControlList::kVersionStyleNumerical,
-             "7.1.0", nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry205,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        206,  // id
-        "Disable KHR_blend_equation_advanced until cc shaders are updated",
-        0,                                          // feature size
-        nullptr,                                    // features
-        arraysize(kDisabledExtensionsForEntry206),  // DisabledExtensions size
-        kDisabledExtensionsForEntry206,             // DisabledExtensions
-        arraysize(kCrBugsForEntry206),              // CrBugs size
-        kCrBugsForEntry206,                         // CrBugs
-        {
-            GpuControlList::kOsAny,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        207,  // id
-        "Decode and Encode before generateMipmap for srgb format textures on "
-        "Windows",
-        arraysize(kFeatureListForEntry207),  // features size
-        kFeatureListForEntry207,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry207),       // CrBugs size
-        kCrBugsForEntry207,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        208,  // id
-        "Decode and Encode before generateMipmap for srgb format textures on "
-        "Linux Mesa ANGLE path",
-        arraysize(kFeatureListForEntry208),  // features size
-        kFeatureListForEntry208,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry208),       // CrBugs size
-        kCrBugsForEntry208,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry208,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        209,  // id
-        "Decode and Encode before generateMipmap for srgb format textures on "
-        "Chromeos Intel",
-        arraysize(kFeatureListForEntry209),  // features size
-        kFeatureListForEntry209,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry209),       // CrBugs size
-        kCrBugsForEntry209,                  // CrBugs
-        {
-            GpuControlList::kOsChromeOS,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        210,  // id
-        "Decode and Encode before generateMipmap for srgb format textures on "
-        "Linux AMD",
-        arraysize(kFeatureListForEntry210),  // features size
-        kFeatureListForEntry210,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry210),       // CrBugs size
-        kCrBugsForEntry210,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x1002,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        211,  // id
-        "Rewrite -float to 0.0 - float for Intel Mac",
-        arraysize(kFeatureListForEntry211),  // features size
-        kFeatureListForEntry211,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry211),       // CrBugs size
-        kCrBugsForEntry211,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kLE, GpuControlList::kVersionStyleNumerical,
-             "10.11", nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        212,  // id
-        "Program binaries don't contain transform feedback varyings on "
-        "Qualcomm GPUs",
-        arraysize(kFeatureListForEntry212),  // features size
-        kFeatureListForEntry212,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry212),       // CrBugs size
-        kCrBugsForEntry212,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry212,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        213,  // id
-        "The Mali-Gxx driver does not guarantee flush ordering",
-        arraysize(kFeatureListForEntry213),  // features size
-        kFeatureListForEntry213,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry213),       // CrBugs size
-        kCrBugsForEntry213,                  // CrBugs
-        {
-            GpuControlList::kOsAny,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry213,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        214,  // id
-        "Some Adreno 3xx don't setup scissor state correctly when FBO0 is "
-        "bound, nor support MSAA properly.",
-        arraysize(kFeatureListForEntry214),  // features size
-        kFeatureListForEntry214,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry214),       // CrBugs size
-        kCrBugsForEntry214,                  // CrBugs
-        {
-            GpuControlList::kOsAny,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry214,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        215,  // id
-        "Fake no-op GPU driver bug workaround for testing",
-        arraysize(kFeatureListForEntry215),  // features size
-        kFeatureListForEntry215,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry215),       // CrBugs size
-        kCrBugsForEntry215,                  // CrBugs
-        {
-            GpuControlList::kOsAny,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0xbad9,                                 // vendor_id
-            arraysize(kDeviceIDsForEntry215),       // DeviceIDs size
-            kDeviceIDsForEntry215,                  // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        216,  // id
-        "Pack parameters work incorrectly with pack buffer bound",
-        arraysize(kFeatureListForEntry216),  // features size
-        kFeatureListForEntry216,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry216),       // CrBugs size
-        kCrBugsForEntry216,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry216,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        217,  // id
-        "Alignment works incorrectly with unpack buffer bound",
-        arraysize(kFeatureListForEntry217),  // features size
-        kFeatureListForEntry217,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry217),       // CrBugs size
-        kCrBugsForEntry217,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry217,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        219,  // id
-        "Zero-copy DXGI video hangs or displays incorrect colors on AMD "
-        "drivers",
-        arraysize(kFeatureListForEntry219),  // features size
-        kFeatureListForEntry219,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry219),       // CrBugs size
-        kCrBugsForEntry219,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x1002,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        220,  // id
-        "NV12 DXGI video displays incorrect colors on older AMD drivers",
-        arraysize(kFeatureListForEntry220),  // features size
-        kFeatureListForEntry220,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry220),       // CrBugs size
-        kCrBugsForEntry220,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x1002,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry220,                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        221,  // id
-        "Very large instanced draw calls crash on some Adreno 3xx drivers",
-        arraysize(kFeatureListForEntry221),  // features size
-        kFeatureListForEntry221,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry221),       // CrBugs size
-        kCrBugsForEntry221,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry221,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-};
-}  // namespace gpu
diff --git a/gpu/config/gpu_driver_bug_list_autogen.h b/gpu/config/gpu_driver_bug_list_autogen.h
deleted file mode 100644
index bfa6610..0000000
--- a/gpu/config/gpu_driver_bug_list_autogen.h
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2017 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.
-
-// This file is auto-generated from
-//    gpu/config/process_json.py
-// It's formatted by clang-format using chromium coding style:
-//    clang-format -i -style=chromium filename
-// DO NOT EDIT!
-
-#ifndef GPU_CONFIG_GPU_DRIVER_BUG_LIST_AUTOGEN_H_
-#define GPU_CONFIG_GPU_DRIVER_BUG_LIST_AUTOGEN_H_
-
-#include "gpu/config/gpu_control_list.h"
-
-namespace gpu {
-GPU_EXPORT extern const char kGpuDriverBugListVersion[];
-GPU_EXPORT extern const size_t kGpuDriverBugListEntryCount;
-GPU_EXPORT extern const GpuControlList::Entry kGpuDriverBugListEntries[];
-}  // namespace gpu
-
-#endif  // GPU_CONFIG_GPU_DRIVER_BUG_LIST_AUTOGEN_H_
diff --git a/gpu/config/gpu_driver_bug_list_exceptions_autogen.h b/gpu/config/gpu_driver_bug_list_exceptions_autogen.h
deleted file mode 100644
index 2e8fca1..0000000
--- a/gpu/config/gpu_driver_bug_list_exceptions_autogen.h
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2017 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.
-
-// This file is auto-generated from
-//    gpu/config/process_json.py
-// It's formatted by clang-format using chromium coding style:
-//    clang-format -i -style=chromium filename
-// DO NOT EDIT!
-
-#ifndef GPU_CONFIG_GPU_DRIVER_BUG_LIST_EXCEPTIONS_AUTOGEN_H_
-#define GPU_CONFIG_GPU_DRIVER_BUG_LIST_EXCEPTIONS_AUTOGEN_H_
-
-namespace gpu {
-const GpuControlList::Conditions kExceptionsForEntry54[1] = {
-    {
-        GpuControlList::kOsMacosx,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                     // os_version
-        0x00,                                   // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        nullptr,                                // driver info
-        nullptr,                                // GL strings
-        nullptr,                                // machine model info
-        nullptr,                                // more conditions
-    },
-};
-
-const GpuControlList::Conditions kExceptionsForEntry172[1] = {
-    {
-        GpuControlList::kOsChromeOS,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                     // os_version
-        0x8086,                                 // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        &kDriverInfoForEntry172Exception0,      // driver info
-        &kGLStringsForEntry172Exception0,       // GL strings
-        nullptr,                                // machine model info
-        &kMoreForEntry172Exception0,            // more data
-    },
-};
-
-const GpuControlList::Conditions kExceptionsForEntry192[1] = {
-    {
-        GpuControlList::kOsMacosx,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                     // os_version
-        0x00,                                   // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        nullptr,                                // driver info
-        nullptr,                                // GL strings
-        nullptr,                                // machine model info
-        nullptr,                                // more conditions
-    },
-};
-
-}  // namespace gpu
-
-#endif  // GPU_CONFIG_GPU_DRIVER_BUG_LIST_EXCEPTIONS_AUTOGEN_H_
diff --git a/gpu/config/process_json.py b/gpu/config/process_json.py
index d34c504..05ec4a2 100755
--- a/gpu/config/process_json.py
+++ b/gpu/config/process_json.py
@@ -7,6 +7,7 @@
 import os
 import platform
 import sys
+from optparse import OptionParser
 from subprocess import call
 
 """Generate data struct from GPU blacklist and driver bug workarounds json."""
@@ -577,31 +578,31 @@
     file.write('\n#endif  // %s\n' % token)
 
 
-def process_json_file(json_filename, list_tag,
+def process_json_file(json_filepath, list_tag,
                       feature_header_filename, total_features, feature_tag,
-                      output_header_filename, output_data_filename,
-                      output_helper_filename, output_exception_filename, path,
-                      export_tag):
-  current_dir = os.getcwd()
-  os.chdir('../../' + path) # assume python script is under gpu/config
-
-  json_file = open(json_filename, 'rb')
+                      output_header_filepath, output_data_filepath,
+                      output_helper_filepath, output_exception_filepath, path,
+                      export_tag, git_format):
+  output_header_filename = os.path.basename(output_header_filepath)
+  output_helper_filename = os.path.basename(output_helper_filepath)
+  output_exception_filename = os.path.basename(output_exception_filepath)
+  json_file = open(json_filepath, 'rb')
   json_data = json.load(json_file)
   json_file.close()
-  data_file = open(output_data_filename, 'wb')
+  data_file = open(output_data_filepath, 'wb')
   data_file.write(_LICENSE)
   data_file.write(_DO_NOT_EDIT_WARNING)
   data_file.write('#include "%s/%s"\n\n' % (path, output_header_filename))
   data_file.write('#include "%s/%s"\n' % (path, output_helper_filename))
   data_file.write('#include "%s/%s"\n\n' % (path, output_exception_filename))
-  data_helper_file = open(output_helper_filename, 'wb')
+  data_helper_file = open(output_helper_filepath, 'wb')
   data_helper_file.write(_LICENSE)
   data_helper_file.write(_DO_NOT_EDIT_WARNING)
   write_header_file_guard(data_helper_file, output_helper_filename, path, True)
   data_helper_file.write('#include "gpu/config/%s"\n\n' %
                          feature_header_filename)
   data_helper_file.write('namespace gpu {\n')
-  data_exception_file = open(output_exception_filename, 'wb')
+  data_exception_file = open(output_exception_filepath, 'wb')
   data_exception_file.write(_LICENSE)
   data_exception_file.write(_DO_NOT_EDIT_WARNING)
   write_header_file_guard(data_exception_file, output_exception_filename, path,
@@ -633,7 +634,7 @@
   write_header_file_guard(data_exception_file, output_exception_filename, path,
                           False)
   data_exception_file.close()
-  data_header_file = open(output_header_filename, 'wb')
+  data_header_file = open(output_header_filepath, 'wb')
   data_header_file.write(_LICENSE)
   data_header_file.write(_DO_NOT_EDIT_WARNING)
   write_header_file_guard(data_header_file, output_header_filename, path, True)
@@ -652,67 +653,94 @@
   data_header_file.write('}  // namespace gpu\n')
   write_header_file_guard(data_header_file, output_header_filename, path, False)
   data_header_file.close()
-  format_files([output_header_filename, output_data_filename,
-                output_helper_filename, output_exception_filename])
-
-  os.chdir(current_dir)
+  if git_format:
+    format_files([output_header_filepath, output_data_filepath,
+                  output_helper_filepath, output_exception_filepath])
 
 
-def process_software_rendering_list():
-  total_features = load_software_rendering_list_features('gpu_feature_type.h')
-  process_json_file('software_rendering_list.json', 'SoftwareRenderingList',
-                    'gpu_feature_type.h', total_features, 'GPU_FEATURE_TYPE_',
-                    'software_rendering_list_autogen.h',
-                    'software_rendering_list_autogen.cc',
-                    'software_rendering_list_arrays_and_structs_autogen.h',
-                    'software_rendering_list_exceptions_autogen.h',
-                    'gpu/config', 'GPU_EXPORT ')
+def process_software_rendering_list(script_dir, output_dir):
+  total_features = load_software_rendering_list_features(
+      os.path.join(script_dir, 'gpu_feature_type.h'))
+  process_json_file(
+      os.path.join(script_dir, 'software_rendering_list.json'),
+      'SoftwareRenderingList',
+      'gpu_feature_type.h',
+      total_features,
+      'GPU_FEATURE_TYPE_',
+      os.path.join(output_dir, 'software_rendering_list_autogen.h'),
+      os.path.join(output_dir, 'software_rendering_list_autogen.cc'),
+      os.path.join(output_dir,
+                   'software_rendering_list_arrays_and_structs_autogen.h'),
+      os.path.join(output_dir, 'software_rendering_list_exceptions_autogen.h'),
+      'gpu/config',
+      'GPU_EXPORT ',
+      False)
 
 
-def process_gpu_driver_bug_list():
+def process_gpu_driver_bug_list(script_dir, output_dir):
   total_features = load_gpu_driver_bug_workarounds(
-    'gpu_driver_bug_workaround_type.h')
-  process_json_file('gpu_driver_bug_list.json', 'GpuDriverBugList',
-                    'gpu_driver_bug_workaround_type.h', total_features, '',
-                    'gpu_driver_bug_list_autogen.h',
-                    'gpu_driver_bug_list_autogen.cc',
-                    'gpu_driver_bug_list_arrays_and_structs_autogen.h',
-                    'gpu_driver_bug_list_exceptions_autogen.h',
-                    'gpu/config', 'GPU_EXPORT ')
+      os.path.join(script_dir, 'gpu_driver_bug_workaround_type.h'))
+  process_json_file(
+      os.path.join(script_dir, 'gpu_driver_bug_list.json'),
+      'GpuDriverBugList',
+      'gpu_driver_bug_workaround_type.h',
+      total_features,
+      '',
+      os.path.join(output_dir, 'gpu_driver_bug_list_autogen.h'),
+      os.path.join(output_dir, 'gpu_driver_bug_list_autogen.cc'),
+      os.path.join(output_dir,
+                   'gpu_driver_bug_list_arrays_and_structs_autogen.h'),
+      os.path.join(output_dir, 'gpu_driver_bug_list_exceptions_autogen.h'),
+      'gpu/config',
+      'GPU_EXPORT ',
+      False)
 
 
-def process_gpu_control_list_testing():
+def process_gpu_control_list_testing(script_dir, output_dir):
   total_features = ['test_feature_0', 'test_feature_1', 'test_feature_2']
-  process_json_file('gpu_control_list_testing.json', 'GpuControlListTesting',
-                    'gpu_control_list_testing_data.h', total_features, '',
-                    'gpu_control_list_testing_autogen.h',
-                    'gpu_control_list_testing_autogen.cc',
-                    'gpu_control_list_testing_arrays_and_structs_autogen.h',
-                    'gpu_control_list_testing_exceptions_autogen.h',
-                    'gpu/config', '')
+  process_json_file(
+      os.path.join(script_dir, 'gpu_control_list_testing.json'),
+      'GpuControlListTesting',
+      'gpu_control_list_testing_data.h',
+      total_features,
+      '',
+      os.path.join(output_dir, 'gpu_control_list_testing_autogen.h'),
+      os.path.join(output_dir, 'gpu_control_list_testing_autogen.cc'),
+      os.path.join(output_dir,
+                   'gpu_control_list_testing_arrays_and_structs_autogen.h'),
+      os.path.join(output_dir, 'gpu_control_list_testing_exceptions_autogen.h'),
+      'gpu/config',
+      '',
+      True)
 
 
-def process_gpu_data_manager_testing():
-  total_features = load_software_rendering_list_features('gpu_feature_type.h')
-  process_json_file('gpu_data_manager_testing.json', 'GpuDataManagerTesting',
-                    'gpu_feature_type.h', total_features, 'GPU_FEATURE_TYPE_',
-                    'gpu_data_manager_testing_autogen.h',
-                    'gpu_data_manager_testing_autogen.cc',
-                    'gpu_data_manager_testing_arrays_and_structs_autogen.h',
-                    'gpu_data_manager_testing_exceptions_autogen.h',
-                    'content/browser/gpu', '')
+def process_gpu_data_manager_testing(script_dir, output_dir):
+  total_features = load_software_rendering_list_features(
+      os.path.join(script_dir, 'gpu_feature_type.h'))
+  process_json_file(
+      os.path.join(output_dir, 'gpu_data_manager_testing.json'),
+      'GpuDataManagerTesting',
+      'gpu_feature_type.h',
+      total_features,
+      'GPU_FEATURE_TYPE_',
+      os.path.join(output_dir, 'gpu_data_manager_testing_autogen.h'),
+      os.path.join(output_dir, 'gpu_data_manager_testing_autogen.cc'),
+      os.path.join(output_dir,
+                   'gpu_data_manager_testing_arrays_and_structs_autogen.h'),
+      os.path.join(output_dir, 'gpu_data_manager_testing_exceptions_autogen.h'),
+      'content/browser/gpu',
+      '',
+      True)
 
 
-def write_test_entry_enums(input_json_filename, output_entry_enums_filename,
+def write_test_entry_enums(input_json_filepath, output_entry_enums_filepath,
                            path, list_tag):
-  current_dir = os.getcwd()
-  os.chdir('../../' + path) # assume python script is under gou/config
-
-  json_file = open(input_json_filename, 'rb')
+  json_file = open(input_json_filepath, 'rb')
   json_data = json.load(json_file)
   json_file.close()
 
-  enum_file = open(output_entry_enums_filename, 'wb')
+  output_entry_enums_filename = os.path.basename(output_entry_enums_filepath)
+  enum_file = open(output_entry_enums_filepath, 'wb')
   enum_file.write(_LICENSE)
   enum_file.write(_DO_NOT_EDIT_WARNING)
   write_header_file_guard(enum_file, output_entry_enums_filename, path, True)
@@ -731,27 +759,45 @@
   enum_file.write('}  // namespace gpu\n')
   write_header_file_guard(enum_file, output_entry_enums_filename, path, False)
   enum_file.close()
-  format_files([output_entry_enums_filename])
-
-  os.chdir(current_dir)
+  format_files([output_entry_enums_filepath])
 
 
-def main():
-  dir_path = os.path.dirname(os.path.realpath(__file__))
-  os.chdir(dir_path)
-  process_software_rendering_list()
-  process_gpu_driver_bug_list()
-  process_gpu_control_list_testing()
-  write_test_entry_enums('gpu_control_list_testing.json',
-                         'gpu_control_list_testing_entry_enums_autogen.h',
-                         'gpu/config',
-                         'GpuControlListTesting')
-  process_gpu_data_manager_testing()
-  write_test_entry_enums('gpu_data_manager_testing.json',
-                         'gpu_data_manager_testing_entry_enums_autogen.h',
-                         'content/browser/gpu',
-                         'GpuDataManagerTesting')
+def main(argv):
+  parser = OptionParser()
+  parser.add_option("--output-dir",
+                    help="output directory for SoftwareRenderingList and "
+                    "GpuDriverBugList data files. "
+                    "If unspecified, these files are not generated.")
+  parser.add_option("--skip-testing-data", action="store_false",
+                    dest="generate_testing_data", default=True,
+                    help="skip testing data generation.")
+  (options, args) = parser.parse_args(args=argv)
+
+  script_dir = os.path.dirname(os.path.realpath(__file__))
+
+  if options.output_dir != None:
+    process_software_rendering_list(script_dir, options.output_dir)
+    process_gpu_driver_bug_list(script_dir, options.output_dir)
+
+  if options.generate_testing_data:
+    # Testing data files are generated by calling the script manually.
+    process_gpu_control_list_testing(script_dir, script_dir)
+    write_test_entry_enums(
+        os.path.join(script_dir, 'gpu_control_list_testing.json'),
+        os.path.join(script_dir,
+                     'gpu_control_list_testing_entry_enums_autogen.h'),
+        'gpu/config',
+        'GpuControlListTesting')
+    chrome_root_dir = os.path.abspath(os.path.join(script_dir, '../../'))
+    gpu_data_manager_dir = os.path.join(chrome_root_dir, 'content/browser/gpu')
+    process_gpu_data_manager_testing(script_dir, gpu_data_manager_dir)
+    write_test_entry_enums(
+        os.path.join(gpu_data_manager_dir, 'gpu_data_manager_testing.json'),
+        os.path.join(gpu_data_manager_dir,
+                     'gpu_data_manager_testing_entry_enums_autogen.h'),
+        'content/browser/gpu',
+        'GpuDataManagerTesting')
 
 
 if __name__ == '__main__':
-  sys.exit(main())
+  sys.exit(main(sys.argv[1:]))
diff --git a/gpu/config/software_rendering_list_arrays_and_structs_autogen.h b/gpu/config/software_rendering_list_arrays_and_structs_autogen.h
deleted file mode 100644
index fb42565..0000000
--- a/gpu/config/software_rendering_list_arrays_and_structs_autogen.h
+++ /dev/null
@@ -1,1748 +0,0 @@
-// Copyright 2017 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.
-
-// This file is auto-generated from
-//    gpu/config/process_json.py
-// It's formatted by clang-format using chromium coding style:
-//    clang-format -i -style=chromium filename
-// DO NOT EDIT!
-
-#ifndef GPU_CONFIG_SOFTWARE_RENDERING_LIST_ARRAYS_AND_STRUCTS_AUTOGEN_H_
-#define GPU_CONFIG_SOFTWARE_RENDERING_LIST_ARRAYS_AND_STRUCTS_AUTOGEN_H_
-
-#include "gpu/config/gpu_feature_type.h"
-
-namespace gpu {
-const int kFeatureListForEntry1[4] = {
-    GPU_FEATURE_TYPE_FLASH3D, GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL, GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-};
-
-const uint32_t kDeviceIDsForEntry1[1] = {
-    0x7249,
-};
-
-const int kFeatureListForEntry3[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry3[2] = {
-    59302, 315217,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry3 = {
-    nullptr, "(?i).*software.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry4[4] = {
-    GPU_FEATURE_TYPE_FLASH3D, GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL, GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-};
-
-const uint32_t kCrBugsForEntry4[1] = {
-    232035,
-};
-
-const uint32_t kDeviceIDsForEntry4[2] = {
-    0x27AE, 0x27A2,
-};
-
-const int kFeatureListForEntry5[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry5[6] = {
-    71381, 76428, 73910, 101225, 136240, 357314,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry5Exception0 = {
-    ".*AMD.*",  // driver_vendor
-    {GpuControlList::kGE, GpuControlList::kVersionStyleLexical, "8.98",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry5Exception1 = {
-    "Mesa",  // driver_vendor
-    {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, "10.0.4",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry5Exception2 = {
-    ".*ANGLE.*",  // driver_vendor
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry8[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry8[1] = {
-    72938,
-};
-
-const uint32_t kDeviceIDsForEntry8[1] = {
-    0x0324,
-};
-
-const int kFeatureListForEntry10[4] = {
-    GPU_FEATURE_TYPE_FLASH3D, GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL, GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-};
-
-const uint32_t kCrBugsForEntry10[1] = {
-    73794,
-};
-
-const uint32_t kDeviceIDsForEntry10[1] = {
-    0x0393,
-};
-
-const int kFeatureListForEntry12[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry12[3] = {
-    72979, 89802, 315205,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry12 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_version
-    {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "2009.1",
-     nullptr},  // driver_date
-};
-
-const uint32_t kDeviceIDsForEntry12Exception0[1] = {
-    0x29a2,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry12Exception0 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical,
-     "7.15.10.1624", nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry12Exception1 = {
-    "osmesa",  // driver_vendor
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const uint32_t kDeviceIDsForEntry12Exception2[1] = {
-    0x02c1,
-};
-
-const int kFeatureListForEntry17[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry17[4] = {
-    76703, 164555, 225200, 340886,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry17 = {
-    "Mesa",  // driver_vendor
-    {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "10.1",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const uint32_t kDeviceIDsForEntry17Exception0[12] = {
-    0x0102, 0x0106, 0x0112, 0x0116, 0x0122, 0x0126,
-    0x010a, 0x0152, 0x0156, 0x015a, 0x0162, 0x0166,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry17Exception0 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, "8.0",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const uint32_t kDeviceIDsForEntry17Exception1[16] = {
-    0xa001, 0xa002, 0xa011, 0xa012, 0x29a2, 0x2992, 0x2982, 0x2972,
-    0x2a12, 0x2a42, 0x2e02, 0x2e12, 0x2e22, 0x2e32, 0x2e42, 0x2e92,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry17Exception1 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kGT, GpuControlList::kVersionStyleNumerical, "8.0.2",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const uint32_t kDeviceIDsForEntry17Exception2[2] = {
-    0x0042, 0x0046,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry17Exception2 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kGT, GpuControlList::kVersionStyleNumerical, "8.0.4",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const uint32_t kDeviceIDsForEntry17Exception3[1] = {
-    0x2a02,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry17Exception3 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, "9.1",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const uint32_t kDeviceIDsForEntry17Exception4[2] = {
-    0x0a16, 0x0a26,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry17Exception4 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, "10.0.1",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry18[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry18[1] = {
-    84701,
-};
-
-const uint32_t kDeviceIDsForEntry18[1] = {
-    0x029e,
-};
-
-const int kFeatureListForEntry27[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry27[4] = {
-    95934, 94973, 136240, 357314,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry27 = {
-    "ATI.*", nullptr, nullptr, nullptr,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry27Exception0 = {
-    ".*AMD.*",  // driver_vendor
-    {GpuControlList::kGE, GpuControlList::kVersionStyleLexical, "8.98",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry27Exception1 = {
-    "Mesa",  // driver_vendor
-    {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, "10.0.4",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry28[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry28[3] = {
-    95934, 94973, 357314,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry28 = {
-    "X\\.Org.*", ".*AMD.*", nullptr, nullptr,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry28Exception0 = {
-    "Mesa",  // driver_vendor
-    {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, "10.0.4",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry29[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry29[3] = {
-    95934, 94973, 357314,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry29 = {
-    "X\\.Org.*", ".*ATI.*", nullptr, nullptr,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry29Exception0 = {
-    "Mesa",  // driver_vendor
-    {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, "10.0.4",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry30[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry30[1] = {
-    94103,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry30 = {
-    "Mesa",  // driver_vendor
-    {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "10.1",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry30 = {
-    "(?i)nouveau.*", nullptr, nullptr, nullptr,
-};
-
-const int kFeatureListForEntry34[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry34[1] = {
-    119948,
-};
-
-const uint32_t kDeviceIDsForEntry34[1] = {
-    0x8811,
-};
-
-const int kFeatureListForEntry37[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry37[2] = {
-    131308, 363418,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry37 = {
-    "Mesa",  // driver_vendor
-    {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "10.1",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry37 = {
-    "Intel.*", nullptr, nullptr, nullptr,
-};
-
-const int kFeatureListForEntry45[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry45[1] = {
-    138105,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry45 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "7",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry46[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry46[1] = {
-    124152,
-};
-
-const uint32_t kDeviceIDsForEntry46[1] = {
-    0x3151,
-};
-
-const int kFeatureListForEntry47[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry47[1] = {
-    78497,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry47 = {
-    "NVIDIA",  // driver_vendor
-    {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "295",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry48[1] = {
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-};
-
-const uint32_t kCrBugsForEntry48[1] = {
-    137247,
-};
-
-const int kFeatureListForEntry50[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry50[4] = {
-    145531, 332596, 571899, 629434,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry50 = {
-    "VMware.*", nullptr, nullptr, nullptr,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry50Exception0 = {
-    "Mesa",  // driver_vendor
-    {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, "9.2.1",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry50Exception0 = {
-    nullptr, ".*SVGA3D.*", nullptr, nullptr,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry50Exception1 = {
-    "Mesa",  // driver_vendor
-    {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, "10.1.3",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry50Exception1 = {
-    nullptr, ".*Gallium.*llvmpipe.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry53[1] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-};
-
-const uint32_t kCrBugsForEntry53[1] = {
-    152096,
-};
-
-const uint32_t kDeviceIDsForEntry53[2] = {
-    0x8108, 0x8109,
-};
-
-const int kFeatureListForEntry56[3] = {
-    GPU_FEATURE_TYPE_FLASH3D, GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-};
-
-const uint32_t kCrBugsForEntry56[1] = {
-    145600,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry56 = {
-    "NVIDIA",  // driver_vendor
-    {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "331.38",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry57[1] = {
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-};
-
-const uint32_t kDeviceIDsForEntry57Exception0[3] = {
-    0x0106, 0x0116, 0x0166,
-};
-
-const int kFeatureListForEntry59[1] = {
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-};
-
-const uint32_t kCrBugsForEntry59[1] = {
-    155749,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry59 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kEQ, GpuControlList::kVersionStyleNumerical,
-     "8.15.11.8593", nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry64[1] = {
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-};
-
-const uint32_t kCrBugsForEntry64[1] = {
-    159458,
-};
-
-const int kFeatureListForEntry68[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry68[1] = {
-    169470,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry68 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kLE, GpuControlList::kVersionStyleNumerical, "7.14.1.1134",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry69[1] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-};
-
-const uint32_t kCrBugsForEntry69[1] = {
-    172771,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry69 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kEQ, GpuControlList::kVersionStyleNumerical,
-     "8.17.11.9621", nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry70[1] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-};
-
-const uint32_t kCrBugsForEntry70[1] = {
-    172771,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry70 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kEQ, GpuControlList::kVersionStyleNumerical,
-     "8.17.11.8267", nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry71[1] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-};
-
-const uint32_t kCrBugsForEntry71[1] = {
-    172771,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry71 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical,
-     "8.15.10.2021", nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry72[1] = {
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-};
-
-const uint32_t kCrBugsForEntry72[1] = {
-    232529,
-};
-
-const uint32_t kDeviceIDsForEntry72[1] = {
-    0x0163,
-};
-
-const int kFeatureListForEntry74[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry74[1] = {
-    248178,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry74 = {
-    "Microsoft",  // driver_vendor
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const uint32_t kDeviceIDsForEntry74Exception0[1] = {
-    0x02c1,
-};
-
-const int kFeatureListForEntry76[1] = {
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-};
-
-const GpuControlList::More kMoreForEntry76 = {
-    GpuControlList::kGLTypeNone,  // gl_type
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gl_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // pixel_shader_version
-    true,       // in_process_gpu
-    0,          // gl_reset_notification_strategy
-    true,       // direct_rendering
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gpu_count
-};
-
-const GpuControlList::More kMoreForEntry76Exception0 = {
-    GpuControlList::kGLTypeNone,  // gl_type
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gl_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // pixel_shader_version
-    false,      // in_process_gpu
-    33362,      // gl_reset_notification_strategy
-    true,       // direct_rendering
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gpu_count
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry76Exception1 = {
-    nullptr, "Mali-4.*", ".*EXT_robustness.*", nullptr,
-};
-
-const int kFeatureListForEntry78[1] = {
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-};
-
-const uint32_t kCrBugsForEntry78[3] = {
-    180695, 298968, 436968,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry78 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kLE, GpuControlList::kVersionStyleNumerical,
-     "8.15.10.2702", nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry79[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry79[1] = {
-    315199,
-};
-
-const int kFeatureListForEntry82[1] = {
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry82[1] = {
-    615108,
-};
-
-const int kFeatureListForEntry86[1] = {
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-};
-
-const uint32_t kCrBugsForEntry86[1] = {
-    305431,
-};
-
-const uint32_t kDeviceIDsForEntry86[1] = {
-    0xa011,
-};
-
-const int kFeatureListForEntry87[1] = {
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-};
-
-const uint32_t kCrBugsForEntry87[1] = {
-    298968,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry87 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kEQ, GpuControlList::kVersionStyleNumerical,
-     "10.18.10.3308", nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry88[1] = {
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-};
-
-const uint32_t kCrBugsForEntry88[1] = {
-    298968,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry88 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kEQ, GpuControlList::kVersionStyleNumerical,
-     "13.152.1.8000", nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry89[1] = {
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-};
-
-const uint32_t kCrBugsForEntry89[1] = {
-    298968,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry89 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kBetween, GpuControlList::kVersionStyleNumerical,
-     "8.810.4.5000", "8.970.100.1100"},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry90[1] = {
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-};
-
-const uint32_t kCrBugsForEntry90[1] = {
-    298968,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry90 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kBetween, GpuControlList::kVersionStyleNumerical,
-     "8.17.12.5729", "8.17.12.8026"},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry91[1] = {
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-};
-
-const uint32_t kCrBugsForEntry91[1] = {
-    298968,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry91 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kBetween, GpuControlList::kVersionStyleNumerical,
-     "9.18.13.783", "9.18.13.1090"},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry92[1] = {
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-};
-
-const uint32_t kCrBugsForEntry92[1] = {
-    298968,
-};
-
-const int kFeatureListForEntry93[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry93[1] = {
-    72373,
-};
-
-const GpuControlList::More kMoreForEntry93 = {
-    GpuControlList::kGLTypeNone,  // gl_type
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gl_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // pixel_shader_version
-    false,      // in_process_gpu
-    0,          // gl_reset_notification_strategy
-    false,      // direct_rendering
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gpu_count
-};
-
-const int kFeatureListForEntry94[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry94[1] = {
-    350566,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry94 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kEQ, GpuControlList::kVersionStyleNumerical,
-     "8.15.10.1749", nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry95[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry95[1] = {
-    363378,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry95 = {
-    ".*AMD.*",  // driver_vendor
-    {GpuControlList::kEQ, GpuControlList::kVersionStyleNumerical, "13.101",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry96[2] = {
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS, GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-};
-
-const uint32_t kCrBugsForEntry96[2] = {
-    362779, 424970,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry96Exception0 = {
-    nullptr, "Adreno \\(TM\\) 3.*", nullptr, nullptr,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry96Exception1 = {
-    nullptr, "Mali-4.*", nullptr, nullptr,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry96Exception2 = {
-    nullptr, "NVIDIA.*", nullptr, nullptr,
-};
-
-const GpuControlList::More kMoreForEntry96Exception3 = {
-    GpuControlList::kGLTypeGLES,  // gl_type
-    {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, "3.0",
-     nullptr},  // gl_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // pixel_shader_version
-    false,      // in_process_gpu
-    0,          // gl_reset_notification_strategy
-    true,       // direct_rendering
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gpu_count
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry96Exception4 = {
-    nullptr, ".*Google.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry100[2] = {
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS, GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-};
-
-const uint32_t kCrBugsForEntry100[1] = {
-    407144,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry100 = {
-    nullptr, ".*Mali-T604.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry102[2] = {
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS, GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-};
-
-const uint32_t kCrBugsForEntry102[1] = {
-    416910,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry102 = {
-    nullptr, "PowerVR SGX 540", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry104[2] = {
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS, GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-};
-
-const uint32_t kCrBugsForEntry104[2] = {
-    436331, 483574,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry104 = {
-    nullptr, "PowerVR Rogue.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry105[2] = {
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS, GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-};
-
-const uint32_t kCrBugsForEntry105[1] = {
-    461456,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry105 = {
-    nullptr, "PowerVR SGX.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry106[2] = {
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS, GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-};
-
-const uint32_t kCrBugsForEntry106[1] = {
-    480149,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry106 = {
-    nullptr, "Adreno \\(TM\\) 3.*", nullptr, nullptr,
-};
-
-const GpuControlList::More kMoreForEntry106 = {
-    GpuControlList::kGLTypeNone,  // gl_type
-    {GpuControlList::kLE, GpuControlList::kVersionStyleNumerical, "2.0",
-     nullptr},  // gl_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // pixel_shader_version
-    false,      // in_process_gpu
-    0,          // gl_reset_notification_strategy
-    true,       // direct_rendering
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gpu_count
-};
-
-const int kFeatureListForEntry107[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry107[1] = {
-    463243,
-};
-
-const uint32_t kDeviceIDsForEntry107[15] = {
-    0x0402, 0x0406, 0x040a, 0x040b, 0x040e, 0x0a02, 0x0a06, 0x0a0a,
-    0x0a0b, 0x0a0e, 0x0d02, 0x0d06, 0x0d0a, 0x0d0b, 0x0d0e,
-};
-
-const int kFeatureListForEntry108[2] = {
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS, GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-};
-
-const uint32_t kCrBugsForEntry108[1] = {
-    560587,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry108 = {
-    nullptr, ".*Vivante.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry109[1] = {
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-};
-
-const uint32_t kCrBugsForEntry109[1] = {
-    585963,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry109 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kEQ, GpuControlList::kVersionStyleNumerical, "45.0",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry109 = {
-    nullptr, "Adreno \\(TM\\) 330", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry110[11] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry110[1] = {
-    571899,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry110 = {
-    "Mesa",  // driver_vendor
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry110 = {
-    "VMware.*", ".*Gallium.*llvmpipe.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry111[1] = {
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-};
-
-const uint32_t kCrBugsForEntry111[1] = {
-    607829,
-};
-
-const int kFeatureListForEntry112[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry112[1] = {
-    592130,
-};
-
-const uint32_t kDeviceIDsForEntry112[2] = {
-    0x0116, 0x0126,
-};
-
-const int kFeatureListForEntry113[1] = {
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-};
-
-const uint32_t kCrBugsForEntry113[2] = {
-    613272, 614468,
-};
-
-const uint32_t kDeviceIDsForEntry113[8] = {
-    0x0126, 0x0116, 0x191e, 0x0046, 0x1912, 0x2a02, 0x27a2, 0x2a42,
-};
-
-const int kFeatureListForEntry114[1] = {
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-};
-
-const uint32_t kCrBugsForEntry114[2] = {
-    613272, 614468,
-};
-
-const uint32_t kDeviceIDsForEntry114[142] = {
-    0x0863, 0x08a0, 0x0a29, 0x0869, 0x0867, 0x08a3, 0x11a3, 0x08a2, 0x0407,
-    0x0861, 0x08a4, 0x0647, 0x0640, 0x0866, 0x0655, 0x062e, 0x0609, 0x1187,
-    0x13c2, 0x0602, 0x1180, 0x1401, 0x0fc8, 0x0611, 0x1189, 0x11c0, 0x0870,
-    0x0a65, 0x06dd, 0x0fc1, 0x1380, 0x11c6, 0x104a, 0x1184, 0x0fc6, 0x13c0,
-    0x1381, 0x05e3, 0x1183, 0x05fe, 0x1004, 0x17c8, 0x11ba, 0x0a20, 0x0f00,
-    0x0ca3, 0x06fd, 0x0f02, 0x0614, 0x0402, 0x13bb, 0x0401, 0x0f01, 0x1287,
-    0x0615, 0x1402, 0x019d, 0x0400, 0x0622, 0x06e4, 0x06cd, 0x1201, 0x100a,
-    0x10c3, 0x1086, 0x17c2, 0x1005, 0x0a23, 0x0de0, 0x1040, 0x0421, 0x1282,
-    0x0e22, 0x0e23, 0x0610, 0x11c8, 0x11c2, 0x1188, 0x0de9, 0x1200, 0x1244,
-    0x0dc4, 0x0df8, 0x0641, 0x0613, 0x11fa, 0x100c, 0x0de1, 0x0ca5, 0x0cb1,
-    0x0a6c, 0x05ff, 0x05e2, 0x0a2d, 0x06c0, 0x1288, 0x1048, 0x1081, 0x0dd8,
-    0x05e6, 0x11c4, 0x0605, 0x1080, 0x042f, 0x0ca2, 0x1245, 0x124d, 0x1284,
-    0x0191, 0x1050, 0x0ffd, 0x0193, 0x061a, 0x0422, 0x1185, 0x103a, 0x0fc2,
-    0x0194, 0x0df5, 0x040e, 0x065b, 0x0de2, 0x0a75, 0x0601, 0x1087, 0x019e,
-    0x104b, 0x107d, 0x1382, 0x042b, 0x1049, 0x0df0, 0x11a1, 0x040f, 0x0de3,
-    0x0fc0, 0x13d8, 0x0de4, 0x11e2, 0x0644, 0x0fd1, 0x0dfa,
-};
-
-const int kFeatureListForEntry115[1] = {
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-};
-
-const uint32_t kCrBugsForEntry115[2] = {
-    613272, 614468,
-};
-
-const uint32_t kDeviceIDsForEntry115[41] = {
-    0x6741, 0x6740, 0x9488, 0x9583, 0x6720, 0x6760, 0x68c0, 0x68a1, 0x944a,
-    0x94c8, 0x6819, 0x68b8, 0x6920, 0x6938, 0x6640, 0x9588, 0x6898, 0x9440,
-    0x6738, 0x6739, 0x6818, 0x6758, 0x6779, 0x9490, 0x68d9, 0x683f, 0x683d,
-    0x6899, 0x6759, 0x68e0, 0x68d8, 0x68ba, 0x68f9, 0x9501, 0x68a0, 0x6841,
-    0x6840, 0x9442, 0x6658, 0x68c8, 0x68c1,
-};
-
-const int kFeatureListForEntry116[1] = {
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-};
-
-const uint32_t kCrBugsForEntry116[2] = {
-    613272, 614468,
-};
-
-const int kFeatureListForEntry117[1] = {
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-};
-
-const uint32_t kCrBugsForEntry117[1] = {
-    626814,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry117 = {
-    nullptr, ".*Vivante.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry118[2] = {
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL, GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-};
-
-const uint32_t kCrBugsForEntry118[1] = {
-    628059,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry118 = {
-    "Vivante.*", ".*PXA.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry119[1] = {
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-};
-
-const uint32_t kCrBugsForEntry119[1] = {
-    611310,
-};
-
-const int kFeatureListForEntry120[1] = {
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-};
-
-const uint32_t kCrBugsForEntry120[1] = {
-    616318,
-};
-
-const int kFeatureListForEntry121[1] = {
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-};
-
-const uint32_t kCrBugsForEntry121[1] = {
-    616318,
-};
-
-const uint32_t kDeviceIDsForEntry121[47] = {
-    0x1602, 0x1606, 0x160a, 0x160b, 0x160d, 0x160e, 0x1612, 0x1616,
-    0x161a, 0x161b, 0x161d, 0x161e, 0x1622, 0x1626, 0x162a, 0x162b,
-    0x162d, 0x162e, 0x22b0, 0x22b1, 0x22b2, 0x22b3, 0x1902, 0x1906,
-    0x190a, 0x190b, 0x190e, 0x1912, 0x1913, 0x1915, 0x1916, 0x1917,
-    0x191a, 0x191b, 0x191d, 0x191e, 0x1921, 0x1923, 0x1926, 0x1927,
-    0x192a, 0x192b, 0x192d, 0x1932, 0x193a, 0x193b, 0x193d,
-};
-
-const int kFeatureListForEntry122[1] = {
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-};
-
-const uint32_t kCrBugsForEntry122[1] = {
-    643850,
-};
-
-const GpuControlList::More kMoreForEntry122Exception0 = {
-    GpuControlList::kGLTypeNone,  // gl_type
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gl_version
-    {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, "5.0",
-     nullptr},  // pixel_shader_version
-    false,      // in_process_gpu
-    0,          // gl_reset_notification_strategy
-    true,       // direct_rendering
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gpu_count
-};
-
-const GpuControlList::More kMoreForEntry122Exception1 = {
-    GpuControlList::kGLTypeNone,  // gl_type
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gl_version
-    {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, "5.0",
-     nullptr},  // pixel_shader_version
-    false,      // in_process_gpu
-    0,          // gl_reset_notification_strategy
-    true,       // direct_rendering
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gpu_count
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry122Exception2 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, "15.201",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const GpuControlList::More kMoreForEntry122Exception2 = {
-    GpuControlList::kGLTypeNone,  // gl_type
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gl_version
-    {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, "5.0",
-     nullptr},  // pixel_shader_version
-    false,      // in_process_gpu
-    0,          // gl_reset_notification_strategy
-    true,       // direct_rendering
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gpu_count
-};
-
-const int kFeatureListForEntry123[1] = {
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-};
-
-const uint32_t kCrBugsForEntry123[1] = {
-    654111,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry123 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical,
-     "21.20.16.4542", nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry124[1] = {
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-};
-
-const uint32_t kCrBugsForEntry124[1] = {
-    653538,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry124 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kGT, GpuControlList::kVersionStyleNumerical,
-     "16.200.1035.1001", nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry124Exception0 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, "21.19.384.0",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry125[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry125[2] = {
-    656572, 658668,
-};
-
-const uint32_t kDeviceIDsForEntry125[1] = {
-    0xbeef,
-};
-
-const int kFeatureListForEntry126[1] = {
-    GPU_FEATURE_TYPE_WEBGL2,
-};
-
-const uint32_t kCrBugsForEntry126[1] = {
-    295792,
-};
-
-const GpuControlList::More kMoreForEntry126 = {
-    GpuControlList::kGLTypeNone,  // gl_type
-    {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "4.1",
-     nullptr},  // gl_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // pixel_shader_version
-    false,      // in_process_gpu
-    0,          // gl_reset_notification_strategy
-    true,       // direct_rendering
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // gpu_count
-};
-
-const int kFeatureListForEntry129[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry129[1] = {
-    662909,
-};
-
-const int kFeatureListForEntry130[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry130[2] = {
-    676829, 676975,
-};
-
-const uint32_t kDeviceIDsForEntry130[3] = {
-    0x0407, 0x0647, 0x0863,
-};
-
-const int kFeatureListForEntry131[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry131[1] = {
-    462426,
-};
-
-const uint32_t kDeviceIDsForEntry131[1] = {
-    0x2a02,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry131 = {
-    "Mesa",  // driver_vendor
-    {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "10.4.3",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry132[1] = {
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-};
-
-const uint32_t kCrBugsForEntry132[1] = {
-    691601,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry132 = {
-    nullptr, "Mali-4.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry133[1] = {
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-};
-
-const uint32_t kCrBugsForEntry133[1] = {
-    654905,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry133 = {
-    nullptr, ".*VideoCore IV.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry134[12] = {
-    GPU_FEATURE_TYPE_FLASH_STAGE3D,
-    GPU_FEATURE_TYPE_GPU_COMPOSITING,
-    GPU_FEATURE_TYPE_PANEL_FITTING,
-    GPU_FEATURE_TYPE_FLASH3D,
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
-    GPU_FEATURE_TYPE_WEBGL2,
-    GPU_FEATURE_TYPE_ACCELERATED_VPX_DECODE,
-    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
-    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const uint32_t kCrBugsForEntry134[1] = {
-    629434,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry134 = {
-    "Mesa",  // driver_vendor
-    {GpuControlList::kLE, GpuControlList::kVersionStyleNumerical, "10.1.3",
-     nullptr},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry134Exception0 = {
-    nullptr, ".*SVGA3D.*", nullptr, nullptr,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry134Exception1 = {
-    nullptr, ".*Gallium.*llvmpipe.*", nullptr, nullptr,
-};
-
-const int kFeatureListForEntry136[1] = {
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-};
-
-const uint32_t kCrBugsForEntry136[1] = {
-    643850,
-};
-
-const uint32_t kDeviceIDsForEntry136[113] = {
-    0x06c0, 0x06c4, 0x06ca, 0x06cb, 0x06cd, 0x06d1, 0x06d2, 0x06d8, 0x06d9,
-    0x06da, 0x06dc, 0x06dd, 0x06de, 0x06df, 0x0e22, 0x0e23, 0x0e24, 0x0e30,
-    0x0e31, 0x0e3a, 0x0e3b, 0x1200, 0x1201, 0x1202, 0x1203, 0x1205, 0x1206,
-    0x1207, 0x1208, 0x1210, 0x1211, 0x1212, 0x1213, 0x0dc0, 0x0dc4, 0x0dc5,
-    0x0dc6, 0x0dcd, 0x0dce, 0x0dd1, 0x0dd2, 0x0dd3, 0x0dd6, 0x0dd8, 0x0dda,
-    0x1241, 0x1243, 0x1244, 0x1245, 0x1246, 0x1247, 0x1248, 0x1249, 0x124b,
-    0x124d, 0x1251, 0x0de0, 0x0de1, 0x0de2, 0x0de3, 0x0de4, 0x0de5, 0x0de8,
-    0x0de9, 0x0dea, 0x0deb, 0x0dec, 0x0ded, 0x0dee, 0x0def, 0x0df0, 0x0df1,
-    0x0df2, 0x0df3, 0x0df4, 0x0df5, 0x0df6, 0x0df7, 0x0df8, 0x0df9, 0x0dfa,
-    0x0dfc, 0x0f00, 0x0f01, 0x1080, 0x1081, 0x1082, 0x1084, 0x1086, 0x1087,
-    0x1088, 0x1089, 0x108b, 0x1091, 0x109a, 0x109b, 0x1040, 0x1042, 0x1048,
-    0x1049, 0x104a, 0x1050, 0x1051, 0x1052, 0x1054, 0x1055, 0x1056, 0x1057,
-    0x1058, 0x1059, 0x105a, 0x107d, 0x1140,
-};
-
-const int kFeatureListForEntry137[1] = {
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-};
-
-const uint32_t kCrBugsForEntry137[1] = {
-    684094,
-};
-
-const int kFeatureListForEntry138[1] = {
-    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE,
-};
-
-const int kFeatureListForEntry139[1] = {
-    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
-};
-
-const uint32_t kCrBugsForEntry139[1] = {
-    643850,
-};
-
-const GpuControlList::DriverInfo kDriverInfoForEntry139 = {
-    nullptr,  // driver_vendor
-    {GpuControlList::kBetween, GpuControlList::kVersionStyleNumerical, "15.301",
-     "15.302"},  // driver_version
-    {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, nullptr,
-     nullptr},  // driver_date
-};
-
-const int kFeatureListForEntry140[1] = {
-    GPU_FEATURE_TYPE_WEBGL2,
-};
-
-const uint32_t kCrBugsForEntry140[2] = {
-    449116, 698197,
-};
-
-const GpuControlList::GLStrings kGLStringsForEntry140 = {
-    nullptr, "Adreno \\(TM\\) 3.*", nullptr, nullptr,
-};
-
-}  // namespace gpu
-
-#endif  // GPU_CONFIG_SOFTWARE_RENDERING_LIST_ARRAYS_AND_STRUCTS_AUTOGEN_H_
diff --git a/gpu/config/software_rendering_list_autogen.cc b/gpu/config/software_rendering_list_autogen.cc
deleted file mode 100644
index 6022daa..0000000
--- a/gpu/config/software_rendering_list_autogen.cc
+++ /dev/null
@@ -1,2182 +0,0 @@
-// Copyright 2017 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.
-
-// This file is auto-generated from
-//    gpu/config/process_json.py
-// It's formatted by clang-format using chromium coding style:
-//    clang-format -i -style=chromium filename
-// DO NOT EDIT!
-
-#include "gpu/config/software_rendering_list_autogen.h"
-
-#include "gpu/config/software_rendering_list_arrays_and_structs_autogen.h"
-#include "gpu/config/software_rendering_list_exceptions_autogen.h"
-
-namespace gpu {
-
-const char kSoftwareRenderingListVersion[] = "13.2";
-
-const size_t kSoftwareRenderingListEntryCount = 82;
-const GpuControlList::Entry kSoftwareRenderingListEntries[82] = {
-    {
-        1,  // id
-        "ATI Radeon X1900 is not compatible with WebGL on the Mac",
-        arraysize(kFeatureListForEntry1),  // features size
-        kFeatureListForEntry1,             // features
-        0,                                 // DisabledExtensions size
-        nullptr,                           // DisabledExtensions
-        0,                                 // CrBugs size
-        nullptr,                           // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                    // os_version
-            0x1002,                                // vendor_id
-            arraysize(kDeviceIDsForEntry1),        // DeviceIDs size
-            kDeviceIDsForEntry1,                   // DeviceIDs
-            GpuControlList::kMultiGpuCategoryAny,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,    // multi_gpu_style
-            nullptr,                               // driver info
-            nullptr,                               // GL strings
-            nullptr,                               // machine model info
-            nullptr,                               // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        3,  // id
-        "GL driver is software rendered. GPU acceleration is disabled",
-        arraysize(kFeatureListForEntry3),  // features size
-        kFeatureListForEntry3,             // features
-        0,                                 // DisabledExtensions size
-        nullptr,                           // DisabledExtensions
-        arraysize(kCrBugsForEntry3),       // CrBugs size
-        kCrBugsForEntry3,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry3,                   // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        4,  // id
-        "The Intel Mobile 945 Express family of chipsets is not compatible "
-        "with WebGL",
-        arraysize(kFeatureListForEntry4),  // features size
-        kFeatureListForEntry4,             // features
-        0,                                 // DisabledExtensions size
-        nullptr,                           // DisabledExtensions
-        arraysize(kCrBugsForEntry4),       // CrBugs size
-        kCrBugsForEntry4,                  // CrBugs
-        {
-            GpuControlList::kOsAny,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            arraysize(kDeviceIDsForEntry4),         // DeviceIDs size
-            kDeviceIDsForEntry4,                    // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        5,  // id
-        "ATI/AMD cards with older drivers in Linux are crash-prone",
-        arraysize(kFeatureListForEntry5),  // features size
-        kFeatureListForEntry5,             // features
-        0,                                 // DisabledExtensions size
-        nullptr,                           // DisabledExtensions
-        arraysize(kCrBugsForEntry5),       // CrBugs size
-        kCrBugsForEntry5,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x1002,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        arraysize(kExceptionsForEntry5),  // exceptions count
-        kExceptionsForEntry5,             // exceptions
-    },
-    {
-        8,  // id
-        "NVIDIA GeForce FX Go5200 is assumed to be buggy",
-        arraysize(kFeatureListForEntry8),  // features size
-        kFeatureListForEntry8,             // features
-        0,                                 // DisabledExtensions size
-        nullptr,                           // DisabledExtensions
-        arraysize(kCrBugsForEntry8),       // CrBugs size
-        kCrBugsForEntry8,                  // CrBugs
-        {
-            GpuControlList::kOsAny,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            arraysize(kDeviceIDsForEntry8),         // DeviceIDs size
-            kDeviceIDsForEntry8,                    // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        10,  // id
-        "NVIDIA GeForce 7300 GT on Mac does not support WebGL",
-        arraysize(kFeatureListForEntry10),  // features size
-        kFeatureListForEntry10,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry10),       // CrBugs size
-        kCrBugsForEntry10,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                    // os_version
-            0x10de,                                // vendor_id
-            arraysize(kDeviceIDsForEntry10),       // DeviceIDs size
-            kDeviceIDsForEntry10,                  // DeviceIDs
-            GpuControlList::kMultiGpuCategoryAny,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,    // multi_gpu_style
-            nullptr,                               // driver info
-            nullptr,                               // GL strings
-            nullptr,                               // machine model info
-            nullptr,                               // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        12,  // id
-        "Drivers older than 2009-01 on Windows are possibly unreliable",
-        arraysize(kFeatureListForEntry12),  // features size
-        kFeatureListForEntry12,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry12),       // CrBugs size
-        kCrBugsForEntry12,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry12,                 // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        arraysize(kExceptionsForEntry12),  // exceptions count
-        kExceptionsForEntry12,             // exceptions
-    },
-    {
-        17,  // id
-        "Older Intel mesa drivers are crash-prone",
-        arraysize(kFeatureListForEntry17),  // features size
-        kFeatureListForEntry17,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry17),       // CrBugs size
-        kCrBugsForEntry17,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry17,                 // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        arraysize(kExceptionsForEntry17),  // exceptions count
-        kExceptionsForEntry17,             // exceptions
-    },
-    {
-        18,  // id
-        "NVIDIA Quadro FX 1500 is buggy",
-        arraysize(kFeatureListForEntry18),  // features size
-        kFeatureListForEntry18,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry18),       // CrBugs size
-        kCrBugsForEntry18,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            arraysize(kDeviceIDsForEntry18),        // DeviceIDs size
-            kDeviceIDsForEntry18,                   // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        27,  // id
-        "ATI/AMD cards with older drivers in Linux are crash-prone",
-        arraysize(kFeatureListForEntry27),  // features size
-        kFeatureListForEntry27,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry27),       // CrBugs size
-        kCrBugsForEntry27,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry27,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        arraysize(kExceptionsForEntry27),  // exceptions count
-        kExceptionsForEntry27,             // exceptions
-    },
-    {
-        28,  // id
-        "ATI/AMD cards with third-party drivers in Linux are crash-prone",
-        arraysize(kFeatureListForEntry28),  // features size
-        kFeatureListForEntry28,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry28),       // CrBugs size
-        kCrBugsForEntry28,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry28,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        arraysize(kExceptionsForEntry28),  // exceptions count
-        kExceptionsForEntry28,             // exceptions
-    },
-    {
-        29,  // id
-        "ATI/AMD cards with third-party drivers in Linux are crash-prone",
-        arraysize(kFeatureListForEntry29),  // features size
-        kFeatureListForEntry29,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry29),       // CrBugs size
-        kCrBugsForEntry29,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry29,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        arraysize(kExceptionsForEntry29),  // exceptions count
-        kExceptionsForEntry29,             // exceptions
-    },
-    {
-        30,  // id
-        "NVIDIA cards with nouveau drivers in Linux are crash-prone",
-        arraysize(kFeatureListForEntry30),  // features size
-        kFeatureListForEntry30,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry30),       // CrBugs size
-        kCrBugsForEntry30,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry30,                 // driver info
-            &kGLStringsForEntry30,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        34,  // id
-        "S3 Trio (used in Virtual PC) is not compatible",
-        arraysize(kFeatureListForEntry34),  // features size
-        kFeatureListForEntry34,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry34),       // CrBugs size
-        kCrBugsForEntry34,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x5333,                                 // vendor_id
-            arraysize(kDeviceIDsForEntry34),        // DeviceIDs size
-            kDeviceIDsForEntry34,                   // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        37,  // id
-        "Older drivers are unreliable for Optimus on Linux",
-        arraysize(kFeatureListForEntry37),  // features size
-        kFeatureListForEntry37,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry37),       // CrBugs size
-        kCrBugsForEntry37,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleOptimus,  // multi_gpu_style
-            &kDriverInfoForEntry37,                 // driver info
-            &kGLStringsForEntry37,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        45,  // id
-        "Parallels drivers older than 7 are buggy",
-        arraysize(kFeatureListForEntry45),  // features size
-        kFeatureListForEntry45,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry45),       // CrBugs size
-        kCrBugsForEntry45,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x1ab8,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry45,                 // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        46,  // id
-        "ATI FireMV 2400 cards on Windows are buggy",
-        arraysize(kFeatureListForEntry46),  // features size
-        kFeatureListForEntry46,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry46),       // CrBugs size
-        kCrBugsForEntry46,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x1002,                                 // vendor_id
-            arraysize(kDeviceIDsForEntry46),        // DeviceIDs size
-            kDeviceIDsForEntry46,                   // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        47,  // id
-        "NVIDIA linux drivers older than 295.* are assumed to be buggy",
-        arraysize(kFeatureListForEntry47),  // features size
-        kFeatureListForEntry47,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry47),       // CrBugs size
-        kCrBugsForEntry47,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry47,                 // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        48,  // id
-        "Accelerated video decode is unavailable on Linux",
-        arraysize(kFeatureListForEntry48),  // features size
-        kFeatureListForEntry48,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry48),       // CrBugs size
-        kCrBugsForEntry48,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        50,  // id
-        "Disable VMware software renderer on older Mesa",
-        arraysize(kFeatureListForEntry50),  // features size
-        kFeatureListForEntry50,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry50),       // CrBugs size
-        kCrBugsForEntry50,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry50,                  // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        arraysize(kExceptionsForEntry50),  // exceptions count
-        kExceptionsForEntry50,             // exceptions
-    },
-    {
-        53,  // id
-        "The Intel GMA500 is too slow for Stage3D",
-        arraysize(kFeatureListForEntry53),  // features size
-        kFeatureListForEntry53,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry53),       // CrBugs size
-        kCrBugsForEntry53,                  // CrBugs
-        {
-            GpuControlList::kOsAny,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            arraysize(kDeviceIDsForEntry53),        // DeviceIDs size
-            kDeviceIDsForEntry53,                   // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        56,  // id
-        "NVIDIA linux drivers are unstable when using multiple Open GL "
-        "contexts and with low memory",
-        arraysize(kFeatureListForEntry56),  // features size
-        kFeatureListForEntry56,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry56),       // CrBugs size
-        kCrBugsForEntry56,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry56,                 // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        57,  // id
-        "Chrome OS panel fitting is only supported for Intel IVB and SNB "
-        "Graphics Controllers",
-        arraysize(kFeatureListForEntry57),  // features size
-        kFeatureListForEntry57,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        0,                                  // CrBugs size
-        nullptr,                            // CrBugs
-        {
-            GpuControlList::kOsChromeOS,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        arraysize(kExceptionsForEntry57),  // exceptions count
-        kExceptionsForEntry57,             // exceptions
-    },
-    {
-        59,  // id
-        "NVidia driver 8.15.11.8593 is crashy on Windows",
-        arraysize(kFeatureListForEntry59),  // features size
-        kFeatureListForEntry59,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry59),       // CrBugs size
-        kCrBugsForEntry59,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry59,                 // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        64,  // id
-        "Hardware video decode is only supported in win7+",
-        arraysize(kFeatureListForEntry64),  // features size
-        kFeatureListForEntry64,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry64),       // CrBugs size
-        kCrBugsForEntry64,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "6.1",
-             nullptr},                              // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        68,  // id
-        "VMware Fusion 4 has corrupt rendering with Win Vista+",
-        arraysize(kFeatureListForEntry68),  // features size
-        kFeatureListForEntry68,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry68),       // CrBugs size
-        kCrBugsForEntry68,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, "6.0",
-             nullptr},                              // os_version
-            0x15ad,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry68,                 // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        69,  // id
-        "NVIDIA driver 8.17.11.9621 is buggy with Stage3D baseline mode",
-        arraysize(kFeatureListForEntry69),  // features size
-        kFeatureListForEntry69,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry69),       // CrBugs size
-        kCrBugsForEntry69,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry69,                 // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        70,  // id
-        "NVIDIA driver 8.17.11.8267 is buggy with Stage3D baseline mode",
-        arraysize(kFeatureListForEntry70),  // features size
-        kFeatureListForEntry70,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry70),       // CrBugs size
-        kCrBugsForEntry70,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry70,                 // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        71,  // id
-        "All Intel drivers before 8.15.10.2021 are buggy with Stage3D baseline "
-        "mode",
-        arraysize(kFeatureListForEntry71),  // features size
-        kFeatureListForEntry71,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry71),       // CrBugs size
-        kCrBugsForEntry71,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry71,                 // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        72,  // id
-        "NVIDIA GeForce 6200 LE is buggy with WebGL",
-        arraysize(kFeatureListForEntry72),  // features size
-        kFeatureListForEntry72,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry72),       // CrBugs size
-        kCrBugsForEntry72,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            arraysize(kDeviceIDsForEntry72),        // DeviceIDs size
-            kDeviceIDsForEntry72,                   // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        74,  // id
-        "GPU access is blocked if users don't have proper graphics driver "
-        "installed after Windows installation",
-        arraysize(kFeatureListForEntry74),  // features size
-        kFeatureListForEntry74,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry74),       // CrBugs size
-        kCrBugsForEntry74,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry74,                 // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        arraysize(kExceptionsForEntry74),  // exceptions count
-        kExceptionsForEntry74,             // exceptions
-    },
-    {
-        76,  // id
-        "WebGL is disabled on Android unless the GPU runs in a separate "
-        "process or reset notification is supported",
-        arraysize(kFeatureListForEntry76),  // features size
-        kFeatureListForEntry76,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        0,                                  // CrBugs size
-        nullptr,                            // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            &kMoreForEntry76,                       // more data
-        },
-        arraysize(kExceptionsForEntry76),  // exceptions count
-        kExceptionsForEntry76,             // exceptions
-    },
-    {
-        78,  // id
-        "Accelerated video decode interferes with GPU sandbox on older Intel "
-        "drivers",
-        arraysize(kFeatureListForEntry78),  // features size
-        kFeatureListForEntry78,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry78),       // CrBugs size
-        kCrBugsForEntry78,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry78,                 // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        79,  // id
-        "Disable GPU on all Windows versions prior to and including Vista",
-        arraysize(kFeatureListForEntry79),  // features size
-        kFeatureListForEntry79,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry79),       // CrBugs size
-        kCrBugsForEntry79,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kLE, GpuControlList::kVersionStyleNumerical, "6.0",
-             nullptr},                              // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        82,  // id
-        "MediaCodec is still too buggy to use for encoding (b/11536167)",
-        arraysize(kFeatureListForEntry82),  // features size
-        kFeatureListForEntry82,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry82),       // CrBugs size
-        kCrBugsForEntry82,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        86,  // id
-        "Intel Graphics Media Accelerator 3150 causes the GPU process to hang "
-        "running WebGL",
-        arraysize(kFeatureListForEntry86),  // features size
-        kFeatureListForEntry86,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry86),       // CrBugs size
-        kCrBugsForEntry86,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            arraysize(kDeviceIDsForEntry86),        // DeviceIDs size
-            kDeviceIDsForEntry86,                   // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        87,  // id
-        "Accelerated video decode on Intel driver 10.18.10.3308 is "
-        "incompatible with the GPU sandbox",
-        arraysize(kFeatureListForEntry87),  // features size
-        kFeatureListForEntry87,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry87),       // CrBugs size
-        kCrBugsForEntry87,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry87,                 // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        88,  // id
-        "Accelerated video decode on AMD driver 13.152.1.8000 is incompatible "
-        "with the GPU sandbox",
-        arraysize(kFeatureListForEntry88),  // features size
-        kFeatureListForEntry88,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry88),       // CrBugs size
-        kCrBugsForEntry88,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x1002,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry88,                 // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        89,  // id
-        "Accelerated video decode interferes with GPU sandbox on certain AMD "
-        "drivers",
-        arraysize(kFeatureListForEntry89),  // features size
-        kFeatureListForEntry89,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry89),       // CrBugs size
-        kCrBugsForEntry89,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x1002,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry89,                 // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        90,  // id
-        "Accelerated video decode interferes with GPU sandbox on certain "
-        "NVIDIA drivers",
-        arraysize(kFeatureListForEntry90),  // features size
-        kFeatureListForEntry90,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry90),       // CrBugs size
-        kCrBugsForEntry90,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry90,                 // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        91,  // id
-        "Accelerated video decode interferes with GPU sandbox on certain "
-        "NVIDIA drivers",
-        arraysize(kFeatureListForEntry91),  // features size
-        kFeatureListForEntry91,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry91),       // CrBugs size
-        kCrBugsForEntry91,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry91,                 // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        92,  // id
-        "Accelerated video decode does not work with the discrete GPU on AMD "
-        "switchables",
-        arraysize(kFeatureListForEntry92),  // features size
-        kFeatureListForEntry92,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry92),       // CrBugs size
-        kCrBugsForEntry92,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::
-                kMultiGpuStyleAMDSwitchableDiscrete,  // multi_gpu_style
-            nullptr,                                  // driver info
-            nullptr,                                  // GL strings
-            nullptr,                                  // machine model info
-            nullptr,                                  // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        93,  // id
-        "GLX indirect rendering (X remoting) is not supported",
-        arraysize(kFeatureListForEntry93),  // features size
-        kFeatureListForEntry93,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry93),       // CrBugs size
-        kCrBugsForEntry93,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            &kMoreForEntry93,                       // more data
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        94,  // id
-        "Intel driver version 8.15.10.1749 causes GPU process hangs.",
-        arraysize(kFeatureListForEntry94),  // features size
-        kFeatureListForEntry94,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry94),       // CrBugs size
-        kCrBugsForEntry94,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry94,                 // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        95,  // id
-        "AMD driver version 13.101 is unstable on linux.",
-        arraysize(kFeatureListForEntry95),  // features size
-        kFeatureListForEntry95,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry95),       // CrBugs size
-        kCrBugsForEntry95,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x1002,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry95,                 // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        96,  // id
-        "Blacklist GPU raster/canvas on all except known good GPUs and newer "
-        "Android releases",
-        arraysize(kFeatureListForEntry96),  // features size
-        kFeatureListForEntry96,             // features
-        0,                                  // DisabledExtensions size
-        nullptr,                            // DisabledExtensions
-        arraysize(kCrBugsForEntry96),       // CrBugs size
-        kCrBugsForEntry96,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        arraysize(kExceptionsForEntry96),  // exceptions count
-        kExceptionsForEntry96,             // exceptions
-    },
-    {
-        100,  // id
-        "GPU rasterization and canvas is blacklisted on Nexus 10",
-        arraysize(kFeatureListForEntry100),  // features size
-        kFeatureListForEntry100,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry100),       // CrBugs size
-        kCrBugsForEntry100,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry100,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        102,  // id
-        "Accelerated 2D canvas and Ganesh broken on Galaxy Tab 2",
-        arraysize(kFeatureListForEntry102),  // features size
-        kFeatureListForEntry102,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry102),       // CrBugs size
-        kCrBugsForEntry102,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry102,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        104,  // id
-        "GPU raster broken on PowerVR Rogue",
-        arraysize(kFeatureListForEntry104),  // features size
-        kFeatureListForEntry104,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry104),       // CrBugs size
-        kCrBugsForEntry104,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry104,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        105,  // id
-        "GPU raster broken on PowerVR SGX even on Lollipop",
-        arraysize(kFeatureListForEntry105),  // features size
-        kFeatureListForEntry105,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry105),       // CrBugs size
-        kCrBugsForEntry105,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry105,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        106,  // id
-        "GPU raster broken on ES2-only Adreno 3xx drivers",
-        arraysize(kFeatureListForEntry106),  // features size
-        kFeatureListForEntry106,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry106),       // CrBugs size
-        kCrBugsForEntry106,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry106,                 // GL strings
-            nullptr,                                // machine model info
-            &kMoreForEntry106,                      // more data
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        107,  // id
-        "Haswell GT1 Intel drivers are buggy on kernels < 3.19.1",
-        arraysize(kFeatureListForEntry107),  // features size
-        kFeatureListForEntry107,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry107),       // CrBugs size
-        kCrBugsForEntry107,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical,
-             "3.19.1", nullptr},                    // os_version
-            0x8086,                                 // vendor_id
-            arraysize(kDeviceIDsForEntry107),       // DeviceIDs size
-            kDeviceIDsForEntry107,                  // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        108,  // id
-        "GPU rasterization image color broken on Vivante",
-        arraysize(kFeatureListForEntry108),  // features size
-        kFeatureListForEntry108,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry108),       // CrBugs size
-        kCrBugsForEntry108,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry108,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        109,  // id
-        "MediaCodec on Adreno 330 / 4.2.2 doesn't always send FORMAT_CHANGED",
-        arraysize(kFeatureListForEntry109),  // features size
-        kFeatureListForEntry109,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry109),       // CrBugs size
-        kCrBugsForEntry109,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kEQ, GpuControlList::kVersionStyleNumerical,
-             "4.2.2", nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry109,                // driver info
-            &kGLStringsForEntry109,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        110,  // id
-        "Only enable WebGL for the Mesa Gallium llvmpipe driver",
-        arraysize(kFeatureListForEntry110),  // features size
-        kFeatureListForEntry110,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry110),       // CrBugs size
-        kCrBugsForEntry110,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry110,                // driver info
-            &kGLStringsForEntry110,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        111,  // id
-        "Apple Software Renderer used under VMWare experiences synchronization "
-        "issues with GPU Raster",
-        arraysize(kFeatureListForEntry111),  // features size
-        kFeatureListForEntry111,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry111),       // CrBugs size
-        kCrBugsForEntry111,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                    // os_version
-            0x15ad,                                // vendor_id
-            0,                                     // DeviceIDs size
-            nullptr,                               // DeviceIDs
-            GpuControlList::kMultiGpuCategoryAny,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,    // multi_gpu_style
-            nullptr,                               // driver info
-            nullptr,                               // GL strings
-            nullptr,                               // machine model info
-            nullptr,                               // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        112,  // id
-        "Intel HD 3000 driver crashes frequently on Mac",
-        arraysize(kFeatureListForEntry112),  // features size
-        kFeatureListForEntry112,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry112),       // CrBugs size
-        kCrBugsForEntry112,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                    // os_version
-            0x8086,                                // vendor_id
-            arraysize(kDeviceIDsForEntry112),      // DeviceIDs size
-            kDeviceIDsForEntry112,                 // DeviceIDs
-            GpuControlList::kMultiGpuCategoryAny,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,    // multi_gpu_style
-            nullptr,                               // driver info
-            nullptr,                               // GL strings
-            nullptr,                               // machine model info
-            nullptr,                               // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        113,  // id
-        "Some GPUs on Mac can perform poorly with GPU rasterization. Disable "
-        "all known Intel GPUs other than Intel 6th and 7th Generation cards, "
-        "which have been tested.",
-        arraysize(kFeatureListForEntry113),  // features size
-        kFeatureListForEntry113,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry113),       // CrBugs size
-        kCrBugsForEntry113,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                    // os_version
-            0x8086,                                // vendor_id
-            arraysize(kDeviceIDsForEntry113),      // DeviceIDs size
-            kDeviceIDsForEntry113,                 // DeviceIDs
-            GpuControlList::kMultiGpuCategoryAny,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,    // multi_gpu_style
-            nullptr,                               // driver info
-            nullptr,                               // GL strings
-            nullptr,                               // machine model info
-            nullptr,                               // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        114,  // id
-        "Some GPUs on Mac can perform poorly with GPU rasterization. Disable "
-        "all known NVidia GPUs other than the Geforce 6xx and 7xx series, "
-        "which have been tested.",
-        arraysize(kFeatureListForEntry114),  // features size
-        kFeatureListForEntry114,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry114),       // CrBugs size
-        kCrBugsForEntry114,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                    // os_version
-            0x10de,                                // vendor_id
-            arraysize(kDeviceIDsForEntry114),      // DeviceIDs size
-            kDeviceIDsForEntry114,                 // DeviceIDs
-            GpuControlList::kMultiGpuCategoryAny,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,    // multi_gpu_style
-            nullptr,                               // driver info
-            nullptr,                               // GL strings
-            nullptr,                               // machine model info
-            nullptr,                               // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        115,  // id
-        "Some GPUs on Mac can perform poorly with GPU rasterization. Disable "
-        "all known AMD GPUs other than the R200, R300, and D series, which "
-        "have been tested.",
-        arraysize(kFeatureListForEntry115),  // features size
-        kFeatureListForEntry115,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry115),       // CrBugs size
-        kCrBugsForEntry115,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                    // os_version
-            0x1002,                                // vendor_id
-            arraysize(kDeviceIDsForEntry115),      // DeviceIDs size
-            kDeviceIDsForEntry115,                 // DeviceIDs
-            GpuControlList::kMultiGpuCategoryAny,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,    // multi_gpu_style
-            nullptr,                               // driver info
-            nullptr,                               // GL strings
-            nullptr,                               // machine model info
-            nullptr,                               // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        116,  // id
-        "Some GPUs on Mac can perform poorly with GPU rasterization. Disable "
-        "untested Virtualbox GPU.",
-        arraysize(kFeatureListForEntry116),  // features size
-        kFeatureListForEntry116,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry116),       // CrBugs size
-        kCrBugsForEntry116,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                    // os_version
-            0x80ee,                                // vendor_id
-            0,                                     // DeviceIDs size
-            nullptr,                               // DeviceIDs
-            GpuControlList::kMultiGpuCategoryAny,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,    // multi_gpu_style
-            nullptr,                               // driver info
-            nullptr,                               // GL strings
-            nullptr,                               // machine model info
-            nullptr,                               // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        117,  // id
-        "MediaCodec on Vivante hangs in MediaCodec often",
-        arraysize(kFeatureListForEntry117),  // features size
-        kFeatureListForEntry117,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry117),       // CrBugs size
-        kCrBugsForEntry117,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kLE, GpuControlList::kVersionStyleNumerical,
-             "4.4.4", nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry117,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        118,  // id
-        "webgl/canvas crashy on imporperly parsed vivante driver",
-        arraysize(kFeatureListForEntry118),  // features size
-        kFeatureListForEntry118,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry118),       // CrBugs size
-        kCrBugsForEntry118,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kLE, GpuControlList::kVersionStyleNumerical,
-             "4.4.4", nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry118,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        119,  // id
-        "There are display issues with GPU Raster on OSX 10.9",
-        arraysize(kFeatureListForEntry119),  // features size
-        kFeatureListForEntry119,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry119),       // CrBugs size
-        kCrBugsForEntry119,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kLE, GpuControlList::kVersionStyleNumerical,
-             "10.9", nullptr},                      // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        120,  // id
-        "VPx decoding isn't supported before Windows 10 anniversary update.",
-        arraysize(kFeatureListForEntry120),  // features size
-        kFeatureListForEntry120,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry120),       // CrBugs size
-        kCrBugsForEntry120,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical,
-             "10.0.14393", nullptr},                // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        121,  // id
-        "VPx decoding is too slow on Intel Broadwell, Skylake, and CherryView",
-        arraysize(kFeatureListForEntry121),  // features size
-        kFeatureListForEntry121,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry121),       // CrBugs size
-        kCrBugsForEntry121,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            arraysize(kDeviceIDsForEntry121),       // DeviceIDs size
-            kDeviceIDsForEntry121,                  // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        122,  // id
-        "GPU rasterization should only be enabled on NVIDIA and Intel DX11+, "
-        "and AMD RX-R2 GPUs for now.",
-        arraysize(kFeatureListForEntry122),  // features size
-        kFeatureListForEntry122,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry122),       // CrBugs size
-        kCrBugsForEntry122,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        arraysize(kExceptionsForEntry122),  // exceptions count
-        kExceptionsForEntry122,             // exceptions
-    },
-    {
-        123,  // id
-        "Accelerated VPx decoding is hanging on some videos.",
-        arraysize(kFeatureListForEntry123),  // features size
-        kFeatureListForEntry123,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry123),       // CrBugs size
-        kCrBugsForEntry123,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x8086,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry123,                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        124,  // id
-        "Some AMD drivers have rendering glitches with GPU Rasterization",
-        arraysize(kFeatureListForEntry124),  // features size
-        kFeatureListForEntry124,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry124),       // CrBugs size
-        kCrBugsForEntry124,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x1002,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry124,                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        arraysize(kExceptionsForEntry124),  // exceptions count
-        kExceptionsForEntry124,             // exceptions
-    },
-    {
-        125,  // id
-        "VirtualBox driver is unstable on linux.",
-        arraysize(kFeatureListForEntry125),  // features size
-        kFeatureListForEntry125,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry125),       // CrBugs size
-        kCrBugsForEntry125,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x80ee,                                 // vendor_id
-            arraysize(kDeviceIDsForEntry125),       // DeviceIDs size
-            kDeviceIDsForEntry125,                  // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        126,  // id
-        "Don't allow ES3 on Mac core profile < 4.1",
-        arraysize(kFeatureListForEntry126),  // features size
-        kFeatureListForEntry126,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry126),       // CrBugs size
-        kCrBugsForEntry126,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            &kMoreForEntry126,                      // more data
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        129,  // id
-        "Intel drivers are buggy on Linux 2.x",
-        arraysize(kFeatureListForEntry129),  // features size
-        kFeatureListForEntry129,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry129),       // CrBugs size
-        kCrBugsForEntry129,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "3.0",
-             nullptr},                              // os_version
-            0x8086,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        130,  // id
-        "Older NVIDIA GPUs on macOS render incorrectly",
-        arraysize(kFeatureListForEntry130),  // features size
-        kFeatureListForEntry130,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry130),       // CrBugs size
-        kCrBugsForEntry130,                  // CrBugs
-        {
-            GpuControlList::kOsMacosx,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                    // os_version
-            0x10de,                                // vendor_id
-            arraysize(kDeviceIDsForEntry130),      // DeviceIDs size
-            kDeviceIDsForEntry130,                 // DeviceIDs
-            GpuControlList::kMultiGpuCategoryAny,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,    // multi_gpu_style
-            nullptr,                               // driver info
-            nullptr,                               // GL strings
-            nullptr,                               // machine model info
-            nullptr,                               // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        131,  // id
-        "Mesa drivers older than 10.4.3 is crash prone on Linux Intel i965gm",
-        arraysize(kFeatureListForEntry131),  // features size
-        kFeatureListForEntry131,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry131),       // CrBugs size
-        kCrBugsForEntry131,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x1f96,                                 // vendor_id
-            arraysize(kDeviceIDsForEntry131),       // DeviceIDs size
-            kDeviceIDsForEntry131,                  // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry131,                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        132,  // id
-        "Mali accelerated 2d canvas is slow on Linux",
-        arraysize(kFeatureListForEntry132),  // features size
-        kFeatureListForEntry132,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry132),       // CrBugs size
-        kCrBugsForEntry132,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry132,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        133,  // id
-        "MediaCodec on VideoCore IV HW crashes on JB",
-        arraysize(kFeatureListForEntry133),  // features size
-        kFeatureListForEntry133,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry133),       // CrBugs size
-        kCrBugsForEntry133,                  // CrBugs
-        {
-            GpuControlList::kOsAndroid,  // os_type
-            {GpuControlList::kLT, GpuControlList::kVersionStyleNumerical, "4.4",
-             nullptr},                              // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry133,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        134,  // id
-        "Mesa driver 10.1.3 renders incorrectly and crashes on multiple "
-        "vendors",
-        arraysize(kFeatureListForEntry134),  // features size
-        kFeatureListForEntry134,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry134),       // CrBugs size
-        kCrBugsForEntry134,                  // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry134,                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        arraysize(kExceptionsForEntry134),  // exceptions count
-        kExceptionsForEntry134,             // exceptions
-    },
-    {
-        136,  // id
-        "GPU rasterization is blacklisted on NVidia Fermi architecture for "
-        "now.",
-        arraysize(kFeatureListForEntry136),  // features size
-        kFeatureListForEntry136,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry136),       // CrBugs size
-        kCrBugsForEntry136,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x10de,                                 // vendor_id
-            arraysize(kDeviceIDsForEntry136),       // DeviceIDs size
-            kDeviceIDsForEntry136,                  // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        137,  // id
-        "GPU rasterization on CrOS is blacklisted on non-Intel GPUs for now.",
-        arraysize(kFeatureListForEntry137),  // features size
-        kFeatureListForEntry137,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry137),       // CrBugs size
-        kCrBugsForEntry137,                  // CrBugs
-        {
-            GpuControlList::kOsChromeOS,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        arraysize(kExceptionsForEntry137),  // exceptions count
-        kExceptionsForEntry137,             // exceptions
-    },
-    {
-        138,  // id
-        "Accelerated video encode is unavailable on Linux",
-        arraysize(kFeatureListForEntry138),  // features size
-        kFeatureListForEntry138,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        0,                                   // CrBugs size
-        nullptr,                             // CrBugs
-        {
-            GpuControlList::kOsLinux,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        139,  // id
-        "GPU Rasterization is disabled on pre-GCN AMD cards",
-        arraysize(kFeatureListForEntry139),  // features size
-        kFeatureListForEntry139,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry139),       // CrBugs size
-        kCrBugsForEntry139,                  // CrBugs
-        {
-            GpuControlList::kOsWin,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x1002,                                 // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            &kDriverInfoForEntry139,                // driver info
-            nullptr,                                // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-    {
-        140,  // id
-        "MSAA and depth texture buggy on Adreno 3xx, also disable WebGL2",
-        arraysize(kFeatureListForEntry140),  // features size
-        kFeatureListForEntry140,             // features
-        0,                                   // DisabledExtensions size
-        nullptr,                             // DisabledExtensions
-        arraysize(kCrBugsForEntry140),       // CrBugs size
-        kCrBugsForEntry140,                  // CrBugs
-        {
-            GpuControlList::kOsAny,  // os_type
-            {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-             nullptr, nullptr},                     // os_version
-            0x00,                                   // vendor_id
-            0,                                      // DeviceIDs size
-            nullptr,                                // DeviceIDs
-            GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-            GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-            nullptr,                                // driver info
-            &kGLStringsForEntry140,                 // GL strings
-            nullptr,                                // machine model info
-            nullptr,                                // more conditions
-        },
-        0,        // exceptions count
-        nullptr,  // exceptions
-    },
-};
-}  // namespace gpu
diff --git a/gpu/config/software_rendering_list_autogen.h b/gpu/config/software_rendering_list_autogen.h
deleted file mode 100644
index ceb1a9de..0000000
--- a/gpu/config/software_rendering_list_autogen.h
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2017 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.
-
-// This file is auto-generated from
-//    gpu/config/process_json.py
-// It's formatted by clang-format using chromium coding style:
-//    clang-format -i -style=chromium filename
-// DO NOT EDIT!
-
-#ifndef GPU_CONFIG_SOFTWARE_RENDERING_LIST_AUTOGEN_H_
-#define GPU_CONFIG_SOFTWARE_RENDERING_LIST_AUTOGEN_H_
-
-#include "gpu/config/gpu_control_list.h"
-
-namespace gpu {
-GPU_EXPORT extern const char kSoftwareRenderingListVersion[];
-GPU_EXPORT extern const size_t kSoftwareRenderingListEntryCount;
-GPU_EXPORT extern const GpuControlList::Entry kSoftwareRenderingListEntries[];
-}  // namespace gpu
-
-#endif  // GPU_CONFIG_SOFTWARE_RENDERING_LIST_AUTOGEN_H_
diff --git a/gpu/config/software_rendering_list_exceptions_autogen.h b/gpu/config/software_rendering_list_exceptions_autogen.h
deleted file mode 100644
index 8387c83..0000000
--- a/gpu/config/software_rendering_list_exceptions_autogen.h
+++ /dev/null
@@ -1,524 +0,0 @@
-// Copyright 2017 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.
-
-// This file is auto-generated from
-//    gpu/config/process_json.py
-// It's formatted by clang-format using chromium coding style:
-//    clang-format -i -style=chromium filename
-// DO NOT EDIT!
-
-#ifndef GPU_CONFIG_SOFTWARE_RENDERING_LIST_EXCEPTIONS_AUTOGEN_H_
-#define GPU_CONFIG_SOFTWARE_RENDERING_LIST_EXCEPTIONS_AUTOGEN_H_
-
-namespace gpu {
-const GpuControlList::Conditions kExceptionsForEntry5[3] = {
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                     // os_version
-        0x00,                                   // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        &kDriverInfoForEntry5Exception0,        // driver info
-        nullptr,                                // GL strings
-        nullptr,                                // machine model info
-        nullptr,                                // more conditions
-    },
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                     // os_version
-        0x00,                                   // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        &kDriverInfoForEntry5Exception1,        // driver info
-        nullptr,                                // GL strings
-        nullptr,                                // machine model info
-        nullptr,                                // more conditions
-    },
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                     // os_version
-        0x00,                                   // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        &kDriverInfoForEntry5Exception2,        // driver info
-        nullptr,                                // GL strings
-        nullptr,                                // machine model info
-        nullptr,                                // more conditions
-    },
-};
-
-const GpuControlList::Conditions kExceptionsForEntry12[3] = {
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                         // os_version
-        0x8086,                                     // vendor_id
-        arraysize(kDeviceIDsForEntry12Exception0),  // DeviceIDs size
-        kDeviceIDsForEntry12Exception0,             // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,      // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,         // multi_gpu_style
-        &kDriverInfoForEntry12Exception0,           // driver info
-        nullptr,                                    // GL strings
-        nullptr,                                    // machine model info
-        nullptr,                                    // more conditions
-    },
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                     // os_version
-        0x00,                                   // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        &kDriverInfoForEntry12Exception1,       // driver info
-        nullptr,                                // GL strings
-        nullptr,                                // machine model info
-        nullptr,                                // more conditions
-    },
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                         // os_version
-        0x1414,                                     // vendor_id
-        arraysize(kDeviceIDsForEntry12Exception2),  // DeviceIDs size
-        kDeviceIDsForEntry12Exception2,             // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,      // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,         // multi_gpu_style
-        nullptr,                                    // driver info
-        nullptr,                                    // GL strings
-        nullptr,                                    // machine model info
-        nullptr,                                    // more conditions
-    },
-};
-
-const GpuControlList::Conditions kExceptionsForEntry17[5] = {
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                         // os_version
-        0x8086,                                     // vendor_id
-        arraysize(kDeviceIDsForEntry17Exception0),  // DeviceIDs size
-        kDeviceIDsForEntry17Exception0,             // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,      // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,         // multi_gpu_style
-        &kDriverInfoForEntry17Exception0,           // driver info
-        nullptr,                                    // GL strings
-        nullptr,                                    // machine model info
-        nullptr,                                    // more conditions
-    },
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                         // os_version
-        0x8086,                                     // vendor_id
-        arraysize(kDeviceIDsForEntry17Exception1),  // DeviceIDs size
-        kDeviceIDsForEntry17Exception1,             // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,      // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,         // multi_gpu_style
-        &kDriverInfoForEntry17Exception1,           // driver info
-        nullptr,                                    // GL strings
-        nullptr,                                    // machine model info
-        nullptr,                                    // more conditions
-    },
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                         // os_version
-        0x8086,                                     // vendor_id
-        arraysize(kDeviceIDsForEntry17Exception2),  // DeviceIDs size
-        kDeviceIDsForEntry17Exception2,             // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,      // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,         // multi_gpu_style
-        &kDriverInfoForEntry17Exception2,           // driver info
-        nullptr,                                    // GL strings
-        nullptr,                                    // machine model info
-        nullptr,                                    // more conditions
-    },
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                         // os_version
-        0x8086,                                     // vendor_id
-        arraysize(kDeviceIDsForEntry17Exception3),  // DeviceIDs size
-        kDeviceIDsForEntry17Exception3,             // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,      // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,         // multi_gpu_style
-        &kDriverInfoForEntry17Exception3,           // driver info
-        nullptr,                                    // GL strings
-        nullptr,                                    // machine model info
-        nullptr,                                    // more conditions
-    },
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                         // os_version
-        0x8086,                                     // vendor_id
-        arraysize(kDeviceIDsForEntry17Exception4),  // DeviceIDs size
-        kDeviceIDsForEntry17Exception4,             // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,      // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,         // multi_gpu_style
-        &kDriverInfoForEntry17Exception4,           // driver info
-        nullptr,                                    // GL strings
-        nullptr,                                    // machine model info
-        nullptr,                                    // more conditions
-    },
-};
-
-const GpuControlList::Conditions kExceptionsForEntry27[2] = {
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                     // os_version
-        0x00,                                   // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        &kDriverInfoForEntry27Exception0,       // driver info
-        nullptr,                                // GL strings
-        nullptr,                                // machine model info
-        nullptr,                                // more conditions
-    },
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                     // os_version
-        0x00,                                   // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        &kDriverInfoForEntry27Exception1,       // driver info
-        nullptr,                                // GL strings
-        nullptr,                                // machine model info
-        nullptr,                                // more conditions
-    },
-};
-
-const GpuControlList::Conditions kExceptionsForEntry28[1] = {
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                     // os_version
-        0x00,                                   // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        &kDriverInfoForEntry28Exception0,       // driver info
-        nullptr,                                // GL strings
-        nullptr,                                // machine model info
-        nullptr,                                // more conditions
-    },
-};
-
-const GpuControlList::Conditions kExceptionsForEntry29[1] = {
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                     // os_version
-        0x00,                                   // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        &kDriverInfoForEntry29Exception0,       // driver info
-        nullptr,                                // GL strings
-        nullptr,                                // machine model info
-        nullptr,                                // more conditions
-    },
-};
-
-const GpuControlList::Conditions kExceptionsForEntry50[2] = {
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                     // os_version
-        0x00,                                   // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        &kDriverInfoForEntry50Exception0,       // driver info
-        &kGLStringsForEntry50Exception0,        // GL strings
-        nullptr,                                // machine model info
-        nullptr,                                // more conditions
-    },
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                     // os_version
-        0x00,                                   // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        &kDriverInfoForEntry50Exception1,       // driver info
-        &kGLStringsForEntry50Exception1,        // GL strings
-        nullptr,                                // machine model info
-        nullptr,                                // more conditions
-    },
-};
-
-const GpuControlList::Conditions kExceptionsForEntry57[1] = {
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                         // os_version
-        0x8086,                                     // vendor_id
-        arraysize(kDeviceIDsForEntry57Exception0),  // DeviceIDs size
-        kDeviceIDsForEntry57Exception0,             // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,      // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,         // multi_gpu_style
-        nullptr,                                    // driver info
-        nullptr,                                    // GL strings
-        nullptr,                                    // machine model info
-        nullptr,                                    // more conditions
-    },
-};
-
-const GpuControlList::Conditions kExceptionsForEntry74[1] = {
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                         // os_version
-        0x1414,                                     // vendor_id
-        arraysize(kDeviceIDsForEntry74Exception0),  // DeviceIDs size
-        kDeviceIDsForEntry74Exception0,             // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,      // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,         // multi_gpu_style
-        nullptr,                                    // driver info
-        nullptr,                                    // GL strings
-        nullptr,                                    // machine model info
-        nullptr,                                    // more conditions
-    },
-};
-
-const GpuControlList::Conditions kExceptionsForEntry76[2] = {
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                     // os_version
-        0x00,                                   // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        nullptr,                                // driver info
-        nullptr,                                // GL strings
-        nullptr,                                // machine model info
-        &kMoreForEntry76Exception0,             // more data
-    },
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                     // os_version
-        0x00,                                   // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        nullptr,                                // driver info
-        &kGLStringsForEntry76Exception1,        // GL strings
-        nullptr,                                // machine model info
-        nullptr,                                // more conditions
-    },
-};
-
-const GpuControlList::Conditions kExceptionsForEntry96[5] = {
-    {
-        GpuControlList::kOsAndroid,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                     // os_version
-        0x00,                                   // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        nullptr,                                // driver info
-        &kGLStringsForEntry96Exception0,        // GL strings
-        nullptr,                                // machine model info
-        nullptr,                                // more conditions
-    },
-    {
-        GpuControlList::kOsAndroid,  // os_type
-        {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, "4.4",
-         nullptr},                              // os_version
-        0x00,                                   // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        nullptr,                                // driver info
-        &kGLStringsForEntry96Exception1,        // GL strings
-        nullptr,                                // machine model info
-        nullptr,                                // more conditions
-    },
-    {
-        GpuControlList::kOsAndroid,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                     // os_version
-        0x00,                                   // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        nullptr,                                // driver info
-        &kGLStringsForEntry96Exception2,        // GL strings
-        nullptr,                                // machine model info
-        nullptr,                                // more conditions
-    },
-    {
-        GpuControlList::kOsAndroid,  // os_type
-        {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, "4.4",
-         nullptr},                              // os_version
-        0x00,                                   // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        nullptr,                                // driver info
-        nullptr,                                // GL strings
-        nullptr,                                // machine model info
-        &kMoreForEntry96Exception3,             // more data
-    },
-    {
-        GpuControlList::kOsAndroid,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                     // os_version
-        0x00,                                   // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        nullptr,                                // driver info
-        &kGLStringsForEntry96Exception4,        // GL strings
-        nullptr,                                // machine model info
-        nullptr,                                // more conditions
-    },
-};
-
-const GpuControlList::Conditions kExceptionsForEntry122[3] = {
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                     // os_version
-        0x10de,                                 // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        nullptr,                                // driver info
-        nullptr,                                // GL strings
-        nullptr,                                // machine model info
-        &kMoreForEntry122Exception0,            // more data
-    },
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                     // os_version
-        0x8086,                                 // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        nullptr,                                // driver info
-        nullptr,                                // GL strings
-        nullptr,                                // machine model info
-        &kMoreForEntry122Exception1,            // more data
-    },
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                     // os_version
-        0x1002,                                 // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        &kDriverInfoForEntry122Exception2,      // driver info
-        nullptr,                                // GL strings
-        nullptr,                                // machine model info
-        &kMoreForEntry122Exception2,            // more data
-    },
-};
-
-const GpuControlList::Conditions kExceptionsForEntry124[1] = {
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                     // os_version
-        0x00,                                   // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        &kDriverInfoForEntry124Exception0,      // driver info
-        nullptr,                                // GL strings
-        nullptr,                                // machine model info
-        nullptr,                                // more conditions
-    },
-};
-
-const GpuControlList::Conditions kExceptionsForEntry134[2] = {
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                     // os_version
-        0x00,                                   // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        nullptr,                                // driver info
-        &kGLStringsForEntry134Exception0,       // GL strings
-        nullptr,                                // machine model info
-        nullptr,                                // more conditions
-    },
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                     // os_version
-        0x00,                                   // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        nullptr,                                // driver info
-        &kGLStringsForEntry134Exception1,       // GL strings
-        nullptr,                                // machine model info
-        nullptr,                                // more conditions
-    },
-};
-
-const GpuControlList::Conditions kExceptionsForEntry137[1] = {
-    {
-        GpuControlList::kOsAny,  // os_type
-        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
-         nullptr, nullptr},                     // os_version
-        0x8086,                                 // vendor_id
-        0,                                      // DeviceIDs size
-        nullptr,                                // DeviceIDs
-        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
-        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
-        nullptr,                                // driver info
-        nullptr,                                // GL strings
-        nullptr,                                // machine model info
-        nullptr,                                // more conditions
-    },
-};
-
-}  // namespace gpu
-
-#endif  // GPU_CONFIG_SOFTWARE_RENDERING_LIST_EXCEPTIONS_AUTOGEN_H_
diff --git a/gpu/ipc/service/direct_composition_surface_win.cc b/gpu/ipc/service/direct_composition_surface_win.cc
index c6b5737..f67183c 100644
--- a/gpu/ipc/service/direct_composition_surface_win.cc
+++ b/gpu/ipc/service/direct_composition_surface_win.cc
@@ -7,6 +7,8 @@
 #include <d3d11_1.h>
 #include <dcomptypes.h>
 
+#include <deque>
+
 #include "base/feature_list.h"
 #include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_macros.h"
@@ -71,6 +73,37 @@
   return gfx::Rect(a).Contains(gfx::Rect(b));
 }
 
+// This keeps track of whether the previous 30 frames used Overlays or GPU
+// composition to present.
+class PresentationHistory {
+ public:
+  static const int kPresentsToStore = 30;
+
+  PresentationHistory() {}
+
+  void AddSample(DXGI_FRAME_PRESENTATION_MODE mode) {
+    if (mode == DXGI_FRAME_PRESENTATION_MODE_COMPOSED)
+      composed_count_++;
+
+    presents_.push_back(mode);
+    if (presents_.size() > kPresentsToStore) {
+      DXGI_FRAME_PRESENTATION_MODE first_mode = presents_.front();
+      if (first_mode == DXGI_FRAME_PRESENTATION_MODE_COMPOSED)
+        composed_count_--;
+      presents_.pop_front();
+    }
+  }
+
+  bool valid() const { return presents_.size() >= kPresentsToStore; }
+  int composed_count() const { return composed_count_; }
+
+ private:
+  std::deque<DXGI_FRAME_PRESENTATION_MODE> presents_;
+  int composed_count_ = 0;
+
+  DISALLOW_COPY_AND_ASSIGN(PresentationHistory);
+};
+
 // Only one DirectComposition surface can be rendered into at a time. Track
 // here which IDCompositionSurface is being rendered into. If another context
 // is made current, then this surface will be suspended.
@@ -178,7 +211,8 @@
   // Returns true if the video processor changed.
   bool InitializeVideoProcessor(const gfx::Size& in_size,
                                 const gfx::Size& out_size);
-  void ReallocateSwapChain();
+  void ReallocateSwapChain(bool yuy2);
+  bool ShouldBeYUY2();
 
   DCLayerTree* surface_;
   PFN_DCOMPOSITION_CREATE_SURFACE_HANDLE create_surface_handle_function_;
@@ -193,6 +227,10 @@
   float swap_chain_scale_x_ = 0.0f;
   float swap_chain_scale_y_ = 0.0f;
 
+  PresentationHistory presentation_history_;
+  bool failed_to_create_yuy2_swapchain_ = false;
+  int frames_since_color_space_change_ = 0;
+
   // This is the GLImage that was presented in the last frame.
   scoped_refptr<gl::GLImageDXGI> last_gl_image_;
 
@@ -287,6 +325,25 @@
 
 DCLayerTree::SwapChainPresenter::~SwapChainPresenter() {}
 
+bool DCLayerTree::SwapChainPresenter::ShouldBeYUY2() {
+  // Start out as YUY2.
+  if (!presentation_history_.valid())
+    return true;
+  int composition_count = presentation_history_.composed_count();
+
+  // It's more efficient to use a BGRA backbuffer instead of YUY2 if overlays
+  // aren't being used, as otherwise DWM will use the video processor a second
+  // time to convert it to BGRA before displaying it on screen.
+
+  if (is_yuy2_swapchain_) {
+    // Switch to BGRA once 3/4 of presents are composed.
+    return composition_count < (PresentationHistory::kPresentsToStore * 3 / 4);
+  } else {
+    // Switch to YUY2 once 3/4 are using overlays (or unknown).
+    return composition_count < (PresentationHistory::kPresentsToStore / 4);
+  }
+}
+
 void DCLayerTree::SwapChainPresenter::PresentToSwapChain(
     const ui::DCRendererLayerParams& params) {
   gl::GLImageDXGI* image_dxgi =
@@ -309,12 +366,15 @@
 
   InitializeVideoProcessor(ceiled_input_size, swap_chain_size);
 
+  bool yuy2_swapchain = ShouldBeYUY2();
   bool first_present = false;
-  if (!swap_chain_ || swap_chain_size_ != swap_chain_size) {
+  if (!swap_chain_ || swap_chain_size_ != swap_chain_size ||
+      ((yuy2_swapchain != is_yuy2_swapchain_) &&
+       !failed_to_create_yuy2_swapchain_)) {
     first_present = true;
     swap_chain_size_ = swap_chain_size;
     swap_chain_.Reset();
-    ReallocateSwapChain();
+    ReallocateSwapChain(yuy2_swapchain);
   } else if (last_gl_image_ == image_dxgi) {
     // The swap chain is presenting the same image as last swap, which means
     // that the image was never returned to the video decoder and should have
@@ -415,12 +475,15 @@
 
   swap_chain_->Present(first_present ? 0 : 1, 0);
 
+  frames_since_color_space_change_++;
+
   base::win::ScopedComPtr<IDXGISwapChainMedia> swap_chain_media;
   if (SUCCEEDED(swap_chain_.QueryInterface(swap_chain_media.Receive()))) {
     DXGI_FRAME_STATISTICS_MEDIA stats = {};
     if (SUCCEEDED(swap_chain_media->GetFrameStatisticsMedia(&stats))) {
       UMA_HISTOGRAM_SPARSE_SLOWLY("GPU.DirectComposition.CompositionMode",
                                   stats.CompositionMode);
+      presentation_history_.AddSample(stats.CompositionMode);
     }
   }
 }
@@ -443,7 +506,7 @@
   return true;
 }
 
-void DCLayerTree::SwapChainPresenter::ReallocateSwapChain() {
+void DCLayerTree::SwapChainPresenter::ReallocateSwapChain(bool yuy2) {
   TRACE_EVENT0("gpu", "DCLayerTree::SwapChainPresenter::ReallocateSwapChain");
   DCHECK(!swap_chain_);
 
@@ -475,19 +538,31 @@
                                   &handle);
   swap_chain_handle_.Set(handle);
 
-  is_yuy2_swapchain_ = true;
+  if (is_yuy2_swapchain_ != yuy2) {
+    UMA_HISTOGRAM_COUNTS_1000(
+        "GPU.DirectComposition.FramesSinceColorSpaceChange",
+        frames_since_color_space_change_);
+  }
+
+  frames_since_color_space_change_ = 0;
+
+  is_yuy2_swapchain_ = false;
   // The composition surface handle isn't actually used, but
   // CreateSwapChainForComposition can't create YUY2 swapchains.
-  HRESULT hr = media_factory->CreateSwapChainForCompositionSurfaceHandle(
-      d3d11_device_.get(), swap_chain_handle_.Get(), &desc, nullptr,
-      swap_chain_.Receive());
+  HRESULT hr = E_FAIL;
+  if (yuy2) {
+    hr = media_factory->CreateSwapChainForCompositionSurfaceHandle(
+        d3d11_device_.get(), swap_chain_handle_.Get(), &desc, nullptr,
+        swap_chain_.Receive());
+    is_yuy2_swapchain_ = SUCCEEDED(hr);
+    failed_to_create_yuy2_swapchain_ = !is_yuy2_swapchain_;
+  }
 
-  if (FAILED(hr)) {
-    // This should not be hit in production but is a simple fallback for
-    // testing on systems without YUY2 swapchain support.
-    DLOG(ERROR) << "YUY2 creation failed with " << std::hex << hr
-                << ". Falling back to BGRA";
-    is_yuy2_swapchain_ = false;
+  if (!is_yuy2_swapchain_) {
+    if (yuy2) {
+      DLOG(ERROR) << "YUY2 creation failed with " << std::hex << hr
+                  << ". Falling back to BGRA";
+    }
     desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
     desc.Flags = 0;
     hr = media_factory->CreateSwapChainForCompositionSurfaceHandle(
diff --git a/ios/chrome/browser/native_app_launcher/ios_appstore_ids.h b/ios/chrome/browser/native_app_launcher/ios_appstore_ids.h
index ac3ad10..bcd33f9 100644
--- a/ios/chrome/browser/native_app_launcher/ios_appstore_ids.h
+++ b/ios/chrome/browser/native_app_launcher/ios_appstore_ids.h
@@ -16,6 +16,5 @@
 extern const char kIOSAppStoreGoogleSheets[];
 extern const char kIOSAppStoreGoogleSlides[];
 extern const char kIOSAppStoreTestFlight[];
-extern const char kIOSAppStoreYouTube[];
 
 #endif  // IOS_CHROME_BROWSER_NATIVE_APP_LAUNCHER_IOS_APPSTORE_IDS_H_
diff --git a/ios/chrome/browser/native_app_launcher/ios_appstore_ids.mm b/ios/chrome/browser/native_app_launcher/ios_appstore_ids.mm
index 48b96527..672eaa3 100644
--- a/ios/chrome/browser/native_app_launcher/ios_appstore_ids.mm
+++ b/ios/chrome/browser/native_app_launcher/ios_appstore_ids.mm
@@ -14,4 +14,3 @@
 const char kIOSAppStoreGoogleSheets[] = "842849113";
 const char kIOSAppStoreGoogleSlides[] = "879478102";
 const char kIOSAppStoreTestFlight[] = "899247664";
-const char kIOSAppStoreYouTube[] = "544007664";
diff --git a/ios/chrome/browser/tabs/BUILD.gn b/ios/chrome/browser/tabs/BUILD.gn
index 59d8e13..0d9a8fc 100644
--- a/ios/chrome/browser/tabs/BUILD.gn
+++ b/ios/chrome/browser/tabs/BUILD.gn
@@ -22,6 +22,7 @@
     "//components/sessions",
     "//components/signin/ios/browser",
     "//components/sync_sessions",
+    "//ios/chrome/browser/web:sad_tab_tab_helper_delegate",
     "//ios/net",
     "//ios/web",
     "//ios/web:user_agent",
@@ -100,6 +101,7 @@
     "//ios/chrome/browser/ui/toolbar",
     "//ios/chrome/browser/ui/util",
     "//ios/chrome/browser/web",
+    "//ios/chrome/browser/web:sad_tab_tab_helper_delegate",
     "//ios/chrome/browser/web:web_internal",
     "//ios/chrome/browser/web_state_list",
     "//ios/net",
diff --git a/ios/chrome/browser/tabs/tab.h b/ios/chrome/browser/tabs/tab.h
index a21bab0..8c87b026 100644
--- a/ios/chrome/browser/tabs/tab.h
+++ b/ios/chrome/browser/tabs/tab.h
@@ -11,6 +11,7 @@
 #include <vector>
 
 #import "components/signin/ios/browser/manage_accounts_delegate.h"
+#import "ios/chrome/browser/web/sad_tab_tab_helper_delegate.h"
 #include "ios/net/request_tracker.h"
 #include "ios/web/public/user_agent.h"
 #import "ios/web/public/web_state/ui/crw_web_delegate.h"
@@ -94,7 +95,8 @@
 // desktop Chrome's TabContents in that it encapsulates rendering. Acts as the
 // delegate for the CRWWebController in order to process info about pages having
 // loaded.
-@interface Tab : NSObject<CRWWebDelegate, ManageAccountsDelegate>
+@interface Tab
+    : NSObject<CRWWebDelegate, ManageAccountsDelegate, SadTabTabHelperDelegate>
 
 // Browser state associated with this Tab.
 @property(nonatomic, readonly) ios::ChromeBrowserState* browserState;
diff --git a/ios/chrome/browser/tabs/tab.mm b/ios/chrome/browser/tabs/tab.mm
index 29e6c97c..7fa0dbb 100644
--- a/ios/chrome/browser/tabs/tab.mm
+++ b/ios/chrome/browser/tabs/tab.mm
@@ -101,7 +101,6 @@
 #import "ios/chrome/browser/ui/prerender_delegate.h"
 #import "ios/chrome/browser/ui/reader_mode/reader_mode_checker.h"
 #import "ios/chrome/browser/ui/reader_mode/reader_mode_controller.h"
-#import "ios/chrome/browser/ui/sad_tab/sad_tab_view.h"
 #include "ios/chrome/browser/ui/ui_util.h"
 #import "ios/chrome/browser/web/auto_reload_bridge.h"
 #import "ios/chrome/browser/web/external_app_launcher.h"
@@ -1830,19 +1829,6 @@
 
   if (visible_) {
     if (!applicationIsNotActive) {
-      base::WeakNSObject<Tab> weakSelf(self);
-      base::scoped_nsobject<SadTabView> sadTabView(
-          [[SadTabView alloc] initWithReloadHandler:^{
-            base::scoped_nsobject<Tab> strongSelf([weakSelf retain]);
-
-            // |check_for_repost| is true because this is called from SadTab and
-            // explicitly initiated by the user.
-            [strongSelf navigationManager]->Reload(web::ReloadType::NORMAL,
-                                                   true /* check_for_repost */);
-          }]);
-      base::scoped_nsobject<CRWContentView> contentView(
-          [[CRWGenericContentView alloc] initWithView:sadTabView]);
-      self.webState->ShowTransientContentView(contentView);
       [fullScreenController_ disableFullScreen];
     }
   } else {
@@ -1973,6 +1959,13 @@
   [inputAccessoryViewController_ wasHidden];
 }
 
+#pragma mark - SadTabTabHelperDelegate
+
+- (BOOL)isTabVisibleForTabHelper:(SadTabTabHelper*)tabHelper {
+  UIApplicationState state = UIApplication.sharedApplication.applicationState;
+  return visible_ && !IsApplicationStateNotActive(state);
+}
+
 @end
 
 #pragma mark - TestingSupport
diff --git a/ios/chrome/browser/tabs/tab_helper_util.mm b/ios/chrome/browser/tabs/tab_helper_util.mm
index 84714be..e266138 100644
--- a/ios/chrome/browser/tabs/tab_helper_util.mm
+++ b/ios/chrome/browser/tabs/tab_helper_util.mm
@@ -34,6 +34,7 @@
 #import "ios/chrome/browser/web/blocked_popup_tab_helper.h"
 #import "ios/chrome/browser/web/network_activity_indicator_tab_helper.h"
 #import "ios/chrome/browser/web/repost_form_tab_helper.h"
+#import "ios/chrome/browser/web/sad_tab_tab_helper.h"
 #import "ios/public/provider/chrome/browser/chrome_browser_provider.h"
 #import "ios/web/public/web_state/web_state.h"
 
@@ -57,6 +58,7 @@
   BlockedPopupTabHelper::CreateForWebState(web_state);
   FindTabHelper::CreateForWebState(web_state, tab.findInPageControllerDelegate);
   StoreKitTabHelper::CreateForWebState(web_state);
+  SadTabTabHelper::CreateForWebState(web_state, tab);
 
   ReadingListModel* model =
       ReadingListModelFactory::GetForBrowserState(browser_state);
diff --git a/ios/chrome/browser/ui/overscroll_actions/BUILD.gn b/ios/chrome/browser/ui/overscroll_actions/BUILD.gn
index 98b99f79..082cc1e5 100644
--- a/ios/chrome/browser/ui/overscroll_actions/BUILD.gn
+++ b/ios/chrome/browser/ui/overscroll_actions/BUILD.gn
@@ -32,6 +32,8 @@
   sources = [
     "overscroll_actions_controller.h",
     "overscroll_actions_controller.mm",
+    "overscroll_actions_gesture_recognizer.h",
+    "overscroll_actions_gesture_recognizer.mm",
     "overscroll_actions_view.h",
     "overscroll_actions_view.mm",
   ]
diff --git a/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm b/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm
index 7a58ef15..b1049d4 100644
--- a/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm
+++ b/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm
@@ -12,6 +12,7 @@
 #include "base/mac/scoped_nsobject.h"
 #include "base/metrics/histogram_macros.h"
 #import "ios/chrome/browser/ui/browser_view_controller.h"
+#import "ios/chrome/browser/ui/overscroll_actions/overscroll_actions_gesture_recognizer.h"
 #import "ios/chrome/browser/ui/overscroll_actions/overscroll_actions_view.h"
 #include "ios/chrome/browser/ui/rtl_geometry.h"
 #import "ios/chrome/browser/ui/toolbar/toolbar_controller.h"
@@ -574,9 +575,18 @@
 }
 
 - (void)setup {
-  base::scoped_nsobject<UIPanGestureRecognizer> panGesture(
-      [[UIPanGestureRecognizer alloc] initWithTarget:self
-                                              action:@selector(panGesture:)]);
+  base::scoped_nsobject<UIPanGestureRecognizer> panGesture;
+  // Workaround a bug occuring when Speak Selection is enabled.
+  // See crbug.com/699655.
+  if (UIAccessibilityIsSpeakSelectionEnabled()) {
+    panGesture.reset([[OverscrollActionsGestureRecognizer alloc]
+        initWithTarget:self
+                action:@selector(panGesture:)]);
+  } else {
+    panGesture.reset([[UIPanGestureRecognizer alloc]
+        initWithTarget:self
+                action:@selector(panGesture:)]);
+  }
   [panGesture setMaximumNumberOfTouches:1];
   [panGesture setDelegate:self];
   [[self scrollView] addGestureRecognizer:panGesture];
diff --git a/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_gesture_recognizer.h b/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_gesture_recognizer.h
new file mode 100644
index 0000000..67928d73
--- /dev/null
+++ b/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_gesture_recognizer.h
@@ -0,0 +1,18 @@
+// Copyright 2017 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 IOS_CHROME_BROWSER_UI_OVERSCROLL_ACTIONS_OVERSCROLL_ACTIONS_GESTURE_RECOGNIZER_H_
+#define IOS_CHROME_BROWSER_UI_OVERSCROLL_ACTIONS_OVERSCROLL_ACTIONS_GESTURE_RECOGNIZER_H_
+
+#import <UIKit/UIPanGestureRecognizer.h>
+
+// Subclass of UIPanGestureRecognizer that works around a bug where the targets'
+// action is not called when the gesture ends while "Speak selection" is
+// enabled (crbug.com/699655).
+// This subclass works around the bug by calling the action of the target passed
+// in the constructor when |reset| is called.
+@interface OverscrollActionsGestureRecognizer : UIPanGestureRecognizer
+@end
+
+#endif  // IOS_CHROME_BROWSER_UI_OVERSCROLL_ACTIONS_OVERSCROLL_ACTIONS_GESTURE_RECOGNIZER_H_
diff --git a/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_gesture_recognizer.mm b/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_gesture_recognizer.mm
new file mode 100644
index 0000000..c016de15
--- /dev/null
+++ b/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_gesture_recognizer.mm
@@ -0,0 +1,38 @@
+// Copyright 2017 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.
+
+#import "ios/chrome/browser/ui/overscroll_actions/overscroll_actions_gesture_recognizer.h"
+
+#import <UIKit/UIGestureRecognizerSubclass.h>
+
+#import "base/ios/weak_nsobject.h"
+
+@interface OverscrollActionsGestureRecognizer () {
+  base::WeakNSProtocol<id> target_;
+  SEL action_;
+}
+@end
+
+@implementation OverscrollActionsGestureRecognizer
+
+- (instancetype)initWithTarget:(id)target action:(SEL)action {
+  self = [super initWithTarget:target action:action];
+  if (self) {
+    target_.reset([target retain]);
+    action_ = action;
+  }
+  return self;
+}
+
+- (void)reset {
+  [super reset];
+  [target_ performSelector:action_ withObject:self];
+}
+
+- (void)removeTarget:(id)target action:(SEL)action {
+  DCHECK(target != target_);
+  [super removeTarget:target action:action];
+}
+
+@end
diff --git a/ios/chrome/browser/ui/sad_tab/BUILD.gn b/ios/chrome/browser/ui/sad_tab/BUILD.gn
index 7b92411f..c5bd5f0 100644
--- a/ios/chrome/browser/ui/sad_tab/BUILD.gn
+++ b/ios/chrome/browser/ui/sad_tab/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 source_set("sad_tab") {
+  configs += [ "//build/config/compiler:enable_arc" ]
   sources = [
     "sad_tab_view.h",
     "sad_tab_view.mm",
diff --git a/ios/chrome/browser/ui/sad_tab/sad_tab_view.mm b/ios/chrome/browser/ui/sad_tab/sad_tab_view.mm
index f9cd409..2551697 100644
--- a/ios/chrome/browser/ui/sad_tab/sad_tab_view.mm
+++ b/ios/chrome/browser/ui/sad_tab/sad_tab_view.mm
@@ -28,6 +28,10 @@
 #import "net/base/mac/url_conversions.h"
 #include "ui/base/l10n/l10n_util.h"
 
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
 namespace {
 // Color constants.
 const CGFloat kBackgroundColorBrightness = 247.0f / 255.0f;
@@ -48,31 +52,23 @@
 const CGFloat kHelpLabelFontSize = 14.0f;
 }  // namespace
 
-@interface SadTabView () {
-  // The block called when |_reloadButton| is tapped.
-  base::mac::ScopedBlock<ProceduralBlock> _reloadHandler;
-  // Backing objects for properties of the same name.
-  base::scoped_nsobject<UIView> _containerView;
-  base::scoped_nsobject<UIImageView> _imageView;
-  base::scoped_nsobject<UILabel> _titleLabel;
-  base::scoped_nsobject<UILabel> _messageLabel;
-  base::scoped_nsobject<UILabel> _helpLabel;
-  base::scoped_nsobject<LabelLinkController> _helpLabelLinkController;
-  base::scoped_nsobject<MDCButton> _reloadButton;
-}
+@interface SadTabView ()
 
+@property(nonatomic, readonly) ProceduralBlock reloadHandler;
 // Container view that displays all other subviews.
-@property(nonatomic, readonly) UIView* containerView;
+@property(nonatomic, readonly, strong) UIView* containerView;
 // Displays the Sad Tab face.
-@property(nonatomic, readonly) UIImageView* imageView;
+@property(nonatomic, readonly, strong) UIImageView* imageView;
 // Displays the Sad Tab title.
-@property(nonatomic, readonly) UILabel* titleLabel;
+@property(nonatomic, readonly, strong) UILabel* titleLabel;
 // Displays the Sad Tab message.
-@property(nonatomic, readonly) UILabel* messageLabel;
+@property(nonatomic, readonly, strong) UILabel* messageLabel;
 // Displays the Sad Tab help message.
-@property(nonatomic, readonly) UILabel* helpLabel;
+@property(nonatomic, readonly, strong) UILabel* helpLabel;
+@property(nonatomic, readonly, strong)
+    LabelLinkController* helpLabelLinkController;
 // Button used to trigger a reload.
-@property(nonatomic, readonly) UIButton* reloadButton;
+@property(nonatomic, readonly, strong) MDCFlatButton* reloadButton;
 
 // The bounds of |containerView|, with a height updated to CGFLOAT_MAX to allow
 // text to be laid out using as many lines as necessary.
@@ -99,11 +95,20 @@
 
 @implementation SadTabView
 
+@synthesize imageView = _imageView;
+@synthesize containerView = _containerView;
+@synthesize titleLabel = _titleLabel;
+@synthesize messageLabel = _messageLabel;
+@synthesize helpLabel = _helpLabel;
+@synthesize helpLabelLinkController = _helpLabelLinkController;
+@synthesize reloadButton = _reloadButton;
+@synthesize reloadHandler = _reloadHandler;
+
 - (instancetype)initWithReloadHandler:(ProceduralBlock)reloadHandler {
   self = [super initWithFrame:CGRectZero];
   if (self) {
     DCHECK(reloadHandler);
-    _reloadHandler.reset([reloadHandler copy]);
+    _reloadHandler = [reloadHandler copy];
     self.backgroundColor = [[self class] sadTabBackgroundColor];
   }
   return self;
@@ -128,7 +133,7 @@
 
 - (UIView*)containerView {
   if (!_containerView) {
-    _containerView.reset([[UIView alloc] initWithFrame:CGRectZero]);
+    _containerView = [[UIView alloc] initWithFrame:CGRectZero];
     [_containerView setBackgroundColor:self.backgroundColor];
   }
   return _containerView;
@@ -136,16 +141,16 @@
 
 - (UIImageView*)imageView {
   if (!_imageView) {
-    _imageView.reset(
-        [[UIImageView alloc] initWithImage:NativeImage(IDR_CRASH_SAD_TAB)]);
+    _imageView =
+        [[UIImageView alloc] initWithImage:NativeImage(IDR_CRASH_SAD_TAB)];
     [_imageView setBackgroundColor:self.backgroundColor];
   }
-  return _imageView.get();
+  return _imageView;
 }
 
 - (UILabel*)titleLabel {
   if (!_titleLabel) {
-    _titleLabel.reset([[UILabel alloc] initWithFrame:CGRectZero]);
+    _titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
     [_titleLabel setBackgroundColor:self.backgroundColor];
     [_titleLabel setText:base::SysUTF8ToNSString(
                              l10n_util::GetStringUTF8(IDS_SAD_TAB_TITLE))];
@@ -157,12 +162,12 @@
     [_titleLabel setFont:[[MDFRobotoFontLoader sharedInstance]
                              regularFontOfSize:kTitleLabelFontSize]];
   }
-  return _titleLabel.get();
+  return _titleLabel;
 }
 
 - (UILabel*)messageLabel {
   if (!_messageLabel) {
-    _messageLabel.reset([[UILabel alloc] initWithFrame:CGRectZero]);
+    _messageLabel = [[UILabel alloc] initWithFrame:CGRectZero];
     [_messageLabel setBackgroundColor:self.backgroundColor];
     std::string messageText = l10n_util::GetStringUTF8(IDS_SAD_TAB_MESSAGE);
     [_messageLabel setText:base::SysUTF8ToNSString(messageText)];
@@ -174,12 +179,12 @@
     [_messageLabel setFont:[[MDFRobotoFontLoader sharedInstance]
                                regularFontOfSize:kMessageLabelFontSize]];
   }
-  return _messageLabel.get();
+  return _messageLabel;
 }
 
 - (UILabel*)helpLabel {
   if (!_helpLabel) {
-    _helpLabel.reset([[UILabel alloc] initWithFrame:CGRectZero]);
+    _helpLabel = [[UILabel alloc] initWithFrame:CGRectZero];
     [_helpLabel setBackgroundColor:self.backgroundColor];
     [_helpLabel setNumberOfLines:0];
     [_helpLabel setFont:[[MDFRobotoFontLoader sharedInstance]
@@ -195,13 +200,13 @@
     [_helpLabel setText:helpText];
     // Create link controller.
     base::WeakNSObject<SadTabView> weakSelf(self);
-    _helpLabelLinkController.reset([[LabelLinkController alloc]
+    _helpLabelLinkController = [[LabelLinkController alloc]
         initWithLabel:_helpLabel
                action:^(const GURL& url) {
                  base::scoped_nsobject<OpenUrlCommand> openCommand(
                      [[OpenUrlCommand alloc] initWithURLFromChrome:url]);
                  [weakSelf chromeExecuteCommand:openCommand];
-               }]);
+               }];
     [_helpLabelLinkController
         setLinkFont:[[MDFRobotoFontLoader sharedInstance]
                         boldFontOfSize:kHelpLabelFontSize]];
@@ -213,12 +218,12 @@
     [_helpLabelLinkController addLinkWithRange:linkRange
                                            url:GURL(kCrashReasonURL)];
   }
-  return _helpLabel.get();
+  return _helpLabel;
 }
 
 - (UIButton*)reloadButton {
   if (!_reloadButton) {
-    _reloadButton.reset([[MDCFlatButton alloc] init]);
+    _reloadButton = [[MDCFlatButton alloc] init];
     [_reloadButton setBackgroundColor:[[MDCPalette cr_bluePalette] tint500]
                              forState:UIControlStateNormal];
     [_reloadButton setBackgroundColor:[[MDCPalette greyPalette] tint500]
@@ -235,7 +240,7 @@
                       action:@selector(handleReloadButtonTapped)
             forControlEvents:UIControlEventTouchUpInside];
   }
-  return _reloadButton.get();
+  return _reloadButton;
 }
 
 - (CGRect)containerBounds {
@@ -387,7 +392,7 @@
 }
 
 - (void)handleReloadButtonTapped {
-  _reloadHandler.get()();
+  self.reloadHandler();
 }
 
 + (UIColor*)sadTabBackgroundColor {
diff --git a/ios/chrome/browser/web/BUILD.gn b/ios/chrome/browser/web/BUILD.gn
index 3f683a6..2037334 100644
--- a/ios/chrome/browser/web/BUILD.gn
+++ b/ios/chrome/browser/web/BUILD.gn
@@ -15,12 +15,16 @@
     "network_activity_indicator_tab_helper.mm",
     "repost_form_tab_helper.h",
     "repost_form_tab_helper.mm",
+    "sad_tab_tab_helper.h",
+    "sad_tab_tab_helper.mm",
   ]
   deps = [
+    ":sad_tab_tab_helper_delegate",
     "//base",
     "//components/strings",
     "//ios/chrome/browser/ui",
     "//ios/chrome/browser/ui/alert_coordinator:alert_coordinator",
+    "//ios/chrome/browser/ui/sad_tab:sad_tab",
     "//ios/chrome/browser/ui/util:util",
     "//ios/web",
     "//ios/web:web_arc",
@@ -28,6 +32,13 @@
   ]
 }
 
+source_set("sad_tab_tab_helper_delegate") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  sources = [
+    "sad_tab_tab_helper_delegate.h",
+  ]
+}
+
 source_set("unit_tests") {
   configs += [ "//build/config/compiler:enable_arc" ]
   testonly = true
@@ -35,8 +46,10 @@
     "navigation_manager_util_unittest.mm",
     "network_activity_indicator_tab_helper_unittest.mm",
     "repost_form_tab_helper_unittest.mm",
+    "sad_tab_tab_helper_unittest.mm",
   ]
   deps = [
+    ":sad_tab_tab_helper_delegate",
     ":web",
     "//base:base",
     "//base/test:test_support",
diff --git a/ios/chrome/browser/web/browsing_egtest.mm b/ios/chrome/browser/web/browsing_egtest.mm
index 6ab21c7..7e4817a 100644
--- a/ios/chrome/browser/web/browsing_egtest.mm
+++ b/ios/chrome/browser/web/browsing_egtest.mm
@@ -604,8 +604,8 @@
 // Tests that submitting a POST-based form by tapping the 'Go' button on the
 // keyboard navigates to the correct URL and the back button works as expected
 // afterwards.
-// TODO(crbug.com/704618): Re-enable this test when the flake is fixed.
-- (void)FLAKY_testBrowsingPostEntryWithKeyboard {
+// TODO(crbug.com/711108): Move test to forms_egtest.mm.
+- (void)testBrowsingPostEntryWithKeyboard {
   // Create map of canned responses and set up the test HTML server.
   std::map<GURL, std::string> responses;
   const GURL URL =
diff --git a/ios/chrome/browser/web/navigation_manager_util.h b/ios/chrome/browser/web/navigation_manager_util.h
index f1aee089..435ffa1 100644
--- a/ios/chrome/browser/web/navigation_manager_util.h
+++ b/ios/chrome/browser/web/navigation_manager_util.h
@@ -11,9 +11,9 @@
 // Utility functions built on web::NavigationManager public API.
 
 // Returns the most recent Committed Item that is not the result of a client or
-// server-side redirect redirect from the given Navigation Manager. Returns
-// nullptr if there's an error condition on the input |nav_manager|, such as
-// nullptr or no non-redirect items.
+// server-side redirect from the given Navigation Manager. Returns nullptr if
+// there's an error condition on the input |nav_manager|, such as nullptr or no
+// non-redirect items.
 web::NavigationItem* GetLastCommittedNonRedirectedItem(
     web::NavigationManager* nav_manager);
 
diff --git a/ios/chrome/browser/web/navigation_manager_util_unittest.mm b/ios/chrome/browser/web/navigation_manager_util_unittest.mm
index 74ff9f3..8d7d0b7 100644
--- a/ios/chrome/browser/web/navigation_manager_util_unittest.mm
+++ b/ios/chrome/browser/web/navigation_manager_util_unittest.mm
@@ -54,7 +54,7 @@
       item->GetTransitionType(), ui::PAGE_TRANSITION_LINK));
 }
 
-// Tests that when all items are redirects, the first one is returned.
+// Tests that when all items are redirects, nullptr is returned.
 TEST_F(NavigationManagerUtilTest, TestLastNonRedirectedItemAllRedirects) {
   nav_manager_.AddItem(GURL("http://bar.com/redir0"),
                        ui::PAGE_TRANSITION_CLIENT_REDIRECT);
diff --git a/ios/chrome/browser/web/sad_tab_tab_helper.h b/ios/chrome/browser/web/sad_tab_tab_helper.h
new file mode 100644
index 0000000..838f5c6
--- /dev/null
+++ b/ios/chrome/browser/web/sad_tab_tab_helper.h
@@ -0,0 +1,40 @@
+// Copyright 2017 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.
+
+#import "ios/web/public/web_state/web_state_observer.h"
+#import "ios/web/public/web_state/web_state_user_data.h"
+
+@protocol SadTabTabHelperDelegate;
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+// SadTabTabHelper listens to RenderProcessGone events and presents a
+// SadTabView view appropriately.
+class SadTabTabHelper : public web::WebStateUserData<SadTabTabHelper>,
+                        public web::WebStateObserver {
+ public:
+  // Creates a SadTabTabHelper and attaches it to a specific web_state object,
+  // a delegate object controls presentation.
+  static void CreateForWebState(web::WebState* web_state,
+                                id<SadTabTabHelperDelegate> delegate);
+
+ private:
+  // Constructor for SadTabTabHelper, assigning the helper to a web_state and
+  // providing a delegate.
+  SadTabTabHelper(web::WebState* web_state,
+                  id<SadTabTabHelperDelegate> delegate);
+
+  ~SadTabTabHelper() override;
+
+  // Presents a new SadTabView via the web_state object.
+  void PresentSadTab();
+
+  // WebStateObserver:
+  void RenderProcessGone() override;
+
+  // A TabHelperDelegate that can control aspects of this tab helper's behavior.
+  __weak id<SadTabTabHelperDelegate> delegate_;
+};
diff --git a/ios/chrome/browser/web/sad_tab_tab_helper.mm b/ios/chrome/browser/web/sad_tab_tab_helper.mm
new file mode 100644
index 0000000..3edf6317
--- /dev/null
+++ b/ios/chrome/browser/web/sad_tab_tab_helper.mm
@@ -0,0 +1,53 @@
+// Copyright 2017 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.
+
+#import "ios/chrome/browser/web/sad_tab_tab_helper.h"
+
+#import <Foundation/Foundation.h>
+
+#include "base/strings/sys_string_conversions.h"
+#import "ios/chrome/browser/ui/sad_tab/sad_tab_view.h"
+#import "ios/chrome/browser/web/sad_tab_tab_helper_delegate.h"
+#import "ios/web/public/navigation_manager.h"
+#import "ios/web/public/web_state/ui/crw_generic_content_view.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+DEFINE_WEB_STATE_USER_DATA_KEY(SadTabTabHelper);
+
+SadTabTabHelper::SadTabTabHelper(web::WebState* web_state,
+                                 id<SadTabTabHelperDelegate> delegate)
+    : web::WebStateObserver(web_state), delegate_(delegate) {
+  DCHECK(delegate_);
+}
+
+SadTabTabHelper::~SadTabTabHelper() = default;
+
+void SadTabTabHelper::CreateForWebState(web::WebState* web_state,
+                                        id<SadTabTabHelperDelegate> delegate) {
+  DCHECK(web_state);
+  if (!FromWebState(web_state)) {
+    web_state->SetUserData(UserDataKey(),
+                           new SadTabTabHelper(web_state, delegate));
+  }
+}
+
+void SadTabTabHelper::RenderProcessGone() {
+  if (!delegate_ || [delegate_ isTabVisibleForTabHelper:this]) {
+    PresentSadTab();
+  }
+}
+
+void SadTabTabHelper::PresentSadTab() {
+  SadTabView* sad_tab_view = [[SadTabView alloc] initWithReloadHandler:^{
+    web_state()->GetNavigationManager()->Reload(web::ReloadType::NORMAL, true);
+  }];
+
+  CRWContentView* content_view =
+      [[CRWGenericContentView alloc] initWithView:sad_tab_view];
+
+  web_state()->ShowTransientContentView(content_view);
+}
diff --git a/ios/chrome/browser/web/sad_tab_tab_helper_delegate.h b/ios/chrome/browser/web/sad_tab_tab_helper_delegate.h
new file mode 100644
index 0000000..80b68ba
--- /dev/null
+++ b/ios/chrome/browser/web/sad_tab_tab_helper_delegate.h
@@ -0,0 +1,27 @@
+// Copyright 2017 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 IOS_CHROME_BROWSER_WEB_SAD_TAB_TAB_HELPER_DELEGATE_H_
+#define IOS_CHROME_BROWSER_WEB_SAD_TAB_TAB_HELPER_DELEGATE_H_
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+class SadTabTabHelper;
+
+// SadTabTabHelperDelegate defines an interface that allows SadTabTabHelper
+// instances to learn about the visibility of the Tab they are helping.
+@protocol SadTabTabHelperDelegate<NSObject>
+
+// Returns whether the tab for the tab helper is visible - i.e. the tab is
+// frontmost and the application is in an active state - allowing differences
+// in the behavior of the helper for visible vs. non-visible tabs.
+- (BOOL)isTabVisibleForTabHelper:(SadTabTabHelper*)tabHelper;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif  // IOS_CHROME_BROWSER_WEB_SAD_TAB_TAB_HELPER_DELEGATE_H_
diff --git a/ios/chrome/browser/web/sad_tab_tab_helper_unittest.mm b/ios/chrome/browser/web/sad_tab_tab_helper_unittest.mm
new file mode 100644
index 0000000..37404347
--- /dev/null
+++ b/ios/chrome/browser/web/sad_tab_tab_helper_unittest.mm
@@ -0,0 +1,59 @@
+// Copyright 2017 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.
+
+#import "ios/chrome/browser/web/sad_tab_tab_helper.h"
+
+#import "ios/chrome/browser/web/sad_tab_tab_helper_delegate.h"
+#import "ios/web/public/test/fakes/test_web_state.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/platform_test.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+// A configurable TabHelper delegate for testing.
+@interface TabHelperTestDelegate : NSObject<SadTabTabHelperDelegate>
+@property(readwrite, assign) BOOL active;
+@end
+
+@implementation TabHelperTestDelegate
+@synthesize active = _active;
+- (BOOL)isTabVisibleForTabHelper:(SadTabTabHelper*)tabHelper {
+  return self.active;
+}
+@end
+
+class SadTabTabHelperTest : public PlatformTest {
+ protected:
+  SadTabTabHelperTest() : delegate_([[TabHelperTestDelegate alloc] init]) {
+    SadTabTabHelper::CreateForWebState(&web_state_, delegate_);
+  }
+  TabHelperTestDelegate* delegate_;
+  web::TestWebState web_state_;
+};
+
+// Tests that the presentation-block can be suppressed by the delegate.
+TEST_F(SadTabTabHelperTest, PresentationCanBeSuppressedByDelegate) {
+  // WebState should not have presented a transient content view.
+  EXPECT_FALSE(web_state_.IsShowingTransientContentView());
+
+  // Helper should get notified of render process failure,
+  // but the delegate should suppress the presentation of a content view.
+  web_state_.OnRenderProcessGone();
+  EXPECT_FALSE(web_state_.IsShowingTransientContentView());
+}
+
+// Tests that the presentation-block can be allowed by the delegate.
+TEST_F(SadTabTabHelperTest, PresentationCanBeAllowedByDelegate) {
+  delegate_.active = YES;
+
+  // WebState should not have presented a transient content view.
+  EXPECT_FALSE(web_state_.IsShowingTransientContentView());
+
+  // Helper should get notified of render process failure.
+  // The delegate should allow the presentation of a content view.
+  web_state_.OnRenderProcessGone();
+  EXPECT_TRUE(web_state_.IsShowingTransientContentView());
+}
diff --git a/ios/clean/chrome/browser/ui/tools/BUILD.gn b/ios/clean/chrome/browser/ui/tools/BUILD.gn
index e348eb9..beee4a94 100644
--- a/ios/clean/chrome/browser/ui/tools/BUILD.gn
+++ b/ios/clean/chrome/browser/ui/tools/BUILD.gn
@@ -46,3 +46,23 @@
     "//ios/third_party/material_components_ios",
   ]
 }
+
+source_set("unit_tests") {
+  testonly = true
+
+  sources = [
+    "tools_coordinator_unittest.mm",
+    "tools_mediator_unittest.mm",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+
+  deps = [
+    ":tools",
+    ":tools_ui",
+    "//base/test:test_support",
+    "//ios/chrome/test/base",
+    "//testing/gtest",
+    "//third_party/ocmock",
+  ]
+}
diff --git a/ios/clean/chrome/browser/ui/tools/tools_coordinator_unittest.mm b/ios/clean/chrome/browser/ui/tools/tools_coordinator_unittest.mm
new file mode 100644
index 0000000..6c0d1a29
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/tools/tools_coordinator_unittest.mm
@@ -0,0 +1,9 @@
+// Copyright 2017 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.
+
+#import "ios/clean/chrome/browser/ui/tools/tools_coordinator.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
diff --git a/ios/clean/chrome/browser/ui/tools/tools_mediator_unittest.mm b/ios/clean/chrome/browser/ui/tools/tools_mediator_unittest.mm
new file mode 100644
index 0000000..5329a2f
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/tools/tools_mediator_unittest.mm
@@ -0,0 +1,30 @@
+// Copyright 2017 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.
+
+#import "ios/clean/chrome/browser/ui/tools/tools_mediator.h"
+
+#import "ios/clean/chrome/browser/ui/tools/tools_consumer.h"
+#include "testing/platform_test.h"
+#import "third_party/ocmock/OCMock/OCMock.h"
+#include "third_party/ocmock/gtest_support.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+namespace {
+
+class ToolsMediatorTest : public PlatformTest {
+ protected:
+  ToolsMediator* mediator_;
+};
+
+TEST_F(ToolsMediatorTest, TestSetConsumer) {
+  id consumer = OCMProtocolMock(@protocol(ToolsConsumer));
+  mediator_ = [[ToolsMediator alloc] initWithConsumer:consumer];
+
+  [[consumer verify] setToolsMenuItems:[OCMArg any]];
+}
+
+}  // namespace
diff --git a/ios/clean/chrome/test/BUILD.gn b/ios/clean/chrome/test/BUILD.gn
index 37105ee..904904a 100644
--- a/ios/clean/chrome/test/BUILD.gn
+++ b/ios/clean/chrome/test/BUILD.gn
@@ -27,6 +27,7 @@
     "//ios/clean/chrome/browser/ui/tab_collection:unit_tests",
     "//ios/clean/chrome/browser/ui/tab_grid:unit_tests",
     "//ios/clean/chrome/browser/ui/toolbar:unit_tests",
+    "//ios/clean/chrome/browser/ui/tools:unit_tests",
     "//ios/clean/chrome/browser/ui/web_contents:unit_tests",
   ]
 }
diff --git a/ios/web/public/test/fakes/test_web_state.h b/ios/web/public/test/fakes/test_web_state.h
index f857c2c..98af071c 100644
--- a/ios/web/public/test/fakes/test_web_state.h
+++ b/ios/web/public/test/fakes/test_web_state.h
@@ -56,7 +56,8 @@
   const GURL& GetVisibleURL() const override;
   const GURL& GetLastCommittedURL() const override;
   GURL GetCurrentURL(URLVerificationTrustLevel* trust_level) const override;
-  void ShowTransientContentView(CRWContentView* content_view) override {}
+  void ShowTransientContentView(CRWContentView* content_view) override;
+  void ClearTransientContentView();
   void AddScriptCommandCallback(const ScriptCommandCallback& callback,
                                 const std::string& command_prefix) override {}
   void RemoveScriptCommandCallback(const std::string& command_prefix) override {
@@ -87,14 +88,19 @@
       std::unique_ptr<NavigationManager> navigation_manager);
   void SetView(UIView* view);
 
+  // Getters for test data.
+  bool IsShowingTransientContentView();
+
   // Notifier for tests.
   void OnPageLoaded(PageLoadCompletionStatus load_completion_status);
   void OnProvisionalNavigationStarted(const GURL& url);
+  void OnRenderProcessGone();
 
  private:
   BrowserState* browser_state_;
   bool web_usage_enabled_;
   bool is_loading_;
+  bool is_showing_transient_content_view_;
   GURL url_;
   base::string16 title_;
   URLVerificationTrustLevel trust_level_;
diff --git a/ios/web/public/test/fakes/test_web_state.mm b/ios/web/public/test/fakes/test_web_state.mm
index 841f06eb..7e348a3e 100644
--- a/ios/web/public/test/fakes/test_web_state.mm
+++ b/ios/web/public/test/fakes/test_web_state.mm
@@ -23,6 +23,7 @@
     : browser_state_(nullptr),
       web_usage_enabled_(false),
       is_loading_(false),
+      is_showing_transient_content_view_(false),
       trust_level_(kAbsolute),
       content_is_html_(true) {}
 
@@ -186,6 +187,21 @@
     observer.ProvisionalNavigationStarted(url);
 }
 
+void TestWebState::OnRenderProcessGone() {
+  for (auto& observer : observers_)
+    observer.RenderProcessGone();
+}
+
+void TestWebState::ShowTransientContentView(CRWContentView* content_view) {
+  if (content_view) {
+    is_showing_transient_content_view_ = true;
+  }
+}
+
+void TestWebState::ClearTransientContentView() {
+  is_showing_transient_content_view_ = false;
+}
+
 void TestWebState::SetCurrentURL(const GURL& url) {
   url_ = url;
 }
@@ -211,4 +227,8 @@
   return base::WeakPtr<WebState>();
 }
 
+bool TestWebState::IsShowingTransientContentView() {
+  return is_showing_transient_content_view_;
+}
+
 }  // namespace web
diff --git a/media/base/android/java/src/org/chromium/media/MediaCodecUtil.java b/media/base/android/java/src/org/chromium/media/MediaCodecUtil.java
index 0c0d469..1ea6aa2b 100644
--- a/media/base/android/java/src/org/chromium/media/MediaCodecUtil.java
+++ b/media/base/android/java/src/org/chromium/media/MediaCodecUtil.java
@@ -68,8 +68,13 @@
     private static class MediaCodecListHelper implements Iterable<MediaCodecInfo> {
         @TargetApi(Build.VERSION_CODES.LOLLIPOP)
         public MediaCodecListHelper() {
-            if (hasNewMediaCodecList()) {
-                mCodecList = new MediaCodecList(MediaCodecList.ALL_CODECS).getCodecInfos();
+            if (supportsNewMediaCodecList()) {
+                try {
+                    mCodecList = new MediaCodecList(MediaCodecList.ALL_CODECS).getCodecInfos();
+                } catch (RuntimeException e) {
+                    // Swallow the exception due to bad Android implementation and pretend
+                    // MediaCodecList is not supported.
+                }
             }
         }
 
@@ -90,10 +95,14 @@
             return MediaCodecList.getCodecInfoAt(index);
         }
 
-        private boolean hasNewMediaCodecList() {
+        private static boolean supportsNewMediaCodecList() {
             return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
         }
 
+        private boolean hasNewMediaCodecList() {
+            return supportsNewMediaCodecList() && mCodecList != null;
+        }
+
         private MediaCodecInfo[] mCodecList;
 
         private class CodecInfoIterator implements Iterator<MediaCodecInfo> {
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
index 366ada9..7c10f9f 100644
--- a/media/blink/webmediaplayer_impl.cc
+++ b/media/blink/webmediaplayer_impl.cc
@@ -943,6 +943,9 @@
 bool WebMediaPlayerImpl::CopyVideoTextureToPlatformTexture(
     gpu::gles2::GLES2Interface* gl,
     unsigned int texture,
+    unsigned internal_format,
+    unsigned format,
+    unsigned type,
     bool premultiply_alpha,
     bool flip_y) {
   DCHECK(main_task_runner_->BelongsToCurrentThread());
@@ -963,7 +966,8 @@
   if (!context_3d_cb_.is_null())
     context_3d = context_3d_cb_.Run();
   return skcanvas_video_renderer_.CopyVideoFrameTexturesToGLTexture(
-      context_3d, gl, video_frame.get(), texture, premultiply_alpha, flip_y);
+      context_3d, gl, video_frame.get(), texture, internal_format, format, type,
+      premultiply_alpha, flip_y);
 }
 
 void WebMediaPlayerImpl::SetContentDecryptionModule(
diff --git a/media/blink/webmediaplayer_impl.h b/media/blink/webmediaplayer_impl.h
index 29863b0..8e1a16b5 100644
--- a/media/blink/webmediaplayer_impl.h
+++ b/media/blink/webmediaplayer_impl.h
@@ -173,6 +173,9 @@
 
   bool CopyVideoTextureToPlatformTexture(gpu::gles2::GLES2Interface* gl,
                                          unsigned int texture,
+                                         unsigned internal_format,
+                                         unsigned format,
+                                         unsigned type,
                                          bool premultiply_alpha,
                                          bool flip_y) override;
 
diff --git a/media/renderers/skcanvas_video_renderer.cc b/media/renderers/skcanvas_video_renderer.cc
index 1e2e9b2..d60e854 100644
--- a/media/renderers/skcanvas_video_renderer.cc
+++ b/media/renderers/skcanvas_video_renderer.cc
@@ -160,6 +160,20 @@
   return img;
 }
 
+bool VideoTextureNeedsClipping(const VideoFrame* video_frame) {
+  // There are multiple reasons that the size of the video frame's
+  // visible rectangle may differ from the coded size, including the
+  // encoder rounding up to the size of a macroblock, or use of
+  // non-square pixels.
+  //
+  // Some callers of these APIs (HTMLVideoElement and the 2D canvas
+  // context) already clip to the video frame's visible rectangle.
+  // WebGL on the other hand assumes that only the valid pixels are
+  // contained in the destination texture. This helper function
+  // determines whether this slower path is needed.
+  return video_frame->visible_rect().size() != video_frame->coded_size();
+}
+
 // Creates a SkImage from a |video_frame| backed by native resources.
 // The SkImage will take ownership of the underlying resource.
 sk_sp<SkImage> NewSkImageFromVideoFrameNative(VideoFrame* video_frame,
@@ -184,12 +198,10 @@
     gl->GenTextures(1, &source_texture);
     DCHECK(source_texture);
     gl->BindTexture(GL_TEXTURE_2D, source_texture);
-    const gfx::Size& natural_size = video_frame->natural_size();
-    gl->TexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, natural_size.width(),
-                   natural_size.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE,
-                   nullptr);
     SkCanvasVideoRenderer::CopyVideoFrameSingleTextureToGLTexture(
-        gl, video_frame, source_texture, true, false);
+        gl, video_frame,
+        SkCanvasVideoRenderer::SingleFrameForVideoElementOrCanvas,
+        source_texture, GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, true, false);
   } else {
     gl->WaitSyncTokenCHROMIUM(mailbox_holder.sync_token.GetConstData());
     source_texture = gl->CreateAndConsumeTextureCHROMIUM(
@@ -753,7 +765,11 @@
 void SkCanvasVideoRenderer::CopyVideoFrameSingleTextureToGLTexture(
     gpu::gles2::GLES2Interface* gl,
     VideoFrame* video_frame,
+    SingleFrameCopyMode copy_mode,
     unsigned int texture,
+    unsigned int internal_format,
+    unsigned int format,
+    unsigned int type,
     bool premultiply_alpha,
     bool flip_y) {
   DCHECK(video_frame);
@@ -776,14 +792,35 @@
   // "flip_y == true" means to reverse the video orientation while
   // "flip_y == false" means to keep the intrinsic orientation.
 
-  // The video's texture might be larger than the natural size because
-  // the encoder might have had to round up to the size of a macroblock.
-  // Make sure to only copy the natural size to avoid putting garbage
-  // into the bottom of the destination texture.
-  const gfx::Size& natural_size = video_frame->natural_size();
-  gl->CopySubTextureCHROMIUM(source_texture, 0, GL_TEXTURE_2D, texture, 0, 0, 0,
-                             0, 0, natural_size.width(), natural_size.height(),
-                             flip_y, premultiply_alpha, false);
+  if (copy_mode == SingleFrameForVideoElementOrCanvas ||
+      !VideoTextureNeedsClipping(video_frame)) {
+    // No need to clip the source video texture.
+    gl->CopyTextureCHROMIUM(source_texture, 0, GL_TEXTURE_2D, texture, 0,
+                            internal_format, type, flip_y, premultiply_alpha,
+                            false);
+  } else {
+    // Must reallocate the destination texture and copy only a sub-portion.
+    gfx::Rect dest_rect = video_frame->visible_rect();
+#if DCHECK_IS_ON()
+    // The caller should have bound _texture_ to the GL_TEXTURE_2D
+    // binding point already.
+    GLuint current_texture = 0;
+    gl->GetIntegerv(GL_TEXTURE_BINDING_2D,
+                    reinterpret_cast<GLint*>(&current_texture));
+    DCHECK_EQ(current_texture, texture);
+    // There should always be enough data in the source texture to
+    // cover this copy.
+    DCHECK_LE(dest_rect.width(), video_frame->coded_size().width());
+    DCHECK_LE(dest_rect.height(), video_frame->coded_size().height());
+#endif
+    gl->TexImage2D(GL_TEXTURE_2D, 0, internal_format, dest_rect.width(),
+                   dest_rect.height(), 0, format, type, nullptr);
+    gl->CopySubTextureCHROMIUM(source_texture, 0, GL_TEXTURE_2D, texture, 0, 0,
+                               0, dest_rect.x(), dest_rect.y(),
+                               dest_rect.width(), dest_rect.height(), flip_y,
+                               premultiply_alpha, false);
+  }
+
   gl->DeleteTextures(1, &source_texture);
   gl->Flush();
 
@@ -796,6 +833,9 @@
     gpu::gles2::GLES2Interface* destination_gl,
     const scoped_refptr<VideoFrame>& video_frame,
     unsigned int texture,
+    unsigned int internal_format,
+    unsigned int format,
+    unsigned int type,
     bool premultiply_alpha,
     bool flip_y) {
   DCHECK(thread_checker_.CalledOnValidThread());
@@ -832,15 +872,35 @@
         destination_gl->CreateAndConsumeTextureCHROMIUM(
             mailbox_holder.texture_target, mailbox_holder.mailbox.name);
 
-    // The video's texture might be larger than the natural size because
-    // the encoder might have had to round up to the size of a macroblock.
-    // Make sure to only copy the natural size to avoid putting garbage
-    // into the bottom of the destination texture.
-    const gfx::Size& natural_size = video_frame->natural_size();
-    destination_gl->CopySubTextureCHROMIUM(
-        intermediate_texture, 0, GL_TEXTURE_2D, texture, 0, 0, 0, 0, 0,
-        natural_size.width(), natural_size.height(), flip_y, premultiply_alpha,
-        false);
+    // See whether the source video texture must be clipped.
+    if (VideoTextureNeedsClipping(video_frame.get())) {
+      // Reallocate destination texture and copy only valid region.
+      gfx::Rect dest_rect = video_frame->visible_rect();
+#if DCHECK_IS_ON()
+      // The caller should have bound _texture_ to the GL_TEXTURE_2D
+      // binding point already.
+      GLuint current_texture = 0;
+      destination_gl->GetIntegerv(GL_TEXTURE_BINDING_2D,
+                                  reinterpret_cast<GLint*>(&current_texture));
+      DCHECK_EQ(current_texture, texture);
+      // There should always be enough data in the source texture to
+      // cover this copy.
+      DCHECK_LE(dest_rect.width(), video_frame->coded_size().width());
+      DCHECK_LE(dest_rect.height(), video_frame->coded_size().height());
+#endif
+      destination_gl->TexImage2D(GL_TEXTURE_2D, 0, internal_format,
+                                 dest_rect.width(), dest_rect.height(), 0,
+                                 format, type, nullptr);
+      destination_gl->CopySubTextureCHROMIUM(
+          intermediate_texture, 0, GL_TEXTURE_2D, texture, 0, 0, 0,
+          dest_rect.x(), dest_rect.y(), dest_rect.width(), dest_rect.height(),
+          flip_y, premultiply_alpha, false);
+    } else {
+      destination_gl->CopyTextureCHROMIUM(
+          intermediate_texture, 0, GL_TEXTURE_2D, texture, 0, internal_format,
+          type, flip_y, premultiply_alpha, false);
+    }
+
     destination_gl->DeleteTextures(1, &intermediate_texture);
 
     // Wait for destination context to consume mailbox before deleting it in
@@ -855,8 +915,9 @@
     SyncTokenClientImpl client(canvas_gl);
     video_frame->UpdateReleaseSyncToken(&client);
   } else {
-    CopyVideoFrameSingleTextureToGLTexture(destination_gl, video_frame.get(),
-                                           texture, premultiply_alpha, flip_y);
+    CopyVideoFrameSingleTextureToGLTexture(
+        destination_gl, video_frame.get(), SingleFrameForWebGL, texture,
+        internal_format, format, type, premultiply_alpha, flip_y);
   }
 
   return true;
diff --git a/media/renderers/skcanvas_video_renderer.h b/media/renderers/skcanvas_video_renderer.h
index 3831139..1f3d2f7f 100644
--- a/media/renderers/skcanvas_video_renderer.h
+++ b/media/renderers/skcanvas_video_renderer.h
@@ -64,16 +64,25 @@
                                            void* rgb_pixels,
                                            size_t row_bytes);
 
+  enum SingleFrameCopyMode {
+    SingleFrameForVideoElementOrCanvas,
+    SingleFrameForWebGL
+  };
+
   // Copy the contents of texture of |video_frame| to texture |texture|.
   // |level|, |internal_format|, |type| specify target texture |texture|.
   // The format of |video_frame| must be VideoFrame::NATIVE_TEXTURE.
-  // Assumes |texture| has already been allocated with the appropriate
-  // size and a compatible format, internal format and type; this is
-  // effectively a "TexSubImage" operation.
+  // |copy_mode| alters how the copy is done, and takes into consideration
+  // whether the caller will clip the texture to the frame's |visible_rect|,
+  // or expects this to be done internally.
   static void CopyVideoFrameSingleTextureToGLTexture(
       gpu::gles2::GLES2Interface* gl,
       VideoFrame* video_frame,
+      SingleFrameCopyMode copy_mode,
       unsigned int texture,
+      unsigned int internal_format,
+      unsigned int format,
+      unsigned int type,
       bool premultiply_alpha,
       bool flip_y);
 
@@ -82,15 +91,15 @@
   // |level|, |internal_format|, |type| specify target texture |texture|.
   // The format of |video_frame| must be VideoFrame::NATIVE_TEXTURE.
   // |context_3d| has a GrContext that may be used during the copy.
-  // Assumes |texture| has already been allocated with the appropriate
-  // size and a compatible format, internal format and type; this is
-  // effectively a "TexSubImage" operation.
   // Returns true on success.
   bool CopyVideoFrameTexturesToGLTexture(
       const Context3D& context_3d,
       gpu::gles2::GLES2Interface* destination_gl,
       const scoped_refptr<VideoFrame>& video_frame,
       unsigned int texture,
+      unsigned int internal_format,
+      unsigned int format,
+      unsigned int type,
       bool premultiply_alpha,
       bool flip_y);
 
diff --git a/net/BUILD.gn b/net/BUILD.gn
index 36c0fa4..b84fc22c 100644
--- a/net/BUILD.gn
+++ b/net/BUILD.gn
@@ -41,7 +41,7 @@
 # in addition to use_openssl_certs or use_nss_certs, in that case byte certs
 # are used internally but OpenSSL or NSS are used for certificate verification.
 # TODO(mattm): crbug.com/671420: Implement and enable this for all platforms.
-use_byte_certs = is_mac
+use_byte_certs = is_mac || is_android
 
 buildflag_header("features") {
   header = "net_features.h"
diff --git a/net/cert/ct_objects_extractor.cc b/net/cert/ct_objects_extractor.cc
index 1a6e6e4..852bf827 100644
--- a/net/cert/ct_objects_extractor.cc
+++ b/net/cert/ct_objects_extractor.cc
@@ -41,7 +41,9 @@
 
 bssl::UniquePtr<X509> OSCertHandleToOpenSSL(
     X509Certificate::OSCertHandle os_handle) {
-#if defined(USE_OPENSSL_CERTS)
+#if BUILDFLAG(USE_BYTE_CERTS)
+  return bssl::UniquePtr<X509>(X509_parse_from_buffer(os_handle));
+#elif defined(USE_OPENSSL_CERTS)
   return bssl::UniquePtr<X509>(X509Certificate::DupOSCertHandle(os_handle));
 #else
   std::string der_encoded;
diff --git a/net/socket/ssl_server_socket_impl.cc b/net/socket/ssl_server_socket_impl.cc
index 9b3cfd3..5d4bce7 100644
--- a/net/socket/ssl_server_socket_impl.cc
+++ b/net/socket/ssl_server_socket_impl.cc
@@ -14,6 +14,7 @@
 #include "net/base/net_errors.h"
 #include "net/cert/cert_verify_result.h"
 #include "net/cert/client_cert_verifier.h"
+#include "net/cert/x509_util.h"
 #include "net/cert/x509_util_openssl.h"
 #include "net/log/net_log_event_type.h"
 #include "net/log/net_log_with_source.h"
@@ -624,6 +625,8 @@
   uint8_t session_ctx_id = 0;
   SSL_CTX_set_session_id_context(ssl_ctx_.get(), &session_ctx_id,
                                  sizeof(session_ctx_id));
+  // Deduplicate all certificates minted from the SSL_CTX in memory.
+  SSL_CTX_set0_buffer_pool(ssl_ctx_.get(), x509_util::GetBufferPool());
 
   int verify_mode = 0;
   switch (ssl_server_config_.client_cert_type) {
@@ -643,26 +646,26 @@
 
   // Set certificate and private key.
   DCHECK(cert_->os_cert_handle());
-#if defined(USE_OPENSSL_CERTS)
+  DCHECK(key_->key());
+#if BUILDFLAG(USE_BYTE_CERTS)
+  // On success, SSL_CTX_set_chain_and_key acquires a reference to
+  // |cert_->os_cert_handle()| and |key_->key()|.
+  CRYPTO_BUFFER* cert_buffers[] = {cert_->os_cert_handle()};
+  CHECK(SSL_CTX_set_chain_and_key(ssl_ctx_.get(), cert_buffers,
+                                  arraysize(cert_buffers), key_->key(),
+                                  nullptr /* privkey_method */));
+#elif defined(USE_OPENSSL_CERTS)
   CHECK(SSL_CTX_use_certificate(ssl_ctx_.get(), cert_->os_cert_handle()));
+  CHECK(SSL_CTX_use_PrivateKey(ssl_ctx_.get(), key_->key()));
 #else
-  // Convert OSCertHandle to X509 structure.
   std::string der_string;
   CHECK(X509Certificate::GetDEREncoded(cert_->os_cert_handle(), &der_string));
-
-  const unsigned char* der_string_array =
-      reinterpret_cast<const unsigned char*>(der_string.data());
-
-  bssl::UniquePtr<X509> x509(
-      d2i_X509(NULL, &der_string_array, der_string.length()));
-  CHECK(x509);
-
-  // On success, SSL_CTX_use_certificate acquires a reference to |x509|.
-  CHECK(SSL_CTX_use_certificate(ssl_ctx_.get(), x509.get()));
-#endif  // USE_OPENSSL_CERTS
-
-  DCHECK(key_->key());
+  CHECK(SSL_CTX_use_certificate_ASN1(
+      ssl_ctx_.get(), der_string.length(),
+      reinterpret_cast<const unsigned char*>(der_string.data())));
+  // On success, SSL_CTX_use_PrivateKey acquires a reference to |key_->key()|.
   CHECK(SSL_CTX_use_PrivateKey(ssl_ctx_.get(), key_->key()));
+#endif  // USE_OPENSSL_CERTS && !USE_BYTE_CERTS
 
   DCHECK_LT(SSL3_VERSION, ssl_server_config_.version_min);
   DCHECK_LT(SSL3_VERSION, ssl_server_config_.version_max);
diff --git a/net/ssl/openssl_client_key_store.cc b/net/ssl/openssl_client_key_store.cc
index 295810f..48895e9 100644
--- a/net/ssl/openssl_client_key_store.cc
+++ b/net/ssl/openssl_client_key_store.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/memory/singleton.h"
+#include "net/cert/asn1_util.h"
 #include "net/cert/x509_certificate.h"
 #include "net/ssl/ssl_private_key.h"
 #include "third_party/boringssl/src/include/openssl/evp.h"
@@ -19,6 +20,16 @@
 
 // Serializes the SubjectPublicKeyInfo for |cert|.
 bool GetCertificateSPKI(const X509Certificate* cert, std::string* spki) {
+#if BUILDFLAG(USE_BYTE_CERTS)
+  base::StringPiece cert_der(
+      reinterpret_cast<const char*>(CRYPTO_BUFFER_data(cert->os_cert_handle())),
+      CRYPTO_BUFFER_len(cert->os_cert_handle()));
+  base::StringPiece spki_tmp;
+  if (!asn1::ExtractSPKIFromDERCert(cert_der, &spki_tmp))
+    return false;
+  spki_tmp.CopyToString(spki);
+  return true;
+#else
   bssl::UniquePtr<EVP_PKEY> pkey(X509_get_pubkey(cert->os_cert_handle()));
   if (!pkey) {
     LOG(ERROR) << "Can't extract private key from certificate!";
@@ -38,6 +49,7 @@
                reinterpret_cast<char*>(der) + der_len);
   OPENSSL_free(der);
   return true;
+#endif
 }
 
 }  // namespace
diff --git a/net/ssl/openssl_ssl_util.cc b/net/ssl/openssl_ssl_util.cc
index c3988b464..8071da6 100644
--- a/net/ssl/openssl_ssl_util.cc
+++ b/net/ssl/openssl_ssl_util.cc
@@ -227,15 +227,17 @@
 
 bssl::UniquePtr<X509> OSCertHandleToOpenSSL(
     X509Certificate::OSCertHandle os_handle) {
-#if defined(USE_OPENSSL_CERTS)
+#if BUILDFLAG(USE_BYTE_CERTS)
+  return bssl::UniquePtr<X509>(X509_parse_from_buffer(os_handle));
+#elif defined(USE_OPENSSL_CERTS)
   return bssl::UniquePtr<X509>(X509Certificate::DupOSCertHandle(os_handle));
-#else   // !defined(USE_OPENSSL_CERTS)
+#else   // !defined(USE_OPENSSL_CERTS) && !BUILDFLAG(USE_BYTE_CERTS)
   std::string der_encoded;
   if (!X509Certificate::GetDEREncoded(os_handle, &der_encoded))
     return bssl::UniquePtr<X509>();
   const uint8_t* bytes = reinterpret_cast<const uint8_t*>(der_encoded.data());
   return bssl::UniquePtr<X509>(d2i_X509(NULL, &bytes, der_encoded.size()));
-#endif  // defined(USE_OPENSSL_CERTS)
+#endif  // defined(USE_OPENSSL_CERTS) && BUILDFLAG(USE_BYTE_CERTS)
 }
 
 bssl::UniquePtr<STACK_OF(X509)> OSCertHandlesToOpenSSL(
diff --git a/services/preferences/tracked/BUILD.gn b/services/preferences/tracked/BUILD.gn
index d372473..16be8a2d 100644
--- a/services/preferences/tracked/BUILD.gn
+++ b/services/preferences/tracked/BUILD.gn
@@ -66,6 +66,7 @@
   testonly = true
   sources = [
     "device_id_unittest.cc",
+    "interceptable_pref_filter_unittest.cc",
     "pref_hash_calculator_unittest.cc",
     "pref_hash_filter_unittest.cc",
     "pref_hash_store_impl_unittest.cc",
diff --git a/services/preferences/tracked/interceptable_pref_filter.cc b/services/preferences/tracked/interceptable_pref_filter.cc
index af987a30..81f2783 100644
--- a/services/preferences/tracked/interceptable_pref_filter.cc
+++ b/services/preferences/tracked/interceptable_pref_filter.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/callback_helpers.h"
 
 InterceptablePrefFilter::InterceptablePrefFilter() {}
 InterceptablePrefFilter::~InterceptablePrefFilter() {}
@@ -26,9 +27,8 @@
     const FinalizeFilterOnLoadCallback finalize_filter_on_load(
         base::Bind(&InterceptablePrefFilter::FinalizeFilterOnLoad, AsWeakPtr(),
                    post_filter_on_load_callback));
-    filter_on_load_interceptor_.Run(finalize_filter_on_load,
-                                    std::move(pref_store_contents));
-    filter_on_load_interceptor_.Reset();
+    base::ResetAndReturn(&filter_on_load_interceptor_)
+        .Run(finalize_filter_on_load, std::move(pref_store_contents));
   }
 }
 
diff --git a/services/preferences/tracked/interceptable_pref_filter_unittest.cc b/services/preferences/tracked/interceptable_pref_filter_unittest.cc
new file mode 100644
index 0000000..cdaaadb3
--- /dev/null
+++ b/services/preferences/tracked/interceptable_pref_filter_unittest.cc
@@ -0,0 +1,55 @@
+// Copyright 2017 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 "services/preferences/tracked/interceptable_pref_filter.h"
+
+#include <string>
+#include <utility>
+
+#include "base/bind.h"
+#include "base/memory/ptr_util.h"
+#include "base/values.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+class TestInterceptablePrefFilter : public InterceptablePrefFilter {
+ public:
+  void FinalizeFilterOnLoad(
+      const PostFilterOnLoadCallback& post_filter_on_load_callback,
+      std::unique_ptr<base::DictionaryValue> pref_store_contents,
+      bool prefs_altered) override {
+    post_filter_on_load_callback.Run(std::move(pref_store_contents),
+                                     prefs_altered);
+  }
+
+  void FilterUpdate(const std::string& path) override {}
+
+  OnWriteCallbackPair FilterSerializeData(
+      base::DictionaryValue* pref_store_contents) override {
+    return {};
+  }
+};
+
+void NoOpIntercept(const InterceptablePrefFilter::FinalizeFilterOnLoadCallback&
+                       finalize_filter_on_load,
+                   std::unique_ptr<base::DictionaryValue> prefs) {
+  finalize_filter_on_load.Run(std::move(prefs), false);
+}
+
+void DeleteFilter(std::unique_ptr<TestInterceptablePrefFilter>* filter,
+                  std::unique_ptr<base::DictionaryValue> prefs,
+                  bool schedule_write) {
+  filter->reset();
+}
+
+TEST(InterceptablePrefFilterTest, CallbackDeletes) {
+  auto filter = base::MakeUnique<TestInterceptablePrefFilter>();
+  filter->InterceptNextFilterOnLoad(base::Bind(&NoOpIntercept));
+  filter->FilterOnLoad(base::Bind(&DeleteFilter, &filter),
+                       base::MakeUnique<base::DictionaryValue>());
+  EXPECT_FALSE(filter);
+}
+
+}  // namespace
diff --git a/testing/buildbot/gn_isolate_map.pyl b/testing/buildbot/gn_isolate_map.pyl
index 4ad06da..4a3bb665 100644
--- a/testing/buildbot/gn_isolate_map.pyl
+++ b/testing/buildbot/gn_isolate_map.pyl
@@ -161,6 +161,15 @@
     "label": "//ui/aura:aura_unittests",
     "type": "windowed_test_launcher",
   },
+  "motopho_latency_test": {
+    "label": "//chrome/test/vr/perf/latency/:motopho_latency_test",
+    "type": "script",
+    "script": "//chrome/test/vr/perf/latency/run_latency_test.py",
+    "args": [
+      "--output-dir=${ISOLATED_OUTDIR}",
+      "-v",
+    ],
+  },
   "base_junit_tests": {
     "label": "//base:base_junit_tests",
     "type": "junit_test",
diff --git a/testing/buildbot/manage.py b/testing/buildbot/manage.py
index 48a5928..4fd99b1 100755
--- a/testing/buildbot/manage.py
+++ b/testing/buildbot/manage.py
@@ -179,6 +179,7 @@
   'junit_unit_tests',
   'media_router_perf_tests',
   'media_router_tests',
+  'motopho_latency_test',
   'net_junit_tests',
   'net_junit_tests',
   'ui_junit_tests',
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index b31a18c8..d750e45 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -2614,6 +2614,31 @@
             ]
         }
     ],
+    "ServiceWorkerNavigationPreload": [
+        {
+            "platforms": [
+                "android",
+                "chromeos",
+                "linux",
+                "mac",
+                "win"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "ServiceWorkerNavigationPreload"
+                    ]
+                },
+                {
+                    "name": "Disabled",
+                    "disable_features": [
+                        "ServiceWorkerNavigationPreload"
+                    ]
+                }
+            ]
+        }
+    ],
     "SettingsEnforcement": [
         {
             "platforms": [
@@ -2847,29 +2872,6 @@
             ]
         }
     ],
-    "TranslateRanker": [
-        {
-            "platforms": [
-                "android",
-                "chromeos",
-                "ios",
-                "linux",
-                "mac",
-                "win"
-            ],
-            "experiments": [
-                {
-                    "name": "EnforcementEnabled",
-                    "params": {
-                        "translate-ranker-model-url": "https://www.gstatic.com/chrome/intelligence/assist/ranker/models/translate/2017/02/translate_ranker_model_20170217.pb.bin"
-                    },
-                    "enable_features": [
-                        "TranslateRankerEnforcement"
-                    ]
-                }
-            ]
-        }
-    ],
     "TranslateRankerLogging": [
         {
             "platforms": [
@@ -2890,6 +2892,29 @@
             ]
         }
     ],
+    "TranslateRankerModel": [
+        {
+            "platforms": [
+                "android",
+                "chromeos",
+                "ios",
+                "linux",
+                "mac",
+                "win"
+            ],
+            "experiments": [
+                {
+                    "name": "Enforcement",
+                    "params": {
+                        "translate-ranker-model-url": "https://www.gstatic.com/chrome/intelligence/assist/ranker/models/translate/2017/03/translate_ranker_model_20170329.pb.bin"
+                    },
+                    "enable_features": [
+                        "TranslateRankerEnforcement"
+                    ]
+                }
+            ]
+        }
+    ],
     "TranslateServerStudy": [
         {
             "platforms": [
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index c84463e..62c79d8 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -699,12 +699,6 @@
 
 # ====== LayoutNG-only failures until here ======
 
-# Requires ServiceWorkerNavigationPreload feature enabled. Run under
-# virtual/service-worker-navigation-preload only.
-crbug.com/649558 http/tests/serviceworker/navigation-preload/ [ Skip ]
-crbug.com/649558 external/wpt/service-workers/service-worker/navigation-preload/ [ Skip ]
-crbug.com/649558 virtual/mojo-loading/http/tests/serviceworker/navigation-preload/ [ Skip ]
-
 # Run these tests with under virtual/scalefactor... only.
 crbug.com/567837 fast/hidpi/static [ Skip ]
 
diff --git a/third_party/WebKit/LayoutTests/VirtualTestSuites b/third_party/WebKit/LayoutTests/VirtualTestSuites
index 2375ea98..fa731844 100644
--- a/third_party/WebKit/LayoutTests/VirtualTestSuites
+++ b/third_party/WebKit/LayoutTests/VirtualTestSuites
@@ -121,7 +121,7 @@
   {
     "prefix": "origin-trials-runtimeflags-disabled",
     "base": "http/tests/origin_trials/webexposed",
-    "args": ["--disable-blink-features=ForeignFetch,InstalledApp,LinkServiceWorker,LongTaskObserver,ServiceWorkerNavigationPreload,SetRootScroller,WebUSB,WebVR,WebShare"]
+    "args": ["--disable-blink-features=ForeignFetch,InstalledApp,LinkServiceWorker,LongTaskObserver,SetRootScroller,WebUSB,WebVR,WebShare"]
   },
   {
     "prefix": "android",
@@ -423,18 +423,13 @@
     "args": ["--enable-features=AsmJsToWebAssembly"]
   },
   {
-    "prefix": "service-worker-navigation-preload",
-    "base": "http/tests/serviceworker",
-    "args": ["--enable-features=ServiceWorkerNavigationPreload"]
-  },
-  {
-    "prefix": "service-worker-navigation-preload-wpt",
-    "base": "external/wpt/service-workers/service-worker/navigation-preload",
-    "args": ["--enable-features=ServiceWorkerNavigationPreload"]
+    "prefix": "service-worker-navigation-preload-disabled",
+    "base": "webexposed",
+    "args": ["--disable-features=ServiceWorkerNavigationPreload"]
   },
   {
     "prefix": "service-worker-navigation-preload-disabled",
-    "base": "http/tests/serviceworker/chromium",
+    "base": "http/tests/serviceworker/webexposed",
     "args": ["--disable-features=ServiceWorkerNavigationPreload"]
   },
   {
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/service-workers/resources/navigation-preload-worker.js b/third_party/WebKit/LayoutTests/http/tests/inspector/service-workers/resources/navigation-preload-worker.js
new file mode 100644
index 0000000..5c59f0ca
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector/service-workers/resources/navigation-preload-worker.js
@@ -0,0 +1,17 @@
+self.addEventListener('activate', event => {
+    event.waitUntil(
+      registration.navigationPreload.enable()
+        .then(_ => registration.navigationPreload.setHeaderValue('hello')));
+  });
+
+self.addEventListener('fetch', event => {
+    if (event.request.url.indexOf('BrokenChunked') != -1) {
+      event.respondWith(
+        event.preloadResponse
+          .catch(_ => { return new Response('dummy'); }));
+      return;
+    }
+    if (event.preloadResponse) {
+      event.respondWith(event.preloadResponse);
+    }
+  });
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/service-workers/resources/navigation-preload-worker.php b/third_party/WebKit/LayoutTests/http/tests/inspector/service-workers/resources/navigation-preload-worker.php
deleted file mode 100644
index ccf6c070..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/inspector/service-workers/resources/navigation-preload-worker.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-// generate_token.py  http://127.0.0.1:8000 ServiceWorkerNavigationPreload -expire-timestamp=2000000000
-header("Origin-Trial: AsAA4dg2Rm+GSgnpyxxnpVk1Bk8CcE+qVBTDpPbIFNscyNRJOdqw1l0vkC4dtsGm1tmP4ZDAKwycQDzsc9xr7gMAAABmeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiU2VydmljZVdvcmtlck5hdmlnYXRpb25QcmVsb2FkIiwgImV4cGlyeSI6IDIwMDAwMDAwMDB9");
-header('Content-Type: application/javascript');
-?>
-
-self.addEventListener('activate', event => {
-    event.waitUntil(
-      registration.navigationPreload.enable()
-        .then(_ => registration.navigationPreload.setHeaderValue('hello')));
-  });
-
-self.addEventListener('fetch', event => {
-    if (event.request.url.indexOf('BrokenChunked') != -1) {
-      event.respondWith(
-        event.preloadResponse
-          .catch(_ => { return new Response('dummy'); }));
-      return;
-    }
-    if (event.preloadResponse) {
-      event.respondWith(event.preloadResponse);
-    }
-  });
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/service-workers/service-workers-navigation-preload.html b/third_party/WebKit/LayoutTests/http/tests/inspector/service-workers/service-workers-navigation-preload.html
index 9df07e7c..8c2ad97f 100644
--- a/third_party/WebKit/LayoutTests/http/tests/inspector/service-workers/service-workers-navigation-preload.html
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector/service-workers/service-workers-navigation-preload.html
@@ -35,7 +35,7 @@
 
 function test()
 {
-    var scriptURL = "http://127.0.0.1:8000/inspector/service-workers/resources/navigation-preload-worker.php";
+    var scriptURL = "http://127.0.0.1:8000/inspector/service-workers/resources/navigation-preload-worker.js";
     var scope = "http://127.0.0.1:8000/inspector/service-workers/resources/navigation-preload-scope.php";
     var preloadRequestIDs = {};
 
diff --git a/third_party/WebKit/LayoutTests/http/tests/navigation/navigation-with-detached-origin-document-expected.txt b/third_party/WebKit/LayoutTests/http/tests/navigation/navigation-with-detached-origin-document-expected.txt
new file mode 100644
index 0000000..7ef22e9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/http/tests/navigation/navigation-with-detached-origin-document-expected.txt
@@ -0,0 +1 @@
+PASS
diff --git a/third_party/WebKit/LayoutTests/http/tests/navigation/navigation-with-detached-origin-document.html b/third_party/WebKit/LayoutTests/http/tests/navigation/navigation-with-detached-origin-document.html
new file mode 100644
index 0000000..657789d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/http/tests/navigation/navigation-with-detached-origin-document.html
@@ -0,0 +1,14 @@
+<body>
+<script>
+if (window.testRunner) {
+  testRunner.waitUntilDone();
+  testRunner.dumpAsText();
+}
+
+function detachIframe() {
+  document.getElementById("i").remove();
+}
+</script>
+<iframe id="i" src="resources/iframe-that-navigates-parent-then-detaches.html">
+</iframe>
+</body>
diff --git a/third_party/WebKit/LayoutTests/http/tests/navigation/resources/iframe-that-navigates-parent-then-detaches.html b/third_party/WebKit/LayoutTests/http/tests/navigation/resources/iframe-that-navigates-parent-then-detaches.html
new file mode 100644
index 0000000..6eaed1b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/http/tests/navigation/resources/iframe-that-navigates-parent-then-detaches.html
@@ -0,0 +1,10 @@
+<body>
+<script>
+window.onload = function() {
+  setTimeout(function() {
+    parent.location = "pass-and-notify-done.html";
+    parent.detachIframe();
+  }, 0);
+}
+</script>
+</body>
diff --git a/third_party/WebKit/LayoutTests/http/tests/serviceworker/chromium/navigation-preload-origin-trial-interfaces-expected.txt b/third_party/WebKit/LayoutTests/http/tests/serviceworker/chromium/navigation-preload-origin-trial-interfaces-expected.txt
deleted file mode 100644
index 0de3b49..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/serviceworker/chromium/navigation-preload-origin-trial-interfaces-expected.txt
+++ /dev/null
@@ -1,85 +0,0 @@
-CONSOLE WARNING: line 13: This test relies on console message comparison so there can be different -expected.txt files for virtual test suites.
-CONSOLE MESSAGE: line 21: Interfaces in document
-interface NavigationPreloadManager
- method constructor
- method disable
- method enable
- method getState
- method setHeaderValue
-interface ServiceWorkerRegistration
- getter active
- getter backgroundFetch
- getter installing
- getter navigationPreload
- getter onupdatefound
- getter paymentManager
- getter pushManager
- getter scope
- getter sync
- getter waiting
- method constructor
- method getNotifications
- method showNotification
- method unregister
- method update
- setter onupdatefound
-CONSOLE MESSAGE: line 58: Interfaces in normal Service Worker
-interface FetchEvent
- getter clientId
- getter isReload
- getter request
- method constructor
- method respondWith
-interface ServiceWorkerRegistration
- getter active
- getter backgroundFetch
- getter installing
- getter onupdatefound
- getter paymentManager
- getter pushManager
- getter scope
- getter sync
- getter waiting
- method constructor
- method getNotifications
- method showNotification
- method unregister
- method update
- setter onupdatefound
-CONSOLE MESSAGE: line 70: Interfaces in Origin-Trial enabled Service Worker
-interface FetchEvent
- getter clientId
- getter isReload
- getter preloadResponse
- getter request
- method constructor
- method respondWith
-interface NavigationPreloadManager
- method constructor
- method disable
- method enable
- method getState
- method setHeaderValue
-interface ServiceWorkerRegistration
- getter active
- getter backgroundFetch
- getter installing
- getter navigationPreload
- getter onupdatefound
- getter paymentManager
- getter pushManager
- getter scope
- getter sync
- getter waiting
- method constructor
- method getNotifications
- method showNotification
- method unregister
- method update
- setter onupdatefound
-This is a testharness.js-based test.
-PASS Navigation preload related interfaces in Origin-Trial enabled document. 
-PASS Navigation preload related interfaces in normal SW. 
-PASS Navigation preload related interfaces in Origin-Trial enabled SW. 
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/http/tests/serviceworker/chromium/navigation-preload-origin-trial-interfaces.html b/third_party/WebKit/LayoutTests/http/tests/serviceworker/chromium/navigation-preload-origin-trial-interfaces.html
deleted file mode 100644
index 53aa9d83..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/serviceworker/chromium/navigation-preload-origin-trial-interfaces.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<!-- Generate these token with the commands:
-generate_token.py  http://127.0.0.1:8000 ServiceWorkerNavigationPreload -expire-timestamp=2000000000
--->
-<meta http-equiv="origin-trial" content="AsAA4dg2Rm+GSgnpyxxnpVk1Bk8CcE+qVBTDpPbIFNscyNRJOdqw1l0vkC4dtsGm1tmP4ZDAKwycQDzsc9xr7gMAAABmeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiU2VydmljZVdvcmtlck5hdmlnYXRpb25QcmVsb2FkIiwgImV4cGlyeSI6IDIwMDAwMDAwMDB9" />
-<title>Navigation Preload origin trial</title>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/test-helpers.js"></script>
-<script src="./resources/get-interface-names.js"></script>
-<script>
-console.warn('This test relies on console message comparison so there can ' +
-    'be different -expected.txt files for virtual test suites.');
-
-test(t => {
-  var interfaces =
-      get_interface_names(this, ['NavigationPreloadManager',
-                                'FetchEvent',
-                                'ServiceWorkerRegistration']);
-  console.log('Interfaces in document\n' + interfaces);
-}, "Navigation preload related interfaces in Origin-Trial enabled document.");
-
-function check_interfaces_in_sw(t, script, scope) {
-  var worker;
-  var message;
-  var registration;
-  return service_worker_unregister_and_register(t, script, scope)
-    .then(reg => {
-        registration = reg;
-        worker = registration.installing;
-        return wait_for_state(t, worker, 'activated');
-      })
-    .then(_ => {
-        var saw_message = new Promise(resolve => {
-            navigator.serviceWorker.onmessage =
-                e => { resolve(e.data); };
-          });
-        worker.postMessage("");
-        return saw_message;
-      })
-    .then(msg => {
-        message = msg;
-        return registration.unregister();
-      })
-    .then(_ => {
-        return message;
-      });
-}
-
-promise_test(t => {
-    var script =
-        './resources/navigation-preload-origin-trial-interfaces-worker.php';
-    var scope =
-        './resources/navigation-preload-origin-trial-interfaces-scope-normal';
-    return check_interfaces_in_sw(t, script, scope)
-      .then(message => {
-        console.log('Interfaces in normal Service Worker\n' + message);
-      });
-  }, "Navigation preload related interfaces in normal SW.");
-
-promise_test(t => {
-    var script =
-        './resources/navigation-preload-origin-trial-interfaces-worker.php?' +
-        'origintrial=true';
-    var scope =
-        './resources/navigation-preload-origin-trial-interfaces-scope-enabled';
-    return check_interfaces_in_sw(t, script, scope)
-      .then(message => {
-        console.log('Interfaces in Origin-Trial enabled Service Worker\n' +
-                    message);
-      });
-  }, "Navigation preload related interfaces in Origin-Trial enabled SW.");
-</script>
diff --git a/third_party/WebKit/LayoutTests/http/tests/serviceworker/chromium/navigation-preload-origin-trial-methods-expected.txt b/third_party/WebKit/LayoutTests/http/tests/serviceworker/chromium/navigation-preload-origin-trial-methods-expected.txt
deleted file mode 100644
index a3bdeb7..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/serviceworker/chromium/navigation-preload-origin-trial-methods-expected.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-CONSOLE WARNING: line 13: This test relies on console message comparison so there can be different -expected.txt files for virtual test suites.
-CONSOLE MESSAGE: line 68: --normal SW--
-disable() rejected with: AbortError: Failed to enable or disable navigation preload: The service worker script does not have a valid Navigation Preload Origin Trial token.
-enable() rejected with: AbortError: Failed to enable or disable navigation preload: The service worker script does not have a valid Navigation Preload Origin Trial token.
-getState() resolved with: {"enabled":false,"headerValue":"true"}
-setHeaderValue() rejected with: AbortError: Failed to set navigation preload header: The service worker script does not have a valid Navigation Preload Origin Trial token.
-log from SW
-Activate event handler
-registration.navigationPreload not found
-Fetch event handler
-event.preloadResponse not found
-
-CONSOLE MESSAGE: line 79: --Origin-Trial enabled SW--
-disable() resolved with: undefined
-enable() resolved with: undefined
-getState() resolved with: {"enabled":true,"headerValue":"world"}
-setHeaderValue() resolved with: undefined
-log from SW
-Activate event handler
-disable() resolved with: undefined
-enable() resolved with: undefined
-getState() resolved with: {"enabled":true,"headerValue":"true"}
-setHeaderValue() resolved with: undefined
-Fetch event handler
-event.preloadResponse resolved with: [object Response]
-Text of preloadResponse: [Service-Worker-Navigation-Preload header set: hello]
-
-This is a testharness.js-based test.
-PASS Calling Navigation preload related methods for normal SW. 
-PASS Calling Navigation preload related methods for Origin-Trial enabled SW. 
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/http/tests/serviceworker/chromium/navigation-preload-origin-trial-methods.html b/third_party/WebKit/LayoutTests/http/tests/serviceworker/chromium/navigation-preload-origin-trial-methods.html
deleted file mode 100644
index 2fc1faa..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/serviceworker/chromium/navigation-preload-origin-trial-methods.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<!-- Generate these token with the commands:
-generate_token.py  http://127.0.0.1:8000 ServiceWorkerNavigationPreload -expire-timestamp=2000000000
--->
-<meta http-equiv="origin-trial" content="AsAA4dg2Rm+GSgnpyxxnpVk1Bk8CcE+qVBTDpPbIFNscyNRJOdqw1l0vkC4dtsGm1tmP4ZDAKwycQDzsc9xr7gMAAABmeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiU2VydmljZVdvcmtlck5hdmlnYXRpb25QcmVsb2FkIiwgImV4cGlyeSI6IDIwMDAwMDAwMDB9" />
-<title>Navigation Preload origin trial</title>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/test-helpers.js"></script>
-<script src="./resources/get_interface_names.js"></script>
-<script>
-console.warn('This test relies on console message comparison so there can ' +
-    'be different -expected.txt files for virtual test suites.');
-
-function check_methods(t, script, scope) {
-  var registration;
-  var worker;
-  var message;
-  var log = '';
-  return service_worker_unregister_and_register(t, script, scope)
-    .then(reg => {
-        registration = reg;
-        worker = registration.installing;
-        return wait_for_state(t, worker, 'activated');
-      })
-    .then(_ => registration.navigationPreload.disable())
-    .then(
-      result => { log += 'disable() resolved with: ' + result + '\n';},
-      error => { log += 'disable() rejected with: ' + error + '\n';})
-    .then(_ => registration.navigationPreload.enable())
-    .then(
-      result => { log += 'enable() resolved with: ' + result + '\n';},
-      error => { log += 'enable() rejected with: ' + error + '\n';})
-    .then(_ => registration.navigationPreload.getState())
-    .then(
-      result => {
-        log += 'getState() resolved with: ' + JSON.stringify(result) + '\n';
-      },
-      error => { log += 'getState() rejected with: ' + error + '\n';})
-    .then(_ => registration.navigationPreload.setHeaderValue('hello'))
-    .then(
-      result => { log += 'setHeaderValue() resolved with: ' + result + '\n';},
-      error => { log += 'setHeaderValue() rejected with: ' + error + '\n';})
-    .then(_ => with_iframe(scope))
-    .then(_ => {
-        var saw_message = new Promise(resolve => {
-            navigator.serviceWorker.onmessage =
-                e => { resolve(e.data); };
-          });
-        worker.postMessage("");
-        return saw_message;
-      })
-    .then(message => {
-        log += 'log from SW\n' + message;
-        return registration.unregister();
-      })
-    .then(_ => {
-        return log;
-      });
-}
-
-promise_test(t => {
-    var script = 'resources/navigation-preload-origin-trial-methods-worker.php';
-    var scope =
-        'resources/navigation-preload-origin-trial-methods-scope.php?default';
-    return check_methods(t, script, scope).then(log => {
-      console.log('--normal SW--\n' + log);
-    });
-  }, 'Calling Navigation preload related methods for normal SW.');
-
-promise_test(t => {
-    var script =
-        'resources/navigation-preload-origin-trial-methods-worker.php?' +
-        'origintrial=true';
-    var scope =
-        'resources/navigation-preload-origin-trial-methods-scope.php?enabled';
-    return check_methods(t, script, scope).then(log => {
-      console.log('--Origin-Trial enabled SW--\n' + log);
-    });
-  }, 'Calling Navigation preload related methods for Origin-Trial enabled SW.');
-</script>
diff --git a/third_party/WebKit/LayoutTests/http/tests/serviceworker/chromium/resources/navigation-preload-origin-trial-interfaces-worker.php b/third_party/WebKit/LayoutTests/http/tests/serviceworker/chromium/resources/navigation-preload-origin-trial-interfaces-worker.php
deleted file mode 100644
index 6b8032d..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/serviceworker/chromium/resources/navigation-preload-origin-trial-interfaces-worker.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-if (isset($_GET["origintrial"])) {
-  // generate_token.py  http://127.0.0.1:8000 ServiceWorkerNavigationPreload -expire-timestamp=2000000000
-  header("Origin-Trial: AsAA4dg2Rm+GSgnpyxxnpVk1Bk8CcE+qVBTDpPbIFNscyNRJOdqw1l0vkC4dtsGm1tmP4ZDAKwycQDzsc9xr7gMAAABmeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiU2VydmljZVdvcmtlck5hdmlnYXRpb25QcmVsb2FkIiwgImV4cGlyeSI6IDIwMDAwMDAwMDB9");
-}
-header('Content-Type: application/javascript');
-?>
-importScripts('./get-interface-names.js');
-
-self.addEventListener('message', event => {
-    event.source.postMessage(
-        get_interface_names(
-            this,
-            ['NavigationPreloadManager',
-             'FetchEvent',
-             'ServiceWorkerRegistration']));
-  });
diff --git a/third_party/WebKit/LayoutTests/http/tests/serviceworker/chromium/resources/navigation-preload-origin-trial-methods-scope.php b/third_party/WebKit/LayoutTests/http/tests/serviceworker/chromium/resources/navigation-preload-origin-trial-methods-scope.php
deleted file mode 100644
index 18cc3ad..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/serviceworker/chromium/resources/navigation-preload-origin-trial-methods-scope.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-  if (isset($_SERVER["HTTP_SERVICE_WORKER_NAVIGATION_PRELOAD"])) {
-    echo ("Service-Worker-Navigation-Preload header set: " .
-          $_SERVER["HTTP_SERVICE_WORKER_NAVIGATION_PRELOAD"]);
-  } else {
-    echo ("no Service-Worker-Navigation-Preload header");
-  }
-?>
diff --git a/third_party/WebKit/LayoutTests/http/tests/serviceworker/chromium/resources/navigation-preload-origin-trial-methods-worker.php b/third_party/WebKit/LayoutTests/http/tests/serviceworker/chromium/resources/navigation-preload-origin-trial-methods-worker.php
deleted file mode 100644
index 5224c93..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/serviceworker/chromium/resources/navigation-preload-origin-trial-methods-worker.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-if (isset($_GET["origintrial"])) {
-  // generate_token.py  http://127.0.0.1:8000 ServiceWorkerNavigationPreload -expire-timestamp=2000000000
-  header("Origin-Trial: AsAA4dg2Rm+GSgnpyxxnpVk1Bk8CcE+qVBTDpPbIFNscyNRJOdqw1l0vkC4dtsGm1tmP4ZDAKwycQDzsc9xr7gMAAABmeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiU2VydmljZVdvcmtlck5hdmlnYXRpb25QcmVsb2FkIiwgImV4cGlyeSI6IDIwMDAwMDAwMDB9");
-}
-header('Content-Type: application/javascript');
-?>
-var log = '';
-
-self.addEventListener('activate', event => {
-  log += 'Activate event handler\n';
-  if (!self.registration.navigationPreload) {
-    log += 'registration.navigationPreload not found\n';
-    return;
-  }
-  event.waitUntil(
-    registration.navigationPreload.disable()
-      .then(
-        result => { log += 'disable() resolved with: ' + result + '\n';},
-        error => { log += 'disable() rejected with: ' + error + '\n';})
-      .then(_ => registration.navigationPreload.enable())
-      .then(
-        result => { log += 'enable() resolved with: ' + result + '\n';},
-        error => { log += 'enable() rejected with: ' + error + '\n';})
-      .then(_ => registration.navigationPreload.getState())
-      .then(
-        result => {
-          log += 'getState() resolved with: ' + JSON.stringify(result) + '\n';
-        },
-        error => { log += 'getState() rejected with: ' + error + '\n';})
-      .then(_ => registration.navigationPreload.setHeaderValue('world'))
-      .then(
-        result => { log += 'setHeaderValue() resolved with: ' + result + '\n';},
-        error => { log += 'setHeaderValue() rejected with: ' + error + '\n';}));
-});
-
-self.addEventListener('message', event => {
-  event.source.postMessage(log);
-});
-
-self.addEventListener('fetch', event => {
-  log += 'Fetch event handler\n';
-  if (!event.preloadResponse) {
-    log += 'event.preloadResponse not found\n';
-  } else {
-    event.respondWith(
-      event.preloadResponse
-      .then(
-          res => {
-            log += 'event.preloadResponse resolved with: ' + res + '\n';
-            if (!res) {
-              return new Response('');
-            }
-            return res.text().then(text => {
-              log += 'Text of preloadResponse: [' + text + ']\n';
-              return new Response('');
-            })
-          },
-          err => {
-            log += 'event.preloadResponse rejected with: ' + err + '\n';
-            return new Response('');
-          }));
-  }
-});
diff --git a/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt b/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
index ec4f603..4f0b0e4 100644
--- a/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
@@ -387,6 +387,7 @@
 interface FetchEvent : ExtendableEvent
     getter clientId
     getter isReload
+    getter preloadResponse
     getter request
     method constructor
     method respondWith
@@ -621,6 +622,12 @@
     method postMessage
     method start
     setter onmessage
+interface NavigationPreloadManager
+    method constructor
+    method disable
+    method enable
+    method getState
+    method setHeaderValue
 interface NetworkInformation : EventTarget
     getter downlinkMax
     getter onchange
@@ -860,6 +867,7 @@
     getter active
     getter backgroundFetch
     getter installing
+    getter navigationPreload
     getter onupdatefound
     getter paymentManager
     getter pushManager
diff --git a/third_party/WebKit/LayoutTests/inspector/schema-get-domains-matches-agents-expected.txt b/third_party/WebKit/LayoutTests/inspector/schema-get-domains-matches-agents-expected.txt
index 92714a9..124c9b2 100644
--- a/third_party/WebKit/LayoutTests/inspector/schema-get-domains-matches-agents-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/schema-get-domains-matches-agents-expected.txt
@@ -1,5 +1,6 @@
 Tests that generated agent prototypes match with domains returned by schema.getDomains.
 
+domain Browser is missing from schema.getDomains
 domain SystemInfo is missing from schema.getDomains
 domain Tethering is missing from schema.getDomains
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/stable/webexposed/global-interface-listing-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/stable/webexposed/global-interface-listing-expected.txt
index b0313705..d124355 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/stable/webexposed/global-interface-listing-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -3573,6 +3573,13 @@
     method removeNamedItemNS
     method setNamedItem
     method setNamedItemNS
+interface NavigationPreloadManager
+    attribute @@toStringTag
+    method constructor
+    method disable
+    method enable
+    method getState
+    method setHeaderValue
 interface Navigator
     attribute @@toStringTag
     getter appCodeName
@@ -4002,6 +4009,7 @@
 interface Presentation
     attribute @@toStringTag
     getter defaultRequest
+    getter receiver
     method constructor
     setter defaultRequest
 interface PresentationAvailability : EventTarget
@@ -4038,6 +4046,16 @@
     getter message
     getter reason
     method constructor
+interface PresentationConnectionList : EventTarget
+    attribute @@toStringTag
+    getter connections
+    getter onconnectionavailable
+    method constructor
+    setter onconnectionavailable
+interface PresentationReceiver
+    attribute @@toStringTag
+    getter connectionList
+    method constructor
 interface PresentationRequest : EventTarget
     attribute @@toStringTag
     getter onconnectionavailable
@@ -5478,6 +5496,7 @@
     attribute @@toStringTag
     getter active
     getter installing
+    getter navigationPreload
     getter onupdatefound
     getter pushManager
     getter scope
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/stable/webexposed/global-interface-listing-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/stable/webexposed/global-interface-listing-expected.txt
index 5160b0d..adf97c7 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/stable/webexposed/global-interface-listing-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -3502,6 +3502,13 @@
     method removeNamedItemNS
     method setNamedItem
     method setNamedItemNS
+interface NavigationPreloadManager
+    attribute @@toStringTag
+    method constructor
+    method disable
+    method enable
+    method getState
+    method setHeaderValue
 interface Navigator
     attribute @@toStringTag
     getter appCodeName
@@ -3930,6 +3937,7 @@
 interface Presentation
     attribute @@toStringTag
     getter defaultRequest
+    getter receiver
     method constructor
     setter defaultRequest
 interface PresentationAvailability : EventTarget
@@ -3966,6 +3974,16 @@
     getter message
     getter reason
     method constructor
+interface PresentationConnectionList : EventTarget
+    attribute @@toStringTag
+    getter connections
+    getter onconnectionavailable
+    method constructor
+    setter onconnectionavailable
+interface PresentationReceiver
+    attribute @@toStringTag
+    getter connectionList
+    method constructor
 interface PresentationRequest : EventTarget
     attribute @@toStringTag
     getter onconnectionavailable
@@ -5406,6 +5424,7 @@
     attribute @@toStringTag
     getter active
     getter installing
+    getter navigationPreload
     getter onupdatefound
     getter pushManager
     getter scope
diff --git a/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/http/tests/serviceworker/chromium/navigation-preload-origin-trial-interfaces-expected.txt b/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/http/tests/serviceworker/chromium/navigation-preload-origin-trial-interfaces-expected.txt
deleted file mode 100644
index 0de3b49..0000000
--- a/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/http/tests/serviceworker/chromium/navigation-preload-origin-trial-interfaces-expected.txt
+++ /dev/null
@@ -1,85 +0,0 @@
-CONSOLE WARNING: line 13: This test relies on console message comparison so there can be different -expected.txt files for virtual test suites.
-CONSOLE MESSAGE: line 21: Interfaces in document
-interface NavigationPreloadManager
- method constructor
- method disable
- method enable
- method getState
- method setHeaderValue
-interface ServiceWorkerRegistration
- getter active
- getter backgroundFetch
- getter installing
- getter navigationPreload
- getter onupdatefound
- getter paymentManager
- getter pushManager
- getter scope
- getter sync
- getter waiting
- method constructor
- method getNotifications
- method showNotification
- method unregister
- method update
- setter onupdatefound
-CONSOLE MESSAGE: line 58: Interfaces in normal Service Worker
-interface FetchEvent
- getter clientId
- getter isReload
- getter request
- method constructor
- method respondWith
-interface ServiceWorkerRegistration
- getter active
- getter backgroundFetch
- getter installing
- getter onupdatefound
- getter paymentManager
- getter pushManager
- getter scope
- getter sync
- getter waiting
- method constructor
- method getNotifications
- method showNotification
- method unregister
- method update
- setter onupdatefound
-CONSOLE MESSAGE: line 70: Interfaces in Origin-Trial enabled Service Worker
-interface FetchEvent
- getter clientId
- getter isReload
- getter preloadResponse
- getter request
- method constructor
- method respondWith
-interface NavigationPreloadManager
- method constructor
- method disable
- method enable
- method getState
- method setHeaderValue
-interface ServiceWorkerRegistration
- getter active
- getter backgroundFetch
- getter installing
- getter navigationPreload
- getter onupdatefound
- getter paymentManager
- getter pushManager
- getter scope
- getter sync
- getter waiting
- method constructor
- method getNotifications
- method showNotification
- method unregister
- method update
- setter onupdatefound
-This is a testharness.js-based test.
-PASS Navigation preload related interfaces in Origin-Trial enabled document. 
-PASS Navigation preload related interfaces in normal SW. 
-PASS Navigation preload related interfaces in Origin-Trial enabled SW. 
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/http/tests/serviceworker/chromium/navigation-preload-origin-trial-methods-expected.txt b/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/http/tests/serviceworker/chromium/navigation-preload-origin-trial-methods-expected.txt
deleted file mode 100644
index 1c914984..0000000
--- a/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/http/tests/serviceworker/chromium/navigation-preload-origin-trial-methods-expected.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-CONSOLE WARNING: line 13: This test relies on console message comparison so there can be different -expected.txt files for virtual test suites.
-CONSOLE MESSAGE: line 68: --normal SW--
-disable() rejected with: AbortError: Failed to enable or disable navigation preload: The service worker script does not have a valid Navigation Preload Origin Trial token.
-enable() rejected with: AbortError: Failed to enable or disable navigation preload: The service worker script does not have a valid Navigation Preload Origin Trial token.
-getState() resolved with: {"enabled":false,"headerValue":"true"}
-setHeaderValue() rejected with: AbortError: Failed to set navigation preload header: The service worker script does not have a valid Navigation Preload Origin Trial token.
-log from SW
-Activate event handler
-registration.navigationPreload not found
-Fetch event handler
-event.preloadResponse not found
-
-CONSOLE MESSAGE: line 79: --Origin-Trial enabled SW--
-disable() rejected with: AbortError: Failed to enable or disable navigation preload: Navigation Preload is disabled by command line flag.
-enable() rejected with: AbortError: Failed to enable or disable navigation preload: Navigation Preload is disabled by command line flag.
-getState() resolved with: {"enabled":false,"headerValue":"true"}
-setHeaderValue() rejected with: AbortError: Failed to set navigation preload header: Navigation Preload is disabled by command line flag.
-log from SW
-Activate event handler
-disable() rejected with: AbortError: Failed to enable or disable navigation preload: Navigation Preload is disabled by command line flag.
-enable() rejected with: AbortError: Failed to enable or disable navigation preload: Navigation Preload is disabled by command line flag.
-getState() resolved with: {"enabled":false,"headerValue":"true"}
-setHeaderValue() rejected with: AbortError: Failed to set navigation preload header: Navigation Preload is disabled by command line flag.
-Fetch event handler
-event.preloadResponse resolved with: undefined
-
-This is a testharness.js-based test.
-PASS Calling Navigation preload related methods for normal SW. 
-PASS Calling Navigation preload related methods for Origin-Trial enabled SW. 
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/http/tests/serviceworker/chromium/README.txt b/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/http/tests/serviceworker/webexposed/README.txt
similarity index 100%
rename from third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/http/tests/serviceworker/chromium/README.txt
rename to third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/http/tests/serviceworker/webexposed/README.txt
diff --git a/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt b/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
new file mode 100644
index 0000000..ec4f603
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
@@ -0,0 +1,2309 @@
+interface BackgroundFetchClickEvent : BackgroundFetchEvent
+    getter state
+    method constructor
+interface BackgroundFetchEvent : ExtendableEvent
+    getter tag
+    method constructor
+interface BackgroundFetchFailEvent : BackgroundFetchEvent
+    getter fetches
+    method constructor
+interface BackgroundFetchFetch
+    getter request
+    method constructor
+interface BackgroundFetchManager
+    method constructor
+    method fetch
+    method get
+    method getTags
+interface BackgroundFetchRegistration
+    getter icons
+    getter tag
+    getter title
+    getter totalDownloadSize
+    method abort
+    method constructor
+interface BackgroundFetchSettledFetch : BackgroundFetchFetch
+    getter response
+    method constructor
+interface BackgroundFetchedEvent : BackgroundFetchEvent
+    getter fetches
+    method constructor
+    method updateUI
+interface BarcodeDetector
+    method constructor
+    method detect
+interface Blob
+    getter isClosed
+    getter size
+    getter type
+    method close
+    method constructor
+    method slice
+interface BroadcastChannel : EventTarget
+    getter name
+    getter onmessage
+    method close
+    method constructor
+    method postMessage
+    setter onmessage
+interface BudgetService
+    method constructor
+    method getBudget
+    method getCost
+    method reserve
+interface BudgetState
+    getter budgetAt
+    getter time
+    method constructor
+interface ByteLengthQueuingStrategy
+    method constructor
+    method size
+interface Cache
+    method add
+    method addAll
+    method constructor
+    method delete
+    method keys
+    method match
+    method matchAll
+    method put
+interface CacheStorage
+    method constructor
+    method delete
+    method has
+    method keys
+    method match
+    method open
+interface CanvasGradient
+    method addColorStop
+    method constructor
+interface CanvasPattern
+    method constructor
+interface Client
+    getter frameType
+    getter id
+    getter url
+    method constructor
+    method postMessage
+interface Clients
+    method claim
+    method constructor
+    method get
+    method matchAll
+    method openWindow
+interface CloseEvent : Event
+    getter code
+    getter reason
+    getter wasClean
+    method constructor
+interface CountQueuingStrategy
+    method constructor
+    method size
+interface Crypto
+    getter subtle
+    method constructor
+    method getRandomValues
+interface CryptoKey
+    getter algorithm
+    getter extractable
+    getter type
+    getter usages
+    method constructor
+interface CustomEvent : Event
+    getter detail
+    method constructor
+    method initCustomEvent
+interface DOMException
+    attribute ABORT_ERR
+    attribute DATA_CLONE_ERR
+    attribute DOMSTRING_SIZE_ERR
+    attribute HIERARCHY_REQUEST_ERR
+    attribute INDEX_SIZE_ERR
+    attribute INUSE_ATTRIBUTE_ERR
+    attribute INVALID_ACCESS_ERR
+    attribute INVALID_CHARACTER_ERR
+    attribute INVALID_MODIFICATION_ERR
+    attribute INVALID_NODE_TYPE_ERR
+    attribute INVALID_STATE_ERR
+    attribute NAMESPACE_ERR
+    attribute NETWORK_ERR
+    attribute NOT_FOUND_ERR
+    attribute NOT_SUPPORTED_ERR
+    attribute NO_DATA_ALLOWED_ERR
+    attribute NO_MODIFICATION_ALLOWED_ERR
+    attribute QUOTA_EXCEEDED_ERR
+    attribute SECURITY_ERR
+    attribute SYNTAX_ERR
+    attribute TIMEOUT_ERR
+    attribute TYPE_MISMATCH_ERR
+    attribute URL_MISMATCH_ERR
+    attribute VALIDATION_ERR
+    attribute WRONG_DOCUMENT_ERR
+    getter code
+    getter message
+    getter name
+    method constructor
+    method toString
+interface DOMMatrix : DOMMatrixReadOnly
+    getter a
+    getter b
+    getter c
+    getter d
+    getter e
+    getter f
+    getter m11
+    getter m12
+    getter m13
+    getter m14
+    getter m21
+    getter m22
+    getter m23
+    getter m24
+    getter m31
+    getter m32
+    getter m33
+    getter m34
+    getter m41
+    getter m42
+    getter m43
+    getter m44
+    method constructor
+    method invertSelf
+    method multiplySelf
+    method preMultiplySelf
+    method rotateAxisAngleSelf
+    method rotateFromVectorSelf
+    method rotateSelf
+    method scale3dSelf
+    method scaleSelf
+    method setMatrixValue
+    method skewXSelf
+    method skewYSelf
+    method translateSelf
+    setter a
+    setter b
+    setter c
+    setter d
+    setter e
+    setter f
+    setter m11
+    setter m12
+    setter m13
+    setter m14
+    setter m21
+    setter m22
+    setter m23
+    setter m24
+    setter m31
+    setter m32
+    setter m33
+    setter m34
+    setter m41
+    setter m42
+    setter m43
+    setter m44
+interface DOMMatrixReadOnly
+    static method fromFloat32Array
+    static method fromFloat64Array
+    static method fromMatrix
+    getter a
+    getter b
+    getter c
+    getter d
+    getter e
+    getter f
+    getter is2D
+    getter isIdentity
+    getter m11
+    getter m12
+    getter m13
+    getter m14
+    getter m21
+    getter m22
+    getter m23
+    getter m24
+    getter m31
+    getter m32
+    getter m33
+    getter m34
+    getter m41
+    getter m42
+    getter m43
+    getter m44
+    method constructor
+    method flipX
+    method flipY
+    method inverse
+    method multiply
+    method rotate
+    method rotateAxisAngle
+    method rotateFromVector
+    method scale
+    method scale3d
+    method skewX
+    method skewY
+    method toFloat32Array
+    method toFloat64Array
+    method toJSON
+    method toString
+    method transformPoint
+    method translate
+interface DOMPoint : DOMPointReadOnly
+    getter w
+    getter x
+    getter y
+    getter z
+    method constructor
+    setter w
+    setter x
+    setter y
+    setter z
+interface DOMPointReadOnly
+    static method fromPoint
+    getter w
+    getter x
+    getter y
+    getter z
+    method constructor
+    method matrixTransform
+    method toJSON
+interface DOMQuad
+    static method fromQuad
+    static method fromRect
+    getter p1
+    getter p2
+    getter p3
+    getter p4
+    method constructor
+    method getBounds
+    method toJSON
+interface DOMRect : DOMRectReadOnly
+    getter height
+    getter width
+    getter x
+    getter y
+    method constructor
+    setter height
+    setter width
+    setter x
+    setter y
+interface DOMRectReadOnly
+    static method fromRect
+    getter bottom
+    getter height
+    getter left
+    getter right
+    getter top
+    getter width
+    getter x
+    getter y
+    method constructor
+    method toJSON
+interface DOMStringList
+    getter length
+    method constructor
+    method contains
+    method item
+interface DataView
+    getter buffer
+    getter byteLength
+    getter byteOffset
+    method constructor
+    method getFloat32
+    method getFloat64
+    method getInt16
+    method getInt32
+    method getInt8
+    method getUint16
+    method getUint32
+    method getUint8
+    method setFloat32
+    method setFloat64
+    method setInt16
+    method setInt32
+    method setInt8
+    method setUint16
+    method setUint32
+    method setUint8
+interface Event
+    attribute AT_TARGET
+    attribute BUBBLING_PHASE
+    attribute CAPTURING_PHASE
+    attribute NONE
+    getter bubbles
+    getter cancelBubble
+    getter cancelable
+    getter composed
+    getter currentTarget
+    getter defaultPrevented
+    getter eventPhase
+    getter path
+    getter returnValue
+    getter srcElement
+    getter target
+    getter timeStamp
+    getter type
+    method composedPath
+    method constructor
+    method initEvent
+    method preventDefault
+    method stopImmediatePropagation
+    method stopPropagation
+    setter cancelBubble
+    setter returnValue
+interface EventSource : EventTarget
+    attribute CLOSED
+    attribute CONNECTING
+    attribute OPEN
+    getter onerror
+    getter onmessage
+    getter onopen
+    getter readyState
+    getter url
+    getter withCredentials
+    method close
+    method constructor
+    setter onerror
+    setter onmessage
+    setter onopen
+interface EventTarget
+    method addEventListener
+    method constructor
+    method dispatchEvent
+    method removeEventListener
+interface ExtendableEvent : Event
+    method constructor
+    method waitUntil
+interface ExtendableMessageEvent : ExtendableEvent
+    getter data
+    getter lastEventId
+    getter origin
+    getter ports
+    getter source
+    method constructor
+interface FaceDetector
+    method constructor
+    method detect
+interface FetchEvent : ExtendableEvent
+    getter clientId
+    getter isReload
+    getter request
+    method constructor
+    method respondWith
+interface File : Blob
+    getter lastModified
+    getter lastModifiedDate
+    getter name
+    getter webkitRelativePath
+    method constructor
+interface FileList
+    getter length
+    method constructor
+    method item
+interface FileReader : EventTarget
+    attribute DONE
+    attribute EMPTY
+    attribute LOADING
+    getter error
+    getter onabort
+    getter onerror
+    getter onload
+    getter onloadend
+    getter onloadstart
+    getter onprogress
+    getter readyState
+    getter result
+    method abort
+    method constructor
+    method readAsArrayBuffer
+    method readAsBinaryString
+    method readAsDataURL
+    method readAsText
+    setter onabort
+    setter onerror
+    setter onload
+    setter onloadend
+    setter onloadstart
+    setter onprogress
+interface ForeignFetchEvent : ExtendableEvent
+    getter origin
+    getter request
+    method constructor
+    method respondWith
+interface FormData
+    method append
+    method constructor
+    method delete
+    method entries
+    method forEach
+    method get
+    method getAll
+    method has
+    method keys
+    method set
+    method values
+interface Headers
+    method append
+    method constructor
+    method delete
+    method entries
+    method forEach
+    method get
+    method getAll
+    method has
+    method keys
+    method set
+    method values
+interface IDBCursor
+    getter direction
+    getter key
+    getter primaryKey
+    getter source
+    method advance
+    method constructor
+    method continue
+    method continuePrimaryKey
+    method delete
+    method update
+interface IDBCursorWithValue : IDBCursor
+    getter value
+    method constructor
+interface IDBDatabase : EventTarget
+    getter name
+    getter objectStoreNames
+    getter onabort
+    getter onclose
+    getter onerror
+    getter onversionchange
+    getter version
+    method close
+    method constructor
+    method createObjectStore
+    method deleteObjectStore
+    method transaction
+    setter onabort
+    setter onclose
+    setter onerror
+    setter onversionchange
+interface IDBFactory
+    method cmp
+    method constructor
+    method deleteDatabase
+    method open
+    method webkitGetDatabaseNames
+interface IDBIndex
+    getter keyPath
+    getter multiEntry
+    getter name
+    getter objectStore
+    getter unique
+    method constructor
+    method count
+    method get
+    method getAll
+    method getAllKeys
+    method getKey
+    method openCursor
+    method openKeyCursor
+    setter name
+interface IDBKeyRange
+    static method bound
+    static method lowerBound
+    static method only
+    static method upperBound
+    getter lower
+    getter lowerOpen
+    getter upper
+    getter upperOpen
+    method constructor
+    method includes
+interface IDBObjectStore
+    getter autoIncrement
+    getter indexNames
+    getter keyPath
+    getter name
+    getter transaction
+    method add
+    method clear
+    method constructor
+    method count
+    method createIndex
+    method delete
+    method deleteIndex
+    method get
+    method getAll
+    method getAllKeys
+    method getKey
+    method index
+    method openCursor
+    method openKeyCursor
+    method put
+    setter name
+interface IDBObservation
+    getter key
+    getter type
+    getter value
+    method constructor
+interface IDBObserver
+    method constructor
+    method observe
+    method unobserve
+interface IDBOpenDBRequest : IDBRequest
+    getter onblocked
+    getter onupgradeneeded
+    method constructor
+    setter onblocked
+    setter onupgradeneeded
+interface IDBRequest : EventTarget
+    getter error
+    getter onerror
+    getter onsuccess
+    getter readyState
+    getter result
+    getter source
+    getter transaction
+    method constructor
+    setter onerror
+    setter onsuccess
+interface IDBTransaction : EventTarget
+    getter db
+    getter error
+    getter mode
+    getter objectStoreNames
+    getter onabort
+    getter oncomplete
+    getter onerror
+    method abort
+    method constructor
+    method objectStore
+    setter onabort
+    setter oncomplete
+    setter onerror
+interface IDBVersionChangeEvent : Event
+    getter dataLoss
+    getter dataLossMessage
+    getter newVersion
+    getter oldVersion
+    method constructor
+interface ImageBitmap
+    getter height
+    getter width
+    method close
+    method constructor
+interface ImageData
+    getter data
+    getter dataUnion
+    getter height
+    getter width
+    method constructor
+    method createImageData
+    method getColorSettings
+interface InstallEvent : ExtendableEvent
+    method constructor
+    method registerForeignFetch
+interface MessageChannel
+    getter port1
+    getter port2
+    method constructor
+interface MessageEvent : Event
+    getter data
+    getter lastEventId
+    getter origin
+    getter ports
+    getter source
+    getter suborigin
+    method constructor
+    method initMessageEvent
+interface MessagePort : EventTarget
+    getter onmessage
+    method close
+    method constructor
+    method postMessage
+    method start
+    setter onmessage
+interface NetworkInformation : EventTarget
+    getter downlinkMax
+    getter onchange
+    getter ontypechange
+    getter type
+    method constructor
+    setter onchange
+    setter ontypechange
+interface Notification : EventTarget
+    static getter maxActions
+    static getter permission
+    getter actions
+    getter badge
+    getter body
+    getter data
+    getter dir
+    getter icon
+    getter image
+    getter lang
+    getter onclick
+    getter onclose
+    getter onerror
+    getter onshow
+    getter renotify
+    getter requireInteraction
+    getter silent
+    getter tag
+    getter timestamp
+    getter title
+    getter vibrate
+    method close
+    method constructor
+    setter onclick
+    setter onclose
+    setter onerror
+    setter onshow
+interface NotificationEvent : ExtendableEvent
+    getter action
+    getter notification
+    getter reply
+    method constructor
+interface OffscreenCanvas : EventTarget
+    getter height
+    getter width
+    method constructor
+    method convertToBlob
+    method getContext
+    method transferToImageBitmap
+    setter height
+    setter width
+interface OffscreenCanvasRenderingContext2D
+    getter canvas
+    getter fillStyle
+    getter filter
+    getter globalAlpha
+    getter globalCompositeOperation
+    getter imageSmoothingEnabled
+    getter imageSmoothingQuality
+    getter lineCap
+    getter lineDashOffset
+    getter lineJoin
+    getter lineWidth
+    getter miterLimit
+    getter shadowBlur
+    getter shadowColor
+    getter shadowOffsetX
+    getter shadowOffsetY
+    getter strokeStyle
+    method arc
+    method arcTo
+    method beginPath
+    method bezierCurveTo
+    method clearRect
+    method clip
+    method closePath
+    method commit
+    method constructor
+    method createImageData
+    method createLinearGradient
+    method createPattern
+    method createRadialGradient
+    method drawImage
+    method ellipse
+    method fill
+    method fillRect
+    method getImageData
+    method getLineDash
+    method isPointInPath
+    method isPointInStroke
+    method lineTo
+    method moveTo
+    method putImageData
+    method quadraticCurveTo
+    method rect
+    method resetTransform
+    method restore
+    method rotate
+    method save
+    method scale
+    method setLineDash
+    method setTransform
+    method stroke
+    method strokeRect
+    method transform
+    method translate
+    setter fillStyle
+    setter filter
+    setter globalAlpha
+    setter globalCompositeOperation
+    setter imageSmoothingEnabled
+    setter imageSmoothingQuality
+    setter lineCap
+    setter lineDashOffset
+    setter lineJoin
+    setter lineWidth
+    setter miterLimit
+    setter shadowBlur
+    setter shadowColor
+    setter shadowOffsetX
+    setter shadowOffsetY
+    setter strokeStyle
+interface Path2D
+    method addPath
+    method arc
+    method arcTo
+    method bezierCurveTo
+    method closePath
+    method constructor
+    method ellipse
+    method lineTo
+    method moveTo
+    method quadraticCurveTo
+    method rect
+interface PaymentInstruments
+    method constructor
+    method delete
+    method get
+    method has
+    method keys
+    method set
+interface PaymentRequestEvent : ExtendableEvent
+    getter appRequest
+    method constructor
+    method respondWith
+interface PerformanceObserverEntryList
+    method constructor
+    method getEntries
+    method getEntriesByName
+    method getEntriesByType
+interface PermissionStatus : EventTarget
+    getter onchange
+    getter state
+    method constructor
+    setter onchange
+interface Permissions
+    method constructor
+    method query
+    method request
+    method requestAll
+    method revoke
+interface PromiseRejectionEvent : Event
+    getter promise
+    getter reason
+    method constructor
+interface PushEvent : ExtendableEvent
+    getter data
+    method constructor
+interface PushManager
+    method constructor
+    method getSubscription
+    method permissionState
+    method subscribe
+interface PushMessageData
+    method arrayBuffer
+    method blob
+    method constructor
+    method json
+    method text
+interface PushSubscription
+    getter endpoint
+    getter options
+    method constructor
+    method getKey
+    method toJSON
+    method unsubscribe
+interface PushSubscriptionOptions
+    getter applicationServerKey
+    getter userVisibleOnly
+    method constructor
+interface ReadableStream
+    getter locked
+    method cancel
+    method constructor
+    method getReader
+    method pipeThrough
+    method pipeTo
+    method tee
+interface Request
+    getter bodyUsed
+    getter cache
+    getter credentials
+    getter headers
+    getter integrity
+    getter method
+    getter mode
+    getter redirect
+    getter referrer
+    getter referrerPolicy
+    getter url
+    method arrayBuffer
+    method blob
+    method clone
+    method constructor
+    method json
+    method text
+interface Response
+    static method error
+    static method redirect
+    getter body
+    getter bodyUsed
+    getter headers
+    getter ok
+    getter redirected
+    getter status
+    getter statusText
+    getter type
+    getter url
+    method arrayBuffer
+    method blob
+    method clone
+    method constructor
+    method json
+    method text
+interface ServiceWorkerGlobalScope : WorkerGlobalScope
+    method constructor
+interface ServiceWorkerRegistration : EventTarget
+    getter active
+    getter backgroundFetch
+    getter installing
+    getter onupdatefound
+    getter paymentManager
+    getter pushManager
+    getter scope
+    getter sync
+    getter waiting
+    method constructor
+    method getNotifications
+    method showNotification
+    method unregister
+    method update
+    setter onupdatefound
+interface StorageManager
+    method constructor
+    method estimate
+    method persisted
+interface SubtleCrypto
+    method constructor
+    method decrypt
+    method deriveBits
+    method deriveKey
+    method digest
+    method encrypt
+    method exportKey
+    method generateKey
+    method importKey
+    method sign
+    method unwrapKey
+    method verify
+    method wrapKey
+interface SyncEvent : ExtendableEvent
+    getter lastChance
+    getter tag
+    method constructor
+interface SyncManager
+    method constructor
+    method getTags
+    method register
+interface TextDecoder
+    getter encoding
+    getter fatal
+    getter ignoreBOM
+    method constructor
+    method decode
+interface TextDetector
+    method constructor
+    method detect
+interface TextEncoder
+    getter encoding
+    method constructor
+    method encode
+interface URL
+    getter hash
+    getter host
+    getter hostname
+    getter href
+    getter origin
+    getter password
+    getter pathname
+    getter port
+    getter protocol
+    getter search
+    getter searchParams
+    getter username
+    method constructor
+    method toString
+    setter hash
+    setter host
+    setter hostname
+    setter href
+    setter password
+    setter pathname
+    setter port
+    setter protocol
+    setter search
+    setter username
+interface URLSearchParams
+    method append
+    method constructor
+    method delete
+    method entries
+    method forEach
+    method get
+    method getAll
+    method has
+    method keys
+    method set
+    method toString
+    method values
+interface WebGL2RenderingContext
+    attribute ACTIVE_ATTRIBUTES
+    attribute ACTIVE_TEXTURE
+    attribute ACTIVE_UNIFORMS
+    attribute ACTIVE_UNIFORM_BLOCKS
+    attribute ALIASED_LINE_WIDTH_RANGE
+    attribute ALIASED_POINT_SIZE_RANGE
+    attribute ALPHA
+    attribute ALPHA_BITS
+    attribute ALREADY_SIGNALED
+    attribute ALWAYS
+    attribute ANY_SAMPLES_PASSED
+    attribute ANY_SAMPLES_PASSED_CONSERVATIVE
+    attribute ARRAY_BUFFER
+    attribute ARRAY_BUFFER_BINDING
+    attribute ATTACHED_SHADERS
+    attribute BACK
+    attribute BLEND
+    attribute BLEND_COLOR
+    attribute BLEND_DST_ALPHA
+    attribute BLEND_DST_RGB
+    attribute BLEND_EQUATION
+    attribute BLEND_EQUATION_ALPHA
+    attribute BLEND_EQUATION_RGB
+    attribute BLEND_SRC_ALPHA
+    attribute BLEND_SRC_RGB
+    attribute BLUE_BITS
+    attribute BOOL
+    attribute BOOL_VEC2
+    attribute BOOL_VEC3
+    attribute BOOL_VEC4
+    attribute BROWSER_DEFAULT_WEBGL
+    attribute BUFFER_SIZE
+    attribute BUFFER_USAGE
+    attribute BYTE
+    attribute CCW
+    attribute CLAMP_TO_EDGE
+    attribute COLOR
+    attribute COLOR_ATTACHMENT0
+    attribute COLOR_ATTACHMENT1
+    attribute COLOR_ATTACHMENT10
+    attribute COLOR_ATTACHMENT11
+    attribute COLOR_ATTACHMENT12
+    attribute COLOR_ATTACHMENT13
+    attribute COLOR_ATTACHMENT14
+    attribute COLOR_ATTACHMENT15
+    attribute COLOR_ATTACHMENT2
+    attribute COLOR_ATTACHMENT3
+    attribute COLOR_ATTACHMENT4
+    attribute COLOR_ATTACHMENT5
+    attribute COLOR_ATTACHMENT6
+    attribute COLOR_ATTACHMENT7
+    attribute COLOR_ATTACHMENT8
+    attribute COLOR_ATTACHMENT9
+    attribute COLOR_BUFFER_BIT
+    attribute COLOR_CLEAR_VALUE
+    attribute COLOR_WRITEMASK
+    attribute COMPARE_REF_TO_TEXTURE
+    attribute COMPILE_STATUS
+    attribute COMPRESSED_TEXTURE_FORMATS
+    attribute CONDITION_SATISFIED
+    attribute CONSTANT_ALPHA
+    attribute CONSTANT_COLOR
+    attribute CONTEXT_LOST_WEBGL
+    attribute COPY_READ_BUFFER
+    attribute COPY_READ_BUFFER_BINDING
+    attribute COPY_WRITE_BUFFER
+    attribute COPY_WRITE_BUFFER_BINDING
+    attribute CULL_FACE
+    attribute CULL_FACE_MODE
+    attribute CURRENT_PROGRAM
+    attribute CURRENT_QUERY
+    attribute CURRENT_VERTEX_ATTRIB
+    attribute CW
+    attribute DECR
+    attribute DECR_WRAP
+    attribute DELETE_STATUS
+    attribute DEPTH
+    attribute DEPTH24_STENCIL8
+    attribute DEPTH32F_STENCIL8
+    attribute DEPTH_ATTACHMENT
+    attribute DEPTH_BITS
+    attribute DEPTH_BUFFER_BIT
+    attribute DEPTH_CLEAR_VALUE
+    attribute DEPTH_COMPONENT
+    attribute DEPTH_COMPONENT16
+    attribute DEPTH_COMPONENT24
+    attribute DEPTH_COMPONENT32F
+    attribute DEPTH_FUNC
+    attribute DEPTH_RANGE
+    attribute DEPTH_STENCIL
+    attribute DEPTH_STENCIL_ATTACHMENT
+    attribute DEPTH_TEST
+    attribute DEPTH_WRITEMASK
+    attribute DITHER
+    attribute DONT_CARE
+    attribute DRAW_BUFFER0
+    attribute DRAW_BUFFER1
+    attribute DRAW_BUFFER10
+    attribute DRAW_BUFFER11
+    attribute DRAW_BUFFER12
+    attribute DRAW_BUFFER13
+    attribute DRAW_BUFFER14
+    attribute DRAW_BUFFER15
+    attribute DRAW_BUFFER2
+    attribute DRAW_BUFFER3
+    attribute DRAW_BUFFER4
+    attribute DRAW_BUFFER5
+    attribute DRAW_BUFFER6
+    attribute DRAW_BUFFER7
+    attribute DRAW_BUFFER8
+    attribute DRAW_BUFFER9
+    attribute DRAW_FRAMEBUFFER
+    attribute DRAW_FRAMEBUFFER_BINDING
+    attribute DST_ALPHA
+    attribute DST_COLOR
+    attribute DYNAMIC_COPY
+    attribute DYNAMIC_DRAW
+    attribute DYNAMIC_READ
+    attribute ELEMENT_ARRAY_BUFFER
+    attribute ELEMENT_ARRAY_BUFFER_BINDING
+    attribute EQUAL
+    attribute FASTEST
+    attribute FLOAT
+    attribute FLOAT_32_UNSIGNED_INT_24_8_REV
+    attribute FLOAT_MAT2
+    attribute FLOAT_MAT2x3
+    attribute FLOAT_MAT2x4
+    attribute FLOAT_MAT3
+    attribute FLOAT_MAT3x2
+    attribute FLOAT_MAT3x4
+    attribute FLOAT_MAT4
+    attribute FLOAT_MAT4x2
+    attribute FLOAT_MAT4x3
+    attribute FLOAT_VEC2
+    attribute FLOAT_VEC3
+    attribute FLOAT_VEC4
+    attribute FRAGMENT_SHADER
+    attribute FRAGMENT_SHADER_DERIVATIVE_HINT
+    attribute FRAMEBUFFER
+    attribute FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE
+    attribute FRAMEBUFFER_ATTACHMENT_BLUE_SIZE
+    attribute FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING
+    attribute FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE
+    attribute FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE
+    attribute FRAMEBUFFER_ATTACHMENT_GREEN_SIZE
+    attribute FRAMEBUFFER_ATTACHMENT_OBJECT_NAME
+    attribute FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE
+    attribute FRAMEBUFFER_ATTACHMENT_RED_SIZE
+    attribute FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE
+    attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE
+    attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER
+    attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL
+    attribute FRAMEBUFFER_BINDING
+    attribute FRAMEBUFFER_COMPLETE
+    attribute FRAMEBUFFER_DEFAULT
+    attribute FRAMEBUFFER_INCOMPLETE_ATTACHMENT
+    attribute FRAMEBUFFER_INCOMPLETE_DIMENSIONS
+    attribute FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
+    attribute FRAMEBUFFER_INCOMPLETE_MULTISAMPLE
+    attribute FRAMEBUFFER_UNSUPPORTED
+    attribute FRONT
+    attribute FRONT_AND_BACK
+    attribute FRONT_FACE
+    attribute FUNC_ADD
+    attribute FUNC_REVERSE_SUBTRACT
+    attribute FUNC_SUBTRACT
+    attribute GENERATE_MIPMAP_HINT
+    attribute GEQUAL
+    attribute GREATER
+    attribute GREEN_BITS
+    attribute HALF_FLOAT
+    attribute HIGH_FLOAT
+    attribute HIGH_INT
+    attribute IMPLEMENTATION_COLOR_READ_FORMAT
+    attribute IMPLEMENTATION_COLOR_READ_TYPE
+    attribute INCR
+    attribute INCR_WRAP
+    attribute INT
+    attribute INTERLEAVED_ATTRIBS
+    attribute INT_2_10_10_10_REV
+    attribute INT_SAMPLER_2D
+    attribute INT_SAMPLER_2D_ARRAY
+    attribute INT_SAMPLER_3D
+    attribute INT_SAMPLER_CUBE
+    attribute INT_VEC2
+    attribute INT_VEC3
+    attribute INT_VEC4
+    attribute INVALID_ENUM
+    attribute INVALID_FRAMEBUFFER_OPERATION
+    attribute INVALID_INDEX
+    attribute INVALID_OPERATION
+    attribute INVALID_VALUE
+    attribute INVERT
+    attribute KEEP
+    attribute LEQUAL
+    attribute LESS
+    attribute LINEAR
+    attribute LINEAR_MIPMAP_LINEAR
+    attribute LINEAR_MIPMAP_NEAREST
+    attribute LINES
+    attribute LINE_LOOP
+    attribute LINE_STRIP
+    attribute LINE_WIDTH
+    attribute LINK_STATUS
+    attribute LOW_FLOAT
+    attribute LOW_INT
+    attribute LUMINANCE
+    attribute LUMINANCE_ALPHA
+    attribute MAX
+    attribute MAX_3D_TEXTURE_SIZE
+    attribute MAX_ARRAY_TEXTURE_LAYERS
+    attribute MAX_CLIENT_WAIT_TIMEOUT_WEBGL
+    attribute MAX_COLOR_ATTACHMENTS
+    attribute MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS
+    attribute MAX_COMBINED_TEXTURE_IMAGE_UNITS
+    attribute MAX_COMBINED_UNIFORM_BLOCKS
+    attribute MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS
+    attribute MAX_CUBE_MAP_TEXTURE_SIZE
+    attribute MAX_DRAW_BUFFERS
+    attribute MAX_ELEMENTS_INDICES
+    attribute MAX_ELEMENTS_VERTICES
+    attribute MAX_ELEMENT_INDEX
+    attribute MAX_FRAGMENT_INPUT_COMPONENTS
+    attribute MAX_FRAGMENT_UNIFORM_BLOCKS
+    attribute MAX_FRAGMENT_UNIFORM_COMPONENTS
+    attribute MAX_FRAGMENT_UNIFORM_VECTORS
+    attribute MAX_PROGRAM_TEXEL_OFFSET
+    attribute MAX_RENDERBUFFER_SIZE
+    attribute MAX_SAMPLES
+    attribute MAX_SERVER_WAIT_TIMEOUT
+    attribute MAX_TEXTURE_IMAGE_UNITS
+    attribute MAX_TEXTURE_LOD_BIAS
+    attribute MAX_TEXTURE_SIZE
+    attribute MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+    attribute MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+    attribute MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+    attribute MAX_UNIFORM_BLOCK_SIZE
+    attribute MAX_UNIFORM_BUFFER_BINDINGS
+    attribute MAX_VARYING_COMPONENTS
+    attribute MAX_VARYING_VECTORS
+    attribute MAX_VERTEX_ATTRIBS
+    attribute MAX_VERTEX_OUTPUT_COMPONENTS
+    attribute MAX_VERTEX_TEXTURE_IMAGE_UNITS
+    attribute MAX_VERTEX_UNIFORM_BLOCKS
+    attribute MAX_VERTEX_UNIFORM_COMPONENTS
+    attribute MAX_VERTEX_UNIFORM_VECTORS
+    attribute MAX_VIEWPORT_DIMS
+    attribute MEDIUM_FLOAT
+    attribute MEDIUM_INT
+    attribute MIN
+    attribute MIN_PROGRAM_TEXEL_OFFSET
+    attribute MIRRORED_REPEAT
+    attribute NEAREST
+    attribute NEAREST_MIPMAP_LINEAR
+    attribute NEAREST_MIPMAP_NEAREST
+    attribute NEVER
+    attribute NICEST
+    attribute NONE
+    attribute NOTEQUAL
+    attribute NO_ERROR
+    attribute OBJECT_TYPE
+    attribute ONE
+    attribute ONE_MINUS_CONSTANT_ALPHA
+    attribute ONE_MINUS_CONSTANT_COLOR
+    attribute ONE_MINUS_DST_ALPHA
+    attribute ONE_MINUS_DST_COLOR
+    attribute ONE_MINUS_SRC_ALPHA
+    attribute ONE_MINUS_SRC_COLOR
+    attribute OUT_OF_MEMORY
+    attribute PACK_ALIGNMENT
+    attribute PACK_ROW_LENGTH
+    attribute PACK_SKIP_PIXELS
+    attribute PACK_SKIP_ROWS
+    attribute PIXEL_PACK_BUFFER
+    attribute PIXEL_PACK_BUFFER_BINDING
+    attribute PIXEL_UNPACK_BUFFER
+    attribute PIXEL_UNPACK_BUFFER_BINDING
+    attribute POINTS
+    attribute POLYGON_OFFSET_FACTOR
+    attribute POLYGON_OFFSET_FILL
+    attribute POLYGON_OFFSET_UNITS
+    attribute QUERY_RESULT
+    attribute QUERY_RESULT_AVAILABLE
+    attribute R11F_G11F_B10F
+    attribute R16F
+    attribute R16I
+    attribute R16UI
+    attribute R32F
+    attribute R32I
+    attribute R32UI
+    attribute R8
+    attribute R8I
+    attribute R8UI
+    attribute R8_SNORM
+    attribute RASTERIZER_DISCARD
+    attribute READ_BUFFER
+    attribute READ_FRAMEBUFFER
+    attribute READ_FRAMEBUFFER_BINDING
+    attribute RED
+    attribute RED_BITS
+    attribute RED_INTEGER
+    attribute RENDERBUFFER
+    attribute RENDERBUFFER_ALPHA_SIZE
+    attribute RENDERBUFFER_BINDING
+    attribute RENDERBUFFER_BLUE_SIZE
+    attribute RENDERBUFFER_DEPTH_SIZE
+    attribute RENDERBUFFER_GREEN_SIZE
+    attribute RENDERBUFFER_HEIGHT
+    attribute RENDERBUFFER_INTERNAL_FORMAT
+    attribute RENDERBUFFER_RED_SIZE
+    attribute RENDERBUFFER_SAMPLES
+    attribute RENDERBUFFER_STENCIL_SIZE
+    attribute RENDERBUFFER_WIDTH
+    attribute RENDERER
+    attribute REPEAT
+    attribute REPLACE
+    attribute RG
+    attribute RG16F
+    attribute RG16I
+    attribute RG16UI
+    attribute RG32F
+    attribute RG32I
+    attribute RG32UI
+    attribute RG8
+    attribute RG8I
+    attribute RG8UI
+    attribute RG8_SNORM
+    attribute RGB
+    attribute RGB10_A2
+    attribute RGB10_A2UI
+    attribute RGB16F
+    attribute RGB16I
+    attribute RGB16UI
+    attribute RGB32F
+    attribute RGB32I
+    attribute RGB32UI
+    attribute RGB565
+    attribute RGB5_A1
+    attribute RGB8
+    attribute RGB8I
+    attribute RGB8UI
+    attribute RGB8_SNORM
+    attribute RGB9_E5
+    attribute RGBA
+    attribute RGBA16F
+    attribute RGBA16I
+    attribute RGBA16UI
+    attribute RGBA32F
+    attribute RGBA32I
+    attribute RGBA32UI
+    attribute RGBA4
+    attribute RGBA8
+    attribute RGBA8I
+    attribute RGBA8UI
+    attribute RGBA8_SNORM
+    attribute RGBA_INTEGER
+    attribute RGB_INTEGER
+    attribute RG_INTEGER
+    attribute SAMPLER_2D
+    attribute SAMPLER_2D_ARRAY
+    attribute SAMPLER_2D_ARRAY_SHADOW
+    attribute SAMPLER_2D_SHADOW
+    attribute SAMPLER_3D
+    attribute SAMPLER_BINDING
+    attribute SAMPLER_CUBE
+    attribute SAMPLER_CUBE_SHADOW
+    attribute SAMPLES
+    attribute SAMPLE_ALPHA_TO_COVERAGE
+    attribute SAMPLE_BUFFERS
+    attribute SAMPLE_COVERAGE
+    attribute SAMPLE_COVERAGE_INVERT
+    attribute SAMPLE_COVERAGE_VALUE
+    attribute SCISSOR_BOX
+    attribute SCISSOR_TEST
+    attribute SEPARATE_ATTRIBS
+    attribute SHADER_TYPE
+    attribute SHADING_LANGUAGE_VERSION
+    attribute SHORT
+    attribute SIGNALED
+    attribute SIGNED_NORMALIZED
+    attribute SRC_ALPHA
+    attribute SRC_ALPHA_SATURATE
+    attribute SRC_COLOR
+    attribute SRGB
+    attribute SRGB8
+    attribute SRGB8_ALPHA8
+    attribute STATIC_COPY
+    attribute STATIC_DRAW
+    attribute STATIC_READ
+    attribute STENCIL
+    attribute STENCIL_ATTACHMENT
+    attribute STENCIL_BACK_FAIL
+    attribute STENCIL_BACK_FUNC
+    attribute STENCIL_BACK_PASS_DEPTH_FAIL
+    attribute STENCIL_BACK_PASS_DEPTH_PASS
+    attribute STENCIL_BACK_REF
+    attribute STENCIL_BACK_VALUE_MASK
+    attribute STENCIL_BACK_WRITEMASK
+    attribute STENCIL_BITS
+    attribute STENCIL_BUFFER_BIT
+    attribute STENCIL_CLEAR_VALUE
+    attribute STENCIL_FAIL
+    attribute STENCIL_FUNC
+    attribute STENCIL_INDEX
+    attribute STENCIL_INDEX8
+    attribute STENCIL_PASS_DEPTH_FAIL
+    attribute STENCIL_PASS_DEPTH_PASS
+    attribute STENCIL_REF
+    attribute STENCIL_TEST
+    attribute STENCIL_VALUE_MASK
+    attribute STENCIL_WRITEMASK
+    attribute STREAM_COPY
+    attribute STREAM_DRAW
+    attribute STREAM_READ
+    attribute SUBPIXEL_BITS
+    attribute SYNC_CONDITION
+    attribute SYNC_FENCE
+    attribute SYNC_FLAGS
+    attribute SYNC_FLUSH_COMMANDS_BIT
+    attribute SYNC_GPU_COMMANDS_COMPLETE
+    attribute SYNC_STATUS
+    attribute TEXTURE
+    attribute TEXTURE0
+    attribute TEXTURE1
+    attribute TEXTURE10
+    attribute TEXTURE11
+    attribute TEXTURE12
+    attribute TEXTURE13
+    attribute TEXTURE14
+    attribute TEXTURE15
+    attribute TEXTURE16
+    attribute TEXTURE17
+    attribute TEXTURE18
+    attribute TEXTURE19
+    attribute TEXTURE2
+    attribute TEXTURE20
+    attribute TEXTURE21
+    attribute TEXTURE22
+    attribute TEXTURE23
+    attribute TEXTURE24
+    attribute TEXTURE25
+    attribute TEXTURE26
+    attribute TEXTURE27
+    attribute TEXTURE28
+    attribute TEXTURE29
+    attribute TEXTURE3
+    attribute TEXTURE30
+    attribute TEXTURE31
+    attribute TEXTURE4
+    attribute TEXTURE5
+    attribute TEXTURE6
+    attribute TEXTURE7
+    attribute TEXTURE8
+    attribute TEXTURE9
+    attribute TEXTURE_2D
+    attribute TEXTURE_2D_ARRAY
+    attribute TEXTURE_3D
+    attribute TEXTURE_BASE_LEVEL
+    attribute TEXTURE_BINDING_2D
+    attribute TEXTURE_BINDING_2D_ARRAY
+    attribute TEXTURE_BINDING_3D
+    attribute TEXTURE_BINDING_CUBE_MAP
+    attribute TEXTURE_COMPARE_FUNC
+    attribute TEXTURE_COMPARE_MODE
+    attribute TEXTURE_CUBE_MAP
+    attribute TEXTURE_CUBE_MAP_NEGATIVE_X
+    attribute TEXTURE_CUBE_MAP_NEGATIVE_Y
+    attribute TEXTURE_CUBE_MAP_NEGATIVE_Z
+    attribute TEXTURE_CUBE_MAP_POSITIVE_X
+    attribute TEXTURE_CUBE_MAP_POSITIVE_Y
+    attribute TEXTURE_CUBE_MAP_POSITIVE_Z
+    attribute TEXTURE_IMMUTABLE_FORMAT
+    attribute TEXTURE_IMMUTABLE_LEVELS
+    attribute TEXTURE_MAG_FILTER
+    attribute TEXTURE_MAX_LEVEL
+    attribute TEXTURE_MAX_LOD
+    attribute TEXTURE_MIN_FILTER
+    attribute TEXTURE_MIN_LOD
+    attribute TEXTURE_WRAP_R
+    attribute TEXTURE_WRAP_S
+    attribute TEXTURE_WRAP_T
+    attribute TIMEOUT_EXPIRED
+    attribute TIMEOUT_IGNORED
+    attribute TRANSFORM_FEEDBACK
+    attribute TRANSFORM_FEEDBACK_ACTIVE
+    attribute TRANSFORM_FEEDBACK_BINDING
+    attribute TRANSFORM_FEEDBACK_BUFFER
+    attribute TRANSFORM_FEEDBACK_BUFFER_BINDING
+    attribute TRANSFORM_FEEDBACK_BUFFER_MODE
+    attribute TRANSFORM_FEEDBACK_BUFFER_SIZE
+    attribute TRANSFORM_FEEDBACK_BUFFER_START
+    attribute TRANSFORM_FEEDBACK_PAUSED
+    attribute TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+    attribute TRANSFORM_FEEDBACK_VARYINGS
+    attribute TRIANGLES
+    attribute TRIANGLE_FAN
+    attribute TRIANGLE_STRIP
+    attribute UNIFORM_ARRAY_STRIDE
+    attribute UNIFORM_BLOCK_ACTIVE_UNIFORMS
+    attribute UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES
+    attribute UNIFORM_BLOCK_BINDING
+    attribute UNIFORM_BLOCK_DATA_SIZE
+    attribute UNIFORM_BLOCK_INDEX
+    attribute UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER
+    attribute UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER
+    attribute UNIFORM_BUFFER
+    attribute UNIFORM_BUFFER_BINDING
+    attribute UNIFORM_BUFFER_OFFSET_ALIGNMENT
+    attribute UNIFORM_BUFFER_SIZE
+    attribute UNIFORM_BUFFER_START
+    attribute UNIFORM_IS_ROW_MAJOR
+    attribute UNIFORM_MATRIX_STRIDE
+    attribute UNIFORM_OFFSET
+    attribute UNIFORM_SIZE
+    attribute UNIFORM_TYPE
+    attribute UNPACK_ALIGNMENT
+    attribute UNPACK_COLORSPACE_CONVERSION_WEBGL
+    attribute UNPACK_FLIP_Y_WEBGL
+    attribute UNPACK_IMAGE_HEIGHT
+    attribute UNPACK_PREMULTIPLY_ALPHA_WEBGL
+    attribute UNPACK_ROW_LENGTH
+    attribute UNPACK_SKIP_IMAGES
+    attribute UNPACK_SKIP_PIXELS
+    attribute UNPACK_SKIP_ROWS
+    attribute UNSIGNALED
+    attribute UNSIGNED_BYTE
+    attribute UNSIGNED_INT
+    attribute UNSIGNED_INT_10F_11F_11F_REV
+    attribute UNSIGNED_INT_24_8
+    attribute UNSIGNED_INT_2_10_10_10_REV
+    attribute UNSIGNED_INT_5_9_9_9_REV
+    attribute UNSIGNED_INT_SAMPLER_2D
+    attribute UNSIGNED_INT_SAMPLER_2D_ARRAY
+    attribute UNSIGNED_INT_SAMPLER_3D
+    attribute UNSIGNED_INT_SAMPLER_CUBE
+    attribute UNSIGNED_INT_VEC2
+    attribute UNSIGNED_INT_VEC3
+    attribute UNSIGNED_INT_VEC4
+    attribute UNSIGNED_NORMALIZED
+    attribute UNSIGNED_SHORT
+    attribute UNSIGNED_SHORT_4_4_4_4
+    attribute UNSIGNED_SHORT_5_5_5_1
+    attribute UNSIGNED_SHORT_5_6_5
+    attribute VALIDATE_STATUS
+    attribute VENDOR
+    attribute VERSION
+    attribute VERTEX_ARRAY_BINDING
+    attribute VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+    attribute VERTEX_ATTRIB_ARRAY_DIVISOR
+    attribute VERTEX_ATTRIB_ARRAY_ENABLED
+    attribute VERTEX_ATTRIB_ARRAY_INTEGER
+    attribute VERTEX_ATTRIB_ARRAY_NORMALIZED
+    attribute VERTEX_ATTRIB_ARRAY_POINTER
+    attribute VERTEX_ATTRIB_ARRAY_SIZE
+    attribute VERTEX_ATTRIB_ARRAY_STRIDE
+    attribute VERTEX_ATTRIB_ARRAY_TYPE
+    attribute VERTEX_SHADER
+    attribute VIEWPORT
+    attribute WAIT_FAILED
+    attribute ZERO
+    getter canvas
+    getter drawingBufferHeight
+    getter drawingBufferWidth
+    method activeTexture
+    method attachShader
+    method beginQuery
+    method beginTransformFeedback
+    method bindAttribLocation
+    method bindBuffer
+    method bindBufferBase
+    method bindBufferRange
+    method bindFramebuffer
+    method bindRenderbuffer
+    method bindSampler
+    method bindTexture
+    method bindTransformFeedback
+    method bindVertexArray
+    method blendColor
+    method blendEquation
+    method blendEquationSeparate
+    method blendFunc
+    method blendFuncSeparate
+    method blitFramebuffer
+    method bufferData
+    method bufferSubData
+    method checkFramebufferStatus
+    method clear
+    method clearBufferfi
+    method clearBufferfv
+    method clearBufferiv
+    method clearBufferuiv
+    method clearColor
+    method clearDepth
+    method clearStencil
+    method clientWaitSync
+    method colorMask
+    method commit
+    method compileShader
+    method compressedTexImage2D
+    method compressedTexImage3D
+    method compressedTexSubImage2D
+    method compressedTexSubImage3D
+    method constructor
+    method copyBufferSubData
+    method copyTexImage2D
+    method copyTexSubImage2D
+    method copyTexSubImage3D
+    method createBuffer
+    method createFramebuffer
+    method createProgram
+    method createQuery
+    method createRenderbuffer
+    method createSampler
+    method createShader
+    method createTexture
+    method createTransformFeedback
+    method createVertexArray
+    method cullFace
+    method deleteBuffer
+    method deleteFramebuffer
+    method deleteProgram
+    method deleteQuery
+    method deleteRenderbuffer
+    method deleteSampler
+    method deleteShader
+    method deleteSync
+    method deleteTexture
+    method deleteTransformFeedback
+    method deleteVertexArray
+    method depthFunc
+    method depthMask
+    method depthRange
+    method detachShader
+    method disable
+    method disableVertexAttribArray
+    method drawArrays
+    method drawArraysInstanced
+    method drawBuffers
+    method drawElements
+    method drawElementsInstanced
+    method drawRangeElements
+    method enable
+    method enableVertexAttribArray
+    method endQuery
+    method endTransformFeedback
+    method fenceSync
+    method finish
+    method flush
+    method framebufferRenderbuffer
+    method framebufferTexture2D
+    method framebufferTextureLayer
+    method frontFace
+    method generateMipmap
+    method getActiveAttrib
+    method getActiveUniform
+    method getActiveUniformBlockName
+    method getActiveUniformBlockParameter
+    method getActiveUniforms
+    method getAttachedShaders
+    method getAttribLocation
+    method getBufferParameter
+    method getBufferSubData
+    method getContextAttributes
+    method getError
+    method getExtension
+    method getFragDataLocation
+    method getFramebufferAttachmentParameter
+    method getIndexedParameter
+    method getInternalformatParameter
+    method getParameter
+    method getProgramInfoLog
+    method getProgramParameter
+    method getQuery
+    method getQueryParameter
+    method getRenderbufferParameter
+    method getSamplerParameter
+    method getShaderInfoLog
+    method getShaderParameter
+    method getShaderPrecisionFormat
+    method getShaderSource
+    method getSupportedExtensions
+    method getSyncParameter
+    method getTexParameter
+    method getTransformFeedbackVarying
+    method getUniform
+    method getUniformBlockIndex
+    method getUniformIndices
+    method getUniformLocation
+    method getVertexAttrib
+    method getVertexAttribOffset
+    method hint
+    method invalidateFramebuffer
+    method invalidateSubFramebuffer
+    method isBuffer
+    method isContextLost
+    method isEnabled
+    method isFramebuffer
+    method isProgram
+    method isQuery
+    method isRenderbuffer
+    method isSampler
+    method isShader
+    method isSync
+    method isTexture
+    method isTransformFeedback
+    method isVertexArray
+    method lineWidth
+    method linkProgram
+    method pauseTransformFeedback
+    method pixelStorei
+    method polygonOffset
+    method readBuffer
+    method readPixels
+    method renderbufferStorage
+    method renderbufferStorageMultisample
+    method resumeTransformFeedback
+    method sampleCoverage
+    method samplerParameterf
+    method samplerParameteri
+    method scissor
+    method shaderSource
+    method stencilFunc
+    method stencilFuncSeparate
+    method stencilMask
+    method stencilMaskSeparate
+    method stencilOp
+    method stencilOpSeparate
+    method texImage2D
+    method texImage3D
+    method texParameterf
+    method texParameteri
+    method texStorage2D
+    method texStorage3D
+    method texSubImage2D
+    method texSubImage3D
+    method transformFeedbackVaryings
+    method uniform1f
+    method uniform1fv
+    method uniform1i
+    method uniform1iv
+    method uniform1ui
+    method uniform1uiv
+    method uniform2f
+    method uniform2fv
+    method uniform2i
+    method uniform2iv
+    method uniform2ui
+    method uniform2uiv
+    method uniform3f
+    method uniform3fv
+    method uniform3i
+    method uniform3iv
+    method uniform3ui
+    method uniform3uiv
+    method uniform4f
+    method uniform4fv
+    method uniform4i
+    method uniform4iv
+    method uniform4ui
+    method uniform4uiv
+    method uniformBlockBinding
+    method uniformMatrix2fv
+    method uniformMatrix2x3fv
+    method uniformMatrix2x4fv
+    method uniformMatrix3fv
+    method uniformMatrix3x2fv
+    method uniformMatrix3x4fv
+    method uniformMatrix4fv
+    method uniformMatrix4x2fv
+    method uniformMatrix4x3fv
+    method useProgram
+    method validateProgram
+    method vertexAttrib1f
+    method vertexAttrib1fv
+    method vertexAttrib2f
+    method vertexAttrib2fv
+    method vertexAttrib3f
+    method vertexAttrib3fv
+    method vertexAttrib4f
+    method vertexAttrib4fv
+    method vertexAttribDivisor
+    method vertexAttribI4i
+    method vertexAttribI4iv
+    method vertexAttribI4ui
+    method vertexAttribI4uiv
+    method vertexAttribIPointer
+    method vertexAttribPointer
+    method viewport
+    method waitSync
+interface WebGLRenderingContext
+    attribute ACTIVE_ATTRIBUTES
+    attribute ACTIVE_TEXTURE
+    attribute ACTIVE_UNIFORMS
+    attribute ALIASED_LINE_WIDTH_RANGE
+    attribute ALIASED_POINT_SIZE_RANGE
+    attribute ALPHA
+    attribute ALPHA_BITS
+    attribute ALWAYS
+    attribute ARRAY_BUFFER
+    attribute ARRAY_BUFFER_BINDING
+    attribute ATTACHED_SHADERS
+    attribute BACK
+    attribute BLEND
+    attribute BLEND_COLOR
+    attribute BLEND_DST_ALPHA
+    attribute BLEND_DST_RGB
+    attribute BLEND_EQUATION
+    attribute BLEND_EQUATION_ALPHA
+    attribute BLEND_EQUATION_RGB
+    attribute BLEND_SRC_ALPHA
+    attribute BLEND_SRC_RGB
+    attribute BLUE_BITS
+    attribute BOOL
+    attribute BOOL_VEC2
+    attribute BOOL_VEC3
+    attribute BOOL_VEC4
+    attribute BROWSER_DEFAULT_WEBGL
+    attribute BUFFER_SIZE
+    attribute BUFFER_USAGE
+    attribute BYTE
+    attribute CCW
+    attribute CLAMP_TO_EDGE
+    attribute COLOR_ATTACHMENT0
+    attribute COLOR_BUFFER_BIT
+    attribute COLOR_CLEAR_VALUE
+    attribute COLOR_WRITEMASK
+    attribute COMPILE_STATUS
+    attribute COMPRESSED_TEXTURE_FORMATS
+    attribute CONSTANT_ALPHA
+    attribute CONSTANT_COLOR
+    attribute CONTEXT_LOST_WEBGL
+    attribute CULL_FACE
+    attribute CULL_FACE_MODE
+    attribute CURRENT_PROGRAM
+    attribute CURRENT_VERTEX_ATTRIB
+    attribute CW
+    attribute DECR
+    attribute DECR_WRAP
+    attribute DELETE_STATUS
+    attribute DEPTH_ATTACHMENT
+    attribute DEPTH_BITS
+    attribute DEPTH_BUFFER_BIT
+    attribute DEPTH_CLEAR_VALUE
+    attribute DEPTH_COMPONENT
+    attribute DEPTH_COMPONENT16
+    attribute DEPTH_FUNC
+    attribute DEPTH_RANGE
+    attribute DEPTH_STENCIL
+    attribute DEPTH_STENCIL_ATTACHMENT
+    attribute DEPTH_TEST
+    attribute DEPTH_WRITEMASK
+    attribute DITHER
+    attribute DONT_CARE
+    attribute DST_ALPHA
+    attribute DST_COLOR
+    attribute DYNAMIC_DRAW
+    attribute ELEMENT_ARRAY_BUFFER
+    attribute ELEMENT_ARRAY_BUFFER_BINDING
+    attribute EQUAL
+    attribute FASTEST
+    attribute FLOAT
+    attribute FLOAT_MAT2
+    attribute FLOAT_MAT3
+    attribute FLOAT_MAT4
+    attribute FLOAT_VEC2
+    attribute FLOAT_VEC3
+    attribute FLOAT_VEC4
+    attribute FRAGMENT_SHADER
+    attribute FRAMEBUFFER
+    attribute FRAMEBUFFER_ATTACHMENT_OBJECT_NAME
+    attribute FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE
+    attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE
+    attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL
+    attribute FRAMEBUFFER_BINDING
+    attribute FRAMEBUFFER_COMPLETE
+    attribute FRAMEBUFFER_INCOMPLETE_ATTACHMENT
+    attribute FRAMEBUFFER_INCOMPLETE_DIMENSIONS
+    attribute FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
+    attribute FRAMEBUFFER_UNSUPPORTED
+    attribute FRONT
+    attribute FRONT_AND_BACK
+    attribute FRONT_FACE
+    attribute FUNC_ADD
+    attribute FUNC_REVERSE_SUBTRACT
+    attribute FUNC_SUBTRACT
+    attribute GENERATE_MIPMAP_HINT
+    attribute GEQUAL
+    attribute GREATER
+    attribute GREEN_BITS
+    attribute HIGH_FLOAT
+    attribute HIGH_INT
+    attribute IMPLEMENTATION_COLOR_READ_FORMAT
+    attribute IMPLEMENTATION_COLOR_READ_TYPE
+    attribute INCR
+    attribute INCR_WRAP
+    attribute INT
+    attribute INT_VEC2
+    attribute INT_VEC3
+    attribute INT_VEC4
+    attribute INVALID_ENUM
+    attribute INVALID_FRAMEBUFFER_OPERATION
+    attribute INVALID_OPERATION
+    attribute INVALID_VALUE
+    attribute INVERT
+    attribute KEEP
+    attribute LEQUAL
+    attribute LESS
+    attribute LINEAR
+    attribute LINEAR_MIPMAP_LINEAR
+    attribute LINEAR_MIPMAP_NEAREST
+    attribute LINES
+    attribute LINE_LOOP
+    attribute LINE_STRIP
+    attribute LINE_WIDTH
+    attribute LINK_STATUS
+    attribute LOW_FLOAT
+    attribute LOW_INT
+    attribute LUMINANCE
+    attribute LUMINANCE_ALPHA
+    attribute MAX_COMBINED_TEXTURE_IMAGE_UNITS
+    attribute MAX_CUBE_MAP_TEXTURE_SIZE
+    attribute MAX_FRAGMENT_UNIFORM_VECTORS
+    attribute MAX_RENDERBUFFER_SIZE
+    attribute MAX_TEXTURE_IMAGE_UNITS
+    attribute MAX_TEXTURE_SIZE
+    attribute MAX_VARYING_VECTORS
+    attribute MAX_VERTEX_ATTRIBS
+    attribute MAX_VERTEX_TEXTURE_IMAGE_UNITS
+    attribute MAX_VERTEX_UNIFORM_VECTORS
+    attribute MAX_VIEWPORT_DIMS
+    attribute MEDIUM_FLOAT
+    attribute MEDIUM_INT
+    attribute MIRRORED_REPEAT
+    attribute NEAREST
+    attribute NEAREST_MIPMAP_LINEAR
+    attribute NEAREST_MIPMAP_NEAREST
+    attribute NEVER
+    attribute NICEST
+    attribute NONE
+    attribute NOTEQUAL
+    attribute NO_ERROR
+    attribute ONE
+    attribute ONE_MINUS_CONSTANT_ALPHA
+    attribute ONE_MINUS_CONSTANT_COLOR
+    attribute ONE_MINUS_DST_ALPHA
+    attribute ONE_MINUS_DST_COLOR
+    attribute ONE_MINUS_SRC_ALPHA
+    attribute ONE_MINUS_SRC_COLOR
+    attribute OUT_OF_MEMORY
+    attribute PACK_ALIGNMENT
+    attribute POINTS
+    attribute POLYGON_OFFSET_FACTOR
+    attribute POLYGON_OFFSET_FILL
+    attribute POLYGON_OFFSET_UNITS
+    attribute RED_BITS
+    attribute RENDERBUFFER
+    attribute RENDERBUFFER_ALPHA_SIZE
+    attribute RENDERBUFFER_BINDING
+    attribute RENDERBUFFER_BLUE_SIZE
+    attribute RENDERBUFFER_DEPTH_SIZE
+    attribute RENDERBUFFER_GREEN_SIZE
+    attribute RENDERBUFFER_HEIGHT
+    attribute RENDERBUFFER_INTERNAL_FORMAT
+    attribute RENDERBUFFER_RED_SIZE
+    attribute RENDERBUFFER_STENCIL_SIZE
+    attribute RENDERBUFFER_WIDTH
+    attribute RENDERER
+    attribute REPEAT
+    attribute REPLACE
+    attribute RGB
+    attribute RGB565
+    attribute RGB5_A1
+    attribute RGBA
+    attribute RGBA4
+    attribute SAMPLER_2D
+    attribute SAMPLER_CUBE
+    attribute SAMPLES
+    attribute SAMPLE_ALPHA_TO_COVERAGE
+    attribute SAMPLE_BUFFERS
+    attribute SAMPLE_COVERAGE
+    attribute SAMPLE_COVERAGE_INVERT
+    attribute SAMPLE_COVERAGE_VALUE
+    attribute SCISSOR_BOX
+    attribute SCISSOR_TEST
+    attribute SHADER_TYPE
+    attribute SHADING_LANGUAGE_VERSION
+    attribute SHORT
+    attribute SRC_ALPHA
+    attribute SRC_ALPHA_SATURATE
+    attribute SRC_COLOR
+    attribute STATIC_DRAW
+    attribute STENCIL_ATTACHMENT
+    attribute STENCIL_BACK_FAIL
+    attribute STENCIL_BACK_FUNC
+    attribute STENCIL_BACK_PASS_DEPTH_FAIL
+    attribute STENCIL_BACK_PASS_DEPTH_PASS
+    attribute STENCIL_BACK_REF
+    attribute STENCIL_BACK_VALUE_MASK
+    attribute STENCIL_BACK_WRITEMASK
+    attribute STENCIL_BITS
+    attribute STENCIL_BUFFER_BIT
+    attribute STENCIL_CLEAR_VALUE
+    attribute STENCIL_FAIL
+    attribute STENCIL_FUNC
+    attribute STENCIL_INDEX
+    attribute STENCIL_INDEX8
+    attribute STENCIL_PASS_DEPTH_FAIL
+    attribute STENCIL_PASS_DEPTH_PASS
+    attribute STENCIL_REF
+    attribute STENCIL_TEST
+    attribute STENCIL_VALUE_MASK
+    attribute STENCIL_WRITEMASK
+    attribute STREAM_DRAW
+    attribute SUBPIXEL_BITS
+    attribute TEXTURE
+    attribute TEXTURE0
+    attribute TEXTURE1
+    attribute TEXTURE10
+    attribute TEXTURE11
+    attribute TEXTURE12
+    attribute TEXTURE13
+    attribute TEXTURE14
+    attribute TEXTURE15
+    attribute TEXTURE16
+    attribute TEXTURE17
+    attribute TEXTURE18
+    attribute TEXTURE19
+    attribute TEXTURE2
+    attribute TEXTURE20
+    attribute TEXTURE21
+    attribute TEXTURE22
+    attribute TEXTURE23
+    attribute TEXTURE24
+    attribute TEXTURE25
+    attribute TEXTURE26
+    attribute TEXTURE27
+    attribute TEXTURE28
+    attribute TEXTURE29
+    attribute TEXTURE3
+    attribute TEXTURE30
+    attribute TEXTURE31
+    attribute TEXTURE4
+    attribute TEXTURE5
+    attribute TEXTURE6
+    attribute TEXTURE7
+    attribute TEXTURE8
+    attribute TEXTURE9
+    attribute TEXTURE_2D
+    attribute TEXTURE_BINDING_2D
+    attribute TEXTURE_BINDING_CUBE_MAP
+    attribute TEXTURE_CUBE_MAP
+    attribute TEXTURE_CUBE_MAP_NEGATIVE_X
+    attribute TEXTURE_CUBE_MAP_NEGATIVE_Y
+    attribute TEXTURE_CUBE_MAP_NEGATIVE_Z
+    attribute TEXTURE_CUBE_MAP_POSITIVE_X
+    attribute TEXTURE_CUBE_MAP_POSITIVE_Y
+    attribute TEXTURE_CUBE_MAP_POSITIVE_Z
+    attribute TEXTURE_MAG_FILTER
+    attribute TEXTURE_MIN_FILTER
+    attribute TEXTURE_WRAP_S
+    attribute TEXTURE_WRAP_T
+    attribute TRIANGLES
+    attribute TRIANGLE_FAN
+    attribute TRIANGLE_STRIP
+    attribute UNPACK_ALIGNMENT
+    attribute UNPACK_COLORSPACE_CONVERSION_WEBGL
+    attribute UNPACK_FLIP_Y_WEBGL
+    attribute UNPACK_PREMULTIPLY_ALPHA_WEBGL
+    attribute UNSIGNED_BYTE
+    attribute UNSIGNED_INT
+    attribute UNSIGNED_SHORT
+    attribute UNSIGNED_SHORT_4_4_4_4
+    attribute UNSIGNED_SHORT_5_5_5_1
+    attribute UNSIGNED_SHORT_5_6_5
+    attribute VALIDATE_STATUS
+    attribute VENDOR
+    attribute VERSION
+    attribute VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+    attribute VERTEX_ATTRIB_ARRAY_ENABLED
+    attribute VERTEX_ATTRIB_ARRAY_NORMALIZED
+    attribute VERTEX_ATTRIB_ARRAY_POINTER
+    attribute VERTEX_ATTRIB_ARRAY_SIZE
+    attribute VERTEX_ATTRIB_ARRAY_STRIDE
+    attribute VERTEX_ATTRIB_ARRAY_TYPE
+    attribute VERTEX_SHADER
+    attribute VIEWPORT
+    attribute ZERO
+    getter canvas
+    getter drawingBufferHeight
+    getter drawingBufferWidth
+    method activeTexture
+    method attachShader
+    method bindAttribLocation
+    method bindBuffer
+    method bindFramebuffer
+    method bindRenderbuffer
+    method bindTexture
+    method blendColor
+    method blendEquation
+    method blendEquationSeparate
+    method blendFunc
+    method blendFuncSeparate
+    method bufferData
+    method bufferSubData
+    method checkFramebufferStatus
+    method clear
+    method clearColor
+    method clearDepth
+    method clearStencil
+    method colorMask
+    method commit
+    method compileShader
+    method compressedTexImage2D
+    method compressedTexSubImage2D
+    method constructor
+    method copyTexImage2D
+    method copyTexSubImage2D
+    method createBuffer
+    method createFramebuffer
+    method createProgram
+    method createRenderbuffer
+    method createShader
+    method createTexture
+    method cullFace
+    method deleteBuffer
+    method deleteFramebuffer
+    method deleteProgram
+    method deleteRenderbuffer
+    method deleteShader
+    method deleteTexture
+    method depthFunc
+    method depthMask
+    method depthRange
+    method detachShader
+    method disable
+    method disableVertexAttribArray
+    method drawArrays
+    method drawElements
+    method enable
+    method enableVertexAttribArray
+    method finish
+    method flush
+    method framebufferRenderbuffer
+    method framebufferTexture2D
+    method frontFace
+    method generateMipmap
+    method getActiveAttrib
+    method getActiveUniform
+    method getAttachedShaders
+    method getAttribLocation
+    method getBufferParameter
+    method getContextAttributes
+    method getError
+    method getExtension
+    method getFramebufferAttachmentParameter
+    method getParameter
+    method getProgramInfoLog
+    method getProgramParameter
+    method getRenderbufferParameter
+    method getShaderInfoLog
+    method getShaderParameter
+    method getShaderPrecisionFormat
+    method getShaderSource
+    method getSupportedExtensions
+    method getTexParameter
+    method getUniform
+    method getUniformLocation
+    method getVertexAttrib
+    method getVertexAttribOffset
+    method hint
+    method isBuffer
+    method isContextLost
+    method isEnabled
+    method isFramebuffer
+    method isProgram
+    method isRenderbuffer
+    method isShader
+    method isTexture
+    method lineWidth
+    method linkProgram
+    method pixelStorei
+    method polygonOffset
+    method readPixels
+    method renderbufferStorage
+    method sampleCoverage
+    method scissor
+    method shaderSource
+    method stencilFunc
+    method stencilFuncSeparate
+    method stencilMask
+    method stencilMaskSeparate
+    method stencilOp
+    method stencilOpSeparate
+    method texImage2D
+    method texParameterf
+    method texParameteri
+    method texSubImage2D
+    method uniform1f
+    method uniform1fv
+    method uniform1i
+    method uniform1iv
+    method uniform2f
+    method uniform2fv
+    method uniform2i
+    method uniform2iv
+    method uniform3f
+    method uniform3fv
+    method uniform3i
+    method uniform3iv
+    method uniform4f
+    method uniform4fv
+    method uniform4i
+    method uniform4iv
+    method uniformMatrix2fv
+    method uniformMatrix3fv
+    method uniformMatrix4fv
+    method useProgram
+    method validateProgram
+    method vertexAttrib1f
+    method vertexAttrib1fv
+    method vertexAttrib2f
+    method vertexAttrib2fv
+    method vertexAttrib3f
+    method vertexAttrib3fv
+    method vertexAttrib4f
+    method vertexAttrib4fv
+    method vertexAttribPointer
+    method viewport
+interface WebSocket : EventTarget
+    attribute CLOSED
+    attribute CLOSING
+    attribute CONNECTING
+    attribute OPEN
+    getter binaryType
+    getter bufferedAmount
+    getter extensions
+    getter onclose
+    getter onerror
+    getter onmessage
+    getter onopen
+    getter protocol
+    getter readyState
+    getter url
+    method close
+    method constructor
+    method send
+    setter binaryType
+    setter onclose
+    setter onerror
+    setter onmessage
+    setter onopen
+interface WindowClient : Client
+    getter focused
+    getter visibilityState
+    method constructor
+    method focus
+    method navigate
+interface WorkerGlobalScope : EventTarget
+    getter addressSpace
+    getter caches
+    getter crypto
+    getter indexedDB
+    getter isSecureContext
+    getter location
+    getter navigator
+    getter onerror
+    getter onrejectionhandled
+    getter onunhandledrejection
+    getter origin
+    getter performance
+    getter self
+    method atob
+    method btoa
+    method clearInterval
+    method clearTimeout
+    method constructor
+    method createImageBitmap
+    method fetch
+    method importScripts
+    method setInterval
+    method setTimeout
+    setter onerror
+    setter onrejectionhandled
+    setter onunhandledrejection
+    setter origin
+interface WorkerLocation
+    getter hash
+    getter host
+    getter hostname
+    getter href
+    getter origin
+    getter pathname
+    getter port
+    getter protocol
+    getter search
+    method constructor
+    method toString
+interface WorkerNavigator
+    getter appCodeName
+    getter appName
+    getter appVersion
+    getter budget
+    getter connection
+    getter hardwareConcurrency
+    getter onLine
+    getter permissions
+    getter platform
+    getter product
+    getter storage
+    getter userAgent
+    method constructor
+interface WritableStream
+    getter locked
+    method abort
+    method constructor
+    method getWriter
+global object
+    attribute console
+    attribute internals
+    getter clients
+    getter onactivate
+    getter onbackgroundfetchabort
+    getter onbackgroundfetchclick
+    getter onbackgroundfetched
+    getter onbackgroundfetchfail
+    getter onfetch
+    getter onforeignfetch
+    getter oninstall
+    getter onmessage
+    getter onnotificationclick
+    getter onnotificationclose
+    getter onpaymentrequest
+    getter onpush
+    getter onsync
+    getter registration
+    method fetch
+    method gc
+    method skipWaiting
+    setter onactivate
+    setter onbackgroundfetchabort
+    setter onbackgroundfetchclick
+    setter onbackgroundfetched
+    setter onbackgroundfetchfail
+    setter onfetch
+    setter onforeignfetch
+    setter oninstall
+    setter onmessage
+    setter onnotificationclick
+    setter onnotificationclose
+    setter onpaymentrequest
+    setter onpush
+    setter onsync
+PASS Verify the interface of ServiceWorkerGlobalScope
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/http/tests/serviceworker/chromium/README.txt b/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/webexposed/README.txt
similarity index 100%
copy from third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/http/tests/serviceworker/chromium/README.txt
copy to third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/webexposed/README.txt
diff --git a/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/webexposed/global-interface-listing-dedicated-worker-expected.txt b/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/webexposed/global-interface-listing-dedicated-worker-expected.txt
new file mode 100644
index 0000000..0b22d590
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/webexposed/global-interface-listing-dedicated-worker-expected.txt
@@ -0,0 +1,2336 @@
+This test documents all interface attributes and methods on DedicatedWorkerGlobalScope.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Starting worker: resources/global-interface-listing.js
+[Worker] [INTERFACES]
+[Worker] interface BackgroundFetchFetch
+[Worker]     attribute @@toStringTag
+[Worker]     getter request
+[Worker]     method constructor
+[Worker] interface BackgroundFetchManager
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method fetch
+[Worker]     method get
+[Worker]     method getTags
+[Worker] interface BackgroundFetchRegistration
+[Worker]     attribute @@toStringTag
+[Worker]     getter icons
+[Worker]     getter tag
+[Worker]     getter title
+[Worker]     getter totalDownloadSize
+[Worker]     method abort
+[Worker]     method constructor
+[Worker] interface BarcodeDetector
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method detect
+[Worker] interface Blob
+[Worker]     attribute @@toStringTag
+[Worker]     getter isClosed
+[Worker]     getter size
+[Worker]     getter type
+[Worker]     method close
+[Worker]     method constructor
+[Worker]     method slice
+[Worker] interface BroadcastChannel : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     getter name
+[Worker]     getter onmessage
+[Worker]     method close
+[Worker]     method constructor
+[Worker]     method postMessage
+[Worker]     setter onmessage
+[Worker] interface BudgetService
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method getBudget
+[Worker]     method getCost
+[Worker]     method reserve
+[Worker] interface BudgetState
+[Worker]     attribute @@toStringTag
+[Worker]     getter budgetAt
+[Worker]     getter time
+[Worker]     method constructor
+[Worker] interface ByteLengthQueuingStrategy
+[Worker]     method constructor
+[Worker]     method size
+[Worker] interface Cache
+[Worker]     attribute @@toStringTag
+[Worker]     method add
+[Worker]     method addAll
+[Worker]     method constructor
+[Worker]     method delete
+[Worker]     method keys
+[Worker]     method match
+[Worker]     method matchAll
+[Worker]     method put
+[Worker] interface CacheStorage
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method delete
+[Worker]     method has
+[Worker]     method keys
+[Worker]     method match
+[Worker]     method open
+[Worker] interface CanvasGradient
+[Worker]     attribute @@toStringTag
+[Worker]     method addColorStop
+[Worker]     method constructor
+[Worker] interface CanvasPattern
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker] interface CloseEvent : Event
+[Worker]     attribute @@toStringTag
+[Worker]     getter code
+[Worker]     getter reason
+[Worker]     getter wasClean
+[Worker]     method constructor
+[Worker] interface CountQueuingStrategy
+[Worker]     method constructor
+[Worker]     method size
+[Worker] interface Crypto
+[Worker]     attribute @@toStringTag
+[Worker]     getter subtle
+[Worker]     method constructor
+[Worker]     method getRandomValues
+[Worker] interface CryptoKey
+[Worker]     attribute @@toStringTag
+[Worker]     getter algorithm
+[Worker]     getter extractable
+[Worker]     getter type
+[Worker]     getter usages
+[Worker]     method constructor
+[Worker] interface CustomEvent : Event
+[Worker]     attribute @@toStringTag
+[Worker]     getter detail
+[Worker]     method constructor
+[Worker]     method initCustomEvent
+[Worker] interface DOMException
+[Worker]     attribute @@toStringTag
+[Worker]     attribute ABORT_ERR
+[Worker]     attribute DATA_CLONE_ERR
+[Worker]     attribute DOMSTRING_SIZE_ERR
+[Worker]     attribute HIERARCHY_REQUEST_ERR
+[Worker]     attribute INDEX_SIZE_ERR
+[Worker]     attribute INUSE_ATTRIBUTE_ERR
+[Worker]     attribute INVALID_ACCESS_ERR
+[Worker]     attribute INVALID_CHARACTER_ERR
+[Worker]     attribute INVALID_MODIFICATION_ERR
+[Worker]     attribute INVALID_NODE_TYPE_ERR
+[Worker]     attribute INVALID_STATE_ERR
+[Worker]     attribute NAMESPACE_ERR
+[Worker]     attribute NETWORK_ERR
+[Worker]     attribute NOT_FOUND_ERR
+[Worker]     attribute NOT_SUPPORTED_ERR
+[Worker]     attribute NO_DATA_ALLOWED_ERR
+[Worker]     attribute NO_MODIFICATION_ALLOWED_ERR
+[Worker]     attribute QUOTA_EXCEEDED_ERR
+[Worker]     attribute SECURITY_ERR
+[Worker]     attribute SYNTAX_ERR
+[Worker]     attribute TIMEOUT_ERR
+[Worker]     attribute TYPE_MISMATCH_ERR
+[Worker]     attribute URL_MISMATCH_ERR
+[Worker]     attribute VALIDATION_ERR
+[Worker]     attribute WRONG_DOCUMENT_ERR
+[Worker]     getter code
+[Worker]     getter message
+[Worker]     getter name
+[Worker]     method constructor
+[Worker]     method toString
+[Worker] interface DOMMatrix : DOMMatrixReadOnly
+[Worker]     attribute @@toStringTag
+[Worker]     getter a
+[Worker]     getter b
+[Worker]     getter c
+[Worker]     getter d
+[Worker]     getter e
+[Worker]     getter f
+[Worker]     getter m11
+[Worker]     getter m12
+[Worker]     getter m13
+[Worker]     getter m14
+[Worker]     getter m21
+[Worker]     getter m22
+[Worker]     getter m23
+[Worker]     getter m24
+[Worker]     getter m31
+[Worker]     getter m32
+[Worker]     getter m33
+[Worker]     getter m34
+[Worker]     getter m41
+[Worker]     getter m42
+[Worker]     getter m43
+[Worker]     getter m44
+[Worker]     method constructor
+[Worker]     method invertSelf
+[Worker]     method multiplySelf
+[Worker]     method preMultiplySelf
+[Worker]     method rotateAxisAngleSelf
+[Worker]     method rotateFromVectorSelf
+[Worker]     method rotateSelf
+[Worker]     method scale3dSelf
+[Worker]     method scaleSelf
+[Worker]     method setMatrixValue
+[Worker]     method skewXSelf
+[Worker]     method skewYSelf
+[Worker]     method translateSelf
+[Worker]     setter a
+[Worker]     setter b
+[Worker]     setter c
+[Worker]     setter d
+[Worker]     setter e
+[Worker]     setter f
+[Worker]     setter m11
+[Worker]     setter m12
+[Worker]     setter m13
+[Worker]     setter m14
+[Worker]     setter m21
+[Worker]     setter m22
+[Worker]     setter m23
+[Worker]     setter m24
+[Worker]     setter m31
+[Worker]     setter m32
+[Worker]     setter m33
+[Worker]     setter m34
+[Worker]     setter m41
+[Worker]     setter m42
+[Worker]     setter m43
+[Worker]     setter m44
+[Worker] interface DOMMatrixReadOnly
+[Worker]     static method fromFloat32Array
+[Worker]     static method fromFloat64Array
+[Worker]     static method fromMatrix
+[Worker]     attribute @@toStringTag
+[Worker]     getter a
+[Worker]     getter b
+[Worker]     getter c
+[Worker]     getter d
+[Worker]     getter e
+[Worker]     getter f
+[Worker]     getter is2D
+[Worker]     getter isIdentity
+[Worker]     getter m11
+[Worker]     getter m12
+[Worker]     getter m13
+[Worker]     getter m14
+[Worker]     getter m21
+[Worker]     getter m22
+[Worker]     getter m23
+[Worker]     getter m24
+[Worker]     getter m31
+[Worker]     getter m32
+[Worker]     getter m33
+[Worker]     getter m34
+[Worker]     getter m41
+[Worker]     getter m42
+[Worker]     getter m43
+[Worker]     getter m44
+[Worker]     method constructor
+[Worker]     method flipX
+[Worker]     method flipY
+[Worker]     method inverse
+[Worker]     method multiply
+[Worker]     method rotate
+[Worker]     method rotateAxisAngle
+[Worker]     method rotateFromVector
+[Worker]     method scale
+[Worker]     method scale3d
+[Worker]     method skewX
+[Worker]     method skewY
+[Worker]     method toFloat32Array
+[Worker]     method toFloat64Array
+[Worker]     method toJSON
+[Worker]     method toString
+[Worker]     method transformPoint
+[Worker]     method translate
+[Worker] interface DOMPoint : DOMPointReadOnly
+[Worker]     attribute @@toStringTag
+[Worker]     getter w
+[Worker]     getter x
+[Worker]     getter y
+[Worker]     getter z
+[Worker]     method constructor
+[Worker]     setter w
+[Worker]     setter x
+[Worker]     setter y
+[Worker]     setter z
+[Worker] interface DOMPointReadOnly
+[Worker]     static method fromPoint
+[Worker]     attribute @@toStringTag
+[Worker]     getter w
+[Worker]     getter x
+[Worker]     getter y
+[Worker]     getter z
+[Worker]     method constructor
+[Worker]     method matrixTransform
+[Worker]     method toJSON
+[Worker] interface DOMQuad
+[Worker]     static method fromQuad
+[Worker]     static method fromRect
+[Worker]     attribute @@toStringTag
+[Worker]     getter p1
+[Worker]     getter p2
+[Worker]     getter p3
+[Worker]     getter p4
+[Worker]     method constructor
+[Worker]     method getBounds
+[Worker]     method toJSON
+[Worker] interface DOMRect : DOMRectReadOnly
+[Worker]     attribute @@toStringTag
+[Worker]     getter height
+[Worker]     getter width
+[Worker]     getter x
+[Worker]     getter y
+[Worker]     method constructor
+[Worker]     setter height
+[Worker]     setter width
+[Worker]     setter x
+[Worker]     setter y
+[Worker] interface DOMRectReadOnly
+[Worker]     static method fromRect
+[Worker]     attribute @@toStringTag
+[Worker]     getter bottom
+[Worker]     getter height
+[Worker]     getter left
+[Worker]     getter right
+[Worker]     getter top
+[Worker]     getter width
+[Worker]     getter x
+[Worker]     getter y
+[Worker]     method constructor
+[Worker]     method toJSON
+[Worker] interface DOMStringList
+[Worker]     attribute @@toStringTag
+[Worker]     getter length
+[Worker]     method @@iterator
+[Worker]     method constructor
+[Worker]     method contains
+[Worker]     method item
+[Worker] interface DataView
+[Worker]     attribute @@toStringTag
+[Worker]     getter buffer
+[Worker]     getter byteLength
+[Worker]     getter byteOffset
+[Worker]     method constructor
+[Worker]     method getFloat32
+[Worker]     method getFloat64
+[Worker]     method getInt16
+[Worker]     method getInt32
+[Worker]     method getInt8
+[Worker]     method getUint16
+[Worker]     method getUint32
+[Worker]     method getUint8
+[Worker]     method setFloat32
+[Worker]     method setFloat64
+[Worker]     method setInt16
+[Worker]     method setInt32
+[Worker]     method setInt8
+[Worker]     method setUint16
+[Worker]     method setUint32
+[Worker]     method setUint8
+[Worker] interface DedicatedWorkerGlobalScope : WorkerGlobalScope
+[Worker]     attribute @@toStringTag
+[Worker]     attribute PERSISTENT
+[Worker]     attribute TEMPORARY
+[Worker]     method constructor
+[Worker] interface Event
+[Worker]     attribute @@toStringTag
+[Worker]     attribute AT_TARGET
+[Worker]     attribute BUBBLING_PHASE
+[Worker]     attribute CAPTURING_PHASE
+[Worker]     attribute NONE
+[Worker]     getter bubbles
+[Worker]     getter cancelBubble
+[Worker]     getter cancelable
+[Worker]     getter composed
+[Worker]     getter currentTarget
+[Worker]     getter defaultPrevented
+[Worker]     getter eventPhase
+[Worker]     getter path
+[Worker]     getter returnValue
+[Worker]     getter srcElement
+[Worker]     getter target
+[Worker]     getter timeStamp
+[Worker]     getter type
+[Worker]     method composedPath
+[Worker]     method constructor
+[Worker]     method initEvent
+[Worker]     method preventDefault
+[Worker]     method stopImmediatePropagation
+[Worker]     method stopPropagation
+[Worker]     setter cancelBubble
+[Worker]     setter returnValue
+[Worker] interface EventSource : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     attribute CLOSED
+[Worker]     attribute CONNECTING
+[Worker]     attribute OPEN
+[Worker]     getter onerror
+[Worker]     getter onmessage
+[Worker]     getter onopen
+[Worker]     getter readyState
+[Worker]     getter url
+[Worker]     getter withCredentials
+[Worker]     method close
+[Worker]     method constructor
+[Worker]     setter onerror
+[Worker]     setter onmessage
+[Worker]     setter onopen
+[Worker] interface EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     method addEventListener
+[Worker]     method constructor
+[Worker]     method dispatchEvent
+[Worker]     method removeEventListener
+[Worker] interface FaceDetector
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method detect
+[Worker] interface File : Blob
+[Worker]     attribute @@toStringTag
+[Worker]     getter lastModified
+[Worker]     getter lastModifiedDate
+[Worker]     getter name
+[Worker]     getter webkitRelativePath
+[Worker]     method constructor
+[Worker] interface FileList
+[Worker]     attribute @@toStringTag
+[Worker]     getter length
+[Worker]     method @@iterator
+[Worker]     method constructor
+[Worker]     method item
+[Worker] interface FileReader : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     attribute DONE
+[Worker]     attribute EMPTY
+[Worker]     attribute LOADING
+[Worker]     getter error
+[Worker]     getter onabort
+[Worker]     getter onerror
+[Worker]     getter onload
+[Worker]     getter onloadend
+[Worker]     getter onloadstart
+[Worker]     getter onprogress
+[Worker]     getter readyState
+[Worker]     getter result
+[Worker]     method abort
+[Worker]     method constructor
+[Worker]     method readAsArrayBuffer
+[Worker]     method readAsBinaryString
+[Worker]     method readAsDataURL
+[Worker]     method readAsText
+[Worker]     setter onabort
+[Worker]     setter onerror
+[Worker]     setter onload
+[Worker]     setter onloadend
+[Worker]     setter onloadstart
+[Worker]     setter onprogress
+[Worker] interface FileReaderSync
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method readAsArrayBuffer
+[Worker]     method readAsBinaryString
+[Worker]     method readAsDataURL
+[Worker]     method readAsText
+[Worker] interface FormData
+[Worker]     attribute @@toStringTag
+[Worker]     method @@iterator
+[Worker]     method append
+[Worker]     method constructor
+[Worker]     method delete
+[Worker]     method entries
+[Worker]     method forEach
+[Worker]     method get
+[Worker]     method getAll
+[Worker]     method has
+[Worker]     method keys
+[Worker]     method set
+[Worker]     method values
+[Worker] interface Headers
+[Worker]     attribute @@toStringTag
+[Worker]     method @@iterator
+[Worker]     method append
+[Worker]     method constructor
+[Worker]     method delete
+[Worker]     method entries
+[Worker]     method forEach
+[Worker]     method get
+[Worker]     method getAll
+[Worker]     method has
+[Worker]     method keys
+[Worker]     method set
+[Worker]     method values
+[Worker] interface IDBCursor
+[Worker]     attribute @@toStringTag
+[Worker]     getter direction
+[Worker]     getter key
+[Worker]     getter primaryKey
+[Worker]     getter source
+[Worker]     method advance
+[Worker]     method constructor
+[Worker]     method continue
+[Worker]     method continuePrimaryKey
+[Worker]     method delete
+[Worker]     method update
+[Worker] interface IDBCursorWithValue : IDBCursor
+[Worker]     attribute @@toStringTag
+[Worker]     getter value
+[Worker]     method constructor
+[Worker] interface IDBDatabase : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     getter name
+[Worker]     getter objectStoreNames
+[Worker]     getter onabort
+[Worker]     getter onclose
+[Worker]     getter onerror
+[Worker]     getter onversionchange
+[Worker]     getter version
+[Worker]     method close
+[Worker]     method constructor
+[Worker]     method createObjectStore
+[Worker]     method deleteObjectStore
+[Worker]     method transaction
+[Worker]     setter onabort
+[Worker]     setter onclose
+[Worker]     setter onerror
+[Worker]     setter onversionchange
+[Worker] interface IDBFactory
+[Worker]     attribute @@toStringTag
+[Worker]     method cmp
+[Worker]     method constructor
+[Worker]     method deleteDatabase
+[Worker]     method open
+[Worker]     method webkitGetDatabaseNames
+[Worker] interface IDBIndex
+[Worker]     attribute @@toStringTag
+[Worker]     getter keyPath
+[Worker]     getter multiEntry
+[Worker]     getter name
+[Worker]     getter objectStore
+[Worker]     getter unique
+[Worker]     method constructor
+[Worker]     method count
+[Worker]     method get
+[Worker]     method getAll
+[Worker]     method getAllKeys
+[Worker]     method getKey
+[Worker]     method openCursor
+[Worker]     method openKeyCursor
+[Worker]     setter name
+[Worker] interface IDBKeyRange
+[Worker]     static method bound
+[Worker]     static method lowerBound
+[Worker]     static method only
+[Worker]     static method upperBound
+[Worker]     attribute @@toStringTag
+[Worker]     getter lower
+[Worker]     getter lowerOpen
+[Worker]     getter upper
+[Worker]     getter upperOpen
+[Worker]     method constructor
+[Worker]     method includes
+[Worker] interface IDBObjectStore
+[Worker]     attribute @@toStringTag
+[Worker]     getter autoIncrement
+[Worker]     getter indexNames
+[Worker]     getter keyPath
+[Worker]     getter name
+[Worker]     getter transaction
+[Worker]     method add
+[Worker]     method clear
+[Worker]     method constructor
+[Worker]     method count
+[Worker]     method createIndex
+[Worker]     method delete
+[Worker]     method deleteIndex
+[Worker]     method get
+[Worker]     method getAll
+[Worker]     method getAllKeys
+[Worker]     method getKey
+[Worker]     method index
+[Worker]     method openCursor
+[Worker]     method openKeyCursor
+[Worker]     method put
+[Worker]     setter name
+[Worker] interface IDBObservation
+[Worker]     attribute @@toStringTag
+[Worker]     getter key
+[Worker]     getter type
+[Worker]     getter value
+[Worker]     method constructor
+[Worker] interface IDBObserver
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method observe
+[Worker]     method unobserve
+[Worker] interface IDBOpenDBRequest : IDBRequest
+[Worker]     attribute @@toStringTag
+[Worker]     getter onblocked
+[Worker]     getter onupgradeneeded
+[Worker]     method constructor
+[Worker]     setter onblocked
+[Worker]     setter onupgradeneeded
+[Worker] interface IDBRequest : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     getter error
+[Worker]     getter onerror
+[Worker]     getter onsuccess
+[Worker]     getter readyState
+[Worker]     getter result
+[Worker]     getter source
+[Worker]     getter transaction
+[Worker]     method constructor
+[Worker]     setter onerror
+[Worker]     setter onsuccess
+[Worker] interface IDBTransaction : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     getter db
+[Worker]     getter error
+[Worker]     getter mode
+[Worker]     getter objectStoreNames
+[Worker]     getter onabort
+[Worker]     getter oncomplete
+[Worker]     getter onerror
+[Worker]     method abort
+[Worker]     method constructor
+[Worker]     method objectStore
+[Worker]     setter onabort
+[Worker]     setter oncomplete
+[Worker]     setter onerror
+[Worker] interface IDBVersionChangeEvent : Event
+[Worker]     attribute @@toStringTag
+[Worker]     getter dataLoss
+[Worker]     getter dataLossMessage
+[Worker]     getter newVersion
+[Worker]     getter oldVersion
+[Worker]     method constructor
+[Worker] interface ImageBitmap
+[Worker]     attribute @@toStringTag
+[Worker]     getter height
+[Worker]     getter width
+[Worker]     method close
+[Worker]     method constructor
+[Worker] interface ImageData
+[Worker]     attribute @@toStringTag
+[Worker]     getter data
+[Worker]     getter dataUnion
+[Worker]     getter height
+[Worker]     getter width
+[Worker]     method constructor
+[Worker]     method createImageData
+[Worker]     method getColorSettings
+[Worker] interface MessageChannel
+[Worker]     attribute @@toStringTag
+[Worker]     getter port1
+[Worker]     getter port2
+[Worker]     method constructor
+[Worker] interface MessageEvent : Event
+[Worker]     attribute @@toStringTag
+[Worker]     getter data
+[Worker]     getter lastEventId
+[Worker]     getter origin
+[Worker]     getter ports
+[Worker]     getter source
+[Worker]     getter suborigin
+[Worker]     method constructor
+[Worker]     method initMessageEvent
+[Worker] interface MessagePort : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     getter onmessage
+[Worker]     method close
+[Worker]     method constructor
+[Worker]     method postMessage
+[Worker]     method start
+[Worker]     setter onmessage
+[Worker] interface NetworkInformation : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     getter downlinkMax
+[Worker]     getter onchange
+[Worker]     getter ontypechange
+[Worker]     getter type
+[Worker]     method constructor
+[Worker]     setter onchange
+[Worker]     setter ontypechange
+[Worker] interface Notification : EventTarget
+[Worker]     static getter maxActions
+[Worker]     static getter permission
+[Worker]     attribute @@toStringTag
+[Worker]     getter actions
+[Worker]     getter badge
+[Worker]     getter body
+[Worker]     getter data
+[Worker]     getter dir
+[Worker]     getter icon
+[Worker]     getter image
+[Worker]     getter lang
+[Worker]     getter onclick
+[Worker]     getter onclose
+[Worker]     getter onerror
+[Worker]     getter onshow
+[Worker]     getter renotify
+[Worker]     getter requireInteraction
+[Worker]     getter silent
+[Worker]     getter tag
+[Worker]     getter timestamp
+[Worker]     getter title
+[Worker]     getter vibrate
+[Worker]     method close
+[Worker]     method constructor
+[Worker]     setter onclick
+[Worker]     setter onclose
+[Worker]     setter onerror
+[Worker]     setter onshow
+[Worker] interface OffscreenCanvas : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     getter height
+[Worker]     getter width
+[Worker]     method constructor
+[Worker]     method convertToBlob
+[Worker]     method getContext
+[Worker]     method transferToImageBitmap
+[Worker]     setter height
+[Worker]     setter width
+[Worker] interface OffscreenCanvasRenderingContext2D
+[Worker]     attribute @@toStringTag
+[Worker]     getter canvas
+[Worker]     getter fillStyle
+[Worker]     getter filter
+[Worker]     getter globalAlpha
+[Worker]     getter globalCompositeOperation
+[Worker]     getter imageSmoothingEnabled
+[Worker]     getter imageSmoothingQuality
+[Worker]     getter lineCap
+[Worker]     getter lineDashOffset
+[Worker]     getter lineJoin
+[Worker]     getter lineWidth
+[Worker]     getter miterLimit
+[Worker]     getter shadowBlur
+[Worker]     getter shadowColor
+[Worker]     getter shadowOffsetX
+[Worker]     getter shadowOffsetY
+[Worker]     getter strokeStyle
+[Worker]     method arc
+[Worker]     method arcTo
+[Worker]     method beginPath
+[Worker]     method bezierCurveTo
+[Worker]     method clearRect
+[Worker]     method clip
+[Worker]     method closePath
+[Worker]     method commit
+[Worker]     method constructor
+[Worker]     method createImageData
+[Worker]     method createLinearGradient
+[Worker]     method createPattern
+[Worker]     method createRadialGradient
+[Worker]     method drawImage
+[Worker]     method ellipse
+[Worker]     method fill
+[Worker]     method fillRect
+[Worker]     method getImageData
+[Worker]     method getLineDash
+[Worker]     method isPointInPath
+[Worker]     method isPointInStroke
+[Worker]     method lineTo
+[Worker]     method moveTo
+[Worker]     method putImageData
+[Worker]     method quadraticCurveTo
+[Worker]     method rect
+[Worker]     method resetTransform
+[Worker]     method restore
+[Worker]     method rotate
+[Worker]     method save
+[Worker]     method scale
+[Worker]     method setLineDash
+[Worker]     method setTransform
+[Worker]     method stroke
+[Worker]     method strokeRect
+[Worker]     method transform
+[Worker]     method translate
+[Worker]     setter fillStyle
+[Worker]     setter filter
+[Worker]     setter globalAlpha
+[Worker]     setter globalCompositeOperation
+[Worker]     setter imageSmoothingEnabled
+[Worker]     setter imageSmoothingQuality
+[Worker]     setter lineCap
+[Worker]     setter lineDashOffset
+[Worker]     setter lineJoin
+[Worker]     setter lineWidth
+[Worker]     setter miterLimit
+[Worker]     setter shadowBlur
+[Worker]     setter shadowColor
+[Worker]     setter shadowOffsetX
+[Worker]     setter shadowOffsetY
+[Worker]     setter strokeStyle
+[Worker] interface Path2D
+[Worker]     attribute @@toStringTag
+[Worker]     method addPath
+[Worker]     method arc
+[Worker]     method arcTo
+[Worker]     method bezierCurveTo
+[Worker]     method closePath
+[Worker]     method constructor
+[Worker]     method ellipse
+[Worker]     method lineTo
+[Worker]     method moveTo
+[Worker]     method quadraticCurveTo
+[Worker]     method rect
+[Worker] interface PerformanceObserverEntryList
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method getEntries
+[Worker]     method getEntriesByName
+[Worker]     method getEntriesByType
+[Worker] interface PermissionStatus : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     getter onchange
+[Worker]     getter state
+[Worker]     method constructor
+[Worker]     setter onchange
+[Worker] interface Permissions
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method query
+[Worker]     method request
+[Worker]     method requestAll
+[Worker]     method revoke
+[Worker] interface ProgressEvent : Event
+[Worker]     attribute @@toStringTag
+[Worker]     getter lengthComputable
+[Worker]     getter loaded
+[Worker]     getter total
+[Worker]     method constructor
+[Worker] interface PromiseRejectionEvent : Event
+[Worker]     attribute @@toStringTag
+[Worker]     getter promise
+[Worker]     getter reason
+[Worker]     method constructor
+[Worker] interface ReadableStream
+[Worker]     getter locked
+[Worker]     method cancel
+[Worker]     method constructor
+[Worker]     method getReader
+[Worker]     method pipeThrough
+[Worker]     method pipeTo
+[Worker]     method tee
+[Worker] interface Request
+[Worker]     attribute @@toStringTag
+[Worker]     getter bodyUsed
+[Worker]     getter cache
+[Worker]     getter credentials
+[Worker]     getter headers
+[Worker]     getter integrity
+[Worker]     getter method
+[Worker]     getter mode
+[Worker]     getter redirect
+[Worker]     getter referrer
+[Worker]     getter referrerPolicy
+[Worker]     getter url
+[Worker]     method arrayBuffer
+[Worker]     method blob
+[Worker]     method clone
+[Worker]     method constructor
+[Worker]     method json
+[Worker]     method text
+[Worker] interface Response
+[Worker]     static method error
+[Worker]     static method redirect
+[Worker]     attribute @@toStringTag
+[Worker]     getter body
+[Worker]     getter bodyUsed
+[Worker]     getter headers
+[Worker]     getter ok
+[Worker]     getter redirected
+[Worker]     getter status
+[Worker]     getter statusText
+[Worker]     getter type
+[Worker]     getter url
+[Worker]     method arrayBuffer
+[Worker]     method blob
+[Worker]     method clone
+[Worker]     method constructor
+[Worker]     method json
+[Worker]     method text
+[Worker] interface ServiceWorkerRegistration : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     getter active
+[Worker]     getter backgroundFetch
+[Worker]     getter installing
+[Worker]     getter onupdatefound
+[Worker]     getter paymentManager
+[Worker]     getter pushManager
+[Worker]     getter scope
+[Worker]     getter sync
+[Worker]     getter waiting
+[Worker]     method constructor
+[Worker]     method getNotifications
+[Worker]     method showNotification
+[Worker]     method unregister
+[Worker]     method update
+[Worker]     setter onupdatefound
+[Worker] interface StorageManager
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method estimate
+[Worker]     method persisted
+[Worker] interface SubtleCrypto
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method decrypt
+[Worker]     method deriveBits
+[Worker]     method deriveKey
+[Worker]     method digest
+[Worker]     method encrypt
+[Worker]     method exportKey
+[Worker]     method generateKey
+[Worker]     method importKey
+[Worker]     method sign
+[Worker]     method unwrapKey
+[Worker]     method verify
+[Worker]     method wrapKey
+[Worker] interface TextDecoder
+[Worker]     attribute @@toStringTag
+[Worker]     getter encoding
+[Worker]     getter fatal
+[Worker]     getter ignoreBOM
+[Worker]     method constructor
+[Worker]     method decode
+[Worker] interface TextDetector
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method detect
+[Worker] interface TextEncoder
+[Worker]     attribute @@toStringTag
+[Worker]     getter encoding
+[Worker]     method constructor
+[Worker]     method encode
+[Worker] interface URL
+[Worker]     static method createObjectURL
+[Worker]     static method revokeObjectURL
+[Worker]     attribute @@toStringTag
+[Worker]     getter hash
+[Worker]     getter host
+[Worker]     getter hostname
+[Worker]     getter href
+[Worker]     getter origin
+[Worker]     getter password
+[Worker]     getter pathname
+[Worker]     getter port
+[Worker]     getter protocol
+[Worker]     getter search
+[Worker]     getter searchParams
+[Worker]     getter username
+[Worker]     method constructor
+[Worker]     method toString
+[Worker]     setter hash
+[Worker]     setter host
+[Worker]     setter hostname
+[Worker]     setter href
+[Worker]     setter password
+[Worker]     setter pathname
+[Worker]     setter port
+[Worker]     setter protocol
+[Worker]     setter search
+[Worker]     setter username
+[Worker] interface URLSearchParams
+[Worker]     attribute @@toStringTag
+[Worker]     method @@iterator
+[Worker]     method append
+[Worker]     method constructor
+[Worker]     method delete
+[Worker]     method entries
+[Worker]     method forEach
+[Worker]     method get
+[Worker]     method getAll
+[Worker]     method has
+[Worker]     method keys
+[Worker]     method set
+[Worker]     method toString
+[Worker]     method values
+[Worker] interface WebGL2RenderingContext
+[Worker]     attribute @@toStringTag
+[Worker]     attribute ACTIVE_ATTRIBUTES
+[Worker]     attribute ACTIVE_TEXTURE
+[Worker]     attribute ACTIVE_UNIFORMS
+[Worker]     attribute ACTIVE_UNIFORM_BLOCKS
+[Worker]     attribute ALIASED_LINE_WIDTH_RANGE
+[Worker]     attribute ALIASED_POINT_SIZE_RANGE
+[Worker]     attribute ALPHA
+[Worker]     attribute ALPHA_BITS
+[Worker]     attribute ALREADY_SIGNALED
+[Worker]     attribute ALWAYS
+[Worker]     attribute ANY_SAMPLES_PASSED
+[Worker]     attribute ANY_SAMPLES_PASSED_CONSERVATIVE
+[Worker]     attribute ARRAY_BUFFER
+[Worker]     attribute ARRAY_BUFFER_BINDING
+[Worker]     attribute ATTACHED_SHADERS
+[Worker]     attribute BACK
+[Worker]     attribute BLEND
+[Worker]     attribute BLEND_COLOR
+[Worker]     attribute BLEND_DST_ALPHA
+[Worker]     attribute BLEND_DST_RGB
+[Worker]     attribute BLEND_EQUATION
+[Worker]     attribute BLEND_EQUATION_ALPHA
+[Worker]     attribute BLEND_EQUATION_RGB
+[Worker]     attribute BLEND_SRC_ALPHA
+[Worker]     attribute BLEND_SRC_RGB
+[Worker]     attribute BLUE_BITS
+[Worker]     attribute BOOL
+[Worker]     attribute BOOL_VEC2
+[Worker]     attribute BOOL_VEC3
+[Worker]     attribute BOOL_VEC4
+[Worker]     attribute BROWSER_DEFAULT_WEBGL
+[Worker]     attribute BUFFER_SIZE
+[Worker]     attribute BUFFER_USAGE
+[Worker]     attribute BYTE
+[Worker]     attribute CCW
+[Worker]     attribute CLAMP_TO_EDGE
+[Worker]     attribute COLOR
+[Worker]     attribute COLOR_ATTACHMENT0
+[Worker]     attribute COLOR_ATTACHMENT1
+[Worker]     attribute COLOR_ATTACHMENT10
+[Worker]     attribute COLOR_ATTACHMENT11
+[Worker]     attribute COLOR_ATTACHMENT12
+[Worker]     attribute COLOR_ATTACHMENT13
+[Worker]     attribute COLOR_ATTACHMENT14
+[Worker]     attribute COLOR_ATTACHMENT15
+[Worker]     attribute COLOR_ATTACHMENT2
+[Worker]     attribute COLOR_ATTACHMENT3
+[Worker]     attribute COLOR_ATTACHMENT4
+[Worker]     attribute COLOR_ATTACHMENT5
+[Worker]     attribute COLOR_ATTACHMENT6
+[Worker]     attribute COLOR_ATTACHMENT7
+[Worker]     attribute COLOR_ATTACHMENT8
+[Worker]     attribute COLOR_ATTACHMENT9
+[Worker]     attribute COLOR_BUFFER_BIT
+[Worker]     attribute COLOR_CLEAR_VALUE
+[Worker]     attribute COLOR_WRITEMASK
+[Worker]     attribute COMPARE_REF_TO_TEXTURE
+[Worker]     attribute COMPILE_STATUS
+[Worker]     attribute COMPRESSED_TEXTURE_FORMATS
+[Worker]     attribute CONDITION_SATISFIED
+[Worker]     attribute CONSTANT_ALPHA
+[Worker]     attribute CONSTANT_COLOR
+[Worker]     attribute CONTEXT_LOST_WEBGL
+[Worker]     attribute COPY_READ_BUFFER
+[Worker]     attribute COPY_READ_BUFFER_BINDING
+[Worker]     attribute COPY_WRITE_BUFFER
+[Worker]     attribute COPY_WRITE_BUFFER_BINDING
+[Worker]     attribute CULL_FACE
+[Worker]     attribute CULL_FACE_MODE
+[Worker]     attribute CURRENT_PROGRAM
+[Worker]     attribute CURRENT_QUERY
+[Worker]     attribute CURRENT_VERTEX_ATTRIB
+[Worker]     attribute CW
+[Worker]     attribute DECR
+[Worker]     attribute DECR_WRAP
+[Worker]     attribute DELETE_STATUS
+[Worker]     attribute DEPTH
+[Worker]     attribute DEPTH24_STENCIL8
+[Worker]     attribute DEPTH32F_STENCIL8
+[Worker]     attribute DEPTH_ATTACHMENT
+[Worker]     attribute DEPTH_BITS
+[Worker]     attribute DEPTH_BUFFER_BIT
+[Worker]     attribute DEPTH_CLEAR_VALUE
+[Worker]     attribute DEPTH_COMPONENT
+[Worker]     attribute DEPTH_COMPONENT16
+[Worker]     attribute DEPTH_COMPONENT24
+[Worker]     attribute DEPTH_COMPONENT32F
+[Worker]     attribute DEPTH_FUNC
+[Worker]     attribute DEPTH_RANGE
+[Worker]     attribute DEPTH_STENCIL
+[Worker]     attribute DEPTH_STENCIL_ATTACHMENT
+[Worker]     attribute DEPTH_TEST
+[Worker]     attribute DEPTH_WRITEMASK
+[Worker]     attribute DITHER
+[Worker]     attribute DONT_CARE
+[Worker]     attribute DRAW_BUFFER0
+[Worker]     attribute DRAW_BUFFER1
+[Worker]     attribute DRAW_BUFFER10
+[Worker]     attribute DRAW_BUFFER11
+[Worker]     attribute DRAW_BUFFER12
+[Worker]     attribute DRAW_BUFFER13
+[Worker]     attribute DRAW_BUFFER14
+[Worker]     attribute DRAW_BUFFER15
+[Worker]     attribute DRAW_BUFFER2
+[Worker]     attribute DRAW_BUFFER3
+[Worker]     attribute DRAW_BUFFER4
+[Worker]     attribute DRAW_BUFFER5
+[Worker]     attribute DRAW_BUFFER6
+[Worker]     attribute DRAW_BUFFER7
+[Worker]     attribute DRAW_BUFFER8
+[Worker]     attribute DRAW_BUFFER9
+[Worker]     attribute DRAW_FRAMEBUFFER
+[Worker]     attribute DRAW_FRAMEBUFFER_BINDING
+[Worker]     attribute DST_ALPHA
+[Worker]     attribute DST_COLOR
+[Worker]     attribute DYNAMIC_COPY
+[Worker]     attribute DYNAMIC_DRAW
+[Worker]     attribute DYNAMIC_READ
+[Worker]     attribute ELEMENT_ARRAY_BUFFER
+[Worker]     attribute ELEMENT_ARRAY_BUFFER_BINDING
+[Worker]     attribute EQUAL
+[Worker]     attribute FASTEST
+[Worker]     attribute FLOAT
+[Worker]     attribute FLOAT_32_UNSIGNED_INT_24_8_REV
+[Worker]     attribute FLOAT_MAT2
+[Worker]     attribute FLOAT_MAT2x3
+[Worker]     attribute FLOAT_MAT2x4
+[Worker]     attribute FLOAT_MAT3
+[Worker]     attribute FLOAT_MAT3x2
+[Worker]     attribute FLOAT_MAT3x4
+[Worker]     attribute FLOAT_MAT4
+[Worker]     attribute FLOAT_MAT4x2
+[Worker]     attribute FLOAT_MAT4x3
+[Worker]     attribute FLOAT_VEC2
+[Worker]     attribute FLOAT_VEC3
+[Worker]     attribute FLOAT_VEC4
+[Worker]     attribute FRAGMENT_SHADER
+[Worker]     attribute FRAGMENT_SHADER_DERIVATIVE_HINT
+[Worker]     attribute FRAMEBUFFER
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_BLUE_SIZE
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_GREEN_SIZE
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_OBJECT_NAME
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_RED_SIZE
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL
+[Worker]     attribute FRAMEBUFFER_BINDING
+[Worker]     attribute FRAMEBUFFER_COMPLETE
+[Worker]     attribute FRAMEBUFFER_DEFAULT
+[Worker]     attribute FRAMEBUFFER_INCOMPLETE_ATTACHMENT
+[Worker]     attribute FRAMEBUFFER_INCOMPLETE_DIMENSIONS
+[Worker]     attribute FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
+[Worker]     attribute FRAMEBUFFER_INCOMPLETE_MULTISAMPLE
+[Worker]     attribute FRAMEBUFFER_UNSUPPORTED
+[Worker]     attribute FRONT
+[Worker]     attribute FRONT_AND_BACK
+[Worker]     attribute FRONT_FACE
+[Worker]     attribute FUNC_ADD
+[Worker]     attribute FUNC_REVERSE_SUBTRACT
+[Worker]     attribute FUNC_SUBTRACT
+[Worker]     attribute GENERATE_MIPMAP_HINT
+[Worker]     attribute GEQUAL
+[Worker]     attribute GREATER
+[Worker]     attribute GREEN_BITS
+[Worker]     attribute HALF_FLOAT
+[Worker]     attribute HIGH_FLOAT
+[Worker]     attribute HIGH_INT
+[Worker]     attribute IMPLEMENTATION_COLOR_READ_FORMAT
+[Worker]     attribute IMPLEMENTATION_COLOR_READ_TYPE
+[Worker]     attribute INCR
+[Worker]     attribute INCR_WRAP
+[Worker]     attribute INT
+[Worker]     attribute INTERLEAVED_ATTRIBS
+[Worker]     attribute INT_2_10_10_10_REV
+[Worker]     attribute INT_SAMPLER_2D
+[Worker]     attribute INT_SAMPLER_2D_ARRAY
+[Worker]     attribute INT_SAMPLER_3D
+[Worker]     attribute INT_SAMPLER_CUBE
+[Worker]     attribute INT_VEC2
+[Worker]     attribute INT_VEC3
+[Worker]     attribute INT_VEC4
+[Worker]     attribute INVALID_ENUM
+[Worker]     attribute INVALID_FRAMEBUFFER_OPERATION
+[Worker]     attribute INVALID_INDEX
+[Worker]     attribute INVALID_OPERATION
+[Worker]     attribute INVALID_VALUE
+[Worker]     attribute INVERT
+[Worker]     attribute KEEP
+[Worker]     attribute LEQUAL
+[Worker]     attribute LESS
+[Worker]     attribute LINEAR
+[Worker]     attribute LINEAR_MIPMAP_LINEAR
+[Worker]     attribute LINEAR_MIPMAP_NEAREST
+[Worker]     attribute LINES
+[Worker]     attribute LINE_LOOP
+[Worker]     attribute LINE_STRIP
+[Worker]     attribute LINE_WIDTH
+[Worker]     attribute LINK_STATUS
+[Worker]     attribute LOW_FLOAT
+[Worker]     attribute LOW_INT
+[Worker]     attribute LUMINANCE
+[Worker]     attribute LUMINANCE_ALPHA
+[Worker]     attribute MAX
+[Worker]     attribute MAX_3D_TEXTURE_SIZE
+[Worker]     attribute MAX_ARRAY_TEXTURE_LAYERS
+[Worker]     attribute MAX_CLIENT_WAIT_TIMEOUT_WEBGL
+[Worker]     attribute MAX_COLOR_ATTACHMENTS
+[Worker]     attribute MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS
+[Worker]     attribute MAX_COMBINED_TEXTURE_IMAGE_UNITS
+[Worker]     attribute MAX_COMBINED_UNIFORM_BLOCKS
+[Worker]     attribute MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS
+[Worker]     attribute MAX_CUBE_MAP_TEXTURE_SIZE
+[Worker]     attribute MAX_DRAW_BUFFERS
+[Worker]     attribute MAX_ELEMENTS_INDICES
+[Worker]     attribute MAX_ELEMENTS_VERTICES
+[Worker]     attribute MAX_ELEMENT_INDEX
+[Worker]     attribute MAX_FRAGMENT_INPUT_COMPONENTS
+[Worker]     attribute MAX_FRAGMENT_UNIFORM_BLOCKS
+[Worker]     attribute MAX_FRAGMENT_UNIFORM_COMPONENTS
+[Worker]     attribute MAX_FRAGMENT_UNIFORM_VECTORS
+[Worker]     attribute MAX_PROGRAM_TEXEL_OFFSET
+[Worker]     attribute MAX_RENDERBUFFER_SIZE
+[Worker]     attribute MAX_SAMPLES
+[Worker]     attribute MAX_SERVER_WAIT_TIMEOUT
+[Worker]     attribute MAX_TEXTURE_IMAGE_UNITS
+[Worker]     attribute MAX_TEXTURE_LOD_BIAS
+[Worker]     attribute MAX_TEXTURE_SIZE
+[Worker]     attribute MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+[Worker]     attribute MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+[Worker]     attribute MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+[Worker]     attribute MAX_UNIFORM_BLOCK_SIZE
+[Worker]     attribute MAX_UNIFORM_BUFFER_BINDINGS
+[Worker]     attribute MAX_VARYING_COMPONENTS
+[Worker]     attribute MAX_VARYING_VECTORS
+[Worker]     attribute MAX_VERTEX_ATTRIBS
+[Worker]     attribute MAX_VERTEX_OUTPUT_COMPONENTS
+[Worker]     attribute MAX_VERTEX_TEXTURE_IMAGE_UNITS
+[Worker]     attribute MAX_VERTEX_UNIFORM_BLOCKS
+[Worker]     attribute MAX_VERTEX_UNIFORM_COMPONENTS
+[Worker]     attribute MAX_VERTEX_UNIFORM_VECTORS
+[Worker]     attribute MAX_VIEWPORT_DIMS
+[Worker]     attribute MEDIUM_FLOAT
+[Worker]     attribute MEDIUM_INT
+[Worker]     attribute MIN
+[Worker]     attribute MIN_PROGRAM_TEXEL_OFFSET
+[Worker]     attribute MIRRORED_REPEAT
+[Worker]     attribute NEAREST
+[Worker]     attribute NEAREST_MIPMAP_LINEAR
+[Worker]     attribute NEAREST_MIPMAP_NEAREST
+[Worker]     attribute NEVER
+[Worker]     attribute NICEST
+[Worker]     attribute NONE
+[Worker]     attribute NOTEQUAL
+[Worker]     attribute NO_ERROR
+[Worker]     attribute OBJECT_TYPE
+[Worker]     attribute ONE
+[Worker]     attribute ONE_MINUS_CONSTANT_ALPHA
+[Worker]     attribute ONE_MINUS_CONSTANT_COLOR
+[Worker]     attribute ONE_MINUS_DST_ALPHA
+[Worker]     attribute ONE_MINUS_DST_COLOR
+[Worker]     attribute ONE_MINUS_SRC_ALPHA
+[Worker]     attribute ONE_MINUS_SRC_COLOR
+[Worker]     attribute OUT_OF_MEMORY
+[Worker]     attribute PACK_ALIGNMENT
+[Worker]     attribute PACK_ROW_LENGTH
+[Worker]     attribute PACK_SKIP_PIXELS
+[Worker]     attribute PACK_SKIP_ROWS
+[Worker]     attribute PIXEL_PACK_BUFFER
+[Worker]     attribute PIXEL_PACK_BUFFER_BINDING
+[Worker]     attribute PIXEL_UNPACK_BUFFER
+[Worker]     attribute PIXEL_UNPACK_BUFFER_BINDING
+[Worker]     attribute POINTS
+[Worker]     attribute POLYGON_OFFSET_FACTOR
+[Worker]     attribute POLYGON_OFFSET_FILL
+[Worker]     attribute POLYGON_OFFSET_UNITS
+[Worker]     attribute QUERY_RESULT
+[Worker]     attribute QUERY_RESULT_AVAILABLE
+[Worker]     attribute R11F_G11F_B10F
+[Worker]     attribute R16F
+[Worker]     attribute R16I
+[Worker]     attribute R16UI
+[Worker]     attribute R32F
+[Worker]     attribute R32I
+[Worker]     attribute R32UI
+[Worker]     attribute R8
+[Worker]     attribute R8I
+[Worker]     attribute R8UI
+[Worker]     attribute R8_SNORM
+[Worker]     attribute RASTERIZER_DISCARD
+[Worker]     attribute READ_BUFFER
+[Worker]     attribute READ_FRAMEBUFFER
+[Worker]     attribute READ_FRAMEBUFFER_BINDING
+[Worker]     attribute RED
+[Worker]     attribute RED_BITS
+[Worker]     attribute RED_INTEGER
+[Worker]     attribute RENDERBUFFER
+[Worker]     attribute RENDERBUFFER_ALPHA_SIZE
+[Worker]     attribute RENDERBUFFER_BINDING
+[Worker]     attribute RENDERBUFFER_BLUE_SIZE
+[Worker]     attribute RENDERBUFFER_DEPTH_SIZE
+[Worker]     attribute RENDERBUFFER_GREEN_SIZE
+[Worker]     attribute RENDERBUFFER_HEIGHT
+[Worker]     attribute RENDERBUFFER_INTERNAL_FORMAT
+[Worker]     attribute RENDERBUFFER_RED_SIZE
+[Worker]     attribute RENDERBUFFER_SAMPLES
+[Worker]     attribute RENDERBUFFER_STENCIL_SIZE
+[Worker]     attribute RENDERBUFFER_WIDTH
+[Worker]     attribute RENDERER
+[Worker]     attribute REPEAT
+[Worker]     attribute REPLACE
+[Worker]     attribute RG
+[Worker]     attribute RG16F
+[Worker]     attribute RG16I
+[Worker]     attribute RG16UI
+[Worker]     attribute RG32F
+[Worker]     attribute RG32I
+[Worker]     attribute RG32UI
+[Worker]     attribute RG8
+[Worker]     attribute RG8I
+[Worker]     attribute RG8UI
+[Worker]     attribute RG8_SNORM
+[Worker]     attribute RGB
+[Worker]     attribute RGB10_A2
+[Worker]     attribute RGB10_A2UI
+[Worker]     attribute RGB16F
+[Worker]     attribute RGB16I
+[Worker]     attribute RGB16UI
+[Worker]     attribute RGB32F
+[Worker]     attribute RGB32I
+[Worker]     attribute RGB32UI
+[Worker]     attribute RGB565
+[Worker]     attribute RGB5_A1
+[Worker]     attribute RGB8
+[Worker]     attribute RGB8I
+[Worker]     attribute RGB8UI
+[Worker]     attribute RGB8_SNORM
+[Worker]     attribute RGB9_E5
+[Worker]     attribute RGBA
+[Worker]     attribute RGBA16F
+[Worker]     attribute RGBA16I
+[Worker]     attribute RGBA16UI
+[Worker]     attribute RGBA32F
+[Worker]     attribute RGBA32I
+[Worker]     attribute RGBA32UI
+[Worker]     attribute RGBA4
+[Worker]     attribute RGBA8
+[Worker]     attribute RGBA8I
+[Worker]     attribute RGBA8UI
+[Worker]     attribute RGBA8_SNORM
+[Worker]     attribute RGBA_INTEGER
+[Worker]     attribute RGB_INTEGER
+[Worker]     attribute RG_INTEGER
+[Worker]     attribute SAMPLER_2D
+[Worker]     attribute SAMPLER_2D_ARRAY
+[Worker]     attribute SAMPLER_2D_ARRAY_SHADOW
+[Worker]     attribute SAMPLER_2D_SHADOW
+[Worker]     attribute SAMPLER_3D
+[Worker]     attribute SAMPLER_BINDING
+[Worker]     attribute SAMPLER_CUBE
+[Worker]     attribute SAMPLER_CUBE_SHADOW
+[Worker]     attribute SAMPLES
+[Worker]     attribute SAMPLE_ALPHA_TO_COVERAGE
+[Worker]     attribute SAMPLE_BUFFERS
+[Worker]     attribute SAMPLE_COVERAGE
+[Worker]     attribute SAMPLE_COVERAGE_INVERT
+[Worker]     attribute SAMPLE_COVERAGE_VALUE
+[Worker]     attribute SCISSOR_BOX
+[Worker]     attribute SCISSOR_TEST
+[Worker]     attribute SEPARATE_ATTRIBS
+[Worker]     attribute SHADER_TYPE
+[Worker]     attribute SHADING_LANGUAGE_VERSION
+[Worker]     attribute SHORT
+[Worker]     attribute SIGNALED
+[Worker]     attribute SIGNED_NORMALIZED
+[Worker]     attribute SRC_ALPHA
+[Worker]     attribute SRC_ALPHA_SATURATE
+[Worker]     attribute SRC_COLOR
+[Worker]     attribute SRGB
+[Worker]     attribute SRGB8
+[Worker]     attribute SRGB8_ALPHA8
+[Worker]     attribute STATIC_COPY
+[Worker]     attribute STATIC_DRAW
+[Worker]     attribute STATIC_READ
+[Worker]     attribute STENCIL
+[Worker]     attribute STENCIL_ATTACHMENT
+[Worker]     attribute STENCIL_BACK_FAIL
+[Worker]     attribute STENCIL_BACK_FUNC
+[Worker]     attribute STENCIL_BACK_PASS_DEPTH_FAIL
+[Worker]     attribute STENCIL_BACK_PASS_DEPTH_PASS
+[Worker]     attribute STENCIL_BACK_REF
+[Worker]     attribute STENCIL_BACK_VALUE_MASK
+[Worker]     attribute STENCIL_BACK_WRITEMASK
+[Worker]     attribute STENCIL_BITS
+[Worker]     attribute STENCIL_BUFFER_BIT
+[Worker]     attribute STENCIL_CLEAR_VALUE
+[Worker]     attribute STENCIL_FAIL
+[Worker]     attribute STENCIL_FUNC
+[Worker]     attribute STENCIL_INDEX
+[Worker]     attribute STENCIL_INDEX8
+[Worker]     attribute STENCIL_PASS_DEPTH_FAIL
+[Worker]     attribute STENCIL_PASS_DEPTH_PASS
+[Worker]     attribute STENCIL_REF
+[Worker]     attribute STENCIL_TEST
+[Worker]     attribute STENCIL_VALUE_MASK
+[Worker]     attribute STENCIL_WRITEMASK
+[Worker]     attribute STREAM_COPY
+[Worker]     attribute STREAM_DRAW
+[Worker]     attribute STREAM_READ
+[Worker]     attribute SUBPIXEL_BITS
+[Worker]     attribute SYNC_CONDITION
+[Worker]     attribute SYNC_FENCE
+[Worker]     attribute SYNC_FLAGS
+[Worker]     attribute SYNC_FLUSH_COMMANDS_BIT
+[Worker]     attribute SYNC_GPU_COMMANDS_COMPLETE
+[Worker]     attribute SYNC_STATUS
+[Worker]     attribute TEXTURE
+[Worker]     attribute TEXTURE0
+[Worker]     attribute TEXTURE1
+[Worker]     attribute TEXTURE10
+[Worker]     attribute TEXTURE11
+[Worker]     attribute TEXTURE12
+[Worker]     attribute TEXTURE13
+[Worker]     attribute TEXTURE14
+[Worker]     attribute TEXTURE15
+[Worker]     attribute TEXTURE16
+[Worker]     attribute TEXTURE17
+[Worker]     attribute TEXTURE18
+[Worker]     attribute TEXTURE19
+[Worker]     attribute TEXTURE2
+[Worker]     attribute TEXTURE20
+[Worker]     attribute TEXTURE21
+[Worker]     attribute TEXTURE22
+[Worker]     attribute TEXTURE23
+[Worker]     attribute TEXTURE24
+[Worker]     attribute TEXTURE25
+[Worker]     attribute TEXTURE26
+[Worker]     attribute TEXTURE27
+[Worker]     attribute TEXTURE28
+[Worker]     attribute TEXTURE29
+[Worker]     attribute TEXTURE3
+[Worker]     attribute TEXTURE30
+[Worker]     attribute TEXTURE31
+[Worker]     attribute TEXTURE4
+[Worker]     attribute TEXTURE5
+[Worker]     attribute TEXTURE6
+[Worker]     attribute TEXTURE7
+[Worker]     attribute TEXTURE8
+[Worker]     attribute TEXTURE9
+[Worker]     attribute TEXTURE_2D
+[Worker]     attribute TEXTURE_2D_ARRAY
+[Worker]     attribute TEXTURE_3D
+[Worker]     attribute TEXTURE_BASE_LEVEL
+[Worker]     attribute TEXTURE_BINDING_2D
+[Worker]     attribute TEXTURE_BINDING_2D_ARRAY
+[Worker]     attribute TEXTURE_BINDING_3D
+[Worker]     attribute TEXTURE_BINDING_CUBE_MAP
+[Worker]     attribute TEXTURE_COMPARE_FUNC
+[Worker]     attribute TEXTURE_COMPARE_MODE
+[Worker]     attribute TEXTURE_CUBE_MAP
+[Worker]     attribute TEXTURE_CUBE_MAP_NEGATIVE_X
+[Worker]     attribute TEXTURE_CUBE_MAP_NEGATIVE_Y
+[Worker]     attribute TEXTURE_CUBE_MAP_NEGATIVE_Z
+[Worker]     attribute TEXTURE_CUBE_MAP_POSITIVE_X
+[Worker]     attribute TEXTURE_CUBE_MAP_POSITIVE_Y
+[Worker]     attribute TEXTURE_CUBE_MAP_POSITIVE_Z
+[Worker]     attribute TEXTURE_IMMUTABLE_FORMAT
+[Worker]     attribute TEXTURE_IMMUTABLE_LEVELS
+[Worker]     attribute TEXTURE_MAG_FILTER
+[Worker]     attribute TEXTURE_MAX_LEVEL
+[Worker]     attribute TEXTURE_MAX_LOD
+[Worker]     attribute TEXTURE_MIN_FILTER
+[Worker]     attribute TEXTURE_MIN_LOD
+[Worker]     attribute TEXTURE_WRAP_R
+[Worker]     attribute TEXTURE_WRAP_S
+[Worker]     attribute TEXTURE_WRAP_T
+[Worker]     attribute TIMEOUT_EXPIRED
+[Worker]     attribute TIMEOUT_IGNORED
+[Worker]     attribute TRANSFORM_FEEDBACK
+[Worker]     attribute TRANSFORM_FEEDBACK_ACTIVE
+[Worker]     attribute TRANSFORM_FEEDBACK_BINDING
+[Worker]     attribute TRANSFORM_FEEDBACK_BUFFER
+[Worker]     attribute TRANSFORM_FEEDBACK_BUFFER_BINDING
+[Worker]     attribute TRANSFORM_FEEDBACK_BUFFER_MODE
+[Worker]     attribute TRANSFORM_FEEDBACK_BUFFER_SIZE
+[Worker]     attribute TRANSFORM_FEEDBACK_BUFFER_START
+[Worker]     attribute TRANSFORM_FEEDBACK_PAUSED
+[Worker]     attribute TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+[Worker]     attribute TRANSFORM_FEEDBACK_VARYINGS
+[Worker]     attribute TRIANGLES
+[Worker]     attribute TRIANGLE_FAN
+[Worker]     attribute TRIANGLE_STRIP
+[Worker]     attribute UNIFORM_ARRAY_STRIDE
+[Worker]     attribute UNIFORM_BLOCK_ACTIVE_UNIFORMS
+[Worker]     attribute UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES
+[Worker]     attribute UNIFORM_BLOCK_BINDING
+[Worker]     attribute UNIFORM_BLOCK_DATA_SIZE
+[Worker]     attribute UNIFORM_BLOCK_INDEX
+[Worker]     attribute UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER
+[Worker]     attribute UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER
+[Worker]     attribute UNIFORM_BUFFER
+[Worker]     attribute UNIFORM_BUFFER_BINDING
+[Worker]     attribute UNIFORM_BUFFER_OFFSET_ALIGNMENT
+[Worker]     attribute UNIFORM_BUFFER_SIZE
+[Worker]     attribute UNIFORM_BUFFER_START
+[Worker]     attribute UNIFORM_IS_ROW_MAJOR
+[Worker]     attribute UNIFORM_MATRIX_STRIDE
+[Worker]     attribute UNIFORM_OFFSET
+[Worker]     attribute UNIFORM_SIZE
+[Worker]     attribute UNIFORM_TYPE
+[Worker]     attribute UNPACK_ALIGNMENT
+[Worker]     attribute UNPACK_COLORSPACE_CONVERSION_WEBGL
+[Worker]     attribute UNPACK_FLIP_Y_WEBGL
+[Worker]     attribute UNPACK_IMAGE_HEIGHT
+[Worker]     attribute UNPACK_PREMULTIPLY_ALPHA_WEBGL
+[Worker]     attribute UNPACK_ROW_LENGTH
+[Worker]     attribute UNPACK_SKIP_IMAGES
+[Worker]     attribute UNPACK_SKIP_PIXELS
+[Worker]     attribute UNPACK_SKIP_ROWS
+[Worker]     attribute UNSIGNALED
+[Worker]     attribute UNSIGNED_BYTE
+[Worker]     attribute UNSIGNED_INT
+[Worker]     attribute UNSIGNED_INT_10F_11F_11F_REV
+[Worker]     attribute UNSIGNED_INT_24_8
+[Worker]     attribute UNSIGNED_INT_2_10_10_10_REV
+[Worker]     attribute UNSIGNED_INT_5_9_9_9_REV
+[Worker]     attribute UNSIGNED_INT_SAMPLER_2D
+[Worker]     attribute UNSIGNED_INT_SAMPLER_2D_ARRAY
+[Worker]     attribute UNSIGNED_INT_SAMPLER_3D
+[Worker]     attribute UNSIGNED_INT_SAMPLER_CUBE
+[Worker]     attribute UNSIGNED_INT_VEC2
+[Worker]     attribute UNSIGNED_INT_VEC3
+[Worker]     attribute UNSIGNED_INT_VEC4
+[Worker]     attribute UNSIGNED_NORMALIZED
+[Worker]     attribute UNSIGNED_SHORT
+[Worker]     attribute UNSIGNED_SHORT_4_4_4_4
+[Worker]     attribute UNSIGNED_SHORT_5_5_5_1
+[Worker]     attribute UNSIGNED_SHORT_5_6_5
+[Worker]     attribute VALIDATE_STATUS
+[Worker]     attribute VENDOR
+[Worker]     attribute VERSION
+[Worker]     attribute VERTEX_ARRAY_BINDING
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_DIVISOR
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_ENABLED
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_INTEGER
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_NORMALIZED
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_POINTER
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_SIZE
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_STRIDE
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_TYPE
+[Worker]     attribute VERTEX_SHADER
+[Worker]     attribute VIEWPORT
+[Worker]     attribute WAIT_FAILED
+[Worker]     attribute ZERO
+[Worker]     getter canvas
+[Worker]     getter drawingBufferHeight
+[Worker]     getter drawingBufferWidth
+[Worker]     method activeTexture
+[Worker]     method attachShader
+[Worker]     method beginQuery
+[Worker]     method beginTransformFeedback
+[Worker]     method bindAttribLocation
+[Worker]     method bindBuffer
+[Worker]     method bindBufferBase
+[Worker]     method bindBufferRange
+[Worker]     method bindFramebuffer
+[Worker]     method bindRenderbuffer
+[Worker]     method bindSampler
+[Worker]     method bindTexture
+[Worker]     method bindTransformFeedback
+[Worker]     method bindVertexArray
+[Worker]     method blendColor
+[Worker]     method blendEquation
+[Worker]     method blendEquationSeparate
+[Worker]     method blendFunc
+[Worker]     method blendFuncSeparate
+[Worker]     method blitFramebuffer
+[Worker]     method bufferData
+[Worker]     method bufferSubData
+[Worker]     method checkFramebufferStatus
+[Worker]     method clear
+[Worker]     method clearBufferfi
+[Worker]     method clearBufferfv
+[Worker]     method clearBufferiv
+[Worker]     method clearBufferuiv
+[Worker]     method clearColor
+[Worker]     method clearDepth
+[Worker]     method clearStencil
+[Worker]     method clientWaitSync
+[Worker]     method colorMask
+[Worker]     method commit
+[Worker]     method compileShader
+[Worker]     method compressedTexImage2D
+[Worker]     method compressedTexImage3D
+[Worker]     method compressedTexSubImage2D
+[Worker]     method compressedTexSubImage3D
+[Worker]     method constructor
+[Worker]     method copyBufferSubData
+[Worker]     method copyTexImage2D
+[Worker]     method copyTexSubImage2D
+[Worker]     method copyTexSubImage3D
+[Worker]     method createBuffer
+[Worker]     method createFramebuffer
+[Worker]     method createProgram
+[Worker]     method createQuery
+[Worker]     method createRenderbuffer
+[Worker]     method createSampler
+[Worker]     method createShader
+[Worker]     method createTexture
+[Worker]     method createTransformFeedback
+[Worker]     method createVertexArray
+[Worker]     method cullFace
+[Worker]     method deleteBuffer
+[Worker]     method deleteFramebuffer
+[Worker]     method deleteProgram
+[Worker]     method deleteQuery
+[Worker]     method deleteRenderbuffer
+[Worker]     method deleteSampler
+[Worker]     method deleteShader
+[Worker]     method deleteSync
+[Worker]     method deleteTexture
+[Worker]     method deleteTransformFeedback
+[Worker]     method deleteVertexArray
+[Worker]     method depthFunc
+[Worker]     method depthMask
+[Worker]     method depthRange
+[Worker]     method detachShader
+[Worker]     method disable
+[Worker]     method disableVertexAttribArray
+[Worker]     method drawArrays
+[Worker]     method drawArraysInstanced
+[Worker]     method drawBuffers
+[Worker]     method drawElements
+[Worker]     method drawElementsInstanced
+[Worker]     method drawRangeElements
+[Worker]     method enable
+[Worker]     method enableVertexAttribArray
+[Worker]     method endQuery
+[Worker]     method endTransformFeedback
+[Worker]     method fenceSync
+[Worker]     method finish
+[Worker]     method flush
+[Worker]     method framebufferRenderbuffer
+[Worker]     method framebufferTexture2D
+[Worker]     method framebufferTextureLayer
+[Worker]     method frontFace
+[Worker]     method generateMipmap
+[Worker]     method getActiveAttrib
+[Worker]     method getActiveUniform
+[Worker]     method getActiveUniformBlockName
+[Worker]     method getActiveUniformBlockParameter
+[Worker]     method getActiveUniforms
+[Worker]     method getAttachedShaders
+[Worker]     method getAttribLocation
+[Worker]     method getBufferParameter
+[Worker]     method getBufferSubData
+[Worker]     method getContextAttributes
+[Worker]     method getError
+[Worker]     method getExtension
+[Worker]     method getFragDataLocation
+[Worker]     method getFramebufferAttachmentParameter
+[Worker]     method getIndexedParameter
+[Worker]     method getInternalformatParameter
+[Worker]     method getParameter
+[Worker]     method getProgramInfoLog
+[Worker]     method getProgramParameter
+[Worker]     method getQuery
+[Worker]     method getQueryParameter
+[Worker]     method getRenderbufferParameter
+[Worker]     method getSamplerParameter
+[Worker]     method getShaderInfoLog
+[Worker]     method getShaderParameter
+[Worker]     method getShaderPrecisionFormat
+[Worker]     method getShaderSource
+[Worker]     method getSupportedExtensions
+[Worker]     method getSyncParameter
+[Worker]     method getTexParameter
+[Worker]     method getTransformFeedbackVarying
+[Worker]     method getUniform
+[Worker]     method getUniformBlockIndex
+[Worker]     method getUniformIndices
+[Worker]     method getUniformLocation
+[Worker]     method getVertexAttrib
+[Worker]     method getVertexAttribOffset
+[Worker]     method hint
+[Worker]     method invalidateFramebuffer
+[Worker]     method invalidateSubFramebuffer
+[Worker]     method isBuffer
+[Worker]     method isContextLost
+[Worker]     method isEnabled
+[Worker]     method isFramebuffer
+[Worker]     method isProgram
+[Worker]     method isQuery
+[Worker]     method isRenderbuffer
+[Worker]     method isSampler
+[Worker]     method isShader
+[Worker]     method isSync
+[Worker]     method isTexture
+[Worker]     method isTransformFeedback
+[Worker]     method isVertexArray
+[Worker]     method lineWidth
+[Worker]     method linkProgram
+[Worker]     method pauseTransformFeedback
+[Worker]     method pixelStorei
+[Worker]     method polygonOffset
+[Worker]     method readBuffer
+[Worker]     method readPixels
+[Worker]     method renderbufferStorage
+[Worker]     method renderbufferStorageMultisample
+[Worker]     method resumeTransformFeedback
+[Worker]     method sampleCoverage
+[Worker]     method samplerParameterf
+[Worker]     method samplerParameteri
+[Worker]     method scissor
+[Worker]     method shaderSource
+[Worker]     method stencilFunc
+[Worker]     method stencilFuncSeparate
+[Worker]     method stencilMask
+[Worker]     method stencilMaskSeparate
+[Worker]     method stencilOp
+[Worker]     method stencilOpSeparate
+[Worker]     method texImage2D
+[Worker]     method texImage3D
+[Worker]     method texParameterf
+[Worker]     method texParameteri
+[Worker]     method texStorage2D
+[Worker]     method texStorage3D
+[Worker]     method texSubImage2D
+[Worker]     method texSubImage3D
+[Worker]     method transformFeedbackVaryings
+[Worker]     method uniform1f
+[Worker]     method uniform1fv
+[Worker]     method uniform1i
+[Worker]     method uniform1iv
+[Worker]     method uniform1ui
+[Worker]     method uniform1uiv
+[Worker]     method uniform2f
+[Worker]     method uniform2fv
+[Worker]     method uniform2i
+[Worker]     method uniform2iv
+[Worker]     method uniform2ui
+[Worker]     method uniform2uiv
+[Worker]     method uniform3f
+[Worker]     method uniform3fv
+[Worker]     method uniform3i
+[Worker]     method uniform3iv
+[Worker]     method uniform3ui
+[Worker]     method uniform3uiv
+[Worker]     method uniform4f
+[Worker]     method uniform4fv
+[Worker]     method uniform4i
+[Worker]     method uniform4iv
+[Worker]     method uniform4ui
+[Worker]     method uniform4uiv
+[Worker]     method uniformBlockBinding
+[Worker]     method uniformMatrix2fv
+[Worker]     method uniformMatrix2x3fv
+[Worker]     method uniformMatrix2x4fv
+[Worker]     method uniformMatrix3fv
+[Worker]     method uniformMatrix3x2fv
+[Worker]     method uniformMatrix3x4fv
+[Worker]     method uniformMatrix4fv
+[Worker]     method uniformMatrix4x2fv
+[Worker]     method uniformMatrix4x3fv
+[Worker]     method useProgram
+[Worker]     method validateProgram
+[Worker]     method vertexAttrib1f
+[Worker]     method vertexAttrib1fv
+[Worker]     method vertexAttrib2f
+[Worker]     method vertexAttrib2fv
+[Worker]     method vertexAttrib3f
+[Worker]     method vertexAttrib3fv
+[Worker]     method vertexAttrib4f
+[Worker]     method vertexAttrib4fv
+[Worker]     method vertexAttribDivisor
+[Worker]     method vertexAttribI4i
+[Worker]     method vertexAttribI4iv
+[Worker]     method vertexAttribI4ui
+[Worker]     method vertexAttribI4uiv
+[Worker]     method vertexAttribIPointer
+[Worker]     method vertexAttribPointer
+[Worker]     method viewport
+[Worker]     method waitSync
+[Worker] interface WebGLRenderingContext
+[Worker]     attribute @@toStringTag
+[Worker]     attribute ACTIVE_ATTRIBUTES
+[Worker]     attribute ACTIVE_TEXTURE
+[Worker]     attribute ACTIVE_UNIFORMS
+[Worker]     attribute ALIASED_LINE_WIDTH_RANGE
+[Worker]     attribute ALIASED_POINT_SIZE_RANGE
+[Worker]     attribute ALPHA
+[Worker]     attribute ALPHA_BITS
+[Worker]     attribute ALWAYS
+[Worker]     attribute ARRAY_BUFFER
+[Worker]     attribute ARRAY_BUFFER_BINDING
+[Worker]     attribute ATTACHED_SHADERS
+[Worker]     attribute BACK
+[Worker]     attribute BLEND
+[Worker]     attribute BLEND_COLOR
+[Worker]     attribute BLEND_DST_ALPHA
+[Worker]     attribute BLEND_DST_RGB
+[Worker]     attribute BLEND_EQUATION
+[Worker]     attribute BLEND_EQUATION_ALPHA
+[Worker]     attribute BLEND_EQUATION_RGB
+[Worker]     attribute BLEND_SRC_ALPHA
+[Worker]     attribute BLEND_SRC_RGB
+[Worker]     attribute BLUE_BITS
+[Worker]     attribute BOOL
+[Worker]     attribute BOOL_VEC2
+[Worker]     attribute BOOL_VEC3
+[Worker]     attribute BOOL_VEC4
+[Worker]     attribute BROWSER_DEFAULT_WEBGL
+[Worker]     attribute BUFFER_SIZE
+[Worker]     attribute BUFFER_USAGE
+[Worker]     attribute BYTE
+[Worker]     attribute CCW
+[Worker]     attribute CLAMP_TO_EDGE
+[Worker]     attribute COLOR_ATTACHMENT0
+[Worker]     attribute COLOR_BUFFER_BIT
+[Worker]     attribute COLOR_CLEAR_VALUE
+[Worker]     attribute COLOR_WRITEMASK
+[Worker]     attribute COMPILE_STATUS
+[Worker]     attribute COMPRESSED_TEXTURE_FORMATS
+[Worker]     attribute CONSTANT_ALPHA
+[Worker]     attribute CONSTANT_COLOR
+[Worker]     attribute CONTEXT_LOST_WEBGL
+[Worker]     attribute CULL_FACE
+[Worker]     attribute CULL_FACE_MODE
+[Worker]     attribute CURRENT_PROGRAM
+[Worker]     attribute CURRENT_VERTEX_ATTRIB
+[Worker]     attribute CW
+[Worker]     attribute DECR
+[Worker]     attribute DECR_WRAP
+[Worker]     attribute DELETE_STATUS
+[Worker]     attribute DEPTH_ATTACHMENT
+[Worker]     attribute DEPTH_BITS
+[Worker]     attribute DEPTH_BUFFER_BIT
+[Worker]     attribute DEPTH_CLEAR_VALUE
+[Worker]     attribute DEPTH_COMPONENT
+[Worker]     attribute DEPTH_COMPONENT16
+[Worker]     attribute DEPTH_FUNC
+[Worker]     attribute DEPTH_RANGE
+[Worker]     attribute DEPTH_STENCIL
+[Worker]     attribute DEPTH_STENCIL_ATTACHMENT
+[Worker]     attribute DEPTH_TEST
+[Worker]     attribute DEPTH_WRITEMASK
+[Worker]     attribute DITHER
+[Worker]     attribute DONT_CARE
+[Worker]     attribute DST_ALPHA
+[Worker]     attribute DST_COLOR
+[Worker]     attribute DYNAMIC_DRAW
+[Worker]     attribute ELEMENT_ARRAY_BUFFER
+[Worker]     attribute ELEMENT_ARRAY_BUFFER_BINDING
+[Worker]     attribute EQUAL
+[Worker]     attribute FASTEST
+[Worker]     attribute FLOAT
+[Worker]     attribute FLOAT_MAT2
+[Worker]     attribute FLOAT_MAT3
+[Worker]     attribute FLOAT_MAT4
+[Worker]     attribute FLOAT_VEC2
+[Worker]     attribute FLOAT_VEC3
+[Worker]     attribute FLOAT_VEC4
+[Worker]     attribute FRAGMENT_SHADER
+[Worker]     attribute FRAMEBUFFER
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_OBJECT_NAME
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL
+[Worker]     attribute FRAMEBUFFER_BINDING
+[Worker]     attribute FRAMEBUFFER_COMPLETE
+[Worker]     attribute FRAMEBUFFER_INCOMPLETE_ATTACHMENT
+[Worker]     attribute FRAMEBUFFER_INCOMPLETE_DIMENSIONS
+[Worker]     attribute FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
+[Worker]     attribute FRAMEBUFFER_UNSUPPORTED
+[Worker]     attribute FRONT
+[Worker]     attribute FRONT_AND_BACK
+[Worker]     attribute FRONT_FACE
+[Worker]     attribute FUNC_ADD
+[Worker]     attribute FUNC_REVERSE_SUBTRACT
+[Worker]     attribute FUNC_SUBTRACT
+[Worker]     attribute GENERATE_MIPMAP_HINT
+[Worker]     attribute GEQUAL
+[Worker]     attribute GREATER
+[Worker]     attribute GREEN_BITS
+[Worker]     attribute HIGH_FLOAT
+[Worker]     attribute HIGH_INT
+[Worker]     attribute IMPLEMENTATION_COLOR_READ_FORMAT
+[Worker]     attribute IMPLEMENTATION_COLOR_READ_TYPE
+[Worker]     attribute INCR
+[Worker]     attribute INCR_WRAP
+[Worker]     attribute INT
+[Worker]     attribute INT_VEC2
+[Worker]     attribute INT_VEC3
+[Worker]     attribute INT_VEC4
+[Worker]     attribute INVALID_ENUM
+[Worker]     attribute INVALID_FRAMEBUFFER_OPERATION
+[Worker]     attribute INVALID_OPERATION
+[Worker]     attribute INVALID_VALUE
+[Worker]     attribute INVERT
+[Worker]     attribute KEEP
+[Worker]     attribute LEQUAL
+[Worker]     attribute LESS
+[Worker]     attribute LINEAR
+[Worker]     attribute LINEAR_MIPMAP_LINEAR
+[Worker]     attribute LINEAR_MIPMAP_NEAREST
+[Worker]     attribute LINES
+[Worker]     attribute LINE_LOOP
+[Worker]     attribute LINE_STRIP
+[Worker]     attribute LINE_WIDTH
+[Worker]     attribute LINK_STATUS
+[Worker]     attribute LOW_FLOAT
+[Worker]     attribute LOW_INT
+[Worker]     attribute LUMINANCE
+[Worker]     attribute LUMINANCE_ALPHA
+[Worker]     attribute MAX_COMBINED_TEXTURE_IMAGE_UNITS
+[Worker]     attribute MAX_CUBE_MAP_TEXTURE_SIZE
+[Worker]     attribute MAX_FRAGMENT_UNIFORM_VECTORS
+[Worker]     attribute MAX_RENDERBUFFER_SIZE
+[Worker]     attribute MAX_TEXTURE_IMAGE_UNITS
+[Worker]     attribute MAX_TEXTURE_SIZE
+[Worker]     attribute MAX_VARYING_VECTORS
+[Worker]     attribute MAX_VERTEX_ATTRIBS
+[Worker]     attribute MAX_VERTEX_TEXTURE_IMAGE_UNITS
+[Worker]     attribute MAX_VERTEX_UNIFORM_VECTORS
+[Worker]     attribute MAX_VIEWPORT_DIMS
+[Worker]     attribute MEDIUM_FLOAT
+[Worker]     attribute MEDIUM_INT
+[Worker]     attribute MIRRORED_REPEAT
+[Worker]     attribute NEAREST
+[Worker]     attribute NEAREST_MIPMAP_LINEAR
+[Worker]     attribute NEAREST_MIPMAP_NEAREST
+[Worker]     attribute NEVER
+[Worker]     attribute NICEST
+[Worker]     attribute NONE
+[Worker]     attribute NOTEQUAL
+[Worker]     attribute NO_ERROR
+[Worker]     attribute ONE
+[Worker]     attribute ONE_MINUS_CONSTANT_ALPHA
+[Worker]     attribute ONE_MINUS_CONSTANT_COLOR
+[Worker]     attribute ONE_MINUS_DST_ALPHA
+[Worker]     attribute ONE_MINUS_DST_COLOR
+[Worker]     attribute ONE_MINUS_SRC_ALPHA
+[Worker]     attribute ONE_MINUS_SRC_COLOR
+[Worker]     attribute OUT_OF_MEMORY
+[Worker]     attribute PACK_ALIGNMENT
+[Worker]     attribute POINTS
+[Worker]     attribute POLYGON_OFFSET_FACTOR
+[Worker]     attribute POLYGON_OFFSET_FILL
+[Worker]     attribute POLYGON_OFFSET_UNITS
+[Worker]     attribute RED_BITS
+[Worker]     attribute RENDERBUFFER
+[Worker]     attribute RENDERBUFFER_ALPHA_SIZE
+[Worker]     attribute RENDERBUFFER_BINDING
+[Worker]     attribute RENDERBUFFER_BLUE_SIZE
+[Worker]     attribute RENDERBUFFER_DEPTH_SIZE
+[Worker]     attribute RENDERBUFFER_GREEN_SIZE
+[Worker]     attribute RENDERBUFFER_HEIGHT
+[Worker]     attribute RENDERBUFFER_INTERNAL_FORMAT
+[Worker]     attribute RENDERBUFFER_RED_SIZE
+[Worker]     attribute RENDERBUFFER_STENCIL_SIZE
+[Worker]     attribute RENDERBUFFER_WIDTH
+[Worker]     attribute RENDERER
+[Worker]     attribute REPEAT
+[Worker]     attribute REPLACE
+[Worker]     attribute RGB
+[Worker]     attribute RGB565
+[Worker]     attribute RGB5_A1
+[Worker]     attribute RGBA
+[Worker]     attribute RGBA4
+[Worker]     attribute SAMPLER_2D
+[Worker]     attribute SAMPLER_CUBE
+[Worker]     attribute SAMPLES
+[Worker]     attribute SAMPLE_ALPHA_TO_COVERAGE
+[Worker]     attribute SAMPLE_BUFFERS
+[Worker]     attribute SAMPLE_COVERAGE
+[Worker]     attribute SAMPLE_COVERAGE_INVERT
+[Worker]     attribute SAMPLE_COVERAGE_VALUE
+[Worker]     attribute SCISSOR_BOX
+[Worker]     attribute SCISSOR_TEST
+[Worker]     attribute SHADER_TYPE
+[Worker]     attribute SHADING_LANGUAGE_VERSION
+[Worker]     attribute SHORT
+[Worker]     attribute SRC_ALPHA
+[Worker]     attribute SRC_ALPHA_SATURATE
+[Worker]     attribute SRC_COLOR
+[Worker]     attribute STATIC_DRAW
+[Worker]     attribute STENCIL_ATTACHMENT
+[Worker]     attribute STENCIL_BACK_FAIL
+[Worker]     attribute STENCIL_BACK_FUNC
+[Worker]     attribute STENCIL_BACK_PASS_DEPTH_FAIL
+[Worker]     attribute STENCIL_BACK_PASS_DEPTH_PASS
+[Worker]     attribute STENCIL_BACK_REF
+[Worker]     attribute STENCIL_BACK_VALUE_MASK
+[Worker]     attribute STENCIL_BACK_WRITEMASK
+[Worker]     attribute STENCIL_BITS
+[Worker]     attribute STENCIL_BUFFER_BIT
+[Worker]     attribute STENCIL_CLEAR_VALUE
+[Worker]     attribute STENCIL_FAIL
+[Worker]     attribute STENCIL_FUNC
+[Worker]     attribute STENCIL_INDEX
+[Worker]     attribute STENCIL_INDEX8
+[Worker]     attribute STENCIL_PASS_DEPTH_FAIL
+[Worker]     attribute STENCIL_PASS_DEPTH_PASS
+[Worker]     attribute STENCIL_REF
+[Worker]     attribute STENCIL_TEST
+[Worker]     attribute STENCIL_VALUE_MASK
+[Worker]     attribute STENCIL_WRITEMASK
+[Worker]     attribute STREAM_DRAW
+[Worker]     attribute SUBPIXEL_BITS
+[Worker]     attribute TEXTURE
+[Worker]     attribute TEXTURE0
+[Worker]     attribute TEXTURE1
+[Worker]     attribute TEXTURE10
+[Worker]     attribute TEXTURE11
+[Worker]     attribute TEXTURE12
+[Worker]     attribute TEXTURE13
+[Worker]     attribute TEXTURE14
+[Worker]     attribute TEXTURE15
+[Worker]     attribute TEXTURE16
+[Worker]     attribute TEXTURE17
+[Worker]     attribute TEXTURE18
+[Worker]     attribute TEXTURE19
+[Worker]     attribute TEXTURE2
+[Worker]     attribute TEXTURE20
+[Worker]     attribute TEXTURE21
+[Worker]     attribute TEXTURE22
+[Worker]     attribute TEXTURE23
+[Worker]     attribute TEXTURE24
+[Worker]     attribute TEXTURE25
+[Worker]     attribute TEXTURE26
+[Worker]     attribute TEXTURE27
+[Worker]     attribute TEXTURE28
+[Worker]     attribute TEXTURE29
+[Worker]     attribute TEXTURE3
+[Worker]     attribute TEXTURE30
+[Worker]     attribute TEXTURE31
+[Worker]     attribute TEXTURE4
+[Worker]     attribute TEXTURE5
+[Worker]     attribute TEXTURE6
+[Worker]     attribute TEXTURE7
+[Worker]     attribute TEXTURE8
+[Worker]     attribute TEXTURE9
+[Worker]     attribute TEXTURE_2D
+[Worker]     attribute TEXTURE_BINDING_2D
+[Worker]     attribute TEXTURE_BINDING_CUBE_MAP
+[Worker]     attribute TEXTURE_CUBE_MAP
+[Worker]     attribute TEXTURE_CUBE_MAP_NEGATIVE_X
+[Worker]     attribute TEXTURE_CUBE_MAP_NEGATIVE_Y
+[Worker]     attribute TEXTURE_CUBE_MAP_NEGATIVE_Z
+[Worker]     attribute TEXTURE_CUBE_MAP_POSITIVE_X
+[Worker]     attribute TEXTURE_CUBE_MAP_POSITIVE_Y
+[Worker]     attribute TEXTURE_CUBE_MAP_POSITIVE_Z
+[Worker]     attribute TEXTURE_MAG_FILTER
+[Worker]     attribute TEXTURE_MIN_FILTER
+[Worker]     attribute TEXTURE_WRAP_S
+[Worker]     attribute TEXTURE_WRAP_T
+[Worker]     attribute TRIANGLES
+[Worker]     attribute TRIANGLE_FAN
+[Worker]     attribute TRIANGLE_STRIP
+[Worker]     attribute UNPACK_ALIGNMENT
+[Worker]     attribute UNPACK_COLORSPACE_CONVERSION_WEBGL
+[Worker]     attribute UNPACK_FLIP_Y_WEBGL
+[Worker]     attribute UNPACK_PREMULTIPLY_ALPHA_WEBGL
+[Worker]     attribute UNSIGNED_BYTE
+[Worker]     attribute UNSIGNED_INT
+[Worker]     attribute UNSIGNED_SHORT
+[Worker]     attribute UNSIGNED_SHORT_4_4_4_4
+[Worker]     attribute UNSIGNED_SHORT_5_5_5_1
+[Worker]     attribute UNSIGNED_SHORT_5_6_5
+[Worker]     attribute VALIDATE_STATUS
+[Worker]     attribute VENDOR
+[Worker]     attribute VERSION
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_ENABLED
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_NORMALIZED
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_POINTER
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_SIZE
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_STRIDE
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_TYPE
+[Worker]     attribute VERTEX_SHADER
+[Worker]     attribute VIEWPORT
+[Worker]     attribute ZERO
+[Worker]     getter canvas
+[Worker]     getter drawingBufferHeight
+[Worker]     getter drawingBufferWidth
+[Worker]     method activeTexture
+[Worker]     method attachShader
+[Worker]     method bindAttribLocation
+[Worker]     method bindBuffer
+[Worker]     method bindFramebuffer
+[Worker]     method bindRenderbuffer
+[Worker]     method bindTexture
+[Worker]     method blendColor
+[Worker]     method blendEquation
+[Worker]     method blendEquationSeparate
+[Worker]     method blendFunc
+[Worker]     method blendFuncSeparate
+[Worker]     method bufferData
+[Worker]     method bufferSubData
+[Worker]     method checkFramebufferStatus
+[Worker]     method clear
+[Worker]     method clearColor
+[Worker]     method clearDepth
+[Worker]     method clearStencil
+[Worker]     method colorMask
+[Worker]     method commit
+[Worker]     method compileShader
+[Worker]     method compressedTexImage2D
+[Worker]     method compressedTexSubImage2D
+[Worker]     method constructor
+[Worker]     method copyTexImage2D
+[Worker]     method copyTexSubImage2D
+[Worker]     method createBuffer
+[Worker]     method createFramebuffer
+[Worker]     method createProgram
+[Worker]     method createRenderbuffer
+[Worker]     method createShader
+[Worker]     method createTexture
+[Worker]     method cullFace
+[Worker]     method deleteBuffer
+[Worker]     method deleteFramebuffer
+[Worker]     method deleteProgram
+[Worker]     method deleteRenderbuffer
+[Worker]     method deleteShader
+[Worker]     method deleteTexture
+[Worker]     method depthFunc
+[Worker]     method depthMask
+[Worker]     method depthRange
+[Worker]     method detachShader
+[Worker]     method disable
+[Worker]     method disableVertexAttribArray
+[Worker]     method drawArrays
+[Worker]     method drawElements
+[Worker]     method enable
+[Worker]     method enableVertexAttribArray
+[Worker]     method finish
+[Worker]     method flush
+[Worker]     method framebufferRenderbuffer
+[Worker]     method framebufferTexture2D
+[Worker]     method frontFace
+[Worker]     method generateMipmap
+[Worker]     method getActiveAttrib
+[Worker]     method getActiveUniform
+[Worker]     method getAttachedShaders
+[Worker]     method getAttribLocation
+[Worker]     method getBufferParameter
+[Worker]     method getContextAttributes
+[Worker]     method getError
+[Worker]     method getExtension
+[Worker]     method getFramebufferAttachmentParameter
+[Worker]     method getParameter
+[Worker]     method getProgramInfoLog
+[Worker]     method getProgramParameter
+[Worker]     method getRenderbufferParameter
+[Worker]     method getShaderInfoLog
+[Worker]     method getShaderParameter
+[Worker]     method getShaderPrecisionFormat
+[Worker]     method getShaderSource
+[Worker]     method getSupportedExtensions
+[Worker]     method getTexParameter
+[Worker]     method getUniform
+[Worker]     method getUniformLocation
+[Worker]     method getVertexAttrib
+[Worker]     method getVertexAttribOffset
+[Worker]     method hint
+[Worker]     method isBuffer
+[Worker]     method isContextLost
+[Worker]     method isEnabled
+[Worker]     method isFramebuffer
+[Worker]     method isProgram
+[Worker]     method isRenderbuffer
+[Worker]     method isShader
+[Worker]     method isTexture
+[Worker]     method lineWidth
+[Worker]     method linkProgram
+[Worker]     method pixelStorei
+[Worker]     method polygonOffset
+[Worker]     method readPixels
+[Worker]     method renderbufferStorage
+[Worker]     method sampleCoverage
+[Worker]     method scissor
+[Worker]     method shaderSource
+[Worker]     method stencilFunc
+[Worker]     method stencilFuncSeparate
+[Worker]     method stencilMask
+[Worker]     method stencilMaskSeparate
+[Worker]     method stencilOp
+[Worker]     method stencilOpSeparate
+[Worker]     method texImage2D
+[Worker]     method texParameterf
+[Worker]     method texParameteri
+[Worker]     method texSubImage2D
+[Worker]     method uniform1f
+[Worker]     method uniform1fv
+[Worker]     method uniform1i
+[Worker]     method uniform1iv
+[Worker]     method uniform2f
+[Worker]     method uniform2fv
+[Worker]     method uniform2i
+[Worker]     method uniform2iv
+[Worker]     method uniform3f
+[Worker]     method uniform3fv
+[Worker]     method uniform3i
+[Worker]     method uniform3iv
+[Worker]     method uniform4f
+[Worker]     method uniform4fv
+[Worker]     method uniform4i
+[Worker]     method uniform4iv
+[Worker]     method uniformMatrix2fv
+[Worker]     method uniformMatrix3fv
+[Worker]     method uniformMatrix4fv
+[Worker]     method useProgram
+[Worker]     method validateProgram
+[Worker]     method vertexAttrib1f
+[Worker]     method vertexAttrib1fv
+[Worker]     method vertexAttrib2f
+[Worker]     method vertexAttrib2fv
+[Worker]     method vertexAttrib3f
+[Worker]     method vertexAttrib3fv
+[Worker]     method vertexAttrib4f
+[Worker]     method vertexAttrib4fv
+[Worker]     method vertexAttribPointer
+[Worker]     method viewport
+[Worker] interface WebSocket : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     attribute CLOSED
+[Worker]     attribute CLOSING
+[Worker]     attribute CONNECTING
+[Worker]     attribute OPEN
+[Worker]     getter binaryType
+[Worker]     getter bufferedAmount
+[Worker]     getter extensions
+[Worker]     getter onclose
+[Worker]     getter onerror
+[Worker]     getter onmessage
+[Worker]     getter onopen
+[Worker]     getter protocol
+[Worker]     getter readyState
+[Worker]     getter url
+[Worker]     method close
+[Worker]     method constructor
+[Worker]     method send
+[Worker]     setter binaryType
+[Worker]     setter onclose
+[Worker]     setter onerror
+[Worker]     setter onmessage
+[Worker]     setter onopen
+[Worker] interface WorkerGlobalScope : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     getter addressSpace
+[Worker]     getter caches
+[Worker]     getter crypto
+[Worker]     getter indexedDB
+[Worker]     getter isSecureContext
+[Worker]     getter location
+[Worker]     getter navigator
+[Worker]     getter onerror
+[Worker]     getter onrejectionhandled
+[Worker]     getter onunhandledrejection
+[Worker]     getter origin
+[Worker]     getter performance
+[Worker]     getter self
+[Worker]     method atob
+[Worker]     method btoa
+[Worker]     method clearInterval
+[Worker]     method clearTimeout
+[Worker]     method constructor
+[Worker]     method createImageBitmap
+[Worker]     method fetch
+[Worker]     method importScripts
+[Worker]     method setInterval
+[Worker]     method setTimeout
+[Worker]     setter onerror
+[Worker]     setter onrejectionhandled
+[Worker]     setter onunhandledrejection
+[Worker]     setter origin
+[Worker] interface WorkerLocation
+[Worker]     attribute @@toStringTag
+[Worker]     getter hash
+[Worker]     getter host
+[Worker]     getter hostname
+[Worker]     getter href
+[Worker]     getter origin
+[Worker]     getter pathname
+[Worker]     getter port
+[Worker]     getter protocol
+[Worker]     getter search
+[Worker]     method constructor
+[Worker]     method toString
+[Worker] interface WorkerNavigator
+[Worker]     attribute @@toStringTag
+[Worker]     getter appCodeName
+[Worker]     getter appName
+[Worker]     getter appVersion
+[Worker]     getter budget
+[Worker]     getter connection
+[Worker]     getter hardwareConcurrency
+[Worker]     getter onLine
+[Worker]     getter permissions
+[Worker]     getter platform
+[Worker]     getter product
+[Worker]     getter storage
+[Worker]     getter userAgent
+[Worker]     method constructor
+[Worker] interface WritableStream
+[Worker]     getter locked
+[Worker]     method abort
+[Worker]     method constructor
+[Worker]     method getWriter
+[Worker] interface XMLHttpRequest : XMLHttpRequestEventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     attribute DONE
+[Worker]     attribute HEADERS_RECEIVED
+[Worker]     attribute LOADING
+[Worker]     attribute OPENED
+[Worker]     attribute UNSENT
+[Worker]     getter onreadystatechange
+[Worker]     getter readyState
+[Worker]     getter response
+[Worker]     getter responseText
+[Worker]     getter responseType
+[Worker]     getter responseURL
+[Worker]     getter responseXML
+[Worker]     getter status
+[Worker]     getter statusText
+[Worker]     getter timeout
+[Worker]     getter upload
+[Worker]     getter withCredentials
+[Worker]     method abort
+[Worker]     method constructor
+[Worker]     method getAllResponseHeaders
+[Worker]     method getResponseHeader
+[Worker]     method open
+[Worker]     method overrideMimeType
+[Worker]     method send
+[Worker]     method setRequestHeader
+[Worker]     setter onreadystatechange
+[Worker]     setter responseType
+[Worker]     setter timeout
+[Worker]     setter withCredentials
+[Worker] interface XMLHttpRequestEventTarget : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     getter onabort
+[Worker]     getter onerror
+[Worker]     getter onload
+[Worker]     getter onloadend
+[Worker]     getter onloadstart
+[Worker]     getter onprogress
+[Worker]     getter ontimeout
+[Worker]     method constructor
+[Worker]     setter onabort
+[Worker]     setter onerror
+[Worker]     setter onload
+[Worker]     setter onloadend
+[Worker]     setter onloadstart
+[Worker]     setter onprogress
+[Worker]     setter ontimeout
+[Worker] interface XMLHttpRequestUpload : XMLHttpRequestEventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker] [GLOBAL OBJECT]
+[Worker]     attribute console
+[Worker]     attribute internals
+[Worker]     getter onmessage
+[Worker]     method close
+[Worker]     method gc
+[Worker]     method postMessage
+[Worker]     method webkitRequestFileSystem
+[Worker]     method webkitRequestFileSystemSync
+[Worker]     method webkitResolveLocalFileSystemSyncURL
+[Worker]     method webkitResolveLocalFileSystemURL
+[Worker]     setter onmessage
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/webexposed/global-interface-listing-expected.txt b/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/webexposed/global-interface-listing-expected.txt
new file mode 100644
index 0000000..155cbd5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/webexposed/global-interface-listing-expected.txt
@@ -0,0 +1,9164 @@
+CONSOLE WARNING: line 95: 'webkitURL' is deprecated. Please use 'URL' instead.
+This test documents all interface attributes and methods on the global window object and element instances.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+[INTERFACES]
+interface AbsoluteOrientationSensor : OrientationSensor
+    attribute @@toStringTag
+    method constructor
+interface Accelerometer : Sensor
+    attribute @@toStringTag
+    getter x
+    getter y
+    getter z
+    method constructor
+interface AmbientLightSensor : Sensor
+    attribute @@toStringTag
+    getter illuminance
+    method constructor
+interface AnalyserNode : AudioNode
+    attribute @@toStringTag
+    getter fftSize
+    getter frequencyBinCount
+    getter maxDecibels
+    getter minDecibels
+    getter smoothingTimeConstant
+    method constructor
+    method getByteFrequencyData
+    method getByteTimeDomainData
+    method getFloatFrequencyData
+    method getFloatTimeDomainData
+    setter fftSize
+    setter maxDecibels
+    setter minDecibels
+    setter smoothingTimeConstant
+interface AnimationEffectReadOnly
+    attribute @@toStringTag
+    getter timing
+    method constructor
+    method getComputedTiming
+interface AnimationEffectTiming : AnimationEffectTimingReadOnly
+    attribute @@toStringTag
+    getter delay
+    getter direction
+    getter duration
+    getter easing
+    getter endDelay
+    getter fill
+    getter iterationStart
+    getter iterations
+    method constructor
+    setter delay
+    setter direction
+    setter duration
+    setter easing
+    setter endDelay
+    setter fill
+    setter iterationStart
+    setter iterations
+interface AnimationEffectTimingReadOnly
+    attribute @@toStringTag
+    getter delay
+    getter direction
+    getter duration
+    getter easing
+    getter endDelay
+    getter fill
+    getter iterationStart
+    getter iterations
+    method constructor
+interface AnimationEvent : Event
+    attribute @@toStringTag
+    getter animationName
+    getter elapsedTime
+    method constructor
+interface AnimationPlaybackEvent : Event
+    attribute @@toStringTag
+    getter currentTime
+    getter timelineTime
+    method constructor
+interface AnimationTimeline
+    attribute @@toStringTag
+    getter currentTime
+    method constructor
+    method getAnimations
+    setter currentTime
+interface AppBannerPromptResult
+    attribute @@toStringTag
+    getter outcome
+    getter platform
+    method constructor
+interface ApplicationCache : EventTarget
+    attribute @@toStringTag
+    attribute CHECKING
+    attribute DOWNLOADING
+    attribute IDLE
+    attribute OBSOLETE
+    attribute UNCACHED
+    attribute UPDATEREADY
+    getter oncached
+    getter onchecking
+    getter ondownloading
+    getter onerror
+    getter onnoupdate
+    getter onobsolete
+    getter onprogress
+    getter onupdateready
+    getter status
+    method abort
+    method constructor
+    method swapCache
+    method update
+    setter oncached
+    setter onchecking
+    setter ondownloading
+    setter onerror
+    setter onnoupdate
+    setter onobsolete
+    setter onprogress
+    setter onupdateready
+interface ApplicationCacheErrorEvent : Event
+    attribute @@toStringTag
+    getter message
+    getter reason
+    getter status
+    getter url
+    method constructor
+interface Attr : Node
+    attribute @@toStringTag
+    getter localName
+    getter name
+    getter namespaceURI
+    getter ownerElement
+    getter prefix
+    getter specified
+    getter value
+    method constructor
+    setter value
+interface Audio
+    attribute @@toStringTag
+    method constructor
+interface AudioBuffer
+    attribute @@toStringTag
+    getter duration
+    getter length
+    getter numberOfChannels
+    getter sampleRate
+    method constructor
+    method copyFromChannel
+    method copyToChannel
+    method getChannelData
+interface AudioBufferSourceNode : AudioScheduledSourceNode
+    attribute @@toStringTag
+    getter buffer
+    getter detune
+    getter loop
+    getter loopEnd
+    getter loopStart
+    getter playbackRate
+    method constructor
+    method start
+    setter buffer
+    setter loop
+    setter loopEnd
+    setter loopStart
+interface AudioContext : BaseAudioContext
+    attribute @@toStringTag
+    getter baseLatency
+    method close
+    method constructor
+    method getOutputTimestamp
+    method suspend
+interface AudioDestinationNode : AudioNode
+    attribute @@toStringTag
+    getter maxChannelCount
+    method constructor
+interface AudioListener
+    attribute @@toStringTag
+    getter forwardX
+    getter forwardY
+    getter forwardZ
+    getter positionX
+    getter positionY
+    getter positionZ
+    getter upX
+    getter upY
+    getter upZ
+    method constructor
+    method setOrientation
+    method setPosition
+interface AudioNode : EventTarget
+    attribute @@toStringTag
+    getter channelCount
+    getter channelCountMode
+    getter channelInterpretation
+    getter context
+    getter numberOfInputs
+    getter numberOfOutputs
+    method connect
+    method constructor
+    method disconnect
+    setter channelCount
+    setter channelCountMode
+    setter channelInterpretation
+interface AudioParam
+    attribute @@toStringTag
+    getter defaultValue
+    getter maxValue
+    getter minValue
+    getter value
+    method cancelAndHoldAtTime
+    method cancelScheduledValues
+    method constructor
+    method exponentialRampToValueAtTime
+    method linearRampToValueAtTime
+    method setTargetAtTime
+    method setValueAtTime
+    method setValueCurveAtTime
+    setter value
+interface AudioProcessingEvent : Event
+    attribute @@toStringTag
+    getter inputBuffer
+    getter outputBuffer
+    getter playbackTime
+    method constructor
+interface AudioScheduledSourceNode : AudioNode
+    attribute @@toStringTag
+    getter onended
+    method constructor
+    method start
+    method stop
+    setter onended
+interface AudioTrack
+    attribute @@toStringTag
+    getter enabled
+    getter id
+    getter kind
+    getter label
+    getter language
+    getter sourceBuffer
+    method constructor
+    setter enabled
+interface AudioTrackList : EventTarget
+    attribute @@toStringTag
+    getter length
+    getter onaddtrack
+    getter onchange
+    getter onremovetrack
+    method @@iterator
+    method constructor
+    method getTrackById
+    setter onaddtrack
+    setter onchange
+    setter onremovetrack
+interface AuthenticationAssertion
+    attribute @@toStringTag
+    getter authenticatorData
+    getter clientData
+    getter credential
+    getter signature
+    method constructor
+interface BackgroundFetchFetch
+    attribute @@toStringTag
+    getter request
+    method constructor
+interface BackgroundFetchManager
+    attribute @@toStringTag
+    method constructor
+    method fetch
+    method get
+    method getTags
+interface BackgroundFetchRegistration
+    attribute @@toStringTag
+    getter icons
+    getter tag
+    getter title
+    getter totalDownloadSize
+    method abort
+    method constructor
+interface BarProp
+    attribute @@toStringTag
+    getter visible
+    method constructor
+interface BarcodeDetector
+    attribute @@toStringTag
+    method constructor
+    method detect
+interface BaseAudioContext : EventTarget
+    attribute @@toStringTag
+    getter currentTime
+    getter destination
+    getter listener
+    getter onstatechange
+    getter sampleRate
+    getter state
+    method constructor
+    method createAnalyser
+    method createBiquadFilter
+    method createBuffer
+    method createBufferSource
+    method createChannelMerger
+    method createChannelSplitter
+    method createConstantSource
+    method createConvolver
+    method createDelay
+    method createDynamicsCompressor
+    method createGain
+    method createIIRFilter
+    method createMediaElementSource
+    method createMediaStreamDestination
+    method createMediaStreamSource
+    method createOscillator
+    method createPanner
+    method createPeriodicWave
+    method createScriptProcessor
+    method createStereoPanner
+    method createWaveShaper
+    method decodeAudioData
+    method resume
+    setter onstatechange
+interface BatteryManager : EventTarget
+    attribute @@toStringTag
+    getter charging
+    getter chargingTime
+    getter dischargingTime
+    getter level
+    getter onchargingchange
+    getter onchargingtimechange
+    getter ondischargingtimechange
+    getter onlevelchange
+    method constructor
+    setter onchargingchange
+    setter onchargingtimechange
+    setter ondischargingtimechange
+    setter onlevelchange
+interface BeforeInstallPromptEvent : Event
+    attribute @@toStringTag
+    getter platforms
+    getter userChoice
+    method constructor
+    method prompt
+interface BeforeUnloadEvent : Event
+    attribute @@toStringTag
+    getter returnValue
+    method constructor
+    setter returnValue
+interface BiquadFilterNode : AudioNode
+    attribute @@toStringTag
+    getter Q
+    getter detune
+    getter frequency
+    getter gain
+    getter type
+    method constructor
+    method getFrequencyResponse
+    setter type
+interface Blob
+    attribute @@toStringTag
+    getter isClosed
+    getter size
+    getter type
+    method close
+    method constructor
+    method slice
+interface BlobEvent : Event
+    attribute @@toStringTag
+    getter data
+    getter timecode
+    method constructor
+interface Bluetooth
+    attribute @@toStringTag
+    method constructor
+    method requestDevice
+interface BluetoothCharacteristicProperties
+    attribute @@toStringTag
+    getter authenticatedSignedWrites
+    getter broadcast
+    getter indicate
+    getter notify
+    getter read
+    getter reliableWrite
+    getter writableAuxiliaries
+    getter write
+    getter writeWithoutResponse
+    method constructor
+interface BluetoothDevice : EventTarget
+    attribute @@toStringTag
+    getter gatt
+    getter id
+    getter name
+    getter ongattserverdisconnected
+    method constructor
+    setter ongattserverdisconnected
+interface BluetoothRemoteGATTCharacteristic : EventTarget
+    attribute @@toStringTag
+    getter oncharacteristicvaluechanged
+    getter properties
+    getter service
+    getter uuid
+    getter value
+    method constructor
+    method getDescriptor
+    method getDescriptors
+    method readValue
+    method startNotifications
+    method stopNotifications
+    method writeValue
+    setter oncharacteristicvaluechanged
+interface BluetoothRemoteGATTDescriptor
+    attribute @@toStringTag
+    getter characteristic
+    getter uuid
+    getter value
+    method constructor
+    method readValue
+    method writeValue
+interface BluetoothRemoteGATTServer
+    attribute @@toStringTag
+    getter connected
+    getter device
+    method connect
+    method constructor
+    method disconnect
+    method getPrimaryService
+    method getPrimaryServices
+interface BluetoothRemoteGATTService
+    attribute @@toStringTag
+    getter device
+    getter isPrimary
+    getter uuid
+    method constructor
+    method getCharacteristic
+    method getCharacteristics
+interface BluetoothUUID
+    static method canonicalUUID
+    static method getCharacteristic
+    static method getDescriptor
+    static method getService
+    attribute @@toStringTag
+    method constructor
+interface BroadcastChannel : EventTarget
+    attribute @@toStringTag
+    getter name
+    getter onmessage
+    method close
+    method constructor
+    method postMessage
+    setter onmessage
+interface BudgetService
+    attribute @@toStringTag
+    method constructor
+    method getBudget
+    method getCost
+    method reserve
+interface BudgetState
+    attribute @@toStringTag
+    getter budgetAt
+    getter time
+    method constructor
+interface ByteLengthQueuingStrategy
+    method constructor
+    method size
+interface CDATASection : Text
+    attribute @@toStringTag
+    method constructor
+interface CSS
+    static method escape
+    static method registerProperty
+    static method supports
+    attribute @@toStringTag
+    method constructor
+interface CSSAngleValue : CSSStyleValue
+    attribute @@toStringTag
+    getter degrees
+    getter gradians
+    getter radians
+    getter turns
+    method constructor
+interface CSSCalcLength : CSSLengthValue
+    attribute @@toStringTag
+    getter ch
+    getter cm
+    getter em
+    getter ex
+    getter in
+    getter mm
+    getter pc
+    getter percent
+    getter pt
+    getter px
+    getter rem
+    getter vh
+    getter vmax
+    getter vmin
+    getter vw
+    method constructor
+interface CSSConditionRule : CSSGroupingRule
+    attribute @@toStringTag
+    getter conditionText
+    method constructor
+interface CSSFontFaceRule : CSSRule
+    attribute @@toStringTag
+    getter style
+    method constructor
+interface CSSGroupingRule : CSSRule
+    attribute @@toStringTag
+    getter cssRules
+    method constructor
+    method deleteRule
+    method insertRule
+interface CSSImageValue : CSSResourceValue
+    attribute @@toStringTag
+    getter intrinsicHeight
+    getter intrinsicRatio
+    getter intrinsicWidth
+    method constructor
+interface CSSImportRule : CSSRule
+    attribute @@toStringTag
+    getter href
+    getter media
+    getter styleSheet
+    method constructor
+interface CSSKeyframeRule : CSSRule
+    attribute @@toStringTag
+    getter keyText
+    getter style
+    method constructor
+    setter keyText
+interface CSSKeyframesRule : CSSRule
+    attribute @@toStringTag
+    getter cssRules
+    getter name
+    method appendRule
+    method constructor
+    method deleteRule
+    method findRule
+    setter name
+interface CSSKeywordValue : CSSStyleValue
+    attribute @@toStringTag
+    getter keywordValue
+    method constructor
+interface CSSLengthValue : CSSStyleValue
+    static method from
+    attribute @@toStringTag
+    method add
+    method constructor
+    method divide
+    method multiply
+    method subtract
+interface CSSMatrixComponent : CSSTransformComponent
+    attribute @@toStringTag
+    getter a
+    getter b
+    getter c
+    getter d
+    getter e
+    getter f
+    getter m11
+    getter m12
+    getter m13
+    getter m14
+    getter m21
+    getter m22
+    getter m23
+    getter m24
+    getter m31
+    getter m32
+    getter m33
+    getter m34
+    getter m41
+    getter m42
+    getter m43
+    getter m44
+    method constructor
+interface CSSMediaRule : CSSConditionRule
+    attribute @@toStringTag
+    getter media
+    method constructor
+interface CSSNamespaceRule : CSSRule
+    attribute @@toStringTag
+    getter namespaceURI
+    getter prefix
+    method constructor
+interface CSSNumberValue : CSSStyleValue
+    attribute @@toStringTag
+    getter value
+    method constructor
+interface CSSNumericValue : CSSStyleValue
+    attribute @@toStringTag
+    method add
+    method constructor
+    method div
+    method mul
+    method sub
+    method to
+interface CSSPageRule : CSSRule
+    attribute @@toStringTag
+    getter selectorText
+    getter style
+    method constructor
+    setter selectorText
+interface CSSPerspective : CSSTransformComponent
+    attribute @@toStringTag
+    getter length
+    method constructor
+interface CSSPositionValue : CSSStyleValue
+    attribute @@toStringTag
+    getter x
+    getter y
+    method constructor
+interface CSSResourceValue : CSSStyleValue
+    attribute @@toStringTag
+    getter state
+    method constructor
+interface CSSRotation : CSSTransformComponent
+    attribute @@toStringTag
+    getter angle
+    getter x
+    getter y
+    getter z
+    method constructor
+interface CSSRule
+    attribute @@toStringTag
+    attribute CHARSET_RULE
+    attribute FONT_FACE_RULE
+    attribute IMPORT_RULE
+    attribute KEYFRAMES_RULE
+    attribute KEYFRAME_RULE
+    attribute MEDIA_RULE
+    attribute NAMESPACE_RULE
+    attribute PAGE_RULE
+    attribute STYLE_RULE
+    attribute SUPPORTS_RULE
+    attribute VIEWPORT_RULE
+    attribute WEBKIT_KEYFRAMES_RULE
+    attribute WEBKIT_KEYFRAME_RULE
+    getter cssText
+    getter parentRule
+    getter parentStyleSheet
+    getter type
+    method constructor
+    setter cssText
+interface CSSRuleList
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method item
+interface CSSScale : CSSTransformComponent
+    attribute @@toStringTag
+    getter x
+    getter y
+    getter z
+    method constructor
+interface CSSSimpleLength : CSSLengthValue
+    attribute @@toStringTag
+    getter type
+    getter value
+    method constructor
+interface CSSSkew : CSSTransformComponent
+    attribute @@toStringTag
+    getter ax
+    getter ay
+    method constructor
+interface CSSStyleDeclaration
+    attribute @@toStringTag
+    getter cssFloat
+    getter cssText
+    getter length
+    getter parentRule
+    method @@iterator
+    method constructor
+    method getPropertyPriority
+    method getPropertyValue
+    method item
+    method removeProperty
+    method setProperty
+    setter cssFloat
+    setter cssText
+interface CSSStyleRule : CSSRule
+    attribute @@toStringTag
+    getter selectorText
+    getter style
+    method constructor
+    setter selectorText
+    setter style
+interface CSSStyleSheet : StyleSheet
+    attribute @@toStringTag
+    getter cssRules
+    getter ownerRule
+    getter rules
+    method addRule
+    method constructor
+    method deleteRule
+    method insertRule
+    method removeRule
+interface CSSStyleValue
+    static method parse
+    attribute @@toStringTag
+    getter cssText
+    method constructor
+interface CSSSupportsRule : CSSConditionRule
+    attribute @@toStringTag
+    method constructor
+interface CSSTransformComponent
+    attribute @@toStringTag
+    getter cssText
+    method asMatrix
+    method constructor
+    method is2D
+interface CSSTransformValue : CSSStyleValue
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method entries
+    method forEach
+    method is2D
+    method keys
+    method values
+interface CSSTranslation : CSSTransformComponent
+    attribute @@toStringTag
+    getter x
+    getter y
+    getter z
+    method constructor
+interface CSSURLImageValue : CSSImageValue
+    attribute @@toStringTag
+    getter url
+    method constructor
+interface CSSUnitValue : CSSNumericValue
+    attribute @@toStringTag
+    getter type
+    getter unit
+    getter value
+    method constructor
+    setter unit
+    setter value
+interface CSSUnparsedValue : CSSStyleValue
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method entries
+    method forEach
+    method keys
+    method values
+interface CSSVariableReferenceValue
+    attribute @@toStringTag
+    getter fallback
+    getter variable
+    method constructor
+interface CSSViewportRule : CSSRule
+    attribute @@toStringTag
+    getter style
+    method constructor
+interface Cache
+    attribute @@toStringTag
+    method add
+    method addAll
+    method constructor
+    method delete
+    method keys
+    method match
+    method matchAll
+    method put
+interface CacheStorage
+    attribute @@toStringTag
+    method constructor
+    method delete
+    method has
+    method keys
+    method match
+    method open
+interface CanvasCaptureMediaStreamTrack : MediaStreamTrack
+    attribute @@toStringTag
+    getter canvas
+    method constructor
+    method requestFrame
+interface CanvasGradient
+    attribute @@toStringTag
+    method addColorStop
+    method constructor
+interface CanvasPattern
+    attribute @@toStringTag
+    method constructor
+    method setTransform
+interface CanvasRenderingContext2D
+    attribute @@toStringTag
+    getter canvas
+    getter currentTransform
+    getter direction
+    getter fillStyle
+    getter filter
+    getter font
+    getter globalAlpha
+    getter globalCompositeOperation
+    getter imageSmoothingEnabled
+    getter imageSmoothingQuality
+    getter lineCap
+    getter lineDashOffset
+    getter lineJoin
+    getter lineWidth
+    getter miterLimit
+    getter shadowBlur
+    getter shadowColor
+    getter shadowOffsetX
+    getter shadowOffsetY
+    getter strokeStyle
+    getter textAlign
+    getter textBaseline
+    method addHitRegion
+    method arc
+    method arcTo
+    method beginPath
+    method bezierCurveTo
+    method clearHitRegions
+    method clearRect
+    method clip
+    method closePath
+    method constructor
+    method createImageData
+    method createLinearGradient
+    method createPattern
+    method createRadialGradient
+    method drawFocusIfNeeded
+    method drawImage
+    method ellipse
+    method fill
+    method fillRect
+    method fillText
+    method getContextAttributes
+    method getImageData
+    method getLineDash
+    method isContextLost
+    method isPointInPath
+    method isPointInStroke
+    method lineTo
+    method measureText
+    method moveTo
+    method putImageData
+    method quadraticCurveTo
+    method rect
+    method removeHitRegion
+    method resetTransform
+    method restore
+    method rotate
+    method save
+    method scale
+    method scrollPathIntoView
+    method setLineDash
+    method setTransform
+    method stroke
+    method strokeRect
+    method strokeText
+    method transform
+    method translate
+    setter currentTransform
+    setter direction
+    setter fillStyle
+    setter filter
+    setter font
+    setter globalAlpha
+    setter globalCompositeOperation
+    setter imageSmoothingEnabled
+    setter imageSmoothingQuality
+    setter lineCap
+    setter lineDashOffset
+    setter lineJoin
+    setter lineWidth
+    setter miterLimit
+    setter shadowBlur
+    setter shadowColor
+    setter shadowOffsetX
+    setter shadowOffsetY
+    setter strokeStyle
+    setter textAlign
+    setter textBaseline
+interface ChannelMergerNode : AudioNode
+    attribute @@toStringTag
+    method constructor
+interface ChannelSplitterNode : AudioNode
+    attribute @@toStringTag
+    method constructor
+interface CharacterData : Node
+    attribute @@toStringTag
+    attribute @@unscopables
+    getter data
+    getter length
+    getter nextElementSibling
+    getter previousElementSibling
+    method after
+    method appendData
+    method before
+    method constructor
+    method deleteData
+    method insertData
+    method remove
+    method replaceData
+    method replaceWith
+    method substringData
+    setter data
+interface ClientRect
+    attribute @@toStringTag
+    getter bottom
+    getter height
+    getter left
+    getter right
+    getter top
+    getter width
+    method constructor
+interface ClientRectList
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method item
+interface ClipboardEvent : Event
+    attribute @@toStringTag
+    getter clipboardData
+    method constructor
+interface CloseEvent : Event
+    attribute @@toStringTag
+    getter code
+    getter reason
+    getter wasClean
+    method constructor
+interface Comment : CharacterData
+    attribute @@toStringTag
+    method constructor
+interface CompositionEvent : UIEvent
+    attribute @@toStringTag
+    getter data
+    method constructor
+    method initCompositionEvent
+interface CompositorProxy
+    attribute @@toStringTag
+    getter initialized
+    getter opacity
+    getter scrollLeft
+    getter scrollTop
+    getter transform
+    method constructor
+    method disconnect
+    method supports
+    setter opacity
+    setter scrollLeft
+    setter scrollTop
+    setter transform
+interface CompositorWorker : EventTarget
+    attribute @@toStringTag
+    getter onerror
+    getter onmessage
+    method constructor
+    method postMessage
+    method terminate
+    setter onerror
+    setter onmessage
+interface ConstantSourceNode : AudioScheduledSourceNode
+    attribute @@toStringTag
+    getter offset
+    method constructor
+interface ConvolverNode : AudioNode
+    attribute @@toStringTag
+    getter buffer
+    getter normalize
+    method constructor
+    setter buffer
+    setter normalize
+interface CountQueuingStrategy
+    method constructor
+    method size
+interface Credential
+    attribute @@toStringTag
+    getter id
+    getter type
+    method constructor
+interface CredentialsContainer
+    attribute @@toStringTag
+    method constructor
+    method get
+    method requireUserMediation
+    method store
+interface Crypto
+    attribute @@toStringTag
+    getter subtle
+    method constructor
+    method getRandomValues
+interface CryptoKey
+    attribute @@toStringTag
+    getter algorithm
+    getter extractable
+    getter type
+    getter usages
+    method constructor
+interface CustomElementRegistry
+    attribute @@toStringTag
+    method constructor
+    method define
+    method get
+    method whenDefined
+interface CustomEvent : Event
+    attribute @@toStringTag
+    getter detail
+    method constructor
+    method initCustomEvent
+interface DOMError
+    attribute @@toStringTag
+    getter message
+    getter name
+    method constructor
+interface DOMException
+    attribute @@toStringTag
+    attribute ABORT_ERR
+    attribute DATA_CLONE_ERR
+    attribute DOMSTRING_SIZE_ERR
+    attribute HIERARCHY_REQUEST_ERR
+    attribute INDEX_SIZE_ERR
+    attribute INUSE_ATTRIBUTE_ERR
+    attribute INVALID_ACCESS_ERR
+    attribute INVALID_CHARACTER_ERR
+    attribute INVALID_MODIFICATION_ERR
+    attribute INVALID_NODE_TYPE_ERR
+    attribute INVALID_STATE_ERR
+    attribute NAMESPACE_ERR
+    attribute NETWORK_ERR
+    attribute NOT_FOUND_ERR
+    attribute NOT_SUPPORTED_ERR
+    attribute NO_DATA_ALLOWED_ERR
+    attribute NO_MODIFICATION_ALLOWED_ERR
+    attribute QUOTA_EXCEEDED_ERR
+    attribute SECURITY_ERR
+    attribute SYNTAX_ERR
+    attribute TIMEOUT_ERR
+    attribute TYPE_MISMATCH_ERR
+    attribute URL_MISMATCH_ERR
+    attribute VALIDATION_ERR
+    attribute WRONG_DOCUMENT_ERR
+    getter code
+    getter message
+    getter name
+    method constructor
+    method toString
+interface DOMImplementation
+    attribute @@toStringTag
+    method constructor
+    method createDocument
+    method createDocumentType
+    method createHTMLDocument
+    method hasFeature
+interface DOMMatrix : DOMMatrixReadOnly
+    attribute @@toStringTag
+    getter a
+    getter b
+    getter c
+    getter d
+    getter e
+    getter f
+    getter m11
+    getter m12
+    getter m13
+    getter m14
+    getter m21
+    getter m22
+    getter m23
+    getter m24
+    getter m31
+    getter m32
+    getter m33
+    getter m34
+    getter m41
+    getter m42
+    getter m43
+    getter m44
+    method constructor
+    method invertSelf
+    method multiplySelf
+    method preMultiplySelf
+    method rotateAxisAngleSelf
+    method rotateFromVectorSelf
+    method rotateSelf
+    method scale3dSelf
+    method scaleSelf
+    method setMatrixValue
+    method skewXSelf
+    method skewYSelf
+    method translateSelf
+    setter a
+    setter b
+    setter c
+    setter d
+    setter e
+    setter f
+    setter m11
+    setter m12
+    setter m13
+    setter m14
+    setter m21
+    setter m22
+    setter m23
+    setter m24
+    setter m31
+    setter m32
+    setter m33
+    setter m34
+    setter m41
+    setter m42
+    setter m43
+    setter m44
+interface DOMMatrixReadOnly
+    static method fromFloat32Array
+    static method fromFloat64Array
+    static method fromMatrix
+    attribute @@toStringTag
+    getter a
+    getter b
+    getter c
+    getter d
+    getter e
+    getter f
+    getter is2D
+    getter isIdentity
+    getter m11
+    getter m12
+    getter m13
+    getter m14
+    getter m21
+    getter m22
+    getter m23
+    getter m24
+    getter m31
+    getter m32
+    getter m33
+    getter m34
+    getter m41
+    getter m42
+    getter m43
+    getter m44
+    method constructor
+    method flipX
+    method flipY
+    method inverse
+    method multiply
+    method rotate
+    method rotateAxisAngle
+    method rotateFromVector
+    method scale
+    method scale3d
+    method skewX
+    method skewY
+    method toFloat32Array
+    method toFloat64Array
+    method toJSON
+    method toString
+    method transformPoint
+    method translate
+interface DOMParser
+    attribute @@toStringTag
+    method constructor
+    method parseFromString
+interface DOMPoint : DOMPointReadOnly
+    attribute @@toStringTag
+    getter w
+    getter x
+    getter y
+    getter z
+    method constructor
+    setter w
+    setter x
+    setter y
+    setter z
+interface DOMPointReadOnly
+    static method fromPoint
+    attribute @@toStringTag
+    getter w
+    getter x
+    getter y
+    getter z
+    method constructor
+    method matrixTransform
+    method toJSON
+interface DOMQuad
+    static method fromQuad
+    static method fromRect
+    attribute @@toStringTag
+    getter p1
+    getter p2
+    getter p3
+    getter p4
+    method constructor
+    method getBounds
+    method toJSON
+interface DOMRect : DOMRectReadOnly
+    attribute @@toStringTag
+    getter height
+    getter width
+    getter x
+    getter y
+    method constructor
+    setter height
+    setter width
+    setter x
+    setter y
+interface DOMRectReadOnly
+    static method fromRect
+    attribute @@toStringTag
+    getter bottom
+    getter height
+    getter left
+    getter right
+    getter top
+    getter width
+    getter x
+    getter y
+    method constructor
+    method toJSON
+interface DOMStringList
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method contains
+    method item
+interface DOMStringMap
+    attribute @@toStringTag
+    method constructor
+interface DOMTokenList
+    attribute @@toStringTag
+    getter length
+    getter value
+    method @@iterator
+    method add
+    method constructor
+    method contains
+    method entries
+    method forEach
+    method item
+    method keys
+    method remove
+    method supports
+    method toString
+    method toggle
+    method values
+    setter value
+interface DataTransfer
+    attribute @@toStringTag
+    getter dropEffect
+    getter effectAllowed
+    getter files
+    getter items
+    getter types
+    method clearData
+    method constructor
+    method getData
+    method setData
+    method setDragImage
+    setter dropEffect
+    setter effectAllowed
+interface DataTransferItem
+    attribute @@toStringTag
+    getter kind
+    getter type
+    method constructor
+    method getAsFile
+    method getAsString
+    method webkitGetAsEntry
+interface DataTransferItemList
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method add
+    method clear
+    method constructor
+    method remove
+interface DataView
+    attribute @@toStringTag
+    getter buffer
+    getter byteLength
+    getter byteOffset
+    method constructor
+    method getFloat32
+    method getFloat64
+    method getInt16
+    method getInt32
+    method getInt8
+    method getUint16
+    method getUint32
+    method getUint8
+    method setFloat32
+    method setFloat64
+    method setInt16
+    method setInt32
+    method setInt8
+    method setUint16
+    method setUint32
+    method setUint8
+interface DelayNode : AudioNode
+    attribute @@toStringTag
+    getter delayTime
+    method constructor
+interface DetectedBarcode
+    attribute @@toStringTag
+    getter boundingBox
+    getter cornerPoints
+    getter rawValue
+    method constructor
+interface DetectedFace
+    attribute @@toStringTag
+    getter boundingBox
+    method constructor
+interface DetectedText
+    attribute @@toStringTag
+    getter boundingBox
+    getter rawValue
+    method constructor
+interface DeviceLightEvent : Event
+    attribute @@toStringTag
+    getter value
+    method constructor
+interface DeviceMotionEvent : Event
+    attribute @@toStringTag
+    getter acceleration
+    getter accelerationIncludingGravity
+    getter interval
+    getter rotationRate
+    method constructor
+interface DeviceOrientationEvent : Event
+    attribute @@toStringTag
+    getter absolute
+    getter alpha
+    getter beta
+    getter gamma
+    method constructor
+interface Document : Node
+    attribute @@toStringTag
+    attribute @@unscopables
+    getter URL
+    getter activeElement
+    getter addressSpace
+    getter anchors
+    getter applets
+    getter body
+    getter characterSet
+    getter charset
+    getter childElementCount
+    getter children
+    getter compatMode
+    getter contentType
+    getter cookie
+    getter currentScript
+    getter defaultView
+    getter designMode
+    getter dir
+    getter doctype
+    getter documentElement
+    getter documentURI
+    getter domain
+    getter embeds
+    getter firstElementChild
+    getter fonts
+    getter forms
+    getter fullscreenElement
+    getter fullscreenEnabled
+    getter head
+    getter hidden
+    getter images
+    getter implementation
+    getter inputEncoding
+    getter lastElementChild
+    getter lastModified
+    getter links
+    getter onabort
+    getter onauxclick
+    getter onbeforecopy
+    getter onbeforecut
+    getter onbeforepaste
+    getter onblur
+    getter oncancel
+    getter oncanplay
+    getter oncanplaythrough
+    getter onchange
+    getter onclick
+    getter onclose
+    getter oncontextmenu
+    getter oncopy
+    getter oncuechange
+    getter oncut
+    getter ondblclick
+    getter ondrag
+    getter ondragend
+    getter ondragenter
+    getter ondragleave
+    getter ondragover
+    getter ondragstart
+    getter ondrop
+    getter ondurationchange
+    getter onemptied
+    getter onended
+    getter onerror
+    getter onfocus
+    getter onfullscreenchange
+    getter onfullscreenerror
+    getter ongotpointercapture
+    getter oninput
+    getter oninvalid
+    getter onkeydown
+    getter onkeypress
+    getter onkeyup
+    getter onload
+    getter onloadeddata
+    getter onloadedmetadata
+    getter onloadstart
+    getter onlostpointercapture
+    getter onmousedown
+    getter onmouseenter
+    getter onmouseleave
+    getter onmousemove
+    getter onmouseout
+    getter onmouseover
+    getter onmouseup
+    getter onmousewheel
+    getter onpaste
+    getter onpause
+    getter onplay
+    getter onplaying
+    getter onpointercancel
+    getter onpointerdown
+    getter onpointerenter
+    getter onpointerleave
+    getter onpointerlockchange
+    getter onpointerlockerror
+    getter onpointermove
+    getter onpointerout
+    getter onpointerover
+    getter onpointerup
+    getter onprogress
+    getter onratechange
+    getter onreadystatechange
+    getter onreset
+    getter onresize
+    getter onscroll
+    getter onsearch
+    getter onsecuritypolicyviolation
+    getter onseeked
+    getter onseeking
+    getter onselect
+    getter onselectionchange
+    getter onselectstart
+    getter onshow
+    getter onstalled
+    getter onsubmit
+    getter onsuspend
+    getter ontimeupdate
+    getter ontoggle
+    getter ontouchcancel
+    getter ontouchend
+    getter ontouchmove
+    getter ontouchstart
+    getter onvolumechange
+    getter onwaiting
+    getter onwebkitfullscreenchange
+    getter onwebkitfullscreenerror
+    getter onwheel
+    getter origin
+    getter plugins
+    getter pointerLockElement
+    getter preferredStylesheetSet
+    getter readyState
+    getter referrer
+    getter rootElement
+    getter rootScroller
+    getter scripts
+    getter scrollingElement
+    getter selectedStylesheetSet
+    getter styleSheets
+    getter suborigin
+    getter timeline
+    getter title
+    getter visibilityState
+    getter webkitCurrentFullScreenElement
+    getter webkitFullscreenElement
+    getter webkitFullscreenEnabled
+    getter webkitHidden
+    getter webkitIsFullScreen
+    getter webkitVisibilityState
+    getter xmlEncoding
+    getter xmlStandalone
+    getter xmlVersion
+    method adoptNode
+    method append
+    method caretRangeFromPoint
+    method close
+    method constructor
+    method createAttribute
+    method createAttributeNS
+    method createCDATASection
+    method createComment
+    method createDocumentFragment
+    method createElement
+    method createElementNS
+    method createEvent
+    method createExpression
+    method createNSResolver
+    method createNodeIterator
+    method createProcessingInstruction
+    method createRange
+    method createTextNode
+    method createTouch
+    method createTouchList
+    method createTreeWalker
+    method elementFromPoint
+    method elementsFromPoint
+    method evaluate
+    method execCommand
+    method exitFullscreen
+    method exitPointerLock
+    method getElementById
+    method getElementsByClassName
+    method getElementsByName
+    method getElementsByTagName
+    method getElementsByTagNameNS
+    method getSelection
+    method hasFocus
+    method importNode
+    method open
+    method prepend
+    method queryCommandEnabled
+    method queryCommandIndeterm
+    method queryCommandState
+    method queryCommandSupported
+    method queryCommandValue
+    method querySelector
+    method querySelectorAll
+    method registerElement
+    method webkitCancelFullScreen
+    method webkitExitFullscreen
+    method write
+    method writeln
+    setter body
+    setter cookie
+    setter designMode
+    setter dir
+    setter domain
+    setter onabort
+    setter onauxclick
+    setter onbeforecopy
+    setter onbeforecut
+    setter onbeforepaste
+    setter onblur
+    setter oncancel
+    setter oncanplay
+    setter oncanplaythrough
+    setter onchange
+    setter onclick
+    setter onclose
+    setter oncontextmenu
+    setter oncopy
+    setter oncuechange
+    setter oncut
+    setter ondblclick
+    setter ondrag
+    setter ondragend
+    setter ondragenter
+    setter ondragleave
+    setter ondragover
+    setter ondragstart
+    setter ondrop
+    setter ondurationchange
+    setter onemptied
+    setter onended
+    setter onerror
+    setter onfocus
+    setter onfullscreenchange
+    setter onfullscreenerror
+    setter ongotpointercapture
+    setter oninput
+    setter oninvalid
+    setter onkeydown
+    setter onkeypress
+    setter onkeyup
+    setter onload
+    setter onloadeddata
+    setter onloadedmetadata
+    setter onloadstart
+    setter onlostpointercapture
+    setter onmousedown
+    setter onmouseenter
+    setter onmouseleave
+    setter onmousemove
+    setter onmouseout
+    setter onmouseover
+    setter onmouseup
+    setter onmousewheel
+    setter onpaste
+    setter onpause
+    setter onplay
+    setter onplaying
+    setter onpointercancel
+    setter onpointerdown
+    setter onpointerenter
+    setter onpointerleave
+    setter onpointerlockchange
+    setter onpointerlockerror
+    setter onpointermove
+    setter onpointerout
+    setter onpointerover
+    setter onpointerup
+    setter onprogress
+    setter onratechange
+    setter onreadystatechange
+    setter onreset
+    setter onresize
+    setter onscroll
+    setter onsearch
+    setter onsecuritypolicyviolation
+    setter onseeked
+    setter onseeking
+    setter onselect
+    setter onselectionchange
+    setter onselectstart
+    setter onshow
+    setter onstalled
+    setter onsubmit
+    setter onsuspend
+    setter ontimeupdate
+    setter ontoggle
+    setter ontouchcancel
+    setter ontouchend
+    setter ontouchmove
+    setter ontouchstart
+    setter onvolumechange
+    setter onwaiting
+    setter onwebkitfullscreenchange
+    setter onwebkitfullscreenerror
+    setter onwheel
+    setter rootScroller
+    setter selectedStylesheetSet
+    setter title
+    setter xmlStandalone
+    setter xmlVersion
+interface DocumentFragment : Node
+    attribute @@toStringTag
+    attribute @@unscopables
+    getter childElementCount
+    getter children
+    getter firstElementChild
+    getter lastElementChild
+    method append
+    method constructor
+    method getElementById
+    method prepend
+    method querySelector
+    method querySelectorAll
+interface DocumentTimeline : AnimationTimeline
+    attribute @@toStringTag
+    method constructor
+interface DocumentType : Node
+    attribute @@toStringTag
+    attribute @@unscopables
+    getter name
+    getter publicId
+    getter systemId
+    method after
+    method before
+    method constructor
+    method remove
+    method replaceWith
+interface DragEvent : MouseEvent
+    attribute @@toStringTag
+    getter dataTransfer
+    method constructor
+interface DynamicsCompressorNode : AudioNode
+    attribute @@toStringTag
+    getter attack
+    getter knee
+    getter ratio
+    getter reduction
+    getter release
+    getter threshold
+    method constructor
+interface Element : Node
+    attribute @@toStringTag
+    attribute @@unscopables
+    getter assignedSlot
+    getter attributes
+    getter childElementCount
+    getter children
+    getter classList
+    getter className
+    getter clientHeight
+    getter clientLeft
+    getter clientTop
+    getter clientWidth
+    getter computedName
+    getter computedRole
+    getter firstElementChild
+    getter id
+    getter innerHTML
+    getter lastElementChild
+    getter localName
+    getter namespaceURI
+    getter nextElementSibling
+    getter onbeforecopy
+    getter onbeforecut
+    getter onbeforepaste
+    getter oncopy
+    getter oncut
+    getter onpaste
+    getter onsearch
+    getter onselectstart
+    getter onwebkitfullscreenchange
+    getter onwebkitfullscreenerror
+    getter onwheel
+    getter outerHTML
+    getter prefix
+    getter previousElementSibling
+    getter scrollHeight
+    getter scrollLeft
+    getter scrollTop
+    getter scrollWidth
+    getter shadowRoot
+    getter slot
+    getter styleMap
+    getter tagName
+    method after
+    method animate
+    method append
+    method attachShadow
+    method before
+    method closest
+    method constructor
+    method createShadowRoot
+    method getAnimations
+    method getAttribute
+    method getAttributeNS
+    method getAttributeNode
+    method getAttributeNodeNS
+    method getBoundingClientRect
+    method getClientRects
+    method getDestinationInsertionPoints
+    method getElementsByClassName
+    method getElementsByTagName
+    method getElementsByTagNameNS
+    method hasAttribute
+    method hasAttributeNS
+    method hasAttributes
+    method hasPointerCapture
+    method insertAdjacentElement
+    method insertAdjacentHTML
+    method insertAdjacentText
+    method matches
+    method prepend
+    method querySelector
+    method querySelectorAll
+    method releasePointerCapture
+    method remove
+    method removeAttribute
+    method removeAttributeNS
+    method removeAttributeNode
+    method replaceWith
+    method requestFullscreen
+    method requestPointerLock
+    method scroll
+    method scrollBy
+    method scrollIntoView
+    method scrollIntoViewIfNeeded
+    method scrollTo
+    method setAttribute
+    method setAttributeNS
+    method setAttributeNode
+    method setAttributeNodeNS
+    method setPointerCapture
+    method webkitMatchesSelector
+    method webkitRequestFullScreen
+    method webkitRequestFullscreen
+    setter classList
+    setter className
+    setter id
+    setter innerHTML
+    setter onbeforecopy
+    setter onbeforecut
+    setter onbeforepaste
+    setter oncopy
+    setter oncut
+    setter onpaste
+    setter onsearch
+    setter onselectstart
+    setter onwebkitfullscreenchange
+    setter onwebkitfullscreenerror
+    setter onwheel
+    setter outerHTML
+    setter scrollLeft
+    setter scrollTop
+    setter slot
+interface ErrorEvent : Event
+    attribute @@toStringTag
+    getter colno
+    getter error
+    getter filename
+    getter lineno
+    getter message
+    method constructor
+interface Event
+    attribute @@toStringTag
+    attribute AT_TARGET
+    attribute BUBBLING_PHASE
+    attribute CAPTURING_PHASE
+    attribute NONE
+    getter bubbles
+    getter cancelBubble
+    getter cancelable
+    getter composed
+    getter currentTarget
+    getter defaultPrevented
+    getter eventPhase
+    getter path
+    getter returnValue
+    getter srcElement
+    getter target
+    getter timeStamp
+    getter type
+    method composedPath
+    method constructor
+    method initEvent
+    method preventDefault
+    method stopImmediatePropagation
+    method stopPropagation
+    setter cancelBubble
+    setter returnValue
+interface EventSource : EventTarget
+    attribute @@toStringTag
+    attribute CLOSED
+    attribute CONNECTING
+    attribute OPEN
+    getter onerror
+    getter onmessage
+    getter onopen
+    getter readyState
+    getter url
+    getter withCredentials
+    method close
+    method constructor
+    setter onerror
+    setter onmessage
+    setter onopen
+interface EventTarget
+    attribute @@toStringTag
+    method addEventListener
+    method constructor
+    method dispatchEvent
+    method removeEventListener
+interface FaceDetector
+    attribute @@toStringTag
+    method constructor
+    method detect
+interface FederatedCredential : SiteBoundCredential
+    attribute @@toStringTag
+    getter protocol
+    getter provider
+    method constructor
+interface File : Blob
+    attribute @@toStringTag
+    getter lastModified
+    getter lastModifiedDate
+    getter name
+    getter webkitRelativePath
+    method constructor
+interface FileList
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method item
+interface FileReader : EventTarget
+    attribute @@toStringTag
+    attribute DONE
+    attribute EMPTY
+    attribute LOADING
+    getter error
+    getter onabort
+    getter onerror
+    getter onload
+    getter onloadend
+    getter onloadstart
+    getter onprogress
+    getter readyState
+    getter result
+    method abort
+    method constructor
+    method readAsArrayBuffer
+    method readAsBinaryString
+    method readAsDataURL
+    method readAsText
+    setter onabort
+    setter onerror
+    setter onload
+    setter onloadend
+    setter onloadstart
+    setter onprogress
+interface FocusEvent : UIEvent
+    attribute @@toStringTag
+    getter relatedTarget
+    method constructor
+interface FontFace
+    attribute @@toStringTag
+    getter display
+    getter family
+    getter featureSettings
+    getter loaded
+    getter status
+    getter stretch
+    getter style
+    getter unicodeRange
+    getter variant
+    getter weight
+    method constructor
+    method load
+    setter display
+    setter family
+    setter featureSettings
+    setter stretch
+    setter style
+    setter unicodeRange
+    setter variant
+    setter weight
+interface FontFaceSetLoadEvent : Event
+    attribute @@toStringTag
+    getter fontfaces
+    method constructor
+interface FormData
+    attribute @@toStringTag
+    method @@iterator
+    method append
+    method constructor
+    method delete
+    method entries
+    method forEach
+    method get
+    method getAll
+    method has
+    method keys
+    method set
+    method values
+interface GainNode : AudioNode
+    attribute @@toStringTag
+    getter gain
+    method constructor
+interface Gamepad
+    attribute @@toStringTag
+    getter axes
+    getter buttons
+    getter connected
+    getter displayId
+    getter hand
+    getter id
+    getter index
+    getter mapping
+    getter pose
+    getter timestamp
+    method constructor
+interface GamepadButton
+    attribute @@toStringTag
+    getter pressed
+    getter touched
+    getter value
+    method constructor
+interface GamepadEvent : Event
+    attribute @@toStringTag
+    getter gamepad
+    method constructor
+interface GamepadPose
+    attribute @@toStringTag
+    getter angularAcceleration
+    getter angularVelocity
+    getter hasOrientation
+    getter hasPosition
+    getter linearAcceleration
+    getter linearVelocity
+    getter orientation
+    getter position
+    method constructor
+interface Gyroscope : Sensor
+    attribute @@toStringTag
+    getter x
+    getter y
+    getter z
+    method constructor
+interface HTMLAllCollection
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method item
+    method namedItem
+interface HTMLAnchorElement : HTMLElement
+    attribute @@toStringTag
+    getter charset
+    getter coords
+    getter download
+    getter hash
+    getter host
+    getter hostname
+    getter href
+    getter hreflang
+    getter name
+    getter origin
+    getter password
+    getter pathname
+    getter ping
+    getter port
+    getter protocol
+    getter referrerPolicy
+    getter rel
+    getter rev
+    getter search
+    getter shape
+    getter target
+    getter text
+    getter type
+    getter username
+    method constructor
+    method toString
+    setter charset
+    setter coords
+    setter download
+    setter hash
+    setter host
+    setter hostname
+    setter href
+    setter hreflang
+    setter name
+    setter password
+    setter pathname
+    setter ping
+    setter port
+    setter protocol
+    setter referrerPolicy
+    setter rel
+    setter rev
+    setter search
+    setter shape
+    setter target
+    setter text
+    setter type
+    setter username
+interface HTMLAreaElement : HTMLElement
+    attribute @@toStringTag
+    getter alt
+    getter coords
+    getter download
+    getter hash
+    getter host
+    getter hostname
+    getter href
+    getter noHref
+    getter origin
+    getter password
+    getter pathname
+    getter ping
+    getter port
+    getter protocol
+    getter referrerPolicy
+    getter rel
+    getter search
+    getter shape
+    getter target
+    getter username
+    method constructor
+    method toString
+    setter alt
+    setter coords
+    setter download
+    setter hash
+    setter host
+    setter hostname
+    setter href
+    setter noHref
+    setter password
+    setter pathname
+    setter ping
+    setter port
+    setter protocol
+    setter referrerPolicy
+    setter rel
+    setter search
+    setter shape
+    setter target
+    setter username
+interface HTMLAudioElement : HTMLMediaElement
+    attribute @@toStringTag
+    method constructor
+interface HTMLBRElement : HTMLElement
+    attribute @@toStringTag
+    getter clear
+    method constructor
+    setter clear
+interface HTMLBaseElement : HTMLElement
+    attribute @@toStringTag
+    getter href
+    getter target
+    method constructor
+    setter href
+    setter target
+interface HTMLBodyElement : HTMLElement
+    attribute @@toStringTag
+    getter aLink
+    getter background
+    getter bgColor
+    getter link
+    getter onbeforeunload
+    getter onblur
+    getter onerror
+    getter onfocus
+    getter onhashchange
+    getter onlanguagechange
+    getter onload
+    getter onmessage
+    getter onoffline
+    getter ononline
+    getter onpagehide
+    getter onpageshow
+    getter onpopstate
+    getter onrejectionhandled
+    getter onresize
+    getter onscroll
+    getter onstorage
+    getter onunhandledrejection
+    getter onunload
+    getter text
+    getter vLink
+    method constructor
+    setter aLink
+    setter background
+    setter bgColor
+    setter link
+    setter onbeforeunload
+    setter onblur
+    setter onerror
+    setter onfocus
+    setter onhashchange
+    setter onlanguagechange
+    setter onload
+    setter onmessage
+    setter onoffline
+    setter ononline
+    setter onpagehide
+    setter onpageshow
+    setter onpopstate
+    setter onrejectionhandled
+    setter onresize
+    setter onscroll
+    setter onstorage
+    setter onunhandledrejection
+    setter onunload
+    setter text
+    setter vLink
+interface HTMLButtonElement : HTMLElement
+    attribute @@toStringTag
+    getter autofocus
+    getter disabled
+    getter form
+    getter formAction
+    getter formEnctype
+    getter formMethod
+    getter formNoValidate
+    getter formTarget
+    getter labels
+    getter name
+    getter type
+    getter validationMessage
+    getter validity
+    getter value
+    getter willValidate
+    method checkValidity
+    method constructor
+    method reportValidity
+    method setCustomValidity
+    setter autofocus
+    setter disabled
+    setter formAction
+    setter formEnctype
+    setter formMethod
+    setter formNoValidate
+    setter formTarget
+    setter name
+    setter type
+    setter value
+interface HTMLCanvasElement : HTMLElement
+    attribute @@toStringTag
+    getter height
+    getter width
+    method captureStream
+    method constructor
+    method getContext
+    method toBlob
+    method toDataURL
+    method transferControlToOffscreen
+    setter height
+    setter width
+interface HTMLCollection
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method item
+    method namedItem
+interface HTMLContentElement : HTMLElement
+    attribute @@toStringTag
+    getter select
+    method constructor
+    method getDistributedNodes
+    setter select
+interface HTMLDListElement : HTMLElement
+    attribute @@toStringTag
+    getter compact
+    method constructor
+    setter compact
+interface HTMLDataListElement : HTMLElement
+    attribute @@toStringTag
+    getter options
+    method constructor
+interface HTMLDetailsElement : HTMLElement
+    attribute @@toStringTag
+    getter open
+    method constructor
+    setter open
+interface HTMLDialogElement : HTMLElement
+    attribute @@toStringTag
+    getter open
+    getter returnValue
+    method close
+    method constructor
+    method show
+    method showModal
+    setter open
+    setter returnValue
+interface HTMLDirectoryElement : HTMLElement
+    attribute @@toStringTag
+    getter compact
+    method constructor
+    setter compact
+interface HTMLDivElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    method constructor
+    setter align
+interface HTMLDocument : Document
+    attribute @@toStringTag
+    getter alinkColor
+    getter all
+    getter bgColor
+    getter fgColor
+    getter linkColor
+    getter vlinkColor
+    method captureEvents
+    method clear
+    method constructor
+    method releaseEvents
+    setter alinkColor
+    setter all
+    setter bgColor
+    setter fgColor
+    setter linkColor
+    setter vlinkColor
+interface HTMLElement : Element
+    attribute @@toStringTag
+    getter accessKey
+    getter contentEditable
+    getter contextMenu
+    getter dataset
+    getter dir
+    getter draggable
+    getter hidden
+    getter innerText
+    getter inputMode
+    getter isContentEditable
+    getter lang
+    getter offsetHeight
+    getter offsetLeft
+    getter offsetParent
+    getter offsetTop
+    getter offsetWidth
+    getter onabort
+    getter onauxclick
+    getter onblur
+    getter oncancel
+    getter oncanplay
+    getter oncanplaythrough
+    getter onchange
+    getter onclick
+    getter onclose
+    getter oncontextmenu
+    getter oncuechange
+    getter ondblclick
+    getter ondrag
+    getter ondragend
+    getter ondragenter
+    getter ondragleave
+    getter ondragover
+    getter ondragstart
+    getter ondrop
+    getter ondurationchange
+    getter onemptied
+    getter onended
+    getter onerror
+    getter onfocus
+    getter ongotpointercapture
+    getter oninput
+    getter oninvalid
+    getter onkeydown
+    getter onkeypress
+    getter onkeyup
+    getter onload
+    getter onloadeddata
+    getter onloadedmetadata
+    getter onloadstart
+    getter onlostpointercapture
+    getter onmousedown
+    getter onmouseenter
+    getter onmouseleave
+    getter onmousemove
+    getter onmouseout
+    getter onmouseover
+    getter onmouseup
+    getter onmousewheel
+    getter onpause
+    getter onplay
+    getter onplaying
+    getter onpointercancel
+    getter onpointerdown
+    getter onpointerenter
+    getter onpointerleave
+    getter onpointermove
+    getter onpointerout
+    getter onpointerover
+    getter onpointerup
+    getter onprogress
+    getter onratechange
+    getter onreset
+    getter onresize
+    getter onscroll
+    getter onseeked
+    getter onseeking
+    getter onselect
+    getter onshow
+    getter onstalled
+    getter onsubmit
+    getter onsuspend
+    getter ontimeupdate
+    getter ontoggle
+    getter ontouchcancel
+    getter ontouchend
+    getter ontouchmove
+    getter ontouchstart
+    getter onvolumechange
+    getter onwaiting
+    getter outerText
+    getter spellcheck
+    getter style
+    getter tabIndex
+    getter title
+    getter translate
+    method blur
+    method click
+    method constructor
+    method focus
+    setter accessKey
+    setter contentEditable
+    setter contextMenu
+    setter dir
+    setter draggable
+    setter hidden
+    setter innerText
+    setter inputMode
+    setter lang
+    setter onabort
+    setter onauxclick
+    setter onblur
+    setter oncancel
+    setter oncanplay
+    setter oncanplaythrough
+    setter onchange
+    setter onclick
+    setter onclose
+    setter oncontextmenu
+    setter oncuechange
+    setter ondblclick
+    setter ondrag
+    setter ondragend
+    setter ondragenter
+    setter ondragleave
+    setter ondragover
+    setter ondragstart
+    setter ondrop
+    setter ondurationchange
+    setter onemptied
+    setter onended
+    setter onerror
+    setter onfocus
+    setter ongotpointercapture
+    setter oninput
+    setter oninvalid
+    setter onkeydown
+    setter onkeypress
+    setter onkeyup
+    setter onload
+    setter onloadeddata
+    setter onloadedmetadata
+    setter onloadstart
+    setter onlostpointercapture
+    setter onmousedown
+    setter onmouseenter
+    setter onmouseleave
+    setter onmousemove
+    setter onmouseout
+    setter onmouseover
+    setter onmouseup
+    setter onmousewheel
+    setter onpause
+    setter onplay
+    setter onplaying
+    setter onpointercancel
+    setter onpointerdown
+    setter onpointerenter
+    setter onpointerleave
+    setter onpointermove
+    setter onpointerout
+    setter onpointerover
+    setter onpointerup
+    setter onprogress
+    setter onratechange
+    setter onreset
+    setter onresize
+    setter onscroll
+    setter onseeked
+    setter onseeking
+    setter onselect
+    setter onshow
+    setter onstalled
+    setter onsubmit
+    setter onsuspend
+    setter ontimeupdate
+    setter ontoggle
+    setter ontouchcancel
+    setter ontouchend
+    setter ontouchmove
+    setter ontouchstart
+    setter onvolumechange
+    setter onwaiting
+    setter outerText
+    setter spellcheck
+    setter style
+    setter tabIndex
+    setter title
+    setter translate
+interface HTMLEmbedElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    getter height
+    getter name
+    getter src
+    getter type
+    getter width
+    method constructor
+    method getSVGDocument
+    setter align
+    setter height
+    setter name
+    setter src
+    setter type
+    setter width
+interface HTMLFieldSetElement : HTMLElement
+    attribute @@toStringTag
+    getter disabled
+    getter elements
+    getter form
+    getter name
+    getter type
+    getter validationMessage
+    getter validity
+    getter willValidate
+    method checkValidity
+    method constructor
+    method reportValidity
+    method setCustomValidity
+    setter disabled
+    setter name
+interface HTMLFontElement : HTMLElement
+    attribute @@toStringTag
+    getter color
+    getter face
+    getter size
+    method constructor
+    setter color
+    setter face
+    setter size
+interface HTMLFormControlsCollection : HTMLCollection
+    attribute @@toStringTag
+    method constructor
+    method namedItem
+interface HTMLFormElement : HTMLElement
+    attribute @@toStringTag
+    getter acceptCharset
+    getter action
+    getter autocomplete
+    getter elements
+    getter encoding
+    getter enctype
+    getter length
+    getter method
+    getter name
+    getter noValidate
+    getter target
+    method @@iterator
+    method checkValidity
+    method constructor
+    method reportValidity
+    method reset
+    method submit
+    setter acceptCharset
+    setter action
+    setter autocomplete
+    setter encoding
+    setter enctype
+    setter method
+    setter name
+    setter noValidate
+    setter target
+interface HTMLFrameElement : HTMLElement
+    attribute @@toStringTag
+    getter contentDocument
+    getter contentWindow
+    getter frameBorder
+    getter longDesc
+    getter marginHeight
+    getter marginWidth
+    getter name
+    getter noResize
+    getter scrolling
+    getter src
+    method constructor
+    setter frameBorder
+    setter longDesc
+    setter marginHeight
+    setter marginWidth
+    setter name
+    setter noResize
+    setter scrolling
+    setter src
+interface HTMLFrameSetElement : HTMLElement
+    attribute @@toStringTag
+    getter cols
+    getter onbeforeunload
+    getter onblur
+    getter onerror
+    getter onfocus
+    getter onhashchange
+    getter onlanguagechange
+    getter onload
+    getter onmessage
+    getter onoffline
+    getter ononline
+    getter onpagehide
+    getter onpageshow
+    getter onpopstate
+    getter onrejectionhandled
+    getter onresize
+    getter onscroll
+    getter onstorage
+    getter onunhandledrejection
+    getter onunload
+    getter rows
+    method constructor
+    setter cols
+    setter onbeforeunload
+    setter onblur
+    setter onerror
+    setter onfocus
+    setter onhashchange
+    setter onlanguagechange
+    setter onload
+    setter onmessage
+    setter onoffline
+    setter ononline
+    setter onpagehide
+    setter onpageshow
+    setter onpopstate
+    setter onrejectionhandled
+    setter onresize
+    setter onscroll
+    setter onstorage
+    setter onunhandledrejection
+    setter onunload
+    setter rows
+interface HTMLHRElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    getter color
+    getter noShade
+    getter size
+    getter width
+    method constructor
+    setter align
+    setter color
+    setter noShade
+    setter size
+    setter width
+interface HTMLHeadElement : HTMLElement
+    attribute @@toStringTag
+    method constructor
+interface HTMLHeadingElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    method constructor
+    setter align
+interface HTMLHtmlElement : HTMLElement
+    attribute @@toStringTag
+    getter version
+    method constructor
+    setter version
+interface HTMLIFrameElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    getter allowFullscreen
+    getter allowPaymentRequest
+    getter contentDocument
+    getter contentWindow
+    getter csp
+    getter frameBorder
+    getter height
+    getter longDesc
+    getter marginHeight
+    getter marginWidth
+    getter name
+    getter referrerPolicy
+    getter sandbox
+    getter scrolling
+    getter src
+    getter srcdoc
+    getter width
+    method constructor
+    method getSVGDocument
+    setter align
+    setter allowFullscreen
+    setter allowPaymentRequest
+    setter csp
+    setter frameBorder
+    setter height
+    setter longDesc
+    setter marginHeight
+    setter marginWidth
+    setter name
+    setter referrerPolicy
+    setter sandbox
+    setter scrolling
+    setter src
+    setter srcdoc
+    setter width
+interface HTMLImageElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    getter alt
+    getter border
+    getter complete
+    getter crossOrigin
+    getter currentSrc
+    getter height
+    getter hspace
+    getter isMap
+    getter longDesc
+    getter lowsrc
+    getter name
+    getter naturalHeight
+    getter naturalWidth
+    getter referrerPolicy
+    getter sizes
+    getter src
+    getter srcset
+    getter useMap
+    getter vspace
+    getter width
+    getter x
+    getter y
+    method constructor
+    setter align
+    setter alt
+    setter border
+    setter crossOrigin
+    setter height
+    setter hspace
+    setter isMap
+    setter longDesc
+    setter lowsrc
+    setter name
+    setter referrerPolicy
+    setter sizes
+    setter src
+    setter srcset
+    setter useMap
+    setter vspace
+    setter width
+interface HTMLInputElement : HTMLElement
+    attribute @@toStringTag
+    getter accept
+    getter align
+    getter alt
+    getter autocapitalize
+    getter autocomplete
+    getter autofocus
+    getter checked
+    getter defaultChecked
+    getter defaultValue
+    getter dirName
+    getter disabled
+    getter files
+    getter form
+    getter formAction
+    getter formEnctype
+    getter formMethod
+    getter formNoValidate
+    getter formTarget
+    getter height
+    getter incremental
+    getter indeterminate
+    getter labels
+    getter list
+    getter max
+    getter maxLength
+    getter min
+    getter minLength
+    getter multiple
+    getter name
+    getter pattern
+    getter placeholder
+    getter readOnly
+    getter required
+    getter selectionDirection
+    getter selectionEnd
+    getter selectionStart
+    getter size
+    getter src
+    getter step
+    getter type
+    getter useMap
+    getter validationMessage
+    getter validity
+    getter value
+    getter valueAsDate
+    getter valueAsNumber
+    getter webkitEntries
+    getter webkitdirectory
+    getter width
+    getter willValidate
+    method checkValidity
+    method constructor
+    method reportValidity
+    method select
+    method setCustomValidity
+    method setRangeText
+    method setSelectionRange
+    method stepDown
+    method stepUp
+    setter accept
+    setter align
+    setter alt
+    setter autocapitalize
+    setter autocomplete
+    setter autofocus
+    setter checked
+    setter defaultChecked
+    setter defaultValue
+    setter dirName
+    setter disabled
+    setter files
+    setter formAction
+    setter formEnctype
+    setter formMethod
+    setter formNoValidate
+    setter formTarget
+    setter height
+    setter incremental
+    setter indeterminate
+    setter max
+    setter maxLength
+    setter min
+    setter minLength
+    setter multiple
+    setter name
+    setter pattern
+    setter placeholder
+    setter readOnly
+    setter required
+    setter selectionDirection
+    setter selectionEnd
+    setter selectionStart
+    setter size
+    setter src
+    setter step
+    setter type
+    setter useMap
+    setter value
+    setter valueAsDate
+    setter valueAsNumber
+    setter webkitdirectory
+    setter width
+interface HTMLLIElement : HTMLElement
+    attribute @@toStringTag
+    getter type
+    getter value
+    method constructor
+    setter type
+    setter value
+interface HTMLLabelElement : HTMLElement
+    attribute @@toStringTag
+    getter control
+    getter form
+    getter htmlFor
+    method constructor
+    setter htmlFor
+interface HTMLLegendElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    getter form
+    method constructor
+    setter align
+interface HTMLLinkElement : HTMLElement
+    attribute @@toStringTag
+    getter as
+    getter charset
+    getter crossOrigin
+    getter disabled
+    getter href
+    getter hreflang
+    getter import
+    getter integrity
+    getter media
+    getter referrerPolicy
+    getter rel
+    getter relList
+    getter rev
+    getter scope
+    getter sheet
+    getter sizes
+    getter target
+    getter type
+    method constructor
+    setter as
+    setter charset
+    setter crossOrigin
+    setter disabled
+    setter href
+    setter hreflang
+    setter integrity
+    setter media
+    setter referrerPolicy
+    setter rel
+    setter relList
+    setter rev
+    setter scope
+    setter sizes
+    setter target
+    setter type
+interface HTMLMapElement : HTMLElement
+    attribute @@toStringTag
+    getter areas
+    getter name
+    method constructor
+    setter name
+interface HTMLMarqueeElement : HTMLElement
+    attribute @@toStringTag
+    getter behavior
+    getter bgColor
+    getter direction
+    getter height
+    getter hspace
+    getter loop
+    getter scrollAmount
+    getter scrollDelay
+    getter trueSpeed
+    getter vspace
+    getter width
+    method constructor
+    method start
+    method stop
+    setter behavior
+    setter bgColor
+    setter direction
+    setter height
+    setter hspace
+    setter loop
+    setter scrollAmount
+    setter scrollDelay
+    setter trueSpeed
+    setter vspace
+    setter width
+interface HTMLMediaElement : HTMLElement
+    attribute @@toStringTag
+    attribute HAVE_CURRENT_DATA
+    attribute HAVE_ENOUGH_DATA
+    attribute HAVE_FUTURE_DATA
+    attribute HAVE_METADATA
+    attribute HAVE_NOTHING
+    attribute NETWORK_EMPTY
+    attribute NETWORK_IDLE
+    attribute NETWORK_LOADING
+    attribute NETWORK_NO_SOURCE
+    getter audioTracks
+    getter autoplay
+    getter buffered
+    getter controls
+    getter controlsList
+    getter crossOrigin
+    getter currentSrc
+    getter currentTime
+    getter defaultMuted
+    getter defaultPlaybackRate
+    getter disableRemotePlayback
+    getter duration
+    getter ended
+    getter error
+    getter loop
+    getter mediaKeys
+    getter muted
+    getter networkState
+    getter onencrypted
+    getter onwaitingforkey
+    getter paused
+    getter playbackRate
+    getter played
+    getter preload
+    getter readyState
+    getter remote
+    getter seekable
+    getter seeking
+    getter sinkId
+    getter src
+    getter srcObject
+    getter textTracks
+    getter videoTracks
+    getter volume
+    getter webkitAudioDecodedByteCount
+    getter webkitVideoDecodedByteCount
+    method addTextTrack
+    method canPlayType
+    method captureStream
+    method constructor
+    method load
+    method pause
+    method play
+    method setMediaKeys
+    method setSinkId
+    setter autoplay
+    setter controls
+    setter controlsList
+    setter crossOrigin
+    setter currentTime
+    setter defaultMuted
+    setter defaultPlaybackRate
+    setter disableRemotePlayback
+    setter loop
+    setter muted
+    setter onencrypted
+    setter onwaitingforkey
+    setter playbackRate
+    setter preload
+    setter src
+    setter srcObject
+    setter volume
+interface HTMLMenuElement : HTMLElement
+    attribute @@toStringTag
+    getter compact
+    getter label
+    getter type
+    method constructor
+    setter compact
+    setter label
+    setter type
+interface HTMLMenuItemElement : HTMLElement
+    attribute @@toStringTag
+    getter checked
+    getter default
+    getter disabled
+    getter icon
+    getter label
+    getter radiogroup
+    getter type
+    method constructor
+    setter checked
+    setter default
+    setter disabled
+    setter icon
+    setter label
+    setter radiogroup
+    setter type
+interface HTMLMetaElement : HTMLElement
+    attribute @@toStringTag
+    getter content
+    getter httpEquiv
+    getter name
+    getter scheme
+    method constructor
+    setter content
+    setter httpEquiv
+    setter name
+    setter scheme
+interface HTMLMeterElement : HTMLElement
+    attribute @@toStringTag
+    getter high
+    getter labels
+    getter low
+    getter max
+    getter min
+    getter optimum
+    getter value
+    method constructor
+    setter high
+    setter low
+    setter max
+    setter min
+    setter optimum
+    setter value
+interface HTMLModElement : HTMLElement
+    attribute @@toStringTag
+    getter cite
+    getter dateTime
+    method constructor
+    setter cite
+    setter dateTime
+interface HTMLOListElement : HTMLElement
+    attribute @@toStringTag
+    getter compact
+    getter reversed
+    getter start
+    getter type
+    method constructor
+    setter compact
+    setter reversed
+    setter start
+    setter type
+interface HTMLObjectElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    getter archive
+    getter border
+    getter code
+    getter codeBase
+    getter codeType
+    getter contentDocument
+    getter contentWindow
+    getter data
+    getter declare
+    getter form
+    getter height
+    getter hspace
+    getter name
+    getter standby
+    getter type
+    getter useMap
+    getter validationMessage
+    getter validity
+    getter vspace
+    getter width
+    getter willValidate
+    method checkValidity
+    method constructor
+    method getSVGDocument
+    method reportValidity
+    method setCustomValidity
+    setter align
+    setter archive
+    setter border
+    setter code
+    setter codeBase
+    setter codeType
+    setter data
+    setter declare
+    setter height
+    setter hspace
+    setter name
+    setter standby
+    setter type
+    setter useMap
+    setter vspace
+    setter width
+interface HTMLOptGroupElement : HTMLElement
+    attribute @@toStringTag
+    getter disabled
+    getter label
+    method constructor
+    setter disabled
+    setter label
+interface HTMLOptionElement : HTMLElement
+    attribute @@toStringTag
+    getter defaultSelected
+    getter disabled
+    getter form
+    getter index
+    getter label
+    getter selected
+    getter text
+    getter value
+    method constructor
+    setter defaultSelected
+    setter disabled
+    setter label
+    setter selected
+    setter text
+    setter value
+interface HTMLOptionsCollection : HTMLCollection
+    attribute @@toStringTag
+    getter length
+    getter selectedIndex
+    method @@iterator
+    method add
+    method constructor
+    method namedItem
+    method remove
+    setter length
+    setter selectedIndex
+interface HTMLOutputElement : HTMLElement
+    attribute @@toStringTag
+    getter defaultValue
+    getter form
+    getter htmlFor
+    getter labels
+    getter name
+    getter type
+    getter validationMessage
+    getter validity
+    getter value
+    getter willValidate
+    method checkValidity
+    method constructor
+    method reportValidity
+    method setCustomValidity
+    setter defaultValue
+    setter htmlFor
+    setter name
+    setter value
+interface HTMLParagraphElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    method constructor
+    setter align
+interface HTMLParamElement : HTMLElement
+    attribute @@toStringTag
+    getter name
+    getter type
+    getter value
+    getter valueType
+    method constructor
+    setter name
+    setter type
+    setter value
+    setter valueType
+interface HTMLPictureElement : HTMLElement
+    attribute @@toStringTag
+    method constructor
+interface HTMLPreElement : HTMLElement
+    attribute @@toStringTag
+    getter width
+    method constructor
+    setter width
+interface HTMLProgressElement : HTMLElement
+    attribute @@toStringTag
+    getter labels
+    getter max
+    getter position
+    getter value
+    method constructor
+    setter max
+    setter value
+interface HTMLQuoteElement : HTMLElement
+    attribute @@toStringTag
+    getter cite
+    method constructor
+    setter cite
+interface HTMLScriptElement : HTMLElement
+    attribute @@toStringTag
+    getter async
+    getter charset
+    getter crossOrigin
+    getter defer
+    getter event
+    getter htmlFor
+    getter integrity
+    getter nonce
+    getter src
+    getter text
+    getter type
+    method constructor
+    setter async
+    setter charset
+    setter crossOrigin
+    setter defer
+    setter event
+    setter htmlFor
+    setter integrity
+    setter nonce
+    setter src
+    setter text
+    setter type
+interface HTMLSelectElement : HTMLElement
+    attribute @@toStringTag
+    getter autofocus
+    getter disabled
+    getter form
+    getter labels
+    getter length
+    getter multiple
+    getter name
+    getter options
+    getter required
+    getter selectedIndex
+    getter selectedOptions
+    getter size
+    getter type
+    getter validationMessage
+    getter validity
+    getter value
+    getter willValidate
+    method @@iterator
+    method add
+    method checkValidity
+    method constructor
+    method item
+    method namedItem
+    method remove
+    method reportValidity
+    method setCustomValidity
+    setter autofocus
+    setter disabled
+    setter length
+    setter multiple
+    setter name
+    setter required
+    setter selectedIndex
+    setter size
+    setter value
+interface HTMLShadowElement : HTMLElement
+    attribute @@toStringTag
+    method constructor
+    method getDistributedNodes
+interface HTMLSlotElement : HTMLElement
+    attribute @@toStringTag
+    getter name
+    method assignedNodes
+    method constructor
+    setter name
+interface HTMLSourceElement : HTMLElement
+    attribute @@toStringTag
+    getter media
+    getter sizes
+    getter src
+    getter srcset
+    getter type
+    method constructor
+    setter media
+    setter sizes
+    setter src
+    setter srcset
+    setter type
+interface HTMLSpanElement : HTMLElement
+    attribute @@toStringTag
+    method constructor
+interface HTMLStyleElement : HTMLElement
+    attribute @@toStringTag
+    getter disabled
+    getter media
+    getter sheet
+    getter type
+    method constructor
+    setter disabled
+    setter media
+    setter type
+interface HTMLTableCaptionElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    method constructor
+    setter align
+interface HTMLTableCellElement : HTMLElement
+    attribute @@toStringTag
+    getter abbr
+    getter align
+    getter axis
+    getter bgColor
+    getter cellIndex
+    getter ch
+    getter chOff
+    getter colSpan
+    getter headers
+    getter height
+    getter noWrap
+    getter rowSpan
+    getter scope
+    getter vAlign
+    getter width
+    method constructor
+    setter abbr
+    setter align
+    setter axis
+    setter bgColor
+    setter ch
+    setter chOff
+    setter colSpan
+    setter headers
+    setter height
+    setter noWrap
+    setter rowSpan
+    setter scope
+    setter vAlign
+    setter width
+interface HTMLTableColElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    getter ch
+    getter chOff
+    getter span
+    getter vAlign
+    getter width
+    method constructor
+    setter align
+    setter ch
+    setter chOff
+    setter span
+    setter vAlign
+    setter width
+interface HTMLTableElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    getter bgColor
+    getter border
+    getter caption
+    getter cellPadding
+    getter cellSpacing
+    getter frame
+    getter rows
+    getter rules
+    getter summary
+    getter tBodies
+    getter tFoot
+    getter tHead
+    getter width
+    method constructor
+    method createCaption
+    method createTBody
+    method createTFoot
+    method createTHead
+    method deleteCaption
+    method deleteRow
+    method deleteTFoot
+    method deleteTHead
+    method insertRow
+    setter align
+    setter bgColor
+    setter border
+    setter caption
+    setter cellPadding
+    setter cellSpacing
+    setter frame
+    setter rules
+    setter summary
+    setter tFoot
+    setter tHead
+    setter width
+interface HTMLTableRowElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    getter bgColor
+    getter cells
+    getter ch
+    getter chOff
+    getter rowIndex
+    getter sectionRowIndex
+    getter vAlign
+    method constructor
+    method deleteCell
+    method insertCell
+    setter align
+    setter bgColor
+    setter ch
+    setter chOff
+    setter vAlign
+interface HTMLTableSectionElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    getter ch
+    getter chOff
+    getter rows
+    getter vAlign
+    method constructor
+    method deleteRow
+    method insertRow
+    setter align
+    setter ch
+    setter chOff
+    setter vAlign
+interface HTMLTemplateElement : HTMLElement
+    attribute @@toStringTag
+    getter content
+    method constructor
+interface HTMLTextAreaElement : HTMLElement
+    attribute @@toStringTag
+    getter autocapitalize
+    getter autofocus
+    getter cols
+    getter defaultValue
+    getter dirName
+    getter disabled
+    getter form
+    getter labels
+    getter maxLength
+    getter minLength
+    getter name
+    getter placeholder
+    getter readOnly
+    getter required
+    getter rows
+    getter selectionDirection
+    getter selectionEnd
+    getter selectionStart
+    getter textLength
+    getter type
+    getter validationMessage
+    getter validity
+    getter value
+    getter willValidate
+    getter wrap
+    method checkValidity
+    method constructor
+    method reportValidity
+    method select
+    method setCustomValidity
+    method setRangeText
+    method setSelectionRange
+    setter autocapitalize
+    setter autofocus
+    setter cols
+    setter defaultValue
+    setter dirName
+    setter disabled
+    setter maxLength
+    setter minLength
+    setter name
+    setter placeholder
+    setter readOnly
+    setter required
+    setter rows
+    setter selectionDirection
+    setter selectionEnd
+    setter selectionStart
+    setter value
+    setter wrap
+interface HTMLTitleElement : HTMLElement
+    attribute @@toStringTag
+    getter text
+    method constructor
+    setter text
+interface HTMLTrackElement : HTMLElement
+    attribute @@toStringTag
+    attribute ERROR
+    attribute LOADED
+    attribute LOADING
+    attribute NONE
+    getter default
+    getter kind
+    getter label
+    getter readyState
+    getter src
+    getter srclang
+    getter track
+    method constructor
+    setter default
+    setter kind
+    setter label
+    setter src
+    setter srclang
+interface HTMLUListElement : HTMLElement
+    attribute @@toStringTag
+    getter compact
+    getter type
+    method constructor
+    setter compact
+    setter type
+interface HTMLUnknownElement : HTMLElement
+    attribute @@toStringTag
+    method constructor
+interface HTMLVideoElement : HTMLMediaElement
+    attribute @@toStringTag
+    getter height
+    getter poster
+    getter videoHeight
+    getter videoWidth
+    getter webkitDecodedFrameCount
+    getter webkitDisplayingFullscreen
+    getter webkitDroppedFrameCount
+    getter webkitSupportsFullscreen
+    getter width
+    method constructor
+    method getVideoPlaybackQuality
+    method webkitEnterFullScreen
+    method webkitEnterFullscreen
+    method webkitExitFullScreen
+    method webkitExitFullscreen
+    setter height
+    setter poster
+    setter width
+interface HashChangeEvent : Event
+    attribute @@toStringTag
+    getter newURL
+    getter oldURL
+    method constructor
+interface Headers
+    attribute @@toStringTag
+    method @@iterator
+    method append
+    method constructor
+    method delete
+    method entries
+    method forEach
+    method get
+    method getAll
+    method has
+    method keys
+    method set
+    method values
+interface History
+    attribute @@toStringTag
+    getter length
+    getter scrollRestoration
+    getter state
+    method back
+    method constructor
+    method forward
+    method go
+    method pushState
+    method replaceState
+    setter scrollRestoration
+interface IDBCursor
+    attribute @@toStringTag
+    getter direction
+    getter key
+    getter primaryKey
+    getter source
+    method advance
+    method constructor
+    method continue
+    method continuePrimaryKey
+    method delete
+    method update
+interface IDBCursorWithValue : IDBCursor
+    attribute @@toStringTag
+    getter value
+    method constructor
+interface IDBDatabase : EventTarget
+    attribute @@toStringTag
+    getter name
+    getter objectStoreNames
+    getter onabort
+    getter onclose
+    getter onerror
+    getter onversionchange
+    getter version
+    method close
+    method constructor
+    method createObjectStore
+    method deleteObjectStore
+    method transaction
+    setter onabort
+    setter onclose
+    setter onerror
+    setter onversionchange
+interface IDBFactory
+    attribute @@toStringTag
+    method cmp
+    method constructor
+    method deleteDatabase
+    method open
+    method webkitGetDatabaseNames
+interface IDBIndex
+    attribute @@toStringTag
+    getter keyPath
+    getter multiEntry
+    getter name
+    getter objectStore
+    getter unique
+    method constructor
+    method count
+    method get
+    method getAll
+    method getAllKeys
+    method getKey
+    method openCursor
+    method openKeyCursor
+    setter name
+interface IDBKeyRange
+    static method bound
+    static method lowerBound
+    static method only
+    static method upperBound
+    attribute @@toStringTag
+    getter lower
+    getter lowerOpen
+    getter upper
+    getter upperOpen
+    method constructor
+    method includes
+interface IDBObjectStore
+    attribute @@toStringTag
+    getter autoIncrement
+    getter indexNames
+    getter keyPath
+    getter name
+    getter transaction
+    method add
+    method clear
+    method constructor
+    method count
+    method createIndex
+    method delete
+    method deleteIndex
+    method get
+    method getAll
+    method getAllKeys
+    method getKey
+    method index
+    method openCursor
+    method openKeyCursor
+    method put
+    setter name
+interface IDBObservation
+    attribute @@toStringTag
+    getter key
+    getter type
+    getter value
+    method constructor
+interface IDBObserver
+    attribute @@toStringTag
+    method constructor
+    method observe
+    method unobserve
+interface IDBObserverChanges
+    attribute @@toStringTag
+    getter database
+    getter records
+    getter transaction
+    method constructor
+interface IDBOpenDBRequest : IDBRequest
+    attribute @@toStringTag
+    getter onblocked
+    getter onupgradeneeded
+    method constructor
+    setter onblocked
+    setter onupgradeneeded
+interface IDBRequest : EventTarget
+    attribute @@toStringTag
+    getter error
+    getter onerror
+    getter onsuccess
+    getter readyState
+    getter result
+    getter source
+    getter transaction
+    method constructor
+    setter onerror
+    setter onsuccess
+interface IDBTransaction : EventTarget
+    attribute @@toStringTag
+    getter db
+    getter error
+    getter mode
+    getter objectStoreNames
+    getter onabort
+    getter oncomplete
+    getter onerror
+    method abort
+    method constructor
+    method objectStore
+    setter onabort
+    setter oncomplete
+    setter onerror
+interface IDBVersionChangeEvent : Event
+    attribute @@toStringTag
+    getter dataLoss
+    getter dataLossMessage
+    getter newVersion
+    getter oldVersion
+    method constructor
+interface IIRFilterNode : AudioNode
+    attribute @@toStringTag
+    method constructor
+    method getFrequencyResponse
+interface IdleDeadline
+    attribute @@toStringTag
+    getter didTimeout
+    method constructor
+    method timeRemaining
+interface Image
+    attribute @@toStringTag
+    getter align
+    getter alt
+    getter border
+    getter complete
+    getter crossOrigin
+    getter currentSrc
+    getter height
+    getter hspace
+    getter isMap
+    getter longDesc
+    getter lowsrc
+    getter name
+    getter naturalHeight
+    getter naturalWidth
+    getter referrerPolicy
+    getter sizes
+    getter src
+    getter srcset
+    getter useMap
+    getter vspace
+    getter width
+    getter x
+    getter y
+    method constructor
+    setter align
+    setter alt
+    setter border
+    setter crossOrigin
+    setter height
+    setter hspace
+    setter isMap
+    setter longDesc
+    setter lowsrc
+    setter name
+    setter referrerPolicy
+    setter sizes
+    setter src
+    setter srcset
+    setter useMap
+    setter vspace
+    setter width
+interface ImageBitmap
+    attribute @@toStringTag
+    getter height
+    getter width
+    method close
+    method constructor
+interface ImageBitmapRenderingContext
+    attribute @@toStringTag
+    getter canvas
+    method constructor
+    method transferFromImageBitmap
+interface ImageCapture
+    attribute @@toStringTag
+    getter track
+    method constructor
+    method getPhotoCapabilities
+    method grabFrame
+    method setOptions
+    method takePhoto
+interface ImageData
+    attribute @@toStringTag
+    getter data
+    getter dataUnion
+    getter height
+    getter width
+    method constructor
+    method createImageData
+    method getColorSettings
+interface InputDeviceCapabilities
+    attribute @@toStringTag
+    getter firesTouchEvents
+    method constructor
+interface InputEvent : UIEvent
+    attribute @@toStringTag
+    getter data
+    getter dataTransfer
+    getter inputType
+    getter isComposing
+    method constructor
+    method getTargetRanges
+interface IntersectionObserver
+    attribute @@toStringTag
+    getter root
+    getter rootMargin
+    getter thresholds
+    method constructor
+    method disconnect
+    method observe
+    method takeRecords
+    method unobserve
+interface IntersectionObserverEntry
+    attribute @@toStringTag
+    getter boundingClientRect
+    getter intersectionRatio
+    getter intersectionRect
+    getter isIntersecting
+    getter rootBounds
+    getter target
+    getter time
+    method constructor
+interface KeyboardEvent : UIEvent
+    attribute @@toStringTag
+    attribute DOM_KEY_LOCATION_LEFT
+    attribute DOM_KEY_LOCATION_NUMPAD
+    attribute DOM_KEY_LOCATION_RIGHT
+    attribute DOM_KEY_LOCATION_STANDARD
+    getter altKey
+    getter charCode
+    getter code
+    getter ctrlKey
+    getter isComposing
+    getter key
+    getter keyCode
+    getter location
+    getter metaKey
+    getter repeat
+    getter shiftKey
+    getter which
+    method constructor
+    method getModifierState
+    method initKeyboardEvent
+interface KeyframeEffect : KeyframeEffectReadOnly
+    attribute @@toStringTag
+    method constructor
+interface KeyframeEffectReadOnly : AnimationEffectReadOnly
+    attribute @@toStringTag
+    method constructor
+interface Location
+    attribute @@toStringTag
+    method constructor
+interface MIDIAccess : EventTarget
+    attribute @@toStringTag
+    getter inputs
+    getter onstatechange
+    getter outputs
+    getter sysexEnabled
+    method constructor
+    setter onstatechange
+interface MIDIConnectionEvent : Event
+    attribute @@toStringTag
+    getter port
+    method constructor
+interface MIDIInput : MIDIPort
+    attribute @@toStringTag
+    getter onmidimessage
+    method constructor
+    setter onmidimessage
+interface MIDIInputMap
+    attribute @@toStringTag
+    getter size
+    method @@iterator
+    method constructor
+    method entries
+    method forEach
+    method get
+    method has
+    method keys
+    method values
+interface MIDIMessageEvent : Event
+    attribute @@toStringTag
+    getter data
+    method constructor
+interface MIDIOutput : MIDIPort
+    attribute @@toStringTag
+    method constructor
+    method send
+interface MIDIOutputMap
+    attribute @@toStringTag
+    getter size
+    method @@iterator
+    method constructor
+    method entries
+    method forEach
+    method get
+    method has
+    method keys
+    method values
+interface MIDIPort : EventTarget
+    attribute @@toStringTag
+    getter connection
+    getter id
+    getter manufacturer
+    getter name
+    getter onstatechange
+    getter state
+    getter type
+    getter version
+    method close
+    method constructor
+    method open
+    setter onstatechange
+interface Magnetometer : Sensor
+    attribute @@toStringTag
+    getter x
+    getter y
+    getter z
+    method constructor
+interface MediaCapabilities
+    attribute @@toStringTag
+    method constructor
+    method decodingInfo
+interface MediaCapabilitiesInfo
+    attribute @@toStringTag
+    getter powerEfficient
+    getter smooth
+    getter supported
+    method constructor
+interface MediaDeviceInfo
+    attribute @@toStringTag
+    getter deviceId
+    getter groupId
+    getter kind
+    getter label
+    method constructor
+    method toJSON
+interface MediaDevices : EventTarget
+    attribute @@toStringTag
+    getter ondevicechange
+    method constructor
+    method enumerateDevices
+    method getSupportedConstraints
+    method getUserMedia
+    setter ondevicechange
+interface MediaElementAudioSourceNode : AudioNode
+    attribute @@toStringTag
+    getter mediaElement
+    method constructor
+interface MediaEncryptedEvent : Event
+    attribute @@toStringTag
+    getter initData
+    getter initDataType
+    method constructor
+interface MediaError
+    attribute @@toStringTag
+    attribute MEDIA_ERR_ABORTED
+    attribute MEDIA_ERR_DECODE
+    attribute MEDIA_ERR_NETWORK
+    attribute MEDIA_ERR_SRC_NOT_SUPPORTED
+    getter code
+    method constructor
+interface MediaKeyMessageEvent : Event
+    attribute @@toStringTag
+    getter message
+    getter messageType
+    method constructor
+interface MediaKeySession : EventTarget
+    attribute @@toStringTag
+    getter closed
+    getter expiration
+    getter keyStatuses
+    getter onkeystatuseschange
+    getter onmessage
+    getter sessionId
+    method close
+    method constructor
+    method generateRequest
+    method load
+    method remove
+    method update
+    setter onkeystatuseschange
+    setter onmessage
+interface MediaKeyStatusMap
+    attribute @@toStringTag
+    getter size
+    method @@iterator
+    method constructor
+    method entries
+    method forEach
+    method get
+    method has
+    method keys
+    method values
+interface MediaKeySystemAccess
+    attribute @@toStringTag
+    getter keySystem
+    method constructor
+    method createMediaKeys
+    method getConfiguration
+interface MediaKeys
+    attribute @@toStringTag
+    method constructor
+    method createSession
+    method setServerCertificate
+interface MediaList
+    attribute @@toStringTag
+    getter length
+    getter mediaText
+    method @@iterator
+    method appendMedium
+    method constructor
+    method deleteMedium
+    method item
+    setter mediaText
+interface MediaMetadata
+    attribute @@toStringTag
+    getter album
+    getter artist
+    getter artwork
+    getter title
+    method constructor
+    setter album
+    setter artist
+    setter artwork
+    setter title
+interface MediaQueryList : EventTarget
+    attribute @@toStringTag
+    getter matches
+    getter media
+    getter onchange
+    method addListener
+    method constructor
+    method removeListener
+    setter onchange
+interface MediaQueryListEvent : Event
+    attribute @@toStringTag
+    getter matches
+    getter media
+    method constructor
+interface MediaRecorder : EventTarget
+    static method isTypeSupported
+    attribute @@toStringTag
+    getter audioBitsPerSecond
+    getter mimeType
+    getter ondataavailable
+    getter onerror
+    getter onpause
+    getter onresume
+    getter onstart
+    getter onstop
+    getter state
+    getter stream
+    getter videoBitsPerSecond
+    method constructor
+    method pause
+    method requestData
+    method resume
+    method start
+    method stop
+    setter ondataavailable
+    setter onerror
+    setter onpause
+    setter onresume
+    setter onstart
+    setter onstop
+interface MediaSession
+    attribute @@toStringTag
+    getter metadata
+    getter playbackState
+    method constructor
+    method setActionHandler
+    setter metadata
+    setter playbackState
+interface MediaSettingsRange
+    attribute @@toStringTag
+    getter max
+    getter min
+    getter step
+    method constructor
+interface MediaSource : EventTarget
+    static method isTypeSupported
+    attribute @@toStringTag
+    getter activeSourceBuffers
+    getter duration
+    getter onsourceclose
+    getter onsourceended
+    getter onsourceopen
+    getter readyState
+    getter sourceBuffers
+    method addSourceBuffer
+    method clearLiveSeekableRange
+    method constructor
+    method endOfStream
+    method removeSourceBuffer
+    method setLiveSeekableRange
+    setter duration
+    setter onsourceclose
+    setter onsourceended
+    setter onsourceopen
+interface MediaStream : EventTarget
+    attribute @@toStringTag
+    getter active
+    getter id
+    getter onactive
+    getter onaddtrack
+    getter oninactive
+    getter onremovetrack
+    method addTrack
+    method clone
+    method constructor
+    method getAudioTracks
+    method getTrackById
+    method getTracks
+    method getVideoTracks
+    method removeTrack
+    setter onactive
+    setter onaddtrack
+    setter oninactive
+    setter onremovetrack
+interface MediaStreamAudioDestinationNode : AudioNode
+    attribute @@toStringTag
+    getter stream
+    method constructor
+interface MediaStreamAudioSourceNode : AudioNode
+    attribute @@toStringTag
+    getter mediaStream
+    method constructor
+interface MediaStreamEvent : Event
+    attribute @@toStringTag
+    getter stream
+    method constructor
+interface MediaStreamTrack : EventTarget
+    attribute @@toStringTag
+    getter contentHint
+    getter enabled
+    getter id
+    getter kind
+    getter label
+    getter muted
+    getter onended
+    getter onmute
+    getter onunmute
+    getter readyState
+    method applyConstraints
+    method clone
+    method constructor
+    method getCapabilities
+    method getConstraints
+    method getSettings
+    method stop
+    setter contentHint
+    setter enabled
+    setter onended
+    setter onmute
+    setter onunmute
+interface MediaStreamTrackEvent : Event
+    attribute @@toStringTag
+    getter track
+    method constructor
+interface MessageChannel
+    attribute @@toStringTag
+    getter port1
+    getter port2
+    method constructor
+interface MessageEvent : Event
+    attribute @@toStringTag
+    getter data
+    getter lastEventId
+    getter origin
+    getter ports
+    getter source
+    getter suborigin
+    method constructor
+    method initMessageEvent
+interface MessagePort : EventTarget
+    attribute @@toStringTag
+    getter onmessage
+    method close
+    method constructor
+    method postMessage
+    method start
+    setter onmessage
+interface MimeType
+    attribute @@toStringTag
+    getter description
+    getter enabledPlugin
+    getter suffixes
+    getter type
+    method constructor
+interface MimeTypeArray
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method item
+    method namedItem
+interface Mojo
+    static method createDataPipe
+    static method createMessagePipe
+    static method createSharedBuffer
+    attribute @@toStringTag
+    attribute RESULT_ABORTED
+    attribute RESULT_ALREADY_EXISTS
+    attribute RESULT_BUSY
+    attribute RESULT_CANCELLED
+    attribute RESULT_DATA_LOSS
+    attribute RESULT_DEADLINE_EXCEEDED
+    attribute RESULT_FAILED_PRECONDITION
+    attribute RESULT_INTERNAL
+    attribute RESULT_INVALID_ARGUMENT
+    attribute RESULT_NOT_FOUND
+    attribute RESULT_OK
+    attribute RESULT_OUT_OF_RANGE
+    attribute RESULT_PERMISSION_DENIED
+    attribute RESULT_RESOURCE_EXHAUSTED
+    attribute RESULT_SHOULD_WAIT
+    attribute RESULT_UNAVAILABLE
+    attribute RESULT_UNIMPLEMENTED
+    attribute RESULT_UNKNOWN
+    method constructor
+interface MojoHandle
+    attribute @@toStringTag
+    method close
+    method constructor
+    method discardData
+    method duplicateBufferHandle
+    method mapBuffer
+    method queryData
+    method readData
+    method readMessage
+    method watch
+    method writeData
+    method writeMessage
+interface MojoWatcher
+    attribute @@toStringTag
+    method cancel
+    method constructor
+interface MouseEvent : UIEvent
+    attribute @@toStringTag
+    getter altKey
+    getter button
+    getter buttons
+    getter clientX
+    getter clientY
+    getter ctrlKey
+    getter fromElement
+    getter layerX
+    getter layerY
+    getter metaKey
+    getter movementX
+    getter movementY
+    getter offsetX
+    getter offsetY
+    getter pageX
+    getter pageY
+    getter region
+    getter relatedTarget
+    getter screenX
+    getter screenY
+    getter shiftKey
+    getter toElement
+    getter which
+    getter x
+    getter y
+    method constructor
+    method getModifierState
+    method initMouseEvent
+interface MutationEvent : Event
+    attribute @@toStringTag
+    attribute ADDITION
+    attribute MODIFICATION
+    attribute REMOVAL
+    getter attrChange
+    getter attrName
+    getter newValue
+    getter prevValue
+    getter relatedNode
+    method constructor
+    method initMutationEvent
+interface MutationObserver
+    attribute @@toStringTag
+    method constructor
+    method disconnect
+    method observe
+    method takeRecords
+interface MutationRecord
+    attribute @@toStringTag
+    getter addedNodes
+    getter attributeName
+    getter attributeNamespace
+    getter nextSibling
+    getter oldValue
+    getter previousSibling
+    getter removedNodes
+    getter target
+    getter type
+    method constructor
+interface NFC
+    attribute @@toStringTag
+    method cancelPush
+    method cancelWatch
+    method constructor
+    method push
+    method watch
+interface NamedNodeMap
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method getNamedItem
+    method getNamedItemNS
+    method item
+    method removeNamedItem
+    method removeNamedItemNS
+    method setNamedItem
+    method setNamedItemNS
+interface Navigator
+    attribute @@toStringTag
+    getter appCodeName
+    getter appName
+    getter appVersion
+    getter authentication
+    getter bluetooth
+    getter budget
+    getter connection
+    getter cookieEnabled
+    getter credentials
+    getter doNotTrack
+    getter geolocation
+    getter hardwareConcurrency
+    getter language
+    getter languages
+    getter maxTouchPoints
+    getter mediaCapabilities
+    getter mediaDevices
+    getter mediaSession
+    getter mimeTypes
+    getter nfc
+    getter onLine
+    getter permissions
+    getter platform
+    getter plugins
+    getter presentation
+    getter product
+    getter productSub
+    getter serviceWorker
+    getter storage
+    getter usb
+    getter userAgent
+    getter vendor
+    getter vendorSub
+    getter webkitPersistentStorage
+    getter webkitTemporaryStorage
+    method constructor
+    method getBattery
+    method getGamepads
+    method getInstalledRelatedApps
+    method getUserMedia
+    method getVRDisplays
+    method isProtocolHandlerRegistered
+    method javaEnabled
+    method registerProtocolHandler
+    method requestMIDIAccess
+    method requestMediaKeySystemAccess
+    method sendBeacon
+    method share
+    method unregisterProtocolHandler
+    method vibrate
+    method webkitGetUserMedia
+interface NetworkInformation : EventTarget
+    attribute @@toStringTag
+    getter downlinkMax
+    getter onchange
+    getter ontypechange
+    getter type
+    method constructor
+    setter onchange
+    setter ontypechange
+interface Node : EventTarget
+    attribute @@toStringTag
+    attribute ATTRIBUTE_NODE
+    attribute CDATA_SECTION_NODE
+    attribute COMMENT_NODE
+    attribute DOCUMENT_FRAGMENT_NODE
+    attribute DOCUMENT_NODE
+    attribute DOCUMENT_POSITION_CONTAINED_BY
+    attribute DOCUMENT_POSITION_CONTAINS
+    attribute DOCUMENT_POSITION_DISCONNECTED
+    attribute DOCUMENT_POSITION_FOLLOWING
+    attribute DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
+    attribute DOCUMENT_POSITION_PRECEDING
+    attribute DOCUMENT_TYPE_NODE
+    attribute ELEMENT_NODE
+    attribute ENTITY_NODE
+    attribute ENTITY_REFERENCE_NODE
+    attribute NOTATION_NODE
+    attribute PROCESSING_INSTRUCTION_NODE
+    attribute TEXT_NODE
+    getter baseURI
+    getter childNodes
+    getter firstChild
+    getter isConnected
+    getter lastChild
+    getter nextSibling
+    getter nodeName
+    getter nodeType
+    getter nodeValue
+    getter ownerDocument
+    getter parentElement
+    getter parentNode
+    getter previousSibling
+    getter textContent
+    method appendChild
+    method cloneNode
+    method compareDocumentPosition
+    method constructor
+    method contains
+    method getRootNode
+    method hasChildNodes
+    method insertBefore
+    method isDefaultNamespace
+    method isEqualNode
+    method isSameNode
+    method lookupNamespaceURI
+    method lookupPrefix
+    method normalize
+    method removeChild
+    method replaceChild
+    setter nodeValue
+    setter textContent
+interface NodeFilter
+    attribute @@toStringTag
+    attribute FILTER_ACCEPT
+    attribute FILTER_REJECT
+    attribute FILTER_SKIP
+    attribute SHOW_ALL
+    attribute SHOW_ATTRIBUTE
+    attribute SHOW_CDATA_SECTION
+    attribute SHOW_COMMENT
+    attribute SHOW_DOCUMENT
+    attribute SHOW_DOCUMENT_FRAGMENT
+    attribute SHOW_DOCUMENT_TYPE
+    attribute SHOW_ELEMENT
+    attribute SHOW_ENTITY
+    attribute SHOW_ENTITY_REFERENCE
+    attribute SHOW_NOTATION
+    attribute SHOW_PROCESSING_INSTRUCTION
+    attribute SHOW_TEXT
+    method acceptNode
+    method constructor
+interface NodeIterator
+    attribute @@toStringTag
+    getter filter
+    getter pointerBeforeReferenceNode
+    getter referenceNode
+    getter root
+    getter whatToShow
+    method constructor
+    method detach
+    method nextNode
+    method previousNode
+interface NodeList
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method entries
+    method forEach
+    method item
+    method keys
+    method values
+interface Notification : EventTarget
+    static getter maxActions
+    static getter permission
+    static method requestPermission
+    attribute @@toStringTag
+    getter actions
+    getter badge
+    getter body
+    getter data
+    getter dir
+    getter icon
+    getter image
+    getter lang
+    getter onclick
+    getter onclose
+    getter onerror
+    getter onshow
+    getter renotify
+    getter requireInteraction
+    getter silent
+    getter tag
+    getter timestamp
+    getter title
+    getter vibrate
+    method close
+    method constructor
+    setter onclick
+    setter onclose
+    setter onerror
+    setter onshow
+interface OfflineAudioCompletionEvent : Event
+    attribute @@toStringTag
+    getter renderedBuffer
+    method constructor
+interface OfflineAudioContext : BaseAudioContext
+    attribute @@toStringTag
+    getter length
+    getter oncomplete
+    method constructor
+    method startRendering
+    method suspend
+    setter oncomplete
+interface OffscreenCanvas : EventTarget
+    attribute @@toStringTag
+    getter height
+    getter width
+    method constructor
+    method convertToBlob
+    method getContext
+    method transferToImageBitmap
+    setter height
+    setter width
+interface OffscreenCanvasRenderingContext2D
+    attribute @@toStringTag
+    getter canvas
+    getter fillStyle
+    getter filter
+    getter globalAlpha
+    getter globalCompositeOperation
+    getter imageSmoothingEnabled
+    getter imageSmoothingQuality
+    getter lineCap
+    getter lineDashOffset
+    getter lineJoin
+    getter lineWidth
+    getter miterLimit
+    getter shadowBlur
+    getter shadowColor
+    getter shadowOffsetX
+    getter shadowOffsetY
+    getter strokeStyle
+    method arc
+    method arcTo
+    method beginPath
+    method bezierCurveTo
+    method clearRect
+    method clip
+    method closePath
+    method commit
+    method constructor
+    method createImageData
+    method createLinearGradient
+    method createPattern
+    method createRadialGradient
+    method drawImage
+    method ellipse
+    method fill
+    method fillRect
+    method getImageData
+    method getLineDash
+    method isPointInPath
+    method isPointInStroke
+    method lineTo
+    method moveTo
+    method putImageData
+    method quadraticCurveTo
+    method rect
+    method resetTransform
+    method restore
+    method rotate
+    method save
+    method scale
+    method setLineDash
+    method setTransform
+    method stroke
+    method strokeRect
+    method transform
+    method translate
+    setter fillStyle
+    setter filter
+    setter globalAlpha
+    setter globalCompositeOperation
+    setter imageSmoothingEnabled
+    setter imageSmoothingQuality
+    setter lineCap
+    setter lineDashOffset
+    setter lineJoin
+    setter lineWidth
+    setter miterLimit
+    setter shadowBlur
+    setter shadowColor
+    setter shadowOffsetX
+    setter shadowOffsetY
+    setter strokeStyle
+interface Option
+    attribute @@toStringTag
+    getter defaultSelected
+    getter disabled
+    getter form
+    getter index
+    getter label
+    getter selected
+    getter text
+    getter value
+    method constructor
+    setter defaultSelected
+    setter disabled
+    setter label
+    setter selected
+    setter text
+    setter value
+interface OrientationSensor : Sensor
+    attribute @@toStringTag
+    getter quaternion
+    method constructor
+    method populateMatrix
+interface OscillatorNode : AudioScheduledSourceNode
+    attribute @@toStringTag
+    getter detune
+    getter frequency
+    getter type
+    method constructor
+    method setPeriodicWave
+    setter type
+interface PageTransitionEvent : Event
+    attribute @@toStringTag
+    getter persisted
+    method constructor
+interface PannerNode : AudioNode
+    attribute @@toStringTag
+    getter coneInnerAngle
+    getter coneOuterAngle
+    getter coneOuterGain
+    getter distanceModel
+    getter maxDistance
+    getter orientationX
+    getter orientationY
+    getter orientationZ
+    getter panningModel
+    getter positionX
+    getter positionY
+    getter positionZ
+    getter refDistance
+    getter rolloffFactor
+    method constructor
+    method setOrientation
+    method setPosition
+    setter coneInnerAngle
+    setter coneOuterAngle
+    setter coneOuterGain
+    setter distanceModel
+    setter maxDistance
+    setter panningModel
+    setter refDistance
+    setter rolloffFactor
+interface PasswordCredential : SiteBoundCredential
+    attribute @@toStringTag
+    getter additionalData
+    getter idName
+    getter passwordName
+    method constructor
+    setter additionalData
+    setter idName
+    setter passwordName
+interface Path2D
+    attribute @@toStringTag
+    method addPath
+    method arc
+    method arcTo
+    method bezierCurveTo
+    method closePath
+    method constructor
+    method ellipse
+    method lineTo
+    method moveTo
+    method quadraticCurveTo
+    method rect
+interface PaymentAddress
+    attribute @@toStringTag
+    getter addressLine
+    getter city
+    getter country
+    getter dependentLocality
+    getter languageCode
+    getter organization
+    getter phone
+    getter postalCode
+    getter recipient
+    getter region
+    getter sortingCode
+    method constructor
+    method toJSON
+interface PaymentManager
+    attribute @@toStringTag
+    getter instruments
+    method constructor
+    method getManifest
+    method setManifest
+interface PaymentRequest : EventTarget
+    attribute @@toStringTag
+    getter onshippingaddresschange
+    getter onshippingoptionchange
+    getter shippingAddress
+    getter shippingOption
+    getter shippingType
+    method abort
+    method canMakePayment
+    method constructor
+    method show
+    setter onshippingaddresschange
+    setter onshippingoptionchange
+interface PaymentRequestUpdateEvent : Event
+    attribute @@toStringTag
+    method constructor
+    method updateWith
+interface PaymentResponse
+    attribute @@toStringTag
+    getter details
+    getter methodName
+    getter payerEmail
+    getter payerName
+    getter payerPhone
+    getter shippingAddress
+    getter shippingOption
+    method complete
+    method constructor
+    method toJSON
+interface Performance : EventTarget
+    attribute @@toStringTag
+    getter memory
+    getter navigation
+    getter onframetimingbufferfull
+    getter onresourcetimingbufferfull
+    getter timing
+    method clearFrameTimings
+    method clearMarks
+    method clearMeasures
+    method clearResourceTimings
+    method constructor
+    method getEntries
+    method getEntriesByName
+    method getEntriesByType
+    method mark
+    method measure
+    method now
+    method setFrameTimingBufferSize
+    method setResourceTimingBufferSize
+    method toJSON
+    setter onframetimingbufferfull
+    setter onresourcetimingbufferfull
+interface PerformanceEntry
+    attribute @@toStringTag
+    getter duration
+    getter entryType
+    getter name
+    getter startTime
+    method constructor
+    method toJSON
+interface PerformanceLongTaskTiming : PerformanceEntry
+    attribute @@toStringTag
+    getter attribution
+    method constructor
+interface PerformanceMark : PerformanceEntry
+    attribute @@toStringTag
+    method constructor
+interface PerformanceMeasure : PerformanceEntry
+    attribute @@toStringTag
+    method constructor
+interface PerformanceNavigation
+    attribute @@toStringTag
+    attribute TYPE_BACK_FORWARD
+    attribute TYPE_NAVIGATE
+    attribute TYPE_RELOAD
+    attribute TYPE_RESERVED
+    getter redirectCount
+    getter type
+    method constructor
+    method toJSON
+interface PerformanceNavigationTiming : PerformanceResourceTiming
+    attribute @@toStringTag
+    getter domComplete
+    getter domContentLoadedEventEnd
+    getter domContentLoadedEventStart
+    getter domInteractive
+    getter loadEventEnd
+    getter loadEventStart
+    getter redirectCount
+    getter type
+    getter unloadEventEnd
+    getter unloadEventStart
+    method constructor
+    method toJSON
+interface PerformanceObserver
+    attribute @@toStringTag
+    method constructor
+    method disconnect
+    method observe
+interface PerformanceObserverEntryList
+    attribute @@toStringTag
+    method constructor
+    method getEntries
+    method getEntriesByName
+    method getEntriesByType
+interface PerformancePaintTiming : PerformanceEntry
+    attribute @@toStringTag
+    method constructor
+interface PerformanceResourceTiming : PerformanceEntry
+    attribute @@toStringTag
+    getter connectEnd
+    getter connectStart
+    getter decodedBodySize
+    getter domainLookupEnd
+    getter domainLookupStart
+    getter encodedBodySize
+    getter fetchStart
+    getter initiatorType
+    getter redirectEnd
+    getter redirectStart
+    getter requestStart
+    getter responseEnd
+    getter responseStart
+    getter secureConnectionStart
+    getter transferSize
+    getter workerStart
+    method constructor
+interface PerformanceTiming
+    attribute @@toStringTag
+    getter connectEnd
+    getter connectStart
+    getter domComplete
+    getter domContentLoadedEventEnd
+    getter domContentLoadedEventStart
+    getter domInteractive
+    getter domLoading
+    getter domainLookupEnd
+    getter domainLookupStart
+    getter fetchStart
+    getter loadEventEnd
+    getter loadEventStart
+    getter navigationStart
+    getter redirectEnd
+    getter redirectStart
+    getter requestStart
+    getter responseEnd
+    getter responseStart
+    getter secureConnectionStart
+    getter unloadEventEnd
+    getter unloadEventStart
+    method constructor
+    method toJSON
+interface PeriodicWave
+    attribute @@toStringTag
+    method constructor
+interface PermissionStatus : EventTarget
+    attribute @@toStringTag
+    getter onchange
+    getter state
+    method constructor
+    setter onchange
+interface Permissions
+    attribute @@toStringTag
+    method constructor
+    method query
+    method request
+    method requestAll
+    method revoke
+interface PhotoCapabilities
+    attribute @@toStringTag
+    getter fillLightMode
+    getter imageHeight
+    getter imageWidth
+    getter redEyeReduction
+    method constructor
+interface Plugin
+    attribute @@toStringTag
+    getter description
+    getter filename
+    getter length
+    getter name
+    method @@iterator
+    method constructor
+    method item
+    method namedItem
+interface PluginArray
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method item
+    method namedItem
+    method refresh
+interface PointerEvent : MouseEvent
+    attribute @@toStringTag
+    getter height
+    getter isPrimary
+    getter pointerId
+    getter pointerType
+    getter pressure
+    getter tangentialPressure
+    getter tiltX
+    getter tiltY
+    getter twist
+    getter width
+    method constructor
+    method getCoalescedEvents
+interface PopStateEvent : Event
+    attribute @@toStringTag
+    getter state
+    method constructor
+interface Presentation
+    attribute @@toStringTag
+    getter defaultRequest
+    getter receiver
+    method constructor
+    setter defaultRequest
+interface PresentationAvailability : EventTarget
+    attribute @@toStringTag
+    getter onchange
+    getter value
+    method constructor
+    setter onchange
+interface PresentationConnection : EventTarget
+    attribute @@toStringTag
+    getter binaryType
+    getter id
+    getter onclose
+    getter onconnect
+    getter onmessage
+    getter onterminate
+    getter state
+    getter url
+    method close
+    method constructor
+    method send
+    method terminate
+    setter binaryType
+    setter onclose
+    setter onconnect
+    setter onmessage
+    setter onterminate
+interface PresentationConnectionAvailableEvent : Event
+    attribute @@toStringTag
+    getter connection
+    method constructor
+interface PresentationConnectionCloseEvent : Event
+    attribute @@toStringTag
+    getter message
+    getter reason
+    method constructor
+interface PresentationConnectionList : EventTarget
+    attribute @@toStringTag
+    getter connections
+    getter onconnectionavailable
+    method constructor
+    setter onconnectionavailable
+interface PresentationReceiver
+    attribute @@toStringTag
+    getter connectionList
+    method constructor
+interface PresentationRequest : EventTarget
+    attribute @@toStringTag
+    getter onconnectionavailable
+    method constructor
+    method getAvailability
+    method reconnect
+    method start
+    setter onconnectionavailable
+interface ProcessingInstruction : CharacterData
+    attribute @@toStringTag
+    getter sheet
+    getter target
+    method constructor
+interface ProgressEvent : Event
+    attribute @@toStringTag
+    getter lengthComputable
+    getter loaded
+    getter total
+    method constructor
+interface PromiseRejectionEvent : Event
+    attribute @@toStringTag
+    getter promise
+    getter reason
+    method constructor
+interface PushManager
+    attribute @@toStringTag
+    method constructor
+    method getSubscription
+    method permissionState
+    method subscribe
+interface PushSubscription
+    attribute @@toStringTag
+    getter endpoint
+    getter options
+    method constructor
+    method getKey
+    method toJSON
+    method unsubscribe
+interface PushSubscriptionOptions
+    attribute @@toStringTag
+    getter applicationServerKey
+    getter userVisibleOnly
+    method constructor
+interface RTCCertificate
+    attribute @@toStringTag
+    getter expires
+    method constructor
+interface RTCDataChannel : EventTarget
+    attribute @@toStringTag
+    getter binaryType
+    getter bufferedAmount
+    getter bufferedAmountLowThreshold
+    getter id
+    getter label
+    getter maxRetransmitTime
+    getter maxRetransmits
+    getter negotiated
+    getter onbufferedamountlow
+    getter onclose
+    getter onerror
+    getter onmessage
+    getter onopen
+    getter ordered
+    getter protocol
+    getter readyState
+    getter reliable
+    method close
+    method constructor
+    method send
+    setter binaryType
+    setter bufferedAmountLowThreshold
+    setter onbufferedamountlow
+    setter onclose
+    setter onerror
+    setter onmessage
+    setter onopen
+interface RTCDataChannelEvent : Event
+    attribute @@toStringTag
+    getter channel
+    method constructor
+interface RTCIceCandidate
+    attribute @@toStringTag
+    getter candidate
+    getter sdpMLineIndex
+    getter sdpMid
+    method constructor
+    method toJSON
+    setter candidate
+    setter sdpMLineIndex
+    setter sdpMid
+interface RTCPeerConnection : EventTarget
+    static method generateCertificate
+    attribute @@toStringTag
+    getter iceConnectionState
+    getter iceGatheringState
+    getter localDescription
+    getter onaddstream
+    getter ondatachannel
+    getter onicecandidate
+    getter oniceconnectionstatechange
+    getter onicegatheringstatechange
+    getter onnegotiationneeded
+    getter onremovestream
+    getter onsignalingstatechange
+    getter remoteDescription
+    getter signalingState
+    method addIceCandidate
+    method addStream
+    method close
+    method constructor
+    method createAnswer
+    method createDTMFSender
+    method createDataChannel
+    method createOffer
+    method getLocalStreams
+    method getReceivers
+    method getRemoteStreams
+    method getStats
+    method getStreamById
+    method removeStream
+    method setConfiguration
+    method setLocalDescription
+    method setRemoteDescription
+    setter onaddstream
+    setter ondatachannel
+    setter onicecandidate
+    setter oniceconnectionstatechange
+    setter onicegatheringstatechange
+    setter onnegotiationneeded
+    setter onremovestream
+    setter onsignalingstatechange
+interface RTCPeerConnectionIceEvent : Event
+    attribute @@toStringTag
+    getter candidate
+    method constructor
+interface RTCRtpContributingSource
+    attribute @@toStringTag
+    getter source
+    getter timestamp
+    method constructor
+interface RTCRtpReceiver
+    attribute @@toStringTag
+    getter track
+    method constructor
+    method getContributingSources
+interface RTCSessionDescription
+    attribute @@toStringTag
+    getter sdp
+    getter type
+    method constructor
+    method toJSON
+    setter sdp
+    setter type
+interface RTCStatsReport
+    attribute @@toStringTag
+    method @@iterator
+    method constructor
+    method entries
+    method forEach
+    method get
+    method has
+    method keys
+    method values
+interface RadioNodeList : NodeList
+    attribute @@toStringTag
+    getter value
+    method constructor
+    setter value
+interface Range
+    attribute @@toStringTag
+    attribute END_TO_END
+    attribute END_TO_START
+    attribute START_TO_END
+    attribute START_TO_START
+    getter collapsed
+    getter commonAncestorContainer
+    getter endContainer
+    getter endOffset
+    getter startContainer
+    getter startOffset
+    method cloneContents
+    method cloneRange
+    method collapse
+    method compareBoundaryPoints
+    method comparePoint
+    method constructor
+    method createContextualFragment
+    method deleteContents
+    method detach
+    method expand
+    method extractContents
+    method getBoundingClientRect
+    method getClientRects
+    method insertNode
+    method intersectsNode
+    method isPointInRange
+    method selectNode
+    method selectNodeContents
+    method setEnd
+    method setEndAfter
+    method setEndBefore
+    method setStart
+    method setStartAfter
+    method setStartBefore
+    method surroundContents
+    method toString
+interface ReadableStream
+    getter locked
+    method cancel
+    method constructor
+    method getReader
+    method pipeThrough
+    method pipeTo
+    method tee
+interface RelatedEvent : Event
+    attribute @@toStringTag
+    getter relatedTarget
+    method constructor
+interface RemotePlayback : EventTarget
+    attribute @@toStringTag
+    getter onconnect
+    getter onconnecting
+    getter ondisconnect
+    getter state
+    method cancelWatchAvailability
+    method constructor
+    method prompt
+    method watchAvailability
+    setter onconnect
+    setter onconnecting
+    setter ondisconnect
+interface Request
+    attribute @@toStringTag
+    getter bodyUsed
+    getter cache
+    getter credentials
+    getter headers
+    getter integrity
+    getter method
+    getter mode
+    getter redirect
+    getter referrer
+    getter referrerPolicy
+    getter url
+    method arrayBuffer
+    method blob
+    method clone
+    method constructor
+    method json
+    method text
+interface ResizeObserver
+    attribute @@toStringTag
+    method constructor
+    method disconnect
+    method observe
+    method unobserve
+interface ResizeObserverEntry
+    attribute @@toStringTag
+    getter contentRect
+    getter target
+    method constructor
+interface Response
+    static method error
+    static method redirect
+    attribute @@toStringTag
+    getter body
+    getter bodyUsed
+    getter headers
+    getter ok
+    getter redirected
+    getter status
+    getter statusText
+    getter type
+    getter url
+    method arrayBuffer
+    method blob
+    method clone
+    method constructor
+    method json
+    method text
+interface SVGAElement : SVGGraphicsElement
+    attribute @@toStringTag
+    getter href
+    getter target
+    method constructor
+interface SVGAngle
+    attribute @@toStringTag
+    attribute SVG_ANGLETYPE_DEG
+    attribute SVG_ANGLETYPE_GRAD
+    attribute SVG_ANGLETYPE_RAD
+    attribute SVG_ANGLETYPE_UNKNOWN
+    attribute SVG_ANGLETYPE_UNSPECIFIED
+    getter unitType
+    getter value
+    getter valueAsString
+    getter valueInSpecifiedUnits
+    method constructor
+    method convertToSpecifiedUnits
+    method newValueSpecifiedUnits
+    setter value
+    setter valueAsString
+    setter valueInSpecifiedUnits
+interface SVGAnimateElement : SVGAnimationElement
+    attribute @@toStringTag
+    method constructor
+interface SVGAnimateMotionElement : SVGAnimationElement
+    attribute @@toStringTag
+    method constructor
+interface SVGAnimateTransformElement : SVGAnimationElement
+    attribute @@toStringTag
+    method constructor
+interface SVGAnimatedAngle
+    attribute @@toStringTag
+    getter animVal
+    getter baseVal
+    method constructor
+interface SVGAnimatedBoolean
+    attribute @@toStringTag
+    getter animVal
+    getter baseVal
+    method constructor
+    setter baseVal
+interface SVGAnimatedEnumeration
+    attribute @@toStringTag
+    getter animVal
+    getter baseVal
+    method constructor
+    setter baseVal
+interface SVGAnimatedInteger
+    attribute @@toStringTag
+    getter animVal
+    getter baseVal
+    method constructor
+    setter baseVal
+interface SVGAnimatedLength
+    attribute @@toStringTag
+    getter animVal
+    getter baseVal
+    method constructor
+interface SVGAnimatedLengthList
+    attribute @@toStringTag
+    getter animVal
+    getter baseVal
+    method constructor
+interface SVGAnimatedNumber
+    attribute @@toStringTag
+    getter animVal
+    getter baseVal
+    method constructor
+    setter baseVal
+interface SVGAnimatedNumberList
+    attribute @@toStringTag
+    getter animVal
+    getter baseVal
+    method constructor
+interface SVGAnimatedPreserveAspectRatio
+    attribute @@toStringTag
+    getter animVal
+    getter baseVal
+    method constructor
+interface SVGAnimatedRect
+    attribute @@toStringTag
+    getter animVal
+    getter baseVal
+    method constructor
+interface SVGAnimatedString
+    attribute @@toStringTag
+    getter animVal
+    getter baseVal
+    method constructor
+    setter baseVal
+interface SVGAnimatedTransformList
+    attribute @@toStringTag
+    getter animVal
+    getter baseVal
+    method constructor
+interface SVGAnimationElement : SVGElement
+    attribute @@toStringTag
+    getter onbegin
+    getter onend
+    getter onrepeat
+    getter requiredExtensions
+    getter systemLanguage
+    getter targetElement
+    method beginElement
+    method beginElementAt
+    method constructor
+    method endElement
+    method endElementAt
+    method getCurrentTime
+    method getSimpleDuration
+    method getStartTime
+    setter onbegin
+    setter onend
+    setter onrepeat
+interface SVGCircleElement : SVGGeometryElement
+    attribute @@toStringTag
+    getter cx
+    getter cy
+    getter r
+    method constructor
+interface SVGClipPathElement : SVGGraphicsElement
+    attribute @@toStringTag
+    getter clipPathUnits
+    method constructor
+interface SVGComponentTransferFunctionElement : SVGElement
+    attribute @@toStringTag
+    attribute SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE
+    attribute SVG_FECOMPONENTTRANSFER_TYPE_GAMMA
+    attribute SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY
+    attribute SVG_FECOMPONENTTRANSFER_TYPE_LINEAR
+    attribute SVG_FECOMPONENTTRANSFER_TYPE_TABLE
+    attribute SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN
+    getter amplitude
+    getter exponent
+    getter intercept
+    getter offset
+    getter slope
+    getter tableValues
+    getter type
+    method constructor
+interface SVGDefsElement : SVGGraphicsElement
+    attribute @@toStringTag
+    method constructor
+interface SVGDescElement : SVGElement
+    attribute @@toStringTag
+    method constructor
+interface SVGDiscardElement : SVGElement
+    attribute @@toStringTag
+    method constructor
+interface SVGElement : Element
+    attribute @@toStringTag
+    getter className
+    getter dataset
+    getter onabort
+    getter onauxclick
+    getter onblur
+    getter oncancel
+    getter oncanplay
+    getter oncanplaythrough
+    getter onchange
+    getter onclick
+    getter onclose
+    getter oncontextmenu
+    getter oncuechange
+    getter ondblclick
+    getter ondrag
+    getter ondragend
+    getter ondragenter
+    getter ondragleave
+    getter ondragover
+    getter ondragstart
+    getter ondrop
+    getter ondurationchange
+    getter onemptied
+    getter onended
+    getter onerror
+    getter onfocus
+    getter ongotpointercapture
+    getter oninput
+    getter oninvalid
+    getter onkeydown
+    getter onkeypress
+    getter onkeyup
+    getter onload
+    getter onloadeddata
+    getter onloadedmetadata
+    getter onloadstart
+    getter onlostpointercapture
+    getter onmousedown
+    getter onmouseenter
+    getter onmouseleave
+    getter onmousemove
+    getter onmouseout
+    getter onmouseover
+    getter onmouseup
+    getter onmousewheel
+    getter onpause
+    getter onplay
+    getter onplaying
+    getter onpointercancel
+    getter onpointerdown
+    getter onpointerenter
+    getter onpointerleave
+    getter onpointermove
+    getter onpointerout
+    getter onpointerover
+    getter onpointerup
+    getter onprogress
+    getter onratechange
+    getter onreset
+    getter onresize
+    getter onscroll
+    getter onseeked
+    getter onseeking
+    getter onselect
+    getter onshow
+    getter onstalled
+    getter onsubmit
+    getter onsuspend
+    getter ontimeupdate
+    getter ontoggle
+    getter ontouchcancel
+    getter ontouchend
+    getter ontouchmove
+    getter ontouchstart
+    getter onvolumechange
+    getter onwaiting
+    getter ownerSVGElement
+    getter style
+    getter tabIndex
+    getter viewportElement
+    method blur
+    method constructor
+    method focus
+    setter onabort
+    setter onauxclick
+    setter onblur
+    setter oncancel
+    setter oncanplay
+    setter oncanplaythrough
+    setter onchange
+    setter onclick
+    setter onclose
+    setter oncontextmenu
+    setter oncuechange
+    setter ondblclick
+    setter ondrag
+    setter ondragend
+    setter ondragenter
+    setter ondragleave
+    setter ondragover
+    setter ondragstart
+    setter ondrop
+    setter ondurationchange
+    setter onemptied
+    setter onended
+    setter onerror
+    setter onfocus
+    setter ongotpointercapture
+    setter oninput
+    setter oninvalid
+    setter onkeydown
+    setter onkeypress
+    setter onkeyup
+    setter onload
+    setter onloadeddata
+    setter onloadedmetadata
+    setter onloadstart
+    setter onlostpointercapture
+    setter onmousedown
+    setter onmouseenter
+    setter onmouseleave
+    setter onmousemove
+    setter onmouseout
+    setter onmouseover
+    setter onmouseup
+    setter onmousewheel
+    setter onpause
+    setter onplay
+    setter onplaying
+    setter onpointercancel
+    setter onpointerdown
+    setter onpointerenter
+    setter onpointerleave
+    setter onpointermove
+    setter onpointerout
+    setter onpointerover
+    setter onpointerup
+    setter onprogress
+    setter onratechange
+    setter onreset
+    setter onresize
+    setter onscroll
+    setter onseeked
+    setter onseeking
+    setter onselect
+    setter onshow
+    setter onstalled
+    setter onsubmit
+    setter onsuspend
+    setter ontimeupdate
+    setter ontoggle
+    setter ontouchcancel
+    setter ontouchend
+    setter ontouchmove
+    setter ontouchstart
+    setter onvolumechange
+    setter onwaiting
+    setter style
+    setter tabIndex
+interface SVGEllipseElement : SVGGeometryElement
+    attribute @@toStringTag
+    getter cx
+    getter cy
+    getter rx
+    getter ry
+    method constructor
+interface SVGFEBlendElement : SVGElement
+    attribute @@toStringTag
+    attribute SVG_FEBLEND_MODE_DARKEN
+    attribute SVG_FEBLEND_MODE_LIGHTEN
+    attribute SVG_FEBLEND_MODE_MULTIPLY
+    attribute SVG_FEBLEND_MODE_NORMAL
+    attribute SVG_FEBLEND_MODE_SCREEN
+    attribute SVG_FEBLEND_MODE_UNKNOWN
+    getter height
+    getter in1
+    getter in2
+    getter mode
+    getter result
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFEColorMatrixElement : SVGElement
+    attribute @@toStringTag
+    attribute SVG_FECOLORMATRIX_TYPE_HUEROTATE
+    attribute SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA
+    attribute SVG_FECOLORMATRIX_TYPE_MATRIX
+    attribute SVG_FECOLORMATRIX_TYPE_SATURATE
+    attribute SVG_FECOLORMATRIX_TYPE_UNKNOWN
+    getter height
+    getter in1
+    getter result
+    getter type
+    getter values
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFEComponentTransferElement : SVGElement
+    attribute @@toStringTag
+    getter height
+    getter in1
+    getter result
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFECompositeElement : SVGElement
+    attribute @@toStringTag
+    attribute SVG_FECOMPOSITE_OPERATOR_ARITHMETIC
+    attribute SVG_FECOMPOSITE_OPERATOR_ATOP
+    attribute SVG_FECOMPOSITE_OPERATOR_IN
+    attribute SVG_FECOMPOSITE_OPERATOR_OUT
+    attribute SVG_FECOMPOSITE_OPERATOR_OVER
+    attribute SVG_FECOMPOSITE_OPERATOR_UNKNOWN
+    attribute SVG_FECOMPOSITE_OPERATOR_XOR
+    getter height
+    getter in1
+    getter in2
+    getter k1
+    getter k2
+    getter k3
+    getter k4
+    getter operator
+    getter result
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFEConvolveMatrixElement : SVGElement
+    attribute @@toStringTag
+    attribute SVG_EDGEMODE_DUPLICATE
+    attribute SVG_EDGEMODE_NONE
+    attribute SVG_EDGEMODE_UNKNOWN
+    attribute SVG_EDGEMODE_WRAP
+    getter bias
+    getter divisor
+    getter edgeMode
+    getter height
+    getter in1
+    getter kernelMatrix
+    getter kernelUnitLengthX
+    getter kernelUnitLengthY
+    getter orderX
+    getter orderY
+    getter preserveAlpha
+    getter result
+    getter targetX
+    getter targetY
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFEDiffuseLightingElement : SVGElement
+    attribute @@toStringTag
+    getter diffuseConstant
+    getter height
+    getter in1
+    getter kernelUnitLengthX
+    getter kernelUnitLengthY
+    getter result
+    getter surfaceScale
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFEDisplacementMapElement : SVGElement
+    attribute @@toStringTag
+    attribute SVG_CHANNEL_A
+    attribute SVG_CHANNEL_B
+    attribute SVG_CHANNEL_G
+    attribute SVG_CHANNEL_R
+    attribute SVG_CHANNEL_UNKNOWN
+    getter height
+    getter in1
+    getter in2
+    getter result
+    getter scale
+    getter width
+    getter x
+    getter xChannelSelector
+    getter y
+    getter yChannelSelector
+    method constructor
+interface SVGFEDistantLightElement : SVGElement
+    attribute @@toStringTag
+    getter azimuth
+    getter elevation
+    method constructor
+interface SVGFEDropShadowElement : SVGElement
+    attribute @@toStringTag
+    getter dx
+    getter dy
+    getter height
+    getter in1
+    getter result
+    getter stdDeviationX
+    getter stdDeviationY
+    getter width
+    getter x
+    getter y
+    method constructor
+    method setStdDeviation
+interface SVGFEFloodElement : SVGElement
+    attribute @@toStringTag
+    getter height
+    getter result
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFEFuncAElement : SVGComponentTransferFunctionElement
+    attribute @@toStringTag
+    method constructor
+interface SVGFEFuncBElement : SVGComponentTransferFunctionElement
+    attribute @@toStringTag
+    method constructor
+interface SVGFEFuncGElement : SVGComponentTransferFunctionElement
+    attribute @@toStringTag
+    method constructor
+interface SVGFEFuncRElement : SVGComponentTransferFunctionElement
+    attribute @@toStringTag
+    method constructor
+interface SVGFEGaussianBlurElement : SVGElement
+    attribute @@toStringTag
+    getter height
+    getter in1
+    getter result
+    getter stdDeviationX
+    getter stdDeviationY
+    getter width
+    getter x
+    getter y
+    method constructor
+    method setStdDeviation
+interface SVGFEImageElement : SVGElement
+    attribute @@toStringTag
+    getter height
+    getter href
+    getter preserveAspectRatio
+    getter result
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFEMergeElement : SVGElement
+    attribute @@toStringTag
+    getter height
+    getter result
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFEMergeNodeElement : SVGElement
+    attribute @@toStringTag
+    getter in1
+    method constructor
+interface SVGFEMorphologyElement : SVGElement
+    attribute @@toStringTag
+    attribute SVG_MORPHOLOGY_OPERATOR_DILATE
+    attribute SVG_MORPHOLOGY_OPERATOR_ERODE
+    attribute SVG_MORPHOLOGY_OPERATOR_UNKNOWN
+    getter height
+    getter in1
+    getter operator
+    getter radiusX
+    getter radiusY
+    getter result
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFEOffsetElement : SVGElement
+    attribute @@toStringTag
+    getter dx
+    getter dy
+    getter height
+    getter in1
+    getter result
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFEPointLightElement : SVGElement
+    attribute @@toStringTag
+    getter x
+    getter y
+    getter z
+    method constructor
+interface SVGFESpecularLightingElement : SVGElement
+    attribute @@toStringTag
+    getter height
+    getter in1
+    getter kernelUnitLengthX
+    getter kernelUnitLengthY
+    getter result
+    getter specularConstant
+    getter specularExponent
+    getter surfaceScale
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFESpotLightElement : SVGElement
+    attribute @@toStringTag
+    getter limitingConeAngle
+    getter pointsAtX
+    getter pointsAtY
+    getter pointsAtZ
+    getter specularExponent
+    getter x
+    getter y
+    getter z
+    method constructor
+interface SVGFETileElement : SVGElement
+    attribute @@toStringTag
+    getter height
+    getter in1
+    getter result
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFETurbulenceElement : SVGElement
+    attribute @@toStringTag
+    attribute SVG_STITCHTYPE_NOSTITCH
+    attribute SVG_STITCHTYPE_STITCH
+    attribute SVG_STITCHTYPE_UNKNOWN
+    attribute SVG_TURBULENCE_TYPE_FRACTALNOISE
+    attribute SVG_TURBULENCE_TYPE_TURBULENCE
+    attribute SVG_TURBULENCE_TYPE_UNKNOWN
+    getter baseFrequencyX
+    getter baseFrequencyY
+    getter height
+    getter numOctaves
+    getter result
+    getter seed
+    getter stitchTiles
+    getter type
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFilterElement : SVGElement
+    attribute @@toStringTag
+    getter filterUnits
+    getter height
+    getter href
+    getter primitiveUnits
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGForeignObjectElement : SVGGraphicsElement
+    attribute @@toStringTag
+    getter height
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGGElement : SVGGraphicsElement
+    attribute @@toStringTag
+    method constructor
+interface SVGGeometryElement : SVGGraphicsElement
+    attribute @@toStringTag
+    getter pathLength
+    method constructor
+    method getPointAtLength
+    method getTotalLength
+    method isPointInFill
+    method isPointInStroke
+interface SVGGradientElement : SVGElement
+    attribute @@toStringTag
+    attribute SVG_SPREADMETHOD_PAD
+    attribute SVG_SPREADMETHOD_REFLECT
+    attribute SVG_SPREADMETHOD_REPEAT
+    attribute SVG_SPREADMETHOD_UNKNOWN
+    getter gradientTransform
+    getter gradientUnits
+    getter href
+    getter spreadMethod
+    method constructor
+interface SVGGraphicsElement : SVGElement
+    attribute @@toStringTag
+    getter farthestViewportElement
+    getter nearestViewportElement
+    getter requiredExtensions
+    getter systemLanguage
+    getter transform
+    method constructor
+    method getBBox
+    method getCTM
+    method getScreenCTM
+interface SVGImageElement : SVGGraphicsElement
+    attribute @@toStringTag
+    getter height
+    getter href
+    getter preserveAspectRatio
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGLength
+    attribute @@toStringTag
+    attribute SVG_LENGTHTYPE_CM
+    attribute SVG_LENGTHTYPE_EMS
+    attribute SVG_LENGTHTYPE_EXS
+    attribute SVG_LENGTHTYPE_IN
+    attribute SVG_LENGTHTYPE_MM
+    attribute SVG_LENGTHTYPE_NUMBER
+    attribute SVG_LENGTHTYPE_PC
+    attribute SVG_LENGTHTYPE_PERCENTAGE
+    attribute SVG_LENGTHTYPE_PT
+    attribute SVG_LENGTHTYPE_PX
+    attribute SVG_LENGTHTYPE_UNKNOWN
+    getter unitType
+    getter value
+    getter valueAsString
+    getter valueInSpecifiedUnits
+    method constructor
+    method convertToSpecifiedUnits
+    method newValueSpecifiedUnits
+    setter value
+    setter valueAsString
+    setter valueInSpecifiedUnits
+interface SVGLengthList
+    attribute @@toStringTag
+    getter length
+    getter numberOfItems
+    method @@iterator
+    method appendItem
+    method clear
+    method constructor
+    method getItem
+    method initialize
+    method insertItemBefore
+    method removeItem
+    method replaceItem
+interface SVGLineElement : SVGGeometryElement
+    attribute @@toStringTag
+    getter x1
+    getter x2
+    getter y1
+    getter y2
+    method constructor
+interface SVGLinearGradientElement : SVGGradientElement
+    attribute @@toStringTag
+    getter x1
+    getter x2
+    getter y1
+    getter y2
+    method constructor
+interface SVGMPathElement : SVGElement
+    attribute @@toStringTag
+    getter href
+    method constructor
+interface SVGMarkerElement : SVGElement
+    attribute @@toStringTag
+    attribute SVG_MARKERUNITS_STROKEWIDTH
+    attribute SVG_MARKERUNITS_UNKNOWN
+    attribute SVG_MARKERUNITS_USERSPACEONUSE
+    attribute SVG_MARKER_ORIENT_ANGLE
+    attribute SVG_MARKER_ORIENT_AUTO
+    attribute SVG_MARKER_ORIENT_UNKNOWN
+    getter markerHeight
+    getter markerUnits
+    getter markerWidth
+    getter orientAngle
+    getter orientType
+    getter preserveAspectRatio
+    getter refX
+    getter refY
+    getter viewBox
+    method constructor
+    method setOrientToAngle
+    method setOrientToAuto
+interface SVGMaskElement : SVGElement
+    attribute @@toStringTag
+    getter height
+    getter maskContentUnits
+    getter maskUnits
+    getter requiredExtensions
+    getter systemLanguage
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGMatrix
+    attribute @@toStringTag
+    getter a
+    getter b
+    getter c
+    getter d
+    getter e
+    getter f
+    method constructor
+    method flipX
+    method flipY
+    method inverse
+    method multiply
+    method rotate
+    method rotateFromVector
+    method scale
+    method scaleNonUniform
+    method skewX
+    method skewY
+    method translate
+    setter a
+    setter b
+    setter c
+    setter d
+    setter e
+    setter f
+interface SVGMetadataElement : SVGElement
+    attribute @@toStringTag
+    method constructor
+interface SVGNumber
+    attribute @@toStringTag
+    getter value
+    method constructor
+    setter value
+interface SVGNumberList
+    attribute @@toStringTag
+    getter length
+    getter numberOfItems
+    method @@iterator
+    method appendItem
+    method clear
+    method constructor
+    method getItem
+    method initialize
+    method insertItemBefore
+    method removeItem
+    method replaceItem
+interface SVGPathElement : SVGGeometryElement
+    attribute @@toStringTag
+    method constructor
+    method getPathSegAtLength
+interface SVGPatternElement : SVGElement
+    attribute @@toStringTag
+    getter height
+    getter href
+    getter patternContentUnits
+    getter patternTransform
+    getter patternUnits
+    getter preserveAspectRatio
+    getter requiredExtensions
+    getter systemLanguage
+    getter viewBox
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGPoint
+    attribute @@toStringTag
+    getter x
+    getter y
+    method constructor
+    method matrixTransform
+    setter x
+    setter y
+interface SVGPointList
+    attribute @@toStringTag
+    getter length
+    getter numberOfItems
+    method @@iterator
+    method appendItem
+    method clear
+    method constructor
+    method getItem
+    method initialize
+    method insertItemBefore
+    method removeItem
+    method replaceItem
+interface SVGPolygonElement : SVGGeometryElement
+    attribute @@toStringTag
+    getter animatedPoints
+    getter points
+    method constructor
+interface SVGPolylineElement : SVGGeometryElement
+    attribute @@toStringTag
+    getter animatedPoints
+    getter points
+    method constructor
+interface SVGPreserveAspectRatio
+    attribute @@toStringTag
+    attribute SVG_MEETORSLICE_MEET
+    attribute SVG_MEETORSLICE_SLICE
+    attribute SVG_MEETORSLICE_UNKNOWN
+    attribute SVG_PRESERVEASPECTRATIO_NONE
+    attribute SVG_PRESERVEASPECTRATIO_UNKNOWN
+    attribute SVG_PRESERVEASPECTRATIO_XMAXYMAX
+    attribute SVG_PRESERVEASPECTRATIO_XMAXYMID
+    attribute SVG_PRESERVEASPECTRATIO_XMAXYMIN
+    attribute SVG_PRESERVEASPECTRATIO_XMIDYMAX
+    attribute SVG_PRESERVEASPECTRATIO_XMIDYMID
+    attribute SVG_PRESERVEASPECTRATIO_XMIDYMIN
+    attribute SVG_PRESERVEASPECTRATIO_XMINYMAX
+    attribute SVG_PRESERVEASPECTRATIO_XMINYMID
+    attribute SVG_PRESERVEASPECTRATIO_XMINYMIN
+    getter align
+    getter meetOrSlice
+    method constructor
+    setter align
+    setter meetOrSlice
+interface SVGRadialGradientElement : SVGGradientElement
+    attribute @@toStringTag
+    getter cx
+    getter cy
+    getter fr
+    getter fx
+    getter fy
+    getter r
+    method constructor
+interface SVGRect
+    attribute @@toStringTag
+    getter height
+    getter width
+    getter x
+    getter y
+    method constructor
+    setter height
+    setter width
+    setter x
+    setter y
+interface SVGRectElement : SVGGeometryElement
+    attribute @@toStringTag
+    getter height
+    getter rx
+    getter ry
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGSVGElement : SVGGraphicsElement
+    attribute @@toStringTag
+    attribute SVG_ZOOMANDPAN_DISABLE
+    attribute SVG_ZOOMANDPAN_MAGNIFY
+    attribute SVG_ZOOMANDPAN_UNKNOWN
+    getter currentScale
+    getter currentTranslate
+    getter height
+    getter preserveAspectRatio
+    getter viewBox
+    getter width
+    getter x
+    getter y
+    getter zoomAndPan
+    method animationsPaused
+    method checkEnclosure
+    method checkIntersection
+    method constructor
+    method createSVGAngle
+    method createSVGLength
+    method createSVGMatrix
+    method createSVGNumber
+    method createSVGPoint
+    method createSVGRect
+    method createSVGTransform
+    method createSVGTransformFromMatrix
+    method deselectAll
+    method forceRedraw
+    method getCurrentTime
+    method getElementById
+    method getEnclosureList
+    method getIntersectionList
+    method pauseAnimations
+    method setCurrentTime
+    method suspendRedraw
+    method unpauseAnimations
+    method unsuspendRedraw
+    method unsuspendRedrawAll
+    setter currentScale
+    setter zoomAndPan
+interface SVGScriptElement : SVGElement
+    attribute @@toStringTag
+    getter href
+    getter nonce
+    getter type
+    method constructor
+    setter nonce
+    setter type
+interface SVGSetElement : SVGAnimationElement
+    attribute @@toStringTag
+    method constructor
+interface SVGStopElement : SVGElement
+    attribute @@toStringTag
+    getter offset
+    method constructor
+interface SVGStringList
+    attribute @@toStringTag
+    getter length
+    getter numberOfItems
+    method @@iterator
+    method appendItem
+    method clear
+    method constructor
+    method getItem
+    method initialize
+    method insertItemBefore
+    method removeItem
+    method replaceItem
+interface SVGStyleElement : SVGElement
+    attribute @@toStringTag
+    getter disabled
+    getter media
+    getter sheet
+    getter title
+    getter type
+    method constructor
+    setter disabled
+    setter media
+    setter title
+    setter type
+interface SVGSwitchElement : SVGGraphicsElement
+    attribute @@toStringTag
+    method constructor
+interface SVGSymbolElement : SVGElement
+    attribute @@toStringTag
+    getter preserveAspectRatio
+    getter viewBox
+    method constructor
+interface SVGTSpanElement : SVGTextPositioningElement
+    attribute @@toStringTag
+    method constructor
+interface SVGTextContentElement : SVGGraphicsElement
+    attribute @@toStringTag
+    attribute LENGTHADJUST_SPACING
+    attribute LENGTHADJUST_SPACINGANDGLYPHS
+    attribute LENGTHADJUST_UNKNOWN
+    getter lengthAdjust
+    getter textLength
+    method constructor
+    method getCharNumAtPosition
+    method getComputedTextLength
+    method getEndPositionOfChar
+    method getExtentOfChar
+    method getNumberOfChars
+    method getRotationOfChar
+    method getStartPositionOfChar
+    method getSubStringLength
+    method selectSubString
+interface SVGTextElement : SVGTextPositioningElement
+    attribute @@toStringTag
+    method constructor
+interface SVGTextPathElement : SVGTextContentElement
+    attribute @@toStringTag
+    attribute TEXTPATH_METHODTYPE_ALIGN
+    attribute TEXTPATH_METHODTYPE_STRETCH
+    attribute TEXTPATH_METHODTYPE_UNKNOWN
+    attribute TEXTPATH_SPACINGTYPE_AUTO
+    attribute TEXTPATH_SPACINGTYPE_EXACT
+    attribute TEXTPATH_SPACINGTYPE_UNKNOWN
+    getter href
+    getter method
+    getter spacing
+    getter startOffset
+    method constructor
+interface SVGTextPositioningElement : SVGTextContentElement
+    attribute @@toStringTag
+    getter dx
+    getter dy
+    getter rotate
+    getter x
+    getter y
+    method constructor
+interface SVGTitleElement : SVGElement
+    attribute @@toStringTag
+    method constructor
+interface SVGTransform
+    attribute @@toStringTag
+    attribute SVG_TRANSFORM_MATRIX
+    attribute SVG_TRANSFORM_ROTATE
+    attribute SVG_TRANSFORM_SCALE
+    attribute SVG_TRANSFORM_SKEWX
+    attribute SVG_TRANSFORM_SKEWY
+    attribute SVG_TRANSFORM_TRANSLATE
+    attribute SVG_TRANSFORM_UNKNOWN
+    getter angle
+    getter matrix
+    getter type
+    method constructor
+    method setMatrix
+    method setRotate
+    method setScale
+    method setSkewX
+    method setSkewY
+    method setTranslate
+interface SVGTransformList
+    attribute @@toStringTag
+    getter length
+    getter numberOfItems
+    method @@iterator
+    method appendItem
+    method clear
+    method consolidate
+    method constructor
+    method createSVGTransformFromMatrix
+    method getItem
+    method initialize
+    method insertItemBefore
+    method removeItem
+    method replaceItem
+interface SVGUnitTypes
+    attribute @@toStringTag
+    attribute SVG_UNIT_TYPE_OBJECTBOUNDINGBOX
+    attribute SVG_UNIT_TYPE_UNKNOWN
+    attribute SVG_UNIT_TYPE_USERSPACEONUSE
+    method constructor
+interface SVGUseElement : SVGGraphicsElement
+    attribute @@toStringTag
+    getter height
+    getter href
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGViewElement : SVGElement
+    attribute @@toStringTag
+    attribute SVG_ZOOMANDPAN_DISABLE
+    attribute SVG_ZOOMANDPAN_MAGNIFY
+    attribute SVG_ZOOMANDPAN_UNKNOWN
+    getter preserveAspectRatio
+    getter viewBox
+    getter zoomAndPan
+    method constructor
+    setter zoomAndPan
+interface ScopedCredential
+    attribute @@toStringTag
+    getter id
+    getter type
+    method constructor
+interface ScopedCredentialInfo
+    attribute @@toStringTag
+    getter attestation
+    getter clientData
+    method constructor
+interface Screen
+    attribute @@toStringTag
+    getter availHeight
+    getter availLeft
+    getter availTop
+    getter availWidth
+    getter colorDepth
+    getter height
+    getter keepAwake
+    getter orientation
+    getter pixelDepth
+    getter width
+    method constructor
+    setter keepAwake
+interface ScreenOrientation : EventTarget
+    attribute @@toStringTag
+    getter angle
+    getter onchange
+    getter type
+    method constructor
+    method lock
+    method unlock
+    setter onchange
+interface ScriptProcessorNode : AudioNode
+    attribute @@toStringTag
+    getter bufferSize
+    getter onaudioprocess
+    method constructor
+    setter onaudioprocess
+interface SecurityPolicyViolationEvent : Event
+    attribute @@toStringTag
+    getter blockedURI
+    getter columnNumber
+    getter disposition
+    getter documentURI
+    getter effectiveDirective
+    getter lineNumber
+    getter originalPolicy
+    getter referrer
+    getter sample
+    getter sourceFile
+    getter statusCode
+    getter violatedDirective
+    method constructor
+interface Selection
+    attribute @@toStringTag
+    getter anchorNode
+    getter anchorOffset
+    getter baseNode
+    getter baseOffset
+    getter extentNode
+    getter extentOffset
+    getter focusNode
+    getter focusOffset
+    getter isCollapsed
+    getter rangeCount
+    getter type
+    method addRange
+    method collapse
+    method collapseToEnd
+    method collapseToStart
+    method constructor
+    method containsNode
+    method deleteFromDocument
+    method empty
+    method extend
+    method getRangeAt
+    method modify
+    method removeAllRanges
+    method removeRange
+    method selectAllChildren
+    method setBaseAndExtent
+    method setPosition
+    method toString
+interface Sensor : EventTarget
+    attribute @@toStringTag
+    getter activated
+    getter onactivate
+    getter onchange
+    getter onerror
+    getter timestamp
+    method constructor
+    method start
+    method stop
+    setter onactivate
+    setter onchange
+    setter onerror
+interface SensorErrorEvent : Event
+    attribute @@toStringTag
+    getter error
+    method constructor
+interface ServiceWorker : EventTarget
+    attribute @@toStringTag
+    getter onerror
+    getter onstatechange
+    getter scriptURL
+    getter state
+    method constructor
+    method postMessage
+    setter onerror
+    setter onstatechange
+interface ServiceWorkerContainer : EventTarget
+    attribute @@toStringTag
+    getter controller
+    getter oncontrollerchange
+    getter onmessage
+    getter ready
+    method constructor
+    method getRegistration
+    method getRegistrations
+    method register
+    setter oncontrollerchange
+    setter onmessage
+interface ServiceWorkerRegistration : EventTarget
+    attribute @@toStringTag
+    getter active
+    getter backgroundFetch
+    getter installing
+    getter onupdatefound
+    getter paymentManager
+    getter pushManager
+    getter scope
+    getter sync
+    getter waiting
+    method constructor
+    method getNotifications
+    method showNotification
+    method unregister
+    method update
+    setter onupdatefound
+interface ShadowRoot : DocumentFragment
+    attribute @@toStringTag
+    getter activeElement
+    getter delegatesFocus
+    getter fullscreenElement
+    getter host
+    getter innerHTML
+    getter mode
+    getter olderShadowRoot
+    getter pointerLockElement
+    getter styleSheets
+    method constructor
+    method elementFromPoint
+    method elementsFromPoint
+    method getSelection
+    setter innerHTML
+interface SharedWorker : EventTarget
+    attribute @@toStringTag
+    getter onerror
+    getter port
+    getter workerStart
+    method constructor
+    setter onerror
+interface SiteBoundCredential : Credential
+    attribute @@toStringTag
+    getter iconURL
+    getter name
+    method constructor
+interface SourceBuffer : EventTarget
+    attribute @@toStringTag
+    getter appendWindowEnd
+    getter appendWindowStart
+    getter audioTracks
+    getter buffered
+    getter mode
+    getter onabort
+    getter onerror
+    getter onupdate
+    getter onupdateend
+    getter onupdatestart
+    getter timestampOffset
+    getter trackDefaults
+    getter updating
+    getter videoTracks
+    method abort
+    method appendBuffer
+    method constructor
+    method remove
+    setter appendWindowEnd
+    setter appendWindowStart
+    setter mode
+    setter onabort
+    setter onerror
+    setter onupdate
+    setter onupdateend
+    setter onupdatestart
+    setter timestampOffset
+    setter trackDefaults
+interface SourceBufferList : EventTarget
+    attribute @@toStringTag
+    getter length
+    getter onaddsourcebuffer
+    getter onremovesourcebuffer
+    method @@iterator
+    method constructor
+    setter onaddsourcebuffer
+    setter onremovesourcebuffer
+interface SpeechSynthesisEvent : Event
+    attribute @@toStringTag
+    getter charIndex
+    getter elapsedTime
+    getter name
+    getter utterance
+    method constructor
+interface SpeechSynthesisUtterance : EventTarget
+    attribute @@toStringTag
+    getter lang
+    getter onboundary
+    getter onend
+    getter onerror
+    getter onmark
+    getter onpause
+    getter onresume
+    getter onstart
+    getter pitch
+    getter rate
+    getter text
+    getter voice
+    getter volume
+    method constructor
+    setter lang
+    setter onboundary
+    setter onend
+    setter onerror
+    setter onmark
+    setter onpause
+    setter onresume
+    setter onstart
+    setter pitch
+    setter rate
+    setter text
+    setter voice
+    setter volume
+interface StaticRange
+    attribute @@toStringTag
+    getter collapsed
+    getter endContainer
+    getter endOffset
+    getter startContainer
+    getter startOffset
+    method constructor
+    method setEnd
+    method setStart
+    method toRange
+    setter endContainer
+    setter endOffset
+    setter startContainer
+    setter startOffset
+interface StereoPannerNode : AudioNode
+    attribute @@toStringTag
+    getter pan
+    method constructor
+interface Storage
+    attribute @@toStringTag
+    getter length
+    method clear
+    method constructor
+    method getItem
+    method key
+    method removeItem
+    method setItem
+interface StorageEvent : Event
+    attribute @@toStringTag
+    getter key
+    getter newValue
+    getter oldValue
+    getter storageArea
+    getter url
+    method constructor
+    method initStorageEvent
+interface StorageManager
+    attribute @@toStringTag
+    method constructor
+    method estimate
+    method persist
+    method persisted
+interface StylePropertyMap : StylePropertyMapReadonly
+    attribute @@toStringTag
+    method append
+    method constructor
+    method delete
+    method set
+interface StylePropertyMapReadonly
+    attribute @@toStringTag
+    method @@iterator
+    method constructor
+    method entries
+    method forEach
+    method get
+    method getAll
+    method getProperties
+    method has
+    method keys
+    method values
+interface StyleSheet
+    attribute @@toStringTag
+    getter disabled
+    getter href
+    getter media
+    getter ownerNode
+    getter parentStyleSheet
+    getter title
+    getter type
+    method constructor
+    setter disabled
+interface StyleSheetList
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method item
+interface SubtleCrypto
+    attribute @@toStringTag
+    method constructor
+    method decrypt
+    method deriveBits
+    method deriveKey
+    method digest
+    method encrypt
+    method exportKey
+    method generateKey
+    method importKey
+    method sign
+    method unwrapKey
+    method verify
+    method wrapKey
+interface SyncManager
+    attribute @@toStringTag
+    method constructor
+    method getTags
+    method register
+interface TaskAttributionTiming : PerformanceEntry
+    attribute @@toStringTag
+    getter containerId
+    getter containerName
+    getter containerSrc
+    getter containerType
+    method constructor
+interface Text : CharacterData
+    attribute @@toStringTag
+    getter assignedSlot
+    getter wholeText
+    method constructor
+    method getDestinationInsertionPoints
+    method splitText
+interface TextDecoder
+    attribute @@toStringTag
+    getter encoding
+    getter fatal
+    getter ignoreBOM
+    method constructor
+    method decode
+interface TextDetector
+    attribute @@toStringTag
+    method constructor
+    method detect
+interface TextEncoder
+    attribute @@toStringTag
+    getter encoding
+    method constructor
+    method encode
+interface TextEvent : UIEvent
+    attribute @@toStringTag
+    getter data
+    method constructor
+    method initTextEvent
+interface TextMetrics
+    attribute @@toStringTag
+    getter actualBoundingBoxAscent
+    getter actualBoundingBoxDescent
+    getter actualBoundingBoxLeft
+    getter actualBoundingBoxRight
+    getter alphabeticBaseline
+    getter emHeightAscent
+    getter emHeightDescent
+    getter fontBoundingBoxAscent
+    getter fontBoundingBoxDescent
+    getter hangingBaseline
+    getter ideographicBaseline
+    getter width
+    method constructor
+interface TextTrack : EventTarget
+    attribute @@toStringTag
+    getter activeCues
+    getter cues
+    getter id
+    getter kind
+    getter label
+    getter language
+    getter mode
+    getter oncuechange
+    method addCue
+    method constructor
+    method removeCue
+    setter mode
+    setter oncuechange
+interface TextTrackCue : EventTarget
+    attribute @@toStringTag
+    getter endTime
+    getter id
+    getter onenter
+    getter onexit
+    getter pauseOnExit
+    getter startTime
+    getter track
+    method constructor
+    setter endTime
+    setter id
+    setter onenter
+    setter onexit
+    setter pauseOnExit
+    setter startTime
+interface TextTrackCueList
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method getCueById
+interface TextTrackList : EventTarget
+    attribute @@toStringTag
+    getter length
+    getter onaddtrack
+    getter onchange
+    getter onremovetrack
+    method @@iterator
+    method constructor
+    method getTrackById
+    setter onaddtrack
+    setter onchange
+    setter onremovetrack
+interface TimeRanges
+    attribute @@toStringTag
+    getter length
+    method constructor
+    method end
+    method start
+interface Touch
+    attribute @@toStringTag
+    getter clientX
+    getter clientY
+    getter force
+    getter identifier
+    getter pageX
+    getter pageY
+    getter radiusX
+    getter radiusY
+    getter region
+    getter rotationAngle
+    getter screenX
+    getter screenY
+    getter target
+    method constructor
+interface TouchEvent : UIEvent
+    attribute @@toStringTag
+    getter altKey
+    getter changedTouches
+    getter ctrlKey
+    getter metaKey
+    getter shiftKey
+    getter targetTouches
+    getter touches
+    method constructor
+interface TouchList
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method item
+interface TrackDefault
+    attribute @@toStringTag
+    getter byteStreamTrackID
+    getter kinds
+    getter label
+    getter language
+    getter type
+    method constructor
+interface TrackDefaultList
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+interface TrackEvent : Event
+    attribute @@toStringTag
+    getter track
+    method constructor
+interface TransitionEvent : Event
+    attribute @@toStringTag
+    getter elapsedTime
+    getter propertyName
+    getter pseudoElement
+    method constructor
+interface TreeWalker
+    attribute @@toStringTag
+    getter currentNode
+    getter filter
+    getter root
+    getter whatToShow
+    method constructor
+    method firstChild
+    method lastChild
+    method nextNode
+    method nextSibling
+    method parentNode
+    method previousNode
+    method previousSibling
+    setter currentNode
+interface UIEvent : Event
+    attribute @@toStringTag
+    getter detail
+    getter sourceCapabilities
+    getter view
+    getter which
+    method constructor
+    method initUIEvent
+interface URL
+    static method createObjectURL
+    static method revokeObjectURL
+    attribute @@toStringTag
+    getter hash
+    getter host
+    getter hostname
+    getter href
+    getter origin
+    getter password
+    getter pathname
+    getter port
+    getter protocol
+    getter search
+    getter searchParams
+    getter username
+    method constructor
+    method toString
+    setter hash
+    setter host
+    setter hostname
+    setter href
+    setter password
+    setter pathname
+    setter port
+    setter protocol
+    setter search
+    setter username
+interface URLSearchParams
+    attribute @@toStringTag
+    method @@iterator
+    method append
+    method constructor
+    method delete
+    method entries
+    method forEach
+    method get
+    method getAll
+    method has
+    method keys
+    method set
+    method toString
+    method values
+interface USB : EventTarget
+    attribute @@toStringTag
+    getter onconnect
+    getter ondisconnect
+    method constructor
+    method getDevices
+    method requestDevice
+    setter onconnect
+    setter ondisconnect
+interface USBAlternateInterface
+    attribute @@toStringTag
+    getter alternateSetting
+    getter endpoints
+    getter interfaceClass
+    getter interfaceName
+    getter interfaceProtocol
+    getter interfaceSubclass
+    method constructor
+interface USBConfiguration
+    attribute @@toStringTag
+    getter configurationName
+    getter configurationValue
+    getter interfaces
+    method constructor
+interface USBConnectionEvent : Event
+    attribute @@toStringTag
+    getter device
+    method constructor
+interface USBDevice
+    attribute @@toStringTag
+    getter configuration
+    getter configurations
+    getter deviceClass
+    getter deviceProtocol
+    getter deviceSubclass
+    getter deviceVersionMajor
+    getter deviceVersionMinor
+    getter deviceVersionSubminor
+    getter manufacturerName
+    getter opened
+    getter productId
+    getter productName
+    getter serialNumber
+    getter usbVersionMajor
+    getter usbVersionMinor
+    getter usbVersionSubminor
+    getter vendorId
+    method claimInterface
+    method clearHalt
+    method close
+    method constructor
+    method controlTransferIn
+    method controlTransferOut
+    method isochronousTransferIn
+    method isochronousTransferOut
+    method open
+    method releaseInterface
+    method reset
+    method selectAlternateInterface
+    method selectConfiguration
+    method transferIn
+    method transferOut
+interface USBEndpoint
+    attribute @@toStringTag
+    getter direction
+    getter endpointNumber
+    getter packetSize
+    getter type
+    method constructor
+interface USBInTransferResult
+    attribute @@toStringTag
+    getter data
+    getter status
+    method constructor
+interface USBInterface
+    attribute @@toStringTag
+    getter alternate
+    getter alternates
+    getter claimed
+    getter interfaceNumber
+    method constructor
+interface USBIsochronousInTransferPacket
+    attribute @@toStringTag
+    getter data
+    getter status
+    method constructor
+interface USBIsochronousInTransferResult
+    attribute @@toStringTag
+    getter data
+    getter packets
+    method constructor
+interface USBIsochronousOutTransferPacket
+    attribute @@toStringTag
+    getter bytesWritten
+    getter status
+    method constructor
+interface USBIsochronousOutTransferResult
+    attribute @@toStringTag
+    getter packets
+    method constructor
+interface USBOutTransferResult
+    attribute @@toStringTag
+    getter bytesWritten
+    getter status
+    method constructor
+interface VRDisplay : EventTarget
+    attribute @@toStringTag
+    getter capabilities
+    getter depthFar
+    getter depthNear
+    getter displayId
+    getter displayName
+    getter isPresenting
+    getter stageParameters
+    method cancelAnimationFrame
+    method constructor
+    method exitPresent
+    method getEyeParameters
+    method getFrameData
+    method getLayers
+    method requestAnimationFrame
+    method requestPresent
+    method submitFrame
+    setter depthFar
+    setter depthNear
+interface VRDisplayCapabilities
+    attribute @@toStringTag
+    getter canPresent
+    getter hasExternalDisplay
+    getter hasPosition
+    getter maxLayers
+    method constructor
+interface VRDisplayEvent : Event
+    attribute @@toStringTag
+    getter display
+    getter reason
+    method constructor
+interface VREyeParameters
+    attribute @@toStringTag
+    getter offset
+    getter renderHeight
+    getter renderWidth
+    method constructor
+interface VRFrameData
+    attribute @@toStringTag
+    getter leftProjectionMatrix
+    getter leftViewMatrix
+    getter pose
+    getter rightProjectionMatrix
+    getter rightViewMatrix
+    method constructor
+interface VRPose
+    attribute @@toStringTag
+    getter angularAcceleration
+    getter angularVelocity
+    getter linearAcceleration
+    getter linearVelocity
+    getter orientation
+    getter position
+    method constructor
+interface VRStageParameters
+    attribute @@toStringTag
+    getter sittingToStandingTransform
+    getter sizeX
+    getter sizeZ
+    method constructor
+interface VTTCue : TextTrackCue
+    attribute @@toStringTag
+    getter align
+    getter line
+    getter position
+    getter region
+    getter size
+    getter snapToLines
+    getter text
+    getter vertical
+    method constructor
+    method getCueAsHTML
+    setter align
+    setter line
+    setter position
+    setter region
+    setter size
+    setter snapToLines
+    setter text
+    setter vertical
+interface VTTRegion
+    attribute @@toStringTag
+    getter lines
+    getter regionAnchorX
+    getter regionAnchorY
+    getter scroll
+    getter viewportAnchorX
+    getter viewportAnchorY
+    getter width
+    method constructor
+    setter lines
+    setter regionAnchorX
+    setter regionAnchorY
+    setter scroll
+    setter viewportAnchorX
+    setter viewportAnchorY
+    setter width
+interface ValidityState
+    attribute @@toStringTag
+    getter badInput
+    getter customError
+    getter patternMismatch
+    getter rangeOverflow
+    getter rangeUnderflow
+    getter stepMismatch
+    getter tooLong
+    getter tooShort
+    getter typeMismatch
+    getter valid
+    getter valueMissing
+    method constructor
+interface VideoPlaybackQuality
+    attribute @@toStringTag
+    getter corruptedVideoFrames
+    getter creationTime
+    getter droppedVideoFrames
+    getter totalVideoFrames
+    method constructor
+interface VideoTrack
+    attribute @@toStringTag
+    getter id
+    getter kind
+    getter label
+    getter language
+    getter selected
+    getter sourceBuffer
+    method constructor
+    setter selected
+interface VideoTrackList : EventTarget
+    attribute @@toStringTag
+    getter length
+    getter onaddtrack
+    getter onchange
+    getter onremovetrack
+    getter selectedIndex
+    method @@iterator
+    method constructor
+    method getTrackById
+    setter onaddtrack
+    setter onchange
+    setter onremovetrack
+interface VisualViewport : EventTarget
+    attribute @@toStringTag
+    getter clientHeight
+    getter clientWidth
+    getter pageX
+    getter pageY
+    getter scale
+    getter scrollLeft
+    getter scrollTop
+    method constructor
+interface WaveShaperNode : AudioNode
+    attribute @@toStringTag
+    getter curve
+    getter oversample
+    method constructor
+    setter curve
+    setter oversample
+interface WebAuthentication
+    attribute @@toStringTag
+    method constructor
+    method getAssertion
+    method makeCredential
+interface WebGL2RenderingContext
+    attribute @@toStringTag
+    attribute ACTIVE_ATTRIBUTES
+    attribute ACTIVE_TEXTURE
+    attribute ACTIVE_UNIFORMS
+    attribute ACTIVE_UNIFORM_BLOCKS
+    attribute ALIASED_LINE_WIDTH_RANGE
+    attribute ALIASED_POINT_SIZE_RANGE
+    attribute ALPHA
+    attribute ALPHA_BITS
+    attribute ALREADY_SIGNALED
+    attribute ALWAYS
+    attribute ANY_SAMPLES_PASSED
+    attribute ANY_SAMPLES_PASSED_CONSERVATIVE
+    attribute ARRAY_BUFFER
+    attribute ARRAY_BUFFER_BINDING
+    attribute ATTACHED_SHADERS
+    attribute BACK
+    attribute BLEND
+    attribute BLEND_COLOR
+    attribute BLEND_DST_ALPHA
+    attribute BLEND_DST_RGB
+    attribute BLEND_EQUATION
+    attribute BLEND_EQUATION_ALPHA
+    attribute BLEND_EQUATION_RGB
+    attribute BLEND_SRC_ALPHA
+    attribute BLEND_SRC_RGB
+    attribute BLUE_BITS
+    attribute BOOL
+    attribute BOOL_VEC2
+    attribute BOOL_VEC3
+    attribute BOOL_VEC4
+    attribute BROWSER_DEFAULT_WEBGL
+    attribute BUFFER_SIZE
+    attribute BUFFER_USAGE
+    attribute BYTE
+    attribute CCW
+    attribute CLAMP_TO_EDGE
+    attribute COLOR
+    attribute COLOR_ATTACHMENT0
+    attribute COLOR_ATTACHMENT1
+    attribute COLOR_ATTACHMENT10
+    attribute COLOR_ATTACHMENT11
+    attribute COLOR_ATTACHMENT12
+    attribute COLOR_ATTACHMENT13
+    attribute COLOR_ATTACHMENT14
+    attribute COLOR_ATTACHMENT15
+    attribute COLOR_ATTACHMENT2
+    attribute COLOR_ATTACHMENT3
+    attribute COLOR_ATTACHMENT4
+    attribute COLOR_ATTACHMENT5
+    attribute COLOR_ATTACHMENT6
+    attribute COLOR_ATTACHMENT7
+    attribute COLOR_ATTACHMENT8
+    attribute COLOR_ATTACHMENT9
+    attribute COLOR_BUFFER_BIT
+    attribute COLOR_CLEAR_VALUE
+    attribute COLOR_WRITEMASK
+    attribute COMPARE_REF_TO_TEXTURE
+    attribute COMPILE_STATUS
+    attribute COMPRESSED_TEXTURE_FORMATS
+    attribute CONDITION_SATISFIED
+    attribute CONSTANT_ALPHA
+    attribute CONSTANT_COLOR
+    attribute CONTEXT_LOST_WEBGL
+    attribute COPY_READ_BUFFER
+    attribute COPY_READ_BUFFER_BINDING
+    attribute COPY_WRITE_BUFFER
+    attribute COPY_WRITE_BUFFER_BINDING
+    attribute CULL_FACE
+    attribute CULL_FACE_MODE
+    attribute CURRENT_PROGRAM
+    attribute CURRENT_QUERY
+    attribute CURRENT_VERTEX_ATTRIB
+    attribute CW
+    attribute DECR
+    attribute DECR_WRAP
+    attribute DELETE_STATUS
+    attribute DEPTH
+    attribute DEPTH24_STENCIL8
+    attribute DEPTH32F_STENCIL8
+    attribute DEPTH_ATTACHMENT
+    attribute DEPTH_BITS
+    attribute DEPTH_BUFFER_BIT
+    attribute DEPTH_CLEAR_VALUE
+    attribute DEPTH_COMPONENT
+    attribute DEPTH_COMPONENT16
+    attribute DEPTH_COMPONENT24
+    attribute DEPTH_COMPONENT32F
+    attribute DEPTH_FUNC
+    attribute DEPTH_RANGE
+    attribute DEPTH_STENCIL
+    attribute DEPTH_STENCIL_ATTACHMENT
+    attribute DEPTH_TEST
+    attribute DEPTH_WRITEMASK
+    attribute DITHER
+    attribute DONT_CARE
+    attribute DRAW_BUFFER0
+    attribute DRAW_BUFFER1
+    attribute DRAW_BUFFER10
+    attribute DRAW_BUFFER11
+    attribute DRAW_BUFFER12
+    attribute DRAW_BUFFER13
+    attribute DRAW_BUFFER14
+    attribute DRAW_BUFFER15
+    attribute DRAW_BUFFER2
+    attribute DRAW_BUFFER3
+    attribute DRAW_BUFFER4
+    attribute DRAW_BUFFER5
+    attribute DRAW_BUFFER6
+    attribute DRAW_BUFFER7
+    attribute DRAW_BUFFER8
+    attribute DRAW_BUFFER9
+    attribute DRAW_FRAMEBUFFER
+    attribute DRAW_FRAMEBUFFER_BINDING
+    attribute DST_ALPHA
+    attribute DST_COLOR
+    attribute DYNAMIC_COPY
+    attribute DYNAMIC_DRAW
+    attribute DYNAMIC_READ
+    attribute ELEMENT_ARRAY_BUFFER
+    attribute ELEMENT_ARRAY_BUFFER_BINDING
+    attribute EQUAL
+    attribute FASTEST
+    attribute FLOAT
+    attribute FLOAT_32_UNSIGNED_INT_24_8_REV
+    attribute FLOAT_MAT2
+    attribute FLOAT_MAT2x3
+    attribute FLOAT_MAT2x4
+    attribute FLOAT_MAT3
+    attribute FLOAT_MAT3x2
+    attribute FLOAT_MAT3x4
+    attribute FLOAT_MAT4
+    attribute FLOAT_MAT4x2
+    attribute FLOAT_MAT4x3
+    attribute FLOAT_VEC2
+    attribute FLOAT_VEC3
+    attribute FLOAT_VEC4
+    attribute FRAGMENT_SHADER
+    attribute FRAGMENT_SHADER_DERIVATIVE_HINT
+    attribute FRAMEBUFFER
+    attribute FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE
+    attribute FRAMEBUFFER_ATTACHMENT_BLUE_SIZE
+    attribute FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING
+    attribute FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE
+    attribute FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE
+    attribute FRAMEBUFFER_ATTACHMENT_GREEN_SIZE
+    attribute FRAMEBUFFER_ATTACHMENT_OBJECT_NAME
+    attribute FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE
+    attribute FRAMEBUFFER_ATTACHMENT_RED_SIZE
+    attribute FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE
+    attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE
+    attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER
+    attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL
+    attribute FRAMEBUFFER_BINDING
+    attribute FRAMEBUFFER_COMPLETE
+    attribute FRAMEBUFFER_DEFAULT
+    attribute FRAMEBUFFER_INCOMPLETE_ATTACHMENT
+    attribute FRAMEBUFFER_INCOMPLETE_DIMENSIONS
+    attribute FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
+    attribute FRAMEBUFFER_INCOMPLETE_MULTISAMPLE
+    attribute FRAMEBUFFER_UNSUPPORTED
+    attribute FRONT
+    attribute FRONT_AND_BACK
+    attribute FRONT_FACE
+    attribute FUNC_ADD
+    attribute FUNC_REVERSE_SUBTRACT
+    attribute FUNC_SUBTRACT
+    attribute GENERATE_MIPMAP_HINT
+    attribute GEQUAL
+    attribute GREATER
+    attribute GREEN_BITS
+    attribute HALF_FLOAT
+    attribute HIGH_FLOAT
+    attribute HIGH_INT
+    attribute IMPLEMENTATION_COLOR_READ_FORMAT
+    attribute IMPLEMENTATION_COLOR_READ_TYPE
+    attribute INCR
+    attribute INCR_WRAP
+    attribute INT
+    attribute INTERLEAVED_ATTRIBS
+    attribute INT_2_10_10_10_REV
+    attribute INT_SAMPLER_2D
+    attribute INT_SAMPLER_2D_ARRAY
+    attribute INT_SAMPLER_3D
+    attribute INT_SAMPLER_CUBE
+    attribute INT_VEC2
+    attribute INT_VEC3
+    attribute INT_VEC4
+    attribute INVALID_ENUM
+    attribute INVALID_FRAMEBUFFER_OPERATION
+    attribute INVALID_INDEX
+    attribute INVALID_OPERATION
+    attribute INVALID_VALUE
+    attribute INVERT
+    attribute KEEP
+    attribute LEQUAL
+    attribute LESS
+    attribute LINEAR
+    attribute LINEAR_MIPMAP_LINEAR
+    attribute LINEAR_MIPMAP_NEAREST
+    attribute LINES
+    attribute LINE_LOOP
+    attribute LINE_STRIP
+    attribute LINE_WIDTH
+    attribute LINK_STATUS
+    attribute LOW_FLOAT
+    attribute LOW_INT
+    attribute LUMINANCE
+    attribute LUMINANCE_ALPHA
+    attribute MAX
+    attribute MAX_3D_TEXTURE_SIZE
+    attribute MAX_ARRAY_TEXTURE_LAYERS
+    attribute MAX_CLIENT_WAIT_TIMEOUT_WEBGL
+    attribute MAX_COLOR_ATTACHMENTS
+    attribute MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS
+    attribute MAX_COMBINED_TEXTURE_IMAGE_UNITS
+    attribute MAX_COMBINED_UNIFORM_BLOCKS
+    attribute MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS
+    attribute MAX_CUBE_MAP_TEXTURE_SIZE
+    attribute MAX_DRAW_BUFFERS
+    attribute MAX_ELEMENTS_INDICES
+    attribute MAX_ELEMENTS_VERTICES
+    attribute MAX_ELEMENT_INDEX
+    attribute MAX_FRAGMENT_INPUT_COMPONENTS
+    attribute MAX_FRAGMENT_UNIFORM_BLOCKS
+    attribute MAX_FRAGMENT_UNIFORM_COMPONENTS
+    attribute MAX_FRAGMENT_UNIFORM_VECTORS
+    attribute MAX_PROGRAM_TEXEL_OFFSET
+    attribute MAX_RENDERBUFFER_SIZE
+    attribute MAX_SAMPLES
+    attribute MAX_SERVER_WAIT_TIMEOUT
+    attribute MAX_TEXTURE_IMAGE_UNITS
+    attribute MAX_TEXTURE_LOD_BIAS
+    attribute MAX_TEXTURE_SIZE
+    attribute MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+    attribute MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+    attribute MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+    attribute MAX_UNIFORM_BLOCK_SIZE
+    attribute MAX_UNIFORM_BUFFER_BINDINGS
+    attribute MAX_VARYING_COMPONENTS
+    attribute MAX_VARYING_VECTORS
+    attribute MAX_VERTEX_ATTRIBS
+    attribute MAX_VERTEX_OUTPUT_COMPONENTS
+    attribute MAX_VERTEX_TEXTURE_IMAGE_UNITS
+    attribute MAX_VERTEX_UNIFORM_BLOCKS
+    attribute MAX_VERTEX_UNIFORM_COMPONENTS
+    attribute MAX_VERTEX_UNIFORM_VECTORS
+    attribute MAX_VIEWPORT_DIMS
+    attribute MEDIUM_FLOAT
+    attribute MEDIUM_INT
+    attribute MIN
+    attribute MIN_PROGRAM_TEXEL_OFFSET
+    attribute MIRRORED_REPEAT
+    attribute NEAREST
+    attribute NEAREST_MIPMAP_LINEAR
+    attribute NEAREST_MIPMAP_NEAREST
+    attribute NEVER
+    attribute NICEST
+    attribute NONE
+    attribute NOTEQUAL
+    attribute NO_ERROR
+    attribute OBJECT_TYPE
+    attribute ONE
+    attribute ONE_MINUS_CONSTANT_ALPHA
+    attribute ONE_MINUS_CONSTANT_COLOR
+    attribute ONE_MINUS_DST_ALPHA
+    attribute ONE_MINUS_DST_COLOR
+    attribute ONE_MINUS_SRC_ALPHA
+    attribute ONE_MINUS_SRC_COLOR
+    attribute OUT_OF_MEMORY
+    attribute PACK_ALIGNMENT
+    attribute PACK_ROW_LENGTH
+    attribute PACK_SKIP_PIXELS
+    attribute PACK_SKIP_ROWS
+    attribute PIXEL_PACK_BUFFER
+    attribute PIXEL_PACK_BUFFER_BINDING
+    attribute PIXEL_UNPACK_BUFFER
+    attribute PIXEL_UNPACK_BUFFER_BINDING
+    attribute POINTS
+    attribute POLYGON_OFFSET_FACTOR
+    attribute POLYGON_OFFSET_FILL
+    attribute POLYGON_OFFSET_UNITS
+    attribute QUERY_RESULT
+    attribute QUERY_RESULT_AVAILABLE
+    attribute R11F_G11F_B10F
+    attribute R16F
+    attribute R16I
+    attribute R16UI
+    attribute R32F
+    attribute R32I
+    attribute R32UI
+    attribute R8
+    attribute R8I
+    attribute R8UI
+    attribute R8_SNORM
+    attribute RASTERIZER_DISCARD
+    attribute READ_BUFFER
+    attribute READ_FRAMEBUFFER
+    attribute READ_FRAMEBUFFER_BINDING
+    attribute RED
+    attribute RED_BITS
+    attribute RED_INTEGER
+    attribute RENDERBUFFER
+    attribute RENDERBUFFER_ALPHA_SIZE
+    attribute RENDERBUFFER_BINDING
+    attribute RENDERBUFFER_BLUE_SIZE
+    attribute RENDERBUFFER_DEPTH_SIZE
+    attribute RENDERBUFFER_GREEN_SIZE
+    attribute RENDERBUFFER_HEIGHT
+    attribute RENDERBUFFER_INTERNAL_FORMAT
+    attribute RENDERBUFFER_RED_SIZE
+    attribute RENDERBUFFER_SAMPLES
+    attribute RENDERBUFFER_STENCIL_SIZE
+    attribute RENDERBUFFER_WIDTH
+    attribute RENDERER
+    attribute REPEAT
+    attribute REPLACE
+    attribute RG
+    attribute RG16F
+    attribute RG16I
+    attribute RG16UI
+    attribute RG32F
+    attribute RG32I
+    attribute RG32UI
+    attribute RG8
+    attribute RG8I
+    attribute RG8UI
+    attribute RG8_SNORM
+    attribute RGB
+    attribute RGB10_A2
+    attribute RGB10_A2UI
+    attribute RGB16F
+    attribute RGB16I
+    attribute RGB16UI
+    attribute RGB32F
+    attribute RGB32I
+    attribute RGB32UI
+    attribute RGB565
+    attribute RGB5_A1
+    attribute RGB8
+    attribute RGB8I
+    attribute RGB8UI
+    attribute RGB8_SNORM
+    attribute RGB9_E5
+    attribute RGBA
+    attribute RGBA16F
+    attribute RGBA16I
+    attribute RGBA16UI
+    attribute RGBA32F
+    attribute RGBA32I
+    attribute RGBA32UI
+    attribute RGBA4
+    attribute RGBA8
+    attribute RGBA8I
+    attribute RGBA8UI
+    attribute RGBA8_SNORM
+    attribute RGBA_INTEGER
+    attribute RGB_INTEGER
+    attribute RG_INTEGER
+    attribute SAMPLER_2D
+    attribute SAMPLER_2D_ARRAY
+    attribute SAMPLER_2D_ARRAY_SHADOW
+    attribute SAMPLER_2D_SHADOW
+    attribute SAMPLER_3D
+    attribute SAMPLER_BINDING
+    attribute SAMPLER_CUBE
+    attribute SAMPLER_CUBE_SHADOW
+    attribute SAMPLES
+    attribute SAMPLE_ALPHA_TO_COVERAGE
+    attribute SAMPLE_BUFFERS
+    attribute SAMPLE_COVERAGE
+    attribute SAMPLE_COVERAGE_INVERT
+    attribute SAMPLE_COVERAGE_VALUE
+    attribute SCISSOR_BOX
+    attribute SCISSOR_TEST
+    attribute SEPARATE_ATTRIBS
+    attribute SHADER_TYPE
+    attribute SHADING_LANGUAGE_VERSION
+    attribute SHORT
+    attribute SIGNALED
+    attribute SIGNED_NORMALIZED
+    attribute SRC_ALPHA
+    attribute SRC_ALPHA_SATURATE
+    attribute SRC_COLOR
+    attribute SRGB
+    attribute SRGB8
+    attribute SRGB8_ALPHA8
+    attribute STATIC_COPY
+    attribute STATIC_DRAW
+    attribute STATIC_READ
+    attribute STENCIL
+    attribute STENCIL_ATTACHMENT
+    attribute STENCIL_BACK_FAIL
+    attribute STENCIL_BACK_FUNC
+    attribute STENCIL_BACK_PASS_DEPTH_FAIL
+    attribute STENCIL_BACK_PASS_DEPTH_PASS
+    attribute STENCIL_BACK_REF
+    attribute STENCIL_BACK_VALUE_MASK
+    attribute STENCIL_BACK_WRITEMASK
+    attribute STENCIL_BITS
+    attribute STENCIL_BUFFER_BIT
+    attribute STENCIL_CLEAR_VALUE
+    attribute STENCIL_FAIL
+    attribute STENCIL_FUNC
+    attribute STENCIL_INDEX
+    attribute STENCIL_INDEX8
+    attribute STENCIL_PASS_DEPTH_FAIL
+    attribute STENCIL_PASS_DEPTH_PASS
+    attribute STENCIL_REF
+    attribute STENCIL_TEST
+    attribute STENCIL_VALUE_MASK
+    attribute STENCIL_WRITEMASK
+    attribute STREAM_COPY
+    attribute STREAM_DRAW
+    attribute STREAM_READ
+    attribute SUBPIXEL_BITS
+    attribute SYNC_CONDITION
+    attribute SYNC_FENCE
+    attribute SYNC_FLAGS
+    attribute SYNC_FLUSH_COMMANDS_BIT
+    attribute SYNC_GPU_COMMANDS_COMPLETE
+    attribute SYNC_STATUS
+    attribute TEXTURE
+    attribute TEXTURE0
+    attribute TEXTURE1
+    attribute TEXTURE10
+    attribute TEXTURE11
+    attribute TEXTURE12
+    attribute TEXTURE13
+    attribute TEXTURE14
+    attribute TEXTURE15
+    attribute TEXTURE16
+    attribute TEXTURE17
+    attribute TEXTURE18
+    attribute TEXTURE19
+    attribute TEXTURE2
+    attribute TEXTURE20
+    attribute TEXTURE21
+    attribute TEXTURE22
+    attribute TEXTURE23
+    attribute TEXTURE24
+    attribute TEXTURE25
+    attribute TEXTURE26
+    attribute TEXTURE27
+    attribute TEXTURE28
+    attribute TEXTURE29
+    attribute TEXTURE3
+    attribute TEXTURE30
+    attribute TEXTURE31
+    attribute TEXTURE4
+    attribute TEXTURE5
+    attribute TEXTURE6
+    attribute TEXTURE7
+    attribute TEXTURE8
+    attribute TEXTURE9
+    attribute TEXTURE_2D
+    attribute TEXTURE_2D_ARRAY
+    attribute TEXTURE_3D
+    attribute TEXTURE_BASE_LEVEL
+    attribute TEXTURE_BINDING_2D
+    attribute TEXTURE_BINDING_2D_ARRAY
+    attribute TEXTURE_BINDING_3D
+    attribute TEXTURE_BINDING_CUBE_MAP
+    attribute TEXTURE_COMPARE_FUNC
+    attribute TEXTURE_COMPARE_MODE
+    attribute TEXTURE_CUBE_MAP
+    attribute TEXTURE_CUBE_MAP_NEGATIVE_X
+    attribute TEXTURE_CUBE_MAP_NEGATIVE_Y
+    attribute TEXTURE_CUBE_MAP_NEGATIVE_Z
+    attribute TEXTURE_CUBE_MAP_POSITIVE_X
+    attribute TEXTURE_CUBE_MAP_POSITIVE_Y
+    attribute TEXTURE_CUBE_MAP_POSITIVE_Z
+    attribute TEXTURE_IMMUTABLE_FORMAT
+    attribute TEXTURE_IMMUTABLE_LEVELS
+    attribute TEXTURE_MAG_FILTER
+    attribute TEXTURE_MAX_LEVEL
+    attribute TEXTURE_MAX_LOD
+    attribute TEXTURE_MIN_FILTER
+    attribute TEXTURE_MIN_LOD
+    attribute TEXTURE_WRAP_R
+    attribute TEXTURE_WRAP_S
+    attribute TEXTURE_WRAP_T
+    attribute TIMEOUT_EXPIRED
+    attribute TIMEOUT_IGNORED
+    attribute TRANSFORM_FEEDBACK
+    attribute TRANSFORM_FEEDBACK_ACTIVE
+    attribute TRANSFORM_FEEDBACK_BINDING
+    attribute TRANSFORM_FEEDBACK_BUFFER
+    attribute TRANSFORM_FEEDBACK_BUFFER_BINDING
+    attribute TRANSFORM_FEEDBACK_BUFFER_MODE
+    attribute TRANSFORM_FEEDBACK_BUFFER_SIZE
+    attribute TRANSFORM_FEEDBACK_BUFFER_START
+    attribute TRANSFORM_FEEDBACK_PAUSED
+    attribute TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+    attribute TRANSFORM_FEEDBACK_VARYINGS
+    attribute TRIANGLES
+    attribute TRIANGLE_FAN
+    attribute TRIANGLE_STRIP
+    attribute UNIFORM_ARRAY_STRIDE
+    attribute UNIFORM_BLOCK_ACTIVE_UNIFORMS
+    attribute UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES
+    attribute UNIFORM_BLOCK_BINDING
+    attribute UNIFORM_BLOCK_DATA_SIZE
+    attribute UNIFORM_BLOCK_INDEX
+    attribute UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER
+    attribute UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER
+    attribute UNIFORM_BUFFER
+    attribute UNIFORM_BUFFER_BINDING
+    attribute UNIFORM_BUFFER_OFFSET_ALIGNMENT
+    attribute UNIFORM_BUFFER_SIZE
+    attribute UNIFORM_BUFFER_START
+    attribute UNIFORM_IS_ROW_MAJOR
+    attribute UNIFORM_MATRIX_STRIDE
+    attribute UNIFORM_OFFSET
+    attribute UNIFORM_SIZE
+    attribute UNIFORM_TYPE
+    attribute UNPACK_ALIGNMENT
+    attribute UNPACK_COLORSPACE_CONVERSION_WEBGL
+    attribute UNPACK_FLIP_Y_WEBGL
+    attribute UNPACK_IMAGE_HEIGHT
+    attribute UNPACK_PREMULTIPLY_ALPHA_WEBGL
+    attribute UNPACK_ROW_LENGTH
+    attribute UNPACK_SKIP_IMAGES
+    attribute UNPACK_SKIP_PIXELS
+    attribute UNPACK_SKIP_ROWS
+    attribute UNSIGNALED
+    attribute UNSIGNED_BYTE
+    attribute UNSIGNED_INT
+    attribute UNSIGNED_INT_10F_11F_11F_REV
+    attribute UNSIGNED_INT_24_8
+    attribute UNSIGNED_INT_2_10_10_10_REV
+    attribute UNSIGNED_INT_5_9_9_9_REV
+    attribute UNSIGNED_INT_SAMPLER_2D
+    attribute UNSIGNED_INT_SAMPLER_2D_ARRAY
+    attribute UNSIGNED_INT_SAMPLER_3D
+    attribute UNSIGNED_INT_SAMPLER_CUBE
+    attribute UNSIGNED_INT_VEC2
+    attribute UNSIGNED_INT_VEC3
+    attribute UNSIGNED_INT_VEC4
+    attribute UNSIGNED_NORMALIZED
+    attribute UNSIGNED_SHORT
+    attribute UNSIGNED_SHORT_4_4_4_4
+    attribute UNSIGNED_SHORT_5_5_5_1
+    attribute UNSIGNED_SHORT_5_6_5
+    attribute VALIDATE_STATUS
+    attribute VENDOR
+    attribute VERSION
+    attribute VERTEX_ARRAY_BINDING
+    attribute VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+    attribute VERTEX_ATTRIB_ARRAY_DIVISOR
+    attribute VERTEX_ATTRIB_ARRAY_ENABLED
+    attribute VERTEX_ATTRIB_ARRAY_INTEGER
+    attribute VERTEX_ATTRIB_ARRAY_NORMALIZED
+    attribute VERTEX_ATTRIB_ARRAY_POINTER
+    attribute VERTEX_ATTRIB_ARRAY_SIZE
+    attribute VERTEX_ATTRIB_ARRAY_STRIDE
+    attribute VERTEX_ATTRIB_ARRAY_TYPE
+    attribute VERTEX_SHADER
+    attribute VIEWPORT
+    attribute WAIT_FAILED
+    attribute ZERO
+    getter canvas
+    getter drawingBufferHeight
+    getter drawingBufferWidth
+    method activeTexture
+    method attachShader
+    method beginQuery
+    method beginTransformFeedback
+    method bindAttribLocation
+    method bindBuffer
+    method bindBufferBase
+    method bindBufferRange
+    method bindFramebuffer
+    method bindRenderbuffer
+    method bindSampler
+    method bindTexture
+    method bindTransformFeedback
+    method bindVertexArray
+    method blendColor
+    method blendEquation
+    method blendEquationSeparate
+    method blendFunc
+    method blendFuncSeparate
+    method blitFramebuffer
+    method bufferData
+    method bufferSubData
+    method checkFramebufferStatus
+    method clear
+    method clearBufferfi
+    method clearBufferfv
+    method clearBufferiv
+    method clearBufferuiv
+    method clearColor
+    method clearDepth
+    method clearStencil
+    method clientWaitSync
+    method colorMask
+    method commit
+    method compileShader
+    method compressedTexImage2D
+    method compressedTexImage3D
+    method compressedTexSubImage2D
+    method compressedTexSubImage3D
+    method constructor
+    method copyBufferSubData
+    method copyTexImage2D
+    method copyTexSubImage2D
+    method copyTexSubImage3D
+    method createBuffer
+    method createFramebuffer
+    method createProgram
+    method createQuery
+    method createRenderbuffer
+    method createSampler
+    method createShader
+    method createTexture
+    method createTransformFeedback
+    method createVertexArray
+    method cullFace
+    method deleteBuffer
+    method deleteFramebuffer
+    method deleteProgram
+    method deleteQuery
+    method deleteRenderbuffer
+    method deleteSampler
+    method deleteShader
+    method deleteSync
+    method deleteTexture
+    method deleteTransformFeedback
+    method deleteVertexArray
+    method depthFunc
+    method depthMask
+    method depthRange
+    method detachShader
+    method disable
+    method disableVertexAttribArray
+    method drawArrays
+    method drawArraysInstanced
+    method drawBuffers
+    method drawElements
+    method drawElementsInstanced
+    method drawRangeElements
+    method enable
+    method enableVertexAttribArray
+    method endQuery
+    method endTransformFeedback
+    method fenceSync
+    method finish
+    method flush
+    method framebufferRenderbuffer
+    method framebufferTexture2D
+    method framebufferTextureLayer
+    method frontFace
+    method generateMipmap
+    method getActiveAttrib
+    method getActiveUniform
+    method getActiveUniformBlockName
+    method getActiveUniformBlockParameter
+    method getActiveUniforms
+    method getAttachedShaders
+    method getAttribLocation
+    method getBufferParameter
+    method getBufferSubData
+    method getContextAttributes
+    method getError
+    method getExtension
+    method getFragDataLocation
+    method getFramebufferAttachmentParameter
+    method getIndexedParameter
+    method getInternalformatParameter
+    method getParameter
+    method getProgramInfoLog
+    method getProgramParameter
+    method getQuery
+    method getQueryParameter
+    method getRenderbufferParameter
+    method getSamplerParameter
+    method getShaderInfoLog
+    method getShaderParameter
+    method getShaderPrecisionFormat
+    method getShaderSource
+    method getSupportedExtensions
+    method getSyncParameter
+    method getTexParameter
+    method getTransformFeedbackVarying
+    method getUniform
+    method getUniformBlockIndex
+    method getUniformIndices
+    method getUniformLocation
+    method getVertexAttrib
+    method getVertexAttribOffset
+    method hint
+    method invalidateFramebuffer
+    method invalidateSubFramebuffer
+    method isBuffer
+    method isContextLost
+    method isEnabled
+    method isFramebuffer
+    method isProgram
+    method isQuery
+    method isRenderbuffer
+    method isSampler
+    method isShader
+    method isSync
+    method isTexture
+    method isTransformFeedback
+    method isVertexArray
+    method lineWidth
+    method linkProgram
+    method pauseTransformFeedback
+    method pixelStorei
+    method polygonOffset
+    method readBuffer
+    method readPixels
+    method renderbufferStorage
+    method renderbufferStorageMultisample
+    method resumeTransformFeedback
+    method sampleCoverage
+    method samplerParameterf
+    method samplerParameteri
+    method scissor
+    method shaderSource
+    method stencilFunc
+    method stencilFuncSeparate
+    method stencilMask
+    method stencilMaskSeparate
+    method stencilOp
+    method stencilOpSeparate
+    method texImage2D
+    method texImage3D
+    method texParameterf
+    method texParameteri
+    method texStorage2D
+    method texStorage3D
+    method texSubImage2D
+    method texSubImage3D
+    method transformFeedbackVaryings
+    method uniform1f
+    method uniform1fv
+    method uniform1i
+    method uniform1iv
+    method uniform1ui
+    method uniform1uiv
+    method uniform2f
+    method uniform2fv
+    method uniform2i
+    method uniform2iv
+    method uniform2ui
+    method uniform2uiv
+    method uniform3f
+    method uniform3fv
+    method uniform3i
+    method uniform3iv
+    method uniform3ui
+    method uniform3uiv
+    method uniform4f
+    method uniform4fv
+    method uniform4i
+    method uniform4iv
+    method uniform4ui
+    method uniform4uiv
+    method uniformBlockBinding
+    method uniformMatrix2fv
+    method uniformMatrix2x3fv
+    method uniformMatrix2x4fv
+    method uniformMatrix3fv
+    method uniformMatrix3x2fv
+    method uniformMatrix3x4fv
+    method uniformMatrix4fv
+    method uniformMatrix4x2fv
+    method uniformMatrix4x3fv
+    method useProgram
+    method validateProgram
+    method vertexAttrib1f
+    method vertexAttrib1fv
+    method vertexAttrib2f
+    method vertexAttrib2fv
+    method vertexAttrib3f
+    method vertexAttrib3fv
+    method vertexAttrib4f
+    method vertexAttrib4fv
+    method vertexAttribDivisor
+    method vertexAttribI4i
+    method vertexAttribI4iv
+    method vertexAttribI4ui
+    method vertexAttribI4uiv
+    method vertexAttribIPointer
+    method vertexAttribPointer
+    method viewport
+    method waitSync
+interface WebGLActiveInfo
+    attribute @@toStringTag
+    getter name
+    getter size
+    getter type
+    method constructor
+interface WebGLBuffer
+    attribute @@toStringTag
+    method constructor
+interface WebGLContextEvent : Event
+    attribute @@toStringTag
+    getter statusMessage
+    method constructor
+interface WebGLFramebuffer
+    attribute @@toStringTag
+    method constructor
+interface WebGLProgram
+    attribute @@toStringTag
+    method constructor
+interface WebGLQuery
+    attribute @@toStringTag
+    method constructor
+interface WebGLRenderbuffer
+    attribute @@toStringTag
+    method constructor
+interface WebGLRenderingContext
+    attribute @@toStringTag
+    attribute ACTIVE_ATTRIBUTES
+    attribute ACTIVE_TEXTURE
+    attribute ACTIVE_UNIFORMS
+    attribute ALIASED_LINE_WIDTH_RANGE
+    attribute ALIASED_POINT_SIZE_RANGE
+    attribute ALPHA
+    attribute ALPHA_BITS
+    attribute ALWAYS
+    attribute ARRAY_BUFFER
+    attribute ARRAY_BUFFER_BINDING
+    attribute ATTACHED_SHADERS
+    attribute BACK
+    attribute BLEND
+    attribute BLEND_COLOR
+    attribute BLEND_DST_ALPHA
+    attribute BLEND_DST_RGB
+    attribute BLEND_EQUATION
+    attribute BLEND_EQUATION_ALPHA
+    attribute BLEND_EQUATION_RGB
+    attribute BLEND_SRC_ALPHA
+    attribute BLEND_SRC_RGB
+    attribute BLUE_BITS
+    attribute BOOL
+    attribute BOOL_VEC2
+    attribute BOOL_VEC3
+    attribute BOOL_VEC4
+    attribute BROWSER_DEFAULT_WEBGL
+    attribute BUFFER_SIZE
+    attribute BUFFER_USAGE
+    attribute BYTE
+    attribute CCW
+    attribute CLAMP_TO_EDGE
+    attribute COLOR_ATTACHMENT0
+    attribute COLOR_BUFFER_BIT
+    attribute COLOR_CLEAR_VALUE
+    attribute COLOR_WRITEMASK
+    attribute COMPILE_STATUS
+    attribute COMPRESSED_TEXTURE_FORMATS
+    attribute CONSTANT_ALPHA
+    attribute CONSTANT_COLOR
+    attribute CONTEXT_LOST_WEBGL
+    attribute CULL_FACE
+    attribute CULL_FACE_MODE
+    attribute CURRENT_PROGRAM
+    attribute CURRENT_VERTEX_ATTRIB
+    attribute CW
+    attribute DECR
+    attribute DECR_WRAP
+    attribute DELETE_STATUS
+    attribute DEPTH_ATTACHMENT
+    attribute DEPTH_BITS
+    attribute DEPTH_BUFFER_BIT
+    attribute DEPTH_CLEAR_VALUE
+    attribute DEPTH_COMPONENT
+    attribute DEPTH_COMPONENT16
+    attribute DEPTH_FUNC
+    attribute DEPTH_RANGE
+    attribute DEPTH_STENCIL
+    attribute DEPTH_STENCIL_ATTACHMENT
+    attribute DEPTH_TEST
+    attribute DEPTH_WRITEMASK
+    attribute DITHER
+    attribute DONT_CARE
+    attribute DST_ALPHA
+    attribute DST_COLOR
+    attribute DYNAMIC_DRAW
+    attribute ELEMENT_ARRAY_BUFFER
+    attribute ELEMENT_ARRAY_BUFFER_BINDING
+    attribute EQUAL
+    attribute FASTEST
+    attribute FLOAT
+    attribute FLOAT_MAT2
+    attribute FLOAT_MAT3
+    attribute FLOAT_MAT4
+    attribute FLOAT_VEC2
+    attribute FLOAT_VEC3
+    attribute FLOAT_VEC4
+    attribute FRAGMENT_SHADER
+    attribute FRAMEBUFFER
+    attribute FRAMEBUFFER_ATTACHMENT_OBJECT_NAME
+    attribute FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE
+    attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE
+    attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL
+    attribute FRAMEBUFFER_BINDING
+    attribute FRAMEBUFFER_COMPLETE
+    attribute FRAMEBUFFER_INCOMPLETE_ATTACHMENT
+    attribute FRAMEBUFFER_INCOMPLETE_DIMENSIONS
+    attribute FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
+    attribute FRAMEBUFFER_UNSUPPORTED
+    attribute FRONT
+    attribute FRONT_AND_BACK
+    attribute FRONT_FACE
+    attribute FUNC_ADD
+    attribute FUNC_REVERSE_SUBTRACT
+    attribute FUNC_SUBTRACT
+    attribute GENERATE_MIPMAP_HINT
+    attribute GEQUAL
+    attribute GREATER
+    attribute GREEN_BITS
+    attribute HIGH_FLOAT
+    attribute HIGH_INT
+    attribute IMPLEMENTATION_COLOR_READ_FORMAT
+    attribute IMPLEMENTATION_COLOR_READ_TYPE
+    attribute INCR
+    attribute INCR_WRAP
+    attribute INT
+    attribute INT_VEC2
+    attribute INT_VEC3
+    attribute INT_VEC4
+    attribute INVALID_ENUM
+    attribute INVALID_FRAMEBUFFER_OPERATION
+    attribute INVALID_OPERATION
+    attribute INVALID_VALUE
+    attribute INVERT
+    attribute KEEP
+    attribute LEQUAL
+    attribute LESS
+    attribute LINEAR
+    attribute LINEAR_MIPMAP_LINEAR
+    attribute LINEAR_MIPMAP_NEAREST
+    attribute LINES
+    attribute LINE_LOOP
+    attribute LINE_STRIP
+    attribute LINE_WIDTH
+    attribute LINK_STATUS
+    attribute LOW_FLOAT
+    attribute LOW_INT
+    attribute LUMINANCE
+    attribute LUMINANCE_ALPHA
+    attribute MAX_COMBINED_TEXTURE_IMAGE_UNITS
+    attribute MAX_CUBE_MAP_TEXTURE_SIZE
+    attribute MAX_FRAGMENT_UNIFORM_VECTORS
+    attribute MAX_RENDERBUFFER_SIZE
+    attribute MAX_TEXTURE_IMAGE_UNITS
+    attribute MAX_TEXTURE_SIZE
+    attribute MAX_VARYING_VECTORS
+    attribute MAX_VERTEX_ATTRIBS
+    attribute MAX_VERTEX_TEXTURE_IMAGE_UNITS
+    attribute MAX_VERTEX_UNIFORM_VECTORS
+    attribute MAX_VIEWPORT_DIMS
+    attribute MEDIUM_FLOAT
+    attribute MEDIUM_INT
+    attribute MIRRORED_REPEAT
+    attribute NEAREST
+    attribute NEAREST_MIPMAP_LINEAR
+    attribute NEAREST_MIPMAP_NEAREST
+    attribute NEVER
+    attribute NICEST
+    attribute NONE
+    attribute NOTEQUAL
+    attribute NO_ERROR
+    attribute ONE
+    attribute ONE_MINUS_CONSTANT_ALPHA
+    attribute ONE_MINUS_CONSTANT_COLOR
+    attribute ONE_MINUS_DST_ALPHA
+    attribute ONE_MINUS_DST_COLOR
+    attribute ONE_MINUS_SRC_ALPHA
+    attribute ONE_MINUS_SRC_COLOR
+    attribute OUT_OF_MEMORY
+    attribute PACK_ALIGNMENT
+    attribute POINTS
+    attribute POLYGON_OFFSET_FACTOR
+    attribute POLYGON_OFFSET_FILL
+    attribute POLYGON_OFFSET_UNITS
+    attribute RED_BITS
+    attribute RENDERBUFFER
+    attribute RENDERBUFFER_ALPHA_SIZE
+    attribute RENDERBUFFER_BINDING
+    attribute RENDERBUFFER_BLUE_SIZE
+    attribute RENDERBUFFER_DEPTH_SIZE
+    attribute RENDERBUFFER_GREEN_SIZE
+    attribute RENDERBUFFER_HEIGHT
+    attribute RENDERBUFFER_INTERNAL_FORMAT
+    attribute RENDERBUFFER_RED_SIZE
+    attribute RENDERBUFFER_STENCIL_SIZE
+    attribute RENDERBUFFER_WIDTH
+    attribute RENDERER
+    attribute REPEAT
+    attribute REPLACE
+    attribute RGB
+    attribute RGB565
+    attribute RGB5_A1
+    attribute RGBA
+    attribute RGBA4
+    attribute SAMPLER_2D
+    attribute SAMPLER_CUBE
+    attribute SAMPLES
+    attribute SAMPLE_ALPHA_TO_COVERAGE
+    attribute SAMPLE_BUFFERS
+    attribute SAMPLE_COVERAGE
+    attribute SAMPLE_COVERAGE_INVERT
+    attribute SAMPLE_COVERAGE_VALUE
+    attribute SCISSOR_BOX
+    attribute SCISSOR_TEST
+    attribute SHADER_TYPE
+    attribute SHADING_LANGUAGE_VERSION
+    attribute SHORT
+    attribute SRC_ALPHA
+    attribute SRC_ALPHA_SATURATE
+    attribute SRC_COLOR
+    attribute STATIC_DRAW
+    attribute STENCIL_ATTACHMENT
+    attribute STENCIL_BACK_FAIL
+    attribute STENCIL_BACK_FUNC
+    attribute STENCIL_BACK_PASS_DEPTH_FAIL
+    attribute STENCIL_BACK_PASS_DEPTH_PASS
+    attribute STENCIL_BACK_REF
+    attribute STENCIL_BACK_VALUE_MASK
+    attribute STENCIL_BACK_WRITEMASK
+    attribute STENCIL_BITS
+    attribute STENCIL_BUFFER_BIT
+    attribute STENCIL_CLEAR_VALUE
+    attribute STENCIL_FAIL
+    attribute STENCIL_FUNC
+    attribute STENCIL_INDEX
+    attribute STENCIL_INDEX8
+    attribute STENCIL_PASS_DEPTH_FAIL
+    attribute STENCIL_PASS_DEPTH_PASS
+    attribute STENCIL_REF
+    attribute STENCIL_TEST
+    attribute STENCIL_VALUE_MASK
+    attribute STENCIL_WRITEMASK
+    attribute STREAM_DRAW
+    attribute SUBPIXEL_BITS
+    attribute TEXTURE
+    attribute TEXTURE0
+    attribute TEXTURE1
+    attribute TEXTURE10
+    attribute TEXTURE11
+    attribute TEXTURE12
+    attribute TEXTURE13
+    attribute TEXTURE14
+    attribute TEXTURE15
+    attribute TEXTURE16
+    attribute TEXTURE17
+    attribute TEXTURE18
+    attribute TEXTURE19
+    attribute TEXTURE2
+    attribute TEXTURE20
+    attribute TEXTURE21
+    attribute TEXTURE22
+    attribute TEXTURE23
+    attribute TEXTURE24
+    attribute TEXTURE25
+    attribute TEXTURE26
+    attribute TEXTURE27
+    attribute TEXTURE28
+    attribute TEXTURE29
+    attribute TEXTURE3
+    attribute TEXTURE30
+    attribute TEXTURE31
+    attribute TEXTURE4
+    attribute TEXTURE5
+    attribute TEXTURE6
+    attribute TEXTURE7
+    attribute TEXTURE8
+    attribute TEXTURE9
+    attribute TEXTURE_2D
+    attribute TEXTURE_BINDING_2D
+    attribute TEXTURE_BINDING_CUBE_MAP
+    attribute TEXTURE_CUBE_MAP
+    attribute TEXTURE_CUBE_MAP_NEGATIVE_X
+    attribute TEXTURE_CUBE_MAP_NEGATIVE_Y
+    attribute TEXTURE_CUBE_MAP_NEGATIVE_Z
+    attribute TEXTURE_CUBE_MAP_POSITIVE_X
+    attribute TEXTURE_CUBE_MAP_POSITIVE_Y
+    attribute TEXTURE_CUBE_MAP_POSITIVE_Z
+    attribute TEXTURE_MAG_FILTER
+    attribute TEXTURE_MIN_FILTER
+    attribute TEXTURE_WRAP_S
+    attribute TEXTURE_WRAP_T
+    attribute TRIANGLES
+    attribute TRIANGLE_FAN
+    attribute TRIANGLE_STRIP
+    attribute UNPACK_ALIGNMENT
+    attribute UNPACK_COLORSPACE_CONVERSION_WEBGL
+    attribute UNPACK_FLIP_Y_WEBGL
+    attribute UNPACK_PREMULTIPLY_ALPHA_WEBGL
+    attribute UNSIGNED_BYTE
+    attribute UNSIGNED_INT
+    attribute UNSIGNED_SHORT
+    attribute UNSIGNED_SHORT_4_4_4_4
+    attribute UNSIGNED_SHORT_5_5_5_1
+    attribute UNSIGNED_SHORT_5_6_5
+    attribute VALIDATE_STATUS
+    attribute VENDOR
+    attribute VERSION
+    attribute VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+    attribute VERTEX_ATTRIB_ARRAY_ENABLED
+    attribute VERTEX_ATTRIB_ARRAY_NORMALIZED
+    attribute VERTEX_ATTRIB_ARRAY_POINTER
+    attribute VERTEX_ATTRIB_ARRAY_SIZE
+    attribute VERTEX_ATTRIB_ARRAY_STRIDE
+    attribute VERTEX_ATTRIB_ARRAY_TYPE
+    attribute VERTEX_SHADER
+    attribute VIEWPORT
+    attribute ZERO
+    getter canvas
+    getter drawingBufferHeight
+    getter drawingBufferWidth
+    method activeTexture
+    method attachShader
+    method bindAttribLocation
+    method bindBuffer
+    method bindFramebuffer
+    method bindRenderbuffer
+    method bindTexture
+    method blendColor
+    method blendEquation
+    method blendEquationSeparate
+    method blendFunc
+    method blendFuncSeparate
+    method bufferData
+    method bufferSubData
+    method checkFramebufferStatus
+    method clear
+    method clearColor
+    method clearDepth
+    method clearStencil
+    method colorMask
+    method commit
+    method compileShader
+    method compressedTexImage2D
+    method compressedTexSubImage2D
+    method constructor
+    method copyTexImage2D
+    method copyTexSubImage2D
+    method createBuffer
+    method createFramebuffer
+    method createProgram
+    method createRenderbuffer
+    method createShader
+    method createTexture
+    method cullFace
+    method deleteBuffer
+    method deleteFramebuffer
+    method deleteProgram
+    method deleteRenderbuffer
+    method deleteShader
+    method deleteTexture
+    method depthFunc
+    method depthMask
+    method depthRange
+    method detachShader
+    method disable
+    method disableVertexAttribArray
+    method drawArrays
+    method drawElements
+    method enable
+    method enableVertexAttribArray
+    method finish
+    method flush
+    method framebufferRenderbuffer
+    method framebufferTexture2D
+    method frontFace
+    method generateMipmap
+    method getActiveAttrib
+    method getActiveUniform
+    method getAttachedShaders
+    method getAttribLocation
+    method getBufferParameter
+    method getContextAttributes
+    method getError
+    method getExtension
+    method getFramebufferAttachmentParameter
+    method getParameter
+    method getProgramInfoLog
+    method getProgramParameter
+    method getRenderbufferParameter
+    method getShaderInfoLog
+    method getShaderParameter
+    method getShaderPrecisionFormat
+    method getShaderSource
+    method getSupportedExtensions
+    method getTexParameter
+    method getUniform
+    method getUniformLocation
+    method getVertexAttrib
+    method getVertexAttribOffset
+    method hint
+    method isBuffer
+    method isContextLost
+    method isEnabled
+    method isFramebuffer
+    method isProgram
+    method isRenderbuffer
+    method isShader
+    method isTexture
+    method lineWidth
+    method linkProgram
+    method pixelStorei
+    method polygonOffset
+    method readPixels
+    method renderbufferStorage
+    method sampleCoverage
+    method scissor
+    method shaderSource
+    method stencilFunc
+    method stencilFuncSeparate
+    method stencilMask
+    method stencilMaskSeparate
+    method stencilOp
+    method stencilOpSeparate
+    method texImage2D
+    method texParameterf
+    method texParameteri
+    method texSubImage2D
+    method uniform1f
+    method uniform1fv
+    method uniform1i
+    method uniform1iv
+    method uniform2f
+    method uniform2fv
+    method uniform2i
+    method uniform2iv
+    method uniform3f
+    method uniform3fv
+    method uniform3i
+    method uniform3iv
+    method uniform4f
+    method uniform4fv
+    method uniform4i
+    method uniform4iv
+    method uniformMatrix2fv
+    method uniformMatrix3fv
+    method uniformMatrix4fv
+    method useProgram
+    method validateProgram
+    method vertexAttrib1f
+    method vertexAttrib1fv
+    method vertexAttrib2f
+    method vertexAttrib2fv
+    method vertexAttrib3f
+    method vertexAttrib3fv
+    method vertexAttrib4f
+    method vertexAttrib4fv
+    method vertexAttribPointer
+    method viewport
+interface WebGLSampler
+    attribute @@toStringTag
+    method constructor
+interface WebGLShader
+    attribute @@toStringTag
+    method constructor
+interface WebGLShaderPrecisionFormat
+    attribute @@toStringTag
+    getter precision
+    getter rangeMax
+    getter rangeMin
+    method constructor
+interface WebGLSync
+    attribute @@toStringTag
+    method constructor
+interface WebGLTexture
+    attribute @@toStringTag
+    getter lastUploadedVideoHeight
+    getter lastUploadedVideoTimestamp
+    getter lastUploadedVideoWidth
+    method constructor
+interface WebGLTransformFeedback
+    attribute @@toStringTag
+    method constructor
+interface WebGLUniformLocation
+    attribute @@toStringTag
+    method constructor
+interface WebGLVertexArrayObject
+    attribute @@toStringTag
+    method constructor
+interface WebKitAnimationEvent : Event
+    attribute @@toStringTag
+    getter animationName
+    getter elapsedTime
+    method constructor
+interface WebKitCSSMatrix
+    attribute @@toStringTag
+    getter a
+    getter b
+    getter c
+    getter d
+    getter e
+    getter f
+    getter m11
+    getter m12
+    getter m13
+    getter m14
+    getter m21
+    getter m22
+    getter m23
+    getter m24
+    getter m31
+    getter m32
+    getter m33
+    getter m34
+    getter m41
+    getter m42
+    getter m43
+    getter m44
+    method constructor
+    method inverse
+    method multiply
+    method rotate
+    method rotateAxisAngle
+    method scale
+    method setMatrixValue
+    method skewX
+    method skewY
+    method toString
+    method translate
+    setter a
+    setter b
+    setter c
+    setter d
+    setter e
+    setter f
+    setter m11
+    setter m12
+    setter m13
+    setter m14
+    setter m21
+    setter m22
+    setter m23
+    setter m24
+    setter m31
+    setter m32
+    setter m33
+    setter m34
+    setter m41
+    setter m42
+    setter m43
+    setter m44
+interface WebKitMutationObserver
+    attribute @@toStringTag
+    method constructor
+    method disconnect
+    method observe
+    method takeRecords
+interface WebKitTransitionEvent : Event
+    attribute @@toStringTag
+    getter elapsedTime
+    getter propertyName
+    getter pseudoElement
+    method constructor
+interface WebSocket : EventTarget
+    attribute @@toStringTag
+    attribute CLOSED
+    attribute CLOSING
+    attribute CONNECTING
+    attribute OPEN
+    getter binaryType
+    getter bufferedAmount
+    getter extensions
+    getter onclose
+    getter onerror
+    getter onmessage
+    getter onopen
+    getter protocol
+    getter readyState
+    getter url
+    method close
+    method constructor
+    method send
+    setter binaryType
+    setter onclose
+    setter onerror
+    setter onmessage
+    setter onopen
+interface WheelEvent : MouseEvent
+    attribute @@toStringTag
+    attribute DOM_DELTA_LINE
+    attribute DOM_DELTA_PAGE
+    attribute DOM_DELTA_PIXEL
+    getter deltaMode
+    getter deltaX
+    getter deltaY
+    getter deltaZ
+    getter wheelDelta
+    getter wheelDeltaX
+    getter wheelDeltaY
+    method constructor
+interface Window : EventTarget
+    attribute @@toStringTag
+    attribute PERSISTENT
+    attribute TEMPORARY
+    method constructor
+interface Worker : EventTarget
+    attribute @@toStringTag
+    getter onerror
+    getter onmessage
+    method constructor
+    method postMessage
+    method terminate
+    setter onerror
+    setter onmessage
+interface Worklet
+    attribute @@toStringTag
+    method constructor
+    method import
+interface WritableStream
+    getter locked
+    method abort
+    method constructor
+    method getWriter
+interface XMLDocument : Document
+    attribute @@toStringTag
+    method constructor
+interface XMLHttpRequest : XMLHttpRequestEventTarget
+    attribute @@toStringTag
+    attribute DONE
+    attribute HEADERS_RECEIVED
+    attribute LOADING
+    attribute OPENED
+    attribute UNSENT
+    getter onreadystatechange
+    getter readyState
+    getter response
+    getter responseText
+    getter responseType
+    getter responseURL
+    getter responseXML
+    getter status
+    getter statusText
+    getter timeout
+    getter upload
+    getter withCredentials
+    method abort
+    method constructor
+    method getAllResponseHeaders
+    method getResponseHeader
+    method open
+    method overrideMimeType
+    method send
+    method setRequestHeader
+    setter onreadystatechange
+    setter responseType
+    setter timeout
+    setter withCredentials
+interface XMLHttpRequestEventTarget : EventTarget
+    attribute @@toStringTag
+    getter onabort
+    getter onerror
+    getter onload
+    getter onloadend
+    getter onloadstart
+    getter onprogress
+    getter ontimeout
+    method constructor
+    setter onabort
+    setter onerror
+    setter onload
+    setter onloadend
+    setter onloadstart
+    setter onprogress
+    setter ontimeout
+interface XMLHttpRequestUpload : XMLHttpRequestEventTarget
+    attribute @@toStringTag
+    method constructor
+interface XMLSerializer
+    attribute @@toStringTag
+    method constructor
+    method serializeToString
+interface XPathEvaluator
+    attribute @@toStringTag
+    method constructor
+    method createExpression
+    method createNSResolver
+    method evaluate
+interface XPathExpression
+    attribute @@toStringTag
+    method constructor
+    method evaluate
+interface XPathResult
+    attribute @@toStringTag
+    attribute ANY_TYPE
+    attribute ANY_UNORDERED_NODE_TYPE
+    attribute BOOLEAN_TYPE
+    attribute FIRST_ORDERED_NODE_TYPE
+    attribute NUMBER_TYPE
+    attribute ORDERED_NODE_ITERATOR_TYPE
+    attribute ORDERED_NODE_SNAPSHOT_TYPE
+    attribute STRING_TYPE
+    attribute UNORDERED_NODE_ITERATOR_TYPE
+    attribute UNORDERED_NODE_SNAPSHOT_TYPE
+    getter booleanValue
+    getter invalidIteratorState
+    getter numberValue
+    getter resultType
+    getter singleNodeValue
+    getter snapshotLength
+    getter stringValue
+    method constructor
+    method iterateNext
+    method snapshotItem
+interface XSLTProcessor
+    attribute @@toStringTag
+    method clearParameters
+    method constructor
+    method getParameter
+    method importStylesheet
+    method removeParameter
+    method reset
+    method setParameter
+    method transformToDocument
+    method transformToFragment
+interface webkitMediaStream : EventTarget
+    attribute @@toStringTag
+    getter active
+    getter id
+    getter onactive
+    getter onaddtrack
+    getter oninactive
+    getter onremovetrack
+    method addTrack
+    method clone
+    method constructor
+    method getAudioTracks
+    method getTrackById
+    method getTracks
+    method getVideoTracks
+    method removeTrack
+    setter onactive
+    setter onaddtrack
+    setter oninactive
+    setter onremovetrack
+interface webkitRTCPeerConnection : EventTarget
+    static method generateCertificate
+    attribute @@toStringTag
+    getter iceConnectionState
+    getter iceGatheringState
+    getter localDescription
+    getter onaddstream
+    getter ondatachannel
+    getter onicecandidate
+    getter oniceconnectionstatechange
+    getter onicegatheringstatechange
+    getter onnegotiationneeded
+    getter onremovestream
+    getter onsignalingstatechange
+    getter remoteDescription
+    getter signalingState
+    method addIceCandidate
+    method addStream
+    method close
+    method constructor
+    method createAnswer
+    method createDTMFSender
+    method createDataChannel
+    method createOffer
+    method getLocalStreams
+    method getReceivers
+    method getRemoteStreams
+    method getStats
+    method getStreamById
+    method removeStream
+    method setConfiguration
+    method setLocalDescription
+    method setRemoteDescription
+    setter onaddstream
+    setter ondatachannel
+    setter onicecandidate
+    setter oniceconnectionstatechange
+    setter onicegatheringstatechange
+    setter onnegotiationneeded
+    setter onremovestream
+    setter onsignalingstatechange
+interface webkitSpeechGrammar
+    attribute @@toStringTag
+    getter src
+    getter weight
+    method constructor
+    setter src
+    setter weight
+interface webkitSpeechGrammarList
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method addFromString
+    method addFromUri
+    method constructor
+    method item
+interface webkitSpeechRecognition : EventTarget
+    attribute @@toStringTag
+    getter audioTrack
+    getter continuous
+    getter grammars
+    getter interimResults
+    getter lang
+    getter maxAlternatives
+    getter onaudioend
+    getter onaudiostart
+    getter onend
+    getter onerror
+    getter onnomatch
+    getter onresult
+    getter onsoundend
+    getter onsoundstart
+    getter onspeechend
+    getter onspeechstart
+    getter onstart
+    method abort
+    method constructor
+    method start
+    method stop
+    setter audioTrack
+    setter continuous
+    setter grammars
+    setter interimResults
+    setter lang
+    setter maxAlternatives
+    setter onaudioend
+    setter onaudiostart
+    setter onend
+    setter onerror
+    setter onnomatch
+    setter onresult
+    setter onsoundend
+    setter onsoundstart
+    setter onspeechend
+    setter onspeechstart
+    setter onstart
+interface webkitSpeechRecognitionError : Event
+    attribute @@toStringTag
+    getter error
+    getter message
+    method constructor
+interface webkitSpeechRecognitionEvent : Event
+    attribute @@toStringTag
+    getter emma
+    getter interpretation
+    getter resultIndex
+    getter results
+    method constructor
+interface webkitURL
+    static method createObjectURL
+    static method revokeObjectURL
+    attribute @@toStringTag
+    getter hash
+    getter host
+    getter hostname
+    getter href
+    getter origin
+    getter password
+    getter pathname
+    getter port
+    getter protocol
+    getter search
+    getter searchParams
+    getter username
+    method constructor
+    method toString
+    setter hash
+    setter host
+    setter hostname
+    setter href
+    setter password
+    setter pathname
+    setter port
+    setter protocol
+    setter search
+    setter username
+[GLOBAL OBJECT]
+    attribute GCController
+    attribute accessibilityController
+    attribute chrome
+    attribute closed
+    attribute console
+    attribute eventSender
+    attribute frames
+    attribute gamepadController
+    attribute gin
+    attribute internals
+    attribute layoutTestController
+    attribute length
+    attribute location
+    attribute opener
+    attribute parent
+    attribute propertyNamesInGlobal
+    attribute self
+    attribute testRunner
+    attribute textInputController
+    attribute top
+    attribute window
+    getter animationWorklet
+    getter applicationCache
+    getter audioWorklet
+    getter caches
+    getter clientInformation
+    getter crypto
+    getter customElements
+    getter defaultStatus
+    getter defaultstatus
+    getter devicePixelRatio
+    getter document
+    getter event
+    getter external
+    getter frameElement
+    getter history
+    getter indexedDB
+    getter innerHeight
+    getter innerWidth
+    getter isSecureContext
+    getter localStorage
+    getter locationbar
+    getter menubar
+    getter name
+    getter navigator
+    getter offscreenBuffering
+    getter onabort
+    getter onanimationend
+    getter onanimationiteration
+    getter onanimationstart
+    getter onauxclick
+    getter onbeforeunload
+    getter onblur
+    getter oncancel
+    getter oncanplay
+    getter oncanplaythrough
+    getter onchange
+    getter onclick
+    getter onclose
+    getter oncontextmenu
+    getter oncuechange
+    getter ondblclick
+    getter ondevicelight
+    getter ondevicemotion
+    getter ondeviceorientation
+    getter ondeviceorientationabsolute
+    getter ondrag
+    getter ondragend
+    getter ondragenter
+    getter ondragleave
+    getter ondragover
+    getter ondragstart
+    getter ondrop
+    getter ondurationchange
+    getter onemptied
+    getter onended
+    getter onerror
+    getter onfocus
+    getter ongotpointercapture
+    getter onhashchange
+    getter oninput
+    getter oninvalid
+    getter onkeydown
+    getter onkeypress
+    getter onkeyup
+    getter onlanguagechange
+    getter onload
+    getter onloadeddata
+    getter onloadedmetadata
+    getter onloadstart
+    getter onlostpointercapture
+    getter onmessage
+    getter onmousedown
+    getter onmouseenter
+    getter onmouseleave
+    getter onmousemove
+    getter onmouseout
+    getter onmouseover
+    getter onmouseup
+    getter onmousewheel
+    getter onoffline
+    getter ononline
+    getter onpagehide
+    getter onpageshow
+    getter onpause
+    getter onplay
+    getter onplaying
+    getter onpointercancel
+    getter onpointerdown
+    getter onpointerenter
+    getter onpointerleave
+    getter onpointermove
+    getter onpointerout
+    getter onpointerover
+    getter onpointerup
+    getter onpopstate
+    getter onprogress
+    getter onratechange
+    getter onrejectionhandled
+    getter onreset
+    getter onresize
+    getter onscroll
+    getter onsearch
+    getter onseeked
+    getter onseeking
+    getter onselect
+    getter onshow
+    getter onstalled
+    getter onstorage
+    getter onsubmit
+    getter onsuspend
+    getter ontimeupdate
+    getter ontoggle
+    getter ontouchcancel
+    getter ontouchend
+    getter ontouchmove
+    getter ontouchstart
+    getter ontransitionend
+    getter onunhandledrejection
+    getter onunload
+    getter onvolumechange
+    getter onwaiting
+    getter onwebkitanimationend
+    getter onwebkitanimationiteration
+    getter onwebkitanimationstart
+    getter onwebkittransitionend
+    getter onwheel
+    getter origin
+    getter outerHeight
+    getter outerWidth
+    getter pageXOffset
+    getter pageYOffset
+    getter paintWorklet
+    getter performance
+    getter personalbar
+    getter screen
+    getter screenLeft
+    getter screenTop
+    getter screenX
+    getter screenY
+    getter scrollX
+    getter scrollY
+    getter scrollbars
+    getter sessionStorage
+    getter speechSynthesis
+    getter status
+    getter statusbar
+    getter styleMedia
+    getter toolbar
+    getter visualViewport
+    getter webkitStorageInfo
+    method alert
+    method atob
+    method blur
+    method btoa
+    method cancelAnimationFrame
+    method cancelIdleCallback
+    method captureEvents
+    method clearInterval
+    method clearTimeout
+    method close
+    method confirm
+    method createImageBitmap
+    method fetch
+    method find
+    method focus
+    method gc
+    method getComputedStyle
+    method getComputedStyleMap
+    method getMatchedCSSRules
+    method getSelection
+    method matchMedia
+    method moveBy
+    method moveTo
+    method open
+    method openDatabase
+    method postMessage
+    method print
+    method prompt
+    method releaseEvents
+    method requestAnimationFrame
+    method requestIdleCallback
+    method resizeBy
+    method resizeTo
+    method scroll
+    method scrollBy
+    method scrollTo
+    method setInterval
+    method setTimeout
+    method stop
+    method webkitCancelAnimationFrame
+    method webkitRequestAnimationFrame
+    method webkitRequestFileSystem
+    method webkitResolveLocalFileSystemURL
+    setter clientInformation
+    setter defaultStatus
+    setter defaultstatus
+    setter devicePixelRatio
+    setter event
+    setter external
+    setter innerHeight
+    setter innerWidth
+    setter locationbar
+    setter menubar
+    setter name
+    setter offscreenBuffering
+    setter onabort
+    setter onanimationend
+    setter onanimationiteration
+    setter onanimationstart
+    setter onauxclick
+    setter onbeforeunload
+    setter onblur
+    setter oncancel
+    setter oncanplay
+    setter oncanplaythrough
+    setter onchange
+    setter onclick
+    setter onclose
+    setter oncontextmenu
+    setter oncuechange
+    setter ondblclick
+    setter ondevicelight
+    setter ondevicemotion
+    setter ondeviceorientation
+    setter ondeviceorientationabsolute
+    setter ondrag
+    setter ondragend
+    setter ondragenter
+    setter ondragleave
+    setter ondragover
+    setter ondragstart
+    setter ondrop
+    setter ondurationchange
+    setter onemptied
+    setter onended
+    setter onerror
+    setter onfocus
+    setter ongotpointercapture
+    setter onhashchange
+    setter oninput
+    setter oninvalid
+    setter onkeydown
+    setter onkeypress
+    setter onkeyup
+    setter onlanguagechange
+    setter onload
+    setter onloadeddata
+    setter onloadedmetadata
+    setter onloadstart
+    setter onlostpointercapture
+    setter onmessage
+    setter onmousedown
+    setter onmouseenter
+    setter onmouseleave
+    setter onmousemove
+    setter onmouseout
+    setter onmouseover
+    setter onmouseup
+    setter onmousewheel
+    setter onoffline
+    setter ononline
+    setter onpagehide
+    setter onpageshow
+    setter onpause
+    setter onplay
+    setter onplaying
+    setter onpointercancel
+    setter onpointerdown
+    setter onpointerenter
+    setter onpointerleave
+    setter onpointermove
+    setter onpointerout
+    setter onpointerover
+    setter onpointerup
+    setter onpopstate
+    setter onprogress
+    setter onratechange
+    setter onrejectionhandled
+    setter onreset
+    setter onresize
+    setter onscroll
+    setter onsearch
+    setter onseeked
+    setter onseeking
+    setter onselect
+    setter onshow
+    setter onstalled
+    setter onstorage
+    setter onsubmit
+    setter onsuspend
+    setter ontimeupdate
+    setter ontoggle
+    setter ontouchcancel
+    setter ontouchend
+    setter ontouchmove
+    setter ontouchstart
+    setter ontransitionend
+    setter onunhandledrejection
+    setter onunload
+    setter onvolumechange
+    setter onwaiting
+    setter onwebkitanimationend
+    setter onwebkitanimationiteration
+    setter onwebkitanimationstart
+    setter onwebkittransitionend
+    setter onwheel
+    setter origin
+    setter outerHeight
+    setter outerWidth
+    setter pageXOffset
+    setter pageYOffset
+    setter performance
+    setter personalbar
+    setter screen
+    setter screenLeft
+    setter screenTop
+    setter screenX
+    setter screenY
+    setter scrollX
+    setter scrollY
+    setter scrollbars
+    setter status
+    setter statusbar
+    setter toolbar
+    setter visualViewport
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/webexposed/global-interface-listing-shared-worker-expected.txt b/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/webexposed/global-interface-listing-shared-worker-expected.txt
new file mode 100644
index 0000000..c661271f1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-disabled/webexposed/global-interface-listing-shared-worker-expected.txt
@@ -0,0 +1,2336 @@
+This test documents all interface attributes and methods on SharedWorkerGlobalScope.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Starting worker: resources/global-interface-listing.js
+[Worker] [INTERFACES]
+[Worker] interface BackgroundFetchFetch
+[Worker]     attribute @@toStringTag
+[Worker]     getter request
+[Worker]     method constructor
+[Worker] interface BackgroundFetchManager
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method fetch
+[Worker]     method get
+[Worker]     method getTags
+[Worker] interface BackgroundFetchRegistration
+[Worker]     attribute @@toStringTag
+[Worker]     getter icons
+[Worker]     getter tag
+[Worker]     getter title
+[Worker]     getter totalDownloadSize
+[Worker]     method abort
+[Worker]     method constructor
+[Worker] interface BarcodeDetector
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method detect
+[Worker] interface Blob
+[Worker]     attribute @@toStringTag
+[Worker]     getter isClosed
+[Worker]     getter size
+[Worker]     getter type
+[Worker]     method close
+[Worker]     method constructor
+[Worker]     method slice
+[Worker] interface BroadcastChannel : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     getter name
+[Worker]     getter onmessage
+[Worker]     method close
+[Worker]     method constructor
+[Worker]     method postMessage
+[Worker]     setter onmessage
+[Worker] interface BudgetService
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method getBudget
+[Worker]     method getCost
+[Worker]     method reserve
+[Worker] interface BudgetState
+[Worker]     attribute @@toStringTag
+[Worker]     getter budgetAt
+[Worker]     getter time
+[Worker]     method constructor
+[Worker] interface ByteLengthQueuingStrategy
+[Worker]     method constructor
+[Worker]     method size
+[Worker] interface Cache
+[Worker]     attribute @@toStringTag
+[Worker]     method add
+[Worker]     method addAll
+[Worker]     method constructor
+[Worker]     method delete
+[Worker]     method keys
+[Worker]     method match
+[Worker]     method matchAll
+[Worker]     method put
+[Worker] interface CacheStorage
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method delete
+[Worker]     method has
+[Worker]     method keys
+[Worker]     method match
+[Worker]     method open
+[Worker] interface CanvasGradient
+[Worker]     attribute @@toStringTag
+[Worker]     method addColorStop
+[Worker]     method constructor
+[Worker] interface CanvasPattern
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker] interface CloseEvent : Event
+[Worker]     attribute @@toStringTag
+[Worker]     getter code
+[Worker]     getter reason
+[Worker]     getter wasClean
+[Worker]     method constructor
+[Worker] interface CountQueuingStrategy
+[Worker]     method constructor
+[Worker]     method size
+[Worker] interface Crypto
+[Worker]     attribute @@toStringTag
+[Worker]     getter subtle
+[Worker]     method constructor
+[Worker]     method getRandomValues
+[Worker] interface CryptoKey
+[Worker]     attribute @@toStringTag
+[Worker]     getter algorithm
+[Worker]     getter extractable
+[Worker]     getter type
+[Worker]     getter usages
+[Worker]     method constructor
+[Worker] interface CustomEvent : Event
+[Worker]     attribute @@toStringTag
+[Worker]     getter detail
+[Worker]     method constructor
+[Worker]     method initCustomEvent
+[Worker] interface DOMException
+[Worker]     attribute @@toStringTag
+[Worker]     attribute ABORT_ERR
+[Worker]     attribute DATA_CLONE_ERR
+[Worker]     attribute DOMSTRING_SIZE_ERR
+[Worker]     attribute HIERARCHY_REQUEST_ERR
+[Worker]     attribute INDEX_SIZE_ERR
+[Worker]     attribute INUSE_ATTRIBUTE_ERR
+[Worker]     attribute INVALID_ACCESS_ERR
+[Worker]     attribute INVALID_CHARACTER_ERR
+[Worker]     attribute INVALID_MODIFICATION_ERR
+[Worker]     attribute INVALID_NODE_TYPE_ERR
+[Worker]     attribute INVALID_STATE_ERR
+[Worker]     attribute NAMESPACE_ERR
+[Worker]     attribute NETWORK_ERR
+[Worker]     attribute NOT_FOUND_ERR
+[Worker]     attribute NOT_SUPPORTED_ERR
+[Worker]     attribute NO_DATA_ALLOWED_ERR
+[Worker]     attribute NO_MODIFICATION_ALLOWED_ERR
+[Worker]     attribute QUOTA_EXCEEDED_ERR
+[Worker]     attribute SECURITY_ERR
+[Worker]     attribute SYNTAX_ERR
+[Worker]     attribute TIMEOUT_ERR
+[Worker]     attribute TYPE_MISMATCH_ERR
+[Worker]     attribute URL_MISMATCH_ERR
+[Worker]     attribute VALIDATION_ERR
+[Worker]     attribute WRONG_DOCUMENT_ERR
+[Worker]     getter code
+[Worker]     getter message
+[Worker]     getter name
+[Worker]     method constructor
+[Worker]     method toString
+[Worker] interface DOMMatrix : DOMMatrixReadOnly
+[Worker]     attribute @@toStringTag
+[Worker]     getter a
+[Worker]     getter b
+[Worker]     getter c
+[Worker]     getter d
+[Worker]     getter e
+[Worker]     getter f
+[Worker]     getter m11
+[Worker]     getter m12
+[Worker]     getter m13
+[Worker]     getter m14
+[Worker]     getter m21
+[Worker]     getter m22
+[Worker]     getter m23
+[Worker]     getter m24
+[Worker]     getter m31
+[Worker]     getter m32
+[Worker]     getter m33
+[Worker]     getter m34
+[Worker]     getter m41
+[Worker]     getter m42
+[Worker]     getter m43
+[Worker]     getter m44
+[Worker]     method constructor
+[Worker]     method invertSelf
+[Worker]     method multiplySelf
+[Worker]     method preMultiplySelf
+[Worker]     method rotateAxisAngleSelf
+[Worker]     method rotateFromVectorSelf
+[Worker]     method rotateSelf
+[Worker]     method scale3dSelf
+[Worker]     method scaleSelf
+[Worker]     method setMatrixValue
+[Worker]     method skewXSelf
+[Worker]     method skewYSelf
+[Worker]     method translateSelf
+[Worker]     setter a
+[Worker]     setter b
+[Worker]     setter c
+[Worker]     setter d
+[Worker]     setter e
+[Worker]     setter f
+[Worker]     setter m11
+[Worker]     setter m12
+[Worker]     setter m13
+[Worker]     setter m14
+[Worker]     setter m21
+[Worker]     setter m22
+[Worker]     setter m23
+[Worker]     setter m24
+[Worker]     setter m31
+[Worker]     setter m32
+[Worker]     setter m33
+[Worker]     setter m34
+[Worker]     setter m41
+[Worker]     setter m42
+[Worker]     setter m43
+[Worker]     setter m44
+[Worker] interface DOMMatrixReadOnly
+[Worker]     static method fromFloat32Array
+[Worker]     static method fromFloat64Array
+[Worker]     static method fromMatrix
+[Worker]     attribute @@toStringTag
+[Worker]     getter a
+[Worker]     getter b
+[Worker]     getter c
+[Worker]     getter d
+[Worker]     getter e
+[Worker]     getter f
+[Worker]     getter is2D
+[Worker]     getter isIdentity
+[Worker]     getter m11
+[Worker]     getter m12
+[Worker]     getter m13
+[Worker]     getter m14
+[Worker]     getter m21
+[Worker]     getter m22
+[Worker]     getter m23
+[Worker]     getter m24
+[Worker]     getter m31
+[Worker]     getter m32
+[Worker]     getter m33
+[Worker]     getter m34
+[Worker]     getter m41
+[Worker]     getter m42
+[Worker]     getter m43
+[Worker]     getter m44
+[Worker]     method constructor
+[Worker]     method flipX
+[Worker]     method flipY
+[Worker]     method inverse
+[Worker]     method multiply
+[Worker]     method rotate
+[Worker]     method rotateAxisAngle
+[Worker]     method rotateFromVector
+[Worker]     method scale
+[Worker]     method scale3d
+[Worker]     method skewX
+[Worker]     method skewY
+[Worker]     method toFloat32Array
+[Worker]     method toFloat64Array
+[Worker]     method toJSON
+[Worker]     method toString
+[Worker]     method transformPoint
+[Worker]     method translate
+[Worker] interface DOMPoint : DOMPointReadOnly
+[Worker]     attribute @@toStringTag
+[Worker]     getter w
+[Worker]     getter x
+[Worker]     getter y
+[Worker]     getter z
+[Worker]     method constructor
+[Worker]     setter w
+[Worker]     setter x
+[Worker]     setter y
+[Worker]     setter z
+[Worker] interface DOMPointReadOnly
+[Worker]     static method fromPoint
+[Worker]     attribute @@toStringTag
+[Worker]     getter w
+[Worker]     getter x
+[Worker]     getter y
+[Worker]     getter z
+[Worker]     method constructor
+[Worker]     method matrixTransform
+[Worker]     method toJSON
+[Worker] interface DOMQuad
+[Worker]     static method fromQuad
+[Worker]     static method fromRect
+[Worker]     attribute @@toStringTag
+[Worker]     getter p1
+[Worker]     getter p2
+[Worker]     getter p3
+[Worker]     getter p4
+[Worker]     method constructor
+[Worker]     method getBounds
+[Worker]     method toJSON
+[Worker] interface DOMRect : DOMRectReadOnly
+[Worker]     attribute @@toStringTag
+[Worker]     getter height
+[Worker]     getter width
+[Worker]     getter x
+[Worker]     getter y
+[Worker]     method constructor
+[Worker]     setter height
+[Worker]     setter width
+[Worker]     setter x
+[Worker]     setter y
+[Worker] interface DOMRectReadOnly
+[Worker]     static method fromRect
+[Worker]     attribute @@toStringTag
+[Worker]     getter bottom
+[Worker]     getter height
+[Worker]     getter left
+[Worker]     getter right
+[Worker]     getter top
+[Worker]     getter width
+[Worker]     getter x
+[Worker]     getter y
+[Worker]     method constructor
+[Worker]     method toJSON
+[Worker] interface DOMStringList
+[Worker]     attribute @@toStringTag
+[Worker]     getter length
+[Worker]     method @@iterator
+[Worker]     method constructor
+[Worker]     method contains
+[Worker]     method item
+[Worker] interface DataView
+[Worker]     attribute @@toStringTag
+[Worker]     getter buffer
+[Worker]     getter byteLength
+[Worker]     getter byteOffset
+[Worker]     method constructor
+[Worker]     method getFloat32
+[Worker]     method getFloat64
+[Worker]     method getInt16
+[Worker]     method getInt32
+[Worker]     method getInt8
+[Worker]     method getUint16
+[Worker]     method getUint32
+[Worker]     method getUint8
+[Worker]     method setFloat32
+[Worker]     method setFloat64
+[Worker]     method setInt16
+[Worker]     method setInt32
+[Worker]     method setInt8
+[Worker]     method setUint16
+[Worker]     method setUint32
+[Worker]     method setUint8
+[Worker] interface Event
+[Worker]     attribute @@toStringTag
+[Worker]     attribute AT_TARGET
+[Worker]     attribute BUBBLING_PHASE
+[Worker]     attribute CAPTURING_PHASE
+[Worker]     attribute NONE
+[Worker]     getter bubbles
+[Worker]     getter cancelBubble
+[Worker]     getter cancelable
+[Worker]     getter composed
+[Worker]     getter currentTarget
+[Worker]     getter defaultPrevented
+[Worker]     getter eventPhase
+[Worker]     getter path
+[Worker]     getter returnValue
+[Worker]     getter srcElement
+[Worker]     getter target
+[Worker]     getter timeStamp
+[Worker]     getter type
+[Worker]     method composedPath
+[Worker]     method constructor
+[Worker]     method initEvent
+[Worker]     method preventDefault
+[Worker]     method stopImmediatePropagation
+[Worker]     method stopPropagation
+[Worker]     setter cancelBubble
+[Worker]     setter returnValue
+[Worker] interface EventSource : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     attribute CLOSED
+[Worker]     attribute CONNECTING
+[Worker]     attribute OPEN
+[Worker]     getter onerror
+[Worker]     getter onmessage
+[Worker]     getter onopen
+[Worker]     getter readyState
+[Worker]     getter url
+[Worker]     getter withCredentials
+[Worker]     method close
+[Worker]     method constructor
+[Worker]     setter onerror
+[Worker]     setter onmessage
+[Worker]     setter onopen
+[Worker] interface EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     method addEventListener
+[Worker]     method constructor
+[Worker]     method dispatchEvent
+[Worker]     method removeEventListener
+[Worker] interface FaceDetector
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method detect
+[Worker] interface File : Blob
+[Worker]     attribute @@toStringTag
+[Worker]     getter lastModified
+[Worker]     getter lastModifiedDate
+[Worker]     getter name
+[Worker]     getter webkitRelativePath
+[Worker]     method constructor
+[Worker] interface FileList
+[Worker]     attribute @@toStringTag
+[Worker]     getter length
+[Worker]     method @@iterator
+[Worker]     method constructor
+[Worker]     method item
+[Worker] interface FileReader : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     attribute DONE
+[Worker]     attribute EMPTY
+[Worker]     attribute LOADING
+[Worker]     getter error
+[Worker]     getter onabort
+[Worker]     getter onerror
+[Worker]     getter onload
+[Worker]     getter onloadend
+[Worker]     getter onloadstart
+[Worker]     getter onprogress
+[Worker]     getter readyState
+[Worker]     getter result
+[Worker]     method abort
+[Worker]     method constructor
+[Worker]     method readAsArrayBuffer
+[Worker]     method readAsBinaryString
+[Worker]     method readAsDataURL
+[Worker]     method readAsText
+[Worker]     setter onabort
+[Worker]     setter onerror
+[Worker]     setter onload
+[Worker]     setter onloadend
+[Worker]     setter onloadstart
+[Worker]     setter onprogress
+[Worker] interface FileReaderSync
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method readAsArrayBuffer
+[Worker]     method readAsBinaryString
+[Worker]     method readAsDataURL
+[Worker]     method readAsText
+[Worker] interface FormData
+[Worker]     attribute @@toStringTag
+[Worker]     method @@iterator
+[Worker]     method append
+[Worker]     method constructor
+[Worker]     method delete
+[Worker]     method entries
+[Worker]     method forEach
+[Worker]     method get
+[Worker]     method getAll
+[Worker]     method has
+[Worker]     method keys
+[Worker]     method set
+[Worker]     method values
+[Worker] interface Headers
+[Worker]     attribute @@toStringTag
+[Worker]     method @@iterator
+[Worker]     method append
+[Worker]     method constructor
+[Worker]     method delete
+[Worker]     method entries
+[Worker]     method forEach
+[Worker]     method get
+[Worker]     method getAll
+[Worker]     method has
+[Worker]     method keys
+[Worker]     method set
+[Worker]     method values
+[Worker] interface IDBCursor
+[Worker]     attribute @@toStringTag
+[Worker]     getter direction
+[Worker]     getter key
+[Worker]     getter primaryKey
+[Worker]     getter source
+[Worker]     method advance
+[Worker]     method constructor
+[Worker]     method continue
+[Worker]     method continuePrimaryKey
+[Worker]     method delete
+[Worker]     method update
+[Worker] interface IDBCursorWithValue : IDBCursor
+[Worker]     attribute @@toStringTag
+[Worker]     getter value
+[Worker]     method constructor
+[Worker] interface IDBDatabase : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     getter name
+[Worker]     getter objectStoreNames
+[Worker]     getter onabort
+[Worker]     getter onclose
+[Worker]     getter onerror
+[Worker]     getter onversionchange
+[Worker]     getter version
+[Worker]     method close
+[Worker]     method constructor
+[Worker]     method createObjectStore
+[Worker]     method deleteObjectStore
+[Worker]     method transaction
+[Worker]     setter onabort
+[Worker]     setter onclose
+[Worker]     setter onerror
+[Worker]     setter onversionchange
+[Worker] interface IDBFactory
+[Worker]     attribute @@toStringTag
+[Worker]     method cmp
+[Worker]     method constructor
+[Worker]     method deleteDatabase
+[Worker]     method open
+[Worker]     method webkitGetDatabaseNames
+[Worker] interface IDBIndex
+[Worker]     attribute @@toStringTag
+[Worker]     getter keyPath
+[Worker]     getter multiEntry
+[Worker]     getter name
+[Worker]     getter objectStore
+[Worker]     getter unique
+[Worker]     method constructor
+[Worker]     method count
+[Worker]     method get
+[Worker]     method getAll
+[Worker]     method getAllKeys
+[Worker]     method getKey
+[Worker]     method openCursor
+[Worker]     method openKeyCursor
+[Worker]     setter name
+[Worker] interface IDBKeyRange
+[Worker]     static method bound
+[Worker]     static method lowerBound
+[Worker]     static method only
+[Worker]     static method upperBound
+[Worker]     attribute @@toStringTag
+[Worker]     getter lower
+[Worker]     getter lowerOpen
+[Worker]     getter upper
+[Worker]     getter upperOpen
+[Worker]     method constructor
+[Worker]     method includes
+[Worker] interface IDBObjectStore
+[Worker]     attribute @@toStringTag
+[Worker]     getter autoIncrement
+[Worker]     getter indexNames
+[Worker]     getter keyPath
+[Worker]     getter name
+[Worker]     getter transaction
+[Worker]     method add
+[Worker]     method clear
+[Worker]     method constructor
+[Worker]     method count
+[Worker]     method createIndex
+[Worker]     method delete
+[Worker]     method deleteIndex
+[Worker]     method get
+[Worker]     method getAll
+[Worker]     method getAllKeys
+[Worker]     method getKey
+[Worker]     method index
+[Worker]     method openCursor
+[Worker]     method openKeyCursor
+[Worker]     method put
+[Worker]     setter name
+[Worker] interface IDBObservation
+[Worker]     attribute @@toStringTag
+[Worker]     getter key
+[Worker]     getter type
+[Worker]     getter value
+[Worker]     method constructor
+[Worker] interface IDBObserver
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method observe
+[Worker]     method unobserve
+[Worker] interface IDBOpenDBRequest : IDBRequest
+[Worker]     attribute @@toStringTag
+[Worker]     getter onblocked
+[Worker]     getter onupgradeneeded
+[Worker]     method constructor
+[Worker]     setter onblocked
+[Worker]     setter onupgradeneeded
+[Worker] interface IDBRequest : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     getter error
+[Worker]     getter onerror
+[Worker]     getter onsuccess
+[Worker]     getter readyState
+[Worker]     getter result
+[Worker]     getter source
+[Worker]     getter transaction
+[Worker]     method constructor
+[Worker]     setter onerror
+[Worker]     setter onsuccess
+[Worker] interface IDBTransaction : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     getter db
+[Worker]     getter error
+[Worker]     getter mode
+[Worker]     getter objectStoreNames
+[Worker]     getter onabort
+[Worker]     getter oncomplete
+[Worker]     getter onerror
+[Worker]     method abort
+[Worker]     method constructor
+[Worker]     method objectStore
+[Worker]     setter onabort
+[Worker]     setter oncomplete
+[Worker]     setter onerror
+[Worker] interface IDBVersionChangeEvent : Event
+[Worker]     attribute @@toStringTag
+[Worker]     getter dataLoss
+[Worker]     getter dataLossMessage
+[Worker]     getter newVersion
+[Worker]     getter oldVersion
+[Worker]     method constructor
+[Worker] interface ImageBitmap
+[Worker]     attribute @@toStringTag
+[Worker]     getter height
+[Worker]     getter width
+[Worker]     method close
+[Worker]     method constructor
+[Worker] interface ImageData
+[Worker]     attribute @@toStringTag
+[Worker]     getter data
+[Worker]     getter dataUnion
+[Worker]     getter height
+[Worker]     getter width
+[Worker]     method constructor
+[Worker]     method createImageData
+[Worker]     method getColorSettings
+[Worker] interface MessageChannel
+[Worker]     attribute @@toStringTag
+[Worker]     getter port1
+[Worker]     getter port2
+[Worker]     method constructor
+[Worker] interface MessageEvent : Event
+[Worker]     attribute @@toStringTag
+[Worker]     getter data
+[Worker]     getter lastEventId
+[Worker]     getter origin
+[Worker]     getter ports
+[Worker]     getter source
+[Worker]     getter suborigin
+[Worker]     method constructor
+[Worker]     method initMessageEvent
+[Worker] interface MessagePort : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     getter onmessage
+[Worker]     method close
+[Worker]     method constructor
+[Worker]     method postMessage
+[Worker]     method start
+[Worker]     setter onmessage
+[Worker] interface NetworkInformation : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     getter downlinkMax
+[Worker]     getter onchange
+[Worker]     getter ontypechange
+[Worker]     getter type
+[Worker]     method constructor
+[Worker]     setter onchange
+[Worker]     setter ontypechange
+[Worker] interface Notification : EventTarget
+[Worker]     static getter maxActions
+[Worker]     static getter permission
+[Worker]     attribute @@toStringTag
+[Worker]     getter actions
+[Worker]     getter badge
+[Worker]     getter body
+[Worker]     getter data
+[Worker]     getter dir
+[Worker]     getter icon
+[Worker]     getter image
+[Worker]     getter lang
+[Worker]     getter onclick
+[Worker]     getter onclose
+[Worker]     getter onerror
+[Worker]     getter onshow
+[Worker]     getter renotify
+[Worker]     getter requireInteraction
+[Worker]     getter silent
+[Worker]     getter tag
+[Worker]     getter timestamp
+[Worker]     getter title
+[Worker]     getter vibrate
+[Worker]     method close
+[Worker]     method constructor
+[Worker]     setter onclick
+[Worker]     setter onclose
+[Worker]     setter onerror
+[Worker]     setter onshow
+[Worker] interface OffscreenCanvas : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     getter height
+[Worker]     getter width
+[Worker]     method constructor
+[Worker]     method convertToBlob
+[Worker]     method getContext
+[Worker]     method transferToImageBitmap
+[Worker]     setter height
+[Worker]     setter width
+[Worker] interface OffscreenCanvasRenderingContext2D
+[Worker]     attribute @@toStringTag
+[Worker]     getter canvas
+[Worker]     getter fillStyle
+[Worker]     getter filter
+[Worker]     getter globalAlpha
+[Worker]     getter globalCompositeOperation
+[Worker]     getter imageSmoothingEnabled
+[Worker]     getter imageSmoothingQuality
+[Worker]     getter lineCap
+[Worker]     getter lineDashOffset
+[Worker]     getter lineJoin
+[Worker]     getter lineWidth
+[Worker]     getter miterLimit
+[Worker]     getter shadowBlur
+[Worker]     getter shadowColor
+[Worker]     getter shadowOffsetX
+[Worker]     getter shadowOffsetY
+[Worker]     getter strokeStyle
+[Worker]     method arc
+[Worker]     method arcTo
+[Worker]     method beginPath
+[Worker]     method bezierCurveTo
+[Worker]     method clearRect
+[Worker]     method clip
+[Worker]     method closePath
+[Worker]     method commit
+[Worker]     method constructor
+[Worker]     method createImageData
+[Worker]     method createLinearGradient
+[Worker]     method createPattern
+[Worker]     method createRadialGradient
+[Worker]     method drawImage
+[Worker]     method ellipse
+[Worker]     method fill
+[Worker]     method fillRect
+[Worker]     method getImageData
+[Worker]     method getLineDash
+[Worker]     method isPointInPath
+[Worker]     method isPointInStroke
+[Worker]     method lineTo
+[Worker]     method moveTo
+[Worker]     method putImageData
+[Worker]     method quadraticCurveTo
+[Worker]     method rect
+[Worker]     method resetTransform
+[Worker]     method restore
+[Worker]     method rotate
+[Worker]     method save
+[Worker]     method scale
+[Worker]     method setLineDash
+[Worker]     method setTransform
+[Worker]     method stroke
+[Worker]     method strokeRect
+[Worker]     method transform
+[Worker]     method translate
+[Worker]     setter fillStyle
+[Worker]     setter filter
+[Worker]     setter globalAlpha
+[Worker]     setter globalCompositeOperation
+[Worker]     setter imageSmoothingEnabled
+[Worker]     setter imageSmoothingQuality
+[Worker]     setter lineCap
+[Worker]     setter lineDashOffset
+[Worker]     setter lineJoin
+[Worker]     setter lineWidth
+[Worker]     setter miterLimit
+[Worker]     setter shadowBlur
+[Worker]     setter shadowColor
+[Worker]     setter shadowOffsetX
+[Worker]     setter shadowOffsetY
+[Worker]     setter strokeStyle
+[Worker] interface Path2D
+[Worker]     attribute @@toStringTag
+[Worker]     method addPath
+[Worker]     method arc
+[Worker]     method arcTo
+[Worker]     method bezierCurveTo
+[Worker]     method closePath
+[Worker]     method constructor
+[Worker]     method ellipse
+[Worker]     method lineTo
+[Worker]     method moveTo
+[Worker]     method quadraticCurveTo
+[Worker]     method rect
+[Worker] interface PerformanceObserverEntryList
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method getEntries
+[Worker]     method getEntriesByName
+[Worker]     method getEntriesByType
+[Worker] interface PermissionStatus : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     getter onchange
+[Worker]     getter state
+[Worker]     method constructor
+[Worker]     setter onchange
+[Worker] interface Permissions
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method query
+[Worker]     method request
+[Worker]     method requestAll
+[Worker]     method revoke
+[Worker] interface ProgressEvent : Event
+[Worker]     attribute @@toStringTag
+[Worker]     getter lengthComputable
+[Worker]     getter loaded
+[Worker]     getter total
+[Worker]     method constructor
+[Worker] interface PromiseRejectionEvent : Event
+[Worker]     attribute @@toStringTag
+[Worker]     getter promise
+[Worker]     getter reason
+[Worker]     method constructor
+[Worker] interface ReadableStream
+[Worker]     getter locked
+[Worker]     method cancel
+[Worker]     method constructor
+[Worker]     method getReader
+[Worker]     method pipeThrough
+[Worker]     method pipeTo
+[Worker]     method tee
+[Worker] interface Request
+[Worker]     attribute @@toStringTag
+[Worker]     getter bodyUsed
+[Worker]     getter cache
+[Worker]     getter credentials
+[Worker]     getter headers
+[Worker]     getter integrity
+[Worker]     getter method
+[Worker]     getter mode
+[Worker]     getter redirect
+[Worker]     getter referrer
+[Worker]     getter referrerPolicy
+[Worker]     getter url
+[Worker]     method arrayBuffer
+[Worker]     method blob
+[Worker]     method clone
+[Worker]     method constructor
+[Worker]     method json
+[Worker]     method text
+[Worker] interface Response
+[Worker]     static method error
+[Worker]     static method redirect
+[Worker]     attribute @@toStringTag
+[Worker]     getter body
+[Worker]     getter bodyUsed
+[Worker]     getter headers
+[Worker]     getter ok
+[Worker]     getter redirected
+[Worker]     getter status
+[Worker]     getter statusText
+[Worker]     getter type
+[Worker]     getter url
+[Worker]     method arrayBuffer
+[Worker]     method blob
+[Worker]     method clone
+[Worker]     method constructor
+[Worker]     method json
+[Worker]     method text
+[Worker] interface ServiceWorkerRegistration : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     getter active
+[Worker]     getter backgroundFetch
+[Worker]     getter installing
+[Worker]     getter onupdatefound
+[Worker]     getter paymentManager
+[Worker]     getter pushManager
+[Worker]     getter scope
+[Worker]     getter sync
+[Worker]     getter waiting
+[Worker]     method constructor
+[Worker]     method getNotifications
+[Worker]     method showNotification
+[Worker]     method unregister
+[Worker]     method update
+[Worker]     setter onupdatefound
+[Worker] interface SharedWorkerGlobalScope : WorkerGlobalScope
+[Worker]     attribute @@toStringTag
+[Worker]     attribute PERSISTENT
+[Worker]     attribute TEMPORARY
+[Worker]     method constructor
+[Worker] interface StorageManager
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method estimate
+[Worker]     method persisted
+[Worker] interface SubtleCrypto
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method decrypt
+[Worker]     method deriveBits
+[Worker]     method deriveKey
+[Worker]     method digest
+[Worker]     method encrypt
+[Worker]     method exportKey
+[Worker]     method generateKey
+[Worker]     method importKey
+[Worker]     method sign
+[Worker]     method unwrapKey
+[Worker]     method verify
+[Worker]     method wrapKey
+[Worker] interface TextDecoder
+[Worker]     attribute @@toStringTag
+[Worker]     getter encoding
+[Worker]     getter fatal
+[Worker]     getter ignoreBOM
+[Worker]     method constructor
+[Worker]     method decode
+[Worker] interface TextDetector
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method detect
+[Worker] interface TextEncoder
+[Worker]     attribute @@toStringTag
+[Worker]     getter encoding
+[Worker]     method constructor
+[Worker]     method encode
+[Worker] interface URL
+[Worker]     static method createObjectURL
+[Worker]     static method revokeObjectURL
+[Worker]     attribute @@toStringTag
+[Worker]     getter hash
+[Worker]     getter host
+[Worker]     getter hostname
+[Worker]     getter href
+[Worker]     getter origin
+[Worker]     getter password
+[Worker]     getter pathname
+[Worker]     getter port
+[Worker]     getter protocol
+[Worker]     getter search
+[Worker]     getter searchParams
+[Worker]     getter username
+[Worker]     method constructor
+[Worker]     method toString
+[Worker]     setter hash
+[Worker]     setter host
+[Worker]     setter hostname
+[Worker]     setter href
+[Worker]     setter password
+[Worker]     setter pathname
+[Worker]     setter port
+[Worker]     setter protocol
+[Worker]     setter search
+[Worker]     setter username
+[Worker] interface URLSearchParams
+[Worker]     attribute @@toStringTag
+[Worker]     method @@iterator
+[Worker]     method append
+[Worker]     method constructor
+[Worker]     method delete
+[Worker]     method entries
+[Worker]     method forEach
+[Worker]     method get
+[Worker]     method getAll
+[Worker]     method has
+[Worker]     method keys
+[Worker]     method set
+[Worker]     method toString
+[Worker]     method values
+[Worker] interface WebGL2RenderingContext
+[Worker]     attribute @@toStringTag
+[Worker]     attribute ACTIVE_ATTRIBUTES
+[Worker]     attribute ACTIVE_TEXTURE
+[Worker]     attribute ACTIVE_UNIFORMS
+[Worker]     attribute ACTIVE_UNIFORM_BLOCKS
+[Worker]     attribute ALIASED_LINE_WIDTH_RANGE
+[Worker]     attribute ALIASED_POINT_SIZE_RANGE
+[Worker]     attribute ALPHA
+[Worker]     attribute ALPHA_BITS
+[Worker]     attribute ALREADY_SIGNALED
+[Worker]     attribute ALWAYS
+[Worker]     attribute ANY_SAMPLES_PASSED
+[Worker]     attribute ANY_SAMPLES_PASSED_CONSERVATIVE
+[Worker]     attribute ARRAY_BUFFER
+[Worker]     attribute ARRAY_BUFFER_BINDING
+[Worker]     attribute ATTACHED_SHADERS
+[Worker]     attribute BACK
+[Worker]     attribute BLEND
+[Worker]     attribute BLEND_COLOR
+[Worker]     attribute BLEND_DST_ALPHA
+[Worker]     attribute BLEND_DST_RGB
+[Worker]     attribute BLEND_EQUATION
+[Worker]     attribute BLEND_EQUATION_ALPHA
+[Worker]     attribute BLEND_EQUATION_RGB
+[Worker]     attribute BLEND_SRC_ALPHA
+[Worker]     attribute BLEND_SRC_RGB
+[Worker]     attribute BLUE_BITS
+[Worker]     attribute BOOL
+[Worker]     attribute BOOL_VEC2
+[Worker]     attribute BOOL_VEC3
+[Worker]     attribute BOOL_VEC4
+[Worker]     attribute BROWSER_DEFAULT_WEBGL
+[Worker]     attribute BUFFER_SIZE
+[Worker]     attribute BUFFER_USAGE
+[Worker]     attribute BYTE
+[Worker]     attribute CCW
+[Worker]     attribute CLAMP_TO_EDGE
+[Worker]     attribute COLOR
+[Worker]     attribute COLOR_ATTACHMENT0
+[Worker]     attribute COLOR_ATTACHMENT1
+[Worker]     attribute COLOR_ATTACHMENT10
+[Worker]     attribute COLOR_ATTACHMENT11
+[Worker]     attribute COLOR_ATTACHMENT12
+[Worker]     attribute COLOR_ATTACHMENT13
+[Worker]     attribute COLOR_ATTACHMENT14
+[Worker]     attribute COLOR_ATTACHMENT15
+[Worker]     attribute COLOR_ATTACHMENT2
+[Worker]     attribute COLOR_ATTACHMENT3
+[Worker]     attribute COLOR_ATTACHMENT4
+[Worker]     attribute COLOR_ATTACHMENT5
+[Worker]     attribute COLOR_ATTACHMENT6
+[Worker]     attribute COLOR_ATTACHMENT7
+[Worker]     attribute COLOR_ATTACHMENT8
+[Worker]     attribute COLOR_ATTACHMENT9
+[Worker]     attribute COLOR_BUFFER_BIT
+[Worker]     attribute COLOR_CLEAR_VALUE
+[Worker]     attribute COLOR_WRITEMASK
+[Worker]     attribute COMPARE_REF_TO_TEXTURE
+[Worker]     attribute COMPILE_STATUS
+[Worker]     attribute COMPRESSED_TEXTURE_FORMATS
+[Worker]     attribute CONDITION_SATISFIED
+[Worker]     attribute CONSTANT_ALPHA
+[Worker]     attribute CONSTANT_COLOR
+[Worker]     attribute CONTEXT_LOST_WEBGL
+[Worker]     attribute COPY_READ_BUFFER
+[Worker]     attribute COPY_READ_BUFFER_BINDING
+[Worker]     attribute COPY_WRITE_BUFFER
+[Worker]     attribute COPY_WRITE_BUFFER_BINDING
+[Worker]     attribute CULL_FACE
+[Worker]     attribute CULL_FACE_MODE
+[Worker]     attribute CURRENT_PROGRAM
+[Worker]     attribute CURRENT_QUERY
+[Worker]     attribute CURRENT_VERTEX_ATTRIB
+[Worker]     attribute CW
+[Worker]     attribute DECR
+[Worker]     attribute DECR_WRAP
+[Worker]     attribute DELETE_STATUS
+[Worker]     attribute DEPTH
+[Worker]     attribute DEPTH24_STENCIL8
+[Worker]     attribute DEPTH32F_STENCIL8
+[Worker]     attribute DEPTH_ATTACHMENT
+[Worker]     attribute DEPTH_BITS
+[Worker]     attribute DEPTH_BUFFER_BIT
+[Worker]     attribute DEPTH_CLEAR_VALUE
+[Worker]     attribute DEPTH_COMPONENT
+[Worker]     attribute DEPTH_COMPONENT16
+[Worker]     attribute DEPTH_COMPONENT24
+[Worker]     attribute DEPTH_COMPONENT32F
+[Worker]     attribute DEPTH_FUNC
+[Worker]     attribute DEPTH_RANGE
+[Worker]     attribute DEPTH_STENCIL
+[Worker]     attribute DEPTH_STENCIL_ATTACHMENT
+[Worker]     attribute DEPTH_TEST
+[Worker]     attribute DEPTH_WRITEMASK
+[Worker]     attribute DITHER
+[Worker]     attribute DONT_CARE
+[Worker]     attribute DRAW_BUFFER0
+[Worker]     attribute DRAW_BUFFER1
+[Worker]     attribute DRAW_BUFFER10
+[Worker]     attribute DRAW_BUFFER11
+[Worker]     attribute DRAW_BUFFER12
+[Worker]     attribute DRAW_BUFFER13
+[Worker]     attribute DRAW_BUFFER14
+[Worker]     attribute DRAW_BUFFER15
+[Worker]     attribute DRAW_BUFFER2
+[Worker]     attribute DRAW_BUFFER3
+[Worker]     attribute DRAW_BUFFER4
+[Worker]     attribute DRAW_BUFFER5
+[Worker]     attribute DRAW_BUFFER6
+[Worker]     attribute DRAW_BUFFER7
+[Worker]     attribute DRAW_BUFFER8
+[Worker]     attribute DRAW_BUFFER9
+[Worker]     attribute DRAW_FRAMEBUFFER
+[Worker]     attribute DRAW_FRAMEBUFFER_BINDING
+[Worker]     attribute DST_ALPHA
+[Worker]     attribute DST_COLOR
+[Worker]     attribute DYNAMIC_COPY
+[Worker]     attribute DYNAMIC_DRAW
+[Worker]     attribute DYNAMIC_READ
+[Worker]     attribute ELEMENT_ARRAY_BUFFER
+[Worker]     attribute ELEMENT_ARRAY_BUFFER_BINDING
+[Worker]     attribute EQUAL
+[Worker]     attribute FASTEST
+[Worker]     attribute FLOAT
+[Worker]     attribute FLOAT_32_UNSIGNED_INT_24_8_REV
+[Worker]     attribute FLOAT_MAT2
+[Worker]     attribute FLOAT_MAT2x3
+[Worker]     attribute FLOAT_MAT2x4
+[Worker]     attribute FLOAT_MAT3
+[Worker]     attribute FLOAT_MAT3x2
+[Worker]     attribute FLOAT_MAT3x4
+[Worker]     attribute FLOAT_MAT4
+[Worker]     attribute FLOAT_MAT4x2
+[Worker]     attribute FLOAT_MAT4x3
+[Worker]     attribute FLOAT_VEC2
+[Worker]     attribute FLOAT_VEC3
+[Worker]     attribute FLOAT_VEC4
+[Worker]     attribute FRAGMENT_SHADER
+[Worker]     attribute FRAGMENT_SHADER_DERIVATIVE_HINT
+[Worker]     attribute FRAMEBUFFER
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_BLUE_SIZE
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_GREEN_SIZE
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_OBJECT_NAME
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_RED_SIZE
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL
+[Worker]     attribute FRAMEBUFFER_BINDING
+[Worker]     attribute FRAMEBUFFER_COMPLETE
+[Worker]     attribute FRAMEBUFFER_DEFAULT
+[Worker]     attribute FRAMEBUFFER_INCOMPLETE_ATTACHMENT
+[Worker]     attribute FRAMEBUFFER_INCOMPLETE_DIMENSIONS
+[Worker]     attribute FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
+[Worker]     attribute FRAMEBUFFER_INCOMPLETE_MULTISAMPLE
+[Worker]     attribute FRAMEBUFFER_UNSUPPORTED
+[Worker]     attribute FRONT
+[Worker]     attribute FRONT_AND_BACK
+[Worker]     attribute FRONT_FACE
+[Worker]     attribute FUNC_ADD
+[Worker]     attribute FUNC_REVERSE_SUBTRACT
+[Worker]     attribute FUNC_SUBTRACT
+[Worker]     attribute GENERATE_MIPMAP_HINT
+[Worker]     attribute GEQUAL
+[Worker]     attribute GREATER
+[Worker]     attribute GREEN_BITS
+[Worker]     attribute HALF_FLOAT
+[Worker]     attribute HIGH_FLOAT
+[Worker]     attribute HIGH_INT
+[Worker]     attribute IMPLEMENTATION_COLOR_READ_FORMAT
+[Worker]     attribute IMPLEMENTATION_COLOR_READ_TYPE
+[Worker]     attribute INCR
+[Worker]     attribute INCR_WRAP
+[Worker]     attribute INT
+[Worker]     attribute INTERLEAVED_ATTRIBS
+[Worker]     attribute INT_2_10_10_10_REV
+[Worker]     attribute INT_SAMPLER_2D
+[Worker]     attribute INT_SAMPLER_2D_ARRAY
+[Worker]     attribute INT_SAMPLER_3D
+[Worker]     attribute INT_SAMPLER_CUBE
+[Worker]     attribute INT_VEC2
+[Worker]     attribute INT_VEC3
+[Worker]     attribute INT_VEC4
+[Worker]     attribute INVALID_ENUM
+[Worker]     attribute INVALID_FRAMEBUFFER_OPERATION
+[Worker]     attribute INVALID_INDEX
+[Worker]     attribute INVALID_OPERATION
+[Worker]     attribute INVALID_VALUE
+[Worker]     attribute INVERT
+[Worker]     attribute KEEP
+[Worker]     attribute LEQUAL
+[Worker]     attribute LESS
+[Worker]     attribute LINEAR
+[Worker]     attribute LINEAR_MIPMAP_LINEAR
+[Worker]     attribute LINEAR_MIPMAP_NEAREST
+[Worker]     attribute LINES
+[Worker]     attribute LINE_LOOP
+[Worker]     attribute LINE_STRIP
+[Worker]     attribute LINE_WIDTH
+[Worker]     attribute LINK_STATUS
+[Worker]     attribute LOW_FLOAT
+[Worker]     attribute LOW_INT
+[Worker]     attribute LUMINANCE
+[Worker]     attribute LUMINANCE_ALPHA
+[Worker]     attribute MAX
+[Worker]     attribute MAX_3D_TEXTURE_SIZE
+[Worker]     attribute MAX_ARRAY_TEXTURE_LAYERS
+[Worker]     attribute MAX_CLIENT_WAIT_TIMEOUT_WEBGL
+[Worker]     attribute MAX_COLOR_ATTACHMENTS
+[Worker]     attribute MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS
+[Worker]     attribute MAX_COMBINED_TEXTURE_IMAGE_UNITS
+[Worker]     attribute MAX_COMBINED_UNIFORM_BLOCKS
+[Worker]     attribute MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS
+[Worker]     attribute MAX_CUBE_MAP_TEXTURE_SIZE
+[Worker]     attribute MAX_DRAW_BUFFERS
+[Worker]     attribute MAX_ELEMENTS_INDICES
+[Worker]     attribute MAX_ELEMENTS_VERTICES
+[Worker]     attribute MAX_ELEMENT_INDEX
+[Worker]     attribute MAX_FRAGMENT_INPUT_COMPONENTS
+[Worker]     attribute MAX_FRAGMENT_UNIFORM_BLOCKS
+[Worker]     attribute MAX_FRAGMENT_UNIFORM_COMPONENTS
+[Worker]     attribute MAX_FRAGMENT_UNIFORM_VECTORS
+[Worker]     attribute MAX_PROGRAM_TEXEL_OFFSET
+[Worker]     attribute MAX_RENDERBUFFER_SIZE
+[Worker]     attribute MAX_SAMPLES
+[Worker]     attribute MAX_SERVER_WAIT_TIMEOUT
+[Worker]     attribute MAX_TEXTURE_IMAGE_UNITS
+[Worker]     attribute MAX_TEXTURE_LOD_BIAS
+[Worker]     attribute MAX_TEXTURE_SIZE
+[Worker]     attribute MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+[Worker]     attribute MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+[Worker]     attribute MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+[Worker]     attribute MAX_UNIFORM_BLOCK_SIZE
+[Worker]     attribute MAX_UNIFORM_BUFFER_BINDINGS
+[Worker]     attribute MAX_VARYING_COMPONENTS
+[Worker]     attribute MAX_VARYING_VECTORS
+[Worker]     attribute MAX_VERTEX_ATTRIBS
+[Worker]     attribute MAX_VERTEX_OUTPUT_COMPONENTS
+[Worker]     attribute MAX_VERTEX_TEXTURE_IMAGE_UNITS
+[Worker]     attribute MAX_VERTEX_UNIFORM_BLOCKS
+[Worker]     attribute MAX_VERTEX_UNIFORM_COMPONENTS
+[Worker]     attribute MAX_VERTEX_UNIFORM_VECTORS
+[Worker]     attribute MAX_VIEWPORT_DIMS
+[Worker]     attribute MEDIUM_FLOAT
+[Worker]     attribute MEDIUM_INT
+[Worker]     attribute MIN
+[Worker]     attribute MIN_PROGRAM_TEXEL_OFFSET
+[Worker]     attribute MIRRORED_REPEAT
+[Worker]     attribute NEAREST
+[Worker]     attribute NEAREST_MIPMAP_LINEAR
+[Worker]     attribute NEAREST_MIPMAP_NEAREST
+[Worker]     attribute NEVER
+[Worker]     attribute NICEST
+[Worker]     attribute NONE
+[Worker]     attribute NOTEQUAL
+[Worker]     attribute NO_ERROR
+[Worker]     attribute OBJECT_TYPE
+[Worker]     attribute ONE
+[Worker]     attribute ONE_MINUS_CONSTANT_ALPHA
+[Worker]     attribute ONE_MINUS_CONSTANT_COLOR
+[Worker]     attribute ONE_MINUS_DST_ALPHA
+[Worker]     attribute ONE_MINUS_DST_COLOR
+[Worker]     attribute ONE_MINUS_SRC_ALPHA
+[Worker]     attribute ONE_MINUS_SRC_COLOR
+[Worker]     attribute OUT_OF_MEMORY
+[Worker]     attribute PACK_ALIGNMENT
+[Worker]     attribute PACK_ROW_LENGTH
+[Worker]     attribute PACK_SKIP_PIXELS
+[Worker]     attribute PACK_SKIP_ROWS
+[Worker]     attribute PIXEL_PACK_BUFFER
+[Worker]     attribute PIXEL_PACK_BUFFER_BINDING
+[Worker]     attribute PIXEL_UNPACK_BUFFER
+[Worker]     attribute PIXEL_UNPACK_BUFFER_BINDING
+[Worker]     attribute POINTS
+[Worker]     attribute POLYGON_OFFSET_FACTOR
+[Worker]     attribute POLYGON_OFFSET_FILL
+[Worker]     attribute POLYGON_OFFSET_UNITS
+[Worker]     attribute QUERY_RESULT
+[Worker]     attribute QUERY_RESULT_AVAILABLE
+[Worker]     attribute R11F_G11F_B10F
+[Worker]     attribute R16F
+[Worker]     attribute R16I
+[Worker]     attribute R16UI
+[Worker]     attribute R32F
+[Worker]     attribute R32I
+[Worker]     attribute R32UI
+[Worker]     attribute R8
+[Worker]     attribute R8I
+[Worker]     attribute R8UI
+[Worker]     attribute R8_SNORM
+[Worker]     attribute RASTERIZER_DISCARD
+[Worker]     attribute READ_BUFFER
+[Worker]     attribute READ_FRAMEBUFFER
+[Worker]     attribute READ_FRAMEBUFFER_BINDING
+[Worker]     attribute RED
+[Worker]     attribute RED_BITS
+[Worker]     attribute RED_INTEGER
+[Worker]     attribute RENDERBUFFER
+[Worker]     attribute RENDERBUFFER_ALPHA_SIZE
+[Worker]     attribute RENDERBUFFER_BINDING
+[Worker]     attribute RENDERBUFFER_BLUE_SIZE
+[Worker]     attribute RENDERBUFFER_DEPTH_SIZE
+[Worker]     attribute RENDERBUFFER_GREEN_SIZE
+[Worker]     attribute RENDERBUFFER_HEIGHT
+[Worker]     attribute RENDERBUFFER_INTERNAL_FORMAT
+[Worker]     attribute RENDERBUFFER_RED_SIZE
+[Worker]     attribute RENDERBUFFER_SAMPLES
+[Worker]     attribute RENDERBUFFER_STENCIL_SIZE
+[Worker]     attribute RENDERBUFFER_WIDTH
+[Worker]     attribute RENDERER
+[Worker]     attribute REPEAT
+[Worker]     attribute REPLACE
+[Worker]     attribute RG
+[Worker]     attribute RG16F
+[Worker]     attribute RG16I
+[Worker]     attribute RG16UI
+[Worker]     attribute RG32F
+[Worker]     attribute RG32I
+[Worker]     attribute RG32UI
+[Worker]     attribute RG8
+[Worker]     attribute RG8I
+[Worker]     attribute RG8UI
+[Worker]     attribute RG8_SNORM
+[Worker]     attribute RGB
+[Worker]     attribute RGB10_A2
+[Worker]     attribute RGB10_A2UI
+[Worker]     attribute RGB16F
+[Worker]     attribute RGB16I
+[Worker]     attribute RGB16UI
+[Worker]     attribute RGB32F
+[Worker]     attribute RGB32I
+[Worker]     attribute RGB32UI
+[Worker]     attribute RGB565
+[Worker]     attribute RGB5_A1
+[Worker]     attribute RGB8
+[Worker]     attribute RGB8I
+[Worker]     attribute RGB8UI
+[Worker]     attribute RGB8_SNORM
+[Worker]     attribute RGB9_E5
+[Worker]     attribute RGBA
+[Worker]     attribute RGBA16F
+[Worker]     attribute RGBA16I
+[Worker]     attribute RGBA16UI
+[Worker]     attribute RGBA32F
+[Worker]     attribute RGBA32I
+[Worker]     attribute RGBA32UI
+[Worker]     attribute RGBA4
+[Worker]     attribute RGBA8
+[Worker]     attribute RGBA8I
+[Worker]     attribute RGBA8UI
+[Worker]     attribute RGBA8_SNORM
+[Worker]     attribute RGBA_INTEGER
+[Worker]     attribute RGB_INTEGER
+[Worker]     attribute RG_INTEGER
+[Worker]     attribute SAMPLER_2D
+[Worker]     attribute SAMPLER_2D_ARRAY
+[Worker]     attribute SAMPLER_2D_ARRAY_SHADOW
+[Worker]     attribute SAMPLER_2D_SHADOW
+[Worker]     attribute SAMPLER_3D
+[Worker]     attribute SAMPLER_BINDING
+[Worker]     attribute SAMPLER_CUBE
+[Worker]     attribute SAMPLER_CUBE_SHADOW
+[Worker]     attribute SAMPLES
+[Worker]     attribute SAMPLE_ALPHA_TO_COVERAGE
+[Worker]     attribute SAMPLE_BUFFERS
+[Worker]     attribute SAMPLE_COVERAGE
+[Worker]     attribute SAMPLE_COVERAGE_INVERT
+[Worker]     attribute SAMPLE_COVERAGE_VALUE
+[Worker]     attribute SCISSOR_BOX
+[Worker]     attribute SCISSOR_TEST
+[Worker]     attribute SEPARATE_ATTRIBS
+[Worker]     attribute SHADER_TYPE
+[Worker]     attribute SHADING_LANGUAGE_VERSION
+[Worker]     attribute SHORT
+[Worker]     attribute SIGNALED
+[Worker]     attribute SIGNED_NORMALIZED
+[Worker]     attribute SRC_ALPHA
+[Worker]     attribute SRC_ALPHA_SATURATE
+[Worker]     attribute SRC_COLOR
+[Worker]     attribute SRGB
+[Worker]     attribute SRGB8
+[Worker]     attribute SRGB8_ALPHA8
+[Worker]     attribute STATIC_COPY
+[Worker]     attribute STATIC_DRAW
+[Worker]     attribute STATIC_READ
+[Worker]     attribute STENCIL
+[Worker]     attribute STENCIL_ATTACHMENT
+[Worker]     attribute STENCIL_BACK_FAIL
+[Worker]     attribute STENCIL_BACK_FUNC
+[Worker]     attribute STENCIL_BACK_PASS_DEPTH_FAIL
+[Worker]     attribute STENCIL_BACK_PASS_DEPTH_PASS
+[Worker]     attribute STENCIL_BACK_REF
+[Worker]     attribute STENCIL_BACK_VALUE_MASK
+[Worker]     attribute STENCIL_BACK_WRITEMASK
+[Worker]     attribute STENCIL_BITS
+[Worker]     attribute STENCIL_BUFFER_BIT
+[Worker]     attribute STENCIL_CLEAR_VALUE
+[Worker]     attribute STENCIL_FAIL
+[Worker]     attribute STENCIL_FUNC
+[Worker]     attribute STENCIL_INDEX
+[Worker]     attribute STENCIL_INDEX8
+[Worker]     attribute STENCIL_PASS_DEPTH_FAIL
+[Worker]     attribute STENCIL_PASS_DEPTH_PASS
+[Worker]     attribute STENCIL_REF
+[Worker]     attribute STENCIL_TEST
+[Worker]     attribute STENCIL_VALUE_MASK
+[Worker]     attribute STENCIL_WRITEMASK
+[Worker]     attribute STREAM_COPY
+[Worker]     attribute STREAM_DRAW
+[Worker]     attribute STREAM_READ
+[Worker]     attribute SUBPIXEL_BITS
+[Worker]     attribute SYNC_CONDITION
+[Worker]     attribute SYNC_FENCE
+[Worker]     attribute SYNC_FLAGS
+[Worker]     attribute SYNC_FLUSH_COMMANDS_BIT
+[Worker]     attribute SYNC_GPU_COMMANDS_COMPLETE
+[Worker]     attribute SYNC_STATUS
+[Worker]     attribute TEXTURE
+[Worker]     attribute TEXTURE0
+[Worker]     attribute TEXTURE1
+[Worker]     attribute TEXTURE10
+[Worker]     attribute TEXTURE11
+[Worker]     attribute TEXTURE12
+[Worker]     attribute TEXTURE13
+[Worker]     attribute TEXTURE14
+[Worker]     attribute TEXTURE15
+[Worker]     attribute TEXTURE16
+[Worker]     attribute TEXTURE17
+[Worker]     attribute TEXTURE18
+[Worker]     attribute TEXTURE19
+[Worker]     attribute TEXTURE2
+[Worker]     attribute TEXTURE20
+[Worker]     attribute TEXTURE21
+[Worker]     attribute TEXTURE22
+[Worker]     attribute TEXTURE23
+[Worker]     attribute TEXTURE24
+[Worker]     attribute TEXTURE25
+[Worker]     attribute TEXTURE26
+[Worker]     attribute TEXTURE27
+[Worker]     attribute TEXTURE28
+[Worker]     attribute TEXTURE29
+[Worker]     attribute TEXTURE3
+[Worker]     attribute TEXTURE30
+[Worker]     attribute TEXTURE31
+[Worker]     attribute TEXTURE4
+[Worker]     attribute TEXTURE5
+[Worker]     attribute TEXTURE6
+[Worker]     attribute TEXTURE7
+[Worker]     attribute TEXTURE8
+[Worker]     attribute TEXTURE9
+[Worker]     attribute TEXTURE_2D
+[Worker]     attribute TEXTURE_2D_ARRAY
+[Worker]     attribute TEXTURE_3D
+[Worker]     attribute TEXTURE_BASE_LEVEL
+[Worker]     attribute TEXTURE_BINDING_2D
+[Worker]     attribute TEXTURE_BINDING_2D_ARRAY
+[Worker]     attribute TEXTURE_BINDING_3D
+[Worker]     attribute TEXTURE_BINDING_CUBE_MAP
+[Worker]     attribute TEXTURE_COMPARE_FUNC
+[Worker]     attribute TEXTURE_COMPARE_MODE
+[Worker]     attribute TEXTURE_CUBE_MAP
+[Worker]     attribute TEXTURE_CUBE_MAP_NEGATIVE_X
+[Worker]     attribute TEXTURE_CUBE_MAP_NEGATIVE_Y
+[Worker]     attribute TEXTURE_CUBE_MAP_NEGATIVE_Z
+[Worker]     attribute TEXTURE_CUBE_MAP_POSITIVE_X
+[Worker]     attribute TEXTURE_CUBE_MAP_POSITIVE_Y
+[Worker]     attribute TEXTURE_CUBE_MAP_POSITIVE_Z
+[Worker]     attribute TEXTURE_IMMUTABLE_FORMAT
+[Worker]     attribute TEXTURE_IMMUTABLE_LEVELS
+[Worker]     attribute TEXTURE_MAG_FILTER
+[Worker]     attribute TEXTURE_MAX_LEVEL
+[Worker]     attribute TEXTURE_MAX_LOD
+[Worker]     attribute TEXTURE_MIN_FILTER
+[Worker]     attribute TEXTURE_MIN_LOD
+[Worker]     attribute TEXTURE_WRAP_R
+[Worker]     attribute TEXTURE_WRAP_S
+[Worker]     attribute TEXTURE_WRAP_T
+[Worker]     attribute TIMEOUT_EXPIRED
+[Worker]     attribute TIMEOUT_IGNORED
+[Worker]     attribute TRANSFORM_FEEDBACK
+[Worker]     attribute TRANSFORM_FEEDBACK_ACTIVE
+[Worker]     attribute TRANSFORM_FEEDBACK_BINDING
+[Worker]     attribute TRANSFORM_FEEDBACK_BUFFER
+[Worker]     attribute TRANSFORM_FEEDBACK_BUFFER_BINDING
+[Worker]     attribute TRANSFORM_FEEDBACK_BUFFER_MODE
+[Worker]     attribute TRANSFORM_FEEDBACK_BUFFER_SIZE
+[Worker]     attribute TRANSFORM_FEEDBACK_BUFFER_START
+[Worker]     attribute TRANSFORM_FEEDBACK_PAUSED
+[Worker]     attribute TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+[Worker]     attribute TRANSFORM_FEEDBACK_VARYINGS
+[Worker]     attribute TRIANGLES
+[Worker]     attribute TRIANGLE_FAN
+[Worker]     attribute TRIANGLE_STRIP
+[Worker]     attribute UNIFORM_ARRAY_STRIDE
+[Worker]     attribute UNIFORM_BLOCK_ACTIVE_UNIFORMS
+[Worker]     attribute UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES
+[Worker]     attribute UNIFORM_BLOCK_BINDING
+[Worker]     attribute UNIFORM_BLOCK_DATA_SIZE
+[Worker]     attribute UNIFORM_BLOCK_INDEX
+[Worker]     attribute UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER
+[Worker]     attribute UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER
+[Worker]     attribute UNIFORM_BUFFER
+[Worker]     attribute UNIFORM_BUFFER_BINDING
+[Worker]     attribute UNIFORM_BUFFER_OFFSET_ALIGNMENT
+[Worker]     attribute UNIFORM_BUFFER_SIZE
+[Worker]     attribute UNIFORM_BUFFER_START
+[Worker]     attribute UNIFORM_IS_ROW_MAJOR
+[Worker]     attribute UNIFORM_MATRIX_STRIDE
+[Worker]     attribute UNIFORM_OFFSET
+[Worker]     attribute UNIFORM_SIZE
+[Worker]     attribute UNIFORM_TYPE
+[Worker]     attribute UNPACK_ALIGNMENT
+[Worker]     attribute UNPACK_COLORSPACE_CONVERSION_WEBGL
+[Worker]     attribute UNPACK_FLIP_Y_WEBGL
+[Worker]     attribute UNPACK_IMAGE_HEIGHT
+[Worker]     attribute UNPACK_PREMULTIPLY_ALPHA_WEBGL
+[Worker]     attribute UNPACK_ROW_LENGTH
+[Worker]     attribute UNPACK_SKIP_IMAGES
+[Worker]     attribute UNPACK_SKIP_PIXELS
+[Worker]     attribute UNPACK_SKIP_ROWS
+[Worker]     attribute UNSIGNALED
+[Worker]     attribute UNSIGNED_BYTE
+[Worker]     attribute UNSIGNED_INT
+[Worker]     attribute UNSIGNED_INT_10F_11F_11F_REV
+[Worker]     attribute UNSIGNED_INT_24_8
+[Worker]     attribute UNSIGNED_INT_2_10_10_10_REV
+[Worker]     attribute UNSIGNED_INT_5_9_9_9_REV
+[Worker]     attribute UNSIGNED_INT_SAMPLER_2D
+[Worker]     attribute UNSIGNED_INT_SAMPLER_2D_ARRAY
+[Worker]     attribute UNSIGNED_INT_SAMPLER_3D
+[Worker]     attribute UNSIGNED_INT_SAMPLER_CUBE
+[Worker]     attribute UNSIGNED_INT_VEC2
+[Worker]     attribute UNSIGNED_INT_VEC3
+[Worker]     attribute UNSIGNED_INT_VEC4
+[Worker]     attribute UNSIGNED_NORMALIZED
+[Worker]     attribute UNSIGNED_SHORT
+[Worker]     attribute UNSIGNED_SHORT_4_4_4_4
+[Worker]     attribute UNSIGNED_SHORT_5_5_5_1
+[Worker]     attribute UNSIGNED_SHORT_5_6_5
+[Worker]     attribute VALIDATE_STATUS
+[Worker]     attribute VENDOR
+[Worker]     attribute VERSION
+[Worker]     attribute VERTEX_ARRAY_BINDING
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_DIVISOR
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_ENABLED
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_INTEGER
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_NORMALIZED
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_POINTER
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_SIZE
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_STRIDE
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_TYPE
+[Worker]     attribute VERTEX_SHADER
+[Worker]     attribute VIEWPORT
+[Worker]     attribute WAIT_FAILED
+[Worker]     attribute ZERO
+[Worker]     getter canvas
+[Worker]     getter drawingBufferHeight
+[Worker]     getter drawingBufferWidth
+[Worker]     method activeTexture
+[Worker]     method attachShader
+[Worker]     method beginQuery
+[Worker]     method beginTransformFeedback
+[Worker]     method bindAttribLocation
+[Worker]     method bindBuffer
+[Worker]     method bindBufferBase
+[Worker]     method bindBufferRange
+[Worker]     method bindFramebuffer
+[Worker]     method bindRenderbuffer
+[Worker]     method bindSampler
+[Worker]     method bindTexture
+[Worker]     method bindTransformFeedback
+[Worker]     method bindVertexArray
+[Worker]     method blendColor
+[Worker]     method blendEquation
+[Worker]     method blendEquationSeparate
+[Worker]     method blendFunc
+[Worker]     method blendFuncSeparate
+[Worker]     method blitFramebuffer
+[Worker]     method bufferData
+[Worker]     method bufferSubData
+[Worker]     method checkFramebufferStatus
+[Worker]     method clear
+[Worker]     method clearBufferfi
+[Worker]     method clearBufferfv
+[Worker]     method clearBufferiv
+[Worker]     method clearBufferuiv
+[Worker]     method clearColor
+[Worker]     method clearDepth
+[Worker]     method clearStencil
+[Worker]     method clientWaitSync
+[Worker]     method colorMask
+[Worker]     method commit
+[Worker]     method compileShader
+[Worker]     method compressedTexImage2D
+[Worker]     method compressedTexImage3D
+[Worker]     method compressedTexSubImage2D
+[Worker]     method compressedTexSubImage3D
+[Worker]     method constructor
+[Worker]     method copyBufferSubData
+[Worker]     method copyTexImage2D
+[Worker]     method copyTexSubImage2D
+[Worker]     method copyTexSubImage3D
+[Worker]     method createBuffer
+[Worker]     method createFramebuffer
+[Worker]     method createProgram
+[Worker]     method createQuery
+[Worker]     method createRenderbuffer
+[Worker]     method createSampler
+[Worker]     method createShader
+[Worker]     method createTexture
+[Worker]     method createTransformFeedback
+[Worker]     method createVertexArray
+[Worker]     method cullFace
+[Worker]     method deleteBuffer
+[Worker]     method deleteFramebuffer
+[Worker]     method deleteProgram
+[Worker]     method deleteQuery
+[Worker]     method deleteRenderbuffer
+[Worker]     method deleteSampler
+[Worker]     method deleteShader
+[Worker]     method deleteSync
+[Worker]     method deleteTexture
+[Worker]     method deleteTransformFeedback
+[Worker]     method deleteVertexArray
+[Worker]     method depthFunc
+[Worker]     method depthMask
+[Worker]     method depthRange
+[Worker]     method detachShader
+[Worker]     method disable
+[Worker]     method disableVertexAttribArray
+[Worker]     method drawArrays
+[Worker]     method drawArraysInstanced
+[Worker]     method drawBuffers
+[Worker]     method drawElements
+[Worker]     method drawElementsInstanced
+[Worker]     method drawRangeElements
+[Worker]     method enable
+[Worker]     method enableVertexAttribArray
+[Worker]     method endQuery
+[Worker]     method endTransformFeedback
+[Worker]     method fenceSync
+[Worker]     method finish
+[Worker]     method flush
+[Worker]     method framebufferRenderbuffer
+[Worker]     method framebufferTexture2D
+[Worker]     method framebufferTextureLayer
+[Worker]     method frontFace
+[Worker]     method generateMipmap
+[Worker]     method getActiveAttrib
+[Worker]     method getActiveUniform
+[Worker]     method getActiveUniformBlockName
+[Worker]     method getActiveUniformBlockParameter
+[Worker]     method getActiveUniforms
+[Worker]     method getAttachedShaders
+[Worker]     method getAttribLocation
+[Worker]     method getBufferParameter
+[Worker]     method getBufferSubData
+[Worker]     method getContextAttributes
+[Worker]     method getError
+[Worker]     method getExtension
+[Worker]     method getFragDataLocation
+[Worker]     method getFramebufferAttachmentParameter
+[Worker]     method getIndexedParameter
+[Worker]     method getInternalformatParameter
+[Worker]     method getParameter
+[Worker]     method getProgramInfoLog
+[Worker]     method getProgramParameter
+[Worker]     method getQuery
+[Worker]     method getQueryParameter
+[Worker]     method getRenderbufferParameter
+[Worker]     method getSamplerParameter
+[Worker]     method getShaderInfoLog
+[Worker]     method getShaderParameter
+[Worker]     method getShaderPrecisionFormat
+[Worker]     method getShaderSource
+[Worker]     method getSupportedExtensions
+[Worker]     method getSyncParameter
+[Worker]     method getTexParameter
+[Worker]     method getTransformFeedbackVarying
+[Worker]     method getUniform
+[Worker]     method getUniformBlockIndex
+[Worker]     method getUniformIndices
+[Worker]     method getUniformLocation
+[Worker]     method getVertexAttrib
+[Worker]     method getVertexAttribOffset
+[Worker]     method hint
+[Worker]     method invalidateFramebuffer
+[Worker]     method invalidateSubFramebuffer
+[Worker]     method isBuffer
+[Worker]     method isContextLost
+[Worker]     method isEnabled
+[Worker]     method isFramebuffer
+[Worker]     method isProgram
+[Worker]     method isQuery
+[Worker]     method isRenderbuffer
+[Worker]     method isSampler
+[Worker]     method isShader
+[Worker]     method isSync
+[Worker]     method isTexture
+[Worker]     method isTransformFeedback
+[Worker]     method isVertexArray
+[Worker]     method lineWidth
+[Worker]     method linkProgram
+[Worker]     method pauseTransformFeedback
+[Worker]     method pixelStorei
+[Worker]     method polygonOffset
+[Worker]     method readBuffer
+[Worker]     method readPixels
+[Worker]     method renderbufferStorage
+[Worker]     method renderbufferStorageMultisample
+[Worker]     method resumeTransformFeedback
+[Worker]     method sampleCoverage
+[Worker]     method samplerParameterf
+[Worker]     method samplerParameteri
+[Worker]     method scissor
+[Worker]     method shaderSource
+[Worker]     method stencilFunc
+[Worker]     method stencilFuncSeparate
+[Worker]     method stencilMask
+[Worker]     method stencilMaskSeparate
+[Worker]     method stencilOp
+[Worker]     method stencilOpSeparate
+[Worker]     method texImage2D
+[Worker]     method texImage3D
+[Worker]     method texParameterf
+[Worker]     method texParameteri
+[Worker]     method texStorage2D
+[Worker]     method texStorage3D
+[Worker]     method texSubImage2D
+[Worker]     method texSubImage3D
+[Worker]     method transformFeedbackVaryings
+[Worker]     method uniform1f
+[Worker]     method uniform1fv
+[Worker]     method uniform1i
+[Worker]     method uniform1iv
+[Worker]     method uniform1ui
+[Worker]     method uniform1uiv
+[Worker]     method uniform2f
+[Worker]     method uniform2fv
+[Worker]     method uniform2i
+[Worker]     method uniform2iv
+[Worker]     method uniform2ui
+[Worker]     method uniform2uiv
+[Worker]     method uniform3f
+[Worker]     method uniform3fv
+[Worker]     method uniform3i
+[Worker]     method uniform3iv
+[Worker]     method uniform3ui
+[Worker]     method uniform3uiv
+[Worker]     method uniform4f
+[Worker]     method uniform4fv
+[Worker]     method uniform4i
+[Worker]     method uniform4iv
+[Worker]     method uniform4ui
+[Worker]     method uniform4uiv
+[Worker]     method uniformBlockBinding
+[Worker]     method uniformMatrix2fv
+[Worker]     method uniformMatrix2x3fv
+[Worker]     method uniformMatrix2x4fv
+[Worker]     method uniformMatrix3fv
+[Worker]     method uniformMatrix3x2fv
+[Worker]     method uniformMatrix3x4fv
+[Worker]     method uniformMatrix4fv
+[Worker]     method uniformMatrix4x2fv
+[Worker]     method uniformMatrix4x3fv
+[Worker]     method useProgram
+[Worker]     method validateProgram
+[Worker]     method vertexAttrib1f
+[Worker]     method vertexAttrib1fv
+[Worker]     method vertexAttrib2f
+[Worker]     method vertexAttrib2fv
+[Worker]     method vertexAttrib3f
+[Worker]     method vertexAttrib3fv
+[Worker]     method vertexAttrib4f
+[Worker]     method vertexAttrib4fv
+[Worker]     method vertexAttribDivisor
+[Worker]     method vertexAttribI4i
+[Worker]     method vertexAttribI4iv
+[Worker]     method vertexAttribI4ui
+[Worker]     method vertexAttribI4uiv
+[Worker]     method vertexAttribIPointer
+[Worker]     method vertexAttribPointer
+[Worker]     method viewport
+[Worker]     method waitSync
+[Worker] interface WebGLRenderingContext
+[Worker]     attribute @@toStringTag
+[Worker]     attribute ACTIVE_ATTRIBUTES
+[Worker]     attribute ACTIVE_TEXTURE
+[Worker]     attribute ACTIVE_UNIFORMS
+[Worker]     attribute ALIASED_LINE_WIDTH_RANGE
+[Worker]     attribute ALIASED_POINT_SIZE_RANGE
+[Worker]     attribute ALPHA
+[Worker]     attribute ALPHA_BITS
+[Worker]     attribute ALWAYS
+[Worker]     attribute ARRAY_BUFFER
+[Worker]     attribute ARRAY_BUFFER_BINDING
+[Worker]     attribute ATTACHED_SHADERS
+[Worker]     attribute BACK
+[Worker]     attribute BLEND
+[Worker]     attribute BLEND_COLOR
+[Worker]     attribute BLEND_DST_ALPHA
+[Worker]     attribute BLEND_DST_RGB
+[Worker]     attribute BLEND_EQUATION
+[Worker]     attribute BLEND_EQUATION_ALPHA
+[Worker]     attribute BLEND_EQUATION_RGB
+[Worker]     attribute BLEND_SRC_ALPHA
+[Worker]     attribute BLEND_SRC_RGB
+[Worker]     attribute BLUE_BITS
+[Worker]     attribute BOOL
+[Worker]     attribute BOOL_VEC2
+[Worker]     attribute BOOL_VEC3
+[Worker]     attribute BOOL_VEC4
+[Worker]     attribute BROWSER_DEFAULT_WEBGL
+[Worker]     attribute BUFFER_SIZE
+[Worker]     attribute BUFFER_USAGE
+[Worker]     attribute BYTE
+[Worker]     attribute CCW
+[Worker]     attribute CLAMP_TO_EDGE
+[Worker]     attribute COLOR_ATTACHMENT0
+[Worker]     attribute COLOR_BUFFER_BIT
+[Worker]     attribute COLOR_CLEAR_VALUE
+[Worker]     attribute COLOR_WRITEMASK
+[Worker]     attribute COMPILE_STATUS
+[Worker]     attribute COMPRESSED_TEXTURE_FORMATS
+[Worker]     attribute CONSTANT_ALPHA
+[Worker]     attribute CONSTANT_COLOR
+[Worker]     attribute CONTEXT_LOST_WEBGL
+[Worker]     attribute CULL_FACE
+[Worker]     attribute CULL_FACE_MODE
+[Worker]     attribute CURRENT_PROGRAM
+[Worker]     attribute CURRENT_VERTEX_ATTRIB
+[Worker]     attribute CW
+[Worker]     attribute DECR
+[Worker]     attribute DECR_WRAP
+[Worker]     attribute DELETE_STATUS
+[Worker]     attribute DEPTH_ATTACHMENT
+[Worker]     attribute DEPTH_BITS
+[Worker]     attribute DEPTH_BUFFER_BIT
+[Worker]     attribute DEPTH_CLEAR_VALUE
+[Worker]     attribute DEPTH_COMPONENT
+[Worker]     attribute DEPTH_COMPONENT16
+[Worker]     attribute DEPTH_FUNC
+[Worker]     attribute DEPTH_RANGE
+[Worker]     attribute DEPTH_STENCIL
+[Worker]     attribute DEPTH_STENCIL_ATTACHMENT
+[Worker]     attribute DEPTH_TEST
+[Worker]     attribute DEPTH_WRITEMASK
+[Worker]     attribute DITHER
+[Worker]     attribute DONT_CARE
+[Worker]     attribute DST_ALPHA
+[Worker]     attribute DST_COLOR
+[Worker]     attribute DYNAMIC_DRAW
+[Worker]     attribute ELEMENT_ARRAY_BUFFER
+[Worker]     attribute ELEMENT_ARRAY_BUFFER_BINDING
+[Worker]     attribute EQUAL
+[Worker]     attribute FASTEST
+[Worker]     attribute FLOAT
+[Worker]     attribute FLOAT_MAT2
+[Worker]     attribute FLOAT_MAT3
+[Worker]     attribute FLOAT_MAT4
+[Worker]     attribute FLOAT_VEC2
+[Worker]     attribute FLOAT_VEC3
+[Worker]     attribute FLOAT_VEC4
+[Worker]     attribute FRAGMENT_SHADER
+[Worker]     attribute FRAMEBUFFER
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_OBJECT_NAME
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE
+[Worker]     attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL
+[Worker]     attribute FRAMEBUFFER_BINDING
+[Worker]     attribute FRAMEBUFFER_COMPLETE
+[Worker]     attribute FRAMEBUFFER_INCOMPLETE_ATTACHMENT
+[Worker]     attribute FRAMEBUFFER_INCOMPLETE_DIMENSIONS
+[Worker]     attribute FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
+[Worker]     attribute FRAMEBUFFER_UNSUPPORTED
+[Worker]     attribute FRONT
+[Worker]     attribute FRONT_AND_BACK
+[Worker]     attribute FRONT_FACE
+[Worker]     attribute FUNC_ADD
+[Worker]     attribute FUNC_REVERSE_SUBTRACT
+[Worker]     attribute FUNC_SUBTRACT
+[Worker]     attribute GENERATE_MIPMAP_HINT
+[Worker]     attribute GEQUAL
+[Worker]     attribute GREATER
+[Worker]     attribute GREEN_BITS
+[Worker]     attribute HIGH_FLOAT
+[Worker]     attribute HIGH_INT
+[Worker]     attribute IMPLEMENTATION_COLOR_READ_FORMAT
+[Worker]     attribute IMPLEMENTATION_COLOR_READ_TYPE
+[Worker]     attribute INCR
+[Worker]     attribute INCR_WRAP
+[Worker]     attribute INT
+[Worker]     attribute INT_VEC2
+[Worker]     attribute INT_VEC3
+[Worker]     attribute INT_VEC4
+[Worker]     attribute INVALID_ENUM
+[Worker]     attribute INVALID_FRAMEBUFFER_OPERATION
+[Worker]     attribute INVALID_OPERATION
+[Worker]     attribute INVALID_VALUE
+[Worker]     attribute INVERT
+[Worker]     attribute KEEP
+[Worker]     attribute LEQUAL
+[Worker]     attribute LESS
+[Worker]     attribute LINEAR
+[Worker]     attribute LINEAR_MIPMAP_LINEAR
+[Worker]     attribute LINEAR_MIPMAP_NEAREST
+[Worker]     attribute LINES
+[Worker]     attribute LINE_LOOP
+[Worker]     attribute LINE_STRIP
+[Worker]     attribute LINE_WIDTH
+[Worker]     attribute LINK_STATUS
+[Worker]     attribute LOW_FLOAT
+[Worker]     attribute LOW_INT
+[Worker]     attribute LUMINANCE
+[Worker]     attribute LUMINANCE_ALPHA
+[Worker]     attribute MAX_COMBINED_TEXTURE_IMAGE_UNITS
+[Worker]     attribute MAX_CUBE_MAP_TEXTURE_SIZE
+[Worker]     attribute MAX_FRAGMENT_UNIFORM_VECTORS
+[Worker]     attribute MAX_RENDERBUFFER_SIZE
+[Worker]     attribute MAX_TEXTURE_IMAGE_UNITS
+[Worker]     attribute MAX_TEXTURE_SIZE
+[Worker]     attribute MAX_VARYING_VECTORS
+[Worker]     attribute MAX_VERTEX_ATTRIBS
+[Worker]     attribute MAX_VERTEX_TEXTURE_IMAGE_UNITS
+[Worker]     attribute MAX_VERTEX_UNIFORM_VECTORS
+[Worker]     attribute MAX_VIEWPORT_DIMS
+[Worker]     attribute MEDIUM_FLOAT
+[Worker]     attribute MEDIUM_INT
+[Worker]     attribute MIRRORED_REPEAT
+[Worker]     attribute NEAREST
+[Worker]     attribute NEAREST_MIPMAP_LINEAR
+[Worker]     attribute NEAREST_MIPMAP_NEAREST
+[Worker]     attribute NEVER
+[Worker]     attribute NICEST
+[Worker]     attribute NONE
+[Worker]     attribute NOTEQUAL
+[Worker]     attribute NO_ERROR
+[Worker]     attribute ONE
+[Worker]     attribute ONE_MINUS_CONSTANT_ALPHA
+[Worker]     attribute ONE_MINUS_CONSTANT_COLOR
+[Worker]     attribute ONE_MINUS_DST_ALPHA
+[Worker]     attribute ONE_MINUS_DST_COLOR
+[Worker]     attribute ONE_MINUS_SRC_ALPHA
+[Worker]     attribute ONE_MINUS_SRC_COLOR
+[Worker]     attribute OUT_OF_MEMORY
+[Worker]     attribute PACK_ALIGNMENT
+[Worker]     attribute POINTS
+[Worker]     attribute POLYGON_OFFSET_FACTOR
+[Worker]     attribute POLYGON_OFFSET_FILL
+[Worker]     attribute POLYGON_OFFSET_UNITS
+[Worker]     attribute RED_BITS
+[Worker]     attribute RENDERBUFFER
+[Worker]     attribute RENDERBUFFER_ALPHA_SIZE
+[Worker]     attribute RENDERBUFFER_BINDING
+[Worker]     attribute RENDERBUFFER_BLUE_SIZE
+[Worker]     attribute RENDERBUFFER_DEPTH_SIZE
+[Worker]     attribute RENDERBUFFER_GREEN_SIZE
+[Worker]     attribute RENDERBUFFER_HEIGHT
+[Worker]     attribute RENDERBUFFER_INTERNAL_FORMAT
+[Worker]     attribute RENDERBUFFER_RED_SIZE
+[Worker]     attribute RENDERBUFFER_STENCIL_SIZE
+[Worker]     attribute RENDERBUFFER_WIDTH
+[Worker]     attribute RENDERER
+[Worker]     attribute REPEAT
+[Worker]     attribute REPLACE
+[Worker]     attribute RGB
+[Worker]     attribute RGB565
+[Worker]     attribute RGB5_A1
+[Worker]     attribute RGBA
+[Worker]     attribute RGBA4
+[Worker]     attribute SAMPLER_2D
+[Worker]     attribute SAMPLER_CUBE
+[Worker]     attribute SAMPLES
+[Worker]     attribute SAMPLE_ALPHA_TO_COVERAGE
+[Worker]     attribute SAMPLE_BUFFERS
+[Worker]     attribute SAMPLE_COVERAGE
+[Worker]     attribute SAMPLE_COVERAGE_INVERT
+[Worker]     attribute SAMPLE_COVERAGE_VALUE
+[Worker]     attribute SCISSOR_BOX
+[Worker]     attribute SCISSOR_TEST
+[Worker]     attribute SHADER_TYPE
+[Worker]     attribute SHADING_LANGUAGE_VERSION
+[Worker]     attribute SHORT
+[Worker]     attribute SRC_ALPHA
+[Worker]     attribute SRC_ALPHA_SATURATE
+[Worker]     attribute SRC_COLOR
+[Worker]     attribute STATIC_DRAW
+[Worker]     attribute STENCIL_ATTACHMENT
+[Worker]     attribute STENCIL_BACK_FAIL
+[Worker]     attribute STENCIL_BACK_FUNC
+[Worker]     attribute STENCIL_BACK_PASS_DEPTH_FAIL
+[Worker]     attribute STENCIL_BACK_PASS_DEPTH_PASS
+[Worker]     attribute STENCIL_BACK_REF
+[Worker]     attribute STENCIL_BACK_VALUE_MASK
+[Worker]     attribute STENCIL_BACK_WRITEMASK
+[Worker]     attribute STENCIL_BITS
+[Worker]     attribute STENCIL_BUFFER_BIT
+[Worker]     attribute STENCIL_CLEAR_VALUE
+[Worker]     attribute STENCIL_FAIL
+[Worker]     attribute STENCIL_FUNC
+[Worker]     attribute STENCIL_INDEX
+[Worker]     attribute STENCIL_INDEX8
+[Worker]     attribute STENCIL_PASS_DEPTH_FAIL
+[Worker]     attribute STENCIL_PASS_DEPTH_PASS
+[Worker]     attribute STENCIL_REF
+[Worker]     attribute STENCIL_TEST
+[Worker]     attribute STENCIL_VALUE_MASK
+[Worker]     attribute STENCIL_WRITEMASK
+[Worker]     attribute STREAM_DRAW
+[Worker]     attribute SUBPIXEL_BITS
+[Worker]     attribute TEXTURE
+[Worker]     attribute TEXTURE0
+[Worker]     attribute TEXTURE1
+[Worker]     attribute TEXTURE10
+[Worker]     attribute TEXTURE11
+[Worker]     attribute TEXTURE12
+[Worker]     attribute TEXTURE13
+[Worker]     attribute TEXTURE14
+[Worker]     attribute TEXTURE15
+[Worker]     attribute TEXTURE16
+[Worker]     attribute TEXTURE17
+[Worker]     attribute TEXTURE18
+[Worker]     attribute TEXTURE19
+[Worker]     attribute TEXTURE2
+[Worker]     attribute TEXTURE20
+[Worker]     attribute TEXTURE21
+[Worker]     attribute TEXTURE22
+[Worker]     attribute TEXTURE23
+[Worker]     attribute TEXTURE24
+[Worker]     attribute TEXTURE25
+[Worker]     attribute TEXTURE26
+[Worker]     attribute TEXTURE27
+[Worker]     attribute TEXTURE28
+[Worker]     attribute TEXTURE29
+[Worker]     attribute TEXTURE3
+[Worker]     attribute TEXTURE30
+[Worker]     attribute TEXTURE31
+[Worker]     attribute TEXTURE4
+[Worker]     attribute TEXTURE5
+[Worker]     attribute TEXTURE6
+[Worker]     attribute TEXTURE7
+[Worker]     attribute TEXTURE8
+[Worker]     attribute TEXTURE9
+[Worker]     attribute TEXTURE_2D
+[Worker]     attribute TEXTURE_BINDING_2D
+[Worker]     attribute TEXTURE_BINDING_CUBE_MAP
+[Worker]     attribute TEXTURE_CUBE_MAP
+[Worker]     attribute TEXTURE_CUBE_MAP_NEGATIVE_X
+[Worker]     attribute TEXTURE_CUBE_MAP_NEGATIVE_Y
+[Worker]     attribute TEXTURE_CUBE_MAP_NEGATIVE_Z
+[Worker]     attribute TEXTURE_CUBE_MAP_POSITIVE_X
+[Worker]     attribute TEXTURE_CUBE_MAP_POSITIVE_Y
+[Worker]     attribute TEXTURE_CUBE_MAP_POSITIVE_Z
+[Worker]     attribute TEXTURE_MAG_FILTER
+[Worker]     attribute TEXTURE_MIN_FILTER
+[Worker]     attribute TEXTURE_WRAP_S
+[Worker]     attribute TEXTURE_WRAP_T
+[Worker]     attribute TRIANGLES
+[Worker]     attribute TRIANGLE_FAN
+[Worker]     attribute TRIANGLE_STRIP
+[Worker]     attribute UNPACK_ALIGNMENT
+[Worker]     attribute UNPACK_COLORSPACE_CONVERSION_WEBGL
+[Worker]     attribute UNPACK_FLIP_Y_WEBGL
+[Worker]     attribute UNPACK_PREMULTIPLY_ALPHA_WEBGL
+[Worker]     attribute UNSIGNED_BYTE
+[Worker]     attribute UNSIGNED_INT
+[Worker]     attribute UNSIGNED_SHORT
+[Worker]     attribute UNSIGNED_SHORT_4_4_4_4
+[Worker]     attribute UNSIGNED_SHORT_5_5_5_1
+[Worker]     attribute UNSIGNED_SHORT_5_6_5
+[Worker]     attribute VALIDATE_STATUS
+[Worker]     attribute VENDOR
+[Worker]     attribute VERSION
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_ENABLED
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_NORMALIZED
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_POINTER
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_SIZE
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_STRIDE
+[Worker]     attribute VERTEX_ATTRIB_ARRAY_TYPE
+[Worker]     attribute VERTEX_SHADER
+[Worker]     attribute VIEWPORT
+[Worker]     attribute ZERO
+[Worker]     getter canvas
+[Worker]     getter drawingBufferHeight
+[Worker]     getter drawingBufferWidth
+[Worker]     method activeTexture
+[Worker]     method attachShader
+[Worker]     method bindAttribLocation
+[Worker]     method bindBuffer
+[Worker]     method bindFramebuffer
+[Worker]     method bindRenderbuffer
+[Worker]     method bindTexture
+[Worker]     method blendColor
+[Worker]     method blendEquation
+[Worker]     method blendEquationSeparate
+[Worker]     method blendFunc
+[Worker]     method blendFuncSeparate
+[Worker]     method bufferData
+[Worker]     method bufferSubData
+[Worker]     method checkFramebufferStatus
+[Worker]     method clear
+[Worker]     method clearColor
+[Worker]     method clearDepth
+[Worker]     method clearStencil
+[Worker]     method colorMask
+[Worker]     method commit
+[Worker]     method compileShader
+[Worker]     method compressedTexImage2D
+[Worker]     method compressedTexSubImage2D
+[Worker]     method constructor
+[Worker]     method copyTexImage2D
+[Worker]     method copyTexSubImage2D
+[Worker]     method createBuffer
+[Worker]     method createFramebuffer
+[Worker]     method createProgram
+[Worker]     method createRenderbuffer
+[Worker]     method createShader
+[Worker]     method createTexture
+[Worker]     method cullFace
+[Worker]     method deleteBuffer
+[Worker]     method deleteFramebuffer
+[Worker]     method deleteProgram
+[Worker]     method deleteRenderbuffer
+[Worker]     method deleteShader
+[Worker]     method deleteTexture
+[Worker]     method depthFunc
+[Worker]     method depthMask
+[Worker]     method depthRange
+[Worker]     method detachShader
+[Worker]     method disable
+[Worker]     method disableVertexAttribArray
+[Worker]     method drawArrays
+[Worker]     method drawElements
+[Worker]     method enable
+[Worker]     method enableVertexAttribArray
+[Worker]     method finish
+[Worker]     method flush
+[Worker]     method framebufferRenderbuffer
+[Worker]     method framebufferTexture2D
+[Worker]     method frontFace
+[Worker]     method generateMipmap
+[Worker]     method getActiveAttrib
+[Worker]     method getActiveUniform
+[Worker]     method getAttachedShaders
+[Worker]     method getAttribLocation
+[Worker]     method getBufferParameter
+[Worker]     method getContextAttributes
+[Worker]     method getError
+[Worker]     method getExtension
+[Worker]     method getFramebufferAttachmentParameter
+[Worker]     method getParameter
+[Worker]     method getProgramInfoLog
+[Worker]     method getProgramParameter
+[Worker]     method getRenderbufferParameter
+[Worker]     method getShaderInfoLog
+[Worker]     method getShaderParameter
+[Worker]     method getShaderPrecisionFormat
+[Worker]     method getShaderSource
+[Worker]     method getSupportedExtensions
+[Worker]     method getTexParameter
+[Worker]     method getUniform
+[Worker]     method getUniformLocation
+[Worker]     method getVertexAttrib
+[Worker]     method getVertexAttribOffset
+[Worker]     method hint
+[Worker]     method isBuffer
+[Worker]     method isContextLost
+[Worker]     method isEnabled
+[Worker]     method isFramebuffer
+[Worker]     method isProgram
+[Worker]     method isRenderbuffer
+[Worker]     method isShader
+[Worker]     method isTexture
+[Worker]     method lineWidth
+[Worker]     method linkProgram
+[Worker]     method pixelStorei
+[Worker]     method polygonOffset
+[Worker]     method readPixels
+[Worker]     method renderbufferStorage
+[Worker]     method sampleCoverage
+[Worker]     method scissor
+[Worker]     method shaderSource
+[Worker]     method stencilFunc
+[Worker]     method stencilFuncSeparate
+[Worker]     method stencilMask
+[Worker]     method stencilMaskSeparate
+[Worker]     method stencilOp
+[Worker]     method stencilOpSeparate
+[Worker]     method texImage2D
+[Worker]     method texParameterf
+[Worker]     method texParameteri
+[Worker]     method texSubImage2D
+[Worker]     method uniform1f
+[Worker]     method uniform1fv
+[Worker]     method uniform1i
+[Worker]     method uniform1iv
+[Worker]     method uniform2f
+[Worker]     method uniform2fv
+[Worker]     method uniform2i
+[Worker]     method uniform2iv
+[Worker]     method uniform3f
+[Worker]     method uniform3fv
+[Worker]     method uniform3i
+[Worker]     method uniform3iv
+[Worker]     method uniform4f
+[Worker]     method uniform4fv
+[Worker]     method uniform4i
+[Worker]     method uniform4iv
+[Worker]     method uniformMatrix2fv
+[Worker]     method uniformMatrix3fv
+[Worker]     method uniformMatrix4fv
+[Worker]     method useProgram
+[Worker]     method validateProgram
+[Worker]     method vertexAttrib1f
+[Worker]     method vertexAttrib1fv
+[Worker]     method vertexAttrib2f
+[Worker]     method vertexAttrib2fv
+[Worker]     method vertexAttrib3f
+[Worker]     method vertexAttrib3fv
+[Worker]     method vertexAttrib4f
+[Worker]     method vertexAttrib4fv
+[Worker]     method vertexAttribPointer
+[Worker]     method viewport
+[Worker] interface WebSocket : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     attribute CLOSED
+[Worker]     attribute CLOSING
+[Worker]     attribute CONNECTING
+[Worker]     attribute OPEN
+[Worker]     getter binaryType
+[Worker]     getter bufferedAmount
+[Worker]     getter extensions
+[Worker]     getter onclose
+[Worker]     getter onerror
+[Worker]     getter onmessage
+[Worker]     getter onopen
+[Worker]     getter protocol
+[Worker]     getter readyState
+[Worker]     getter url
+[Worker]     method close
+[Worker]     method constructor
+[Worker]     method send
+[Worker]     setter binaryType
+[Worker]     setter onclose
+[Worker]     setter onerror
+[Worker]     setter onmessage
+[Worker]     setter onopen
+[Worker] interface WorkerGlobalScope : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     getter addressSpace
+[Worker]     getter caches
+[Worker]     getter crypto
+[Worker]     getter indexedDB
+[Worker]     getter isSecureContext
+[Worker]     getter location
+[Worker]     getter navigator
+[Worker]     getter onerror
+[Worker]     getter onrejectionhandled
+[Worker]     getter onunhandledrejection
+[Worker]     getter origin
+[Worker]     getter performance
+[Worker]     getter self
+[Worker]     method atob
+[Worker]     method btoa
+[Worker]     method clearInterval
+[Worker]     method clearTimeout
+[Worker]     method constructor
+[Worker]     method createImageBitmap
+[Worker]     method fetch
+[Worker]     method importScripts
+[Worker]     method setInterval
+[Worker]     method setTimeout
+[Worker]     setter onerror
+[Worker]     setter onrejectionhandled
+[Worker]     setter onunhandledrejection
+[Worker]     setter origin
+[Worker] interface WorkerLocation
+[Worker]     attribute @@toStringTag
+[Worker]     getter hash
+[Worker]     getter host
+[Worker]     getter hostname
+[Worker]     getter href
+[Worker]     getter origin
+[Worker]     getter pathname
+[Worker]     getter port
+[Worker]     getter protocol
+[Worker]     getter search
+[Worker]     method constructor
+[Worker]     method toString
+[Worker] interface WorkerNavigator
+[Worker]     attribute @@toStringTag
+[Worker]     getter appCodeName
+[Worker]     getter appName
+[Worker]     getter appVersion
+[Worker]     getter budget
+[Worker]     getter connection
+[Worker]     getter hardwareConcurrency
+[Worker]     getter onLine
+[Worker]     getter permissions
+[Worker]     getter platform
+[Worker]     getter product
+[Worker]     getter storage
+[Worker]     getter userAgent
+[Worker]     method constructor
+[Worker] interface WritableStream
+[Worker]     getter locked
+[Worker]     method abort
+[Worker]     method constructor
+[Worker]     method getWriter
+[Worker] interface XMLHttpRequest : XMLHttpRequestEventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     attribute DONE
+[Worker]     attribute HEADERS_RECEIVED
+[Worker]     attribute LOADING
+[Worker]     attribute OPENED
+[Worker]     attribute UNSENT
+[Worker]     getter onreadystatechange
+[Worker]     getter readyState
+[Worker]     getter response
+[Worker]     getter responseText
+[Worker]     getter responseType
+[Worker]     getter responseURL
+[Worker]     getter responseXML
+[Worker]     getter status
+[Worker]     getter statusText
+[Worker]     getter timeout
+[Worker]     getter upload
+[Worker]     getter withCredentials
+[Worker]     method abort
+[Worker]     method constructor
+[Worker]     method getAllResponseHeaders
+[Worker]     method getResponseHeader
+[Worker]     method open
+[Worker]     method overrideMimeType
+[Worker]     method send
+[Worker]     method setRequestHeader
+[Worker]     setter onreadystatechange
+[Worker]     setter responseType
+[Worker]     setter timeout
+[Worker]     setter withCredentials
+[Worker] interface XMLHttpRequestEventTarget : EventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     getter onabort
+[Worker]     getter onerror
+[Worker]     getter onload
+[Worker]     getter onloadend
+[Worker]     getter onloadstart
+[Worker]     getter onprogress
+[Worker]     getter ontimeout
+[Worker]     method constructor
+[Worker]     setter onabort
+[Worker]     setter onerror
+[Worker]     setter onload
+[Worker]     setter onloadend
+[Worker]     setter onloadstart
+[Worker]     setter onprogress
+[Worker]     setter ontimeout
+[Worker] interface XMLHttpRequestUpload : XMLHttpRequestEventTarget
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker] [GLOBAL OBJECT]
+[Worker]     attribute console
+[Worker]     attribute internals
+[Worker]     getter name
+[Worker]     getter onconnect
+[Worker]     method close
+[Worker]     method gc
+[Worker]     method webkitRequestFileSystem
+[Worker]     method webkitRequestFileSystemSync
+[Worker]     method webkitResolveLocalFileSystemSyncURL
+[Worker]     method webkitResolveLocalFileSystemURL
+[Worker]     setter onconnect
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-wpt/external/wpt/service-workers/service-worker/navigation-preload/README.txt b/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-wpt/external/wpt/service-workers/service-worker/navigation-preload/README.txt
deleted file mode 100644
index 3d664ab7..0000000
--- a/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload-wpt/external/wpt/service-workers/service-worker/navigation-preload/README.txt
+++ /dev/null
@@ -1 +0,0 @@
-This directory is for testing the navigation preload feature of service workers.
diff --git a/third_party/WebKit/LayoutTests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt b/third_party/WebKit/LayoutTests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
index 9c921d6..56ef204 100644
--- a/third_party/WebKit/LayoutTests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
@@ -179,6 +179,7 @@
 interface FetchEvent : ExtendableEvent
     getter clientId
     getter isReload
+    getter preloadResponse
     getter request
     method constructor
     method respondWith
@@ -394,6 +395,12 @@
     method postMessage
     method start
     setter onmessage
+interface NavigationPreloadManager
+    method constructor
+    method disable
+    method enable
+    method getState
+    method setHeaderValue
 interface Notification : EventTarget
     static getter maxActions
     static getter permission
@@ -516,6 +523,7 @@
 interface ServiceWorkerRegistration : EventTarget
     getter active
     getter installing
+    getter navigationPreload
     getter onupdatefound
     getter pushManager
     getter scope
diff --git a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt
index 558ab74..4f1d65c 100644
--- a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt
@@ -422,6 +422,13 @@
 [Worker]     method postMessage
 [Worker]     method start
 [Worker]     setter onmessage
+[Worker] interface NavigationPreloadManager
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method disable
+[Worker]     method enable
+[Worker]     method getState
+[Worker]     method setHeaderValue
 [Worker] interface Notification : EventTarget
 [Worker]     static getter maxActions
 [Worker]     static getter permission
@@ -527,6 +534,7 @@
 [Worker]     attribute @@toStringTag
 [Worker]     getter active
 [Worker]     getter installing
+[Worker]     getter navigationPreload
 [Worker]     getter onupdatefound
 [Worker]     getter pushManager
 [Worker]     getter scope
diff --git a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-shared-worker-expected.txt b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-shared-worker-expected.txt
index 6ecc346e..fe9a79453 100644
--- a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-shared-worker-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-shared-worker-expected.txt
@@ -417,6 +417,13 @@
 [Worker]     method postMessage
 [Worker]     method start
 [Worker]     setter onmessage
+[Worker] interface NavigationPreloadManager
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method disable
+[Worker]     method enable
+[Worker]     method getState
+[Worker]     method setHeaderValue
 [Worker] interface Notification : EventTarget
 [Worker]     static getter maxActions
 [Worker]     static getter permission
@@ -522,6 +529,7 @@
 [Worker]     attribute @@toStringTag
 [Worker]     getter active
 [Worker]     getter installing
+[Worker]     getter navigationPreload
 [Worker]     getter onupdatefound
 [Worker]     getter pushManager
 [Worker]     getter scope
diff --git a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-dedicated-worker-expected.txt b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-dedicated-worker-expected.txt
index 0b22d590..7f49c3b5 100644
--- a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-dedicated-worker-expected.txt
+++ b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-dedicated-worker-expected.txt
@@ -645,6 +645,13 @@
 [Worker]     method postMessage
 [Worker]     method start
 [Worker]     setter onmessage
+[Worker] interface NavigationPreloadManager
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method disable
+[Worker]     method enable
+[Worker]     method getState
+[Worker]     method setHeaderValue
 [Worker] interface NetworkInformation : EventTarget
 [Worker]     attribute @@toStringTag
 [Worker]     getter downlinkMax
@@ -859,6 +866,7 @@
 [Worker]     getter active
 [Worker]     getter backgroundFetch
 [Worker]     getter installing
+[Worker]     getter navigationPreload
 [Worker]     getter onupdatefound
 [Worker]     getter paymentManager
 [Worker]     getter pushManager
diff --git a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
index 155cbd5..0325aab 100644
--- a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
@@ -4294,6 +4294,13 @@
     method removeNamedItemNS
     method setNamedItem
     method setNamedItemNS
+interface NavigationPreloadManager
+    attribute @@toStringTag
+    method constructor
+    method disable
+    method enable
+    method getState
+    method setHeaderValue
 interface Navigator
     attribute @@toStringTag
     getter appCodeName
@@ -6426,6 +6433,7 @@
     getter active
     getter backgroundFetch
     getter installing
+    getter navigationPreload
     getter onupdatefound
     getter paymentManager
     getter pushManager
diff --git a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-shared-worker-expected.txt b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-shared-worker-expected.txt
index c661271f1..9709dba 100644
--- a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-shared-worker-expected.txt
+++ b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-shared-worker-expected.txt
@@ -640,6 +640,13 @@
 [Worker]     method postMessage
 [Worker]     method start
 [Worker]     setter onmessage
+[Worker] interface NavigationPreloadManager
+[Worker]     attribute @@toStringTag
+[Worker]     method constructor
+[Worker]     method disable
+[Worker]     method enable
+[Worker]     method getState
+[Worker]     method setHeaderValue
 [Worker] interface NetworkInformation : EventTarget
 [Worker]     attribute @@toStringTag
 [Worker]     getter downlinkMax
@@ -854,6 +861,7 @@
 [Worker]     getter active
 [Worker]     getter backgroundFetch
 [Worker]     getter installing
+[Worker]     getter navigationPreload
 [Worker]     getter onupdatefound
 [Worker]     getter paymentManager
 [Worker]     getter pushManager
diff --git a/third_party/WebKit/Source/bindings/bindings.gni b/third_party/WebKit/Source/bindings/bindings.gni
index 9fc25956..73075ca 100644
--- a/third_party/WebKit/Source/bindings/bindings.gni
+++ b/third_party/WebKit/Source/bindings/bindings.gni
@@ -135,8 +135,9 @@
                     "core/v8/TraceWrapperMember.h",
                     "core/v8/TraceWrapperV8Reference.h",
                     "core/v8/Transferables.h",
-                    "core/v8/ToV8.cpp",
                     "core/v8/ToV8.h",
+                    "core/v8/ToV8ForCore.h",
+                    "core/v8/ToV8ForCore.cpp",
                     "core/v8/UseCounterCallback.cpp",
                     "core/v8/UseCounterCallback.h",
                     "core/v8/V8AbstractEventListener.cpp",
diff --git a/third_party/WebKit/Source/bindings/core/v8/LocalWindowProxy.cpp b/third_party/WebKit/Source/bindings/core/v8/LocalWindowProxy.cpp
index bf10fc7..3474750 100644
--- a/third_party/WebKit/Source/bindings/core/v8/LocalWindowProxy.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/LocalWindowProxy.cpp
@@ -33,7 +33,7 @@
 #include "bindings/core/v8/ConditionalFeaturesForCore.h"
 #include "bindings/core/v8/DOMWrapperWorld.h"
 #include "bindings/core/v8/ScriptController.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMActivityLogger.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
diff --git a/third_party/WebKit/Source/bindings/core/v8/Maplike.h b/third_party/WebKit/Source/bindings/core/v8/Maplike.h
index 62f1d1ff..7e0e8ce 100644
--- a/third_party/WebKit/Source/bindings/core/v8/Maplike.h
+++ b/third_party/WebKit/Source/bindings/core/v8/Maplike.h
@@ -7,7 +7,7 @@
 
 #include "bindings/core/v8/Iterable.h"
 #include "bindings/core/v8/ScriptValue.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/bindings/core/v8/NativeValueTraitsImplTest.cpp b/third_party/WebKit/Source/bindings/core/v8/NativeValueTraitsImplTest.cpp
index 062d7ff..3674e80 100644
--- a/third_party/WebKit/Source/bindings/core/v8/NativeValueTraitsImplTest.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/NativeValueTraitsImplTest.cpp
@@ -8,7 +8,7 @@
 #include "bindings/core/v8/ExceptionState.h"
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/TestSequenceCallback.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8BindingForTesting.h"
 #include "bindings/core/v8/V8Internals.h"
 #include "platform/wtf/Vector.h"
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptPromise.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptPromise.cpp
index 926dfbf..dc76a1d 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ScriptPromise.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/ScriptPromise.cpp
@@ -31,7 +31,7 @@
 #include "bindings/core/v8/ScriptPromise.h"
 #include "bindings/core/v8/ExceptionMessages.h"
 #include "bindings/core/v8/ExceptionState.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8ThrowException.h"
 #include "core/dom/DOMException.h"
 #include "platform/InstanceCounters.h"
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptPromiseProperty.h b/third_party/WebKit/Source/bindings/core/v8/ScriptPromiseProperty.h
index c4459355..14c96ed 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ScriptPromiseProperty.h
+++ b/third_party/WebKit/Source/bindings/core/v8/ScriptPromiseProperty.h
@@ -7,7 +7,7 @@
 
 #include "bindings/core/v8/ScriptPromise.h"
 #include "bindings/core/v8/ScriptPromisePropertyBase.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "platform/ScriptForbiddenScope.h"
 #include "platform/wtf/Noncopyable.h"
 #include "platform/wtf/PassRefPtr.h"
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptPromiseResolver.h b/third_party/WebKit/Source/bindings/core/v8/ScriptPromiseResolver.h
index aea2963..d2c360e 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ScriptPromiseResolver.h
+++ b/third_party/WebKit/Source/bindings/core/v8/ScriptPromiseResolver.h
@@ -8,7 +8,7 @@
 #include "bindings/core/v8/ScopedPersistent.h"
 #include "bindings/core/v8/ScriptPromise.h"
 #include "bindings/core/v8/ScriptState.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "core/CoreExport.h"
 #include "core/dom/ExecutionContext.h"
 #include "core/dom/SuspendableObject.h"
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitorTest.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitorTest.cpp
index c7392e6..111bc17 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitorTest.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitorTest.cpp
@@ -4,7 +4,7 @@
 
 #include "bindings/core/v8/ScriptWrappableVisitor.h"
 
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/TraceWrapperV8Reference.h"
 #include "bindings/core/v8/V8BindingForTesting.h"
 #include "bindings/core/v8/V8GCController.h"
diff --git a/third_party/WebKit/Source/bindings/core/v8/ToV8.h b/third_party/WebKit/Source/bindings/core/v8/ToV8.h
index e96c472b..433c174 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ToV8.h
+++ b/third_party/WebKit/Source/bindings/core/v8/ToV8.h
@@ -17,17 +17,12 @@
 #include "bindings/core/v8/ScriptWrappable.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "core/CoreExport.h"
-#include "core/dom/NotShared.h"
 #include "platform/heap/Handle.h"
 #include "platform/wtf/Forward.h"
 #include "v8/include/v8.h"
 
 namespace blink {
 
-class DOMWindow;
-class Dictionary;
-class EventTarget;
-
 // ScriptWrappable
 
 inline v8::Local<v8::Value> ToV8(ScriptWrappable* impl,
@@ -44,21 +39,6 @@
   return wrapper;
 }
 
-inline v8::Local<v8::Value> ToV8(Node* impl,
-                                 v8::Local<v8::Object> creation_context,
-                                 v8::Isolate* isolate) {
-  return ToV8(ScriptWrappable::FromNode(impl), creation_context, isolate);
-}
-
-// Special versions for DOMWindow and EventTarget
-
-CORE_EXPORT v8::Local<v8::Value> ToV8(DOMWindow*,
-                                      v8::Local<v8::Object> creation_context,
-                                      v8::Isolate*);
-CORE_EXPORT v8::Local<v8::Value> ToV8(EventTarget*,
-                                      v8::Local<v8::Object> creation_context,
-                                      v8::Isolate*);
-
 // Primitives
 
 inline v8::Local<v8::Value> ToV8(const String& value,
@@ -195,13 +175,6 @@
 
 // Dictionary
 
-inline v8::Local<v8::Value> ToV8(const Dictionary& value,
-                                 v8::Local<v8::Object> creation_context,
-                                 v8::Isolate* isolate) {
-  NOTREACHED();
-  return v8::Undefined(isolate);
-}
-
 inline v8::Local<v8::Value> ToV8(const IDLDictionaryBase& value,
                                  v8::Local<v8::Object> creation_context,
                                  v8::Isolate* isolate) {
@@ -214,7 +187,7 @@
 // overloads below.
 template <typename Sequence>
 inline v8::Local<v8::Value> ToV8SequenceInternal(
-    const Sequence& sequence,
+    const Sequence&,
     v8::Local<v8::Object> creation_context,
     v8::Isolate*);
 
@@ -276,13 +249,6 @@
   return object;
 }
 
-template <typename T>
-inline v8::Local<v8::Value> ToV8(NotShared<T> value,
-                                 v8::Local<v8::Object> creation_context,
-                                 v8::Isolate* isolate) {
-  return ToV8(value.View(), creation_context, isolate);
-}
-
 template <typename Sequence>
 inline v8::Local<v8::Value> ToV8SequenceInternal(
     const Sequence& sequence,
@@ -337,4 +303,4 @@
 
 }  // namespace blink
 
-#endif  // ToV8_h
+#endif  // ToV8ForPlatform_h
diff --git a/third_party/WebKit/Source/bindings/core/v8/ToV8.cpp b/third_party/WebKit/Source/bindings/core/v8/ToV8ForCore.cpp
similarity index 92%
rename from third_party/WebKit/Source/bindings/core/v8/ToV8.cpp
rename to third_party/WebKit/Source/bindings/core/v8/ToV8ForCore.cpp
index 08ed539..4db3bc5 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ToV8.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/ToV8ForCore.cpp
@@ -1,8 +1,8 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
+// Copyright 2017 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 "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 
 #include "bindings/core/v8/WindowProxy.h"
 #include "core/events/EventTarget.h"
diff --git a/third_party/WebKit/Source/bindings/core/v8/ToV8ForCore.h b/third_party/WebKit/Source/bindings/core/v8/ToV8ForCore.h
new file mode 100644
index 0000000..a41ba2c
--- /dev/null
+++ b/third_party/WebKit/Source/bindings/core/v8/ToV8ForCore.h
@@ -0,0 +1,57 @@
+// Copyright 2017 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 ToV8ForCore_h
+#define ToV8ForCore_h
+
+// ToV8() provides C++ -> V8 conversion. Note that ToV8() can return an empty
+// handle. Call sites must check IsEmpty() before using return value.
+
+#include "bindings/core/v8/ScriptWrappable.h"
+#include "bindings/core/v8/ToV8.h"
+#include "core/CoreExport.h"
+#include "core/dom/NotShared.h"
+#include "v8/include/v8.h"
+
+namespace blink {
+
+class DOMWindow;
+class Dictionary;
+class EventTarget;
+class Node;
+
+inline v8::Local<v8::Value> ToV8(Node* impl,
+                                 v8::Local<v8::Object> creation_context,
+                                 v8::Isolate* isolate) {
+  return ToV8(ScriptWrappable::FromNode(impl), creation_context, isolate);
+}
+
+// Special versions for DOMWindow and EventTarget
+
+CORE_EXPORT v8::Local<v8::Value> ToV8(DOMWindow*,
+                                      v8::Local<v8::Object> creation_context,
+                                      v8::Isolate*);
+CORE_EXPORT v8::Local<v8::Value> ToV8(EventTarget*,
+                                      v8::Local<v8::Object> creation_context,
+                                      v8::Isolate*);
+
+// Dictionary
+
+inline v8::Local<v8::Value> ToV8(const Dictionary& value,
+                                 v8::Local<v8::Object> creation_context,
+                                 v8::Isolate* isolate) {
+  NOTREACHED();
+  return v8::Undefined(isolate);
+}
+
+template <typename T>
+inline v8::Local<v8::Value> ToV8(NotShared<T> value,
+                                 v8::Local<v8::Object> creation_context,
+                                 v8::Isolate* isolate) {
+  return ToV8(value.View(), creation_context, isolate);
+}
+
+}  // namespace blink
+
+#endif  // ToV8ForCore_h
diff --git a/third_party/WebKit/Source/bindings/core/v8/ToV8Test.cpp b/third_party/WebKit/Source/bindings/core/v8/ToV8Test.cpp
index 9e9c4e8..e724070 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ToV8Test.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/ToV8Test.cpp
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 
 #include <limits>
 #include "bindings/core/v8/V8Binding.h"
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8BindingTest.cpp b/third_party/WebKit/Source/bindings/core/v8/V8BindingTest.cpp
index 5d34a460..249d314 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8BindingTest.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/V8BindingTest.cpp
@@ -5,7 +5,7 @@
 #include "bindings/core/v8/V8Binding.h"
 
 #include "bindings/core/v8/ExceptionState.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8BindingForTesting.h"
 #include "platform/wtf/Vector.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8IteratorResultValue.h b/third_party/WebKit/Source/bindings/core/v8/V8IteratorResultValue.h
index 0a53051a1..cee2df0 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8IteratorResultValue.h
+++ b/third_party/WebKit/Source/bindings/core/v8/V8IteratorResultValue.h
@@ -6,7 +6,7 @@
 #define V8IteratorResultValue_h
 
 #include "bindings/core/v8/ScriptValue.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "core/CoreExport.h"
 #include "v8/include/v8.h"
 
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8ObjectBuilder.h b/third_party/WebKit/Source/bindings/core/v8/V8ObjectBuilder.h
index f8e659b..28b08941 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8ObjectBuilder.h
+++ b/third_party/WebKit/Source/bindings/core/v8/V8ObjectBuilder.h
@@ -5,7 +5,7 @@
 #ifndef V8ObjectBuilder_h
 #define V8ObjectBuilder_h
 
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "core/CoreExport.h"
 #include "platform/heap/Handle.h"
 #include "platform/wtf/text/WTFString.h"
diff --git a/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueDeserializer.cpp b/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueDeserializer.cpp
index 48bb7a8..1bb3b01 100644
--- a/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueDeserializer.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueDeserializer.cpp
@@ -4,7 +4,7 @@
 
 #include "bindings/core/v8/serialization/V8ScriptValueDeserializer.h"
 
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "core/dom/CompositorProxy.h"
 #include "core/dom/DOMArrayBuffer.h"
 #include "core/dom/DOMSharedArrayBuffer.h"
diff --git a/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializer.cpp b/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializer.cpp
index 22202f6e7..eb24a7d 100644
--- a/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializer.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializer.cpp
@@ -4,7 +4,7 @@
 
 #include "bindings/core/v8/serialization/V8ScriptValueSerializer.h"
 
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Blob.h"
 #include "bindings/core/v8/V8CompositorProxy.h"
 #include "bindings/core/v8/V8File.h"
diff --git a/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializerTest.cpp b/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializerTest.cpp
index 9d908e390..87424b9 100644
--- a/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializerTest.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializerTest.cpp
@@ -219,7 +219,7 @@
   ASSERT_TRUE(V8ImageData::hasInstance(result, scope.GetIsolate()));
   ImageData* new_image_data = V8ImageData::toImpl(result.As<v8::Object>());
   EXPECT_NE(image_data, new_image_data);
-  EXPECT_EQ(image_data->size(), new_image_data->size());
+  EXPECT_EQ(image_data->Size(), new_image_data->Size());
   EXPECT_EQ(image_data->data()->length(), new_image_data->data()->length());
   EXPECT_EQ(200, new_image_data->data()->Data()[0]);
 }
@@ -237,7 +237,7 @@
       V8ScriptValueDeserializer(script_state, input).Deserialize();
   ASSERT_TRUE(V8ImageData::hasInstance(result, scope.GetIsolate()));
   ImageData* new_image_data = V8ImageData::toImpl(result.As<v8::Object>());
-  EXPECT_EQ(IntSize(2, 1), new_image_data->size());
+  EXPECT_EQ(IntSize(2, 1), new_image_data->Size());
   EXPECT_EQ(8u, new_image_data->data()->length());
   EXPECT_EQ(200, new_image_data->data()->Data()[0]);
 }
@@ -252,7 +252,7 @@
       V8ScriptValueDeserializer(script_state, input).Deserialize();
   ASSERT_TRUE(V8ImageData::hasInstance(result, scope.GetIsolate()));
   ImageData* new_image_data = V8ImageData::toImpl(result.As<v8::Object>());
-  EXPECT_EQ(IntSize(2, 1), new_image_data->size());
+  EXPECT_EQ(IntSize(2, 1), new_image_data->Size());
   EXPECT_EQ(8u, new_image_data->data()->length());
   EXPECT_EQ(200, new_image_data->data()->Data()[0]);
 }
@@ -391,7 +391,7 @@
   ASSERT_TRUE(V8ImageBitmap::hasInstance(result, scope.GetIsolate()));
   ImageBitmap* new_image_bitmap =
       V8ImageBitmap::toImpl(result.As<v8::Object>());
-  ASSERT_EQ(IntSize(10, 7), new_image_bitmap->size());
+  ASSERT_EQ(IntSize(10, 7), new_image_bitmap->Size());
 
   // Check that the pixel at (3, 3) is red.
   uint8_t pixel[4] = {};
@@ -428,7 +428,7 @@
   ASSERT_TRUE(V8ImageBitmap::hasInstance(result, scope.GetIsolate()));
   ImageBitmap* new_image_bitmap =
       V8ImageBitmap::toImpl(result.As<v8::Object>());
-  ASSERT_EQ(IntSize(2, 1), new_image_bitmap->size());
+  ASSERT_EQ(IntSize(2, 1), new_image_bitmap->Size());
 
   // Check that the pixels are opaque red and green, respectively.
   uint8_t pixels[8] = {};
@@ -494,7 +494,7 @@
   ASSERT_TRUE(V8ImageBitmap::hasInstance(result, scope.GetIsolate()));
   ImageBitmap* new_image_bitmap =
       V8ImageBitmap::toImpl(result.As<v8::Object>());
-  ASSERT_EQ(IntSize(10, 7), new_image_bitmap->size());
+  ASSERT_EQ(IntSize(10, 7), new_image_bitmap->Size());
 
   // Check that the pixel at (3, 3) is red.
   uint8_t pixel[4] = {};
@@ -523,7 +523,7 @@
   ASSERT_TRUE(V8OffscreenCanvas::hasInstance(result, scope.GetIsolate()));
   OffscreenCanvas* new_canvas =
       V8OffscreenCanvas::toImpl(result.As<v8::Object>());
-  EXPECT_EQ(IntSize(10, 7), new_canvas->size());
+  EXPECT_EQ(IntSize(10, 7), new_canvas->Size());
   EXPECT_EQ(519, new_canvas->PlaceholderCanvasId());
   EXPECT_TRUE(canvas->IsNeutered());
   EXPECT_FALSE(new_canvas->IsNeutered());
diff --git a/third_party/WebKit/Source/bindings/modules/v8/ConditionalFeaturesForModules.cpp b/third_party/WebKit/Source/bindings/modules/v8/ConditionalFeaturesForModules.cpp
index 29d83a9..f26d82f 100644
--- a/third_party/WebKit/Source/bindings/modules/v8/ConditionalFeaturesForModules.cpp
+++ b/third_party/WebKit/Source/bindings/modules/v8/ConditionalFeaturesForModules.cpp
@@ -13,13 +13,11 @@
 #include "bindings/core/v8/V8Window.h"
 #include "bindings/core/v8/V8WorkerNavigator.h"
 #include "bindings/modules/v8/V8DedicatedWorkerGlobalScopePartial.h"
-#include "bindings/modules/v8/V8FetchEvent.h"
 #include "bindings/modules/v8/V8Gamepad.h"
 #include "bindings/modules/v8/V8GamepadButton.h"
 #include "bindings/modules/v8/V8InstallEvent.h"
 #include "bindings/modules/v8/V8NavigatorPartial.h"
 #include "bindings/modules/v8/V8ServiceWorkerGlobalScope.h"
-#include "bindings/modules/v8/V8ServiceWorkerRegistration.h"
 #include "bindings/modules/v8/V8SharedWorkerGlobalScopePartial.h"
 #include "bindings/modules/v8/V8WindowPartial.h"
 #include "bindings/modules/v8/V8WorkerNavigatorPartial.h"
@@ -94,30 +92,6 @@
       V8WindowPartial::installGamepadExtensions(
           isolate, world, instance_object, prototype_object, interface_object);
     }
-    if (OriginTrials::serviceWorkerNavigationPreloadEnabled(
-            execution_context)) {
-      V8WindowPartial::installServiceWorkerNavigationPreload(
-          isolate, world, instance_object, prototype_object, interface_object);
-    }
-  } else if (wrapper_type_info ==
-             &V8DedicatedWorkerGlobalScope::wrapperTypeInfo) {
-    v8::Local<v8::Object> instance_object =
-        script_state->GetContext()->Global();
-    if (OriginTrials::serviceWorkerNavigationPreloadEnabled(
-            execution_context)) {
-      V8DedicatedWorkerGlobalScopePartial::
-          installServiceWorkerNavigationPreload(isolate, world, instance_object,
-                                                prototype_object,
-                                                interface_object);
-    }
-  } else if (wrapper_type_info == &V8SharedWorkerGlobalScope::wrapperTypeInfo) {
-    v8::Local<v8::Object> instance_object =
-        script_state->GetContext()->Global();
-    if (OriginTrials::serviceWorkerNavigationPreloadEnabled(
-            execution_context)) {
-      V8SharedWorkerGlobalScopePartial::installServiceWorkerNavigationPreload(
-          isolate, world, instance_object, prototype_object, interface_object);
-    }
   } else if (wrapper_type_info ==
              &V8ServiceWorkerGlobalScope::wrapperTypeInfo) {
     v8::Local<v8::Object> instance_object =
@@ -126,26 +100,6 @@
       V8ServiceWorkerGlobalScope::installForeignFetch(
           isolate, world, instance_object, prototype_object, interface_object);
     }
-    if (OriginTrials::serviceWorkerNavigationPreloadEnabled(
-            execution_context)) {
-      V8ServiceWorkerGlobalScope::installServiceWorkerNavigationPreload(
-          isolate, world, instance_object, prototype_object, interface_object);
-    }
-  } else if (wrapper_type_info ==
-             &V8ServiceWorkerRegistration::wrapperTypeInfo) {
-    if (OriginTrials::serviceWorkerNavigationPreloadEnabled(
-            execution_context)) {
-      V8ServiceWorkerRegistration::installServiceWorkerNavigationPreload(
-          isolate, world, v8::Local<v8::Object>(), prototype_object,
-          interface_object);
-    }
-  } else if (wrapper_type_info == &V8FetchEvent::wrapperTypeInfo) {
-    if (OriginTrials::serviceWorkerNavigationPreloadEnabled(
-            execution_context)) {
-      V8FetchEvent::installServiceWorkerNavigationPreload(
-          isolate, world, v8::Local<v8::Object>(), prototype_object,
-          interface_object);
-    }
   } else if (wrapper_type_info == &V8InstallEvent::wrapperTypeInfo) {
     if (OriginTrials::foreignFetchEnabled(execution_context)) {
       V8InstallEvent::installForeignFetch(isolate, world,
@@ -201,27 +155,6 @@
     }
     return;
   }
-  if (feature == "ServiceWorkerNavigationPreload") {
-    global_instance_object = script_state->GetContext()->Global();
-    V8WindowPartial::installServiceWorkerNavigationPreload(
-        isolate, world, global_instance_object, v8::Local<v8::Object>(),
-        v8::Local<v8::Function>());
-    if (context_data->GetExistingConstructorAndPrototypeForType(
-            &V8FetchEvent::wrapperTypeInfo, &prototype_object,
-            &interface_object)) {
-      V8FetchEvent::installServiceWorkerNavigationPreload(
-          isolate, world, v8::Local<v8::Object>(), prototype_object,
-          interface_object);
-    }
-    if (context_data->GetExistingConstructorAndPrototypeForType(
-            &V8ServiceWorkerRegistration::wrapperTypeInfo, &prototype_object,
-            &interface_object)) {
-      V8ServiceWorkerRegistration::installServiceWorkerNavigationPreload(
-          isolate, world, v8::Local<v8::Object>(), prototype_object,
-          interface_object);
-    }
-    return;
-  }
   if (feature == "WebShare") {
     if (context_data->GetExistingConstructorAndPrototypeForType(
             &V8Navigator::wrapperTypeInfo, &prototype_object,
diff --git a/third_party/WebKit/Source/bindings/modules/v8/V8BindingForModulesTest.cpp b/third_party/WebKit/Source/bindings/modules/v8/V8BindingForModulesTest.cpp
index 41c3b52..88f104b7 100644
--- a/third_party/WebKit/Source/bindings/modules/v8/V8BindingForModulesTest.cpp
+++ b/third_party/WebKit/Source/bindings/modules/v8/V8BindingForModulesTest.cpp
@@ -27,7 +27,7 @@
 
 #include "bindings/core/v8/SerializationTag.h"
 #include "bindings/core/v8/SerializedScriptValue.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8BindingForTesting.h"
 #include "bindings/core/v8/V8PerIsolateData.h"
diff --git a/third_party/WebKit/Source/bindings/modules/v8/WebGLAny.cpp b/third_party/WebKit/Source/bindings/modules/v8/WebGLAny.cpp
index 6d71fe88..fc03883 100644
--- a/third_party/WebKit/Source/bindings/modules/v8/WebGLAny.cpp
+++ b/third_party/WebKit/Source/bindings/modules/v8/WebGLAny.cpp
@@ -4,7 +4,7 @@
 
 #include "bindings/modules/v8/WebGLAny.h"
 
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "platform/wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/bindings/modules/v8/serialization/V8ScriptValueSerializerForModulesTest.cpp b/third_party/WebKit/Source/bindings/modules/v8/serialization/V8ScriptValueSerializerForModulesTest.cpp
index a12c305..4786b79 100644
--- a/third_party/WebKit/Source/bindings/modules/v8/serialization/V8ScriptValueSerializerForModulesTest.cpp
+++ b/third_party/WebKit/Source/bindings/modules/v8/serialization/V8ScriptValueSerializerForModulesTest.cpp
@@ -5,7 +5,7 @@
 #include "bindings/modules/v8/serialization/V8ScriptValueSerializerForModules.h"
 
 #include "bindings/core/v8/ExceptionState.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8ArrayBuffer.h"
 #include "bindings/core/v8/V8BindingForTesting.h"
 #include "bindings/core/v8/V8DOMException.h"
diff --git a/third_party/WebKit/Source/bindings/scripts/v8_callback_function.py b/third_party/WebKit/Source/bindings/scripts/v8_callback_function.py
index b158954..2f654f2 100644
--- a/third_party/WebKit/Source/bindings/scripts/v8_callback_function.py
+++ b/third_party/WebKit/Source/bindings/scripts/v8_callback_function.py
@@ -20,7 +20,7 @@
 CALLBACK_FUNCTION_CPP_INCLUDES = frozenset([
     'bindings/core/v8/ExceptionState.h',
     'bindings/core/v8/ScriptState.h',
-    'bindings/core/v8/ToV8.h',
+    'bindings/core/v8/ToV8ForCore.h',
     'bindings/core/v8/V8Binding.h',
     'core/dom/ExecutionContext.h',
     'platform/wtf/Assertions.h',
diff --git a/third_party/WebKit/Source/bindings/scripts/v8_dictionary.py b/third_party/WebKit/Source/bindings/scripts/v8_dictionary.py
index 92d310d..069af802 100644
--- a/third_party/WebKit/Source/bindings/scripts/v8_dictionary.py
+++ b/third_party/WebKit/Source/bindings/scripts/v8_dictionary.py
@@ -16,7 +16,7 @@
 
 DICTIONARY_H_INCLUDES = frozenset([
     'bindings/core/v8/NativeValueTraits.h',
-    'bindings/core/v8/ToV8.h',
+    'bindings/core/v8/ToV8ForCore.h',
     'bindings/core/v8/V8Binding.h',
     'platform/heap/Handle.h',
 ])
diff --git a/third_party/WebKit/Source/bindings/scripts/v8_interface.py b/third_party/WebKit/Source/bindings/scripts/v8_interface.py
index 2911ce89..bc379f6 100644
--- a/third_party/WebKit/Source/bindings/scripts/v8_interface.py
+++ b/third_party/WebKit/Source/bindings/scripts/v8_interface.py
@@ -53,7 +53,7 @@
     'bindings/core/v8/GeneratedCodeHelper.h',
     'bindings/core/v8/NativeValueTraits.h',
     'bindings/core/v8/ScriptWrappable.h',
-    'bindings/core/v8/ToV8.h',
+    'bindings/core/v8/ToV8ForCore.h',
     'bindings/core/v8/V8Binding.h',
     'bindings/core/v8/V8DOMWrapper.h',
     'bindings/core/v8/WrapperTypeInfo.h',
@@ -63,7 +63,7 @@
     'bindings/core/v8/ExceptionState.h',
     'bindings/core/v8/V8DOMConfiguration.h',
     'bindings/core/v8/V8ObjectConstructor.h',
-    'core/dom/Document.h',
+    'core/dom/ExecutionContext.h',
     'platform/wtf/GetPtr.h',
     'platform/wtf/RefPtr.h',
 ])
@@ -307,6 +307,10 @@
             raise Exception('[Measure] or [MeasureAs] specified for interface without a constructor: '
                             '%s' % interface.name)
 
+    # [ConstructorCallWith=Document]
+    if has_extended_attribute_value(interface, 'ConstructorCallWith', 'Document'):
+        includes.add('core/dom/Document.h')
+
     # [Unscopable] attributes and methods
     unscopables = []
     for attribute in interface.attributes:
diff --git a/third_party/WebKit/Source/bindings/scripts/v8_union.py b/third_party/WebKit/Source/bindings/scripts/v8_union.py
index 1723495..1bf0e028 100644
--- a/third_party/WebKit/Source/bindings/scripts/v8_union.py
+++ b/third_party/WebKit/Source/bindings/scripts/v8_union.py
@@ -7,7 +7,7 @@
 
 
 UNION_CPP_INCLUDES = frozenset([
-    'bindings/core/v8/ToV8.h',
+    'bindings/core/v8/ToV8ForCore.h',
 ])
 
 UNION_H_INCLUDES = frozenset([
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/AnyCallbackFunctionOptionalAnyArg.cpp b/third_party/WebKit/Source/bindings/tests/results/core/AnyCallbackFunctionOptionalAnyArg.cpp
index af786cba..63a4ed8 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/AnyCallbackFunctionOptionalAnyArg.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/AnyCallbackFunctionOptionalAnyArg.cpp
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/ExceptionState.h"
 #include "bindings/core/v8/ScriptState.h"
 #include "bindings/core/v8/ScriptValue.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "core/dom/ExecutionContext.h"
 #include "platform/wtf/Assertions.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/ArrayBufferOrArrayBufferViewOrDictionary.cpp b/third_party/WebKit/Source/bindings/tests/results/core/ArrayBufferOrArrayBufferViewOrDictionary.cpp
index f38af45..2413650 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/ArrayBufferOrArrayBufferViewOrDictionary.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/ArrayBufferOrArrayBufferViewOrDictionary.cpp
@@ -12,7 +12,7 @@
 #include "ArrayBufferOrArrayBufferViewOrDictionary.h"
 
 #include "bindings/core/v8/Dictionary.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8ArrayBuffer.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/BooleanOrElementSequence.cpp b/third_party/WebKit/Source/bindings/tests/results/core/BooleanOrElementSequence.cpp
index 0690b6ca..b096303 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/BooleanOrElementSequence.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/BooleanOrElementSequence.cpp
@@ -13,7 +13,7 @@
 
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Element.h"
 #include "core/animation/ElementAnimation.h"
 #include "core/dom/ChildNode.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/BooleanOrStringOrUnrestrictedDouble.cpp b/third_party/WebKit/Source/bindings/tests/results/core/BooleanOrStringOrUnrestrictedDouble.cpp
index 70ba36f..4a7ff91e 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/BooleanOrStringOrUnrestrictedDouble.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/BooleanOrStringOrUnrestrictedDouble.cpp
@@ -13,7 +13,7 @@
 
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/BooleanOrTestCallbackInterface.cpp b/third_party/WebKit/Source/bindings/tests/results/core/BooleanOrTestCallbackInterface.cpp
index 302951d..2b0e6bf2 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/BooleanOrTestCallbackInterface.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/BooleanOrTestCallbackInterface.cpp
@@ -13,7 +13,7 @@
 
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8TestCallbackInterface.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/ByteStringOrNodeList.cpp b/third_party/WebKit/Source/bindings/tests/results/core/ByteStringOrNodeList.cpp
index 802351b..c526b357 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/ByteStringOrNodeList.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/ByteStringOrNodeList.cpp
@@ -13,7 +13,7 @@
 
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8NodeList.h"
 #include "core/dom/NameNodeList.h"
 #include "core/dom/NodeList.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/ByteStringSequenceSequenceOrByteStringByteStringRecord.cpp b/third_party/WebKit/Source/bindings/tests/results/core/ByteStringSequenceSequenceOrByteStringByteStringRecord.cpp
index 221fc5f..bd3ff3d 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/ByteStringSequenceSequenceOrByteStringByteStringRecord.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/ByteStringSequenceSequenceOrByteStringByteStringRecord.cpp
@@ -13,7 +13,7 @@
 
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/DoubleOrLongOrBooleanSequence.cpp b/third_party/WebKit/Source/bindings/tests/results/core/DoubleOrLongOrBooleanSequence.cpp
index 5567031e70..8037130 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/DoubleOrLongOrBooleanSequence.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/DoubleOrLongOrBooleanSequence.cpp
@@ -14,7 +14,7 @@
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/LongOrBoolean.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/DoubleOrString.cpp b/third_party/WebKit/Source/bindings/tests/results/core/DoubleOrString.cpp
index 28f82ece..27e7d34 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/DoubleOrString.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/DoubleOrString.cpp
@@ -13,7 +13,7 @@
 
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/DoubleOrStringOrDoubleOrStringSequence.cpp b/third_party/WebKit/Source/bindings/tests/results/core/DoubleOrStringOrDoubleOrStringSequence.cpp
index 484c4b3..a4777d7 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/DoubleOrStringOrDoubleOrStringSequence.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/DoubleOrStringOrDoubleOrStringSequence.cpp
@@ -14,7 +14,7 @@
 #include "bindings/core/v8/DoubleOrString.h"
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/ElementSequenceOrByteStringDoubleOrStringRecord.cpp b/third_party/WebKit/Source/bindings/tests/results/core/ElementSequenceOrByteStringDoubleOrStringRecord.cpp
index a21cb2b..d22c06f 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/ElementSequenceOrByteStringDoubleOrStringRecord.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/ElementSequenceOrByteStringDoubleOrStringRecord.cpp
@@ -14,7 +14,7 @@
 #include "bindings/core/v8/DoubleOrString.h"
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Element.h"
 #include "core/animation/ElementAnimation.h"
 #include "core/dom/ChildNode.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/FloatOrBoolean.cpp b/third_party/WebKit/Source/bindings/tests/results/core/FloatOrBoolean.cpp
index 8576c61..3bae28e 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/FloatOrBoolean.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/FloatOrBoolean.cpp
@@ -13,7 +13,7 @@
 
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/LongCallbackFunction.cpp b/third_party/WebKit/Source/bindings/tests/results/core/LongCallbackFunction.cpp
index 84ae62e..99b45025 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/LongCallbackFunction.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/LongCallbackFunction.cpp
@@ -16,7 +16,7 @@
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
 #include "bindings/core/v8/ScriptState.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "core/dom/ExecutionContext.h"
 #include "platform/wtf/Assertions.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/LongOrBoolean.cpp b/third_party/WebKit/Source/bindings/tests/results/core/LongOrBoolean.cpp
index 4b4bfed..4b7f720f 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/LongOrBoolean.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/LongOrBoolean.cpp
@@ -13,7 +13,7 @@
 
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/LongOrTestDictionary.cpp b/third_party/WebKit/Source/bindings/tests/results/core/LongOrTestDictionary.cpp
index b8795e8..f1beed0 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/LongOrTestDictionary.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/LongOrTestDictionary.cpp
@@ -13,7 +13,7 @@
 
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/LongSequenceOrEvent.cpp b/third_party/WebKit/Source/bindings/tests/results/core/LongSequenceOrEvent.cpp
index 9c43631a..f54f01a5 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/LongSequenceOrEvent.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/LongSequenceOrEvent.cpp
@@ -13,7 +13,7 @@
 
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Event.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/NodeOrLongSequenceOrEventOrXMLHttpRequestOrStringOrStringByteStringOrNodeListRecord.cpp b/third_party/WebKit/Source/bindings/tests/results/core/NodeOrLongSequenceOrEventOrXMLHttpRequestOrStringOrStringByteStringOrNodeListRecord.cpp
index d31eef2..46fd2e34 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/NodeOrLongSequenceOrEventOrXMLHttpRequestOrStringOrStringByteStringOrNodeListRecord.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/NodeOrLongSequenceOrEventOrXMLHttpRequestOrStringOrStringByteStringOrNodeListRecord.cpp
@@ -14,7 +14,7 @@
 #include "bindings/core/v8/ByteStringOrNodeList.h"
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Event.h"
 #include "bindings/core/v8/V8Node.h"
 #include "bindings/core/v8/V8NodeList.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/NodeOrNodeList.cpp b/third_party/WebKit/Source/bindings/tests/results/core/NodeOrNodeList.cpp
index 50485840..ca12d20 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/NodeOrNodeList.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/NodeOrNodeList.cpp
@@ -11,7 +11,7 @@
 // clang-format off
 #include "NodeOrNodeList.h"
 
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Node.h"
 #include "bindings/core/v8/V8NodeList.h"
 #include "core/dom/NameNodeList.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/StringOrArrayBufferOrArrayBufferView.cpp b/third_party/WebKit/Source/bindings/tests/results/core/StringOrArrayBufferOrArrayBufferView.cpp
index 71fb6df1..dc5fb10 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/StringOrArrayBufferOrArrayBufferView.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/StringOrArrayBufferOrArrayBufferView.cpp
@@ -13,7 +13,7 @@
 
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8ArrayBuffer.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/StringOrDouble.cpp b/third_party/WebKit/Source/bindings/tests/results/core/StringOrDouble.cpp
index 873422c3..84e48d5 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/StringOrDouble.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/StringOrDouble.cpp
@@ -13,7 +13,7 @@
 
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/StringOrStringSequence.cpp b/third_party/WebKit/Source/bindings/tests/results/core/StringOrStringSequence.cpp
index 521152dc..2cbd113 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/StringOrStringSequence.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/StringOrStringSequence.cpp
@@ -13,7 +13,7 @@
 
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/StringSequenceCallbackFunctionLongSequenceArg.cpp b/third_party/WebKit/Source/bindings/tests/results/core/StringSequenceCallbackFunctionLongSequenceArg.cpp
index 904a2d0..3f118fb2 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/StringSequenceCallbackFunctionLongSequenceArg.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/StringSequenceCallbackFunctionLongSequenceArg.cpp
@@ -16,7 +16,7 @@
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
 #include "bindings/core/v8/ScriptState.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "core/dom/ExecutionContext.h"
 #include "platform/wtf/Assertions.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/TestEnumOrDouble.cpp b/third_party/WebKit/Source/bindings/tests/results/core/TestEnumOrDouble.cpp
index 06be713e..8113eb61 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/TestEnumOrDouble.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/TestEnumOrDouble.cpp
@@ -13,7 +13,7 @@
 
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/TestInterface2OrUint8Array.cpp b/third_party/WebKit/Source/bindings/tests/results/core/TestInterface2OrUint8Array.cpp
index 2fef52b..710e524 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/TestInterface2OrUint8Array.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/TestInterface2OrUint8Array.cpp
@@ -11,7 +11,7 @@
 // clang-format off
 #include "TestInterface2OrUint8Array.h"
 
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8TestInterface2.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/TestInterfaceGarbageCollectedOrString.cpp b/third_party/WebKit/Source/bindings/tests/results/core/TestInterfaceGarbageCollectedOrString.cpp
index 211a66f..a82d600 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/TestInterfaceGarbageCollectedOrString.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/TestInterfaceGarbageCollectedOrString.cpp
@@ -13,7 +13,7 @@
 
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8TestInterfaceGarbageCollected.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/TestInterfaceOrLong.cpp b/third_party/WebKit/Source/bindings/tests/results/core/TestInterfaceOrLong.cpp
index d698834f..727f859 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/TestInterfaceOrLong.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/TestInterfaceOrLong.cpp
@@ -13,7 +13,7 @@
 
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8TestInterface.h"
 #include "bindings/tests/idls/core/TestImplements2.h"
 #include "bindings/tests/idls/core/TestImplements3Implementation.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/TestInterfaceOrTestInterfaceEmpty.cpp b/third_party/WebKit/Source/bindings/tests/results/core/TestInterfaceOrTestInterfaceEmpty.cpp
index 0b38224..413bdcf 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/TestInterfaceOrTestInterfaceEmpty.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/TestInterfaceOrTestInterfaceEmpty.cpp
@@ -11,7 +11,7 @@
 // clang-format off
 #include "TestInterfaceOrTestInterfaceEmpty.h"
 
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8TestInterface.h"
 #include "bindings/core/v8/V8TestInterfaceEmpty.h"
 #include "bindings/tests/idls/core/TestImplements2.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/UnrestrictedDoubleOrString.cpp b/third_party/WebKit/Source/bindings/tests/results/core/UnrestrictedDoubleOrString.cpp
index 455a1a5..6d28652 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/UnrestrictedDoubleOrString.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/UnrestrictedDoubleOrString.cpp
@@ -13,7 +13,7 @@
 
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/UnsignedLongLongOrBooleanOrTestCallbackInterface.cpp b/third_party/WebKit/Source/bindings/tests/results/core/UnsignedLongLongOrBooleanOrTestCallbackInterface.cpp
index 3b93f7c..61efcf44 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/UnsignedLongLongOrBooleanOrTestCallbackInterface.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/UnsignedLongLongOrBooleanOrTestCallbackInterface.cpp
@@ -13,7 +13,7 @@
 
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8TestCallbackInterface.h"
 
 namespace blink {
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 598d706..278cf68 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBuffer.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBuffer.cpp
@@ -18,7 +18,7 @@
 #include "bindings/core/v8/V8DOMConfiguration.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
 #include "bindings/core/v8/V8SharedArrayBuffer.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
 
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 84c2a0b1..81002c0 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBuffer.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBuffer.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/WrapperTypeInfo.h"
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 9c0bdf0..b9dc977 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBufferView.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBufferView.cpp
@@ -29,7 +29,7 @@
 #include "bindings/core/v8/V8Uint32Array.h"
 #include "bindings/core/v8/V8Uint8Array.h"
 #include "bindings/core/v8/V8Uint8ClampedArray.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
 
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 aa36c85..161965a 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBufferView.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBufferView.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/WrapperTypeInfo.h"
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 0e9a43d..d6ffb129 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8DataView.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8DataView.cpp
@@ -18,7 +18,7 @@
 #include "bindings/core/v8/V8DOMConfiguration.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
 #include "bindings/core/v8/V8SharedArrayBuffer.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
 
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 e27504c3..fa0df7c 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8DataView.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8DataView.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8ArrayBufferView.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
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 12b1de4..9319a13a 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.cpp
@@ -17,7 +17,7 @@
 #include "bindings/core/v8/V8DOMConfiguration.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
 #include "core/SVGNames.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "core/dom/custom/V0CustomElementProcessingStack.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
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 9052497..1f7931e 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/WrapperTypeInfo.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestCallbackFunctions.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestCallbackFunctions.cpp
index 10a3fc8..12e195d 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestCallbackFunctions.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestCallbackFunctions.cpp
@@ -19,7 +19,7 @@
 #include "bindings/core/v8/V8DOMConfiguration.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
 #include "bindings/core/v8/VoidCallbackFunction.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "core/dom/custom/V0CustomElementProcessingStack.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestCallbackFunctions.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestCallbackFunctions.h
index e1e7be3e4..6ec3d50 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestCallbackFunctions.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestCallbackFunctions.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/WrapperTypeInfo.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestConstants.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestConstants.cpp
index ea03305..14ee890f 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestConstants.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestConstants.cpp
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/ScriptState.h"
 #include "bindings/core/v8/V8DOMConfiguration.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "core/frame/Deprecation.h"
 #include "core/frame/UseCounter.h"
 #include "core/origin_trials/OriginTrials.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestConstants.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestConstants.h
index 706231fc..7f77dd94 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestConstants.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestConstants.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/WrapperTypeInfo.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestDictionary.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestDictionary.h
index 4a90a91..7334457e 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestDictionary.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestDictionary.h
@@ -13,7 +13,7 @@
 #define V8TestDictionary_h
 
 #include "bindings/core/v8/NativeValueTraits.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/tests/idls/core/TestDictionary.h"
 #include "core/CoreExport.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestDictionaryDerived.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestDictionaryDerived.h
index 7787992..1c07cfb3 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestDictionaryDerived.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestDictionaryDerived.h
@@ -13,7 +13,7 @@
 #define V8TestDictionaryDerived_h
 
 #include "bindings/core/v8/NativeValueTraits.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/tests/idls/core/TestDictionaryDerivedImplementedAs.h"
 #include "core/CoreExport.h"
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 2049192b..65db03a9 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.cpp
@@ -16,7 +16,7 @@
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
 #include "bindings/core/v8/V8DOMConfiguration.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "core/frame/LocalDOMWindow.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
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 42915a9..9f5eaca 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/WrapperTypeInfo.h"
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 d812c6c3..cf9a565 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.cpp
@@ -18,7 +18,7 @@
 #include "bindings/core/v8/V8Document.h"
 #include "bindings/core/v8/V8Node.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
 
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 eee8078..c3c0cd2 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/WrapperTypeInfo.h"
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 b77637e..48000cd 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.cpp
@@ -18,7 +18,7 @@
 #include "bindings/core/v8/V8Document.h"
 #include "bindings/core/v8/V8Node.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
 
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 bcd207a..c850dd81 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/WrapperTypeInfo.h"
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 12835f1..951e0fe 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.cpp
@@ -18,7 +18,7 @@
 #include "bindings/core/v8/V8Document.h"
 #include "bindings/core/v8/V8Node.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
 
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 f6e3dc3..d7604782 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/WrapperTypeInfo.h"
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 fff5df3..a929d9a 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.cpp
@@ -33,7 +33,7 @@
 #include "bindings/tests/idls/core/TestInterfacePartial.h"
 #include "bindings/tests/idls/core/TestInterfacePartial2Implementation.h"
 #include "bindings/tests/idls/core/TestInterfacePartialSecureContext.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "core/frame/UseCounter.h"
 #include "core/inspector/ConsoleMessage.h"
 #include "platform/RuntimeEnabledFeatures.h"
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 90956f8..50ab99b 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.h
@@ -16,7 +16,7 @@
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
 #include "bindings/core/v8/StringOrDouble.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/V8TestInterfaceEmpty.h"
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 9cbc1bf8..7348e2c 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.cpp
@@ -20,7 +20,7 @@
 #include "bindings/core/v8/V8Iterator.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
 #include "bindings/core/v8/V8TestInterfaceEmpty.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "core/frame/LocalDOMWindow.h"
 #include "platform/RuntimeEnabledFeatures.h"
 #include "platform/wtf/GetPtr.h"
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 8d17a6d3..6b7f8ba 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/WrapperTypeInfo.h"
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 03caa8b6..a3c9492 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.cpp
@@ -18,7 +18,7 @@
 #include "bindings/core/v8/V8Document.h"
 #include "bindings/core/v8/V8Node.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
 
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 b3b0a62..e8c9fbd 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/WrapperTypeInfo.h"
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 ae947c347..504041e 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.cpp
@@ -18,7 +18,7 @@
 #include "bindings/core/v8/V8CrossOriginSetterInfo.h"
 #include "bindings/core/v8/V8DOMConfiguration.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "core/frame/LocalDOMWindow.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
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 db8793e..db02e712 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/WrapperTypeInfo.h"
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 00b22cb..a53f25d7 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.cpp
@@ -21,6 +21,7 @@
 #include "bindings/core/v8/V8TestDictionary.h"
 #include "bindings/core/v8/V8TestInterfaceEmpty.h"
 #include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "core/frame/LocalDOMWindow.h"
 #include "core/frame/UseCounter.h"
 #include "platform/wtf/GetPtr.h"
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 244d6c4..6a36d4e 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.h
@@ -16,7 +16,7 @@
 #include "bindings/core/v8/LongOrTestDictionary.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/WrapperTypeInfo.h"
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 c7802d3..b469485 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.cpp
@@ -18,7 +18,7 @@
 #include "bindings/core/v8/V8DOMConfiguration.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
 #include "bindings/core/v8/V8TestInterfaceEmpty.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "core/frame/LocalDOMWindow.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
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 9624ff8..76637c3 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/WrapperTypeInfo.h"
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 ca090d78..923d2f7 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.cpp
@@ -16,7 +16,7 @@
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
 #include "bindings/core/v8/V8DOMConfiguration.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "core/frame/LocalDOMWindow.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
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 d1b51dd..27dbfa4 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/WrapperTypeInfo.h"
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 5b99fde1..3648863 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.cpp
@@ -17,7 +17,7 @@
 #include "bindings/core/v8/V8DOMConfiguration.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
 #include "bindings/core/v8/V8TestInterfaceConstructor4.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "core/frame/LocalDOMWindow.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
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 6e2eff0..912662e 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/WrapperTypeInfo.h"
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 550ce5017..17e79e9 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.cpp
@@ -14,7 +14,7 @@
 #include "bindings/core/v8/ExceptionState.h"
 #include "bindings/core/v8/V8DOMConfiguration.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "core/frame/LocalDOMWindow.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
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 66be651..33a867b 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/WrapperTypeInfo.h"
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 907e876..d15c930 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.cpp
@@ -17,8 +17,8 @@
 #include "bindings/core/v8/V8ObjectConstructor.h"
 #include "core/animation/DocumentAnimation.h"
 #include "core/css/DocumentFontFaceSet.h"
-#include "core/dom/Document.h"
 #include "core/dom/DocumentFullscreen.h"
+#include "core/dom/ExecutionContext.h"
 #include "core/svg/SVGDocumentExtensions.h"
 #include "core/xml/DocumentXPathEvaluator.h"
 #include "platform/wtf/GetPtr.h"
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 f793b29..0cd4506 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/V8Document.h"
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 b150665..f7d7cae7 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEmpty.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEmpty.cpp
@@ -14,7 +14,7 @@
 #include "bindings/core/v8/ExceptionState.h"
 #include "bindings/core/v8/V8DOMConfiguration.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
 
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 b8239a8..28245549 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEmpty.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEmpty.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/WrapperTypeInfo.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInit.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInit.h
index 72f669d..c56c6b3 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInit.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInit.h
@@ -13,7 +13,7 @@
 #define V8TestInterfaceEventInit_h
 
 #include "bindings/core/v8/NativeValueTraits.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/tests/idls/core/TestInterfaceEventInit.h"
 #include "core/CoreExport.h"
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 6c656cc..1299aca 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.cpp
@@ -17,7 +17,7 @@
 #include "bindings/core/v8/V8DOMConfiguration.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
 #include "bindings/core/v8/V8TestInterfaceEventInit.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "core/frame/LocalDOMWindow.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
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 00a8860d3..ee589ee 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/V8Event.h"
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 2c36e3dc..c438bf8 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.cpp
@@ -16,6 +16,7 @@
 #include "bindings/core/v8/V8ObjectConstructor.h"
 #include "bindings/core/v8/V8PrivateProperty.h"
 #include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "core/frame/LocalDOMWindow.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
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 3e756bfc..b354132 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/V8EventTarget.h"
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 c0292cdd..27ad15c 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.cpp
@@ -20,7 +20,7 @@
 #include "bindings/core/v8/V8Iterator.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
 #include "bindings/core/v8/V8TestInterfaceGarbageCollected.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "core/frame/LocalDOMWindow.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
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 5cad3ffe..8bfc54ac 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/V8EventTarget.h"
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 59f04aa0..2a235e0 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.cpp
@@ -18,6 +18,7 @@
 #include "bindings/core/v8/V8ObjectConstructor.h"
 #include "bindings/core/v8/V8PrivateProperty.h"
 #include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "core/frame/LocalDOMWindow.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
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 ca5c214..abe08568 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/WrapperTypeInfo.h"
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 5260443..1839028 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.cpp
@@ -17,7 +17,7 @@
 #include "bindings/core/v8/V8DOMConfiguration.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
 #include "bindings/core/v8/V8PrivateProperty.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "core/frame/LocalDOMWindow.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
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 bf8d2159..7df638b 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/WrapperTypeInfo.h"
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 d137329..bfe0e2e 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.cpp
@@ -20,7 +20,7 @@
 #include "bindings/core/v8/V8ObjectConstructor.h"
 #include "bindings/core/v8/V8TestInterfaceEmpty.h"
 #include "core/HTMLNames.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "core/dom/custom/V0CustomElementProcessingStack.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
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 333f8f1..56872624 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/V8Node.h"
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 a3a161d..5d98894 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.cpp
@@ -16,7 +16,7 @@
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
 #include "bindings/core/v8/V8DOMConfiguration.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "platform/RuntimeEnabledFeatures.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
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 10d6a9de..9ba375c 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/WrapperTypeInfo.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceSecureContext.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceSecureContext.cpp
index 28bcd5f..ec355ed 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceSecureContext.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceSecureContext.cpp
@@ -16,7 +16,7 @@
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
 #include "bindings/core/v8/V8DOMConfiguration.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "platform/RuntimeEnabledFeatures.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceSecureContext.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceSecureContext.h
index 16d6d63..c46755bf 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceSecureContext.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceSecureContext.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/WrapperTypeInfo.h"
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 53ac540..38ebe0b 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.cpp
@@ -16,7 +16,7 @@
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
 #include "bindings/core/v8/V8DOMConfiguration.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "core/frame/LocalDOMWindow.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
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 bf526b9..fe5c559 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/V8Node.h"
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 32f4791..a4478c0 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp
@@ -59,7 +59,7 @@
 #include "core/HTMLNames.h"
 #include "core/dom/ClassCollection.h"
 #include "core/dom/DOMArrayBufferBase.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "core/dom/FlexibleArrayBufferView.h"
 #include "core/dom/NotShared.h"
 #include "core/dom/TagCollection.h"
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 b4e77b9..479a65c4 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.h
@@ -28,7 +28,7 @@
 #include "bindings/core/v8/TestEnumOrDouble.h"
 #include "bindings/core/v8/TestInterfaceGarbageCollectedOrString.h"
 #include "bindings/core/v8/TestInterfaceOrLong.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/UnrestrictedDoubleOrString.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestPermissiveDictionary.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestPermissiveDictionary.h
index 2714b4c..b4cde2b 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestPermissiveDictionary.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestPermissiveDictionary.h
@@ -13,7 +13,7 @@
 #define V8TestPermissiveDictionary_h
 
 #include "bindings/core/v8/NativeValueTraits.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/tests/idls/core/TestPermissiveDictionary.h"
 #include "core/CoreExport.h"
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 a91db457..27a1af82 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.cpp
@@ -18,7 +18,7 @@
 #include "bindings/core/v8/V8Node.h"
 #include "bindings/core/v8/V8NodeList.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "core/dom/NameNodeList.h"
 #include "core/dom/NodeList.h"
 #include "core/dom/StaticNodeList.h"
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 11fc88f2..59564aa 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.h
@@ -16,7 +16,7 @@
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/NodeOrNodeList.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/WrapperTypeInfo.h"
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 03542db6..99d0de5 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.cpp
@@ -16,7 +16,7 @@
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
 #include "bindings/core/v8/V8DOMConfiguration.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
 
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 7b9ec75..fa78bdf 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/WrapperTypeInfo.h"
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 f8bc673..e1dd78b 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.cpp
@@ -24,7 +24,7 @@
 #include "bindings/core/v8/V8TestInterfaceEmpty.h"
 #include "bindings/core/v8/V8TestObject.h"
 #include "bindings/core/v8/V8XMLHttpRequest.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "core/dom/NameNodeList.h"
 #include "core/dom/NodeList.h"
 #include "core/dom/StaticNodeList.h"
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 49c6876..704ee5bd 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.h
@@ -19,7 +19,7 @@
 #include "bindings/core/v8/ScriptWrappable.h"
 #include "bindings/core/v8/StringOrDouble.h"
 #include "bindings/core/v8/TestInterfaceOrTestInterfaceEmpty.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/UnsignedLongLongOrBooleanOrTestCallbackInterface.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
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 9bfcf56b..b15b1a8 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8Uint8ClampedArray.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8Uint8ClampedArray.cpp
@@ -16,7 +16,7 @@
 #include "bindings/core/v8/V8DOMConfiguration.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
 #include "bindings/core/v8/V8SharedArrayBuffer.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
 
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 806bac0..ac8e8e9 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8Uint8ClampedArray.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8Uint8ClampedArray.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8ArrayBufferView.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/VoidCallbackFunction.cpp b/third_party/WebKit/Source/bindings/tests/results/core/VoidCallbackFunction.cpp
index e0f871c..e19fe12e 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/VoidCallbackFunction.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/VoidCallbackFunction.cpp
@@ -14,7 +14,7 @@
 
 #include "bindings/core/v8/ExceptionState.h"
 #include "bindings/core/v8/ScriptState.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "core/dom/ExecutionContext.h"
 #include "platform/wtf/Assertions.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/VoidCallbackFunctionInterfaceArg.cpp b/third_party/WebKit/Source/bindings/tests/results/core/VoidCallbackFunctionInterfaceArg.cpp
index 1d7c61b..68ea20f 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/VoidCallbackFunctionInterfaceArg.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/VoidCallbackFunctionInterfaceArg.cpp
@@ -14,7 +14,7 @@
 
 #include "bindings/core/v8/ExceptionState.h"
 #include "bindings/core/v8/ScriptState.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8HTMLDivElement.h"
 #include "core/dom/ExecutionContext.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/VoidCallbackFunctionTypedef.cpp b/third_party/WebKit/Source/bindings/tests/results/core/VoidCallbackFunctionTypedef.cpp
index c366b8840..130661b4 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/VoidCallbackFunctionTypedef.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/VoidCallbackFunctionTypedef.cpp
@@ -16,7 +16,7 @@
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
 #include "bindings/core/v8/ScriptState.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "core/dom/ExecutionContext.h"
 #include "platform/wtf/Assertions.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/XMLHttpRequestOrString.cpp b/third_party/WebKit/Source/bindings/tests/results/core/XMLHttpRequestOrString.cpp
index 02376e38..8d0d7a0e 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/XMLHttpRequestOrString.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/XMLHttpRequestOrString.cpp
@@ -13,7 +13,7 @@
 
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8XMLHttpRequest.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/bindings/tests/results/modules/BooleanOrString.cpp b/third_party/WebKit/Source/bindings/tests/results/modules/BooleanOrString.cpp
index 15c367b6..4b02e762 100644
--- a/third_party/WebKit/Source/bindings/tests/results/modules/BooleanOrString.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/modules/BooleanOrString.cpp
@@ -13,7 +13,7 @@
 
 #include "bindings/core/v8/IDLTypes.h"
 #include "bindings/core/v8/NativeValueTraitsImpl.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface2Partial.cpp b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface2Partial.cpp
index c67f5bf..1427846 100644
--- a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface2Partial.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface2Partial.cpp
@@ -19,7 +19,7 @@
 #include "bindings/core/v8/V8TestInterface2.h"
 #include "bindings/tests/idls/modules/TestInterface2Partial.h"
 #include "bindings/tests/idls/modules/TestInterface2Partial2.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "platform/RuntimeEnabledFeatures.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface2Partial.h b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface2Partial.h
index ac687556..31bb26f 100644
--- a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface2Partial.h
+++ b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface2Partial.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/WrapperTypeInfo.h"
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 c451091..7c14a5be 100644
--- a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.cpp
@@ -19,7 +19,7 @@
 #include "bindings/core/v8/V8TestInterfaceEmpty.h"
 #include "bindings/modules/v8/V8TestInterface5.h"
 #include "bindings/modules/v8/VoidCallbackFunctionModules.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "platform/RuntimeEnabledFeatures.h"
 #include "platform/wtf/GetPtr.h"
 #include "platform/wtf/RefPtr.h"
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 44de926..3d88414 100644
--- a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.h
+++ b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.h
@@ -16,7 +16,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
 #include "bindings/core/v8/V8TestInterfaceEmpty.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterfacePartial.cpp b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterfacePartial.cpp
index 3f84967a9..9fbb71b9 100644
--- a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterfacePartial.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterfacePartial.cpp
@@ -24,7 +24,7 @@
 #include "bindings/core/v8/V8TestInterface.h"
 #include "bindings/tests/idls/modules/TestInterfacePartial3Implementation.h"
 #include "bindings/tests/idls/modules/TestInterfacePartial4.h"
-#include "core/dom/Document.h"
+#include "core/dom/ExecutionContext.h"
 #include "core/origin_trials/OriginTrials.h"
 #include "platform/RuntimeEnabledFeatures.h"
 #include "platform/wtf/GetPtr.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterfacePartial.h b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterfacePartial.h
index 41e8605..00bf2135 100644
--- a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterfacePartial.h
+++ b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterfacePartial.h
@@ -15,7 +15,7 @@
 #include "bindings/core/v8/GeneratedCodeHelper.h"
 #include "bindings/core/v8/NativeValueTraits.h"
 #include "bindings/core/v8/ScriptWrappable.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/UnsignedLongLongOrBooleanOrTestCallbackInterface.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8DOMWrapper.h"
diff --git a/third_party/WebKit/Source/bindings/tests/results/modules/VoidCallbackFunctionModules.cpp b/third_party/WebKit/Source/bindings/tests/results/modules/VoidCallbackFunctionModules.cpp
index fdfd5fef..8b6baef0 100644
--- a/third_party/WebKit/Source/bindings/tests/results/modules/VoidCallbackFunctionModules.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/modules/VoidCallbackFunctionModules.cpp
@@ -14,7 +14,7 @@
 
 #include "bindings/core/v8/ExceptionState.h"
 #include "bindings/core/v8/ScriptState.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "core/dom/ExecutionContext.h"
 #include "platform/wtf/Assertions.h"
diff --git a/third_party/WebKit/Source/build/scripts/templates/StyleBuilderFunctions.cpp.tmpl b/third_party/WebKit/Source/build/scripts/templates/StyleBuilderFunctions.cpp.tmpl
index 4e81b0f4..2eac3550 100644
--- a/third_party/WebKit/Source/build/scripts/templates/StyleBuilderFunctions.cpp.tmpl
+++ b/third_party/WebKit/Source/build/scripts/templates/StyleBuilderFunctions.cpp.tmpl
@@ -439,7 +439,7 @@
 {{apply_fill_layer('CSSPropertyBackgroundPositionY', 'YPosition')}}
 {{apply_fill_layer('CSSPropertyBackgroundRepeatX', 'RepeatX')}}
 {{apply_fill_layer('CSSPropertyBackgroundRepeatY', 'RepeatY')}}
-{{apply_fill_layer('CSSPropertyBackgroundSize', 'Size', 'size')}}
+{{apply_fill_layer('CSSPropertyBackgroundSize', 'Size', 'Size')}}
 {{apply_fill_layer('CSSPropertyMaskSourceType', 'MaskSourceType')}}
 {{apply_fill_layer('CSSPropertyWebkitMaskClip', 'Clip')}}
 {{apply_fill_layer('CSSPropertyWebkitMaskComposite', 'Composite')}}
@@ -449,7 +449,7 @@
 {{apply_fill_layer('CSSPropertyWebkitMaskPositionY', 'YPosition')}}
 {{apply_fill_layer('CSSPropertyWebkitMaskRepeatX', 'RepeatX')}}
 {{apply_fill_layer('CSSPropertyWebkitMaskRepeatY', 'RepeatY')}}
-{{apply_fill_layer('CSSPropertyWebkitMaskSize', 'Size', 'size')}}
+{{apply_fill_layer('CSSPropertyWebkitMaskSize', 'Size', 'Size')}}
 
 {% macro apply_grid_template(property_id, type) %}
 {{declare_initial_function(property_id)}} {
diff --git a/third_party/WebKit/Source/core/animation/SizeListPropertyFunctions.cpp b/third_party/WebKit/Source/core/animation/SizeListPropertyFunctions.cpp
index f88dbec..37c82ed 100644
--- a/third_party/WebKit/Source/core/animation/SizeListPropertyFunctions.cpp
+++ b/third_party/WebKit/Source/core/animation/SizeListPropertyFunctions.cpp
@@ -43,7 +43,7 @@
   SizeList result;
   for (const FillLayer* fill_layer = GetFillLayerForSize(property, style);
        fill_layer && fill_layer->IsSizeSet(); fill_layer = fill_layer->Next())
-    result.push_back(fill_layer->size());
+    result.push_back(fill_layer->Size());
   return result;
 }
 
diff --git a/third_party/WebKit/Source/core/animation/css/CSSAnimatableValueFactory.cpp b/third_party/WebKit/Source/core/animation/css/CSSAnimatableValueFactory.cpp
index 2e09769..46c98ca4 100644
--- a/third_party/WebKit/Source/core/animation/css/CSSAnimatableValueFactory.cpp
+++ b/third_party/WebKit/Source/core/animation/css/CSSAnimatableValueFactory.cpp
@@ -264,7 +264,7 @@
                property == CSSPropertyWebkitMaskSize) {
       if (!fill_layer->IsSizeSet())
         break;
-      values.push_back(CreateFromFillSize(fill_layer->size(), style));
+      values.push_back(CreateFromFillSize(fill_layer->Size(), style));
     } else {
       NOTREACHED();
     }
diff --git a/third_party/WebKit/Source/core/css/CSSCrossfadeValue.cpp b/third_party/WebKit/Source/core/css/CSSCrossfadeValue.cpp
index 78e1de5..add2968 100644
--- a/third_party/WebKit/Source/core/css/CSSCrossfadeValue.cpp
+++ b/third_party/WebKit/Source/core/css/CSSCrossfadeValue.cpp
@@ -159,8 +159,8 @@
   if (!from_image || !to_image)
     return IntSize();
 
-  IntSize from_image_size = from_image->size();
-  IntSize to_image_size = to_image->size();
+  IntSize from_image_size = from_image->Size();
+  IntSize to_image_size = to_image->Size();
 
   if (from_image->IsSVGImage())
     from_image_size = RoundedIntSize(
diff --git a/third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp b/third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp
index 662e265..83acd1a5 100644
--- a/third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp
+++ b/third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp
@@ -652,7 +652,7 @@
         CSSPropertyBackgroundPosition, *curr_layer, style));
     list->Append(*before_slash);
     CSSValueList* after_slash = CSSValueList::CreateSpaceSeparated();
-    after_slash->Append(*ValueForFillSize(curr_layer->size(), style));
+    after_slash->Append(*ValueForFillSize(curr_layer->Size(), style));
     after_slash->Append(*CSSIdentifierValue::Create(curr_layer->Origin()));
     after_slash->Append(*CSSIdentifierValue::Create(curr_layer->Clip()));
     list->Append(*after_slash);
@@ -2108,7 +2108,7 @@
                                         ? &style.MaskLayers()
                                         : &style.BackgroundLayers();
       for (; curr_layer; curr_layer = curr_layer->Next())
-        list->Append(*ValueForFillSize(curr_layer->size(), style));
+        list->Append(*ValueForFillSize(curr_layer->Size(), style));
       return list;
     }
     case CSSPropertyBackgroundRepeat:
diff --git a/third_party/WebKit/Source/core/css/cssom/CSSStyleValue.cpp b/third_party/WebKit/Source/core/css/cssom/CSSStyleValue.cpp
index 325cdd3..473c929 100644
--- a/third_party/WebKit/Source/core/css/cssom/CSSStyleValue.cpp
+++ b/third_party/WebKit/Source/core/css/cssom/CSSStyleValue.cpp
@@ -6,7 +6,7 @@
 
 #include "bindings/core/v8/ExceptionState.h"
 #include "bindings/core/v8/ScriptValue.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "core/StylePropertyShorthand.h"
 #include "core/css/cssom/StyleValueFactory.h"
 #include "core/css/parser/CSSParser.h"
diff --git a/third_party/WebKit/Source/core/dom/Document.cpp b/third_party/WebKit/Source/core/dom/Document.cpp
index 55220c8ab..9e6b7c3 100644
--- a/third_party/WebKit/Source/core/dom/Document.cpp
+++ b/third_party/WebKit/Source/core/dom/Document.cpp
@@ -282,7 +282,7 @@
 
 // After a document has been committed for this time, it can create a history
 // entry even if the user hasn't interacted with the document.
-static const int kCElapsedTimeForHistoryEntryWithoutUserGestureMS = 5000;
+static const int kElapsedTimeForHistoryEntryWithoutUserGestureMS = 5000;
 
 // DOM Level 2 says (letters added):
 //
@@ -3221,11 +3221,11 @@
   // on creating history entries without user gestures. I'm waiting to update
   // the tests until the feature is proven to minimize churn.
   // https://bugs.chromium.org/p/chromium/issues/detail?id=638198
-  if (!frame_->GetSettings()->GetHistoryEntryRequiresUserGesture())
+  if (!GetSettings() || !GetSettings()->GetHistoryEntryRequiresUserGesture())
     return true;
   if (frame_->HasReceivedUserGesture())
     return true;
-  return ElapsedTime() >= kCElapsedTimeForHistoryEntryWithoutUserGestureMS;
+  return ElapsedTime() >= kElapsedTimeForHistoryEntryWithoutUserGestureMS;
 }
 
 void Document::write(const SegmentedString& text,
@@ -5437,19 +5437,19 @@
     }
   }
 
-  Vector<IconURL> icon_ur_ls;
+  Vector<IconURL> icon_urls;
   if (first_favicon.icon_type_ != kInvalidIcon)
-    icon_ur_ls.push_back(first_favicon);
+    icon_urls.push_back(first_favicon);
   else if (url_.ProtocolIsInHTTPFamily() && icon_types_mask & kFavicon)
-    icon_ur_ls.push_back(IconURL::DefaultFavicon(url_));
+    icon_urls.push_back(IconURL::DefaultFavicon(url_));
 
   if (first_touch_icon.icon_type_ != kInvalidIcon)
-    icon_ur_ls.push_back(first_touch_icon);
+    icon_urls.push_back(first_touch_icon);
   if (first_touch_precomposed_icon.icon_type_ != kInvalidIcon)
-    icon_ur_ls.push_back(first_touch_precomposed_icon);
+    icon_urls.push_back(first_touch_precomposed_icon);
   for (int i = secondary_icons.size() - 1; i >= 0; --i)
-    icon_ur_ls.push_back(secondary_icons[i]);
-  return icon_ur_ls;
+    icon_urls.push_back(secondary_icons[i]);
+  return icon_urls;
 }
 
 Color Document::ThemeColor() const {
diff --git a/third_party/WebKit/Source/core/dom/Element.cpp b/third_party/WebKit/Source/core/dom/Element.cpp
index 93797e20..40486270 100644
--- a/third_party/WebKit/Source/core/dom/Element.cpp
+++ b/third_party/WebKit/Source/core/dom/Element.cpp
@@ -1122,7 +1122,7 @@
     return IntRect();
   // TODO(tkent): Can we check invisibility by scrollable non-frame elements?
 
-  IntSize viewport_size = GetDocument().GetPage()->GetVisualViewport().size();
+  IntSize viewport_size = GetDocument().GetPage()->GetVisualViewport().Size();
   IntRect rect(0, 0, viewport_size.Width(), viewport_size.Height());
   // We don't use absoluteBoundingBoxRect() because it can return an IntRect
   // larger the actual size by 1px. crbug.com/470503
diff --git a/third_party/WebKit/Source/core/dom/ViewportDescription.cpp b/third_party/WebKit/Source/core/dom/ViewportDescription.cpp
index f460171..10542cb 100644
--- a/third_party/WebKit/Source/core/dom/ViewportDescription.cpp
+++ b/third_party/WebKit/Source/core/dom/ViewportDescription.cpp
@@ -278,7 +278,7 @@
         // entire page to be visible.
         int viewport_width = max_width.IntValue();
         int window_width =
-            main_frame->GetPage()->GetVisualViewport().size().Width();
+            main_frame->GetPage()->GetVisualViewport().Size().Width();
         int overview_zoom_percent =
             100 * window_width / static_cast<float>(viewport_width);
         DEFINE_STATIC_LOCAL(SparseHistogram, overview_zoom_histogram,
diff --git a/third_party/WebKit/Source/core/editing/InputMethodControllerTest.cpp b/third_party/WebKit/Source/core/editing/InputMethodControllerTest.cpp
index 5bdd506..33043a74 100644
--- a/third_party/WebKit/Source/core/editing/InputMethodControllerTest.cpp
+++ b/third_party/WebKit/Source/core/editing/InputMethodControllerTest.cpp
@@ -1545,10 +1545,6 @@
                    .Data());
 }
 
-// TODO(rlanday): The behavior tested in the following DocumentMarker tests is
-// going to be changed so markers are not split when text they contain is
-// deleted
-
 TEST_F(InputMethodControllerTest,
        Marker_WhitespaceFixupAroundMarkerBeginningWithSpace) {
   Element* div = InsertHTMLElement(
@@ -1569,15 +1565,11 @@
   Controller().SetCompositionFromExistingText(empty_underlines, 6, 10);
   Controller().CommitText(String(""), empty_underlines, 0);
 
-  // Check that the marker was split when the space at the beginning was
-  // converted to an nbsp
-  EXPECT_EQ(2u, GetDocument().Markers().Markers().size());
-  EXPECT_STREQ("\xC2\xA0",  // UTF-8 for an nbsp
-               GetMarkedText(GetDocument().Markers(), div->FirstChild(), 0)
-                   .Utf8()
-                   .Data());
-  EXPECT_STREQ("text",
-               GetMarkedText(GetDocument().Markers(), div->FirstChild(), 1)
+  // Check that the marker is still attached to " text" and includes the space
+  // before "text" but not the space after
+  EXPECT_EQ(1u, GetDocument().Markers().Markers().size());
+  ASSERT_STREQ("\xC2\xA0text",
+               GetMarkedText(GetDocument().Markers(), div->firstChild(), 0)
                    .Utf8()
                    .Data());
 }
@@ -1602,15 +1594,11 @@
   Controller().SetCompositionFromExistingText(empty_underlines, 6, 10);
   Controller().CommitText(String(""), empty_underlines, 0);
 
-  // Check that the marker was split when the space at the end was
-  // converted to an nbsp
-  EXPECT_EQ(2u, GetDocument().Markers().Markers().size());
-  EXPECT_STREQ("text",
-               GetMarkedText(GetDocument().Markers(), div->FirstChild(), 0)
-                   .Utf8()
-                   .Data());
-  EXPECT_STREQ("\xC2\xA0",  // UTF-8 for an nbsp
-               GetMarkedText(GetDocument().Markers(), div->FirstChild(), 1)
+  // Check that the marker is still attached to "text " and includes the space
+  // after "text" but not the space before
+  EXPECT_EQ(1u, GetDocument().Markers().Markers().size());
+  ASSERT_STREQ("text\xC2\xA0",
+               GetMarkedText(GetDocument().Markers(), div->firstChild(), 0)
                    .Utf8()
                    .Data());
 }
@@ -1636,19 +1624,11 @@
   Controller().SetCompositionFromExistingText(empty_underlines, 6, 10);
   Controller().CommitText(String(""), empty_underlines, 0);
 
-  // Check that the marker was split into three pieces when the two spaces were
-  // converted to nbsps
-  EXPECT_EQ(3u, GetDocument().Markers().Markers().size());
-  EXPECT_STREQ("\xC2\xA0",  // UTF-8 for an nbsp
-               GetMarkedText(GetDocument().Markers(), div->FirstChild(), 0)
-                   .Utf8()
-                   .Data());
-  EXPECT_STREQ("text",
-               GetMarkedText(GetDocument().Markers(), div->FirstChild(), 1)
-                   .Utf8()
-                   .Data());
-  EXPECT_STREQ("\xC2\xA0",  // UTF-8 for an nbsp
-               GetMarkedText(GetDocument().Markers(), div->FirstChild(), 2)
+  // Check that the marker is still attached to " text " and includes both the
+  // space before "text" and the space after
+  EXPECT_EQ(1u, GetDocument().Markers().Markers().size());
+  ASSERT_STREQ("\xC2\xA0text\xC2\xA0",
+               GetMarkedText(GetDocument().Markers(), div->firstChild(), 0)
                    .Utf8()
                    .Data());
 }
@@ -1668,11 +1648,10 @@
   Controller().SetCompositionFromExistingText(empty_underlines, 0, 7);
   Controller().CommitText(String("Original"), empty_underlines, 0);
 
-  // Verify marker is under "al text"
-  // ("Initial" and "Original" have "al" as a common suffix)
+  // Verify marker is under "Original text"
   EXPECT_EQ(1u, GetDocument().Markers().Markers().size());
-  EXPECT_STREQ("al text",
-               GetMarkedText(GetDocument().Markers(), div->FirstChild(), 0)
+  ASSERT_STREQ("Original text",
+               GetMarkedText(GetDocument().Markers(), div->firstChild(), 0)
                    .Utf8()
                    .Data());
 }
@@ -1716,10 +1695,10 @@
   Controller().SetCompositionFromExistingText(empty_underlines, 8, 12);
   Controller().CommitText(String("string"), empty_underlines, 0);
 
-  // Verify marker is under "Initial "
+  // Verify marker is under "Initial string"
   EXPECT_EQ(1u, GetDocument().Markers().Markers().size());
-  EXPECT_STREQ("Initial ",
-               GetMarkedText(GetDocument().Markers(), div->FirstChild(), 0)
+  ASSERT_STREQ("Initial string",
+               GetMarkedText(GetDocument().Markers(), div->firstChild(), 0)
                    .Utf8()
                    .Data());
 }
@@ -1765,8 +1744,12 @@
   Controller().SetCompositionFromExistingText(empty_underlines, 8, 12);
   Controller().CommitText(String("string"), empty_underlines, 0);
 
-  // Verify marker was removed
-  EXPECT_EQ(0u, GetDocument().Markers().Markers().size());
+  // Verify marker is under "string"
+  EXPECT_EQ(1u, GetDocument().Markers().Markers().size());
+  ASSERT_STREQ("string",
+               GetMarkedText(GetDocument().Markers(), div->firstChild(), 0)
+                   .Utf8()
+                   .Data());
 }
 
 TEST_F(InputMethodControllerTest, Marker_ReplaceTextWithMarkerAtBeginning) {
@@ -1811,4 +1794,174 @@
   EXPECT_EQ(0u, GetDocument().Markers().Markers().size());
 }
 
+TEST_F(InputMethodControllerTest, Marker_Deletions) {
+  Element* div = InsertHTMLElement(
+      "<div id='sample' contenteditable>1111122222333334444455555</div>",
+      "sample");
+
+  EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div);
+  GetDocument().Markers().AddMarker(marker_range.StartPosition(),
+                                    marker_range.EndPosition(),
+                                    DocumentMarker::kTextMatch);
+
+  marker_range = PlainTextRange(5, 10).CreateRange(*div);
+  GetDocument().Markers().AddMarker(marker_range.StartPosition(),
+                                    marker_range.EndPosition(),
+                                    DocumentMarker::kTextMatch);
+
+  marker_range = PlainTextRange(10, 15).CreateRange(*div);
+  GetDocument().Markers().AddMarker(marker_range.StartPosition(),
+                                    marker_range.EndPosition(),
+                                    DocumentMarker::kTextMatch);
+
+  marker_range = PlainTextRange(15, 20).CreateRange(*div);
+  GetDocument().Markers().AddMarker(marker_range.StartPosition(),
+                                    marker_range.EndPosition(),
+                                    DocumentMarker::kTextMatch);
+
+  marker_range = PlainTextRange(20, 25).CreateRange(*div);
+  GetDocument().Markers().AddMarker(marker_range.StartPosition(),
+                                    marker_range.EndPosition(),
+                                    DocumentMarker::kTextMatch);
+
+  EXPECT_EQ(5u, GetDocument().Markers().Markers().size());
+
+  // Delete third marker and portions of second and fourth
+  Vector<CompositionUnderline> empty_underlines;
+  Controller().SetCompositionFromExistingText(empty_underlines, 8, 17);
+  Controller().CommitText(String(""), empty_underlines, 0);
+
+  // Verify markers were updated correctly
+  EXPECT_EQ(4u, GetDocument().Markers().Markers().size());
+
+  EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset());
+  EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->EndOffset());
+
+  EXPECT_EQ(5u, GetDocument().Markers().Markers()[1]->StartOffset());
+  EXPECT_EQ(8u, GetDocument().Markers().Markers()[1]->EndOffset());
+
+  EXPECT_EQ(8u, GetDocument().Markers().Markers()[2]->StartOffset());
+  EXPECT_EQ(11u, GetDocument().Markers().Markers()[2]->EndOffset());
+
+  EXPECT_EQ(11u, GetDocument().Markers().Markers()[3]->StartOffset());
+  EXPECT_EQ(16u, GetDocument().Markers().Markers()[3]->EndOffset());
+}
+
+TEST_F(InputMethodControllerTest, Marker_DeleteExactlyOnMarker) {
+  Element* div = InsertHTMLElement(
+      "<div id='sample' contenteditable>1111122222333334444455555</div>",
+      "sample");
+
+  EphemeralRange marker_range = PlainTextRange(5, 10).CreateRange(*div);
+  GetDocument().Markers().AddMarker(marker_range.StartPosition(),
+                                    marker_range.EndPosition(),
+                                    DocumentMarker::kTextMatch);
+
+  EXPECT_EQ(1u, GetDocument().Markers().Markers().size());
+
+  // Delete exactly on the marker
+  Vector<CompositionUnderline> empty_underlines;
+  Controller().SetCompositionFromExistingText(empty_underlines, 5, 10);
+  Controller().CommitText(String(""), empty_underlines, 0);
+  EXPECT_EQ(0u, GetDocument().Markers().Markers().size());
+}
+
+TEST_F(InputMethodControllerTest, Marker_DeleteMiddleOfMarker) {
+  Element* div = InsertHTMLElement(
+      "<div id='sample' contenteditable>1111122222333334444455555</div>",
+      "sample");
+
+  EphemeralRange marker_range = PlainTextRange(5, 10).CreateRange(*div);
+  GetDocument().Markers().AddMarker(marker_range.StartPosition(),
+                                    marker_range.EndPosition(),
+                                    DocumentMarker::kTextMatch);
+
+  // Delete middle of marker
+  Vector<CompositionUnderline> empty_underlines;
+  Controller().SetCompositionFromExistingText(empty_underlines, 6, 9);
+  Controller().CommitText(String(""), empty_underlines, 0);
+
+  EXPECT_EQ(1u, GetDocument().Markers().Markers().size());
+
+  EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->StartOffset());
+  EXPECT_EQ(7u, GetDocument().Markers().Markers()[0]->EndOffset());
+}
+
+TEST_F(InputMethodControllerTest, Marker_InsertInMarkerInterior) {
+  Element* div = InsertHTMLElement(
+      "<div id='sample' contenteditable>1111122222333334444455555</div>",
+      "sample");
+
+  EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div);
+  GetDocument().Markers().AddMarker(marker_range.StartPosition(),
+                                    marker_range.EndPosition(),
+                                    DocumentMarker::kTextMatch);
+
+  marker_range = PlainTextRange(5, 10).CreateRange(*div);
+  GetDocument().Markers().AddMarker(marker_range.StartPosition(),
+                                    marker_range.EndPosition(),
+                                    DocumentMarker::kTextMatch);
+
+  marker_range = PlainTextRange(10, 15).CreateRange(*div);
+  GetDocument().Markers().AddMarker(marker_range.StartPosition(),
+                                    marker_range.EndPosition(),
+                                    DocumentMarker::kTextMatch);
+
+  EXPECT_EQ(3u, GetDocument().Markers().Markers().size());
+
+  // insert in middle of second marker
+  Vector<CompositionUnderline> empty_underlines;
+  Controller().SetComposition("", empty_underlines, 7, 7);
+  Controller().CommitText(String("66666"), empty_underlines, -7);
+
+  EXPECT_EQ(3u, GetDocument().Markers().Markers().size());
+
+  EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset());
+  EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->EndOffset());
+
+  EXPECT_EQ(5u, GetDocument().Markers().Markers()[1]->StartOffset());
+  EXPECT_EQ(15u, GetDocument().Markers().Markers()[1]->EndOffset());
+
+  EXPECT_EQ(15u, GetDocument().Markers().Markers()[2]->StartOffset());
+  EXPECT_EQ(20u, GetDocument().Markers().Markers()[2]->EndOffset());
+}
+
+TEST_F(InputMethodControllerTest, Marker_InsertBetweenMarkers) {
+  Element* div = InsertHTMLElement(
+      "<div id='sample' contenteditable>1111122222333334444455555</div>",
+      "sample");
+
+  EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div);
+  GetDocument().Markers().AddMarker(marker_range.StartPosition(),
+                                    marker_range.EndPosition(),
+                                    DocumentMarker::kTextMatch);
+
+  marker_range = PlainTextRange(5, 15).CreateRange(*div);
+  GetDocument().Markers().AddMarker(marker_range.StartPosition(),
+                                    marker_range.EndPosition(),
+                                    DocumentMarker::kTextMatch);
+
+  marker_range = PlainTextRange(15, 20).CreateRange(*div);
+  GetDocument().Markers().AddMarker(marker_range.StartPosition(),
+                                    marker_range.EndPosition(),
+                                    DocumentMarker::kTextMatch);
+
+  EXPECT_EQ(3u, GetDocument().Markers().Markers().size());
+
+  Vector<CompositionUnderline> empty_underlines;
+  Controller().SetComposition("", empty_underlines, 5, 5);
+  Controller().CommitText(String("77777"), empty_underlines, 0);
+
+  EXPECT_EQ(3u, GetDocument().Markers().Markers().size());
+
+  EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset());
+  EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->EndOffset());
+
+  EXPECT_EQ(10u, GetDocument().Markers().Markers()[1]->StartOffset());
+  EXPECT_EQ(20u, GetDocument().Markers().Markers()[1]->EndOffset());
+
+  EXPECT_EQ(20u, GetDocument().Markers().Markers()[2]->StartOffset());
+  EXPECT_EQ(25u, GetDocument().Markers().Markers()[2]->EndOffset());
+}
+
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.cpp b/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.cpp
index 7571c5fa..f24d312 100644
--- a/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.cpp
+++ b/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.cpp
@@ -25,6 +25,7 @@
 
 #include "core/editing/commands/CompositeEditCommand.h"
 
+#include <algorithm>
 #include "bindings/core/v8/ExceptionState.h"
 #include "core/HTMLNames.h"
 #include "core/dom/Document.h"
@@ -52,6 +53,7 @@
 #include "core/editing/commands/RemoveNodePreservingChildrenCommand.h"
 #include "core/editing/commands/ReplaceNodeWithSpanCommand.h"
 #include "core/editing/commands/ReplaceSelectionCommand.h"
+#include "core/editing/commands/SetCharacterDataCommand.h"
 #include "core/editing/commands/SetNodeAttributeCommand.h"
 #include "core/editing/commands/SplitElementCommand.h"
 #include "core/editing/commands/SplitTextNodeCommand.h"
@@ -73,7 +75,6 @@
 #include "core/layout/LayoutListItem.h"
 #include "core/layout/LayoutText.h"
 #include "core/layout/line/InlineTextBox.h"
-#include <algorithm>
 
 namespace blink {
 
@@ -540,15 +541,10 @@
                                              unsigned offset,
                                              unsigned count,
                                              const String& replacement_text) {
-  // DeleteFromTextNodeCommand and InsertIntoTextNodeCommand are never
-  // aborted.
+  // SetCharacterDataCommand is never aborted.
   ApplyCommandToComposite(
-      DeleteFromTextNodeCommand::Create(node, offset, count),
+      SetCharacterDataCommand::Create(node, offset, count, replacement_text),
       ASSERT_NO_EDITING_ABORT);
-  if (!replacement_text.IsEmpty())
-    ApplyCommandToComposite(
-        InsertIntoTextNodeCommand::Create(node, offset, replacement_text),
-        ASSERT_NO_EDITING_ABORT);
 }
 
 Position CompositeEditCommand::ReplaceSelectedTextInNode(const String& text) {
@@ -567,50 +563,6 @@
   return Position(text_node, start.OffsetInContainerNode() + text.length());
 }
 
-static void CopyMarkerTypesAndDescriptions(
-    const DocumentMarkerVector& marker_pointers,
-    Vector<DocumentMarker::MarkerType>& types,
-    Vector<String>& descriptions) {
-  size_t array_size = marker_pointers.size();
-  types.ReserveCapacity(array_size);
-  descriptions.ReserveCapacity(array_size);
-  for (const auto& marker_pointer : marker_pointers) {
-    types.push_back(marker_pointer->GetType());
-    descriptions.push_back(marker_pointer->Description());
-  }
-}
-
-void CompositeEditCommand::ReplaceTextInNodePreservingMarkers(
-    Text* node,
-    unsigned offset,
-    unsigned count,
-    const String& replacement_text) {
-  DocumentMarkerController& marker_controller = GetDocument().Markers();
-  Vector<DocumentMarker::MarkerType> types;
-  Vector<String> descriptions;
-  CopyMarkerTypesAndDescriptions(
-      marker_controller.MarkersInRange(
-          EphemeralRange(Position(node, offset),
-                         Position(node, offset + count)),
-          DocumentMarker::AllMarkers()),
-      types, descriptions);
-
-  ReplaceTextInNode(node, offset, count, replacement_text);
-
-  // Re-adding markers requires a clean tree.
-  GetDocument().UpdateStyleAndLayout();
-
-  DocumentLifecycle::DisallowTransitionScope disallow_transition(
-      GetDocument().Lifecycle());
-  Position start_position(node, offset);
-  Position end_position(node, offset + replacement_text.length());
-  DCHECK_EQ(types.size(), descriptions.size());
-
-  for (size_t i = 0; i < types.size(); ++i)
-    marker_controller.AddMarker(start_position, end_position, types[i],
-                                descriptions[i]);
-}
-
 Position CompositeEditCommand::PositionOutsideTabSpan(const Position& pos) {
   if (!IsTabHTMLSpanElementTextNode(pos.AnchorNode()))
     return pos;
@@ -775,8 +727,7 @@
       should_emit_nbs_pbefore_end);
 
   if (string != rebalanced_string)
-    ReplaceTextInNodePreservingMarkers(text_node, upstream, length,
-                                       rebalanced_string);
+    ReplaceTextInNode(text_node, upstream, length, rebalanced_string);
 }
 
 void CompositeEditCommand::PrepareWhitespaceAtPositionForSplit(
@@ -818,9 +769,8 @@
   Position pos = MostForwardCaretPosition(visible_position.DeepEquivalent());
   if (!pos.ComputeContainerNode() || !pos.ComputeContainerNode()->IsTextNode())
     return;
-  ReplaceTextInNodePreservingMarkers(ToText(pos.ComputeContainerNode()),
-                                     pos.OffsetInContainerNode(), 1,
-                                     NonBreakingSpaceString());
+  ReplaceTextInNode(ToText(pos.ComputeContainerNode()),
+                    pos.OffsetInContainerNode(), 1, NonBreakingSpaceString());
 }
 
 void CompositeEditCommand::RebalanceWhitespace() {
diff --git a/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.h b/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.h
index 412fe58..f8307c2 100644
--- a/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.h
+++ b/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.h
@@ -157,10 +157,6 @@
                          unsigned count,
                          const String& replacement_text);
   Position ReplaceSelectedTextInNode(const String&);
-  void ReplaceTextInNodePreservingMarkers(Text*,
-                                          unsigned offset,
-                                          unsigned count,
-                                          const String& replacement_text);
   Position PositionOutsideTabSpan(const Position&);
   void SetNodeAttribute(Element*,
                         const QualifiedName& attribute,
diff --git a/third_party/WebKit/Source/core/editing/commands/DeleteSelectionCommand.cpp b/third_party/WebKit/Source/core/editing/commands/DeleteSelectionCommand.cpp
index c3cec49..7a9c48e5 100644
--- a/third_party/WebKit/Source/core/editing/commands/DeleteSelectionCommand.cpp
+++ b/third_party/WebKit/Source/core/editing/commands/DeleteSelectionCommand.cpp
@@ -760,9 +760,9 @@
     DCHECK(!text_node->GetLayoutObject() ||
            text_node->GetLayoutObject()->Style()->CollapseWhiteSpace())
         << text_node;
-    ReplaceTextInNodePreservingMarkers(
-        text_node, leading_whitespace_.ComputeOffsetInContainerNode(), 1,
-        NonBreakingSpaceString());
+    ReplaceTextInNode(text_node,
+                      leading_whitespace_.ComputeOffsetInContainerNode(), 1,
+                      NonBreakingSpaceString());
   }
   if (trailing_whitespace_.IsNotNull() &&
       !IsRenderedCharacter(trailing_whitespace_) &&
@@ -771,9 +771,9 @@
     DCHECK(!text_node->GetLayoutObject() ||
            text_node->GetLayoutObject()->Style()->CollapseWhiteSpace())
         << text_node;
-    ReplaceTextInNodePreservingMarkers(
-        text_node, trailing_whitespace_.ComputeOffsetInContainerNode(), 1,
-        NonBreakingSpaceString());
+    ReplaceTextInNode(text_node,
+                      trailing_whitespace_.ComputeOffsetInContainerNode(), 1,
+                      NonBreakingSpaceString());
   }
 }
 
diff --git a/third_party/WebKit/Source/core/editing/commands/InsertParagraphSeparatorCommand.cpp b/third_party/WebKit/Source/core/editing/commands/InsertParagraphSeparatorCommand.cpp
index b39fbc6..e2345c60 100644
--- a/third_party/WebKit/Source/core/editing/commands/InsertParagraphSeparatorCommand.cpp
+++ b/third_party/WebKit/Source/core/editing/commands/InsertParagraphSeparatorCommand.cpp
@@ -471,9 +471,9 @@
     DCHECK(!text_node->GetLayoutObject() ||
            text_node->GetLayoutObject()->Style()->CollapseWhiteSpace())
         << text_node;
-    ReplaceTextInNodePreservingMarkers(
-        text_node, leading_whitespace.ComputeOffsetInContainerNode(), 1,
-        NonBreakingSpaceString());
+    ReplaceTextInNode(text_node,
+                      leading_whitespace.ComputeOffsetInContainerNode(), 1,
+                      NonBreakingSpaceString());
     GetDocument().UpdateStyleAndLayoutIgnorePendingStylesheets();
   }
 
diff --git a/third_party/WebKit/Source/core/editing/markers/DocumentMarker.cpp b/third_party/WebKit/Source/core/editing/markers/DocumentMarker.cpp
index 05b050da4..a57a48e 100644
--- a/third_party/WebKit/Source/core/editing/markers/DocumentMarker.cpp
+++ b/third_party/WebKit/Source/core/editing/markers/DocumentMarker.cpp
@@ -175,6 +175,52 @@
       end_offset_(marker.EndOffset()),
       details_(marker.Details()) {}
 
+Optional<DocumentMarker::MarkerOffsets>
+DocumentMarker::ComputeOffsetsAfterShift(unsigned offset,
+                                         unsigned old_length,
+                                         unsigned new_length) const {
+  MarkerOffsets result;
+  result.start_offset = StartOffset();
+  result.end_offset = EndOffset();
+
+  // algorithm inspired by https://dom.spec.whatwg.org/#concept-cd-replace
+  // but with some changes
+
+  // Deviation from the concept-cd-replace algorithm: second condition in the
+  // next line (don't include text inserted immediately before a marker in the
+  // marked range, but do include the new text if it's replacing text in the
+  // marked range)
+  if (StartOffset() > offset || (StartOffset() == offset && old_length == 0)) {
+    if (StartOffset() <= offset + old_length) {
+      // Marker start was in the replaced text. Move to end of new text
+      // (Deviation from the concept-cd-replace algorithm: that algorithm
+      // would move to the beginning of the new text here)
+      result.start_offset = offset + new_length;
+    } else {
+      // Marker start was after the replaced text. Shift by length
+      // difference
+      result.start_offset = StartOffset() + new_length - old_length;
+    }
+  }
+
+  if (EndOffset() > offset) {
+    // Deviation from the concept-cd-replace algorithm: < instead of <= in
+    // the next line
+    if (EndOffset() < offset + old_length) {
+      // Marker end was in the replaced text. Move to beginning of new text
+      result.end_offset = offset;
+    } else {
+      // Marker end was after the replaced text. Shift by length difference
+      result.end_offset = EndOffset() + new_length - old_length;
+    }
+  }
+
+  if (result.start_offset >= result.end_offset)
+    return WTF::kNullopt;
+
+  return result;
+}
+
 void DocumentMarker::ShiftOffsets(int delta) {
   start_offset_ += delta;
   end_offset_ += delta;
diff --git a/third_party/WebKit/Source/core/editing/markers/DocumentMarker.h b/third_party/WebKit/Source/core/editing/markers/DocumentMarker.h
index e1c9096c..9d22eb7 100644
--- a/third_party/WebKit/Source/core/editing/markers/DocumentMarker.h
+++ b/third_party/WebKit/Source/core/editing/markers/DocumentMarker.h
@@ -26,6 +26,7 @@
 #include "core/CoreExport.h"
 #include "platform/graphics/Color.h"
 #include "platform/heap/Handle.h"
+#include "wtf/Optional.h"
 #include "wtf/VectorTraits.h"
 #include "wtf/text/WTFString.h"
 
@@ -164,6 +165,15 @@
   void SetIsActiveMatch(bool);
   void ClearDetails() { details_.Clear(); }
 
+  struct MarkerOffsets {
+    unsigned start_offset;
+    unsigned end_offset;
+  };
+
+  Optional<MarkerOffsets> ComputeOffsetsAfterShift(unsigned offset,
+                                                   unsigned old_length,
+                                                   unsigned new_length) const;
+
   // Offset modifications are done by DocumentMarkerController.
   // Other classes should not call following setters.
   void SetStartOffset(unsigned offset) { start_offset_ = offset; }
diff --git a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp
index c68602d..43fb66f 100644
--- a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp
+++ b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp
@@ -179,11 +179,6 @@
   return lhv->StartOffset() < rhv->StartOffset();
 }
 
-static bool StartsAfter(const Member<RenderedDocumentMarker>& marker,
-                        size_t start_offset) {
-  return marker->StartOffset() < start_offset;
-}
-
 static bool EndsBefore(size_t start_offset,
                        const Member<RenderedDocumentMarker>& rhv) {
   return start_offset < rhv->EndOffset();
@@ -303,10 +298,7 @@
     return;
 
   bool doc_dirty = false;
-  for (size_t marker_list_index = 0;
-       marker_list_index < DocumentMarker::kMarkerTypeIndexesCount;
-       ++marker_list_index) {
-    Member<MarkerList>& list = (*markers)[marker_list_index];
+  for (Member<MarkerList> list : *markers) {
     if (!list)
       continue;
 
@@ -730,47 +722,6 @@
   }
 }
 
-void DocumentMarkerController::ShiftMarkers(Node* node,
-                                            unsigned start_offset,
-                                            int delta) {
-  if (!PossiblyHasMarkers(DocumentMarker::AllMarkers()))
-    return;
-  DCHECK(!markers_.IsEmpty());
-
-  MarkerLists* markers = markers_.at(node);
-  if (!markers)
-    return;
-
-  bool did_shift_marker = false;
-  for (size_t marker_list_index = 0;
-       marker_list_index < DocumentMarker::kMarkerTypeIndexesCount;
-       ++marker_list_index) {
-    Member<MarkerList>& list = (*markers)[marker_list_index];
-    if (!list)
-      continue;
-    MarkerList::iterator start_pos =
-        std::lower_bound(list->begin(), list->end(), start_offset, StartsAfter);
-    for (MarkerList::iterator marker = start_pos; marker != list->end();
-         ++marker) {
-#if DCHECK_IS_ON()
-      int start_offset = (*marker)->StartOffset();
-      DCHECK_GE(start_offset + delta, 0);
-#endif
-      (*marker)->ShiftOffsets(delta);
-      did_shift_marker = true;
-    }
-  }
-
-  if (did_shift_marker) {
-    InvalidateRectsForMarkersInNode(*node);
-    // repaint the affected node
-    if (node->GetLayoutObject()) {
-      node->GetLayoutObject()->SetShouldDoFullPaintInvalidation(
-          kPaintInvalidationDocumentMarkerChange);
-    }
-  }
-}
-
 bool DocumentMarkerController::SetMarkersActive(const EphemeralRange& range,
                                                 bool active) {
   if (!PossiblyHasMarkers(DocumentMarker::AllMarkers()))
@@ -870,10 +821,46 @@
                                                       unsigned offset,
                                                       unsigned old_length,
                                                       unsigned new_length) {
-  // Shift markers as if we first remove the old text, then insert the new text
-  RemoveMarkers(node, offset, old_length);
-  ShiftMarkers(node, offset + old_length, 0 - old_length);
-  ShiftMarkers(node, offset, new_length);
+  if (!PossiblyHasMarkers(DocumentMarker::AllMarkers()))
+    return;
+  DCHECK(!markers_.IsEmpty());
+
+  MarkerLists* markers = markers_.at(node);
+  if (!markers)
+    return;
+
+  bool did_shift_marker = false;
+  for (MarkerList* list : *markers) {
+    if (!list)
+      continue;
+
+    for (MarkerList::iterator it = list->begin(); it != list->end(); ++it) {
+      RenderedDocumentMarker& marker = **it;
+      Optional<DocumentMarker::MarkerOffsets> result =
+          marker.ComputeOffsetsAfterShift(offset, old_length, new_length);
+      if (result == WTF::kNullopt) {
+        list->erase(it - list->begin());
+        --it;
+        did_shift_marker = true;
+        continue;
+      }
+
+      if (marker.StartOffset() != result.value().start_offset ||
+          marker.EndOffset() != result.value().end_offset) {
+        did_shift_marker = true;
+        marker.SetStartOffset(result.value().start_offset);
+        marker.SetEndOffset(result.value().end_offset);
+      }
+    }
+  }
+
+  if (!did_shift_marker)
+    return;
+  if (!node->GetLayoutObject())
+    return;
+  InvalidateRectsForMarkersInNode(*node);
+  // repaint the affected node
+  node->GetLayoutObject()->SetShouldDoFullPaintInvalidation();
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.h b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.h
index 33aca40..398d7432 100644
--- a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.h
+++ b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.h
@@ -30,6 +30,7 @@
 #define DocumentMarkerController_h
 
 #include "core/CoreExport.h"
+#include "core/dom/SynchronousMutationObserver.h"
 #include "core/editing/iterators/TextIterator.h"
 #include "core/editing/markers/DocumentMarker.h"
 #include "platform/geometry/IntRect.h"
@@ -103,7 +104,6 @@
   void RemoveMarkers(const MarkerRemoverPredicate& should_remove_marker);
   void RepaintMarkers(
       DocumentMarker::MarkerTypes = DocumentMarker::AllMarkers());
-  void ShiftMarkers(Node*, unsigned start_offset, int delta);
   // Returns true if markers within a range are found.
   bool SetMarkersActive(const EphemeralRange&, bool);
   // Returns true if markers within a range defined by a node, |startOffset| and
diff --git a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerTest.cpp b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerTest.cpp
index 6d3f23b..c9684a6 100644
--- a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerTest.cpp
+++ b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerTest.cpp
@@ -8,7 +8,15 @@
 
 namespace blink {
 
-class DocumentMarkerTest : public ::testing::Test {};
+using MarkerOffsets = DocumentMarker::MarkerOffsets;
+
+class DocumentMarkerTest : public ::testing::Test {
+ protected:
+  DocumentMarker* CreateMarker(unsigned startOffset, unsigned endOffset) {
+    return new DocumentMarker(startOffset, endOffset,
+                              DocumentMarker::MatchStatus::kInactive);
+  }
+};
 
 TEST_F(DocumentMarkerTest, MarkerTypeIteratorEmpty) {
   DocumentMarker::MarkerTypes types(0);
@@ -45,4 +53,166 @@
   ++it;
   EXPECT_TRUE(it == types.end());
 }
+
+TEST_F(DocumentMarkerTest, GetShiftedMarkerPosition_DeleteAfter) {
+  DocumentMarker* marker = CreateMarker(0, 5);
+  Optional<MarkerOffsets> result = marker->ComputeOffsetsAfterShift(13, 19, 0);
+  EXPECT_EQ(0u, result.value().start_offset);
+  EXPECT_EQ(5u, result.value().end_offset);
 }
+
+TEST_F(DocumentMarkerTest, GetShiftedMarkerPosition_DeleteEndAndAfter) {
+  DocumentMarker* marker = CreateMarker(10, 15);
+  Optional<MarkerOffsets> result = marker->ComputeOffsetsAfterShift(13, 19, 0);
+  EXPECT_EQ(10u, result.value().start_offset);
+  EXPECT_EQ(13u, result.value().end_offset);
+}
+
+TEST_F(DocumentMarkerTest, GetShiftedMarkerPosition_DeleteBeforeAndAfter) {
+  DocumentMarker* marker = CreateMarker(20, 25);
+  Optional<MarkerOffsets> result = marker->ComputeOffsetsAfterShift(13, 19, 0);
+  EXPECT_EQ(WTF::kNullopt, result);
+}
+
+TEST_F(DocumentMarkerTest, GetShiftedMarkerPosition_DeleteBeforeAndBeginning) {
+  DocumentMarker* marker = CreateMarker(30, 35);
+  Optional<MarkerOffsets> result = marker->ComputeOffsetsAfterShift(13, 19, 0);
+  EXPECT_EQ(13u, result.value().start_offset);
+  EXPECT_EQ(16u, result.value().end_offset);
+}
+
+TEST_F(DocumentMarkerTest, GetShiftedMarkerPosition_DeleteBefore) {
+  DocumentMarker* marker = CreateMarker(40, 45);
+  Optional<MarkerOffsets> result = marker->ComputeOffsetsAfterShift(13, 19, 0);
+  EXPECT_EQ(21u, result.value().start_offset);
+  EXPECT_EQ(26u, result.value().end_offset);
+}
+
+TEST_F(DocumentMarkerTest, GetShiftedMarkerPosition_DeleteStartAndAfter) {
+  DocumentMarker* marker = CreateMarker(0, 5);
+  Optional<MarkerOffsets> result = marker->ComputeOffsetsAfterShift(0, 10, 0);
+  EXPECT_EQ(WTF::kNullopt, result);
+}
+
+TEST_F(DocumentMarkerTest, GetShiftedMarkerPosition_DeleteBeforeAndEnd) {
+  DocumentMarker* marker = CreateMarker(5, 10);
+  Optional<MarkerOffsets> result = marker->ComputeOffsetsAfterShift(0, 10, 0);
+  EXPECT_EQ(WTF::kNullopt, result);
+}
+
+TEST_F(DocumentMarkerTest, GetShiftedMarkerPosition_DeleteMarkerExactly) {
+  DocumentMarker* marker = CreateMarker(5, 10);
+  Optional<MarkerOffsets> result = marker->ComputeOffsetsAfterShift(5, 5, 0);
+  EXPECT_EQ(WTF::kNullopt, result);
+}
+
+TEST_F(DocumentMarkerTest, GetShiftedMarkerPosition_DeleteMiddleOfMarker) {
+  DocumentMarker* marker = CreateMarker(5, 10);
+  Optional<MarkerOffsets> result = marker->ComputeOffsetsAfterShift(6, 3, 0);
+  EXPECT_EQ(5u, result.value().start_offset);
+  EXPECT_EQ(7u, result.value().end_offset);
+}
+
+TEST_F(DocumentMarkerTest, GetShiftedMarkerPosition_InsertAfter) {
+  DocumentMarker* marker = CreateMarker(0, 5);
+  Optional<MarkerOffsets> result = marker->ComputeOffsetsAfterShift(10, 0, 5);
+  EXPECT_EQ(0u, result.value().start_offset);
+  EXPECT_EQ(5u, result.value().end_offset);
+}
+
+TEST_F(DocumentMarkerTest, GetShiftedMarkerPosition_InsertImmediatelyAfter) {
+  DocumentMarker* marker = CreateMarker(0, 5);
+  Optional<MarkerOffsets> result = marker->ComputeOffsetsAfterShift(5, 0, 5);
+  EXPECT_EQ(0u, result.value().start_offset);
+  EXPECT_EQ(5u, result.value().end_offset);
+}
+
+TEST_F(DocumentMarkerTest, GetShiftedMarkerPosition_InsertInMiddle) {
+  DocumentMarker* marker = CreateMarker(0, 5);
+  Optional<MarkerOffsets> result = marker->ComputeOffsetsAfterShift(2, 0, 5);
+  EXPECT_EQ(0u, result.value().start_offset);
+  EXPECT_EQ(10u, result.value().end_offset);
+}
+
+TEST_F(DocumentMarkerTest, GetShiftedMarkerPosition_InsertImmediatelyBefore) {
+  DocumentMarker* marker = CreateMarker(0, 5);
+  Optional<MarkerOffsets> result = marker->ComputeOffsetsAfterShift(0, 0, 5);
+  EXPECT_EQ(5u, result.value().start_offset);
+  EXPECT_EQ(10u, result.value().end_offset);
+}
+
+TEST_F(DocumentMarkerTest, GetShiftedMarkerPosition_InsertBefore) {
+  DocumentMarker* marker = CreateMarker(5, 10);
+  Optional<MarkerOffsets> result = marker->ComputeOffsetsAfterShift(0, 0, 5);
+  EXPECT_EQ(10u, result.value().start_offset);
+  EXPECT_EQ(15u, result.value().end_offset);
+}
+
+TEST_F(DocumentMarkerTest, GetShiftedMarkerPosition_ReplaceAfter) {
+  DocumentMarker* marker = CreateMarker(0, 5);
+  Optional<MarkerOffsets> result = marker->ComputeOffsetsAfterShift(13, 19, 1);
+  EXPECT_EQ(0u, result.value().start_offset);
+  EXPECT_EQ(5u, result.value().end_offset);
+}
+
+TEST_F(DocumentMarkerTest, GetShiftedMarkerPosition_ReplaceEndAndAfter) {
+  DocumentMarker* marker = CreateMarker(10, 15);
+  Optional<MarkerOffsets> result = marker->ComputeOffsetsAfterShift(13, 19, 1);
+  EXPECT_EQ(10u, result.value().start_offset);
+  EXPECT_EQ(13u, result.value().end_offset);
+}
+
+TEST_F(DocumentMarkerTest, GetShiftedMarkerPosition_ReplaceBeforeAndAfter) {
+  DocumentMarker* marker = CreateMarker(20, 25);
+  Optional<MarkerOffsets> result = marker->ComputeOffsetsAfterShift(13, 19, 1);
+  EXPECT_EQ(WTF::kNullopt, result);
+}
+
+TEST_F(DocumentMarkerTest, GetShiftedMarkerPosition_ReplaceBeforeAndBeginning) {
+  DocumentMarker* marker = CreateMarker(30, 35);
+  Optional<MarkerOffsets> result = marker->ComputeOffsetsAfterShift(13, 19, 1);
+  EXPECT_EQ(14u, result.value().start_offset);
+  EXPECT_EQ(17u, result.value().end_offset);
+}
+
+TEST_F(DocumentMarkerTest, GetShiftedMarkerPosition_ReplaceBefore) {
+  DocumentMarker* marker = CreateMarker(40, 45);
+  Optional<MarkerOffsets> result = marker->ComputeOffsetsAfterShift(13, 19, 1);
+  EXPECT_EQ(22u, result.value().start_offset);
+  EXPECT_EQ(27u, result.value().end_offset);
+}
+
+TEST_F(DocumentMarkerTest, GetShiftedMarkerPosition_ReplaceBeginning) {
+  DocumentMarker* marker = CreateMarker(0, 5);
+  Optional<MarkerOffsets> result = marker->ComputeOffsetsAfterShift(0, 2, 1);
+  EXPECT_EQ(0u, result.value().start_offset);
+  EXPECT_EQ(4u, result.value().end_offset);
+}
+
+TEST_F(DocumentMarkerTest, GetShiftedMarkerPosition_ReplaceEnd) {
+  DocumentMarker* marker = CreateMarker(0, 5);
+  Optional<MarkerOffsets> result = marker->ComputeOffsetsAfterShift(3, 2, 1);
+  EXPECT_EQ(0u, result.value().start_offset);
+  EXPECT_EQ(4u, result.value().end_offset);
+}
+
+TEST_F(DocumentMarkerTest, GetShiftedMarkerPosition_ReplaceExactly) {
+  DocumentMarker* marker = CreateMarker(0, 5);
+  Optional<MarkerOffsets> result = marker->ComputeOffsetsAfterShift(0, 5, 1);
+  EXPECT_EQ(0u, result.value().start_offset);
+  EXPECT_EQ(1u, result.value().end_offset);
+}
+
+TEST_F(DocumentMarkerTest, GetShiftedMarkerPosition_ReplaceBeginningAndAfter) {
+  DocumentMarker* marker = CreateMarker(0, 5);
+  Optional<MarkerOffsets> result = marker->ComputeOffsetsAfterShift(0, 6, 1);
+  EXPECT_EQ(WTF::kNullopt, result);
+}
+
+TEST_F(DocumentMarkerTest, GetShiftedMarkerPosition_ReplaceBeforeAndEnd) {
+  DocumentMarker* marker = CreateMarker(5, 10);
+  Optional<MarkerOffsets> result = marker->ComputeOffsetsAfterShift(4, 6, 1);
+  EXPECT_EQ(WTF::kNullopt, result);
+}
+
+}  // namespace blink
diff --git a/third_party/WebKit/Source/core/editing/serializers/MarkupFormatter.cpp b/third_party/WebKit/Source/core/editing/serializers/MarkupFormatter.cpp
index ff5604a..3ee85d8 100644
--- a/third_party/WebKit/Source/core/editing/serializers/MarkupFormatter.cpp
+++ b/third_party/WebKit/Source/core/editing/serializers/MarkupFormatter.cpp
@@ -123,14 +123,14 @@
 
 MarkupFormatter::MarkupFormatter(EAbsoluteURLs resolve_urls_method,
                                  SerializationType serialization_type)
-    : resolve_ur_ls_method_(resolve_urls_method),
+    : resolve_urls_method_(resolve_urls_method),
       serialization_type_(serialization_type) {}
 
 MarkupFormatter::~MarkupFormatter() {}
 
 String MarkupFormatter::ResolveURLIfNeeded(const Element& element,
                                            const String& url_string) const {
-  switch (resolve_ur_ls_method_) {
+  switch (resolve_urls_method_) {
     case kResolveAllURLs:
       return element.GetDocument().CompleteURL(url_string).GetString();
 
diff --git a/third_party/WebKit/Source/core/editing/serializers/MarkupFormatter.h b/third_party/WebKit/Source/core/editing/serializers/MarkupFormatter.h
index 70a3bd60..830d997 100644
--- a/third_party/WebKit/Source/core/editing/serializers/MarkupFormatter.h
+++ b/third_party/WebKit/Source/core/editing/serializers/MarkupFormatter.h
@@ -119,7 +119,7 @@
                                      const Element&,
                                      const Attribute&);
 
-  const EAbsoluteURLs resolve_ur_ls_method_;
+  const EAbsoluteURLs resolve_urls_method_;
   SerializationType serialization_type_;
 };
 
diff --git a/third_party/WebKit/Source/core/editing/serializers/Serialization.cpp b/third_party/WebKit/Source/core/editing/serializers/Serialization.cpp
index 59e24e3..0a763174 100644
--- a/third_party/WebKit/Source/core/editing/serializers/Serialization.cpp
+++ b/third_party/WebKit/Source/core/editing/serializers/Serialization.cpp
@@ -245,7 +245,7 @@
       const PositionTemplate<Strategy>& end_position,
       EAnnotateForInterchange should_annotate = kDoNotAnnotateForInterchange,
       ConvertBlocksToInlines = ConvertBlocksToInlines::kNotConvert,
-      EAbsoluteURLs should_resolve_ur_ls = kDoNotResolveURLs,
+      EAbsoluteURLs should_resolve_urls = kDoNotResolveURLs,
       Node* constraining_ancestor = nullptr);
 };
 
@@ -259,7 +259,7 @@
     const PositionTemplate<Strategy>& end_position,
     EAnnotateForInterchange should_annotate,
     ConvertBlocksToInlines convert_blocks_to_inlines,
-    EAbsoluteURLs should_resolve_ur_ls,
+    EAbsoluteURLs should_resolve_urls,
     Node* constraining_ancestor) {
   if (start_position.IsNull() || end_position.IsNull())
     return g_empty_string;
@@ -284,7 +284,7 @@
   HTMLElement* special_common_ancestor = HighestAncestorToWrapMarkup<Strategy>(
       start_position, end_position, should_annotate, constraining_ancestor);
   StyledMarkupSerializer<Strategy> serializer(
-      should_resolve_ur_ls, should_annotate, start_position, end_position,
+      should_resolve_urls, should_annotate, start_position, end_position,
       special_common_ancestor, convert_blocks_to_inlines);
   return serializer.CreateMarkup();
 }
@@ -293,22 +293,22 @@
                     const Position& end_position,
                     EAnnotateForInterchange should_annotate,
                     ConvertBlocksToInlines convert_blocks_to_inlines,
-                    EAbsoluteURLs should_resolve_ur_ls,
+                    EAbsoluteURLs should_resolve_urls,
                     Node* constraining_ancestor) {
   return CreateMarkupAlgorithm<EditingStrategy>::CreateMarkup(
       start_position, end_position, should_annotate, convert_blocks_to_inlines,
-      should_resolve_ur_ls, constraining_ancestor);
+      should_resolve_urls, constraining_ancestor);
 }
 
 String CreateMarkup(const PositionInFlatTree& start_position,
                     const PositionInFlatTree& end_position,
                     EAnnotateForInterchange should_annotate,
                     ConvertBlocksToInlines convert_blocks_to_inlines,
-                    EAbsoluteURLs should_resolve_ur_ls,
+                    EAbsoluteURLs should_resolve_urls,
                     Node* constraining_ancestor) {
   return CreateMarkupAlgorithm<EditingInFlatTreeStrategy>::CreateMarkup(
       start_position, end_position, should_annotate, convert_blocks_to_inlines,
-      should_resolve_ur_ls, constraining_ancestor);
+      should_resolve_urls, constraining_ancestor);
 }
 
 DocumentFragment* CreateFragmentFromMarkup(
@@ -434,11 +434,11 @@
 
 String CreateMarkup(const Node* node,
                     EChildrenOnly children_only,
-                    EAbsoluteURLs should_resolve_ur_ls) {
+                    EAbsoluteURLs should_resolve_urls) {
   if (!node)
     return "";
 
-  MarkupAccumulator accumulator(should_resolve_ur_ls);
+  MarkupAccumulator accumulator(should_resolve_urls);
   return SerializeNodes<EditingStrategy>(accumulator, const_cast<Node&>(*node),
                                          children_only);
 }
diff --git a/third_party/WebKit/Source/core/editing/serializers/StyledMarkupAccumulator.cpp b/third_party/WebKit/Source/core/editing/serializers/StyledMarkupAccumulator.cpp
index 92c41d8..77199fe 100644
--- a/third_party/WebKit/Source/core/editing/serializers/StyledMarkupAccumulator.cpp
+++ b/third_party/WebKit/Source/core/editing/serializers/StyledMarkupAccumulator.cpp
@@ -51,13 +51,13 @@
 using namespace HTMLNames;
 
 StyledMarkupAccumulator::StyledMarkupAccumulator(
-    EAbsoluteURLs should_resolve_ur_ls,
+    EAbsoluteURLs should_resolve_urls,
     const TextOffset& start,
     const TextOffset& end,
     Document* document,
     EAnnotateForInterchange should_annotate,
     ConvertBlocksToInlines convert_blocks_to_inlines)
-    : formatter_(should_resolve_ur_ls),
+    : formatter_(should_resolve_urls),
       start_(start),
       end_(end),
       document_(document),
diff --git a/third_party/WebKit/Source/core/editing/serializers/StyledMarkupSerializer.cpp b/third_party/WebKit/Source/core/editing/serializers/StyledMarkupSerializer.cpp
index 9bbd54d9..adbadf3 100644
--- a/third_party/WebKit/Source/core/editing/serializers/StyledMarkupSerializer.cpp
+++ b/third_party/WebKit/Source/core/editing/serializers/StyledMarkupSerializer.cpp
@@ -121,7 +121,7 @@
 
 template <typename Strategy>
 StyledMarkupSerializer<Strategy>::StyledMarkupSerializer(
-    EAbsoluteURLs should_resolve_ur_ls,
+    EAbsoluteURLs should_resolve_urls,
     EAnnotateForInterchange should_annotate,
     const PositionTemplate<Strategy>& start,
     const PositionTemplate<Strategy>& end,
@@ -129,7 +129,7 @@
     ConvertBlocksToInlines convert_blocks_to_inlines)
     : start_(start),
       end_(end),
-      should_resolve_ur_ls_(should_resolve_ur_ls),
+      should_resolve_urls_(should_resolve_urls),
       should_annotate_(should_annotate),
       highest_node_to_be_serialized_(highest_node_to_be_serialized),
       convert_blocks_to_inlines_(convert_blocks_to_inlines),
@@ -180,7 +180,7 @@
 template <typename Strategy>
 String StyledMarkupSerializer<Strategy>::CreateMarkup() {
   StyledMarkupAccumulator markup_accumulator(
-      should_resolve_ur_ls_, ToTextOffset(start_.ParentAnchoredEquivalent()),
+      should_resolve_urls_, ToTextOffset(start_.ParentAnchoredEquivalent()),
       ToTextOffset(end_.ParentAnchoredEquivalent()), start_.GetDocument(),
       should_annotate_, convert_blocks_to_inlines_);
 
diff --git a/third_party/WebKit/Source/core/editing/serializers/StyledMarkupSerializer.h b/third_party/WebKit/Source/core/editing/serializers/StyledMarkupSerializer.h
index bd00f5b..7cda283 100644
--- a/third_party/WebKit/Source/core/editing/serializers/StyledMarkupSerializer.h
+++ b/third_party/WebKit/Source/core/editing/serializers/StyledMarkupSerializer.h
@@ -60,7 +60,7 @@
 
   const PositionTemplate<Strategy> start_;
   const PositionTemplate<Strategy> end_;
-  const EAbsoluteURLs should_resolve_ur_ls_;
+  const EAbsoluteURLs should_resolve_urls_;
   const EAnnotateForInterchange should_annotate_;
   const Member<Node> highest_node_to_be_serialized_;
   const ConvertBlocksToInlines convert_blocks_to_inlines_;
diff --git a/third_party/WebKit/Source/core/frame/FrameSerializer.cpp b/third_party/WebKit/Source/core/frame/FrameSerializer.cpp
index 6ec5d00e..5596684 100644
--- a/third_party/WebKit/Source/core/frame/FrameSerializer.cpp
+++ b/third_party/WebKit/Source/core/frame/FrameSerializer.cpp
@@ -350,7 +350,7 @@
   bool is_inline_css = !url.IsValid() || url.ProtocolIsData();
   // If this CSS is not inline then it is identifiable by its URL. So just skip
   // it if it has already been analyzed before.
-  if (!is_inline_css && (resource_ur_ls_.Contains(url) ||
+  if (!is_inline_css && (resource_urls_.Contains(url) ||
                          delegate_.ShouldSkipResourceWithURL(url))) {
     return;
   }
@@ -390,7 +390,7 @@
     resources_->push_back(
         SerializedResource(url, String("text/css"),
                            SharedBuffer::Create(text.Data(), text.length())));
-    resource_ur_ls_.insert(url);
+    resource_urls_.insert(url);
   }
 
   // Sub resources need to be serialized even if the CSS definition doesn't
@@ -455,7 +455,7 @@
 }
 
 bool FrameSerializer::ShouldAddURL(const KURL& url) {
-  return url.IsValid() && !resource_ur_ls_.Contains(url) &&
+  return url.IsValid() && !resource_urls_.Contains(url) &&
          !url.ProtocolIsData() && !delegate_.ShouldSkipResourceWithURL(url);
 }
 
@@ -473,7 +473,7 @@
   }
 
   resources_->push_back(SerializedResource(url, mime_type, std::move(data)));
-  resource_ur_ls_.insert(url);
+  resource_urls_.insert(url);
 }
 
 void FrameSerializer::AddImageToResources(ImageResourceContent* image,
diff --git a/third_party/WebKit/Source/core/frame/FrameSerializer.h b/third_party/WebKit/Source/core/frame/FrameSerializer.h
index fff62e2..2a42ccd 100644
--- a/third_party/WebKit/Source/core/frame/FrameSerializer.h
+++ b/third_party/WebKit/Source/core/frame/FrameSerializer.h
@@ -144,7 +144,7 @@
   void RetrieveResourcesForCSSValue(const CSSValue&, Document&);
 
   Deque<SerializedResource>* resources_;
-  HashSet<KURL> resource_ur_ls_;
+  HashSet<KURL> resource_urls_;
 
   bool is_serializing_css_;
 
diff --git a/third_party/WebKit/Source/core/frame/FrameView.cpp b/third_party/WebKit/Source/core/frame/FrameView.cpp
index 3a1de81..b2648221 100644
--- a/third_party/WebKit/Source/core/frame/FrameView.cpp
+++ b/third_party/WebKit/Source/core/frame/FrameView.cpp
@@ -1444,7 +1444,7 @@
     // be the viewport with browser controls showing, we add the browser
     // controls height, compensating for page scale as well, since we want to
     // use the viewport with browser controls hidden for vh (to match Safari).
-    int viewport_width = frame_->GetPage()->GetVisualViewport().size().Width();
+    int viewport_width = frame_->GetPage()->GetVisualViewport().Size().Width();
     if (frame_->IsMainFrame() && layout_size.Width() && viewport_width) {
       float page_scale_at_layout_width = viewport_width / layout_size.Width();
       layout_size.Expand(
diff --git a/third_party/WebKit/Source/core/frame/ImageBitmap.cpp b/third_party/WebKit/Source/core/frame/ImageBitmap.cpp
index 4e9c4a56..9c5526e 100644
--- a/third_party/WebKit/Source/core/frame/ImageBitmap.cpp
+++ b/third_party/WebKit/Source/core/frame/ImageBitmap.cpp
@@ -689,7 +689,7 @@
   SourceImageStatus status;
   RefPtr<Image> input = offscreen_canvas->GetSourceImageForCanvas(
       &status, kPreferNoAcceleration, kSnapshotReasonCreateImageBitmap,
-      FloatSize(offscreen_canvas->size()));
+      FloatSize(offscreen_canvas->Size()));
   if (status != kNormalSourceImageStatus)
     return;
   ParsedOptions parsed_options = ParseOptions(
@@ -780,7 +780,7 @@
                          Optional<IntRect> crop_rect,
                          const ImageBitmapOptions& options) {
   // TODO(xidachen): implement the resize option
-  IntRect data_src_rect = IntRect(IntPoint(), data->size());
+  IntRect data_src_rect = IntRect(IntPoint(), data->Size());
   ParsedOptions parsed_options =
       ParseOptions(options, crop_rect, data->BitmapSourceSize());
   if (DstBufferSizeHasOverflow(parsed_options))
@@ -798,17 +798,17 @@
         parsed_options.crop_rect.Width(), parsed_options.crop_rect.Height(),
         kN32_SkColorType, kUnpremul_SkAlphaType, data->GetSkColorSpace());
     unsigned bytes_per_pixel = static_cast<unsigned>(info.bytesPerPixel());
-    unsigned src_pixel_bytes_per_row = bytes_per_pixel * data->size().Width();
+    unsigned src_pixel_bytes_per_row = bytes_per_pixel * data->Size().Width();
     unsigned dst_pixel_bytes_per_row =
         bytes_per_pixel * parsed_options.crop_rect.Width();
     sk_sp<SkImage> sk_image;
-    if (parsed_options.crop_rect == IntRect(IntPoint(), data->size())) {
-      SwizzleImageData(src_addr, data->size().Height(), src_pixel_bytes_per_row,
+    if (parsed_options.crop_rect == IntRect(IntPoint(), data->Size())) {
+      SwizzleImageData(src_addr, data->Size().Height(), src_pixel_bytes_per_row,
                        parsed_options.flip_y);
       sk_image = SkImage::MakeRasterCopy(
           SkPixmap(info, src_addr, dst_pixel_bytes_per_row));
       // restore the original ImageData
-      SwizzleImageData(src_addr, data->size().Height(), src_pixel_bytes_per_row,
+      SwizzleImageData(src_addr, data->Size().Height(), src_pixel_bytes_per_row,
                        parsed_options.flip_y);
     } else {
       RefPtr<ArrayBuffer> dst_buffer = ArrayBuffer::CreateOrNull(
@@ -831,10 +831,10 @@
                                       (parsed_options.crop_rect.Y() >= 0)
                                           ? 0
                                           : -parsed_options.crop_rect.Y());
-        int copy_height = data->size().Height() - src_point.Y();
+        int copy_height = data->Size().Height() - src_point.Y();
         if (parsed_options.crop_rect.Height() < copy_height)
           copy_height = parsed_options.crop_rect.Height();
-        int copy_width = data->size().Width() - src_point.X();
+        int copy_width = data->Size().Width() - src_point.X();
         if (parsed_options.crop_rect.Width() < copy_width)
           copy_width = parsed_options.crop_rect.Width();
         for (int i = 0; i < copy_height; i++) {
@@ -915,7 +915,7 @@
   if (parsed_options.crop_rect.Y() < 0)
     dst_point.SetY(-parsed_options.crop_rect.Y());
 
-  buffer->PutByteArray(kUnmultiplied, data->data()->Data(), data->size(),
+  buffer->PutByteArray(kUnmultiplied, data->data()->Data(), data->Size(),
                        src_rect, dst_point);
   sk_sp<SkImage> sk_image =
       buffer->NewSkImageSnapshot(kPreferNoAcceleration, kSnapshotReasonUnknown);
@@ -950,7 +950,7 @@
   if (!input)
     return;
   ParsedOptions parsed_options =
-      ParseOptions(options, crop_rect, input->size());
+      ParseOptions(options, crop_rect, input->Size());
   if (DstBufferSizeHasOverflow(parsed_options))
     return;
 
@@ -969,7 +969,7 @@
                          const ImageBitmapOptions& options) {
   bool origin_clean = image->OriginClean();
   ParsedOptions parsed_options =
-      ParseOptions(options, crop_rect, image->size());
+      ParseOptions(options, crop_rect, image->Size());
   if (DstBufferSizeHasOverflow(parsed_options))
     return;
 
@@ -1096,7 +1096,7 @@
   return image_ && (image_->IsTextureBacked() || image_->HasMailbox());
 }
 
-IntSize ImageBitmap::size() const {
+IntSize ImageBitmap::Size() const {
   if (!image_)
     return IntSize();
   ASSERT(image_->width() > 0 && image_->height() > 0);
diff --git a/third_party/WebKit/Source/core/frame/ImageBitmap.h b/third_party/WebKit/Source/core/frame/ImageBitmap.h
index b2c6f5b..8f98e52 100644
--- a/third_party/WebKit/Source/core/frame/ImageBitmap.h
+++ b/third_party/WebKit/Source/core/frame/ImageBitmap.h
@@ -102,7 +102,7 @@
       DataColorFormat = kRGBAColorType);
   unsigned long width() const;
   unsigned long height() const;
-  IntSize size() const;
+  IntSize Size() const;
 
   bool IsNeutered() const { return is_neutered_; }
   bool OriginClean() const { return image_->OriginClean(); }
@@ -128,7 +128,7 @@
   bool IsAccelerated() const override;
 
   // ImageBitmapSource implementation
-  IntSize BitmapSourceSize() const override { return size(); }
+  IntSize BitmapSourceSize() const override { return Size(); }
   ScriptPromise CreateImageBitmap(ScriptState*,
                                   EventTarget&,
                                   Optional<IntRect>,
diff --git a/third_party/WebKit/Source/core/frame/LocalFrameTest.cpp b/third_party/WebKit/Source/core/frame/LocalFrameTest.cpp
index 660f3a95..a52d084 100644
--- a/third_party/WebKit/Source/core/frame/LocalFrameTest.cpp
+++ b/third_party/WebKit/Source/core/frame/LocalFrameTest.cpp
@@ -53,7 +53,7 @@
       "<div id=sample></div>");
   Element* sample = GetDocument().GetElementById("sample");
   const std::unique_ptr<DragImage> image = GetFrame().NodeImage(*sample);
-  EXPECT_EQ(IntSize(100, 100), image->size());
+  EXPECT_EQ(IntSize(100, 100), image->Size());
 }
 
 TEST_F(LocalFrameTest, nodeImageWithNestedElement) {
@@ -80,7 +80,7 @@
       "<div id=sample></div>");
   Element* sample = GetDocument().GetElementById("sample");
   const std::unique_ptr<DragImage> image = GetFrame().NodeImage(*sample);
-  EXPECT_EQ(IntSize(200, 200), image->size())
+  EXPECT_EQ(IntSize(200, 200), image->Size())
       << ":-webkit-drag should affect dragged image.";
 }
 
@@ -137,10 +137,10 @@
   const std::unique_ptr<DragImage> image2(
       GetFrame().DragImageForSelection(0.75f));
 
-  EXPECT_GT(image1->size().Width(), 0);
-  EXPECT_GT(image1->size().Height(), 0);
-  EXPECT_EQ(image1->size().Width() * 2, image2->size().Width());
-  EXPECT_EQ(image1->size().Height() * 2, image2->size().Height());
+  EXPECT_GT(image1->Size().Width(), 0);
+  EXPECT_GT(image1->Size().Height(), 0);
+  EXPECT_EQ(image1->Size().Width() * 2, image2->Size().Width());
+  EXPECT_EQ(image1->Size().Height() * 2, image2->Size().Height());
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/frame/VisualViewport.h b/third_party/WebKit/Source/core/frame/VisualViewport.h
index fa3c0645..83e26b43 100644
--- a/third_party/WebKit/Source/core/frame/VisualViewport.h
+++ b/third_party/WebKit/Source/core/frame/VisualViewport.h
@@ -116,7 +116,7 @@
 
   // Sets the size of the inner viewport when unscaled in CSS pixels.
   void SetSize(const IntSize&);
-  IntSize size() const { return size_; }
+  IntSize Size() const { return size_; }
 
   // Gets the scaled size, i.e. the viewport in root view space.
   FloatSize VisibleSize() const;
diff --git a/third_party/WebKit/Source/core/html/HTMLAnchorElement.cpp b/third_party/WebKit/Source/core/html/HTMLAnchorElement.cpp
index 1abf5d0..b9c7b1b5 100644
--- a/third_party/WebKit/Source/core/html/HTMLAnchorElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLAnchorElement.cpp
@@ -307,10 +307,10 @@
 
   UseCounter::Count(GetDocument(), UseCounter::kHTMLAnchorElementPingAttribute);
 
-  SpaceSplitString ping_ur_ls(ping_value, SpaceSplitString::kShouldNotFoldCase);
-  for (unsigned i = 0; i < ping_ur_ls.size(); i++)
+  SpaceSplitString ping_urls(ping_value, SpaceSplitString::kShouldNotFoldCase);
+  for (unsigned i = 0; i < ping_urls.size(); i++)
     PingLoader::SendLinkAuditPing(GetDocument().GetFrame(),
-                                  GetDocument().CompleteURL(ping_ur_ls[i]),
+                                  GetDocument().CompleteURL(ping_urls[i]),
                                   destination_url);
 }
 
diff --git a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
index a44859dd..105b9f0 100644
--- a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
@@ -728,7 +728,7 @@
   if (!image_data)  // allocation failure
     return String("data:,");
 
-  return ImageDataBuffer(image_data->size(), image_data->data()->Data())
+  return ImageDataBuffer(image_data->Size(), image_data->data()->Data())
       .ToDataURL(encoding_mime_type, quality);
 }
 
@@ -792,7 +792,7 @@
   }
 
   CanvasAsyncBlobCreator* async_creator = CanvasAsyncBlobCreator::Create(
-      image_data->data(), encoding_mime_type, image_data->size(), callback,
+      image_data->data(), encoding_mime_type, image_data->Size(), callback,
       start_time, &GetDocument());
 
   async_creator->ScheduleAsyncBlobCreation(quality);
@@ -1338,7 +1338,7 @@
     return FloatSize(0, 0);
   }
   if (PlaceholderFrame())
-    return FloatSize(PlaceholderFrame()->size());
+    return FloatSize(PlaceholderFrame()->Size());
   return FloatSize(width(), height());
 }
 
diff --git a/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp b/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp
index 3bf2a9d..2e741f235 100644
--- a/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp
@@ -310,13 +310,16 @@
 bool HTMLVideoElement::CopyVideoTextureToPlatformTexture(
     gpu::gles2::GLES2Interface* gl,
     GLuint texture,
+    GLenum internal_format,
+    GLenum format,
+    GLenum type,
     bool premultiply_alpha,
     bool flip_y) {
   if (!GetWebMediaPlayer())
     return false;
 
   return GetWebMediaPlayer()->CopyVideoTextureToPlatformTexture(
-      gl, texture, premultiply_alpha, flip_y);
+      gl, texture, internal_format, format, type, premultiply_alpha, flip_y);
 }
 
 bool HTMLVideoElement::TexImageImpl(
diff --git a/third_party/WebKit/Source/core/html/HTMLVideoElement.h b/third_party/WebKit/Source/core/html/HTMLVideoElement.h
index bc7e7fa..6f14c678 100644
--- a/third_party/WebKit/Source/core/html/HTMLVideoElement.h
+++ b/third_party/WebKit/Source/core/html/HTMLVideoElement.h
@@ -75,9 +75,11 @@
   void PaintCurrentFrame(PaintCanvas*, const IntRect&, const PaintFlags*) const;
 
   // Used by WebGL to do GPU-GPU textures copy if possible.
-  // The caller is responsible for allocating the destination texture.
   bool CopyVideoTextureToPlatformTexture(gpu::gles2::GLES2Interface*,
                                          GLuint texture,
+                                         GLenum internal_format,
+                                         GLenum format,
+                                         GLenum type,
                                          bool premultiply_alpha,
                                          bool flip_y);
 
diff --git a/third_party/WebKit/Source/core/html/ImageData.h b/third_party/WebKit/Source/core/html/ImageData.h
index 75c1073..b4d4f75 100644
--- a/third_party/WebKit/Source/core/html/ImageData.h
+++ b/third_party/WebKit/Source/core/html/ImageData.h
@@ -121,7 +121,7 @@
       CanvasPixelFormat,
       ImageDataStorageFormat);
 
-  IntSize size() const { return size_; }
+  IntSize Size() const { return size_; }
   int width() const { return size_.Width(); }
   int height() const { return size_.Height(); }
 
diff --git a/third_party/WebKit/Source/core/html/ImageDocument.cpp b/third_party/WebKit/Source/core/html/ImageDocument.cpp
index b7133f8..742b68e 100644
--- a/third_party/WebKit/Source/core/html/ImageDocument.cpp
+++ b/third_party/WebKit/Source/core/html/ImageDocument.cpp
@@ -403,7 +403,7 @@
           // The checker pattern is initialized based on how large the image is
           // relative to the viewport.
           int viewport_width =
-              GetFrame()->GetPage()->GetVisualViewport().size().Width();
+              GetFrame()->GetPage()->GetVisualViewport().Size().Width();
           scale = viewport_width / static_cast<double>(CalculateDivWidth());
         }
 
@@ -517,7 +517,7 @@
   // * Images smaller in either dimension are centered along that axis.
   LayoutSize image_size = CachedImageSize(image_element_);
   int viewport_width =
-      GetFrame()->GetPage()->GetVisualViewport().size().Width();
+      GetFrame()->GetPage()->GetVisualViewport().Size().Width();
 
   // For huge images, minimum-scale=0.1 is still too big on small screens.
   // Set the <div> width so that the image will shrink to fit the width of the
@@ -541,7 +541,7 @@
     // can display the full image without shrinking it, allowing a full-width
     // reading mode for normal-width-huge-height images.
     float viewport_aspect_ratio =
-        GetFrame()->GetPage()->GetVisualViewport().size().AspectRatio();
+        GetFrame()->GetPage()->GetVisualViewport().Size().AspectRatio();
     int div_height =
         std::max(image_size.Height().ToInt(),
                  static_cast<int>(div_width / viewport_aspect_ratio));
diff --git a/third_party/WebKit/Source/core/html/PublicURLManager.cpp b/third_party/WebKit/Source/core/html/PublicURLManager.cpp
index b1bd27b..211f833 100644
--- a/third_party/WebKit/Source/core/html/PublicURLManager.cpp
+++ b/third_party/WebKit/Source/core/html/PublicURLManager.cpp
@@ -77,8 +77,8 @@
   Vector<String> urls_to_remove;
   for (auto& registry_url : registry_to_url_) {
     URLRegistry* registry = registry_url.key;
-    URLMap& registered_ur_ls = registry_url.value;
-    for (auto& registered_url : registered_ur_ls) {
+    URLMap& registered_urls = registry_url.value;
+    for (auto& registered_url : registered_urls) {
       if (uuid == registered_url.value) {
         KURL url(kParsedURLString, registered_url.key);
         GetExecutionContext()->RemoveURLFromMemoryCache(url);
@@ -87,7 +87,7 @@
       }
     }
     for (const auto& url : urls_to_remove)
-      registered_ur_ls.erase(url);
+      registered_urls.erase(url);
     urls_to_remove.Clear();
   }
 }
diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContext.cpp b/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContext.cpp
index cd01183f..1152fb1 100644
--- a/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContext.cpp
+++ b/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContext.cpp
@@ -225,9 +225,9 @@
 
   if (has_url) {
     if (source_url.ProtocolIsData() ||
-        clean_ur_ls_.Contains(source_url.GetString()))
+        clean_urls_.Contains(source_url.GetString()))
       return false;
-    if (dirty_ur_ls_.Contains(source_url.GetString()))
+    if (dirty_urls_.Contains(source_url.GetString()))
       return true;
   }
 
@@ -239,9 +239,9 @@
 
   if (has_url) {
     if (taint_origin)
-      dirty_ur_ls_.insert(source_url.GetString());
+      dirty_urls_.insert(source_url.GetString());
     else
-      clean_ur_ls_.insert(source_url.GetString());
+      clean_urls_.insert(source_url.GetString());
   }
   return taint_origin;
 }
diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContext.h b/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContext.h
index 3802a6b..c182daf 100644
--- a/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContext.h
+++ b/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContext.h
@@ -230,8 +230,8 @@
 
   Member<HTMLCanvasElement> canvas_;
   Member<OffscreenCanvas> offscreen_canvas_;
-  HashSet<String> clean_ur_ls_;
-  HashSet<String> dirty_ur_ls_;
+  HashSet<String> clean_urls_;
+  HashSet<String> dirty_urls_;
   CanvasColorSpace color_space_;
   CanvasPixelFormat pixel_format_;
   bool linear_pixel_math_ = false;
diff --git a/third_party/WebKit/Source/core/input/EventHandler.cpp b/third_party/WebKit/Source/core/input/EventHandler.cpp
index 2ef84cb3..7e196a2 100644
--- a/third_party/WebKit/Source/core/input/EventHandler.cpp
+++ b/third_party/WebKit/Source/core/input/EventHandler.cpp
@@ -432,7 +432,7 @@
       // Get hotspot and convert from logical pixels to physical pixels.
       IntPoint hot_spot = (*cursors)[i].HotSpot();
       hot_spot.Scale(scale, scale);
-      IntSize size = cached_image->GetImage()->size();
+      IntSize size = cached_image->GetImage()->Size();
       if (cached_image->ErrorOccurred())
         continue;
       // Limit the size of cursors (in UI pixels) so that they cannot be
diff --git a/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp
index 577836f..2ba10f7 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp
@@ -558,14 +558,14 @@
 
 void InspectorNetworkAgent::ShouldBlockRequest(const ResourceRequest& request,
                                                bool* result) {
-  protocol::DictionaryValue* blocked_ur_ls =
+  protocol::DictionaryValue* blocked_urls =
       state_->getObject(NetworkAgentState::kBlockedURLs);
-  if (!blocked_ur_ls)
+  if (!blocked_urls)
     return;
 
   String url = request.Url().GetString();
-  for (size_t i = 0; i < blocked_ur_ls->size(); ++i) {
-    auto entry = blocked_ur_ls->at(i);
+  for (size_t i = 0; i < blocked_urls->size(); ++i) {
+    auto entry = blocked_urls->at(i);
     if (Matches(url, entry.first)) {
       *result = true;
       return;
diff --git a/third_party/WebKit/Source/core/inspector/browser_protocol.json b/third_party/WebKit/Source/core/inspector/browser_protocol.json
index 66b454d..c46593db 100644
--- a/third_party/WebKit/Source/core/inspector/browser_protocol.json
+++ b/third_party/WebKit/Source/core/inspector/browser_protocol.json
@@ -3458,7 +3458,7 @@
                 "name": "sendMessageToTarget",
                 "description": "Sends protocol message to the target with given id.",
                 "parameters": [
-                    { "name": "targetId", "type": "string" },
+                    { "name": "targetId", "$ref": "TargetID" },
                     { "name": "message", "type": "string" }
                 ]
             },
@@ -4593,5 +4593,65 @@
                 ]
             }
         ]
+    },
+    {
+        "domain": "Browser",
+        "description": "The Browser domain defines methods and events for browser managing.",
+        "experimental": true,
+        "types": [
+            {
+                "id": "WindowID",
+                "type": "integer"
+            },
+            {
+                "id": "WindowState",
+                "type": "string",
+                "enum": ["normal", "minimized", "maximized", "fullscreen"],
+                "description": "The state of the browser window."
+            },
+            {
+                "id": "Bounds",
+                "type": "object",
+                "description": "Browser window bounds information",
+                "properties": [
+                    { "name": "left", "type": "integer", "optional": true, "description": "The offset from the left edge of the screen to the window in pixels."},
+                    { "name": "top", "type": "integer", "optional": true, "description": "The offset from the top edge of the screen to the window in pixels."},
+                    { "name": "width", "type": "integer", "optional": true, "description": "The window width in pixels."},
+                    { "name": "height", "type": "integer", "optional": true, "description": "The window height in pixels."},
+                    { "name": "windowState", "$ref": "WindowState", "optional": true, "description": "The window state. Default to normal."}
+                ]
+            }
+        ],
+        "commands": [
+            {
+                "name": "getWindowForTarget",
+                "description": "Get the browser window that contains the devtools target.",
+                "parameters": [
+                    { "name": "targetId", "$ref": "Target.TargetID", "description": "Devtools agent host id." }
+                ],
+                "returns": [
+                    { "name": "windowId", "$ref": "WindowID", "description": "Browser window id." },
+                    { "name": "bounds", "$ref": "Bounds", "description": "Bounds information of the window. When window state is 'minimized', the restored window position and size are returned." }
+                ]
+            },
+            {
+                "name": "setWindowBounds",
+                "description": "Set position and/or size of the browser window.",
+                "parameters": [
+                    { "name": "windowId", "$ref": "WindowID", "description": "Browser window id." },
+                    { "name": "bounds", "$ref": "Bounds", "description": "New window bounds. The 'minimized', 'maximized' and 'fullscreen' states cannot be combined with 'left', 'top', 'width' or 'height'. Leaves unspecified fields unchanged." }
+                ]
+            },
+            {
+                "name": "getWindowBounds",
+                "description": "Get position and size of the browser window.",
+                "parameters": [
+                    { "name": "windowId", "$ref": "WindowID", "description": "Browser window id." }
+                ],
+                "returns": [
+                    { "name": "bounds", "$ref": "Bounds", "description": "Bounds information of the window. When window state is 'minimized', the restored window position and size are returned." }
+                ]
+            }
+        ]
     }]
 }
diff --git a/third_party/WebKit/Source/core/layout/ImageQualityController.cpp b/third_party/WebKit/Source/core/layout/ImageQualityController.cpp
index 95351ba..5925a60 100644
--- a/third_party/WebKit/Source/core/layout/ImageQualityController.cpp
+++ b/third_party/WebKit/Source/core/layout/ImageQualityController.cpp
@@ -206,7 +206,7 @@
     }
   }
 
-  if (layout_size == image->size()) {
+  if (layout_size == image->Size()) {
     // There is no scale in effect. If we had a scale in effect before, we can
     // just remove this object from the list.
     RemoveLayer(object, inner_map, layer);
diff --git a/third_party/WebKit/Source/core/layout/ImageQualityControllerTest.cpp b/third_party/WebKit/Source/core/layout/ImageQualityControllerTest.cpp
index d504d9f..efdfd302 100644
--- a/third_party/WebKit/Source/core/layout/ImageQualityControllerTest.cpp
+++ b/third_party/WebKit/Source/core/layout/ImageQualityControllerTest.cpp
@@ -54,7 +54,7 @@
       MetadataMode = kUseCurrentMetadata) override {
     return false;
   }
-  IntSize size() const override { return IntSize(); }
+  IntSize Size() const override { return IntSize(); }
   void DestroyDecodedData() override {}
   void Draw(PaintCanvas*,
             const PaintFlags&,
@@ -83,7 +83,7 @@
       MetadataMode = kUseCurrentMetadata) override {
     return false;
   }
-  IntSize size() const override { return IntSize(); }
+  IntSize Size() const override { return IntSize(); }
   void DestroyDecodedData() override {}
   void Draw(PaintCanvas*,
             const PaintFlags&,
@@ -117,7 +117,7 @@
       MetadataMode = kUseCurrentMetadata) override {
     return false;
   }
-  IntSize size() const override { return IntSize(1, 1); }
+  IntSize Size() const override { return IntSize(1, 1); }
   void DestroyDecodedData() override {}
   void Draw(PaintCanvas*,
             const PaintFlags&,
diff --git a/third_party/WebKit/Source/core/layout/LayoutFullScreen.cpp b/third_party/WebKit/Source/core/layout/LayoutFullScreen.cpp
index f93c3ece..73c1d1f 100644
--- a/third_party/WebKit/Source/core/layout/LayoutFullScreen.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutFullScreen.cpp
@@ -113,7 +113,7 @@
   fullscreen_style->SetPosition(EPosition::kFixed);
   fullscreen_style->SetLeft(Length(0, blink::kFixed));
   fullscreen_style->SetTop(Length(0, blink::kFixed));
-  IntSize viewport_size = GetDocument().GetPage()->GetVisualViewport().size();
+  IntSize viewport_size = GetDocument().GetPage()->GetVisualViewport().Size();
   fullscreen_style->SetWidth(Length(viewport_size.Width(), blink::kFixed));
   fullscreen_style->SetHeight(Length(viewport_size.Height(), blink::kFixed));
 
diff --git a/third_party/WebKit/Source/core/layout/LayoutInline.cpp b/third_party/WebKit/Source/core/layout/LayoutInline.cpp
index e8ae8c97..e449e6c 100644
--- a/third_party/WebKit/Source/core/layout/LayoutInline.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutInline.cpp
@@ -614,7 +614,7 @@
     GenerateCulledLineBoxRects(yield, this);
   } else if (InlineFlowBox* curr = FirstLineBox()) {
     for (; curr; curr = curr->NextLineBox())
-      yield(LayoutRect(curr->Location(), curr->size()));
+      yield(LayoutRect(curr->Location(), curr->Size()));
   }
 }
 
diff --git a/third_party/WebKit/Source/core/layout/LayoutText.cpp b/third_party/WebKit/Source/core/layout/LayoutText.cpp
index 7c4d8fa2..c8ee986 100644
--- a/third_party/WebKit/Source/core/layout/LayoutText.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutText.cpp
@@ -337,7 +337,7 @@
                                const LayoutPoint& accumulated_offset) const {
   for (InlineTextBox* box = FirstTextBox(); box; box = box->NextTextBox()) {
     rects.push_back(EnclosingIntRect(LayoutRect(
-        LayoutPoint(accumulated_offset) + box->Location(), box->size())));
+        LayoutPoint(accumulated_offset) + box->Location(), box->Size())));
   }
 }
 
diff --git a/third_party/WebKit/Source/core/layout/TextAutosizer.cpp b/third_party/WebKit/Source/core/layout/TextAutosizer.cpp
index f31a565..4af1f5c 100644
--- a/third_party/WebKit/Source/core/layout/TextAutosizer.cpp
+++ b/third_party/WebKit/Source/core/layout/TextAutosizer.cpp
@@ -629,7 +629,7 @@
 IntSize TextAutosizer::WindowSize() const {
   Page* page = document_->GetPage();
   DCHECK(page);
-  return page->GetVisualViewport().size();
+  return page->GetVisualViewport().Size();
 }
 
 void TextAutosizer::ResetMultipliers() {
diff --git a/third_party/WebKit/Source/core/layout/line/EllipsisBox.cpp b/third_party/WebKit/Source/core/layout/line/EllipsisBox.cpp
index 53edf4a..d5535ef 100644
--- a/third_party/WebKit/Source/core/layout/line/EllipsisBox.cpp
+++ b/third_party/WebKit/Source/core/layout/line/EllipsisBox.cpp
@@ -57,7 +57,7 @@
 
   LayoutPoint box_origin = PhysicalLocation();
   box_origin.MoveBy(accumulated_offset);
-  LayoutRect bounds_rect(box_origin, size());
+  LayoutRect bounds_rect(box_origin, Size());
   if (VisibleToHitTestRequest(result.GetHitTestRequest()) &&
       bounds_rect.Intersects(LayoutRect(HitTestLocation::RectForPoint(
           location_in_container.Point(), 0, 0, 0, 0)))) {
diff --git a/third_party/WebKit/Source/core/layout/line/InlineBox.cpp b/third_party/WebKit/Source/core/layout/line/InlineBox.cpp
index a787d641..f2a566d 100644
--- a/third_party/WebKit/Source/core/layout/line/InlineBox.cpp
+++ b/third_party/WebKit/Source/core/layout/line/InlineBox.cpp
@@ -327,7 +327,7 @@
 }
 
 LayoutPoint InlineBox::PhysicalLocation() const {
-  LayoutRect rect(Location(), size());
+  LayoutRect rect(Location(), Size());
   FlipForWritingMode(rect);
   return rect.Location();
 }
diff --git a/third_party/WebKit/Source/core/layout/line/InlineBox.h b/third_party/WebKit/Source/core/layout/line/InlineBox.h
index 9704cf6..7974ba1f 100644
--- a/third_party/WebKit/Source/core/layout/line/InlineBox.h
+++ b/third_party/WebKit/Source/core/layout/line/InlineBox.h
@@ -235,7 +235,7 @@
   LayoutUnit Height() const {
     return IsHorizontal() ? LogicalHeight() : LogicalWidth();
   }
-  LayoutSize size() const { return LayoutSize(Width(), Height()); }
+  LayoutSize Size() const { return LayoutSize(Width(), Height()); }
 
   // The logicalLeft position is the left edge of the line box in a horizontal
   // line and the top edge in a vertical line.
diff --git a/third_party/WebKit/Source/core/layout/line/InlineFlowBox.cpp b/third_party/WebKit/Source/core/layout/line/InlineFlowBox.cpp
index b227464..51c7e58 100644
--- a/third_party/WebKit/Source/core/layout/line/InlineFlowBox.cpp
+++ b/third_party/WebKit/Source/core/layout/line/InlineFlowBox.cpp
@@ -70,7 +70,7 @@
 }
 
 LayoutRect InlineFlowBox::FrameRect() const {
-  return LayoutRect(Location(), size());
+  return LayoutRect(Location(), Size());
 }
 
 static void SetHasTextDescendantsOnAncestors(InlineFlowBox* box) {
diff --git a/third_party/WebKit/Source/core/layout/line/InlineTextBox.cpp b/third_party/WebKit/Source/core/layout/line/InlineTextBox.cpp
index 3a61fff..cd496703 100644
--- a/third_party/WebKit/Source/core/layout/line/InlineTextBox.cpp
+++ b/third_party/WebKit/Source/core/layout/line/InlineTextBox.cpp
@@ -445,7 +445,7 @@
 
   LayoutPoint box_origin = PhysicalLocation();
   box_origin.MoveBy(accumulated_offset);
-  LayoutRect rect(box_origin, size());
+  LayoutRect rect(box_origin, Size());
   if (VisibleToHitTestRequest(result.GetHitTestRequest()) &&
       location_in_container.Intersects(rect)) {
     GetLineLayoutItem().UpdateHitTestResult(
diff --git a/third_party/WebKit/Source/core/layout/shapes/Shape.cpp b/third_party/WebKit/Source/core/layout/shapes/Shape.cpp
index 5402940..e8fe5da 100644
--- a/third_party/WebKit/Source/core/layout/shapes/Shape.cpp
+++ b/third_party/WebKit/Source/core/layout/shapes/Shape.cpp
@@ -249,7 +249,7 @@
     // for layout, which is not allowed. See https://crbug.com/429346
     ImageObserverDisabler disabler(image);
     PaintFlags flags;
-    IntRect image_source_rect(IntPoint(), image->size());
+    IntRect image_source_rect(IntPoint(), image->Size());
     IntRect image_dest_rect(IntPoint(), image_rect.Size());
     // TODO(ccameron): No color conversion is required here.
     image->Draw(image_buffer->Canvas(), flags, image_dest_rect,
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGImage.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGImage.cpp
index 5907d1e..76092d5 100644
--- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGImage.cpp
+++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGImage.cpp
@@ -73,7 +73,7 @@
       !cached_image->IsSizeAvailable())
     return object_bounding_box_.Size();
 
-  FloatSize intrinsic_size = FloatSize(cached_image->GetImage()->size());
+  FloatSize intrinsic_size = FloatSize(cached_image->GetImage()->Size());
   if (StyleRef().Width().IsAuto() && StyleRef().Height().IsAuto())
     return intrinsic_size;
 
diff --git a/third_party/WebKit/Source/core/layout/svg/line/SVGInlineTextBox.cpp b/third_party/WebKit/Source/core/layout/svg/line/SVGInlineTextBox.cpp
index 6ee9bda..9cfb2f6 100644
--- a/third_party/WebKit/Source/core/layout/svg/line/SVGInlineTextBox.cpp
+++ b/third_party/WebKit/Source/core/layout/svg/line/SVGInlineTextBox.cpp
@@ -301,7 +301,7 @@
         (hit_rules.can_hit_fill &&
          (GetLineLayoutItem().Style()->SvgStyle().HasFill() ||
           !hit_rules.require_fill))) {
-      LayoutRect rect(Location(), size());
+      LayoutRect rect(Location(), Size());
       rect.MoveBy(accumulated_offset);
       if (location_in_container.Intersects(rect)) {
         LineLayoutSVGInlineText line_layout_item =
diff --git a/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp b/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp
index 8ad6442..34733c5 100644
--- a/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp
+++ b/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp
@@ -249,7 +249,7 @@
       should_respect_image_orientation == kRespectImageOrientation) {
     size = LayoutSize(ToBitmapImage(image_.Get())->SizeRespectingOrientation());
   } else {
-    size = LayoutSize(image_->size());
+    size = LayoutSize(image_->Size());
   }
 
   if (size_type == kIntrinsicCorrectedToDPR &&
@@ -372,7 +372,7 @@
 
       if (info_->ShouldShowPlaceholder() && all_data_received) {
         if (image_ && !image_->IsNull()) {
-          IntSize dimensions = image_->size();
+          IntSize dimensions = image_->Size();
           ClearImage();
           image_ = PlaceholderImage::Create(this, dimensions);
         }
diff --git a/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.cpp b/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.cpp
index e51a3619..d8539867 100644
--- a/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.cpp
+++ b/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.cpp
@@ -343,7 +343,7 @@
           : nullptr;
 
   CanvasAsyncBlobCreator* async_creator = CanvasAsyncBlobCreator::Create(
-      image_data->data(), encoding_mime_type, image_data->size(), start_time,
+      image_data->data(), encoding_mime_type, image_data->Size(), start_time,
       document, resolver);
 
   async_creator->ScheduleAsyncBlobCreation(options.quality());
diff --git a/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.h b/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.h
index 36e92e2..810045a7 100644
--- a/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.h
+++ b/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.h
@@ -51,7 +51,7 @@
                               const ImageEncodeOptions&,
                               ExceptionState&);
 
-  IntSize size() const { return size_; }
+  IntSize Size() const { return size_; }
   void SetSize(const IntSize&);
 
   void SetPlaceholderCanvasId(int canvas_id) {
diff --git a/third_party/WebKit/Source/core/page/DragController.cpp b/third_party/WebKit/Source/core/page/DragController.cpp
index 5078963c..79830a5 100644
--- a/third_party/WebKit/Source/core/page/DragController.cpp
+++ b/third_party/WebKit/Source/core/page/DragController.cpp
@@ -1029,8 +1029,8 @@
     orientation = ToBitmapImage(image)->CurrentFrameOrientation();
 
   IntSize image_size = orientation.UsesWidthAsHeight()
-                           ? image->size().TransposedSize()
-                           : image->size();
+                           ? image->Size().TransposedSize()
+                           : image->Size();
 
   FloatSize image_scale =
       DragImage::ClampedImageScale(image_size, image_element_size_in_pixels,
@@ -1043,7 +1043,7 @@
     IntSize original_size = image_element_size_in_pixels;
     origin = image_element_location;
 
-    IntSize new_size = drag_image->size();
+    IntSize new_size = drag_image->Size();
 
     // Properly orient the drag image and orient it differently if it's smaller
     // than the original
@@ -1071,7 +1071,7 @@
   std::unique_ptr<DragImage> drag_image = DragImage::Create(
       link_url, link_text, font_description, device_scale_factor);
 
-  IntSize size = drag_image ? drag_image->size() : IntSize();
+  IntSize size = drag_image ? drag_image->Size() : IntSize();
   IntPoint drag_image_offset(-size.Width() / 2, -kLinkDragBorderInset);
   drag_loc = IntPoint(mouse_dragged_point.X() + drag_image_offset.X(),
                       mouse_dragged_point.Y() + drag_image_offset.Y());
diff --git a/third_party/WebKit/Source/core/paint/BackgroundImageGeometry.cpp b/third_party/WebKit/Source/core/paint/BackgroundImageGeometry.cpp
index b9b6f6bb..41c0b14 100644
--- a/third_party/WebKit/Source/core/paint/BackgroundImageGeometry.cpp
+++ b/third_party/WebKit/Source/core/paint/BackgroundImageGeometry.cpp
@@ -58,7 +58,7 @@
                                  const FillLayer& fill_layer,
                                  const LayoutSize& positioning_area_size) {
   StyleImage* image = fill_layer.GetImage();
-  EFillSizeType type = fill_layer.size().type;
+  EFillSizeType type = fill_layer.Size().type;
 
   LayoutSize image_intrinsic_size = image->ImageSize(
       obj, obj.Style()->EffectiveZoom(), positioning_area_size);
@@ -66,8 +66,8 @@
     case kSizeLength: {
       LayoutSize tile_size(positioning_area_size);
 
-      Length layer_width = fill_layer.size().size.Width();
-      Length layer_height = fill_layer.size().size.Height();
+      Length layer_width = fill_layer.Size().size.Width();
+      Length layer_height = fill_layer.Size().size.Height();
 
       if (layer_width.IsFixed())
         tile_size.SetWidth(LayoutUnit(layer_width.Value()));
@@ -558,7 +558,7 @@
     LayoutUnit rounded_width = positioning_area_size.Width() / nr_tiles;
 
     // Maintain aspect ratio if background-size: auto is set
-    if (fill_layer.size().size.Height().IsAuto() &&
+    if (fill_layer.Size().size.Height().IsAuto() &&
         background_repeat_y != kRoundFill) {
       fill_tile_size.SetHeight(fill_tile_size.Height() * rounded_width /
                                fill_tile_size.Width());
@@ -585,7 +585,7 @@
                                           fill_tile_size.Height()));
     LayoutUnit rounded_height = positioning_area_size.Height() / nr_tiles;
     // Maintain aspect ratio if background-size: auto is set
-    if (fill_layer.size().size.Width().IsAuto() &&
+    if (fill_layer.Size().size.Width().IsAuto() &&
         background_repeat_x != kRoundFill) {
       fill_tile_size.SetWidth(fill_tile_size.Width() * rounded_height /
                               fill_tile_size.Height());
diff --git a/third_party/WebKit/Source/core/paint/BoxPainter.cpp b/third_party/WebKit/Source/core/paint/BoxPainter.cpp
index 926f8c98..b0d1505d 100644
--- a/third_party/WebKit/Source/core/paint/BoxPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/BoxPainter.cpp
@@ -562,7 +562,7 @@
   const FloatSize intrinsic_tile_size =
       image_context.GetImage()->HasRelativeSize()
           ? image_tile.Size()
-          : FloatSize(image_context.GetImage()->size());
+          : FloatSize(image_context.GetImage()->Size());
   const FloatRect src_rect = Image::ComputeSubsetForTile(
       image_tile, border.Rect(), intrinsic_tile_size);
 
diff --git a/third_party/WebKit/Source/core/paint/EllipsisBoxPainter.cpp b/third_party/WebKit/Source/core/paint/EllipsisBoxPainter.cpp
index 010c62b2..644f1823 100644
--- a/third_party/WebKit/Source/core/paint/EllipsisBoxPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/EllipsisBoxPainter.cpp
@@ -35,7 +35,7 @@
                                        const ComputedStyle& style) {
   LayoutPoint box_origin = ellipsis_box_.PhysicalLocation();
   box_origin.MoveBy(paint_offset);
-  LayoutRect paint_rect(box_origin, ellipsis_box_.size());
+  LayoutRect paint_rect(box_origin, ellipsis_box_.Size());
 
   GraphicsContext& context = paint_info.context;
   DisplayItem::Type display_item_type =
diff --git a/third_party/WebKit/Source/core/paint/SVGImagePainter.cpp b/third_party/WebKit/Source/core/paint/SVGImagePainter.cpp
index 17e322a1..88e47f9 100644
--- a/third_party/WebKit/Source/core/paint/SVGImagePainter.cpp
+++ b/third_party/WebKit/Source/core/paint/SVGImagePainter.cpp
@@ -113,7 +113,7 @@
         ->ConcreteObjectSize(layout_svg_image_.ObjectBoundingBox().Size());
   }
 
-  return FloatSize(cached_image->GetImage()->size());
+  return FloatSize(cached_image->GetImage()->Size());
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/paint/SVGInlineTextBoxPainter.cpp b/third_party/WebKit/Source/core/paint/SVGInlineTextBoxPainter.cpp
index 557997dc..39b0007 100644
--- a/third_party/WebKit/Source/core/paint/SVGInlineTextBoxPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/SVGInlineTextBoxPainter.cpp
@@ -59,7 +59,7 @@
     const LayoutPoint& paint_offset,
     bool include_selection_rect) const {
   LayoutRect bounds(svg_inline_text_box_.Location() + paint_offset,
-                    svg_inline_text_box_.size());
+                    svg_inline_text_box_.Size());
   if (HasShadow(paint_info, style))
     bounds.Expand(style.TextShadow()->RectOutsetsIncludingOriginal());
   if (include_selection_rect) {
diff --git a/third_party/WebKit/Source/core/paint/ScrollableAreaPainter.cpp b/third_party/WebKit/Source/core/paint/ScrollableAreaPainter.cpp
index 8973a523..67cd37d 100644
--- a/third_party/WebKit/Source/core/paint/ScrollableAreaPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/ScrollableAreaPainter.cpp
@@ -86,14 +86,14 @@
     DEFINE_STATIC_REF(Image, resize_corner_image_hi_res,
                       (Image::LoadPlatformResource("textAreaResizeCorner@2x")));
     resize_corner_image = resize_corner_image_hi_res;
-    corner_resizer_size = resize_corner_image->size();
+    corner_resizer_size = resize_corner_image->Size();
     if (old_device_scale_factor >= 2)
       corner_resizer_size.Scale(0.5f);
   } else {
     DEFINE_STATIC_REF(Image, resize_corner_image_lo_res,
                       (Image::LoadPlatformResource("textAreaResizeCorner")));
     resize_corner_image = resize_corner_image_lo_res;
-    corner_resizer_size = resize_corner_image->size();
+    corner_resizer_size = resize_corner_image->Size();
   }
 
   if (GetScrollableArea()
diff --git a/third_party/WebKit/Source/core/streams/ReadableStreamController.h b/third_party/WebKit/Source/core/streams/ReadableStreamController.h
index de049f0e..96a4c15 100644
--- a/third_party/WebKit/Source/core/streams/ReadableStreamController.h
+++ b/third_party/WebKit/Source/core/streams/ReadableStreamController.h
@@ -7,7 +7,7 @@
 
 #include "bindings/core/v8/ScopedPersistent.h"
 #include "bindings/core/v8/ScriptValue.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8ScriptRunner.h"
 #include "core/CoreExport.h"
 #include "platform/heap/Handle.h"
diff --git a/third_party/WebKit/Source/core/streams/ReadableStreamOperations.cpp b/third_party/WebKit/Source/core/streams/ReadableStreamOperations.cpp
index 8f717c9..75b07f5 100644
--- a/third_party/WebKit/Source/core/streams/ReadableStreamOperations.cpp
+++ b/third_party/WebKit/Source/core/streams/ReadableStreamOperations.cpp
@@ -6,7 +6,7 @@
 
 #include "bindings/core/v8/ExceptionState.h"
 #include "bindings/core/v8/ScriptState.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8ScriptRunner.h"
 #include "core/streams/UnderlyingSourceBase.h"
 
diff --git a/third_party/WebKit/Source/core/style/FillLayer.h b/third_party/WebKit/Source/core/style/FillLayer.h
index bdffe507..9118a5c 100644
--- a/third_party/WebKit/Source/core/style/FillLayer.h
+++ b/third_party/WebKit/Source/core/style/FillLayer.h
@@ -85,7 +85,7 @@
   EFillSizeType SizeType() const {
     return static_cast<EFillSizeType>(size_type_);
   }
-  FillSize size() const {
+  FillSize Size() const {
     return FillSize(static_cast<EFillSizeType>(size_type_), size_length_);
   }
   EMaskSourceType MaskSourceType() const {
diff --git a/third_party/WebKit/Source/core/svg/graphics/SVGImage.cpp b/third_party/WebKit/Source/core/svg/graphics/SVGImage.cpp
index 990466e..58c231a6 100644
--- a/third_party/WebKit/Source/core/svg/graphics/SVGImage.cpp
+++ b/third_party/WebKit/Source/core/svg/graphics/SVGImage.cpp
@@ -275,7 +275,7 @@
 }
 
 sk_sp<SkImage> SVGImage::ImageForCurrentFrame() {
-  return ImageForCurrentFrameForContainer(KURL(), size());
+  return ImageForCurrentFrameForContainer(KURL(), Size());
 }
 
 void SVGImage::DrawPatternForContainer(GraphicsContext& context,
diff --git a/third_party/WebKit/Source/core/svg/graphics/SVGImage.h b/third_party/WebKit/Source/core/svg/graphics/SVGImage.h
index 76ea8976..a47aee4 100644
--- a/third_party/WebKit/Source/core/svg/graphics/SVGImage.h
+++ b/third_party/WebKit/Source/core/svg/graphics/SVGImage.h
@@ -66,7 +66,7 @@
   LayoutReplaced* EmbeddedReplacedContent() const;
 
   bool IsSVGImage() const override { return true; }
-  IntSize size() const override { return intrinsic_size_; }
+  IntSize Size() const override { return intrinsic_size_; }
 
   bool CurrentFrameHasSingleSecurityOrigin() const override;
 
diff --git a/third_party/WebKit/Source/core/svg/graphics/SVGImageForContainer.cpp b/third_party/WebKit/Source/core/svg/graphics/SVGImageForContainer.cpp
index 6eec67e..37d8bdb4 100644
--- a/third_party/WebKit/Source/core/svg/graphics/SVGImageForContainer.cpp
+++ b/third_party/WebKit/Source/core/svg/graphics/SVGImageForContainer.cpp
@@ -27,7 +27,7 @@
 
 namespace blink {
 
-IntSize SVGImageForContainer::size() const {
+IntSize SVGImageForContainer::Size() const {
   FloatSize scaled_container_size(container_size_);
   scaled_container_size.Scale(zoom_);
   return RoundedIntSize(scaled_container_size);
@@ -62,7 +62,7 @@
 }
 
 sk_sp<SkImage> SVGImageForContainer::ImageForCurrentFrame() {
-  return image_->ImageForCurrentFrameForContainer(url_, size());
+  return image_->ImageForCurrentFrameForContainer(url_, Size());
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/svg/graphics/SVGImageForContainer.h b/third_party/WebKit/Source/core/svg/graphics/SVGImageForContainer.h
index b250268a..d54dca5 100644
--- a/third_party/WebKit/Source/core/svg/graphics/SVGImageForContainer.h
+++ b/third_party/WebKit/Source/core/svg/graphics/SVGImageForContainer.h
@@ -68,7 +68,7 @@
                                              zoom, url));
   }
 
-  IntSize size() const override;
+  IntSize Size() const override;
 
   bool UsesContainerSize() const override {
     return image_->UsesContainerSize();
diff --git a/third_party/WebKit/Source/core/svg/graphics/filters/SVGFEImage.cpp b/third_party/WebKit/Source/core/svg/graphics/filters/SVGFEImage.cpp
index 450dc3b..cdb8104 100644
--- a/third_party/WebKit/Source/core/svg/graphics/filters/SVGFEImage.cpp
+++ b/third_party/WebKit/Source/core/svg/graphics/filters/SVGFEImage.cpp
@@ -125,7 +125,7 @@
     }
     dest_rect.Intersect(src_rect);
   } else {
-    src_rect = FloatRect(FloatPoint(), FloatSize(image_->size()));
+    src_rect = FloatRect(FloatPoint(), FloatSize(image_->Size()));
     preserve_aspect_ratio_->TransformRect(dest_rect, src_rect);
   }
   return dest_rect;
@@ -144,7 +144,7 @@
 TextStream& FEImage::ExternalRepresentation(TextStream& ts, int indent) const {
   IntSize image_size;
   if (image_) {
-    image_size = image_->size();
+    image_size = image_->Size();
   } else if (LayoutObject* layout_object = ReferencedLayoutObject()) {
     image_size =
         EnclosingIntRect(GetLayoutObjectRepaintRect(layout_object)).Size();
@@ -207,7 +207,7 @@
     return CreateTransparentBlack();
   }
 
-  FloatRect src_rect = FloatRect(FloatPoint(), FloatSize(image_->size()));
+  FloatRect src_rect = FloatRect(FloatPoint(), FloatSize(image_->Size()));
   FloatRect dst_rect = FilterPrimitiveSubregion();
 
   preserve_aspect_ratio_->TransformRect(dst_rect, src_rect);
diff --git a/third_party/WebKit/Source/core/testing/Internals.cpp b/third_party/WebKit/Source/core/testing/Internals.cpp
index 9198667..f061d5d 100644
--- a/third_party/WebKit/Source/core/testing/Internals.cpp
+++ b/third_party/WebKit/Source/core/testing/Internals.cpp
@@ -2190,10 +2190,10 @@
 
 Vector<String> Internals::IconURLs(Document* document,
                                    int icon_types_mask) const {
-  Vector<IconURL> icon_ur_ls = document->IconURLs(icon_types_mask);
+  Vector<IconURL> icon_urls = document->IconURLs(icon_types_mask);
   Vector<String> array;
 
-  for (auto& icon_url : icon_ur_ls)
+  for (auto& icon_url : icon_urls)
     array.push_back(icon_url.icon_url_.GetString());
 
   return array;
@@ -2648,7 +2648,7 @@
   result.Append(',');
   result.AppendNumber(cursor.HotSpot().Y());
   if (cursor.GetImage()) {
-    IntSize size = cursor.GetImage()->size();
+    IntSize size = cursor.GetImage()->Size();
     result.Append(" image=");
     result.AppendNumber(size.Width());
     result.Append('x');
diff --git a/third_party/WebKit/Source/core/testing/LayerRect.h b/third_party/WebKit/Source/core/testing/LayerRect.h
index b4efcd8..2b768375 100644
--- a/third_party/WebKit/Source/core/testing/LayerRect.h
+++ b/third_party/WebKit/Source/core/testing/LayerRect.h
@@ -33,13 +33,12 @@
 
 #include "bindings/core/v8/ScriptWrappable.h"
 #include "core/dom/ClientRect.h"
+#include "core/dom/Node.h"
 #include "platform/heap/Handle.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
 
-class Node;
-
 class LayerRect final : public GarbageCollectedFinalized<LayerRect>,
                         public ScriptWrappable {
   DEFINE_WRAPPERTYPEINFO();
diff --git a/third_party/WebKit/Source/core/workers/WorkerGlobalScope.cpp b/third_party/WebKit/Source/core/workers/WorkerGlobalScope.cpp
index 4cd5eeb..15c1f3392 100644
--- a/third_party/WebKit/Source/core/workers/WorkerGlobalScope.cpp
+++ b/third_party/WebKit/Source/core/workers/WorkerGlobalScope.cpp
@@ -175,7 +175,7 @@
 
   ExecutionContext& execution_context = *this->GetExecutionContext();
 
-  Vector<KURL> completed_ur_ls;
+  Vector<KURL> completed_urls;
   for (const String& url_string : urls) {
     const KURL& url = execution_context.CompleteURL(url_string);
     if (!url.IsValid()) {
@@ -190,10 +190,10 @@
           "The script at '" + url.ElidedString() + "' failed to load.");
       return;
     }
-    completed_ur_ls.push_back(url);
+    completed_urls.push_back(url);
   }
 
-  for (const KURL& complete_url : completed_ur_ls) {
+  for (const KURL& complete_url : completed_urls) {
     RefPtr<WorkerScriptLoader> script_loader(WorkerScriptLoader::Create());
     script_loader->SetRequestContext(WebURLRequest::kRequestContextScript);
     script_loader->LoadSynchronously(
diff --git a/third_party/WebKit/Source/devtools/front_end/Images/whatsnew.png b/third_party/WebKit/Source/devtools/front_end/Images/whatsnew.png
index 8ae6257e..4a72ee0b 100644
--- a/third_party/WebKit/Source/devtools/front_end/Images/whatsnew.png
+++ b/third_party/WebKit/Source/devtools/front_end/Images/whatsnew.png
Binary files differ
diff --git a/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeView.js b/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeView.js
index 907fa811..04e9011 100644
--- a/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeView.js
+++ b/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeView.js
@@ -372,7 +372,7 @@
     var pageImage = new Image();
     pageImage.src = 'data:image/png;base64,' + screenshot;
     pageImage.onload = async () => {
-      var scale = 1 / this._model.scale();
+      var scale = window.devicePixelRatio / this._model.scale();
       var outlineRect = this._model.outlineRect().scale(scale);
       var screenRect = this._model.screenRect().scale(scale);
       var visiblePageRect = this._model.visiblePageRect().scale(scale);
diff --git a/third_party/WebKit/Source/devtools/front_end/help/ReleaseNoteText.js b/third_party/WebKit/Source/devtools/front_end/help/ReleaseNoteText.js
index 8c865d8..39a954b 100644
--- a/third_party/WebKit/Source/devtools/front_end/help/ReleaseNoteText.js
+++ b/third_party/WebKit/Source/devtools/front_end/help/ReleaseNoteText.js
@@ -6,31 +6,72 @@
 // be shown in Canary (e.g. make sure the release notes are accurate).
 // https://github.com/ChromeDevTools/devtools-frontend/wiki/Release-Notes
 
+var commandMenuShortcut = Host.isMac() ? 'Command + Shift + P' : 'Control + Shift + P';
+
 /** @type {!Array<!Help.ReleaseNote>} */
-Help.releaseNoteText = [{
-  version: 1,
-  date: 'March 2017',
-  highlights: [
-    {
-      title: 'New Performance and Memory panels',
-      subtitle: 'Head to Performance for JavaScript profiling',
-      link: 'https://developers.google.com/web/updates/2017/03/devtools-release-notes#performance-panel',
-    },
-    {
-      title: 'Editable cookies',
-      subtitle: 'You can edit any existing cookies and create new ones in the Application panel',
-      link: 'https://developers.google.com/web/updates/2017/03/devtools-release-notes#cookies',
-    },
-    {
-      title: 'Console filtering & settings',
-      subtitle: 'Use the text filter or click the Console settings icon to touch up your preferences',
-      link: 'https://developers.google.com/web/updates/2017/03/devtools-release-notes#console',
-    },
-    {
-      title: 'Debugger catches out-of-memory errors',
-      subtitle: 'See the stack or grab a heap snapshot to see why the app may crash',
-      link: 'https://developers.google.com/web/updates/2017/03/devtools-release-notes#out-of-memory-breakpoints',
-    },
-  ],
-  link: 'https://developers.google.com/web/updates/2017/03/devtools-release-notes',
-}];
+Help.releaseNoteText = [
+  {
+    version: 2,
+    date: 'April 2017',
+    highlights: [
+      {
+        title: 'CSS and JS code coverage',
+        subtitle: 'Find unused CSS and JS with the new Coverage drawer.',
+        link: 'https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage',
+      },
+      {
+        title: 'Full-page screenshots',
+        subtitle: 'Take a screenshot of the entire page, from the top of the viewport to the bottom.',
+        link: 'https://developers.google.com/web/updates/2017/04/devtools-release-notes#screenshots',
+      },
+      {
+        title: 'Block requests',
+        subtitle: 'Manually disable individual requests in the Network panel.',
+        link: 'https://developers.google.com/web/updates/2017/04/devtools-release-notes#block-requests',
+      },
+      {
+        title: 'Step over async await',
+        subtitle: 'Step through async functions predictably.',
+        link: 'https://developers.google.com/web/updates/2017/04/devtools-release-notes#async',
+      },
+      {
+        title: 'Unified Command Menu',
+        subtitle: 'Execute commands and open files from the newly-unified Command Menu (' + commandMenuShortcut + ').',
+        link: 'https://developers.google.com/web/updates/2017/04/devtools-release-notes#command-menu',
+      },
+      {
+        title: 'Workspaces 2.0',
+        subtitle: 'Check out the new UX for using DevTools as your code editor.',
+        link: 'https://developers.google.com/web/updates/2017/04/devtools-release-notes#workspaces',
+      },
+    ],
+    link: 'https://developers.google.com/web/updates/2017/04/devtools-release-notes',
+  },
+  {
+    version: 1,
+    date: 'March 2017',
+    highlights: [
+      {
+        title: 'New Performance and Memory panels',
+        subtitle: 'Head to Performance for JavaScript profiling',
+        link: 'https://developers.google.com/web/updates/2017/03/devtools-release-notes#performance-panel',
+      },
+      {
+        title: 'Editable cookies',
+        subtitle: 'You can edit any existing cookies and create new ones in the Application panel',
+        link: 'https://developers.google.com/web/updates/2017/03/devtools-release-notes#cookies',
+      },
+      {
+        title: 'Console filtering & settings',
+        subtitle: 'Use the text filter or click the Console settings icon to touch up your preferences',
+        link: 'https://developers.google.com/web/updates/2017/03/devtools-release-notes#console',
+      },
+      {
+        title: 'Debugger catches out-of-memory errors',
+        subtitle: 'See the stack or grab a heap snapshot to see why the app may crash',
+        link: 'https://developers.google.com/web/updates/2017/03/devtools-release-notes#out-of-memory-breakpoints',
+      },
+    ],
+    link: 'https://developers.google.com/web/updates/2017/03/devtools-release-notes',
+  }
+];
diff --git a/third_party/WebKit/Source/devtools/front_end/main/Main.js b/third_party/WebKit/Source/devtools/front_end/main/Main.js
index a6911fb7..f8921ae 100644
--- a/third_party/WebKit/Source/devtools/front_end/main/Main.js
+++ b/third_party/WebKit/Source/devtools/front_end/main/Main.js
@@ -90,33 +90,36 @@
    * @param {!Object<string, string>} prefs
    */
   _initializeExperiments(prefs) {
+    // Keep this sorted alphabetically: both keys and values.
     Runtime.experiments.register('accessibilityInspection', 'Accessibility Inspection');
     Runtime.experiments.register('applyCustomStylesheet', 'Allow custom UI themes');
     Runtime.experiments.register('audits2', 'Audits 2.0', true);
     Runtime.experiments.register('autoAttachToCrossProcessSubframes', 'Auto-attach to cross-process subframes', true);
     Runtime.experiments.register('blackboxJSFramesOnTimeline', 'Blackbox JavaScript frames on Timeline', true);
     Runtime.experiments.register('changesDrawer', 'Changes drawer', true);
+    Runtime.experiments.register('colorContrastRatio', 'Color contrast ratio line in color picker', true);
     Runtime.experiments.register('continueToLocationMarkers', 'Continue to location markers', true);
-    Runtime.experiments.register('colorContrastRatio', 'Contrast ratio line in color picker', true);
     Runtime.experiments.register('emptySourceMapAutoStepping', 'Empty sourcemap auto-stepping');
     Runtime.experiments.register('inputEventsOnTimelineOverview', 'Input events on Timeline overview', true);
     Runtime.experiments.register('liveSASS', 'Live SASS');
     Runtime.experiments.register('networkGroupingRequests', 'Network request groups support', true);
     Runtime.experiments.register('objectPreviews', 'Object previews', true);
     Runtime.experiments.register('persistence2', 'Persistence 2.0');
-    Runtime.experiments.register('persistenceValidation', 'Validate persistence bindings');
-    Runtime.experiments.register('timelineShowAllEvents', 'Show all events on Timeline', true);
-    Runtime.experiments.register('timelineShowAllProcesses', 'Show all processes on Timeline', true);
-    Runtime.experiments.register('timelinePaintTimingMarkers', 'Show paint timing markers on Timeline', true);
+    Runtime.experiments.register('persistenceValidation', 'Persistence validation');
     Runtime.experiments.register('sourceDiff', 'Source diff');
-    Runtime.experiments.register('timelineEventInitiators', 'Timeline event initiators');
-    Runtime.experiments.register('timelineFlowEvents', 'Timeline flow events', true);
     Runtime.experiments.register('terminalInDrawer', 'Terminal in drawer', true);
-    Runtime.experiments.register('timelineInvalidationTracking', 'Timeline invalidation tracking', true);
-    Runtime.experiments.register('timelineMultipleMainViews', 'Tabbed views on Performance panel');
-    Runtime.experiments.register('timelineTracingJSProfile', 'Timeline tracing based JS profiler', true);
-    Runtime.experiments.register('timelineV8RuntimeCallStats', 'V8 Runtime Call Stats on Timeline', true);
-    Runtime.experiments.register('timelinePerFrameTrack', 'Show track per frame on Timeline', true);
+
+    // Timeline
+    Runtime.experiments.register('timelineEventInitiators', 'Timeline: event initiators');
+    Runtime.experiments.register('timelineFlowEvents', 'Timeline: flow events', true);
+    Runtime.experiments.register('timelineInvalidationTracking', 'Timeline: invalidation tracking', true);
+    Runtime.experiments.register('timelineMultipleMainViews', 'Timeline: multiple main views');
+    Runtime.experiments.register('timelinePaintTimingMarkers', 'Timeline: paint timing markers', true);
+    Runtime.experiments.register('timelinePerFrameTrack', 'Timeline: per-frame tracks', true);
+    Runtime.experiments.register('timelineShowAllEvents', 'Timeline: show all events', true);
+    Runtime.experiments.register('timelineShowAllProcesses', 'Timeline: show all processes', true);
+    Runtime.experiments.register('timelineTracingJSProfile', 'Timeline: tracing based JS profiler', true);
+    Runtime.experiments.register('timelineV8RuntimeCallStats', 'Timeline: V8 Runtime Call Stats on Timeline', true);
 
     Runtime.experiments.cleanUpStaleExperiments();
 
diff --git a/third_party/WebKit/Source/devtools/front_end/perf_ui/timelineGrid.css b/third_party/WebKit/Source/devtools/front_end/perf_ui/timelineGrid.css
index 68d0f183..9e2382e1 100644
--- a/third_party/WebKit/Source/devtools/front_end/perf_ui/timelineGrid.css
+++ b/third_party/WebKit/Source/devtools/front_end/perf_ui/timelineGrid.css
@@ -46,7 +46,7 @@
 
 .resources-event-divider {
     position: absolute;
-    width: 2px;
+    width: 1px;
     top: 0;
     bottom: 0;
     z-index: 300;
diff --git a/third_party/WebKit/Source/devtools/front_end/timeline/TimelinePanel.js b/third_party/WebKit/Source/devtools/front_end/timeline/TimelinePanel.js
index 0916726..2d1380c1 100644
--- a/third_party/WebKit/Source/devtools/front_end/timeline/TimelinePanel.js
+++ b/third_party/WebKit/Source/devtools/front_end/timeline/TimelinePanel.js
@@ -58,6 +58,8 @@
       this._filters.push(Timeline.TimelineUIUtils.visibleEventsFilter());
       this._filters.push(new TimelineModel.ExcludeTopLevelFilter());
     }
+    if (!Runtime.experiments.isEnabled('timelinePaintTimingMarkers'))
+      this._filters.push(Timeline.TimelineUIUtils.paintEventsFilter());
 
     /** @type {?Timeline.PerformanceModel} */
     this._performanceModel = null;
diff --git a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineUIUtils.js b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineUIUtils.js
index 2f22b5f5..fdec03b38 100644
--- a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineUIUtils.js
+++ b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineUIUtils.js
@@ -111,6 +111,10 @@
         new Timeline.TimelineRecordStyle(Common.UIString('DOMContentLoaded event'), categories['scripting'], true);
     eventStyles[recordTypes.MarkFirstPaint] =
         new Timeline.TimelineRecordStyle(Common.UIString('First paint'), categories['painting'], true);
+    eventStyles[recordTypes.MarkFMP] =
+        new Timeline.TimelineRecordStyle(Common.UIString('FMP'), categories['rendering'], true);
+    eventStyles[recordTypes.MarkFMPCandidate] =
+        new Timeline.TimelineRecordStyle(Common.UIString('FMP candidate'), categories['rendering'], true);
     eventStyles[recordTypes.TimeStamp] =
         new Timeline.TimelineRecordStyle(Common.UIString('Timestamp'), categories['scripting']);
     eventStyles[recordTypes.ConsoleTime] =
@@ -1417,16 +1421,9 @@
     var eventDivider = createElementWithClass('div', 'resources-event-divider');
     var startTime = Number.millisToString(event.startTime - zeroTime);
     eventDivider.title = Common.UIString('%s at %s', Timeline.TimelineUIUtils.eventTitle(event), startTime);
-
-    var recordTypes = TimelineModel.TimelineModel.RecordType;
-    var name = event.name;
-    if (name === recordTypes.MarkDOMContent)
-      eventDivider.classList.add('resources-blue-divider');
-    else if (name === recordTypes.MarkLoad)
-      eventDivider.classList.add('resources-red-divider');
-    else if (name === recordTypes.MarkFirstPaint)
-      eventDivider.classList.add('resources-green-divider');
-
+    var style = Timeline.TimelineUIUtils.markerStyleForEvent(event);
+    if (style.tall)
+      eventDivider.style.backgroundColor = style.color;
     return eventDivider;
   }
 
@@ -1451,6 +1448,14 @@
   }
 
   /**
+   * @return {!TimelineModel.TimelineModelFilter}
+   */
+  static paintEventsFilter() {
+    var recordTypes = TimelineModel.TimelineModel.RecordType;
+    return new TimelineModel.TimelineInvisibleEventsFilter([recordTypes.MarkFMP, recordTypes.MarkFMPCandidate]);
+  }
+
+  /**
    * @return {!Object.<string, !Timeline.TimelineCategory>}
    */
   static categories() {
@@ -1682,11 +1687,6 @@
    * @return {!Timeline.TimelineMarkerStyle}
    */
   static markerStyleForEvent(event) {
-    const red = 'rgb(255, 0, 0)';
-    const blue = 'rgb(0, 0, 255)';
-    const orange = 'rgb(255, 178, 23)';
-    const green = 'rgb(0, 130, 0)';
-    const purple = '#a2f';
     const tallMarkerDashStyle = [10, 5];
     const title = Timeline.TimelineUIUtils.eventTitle(event);
 
@@ -1696,29 +1696,37 @@
         title: title,
         dashStyle: tallMarkerDashStyle,
         lineWidth: 0.5,
-        color: event.hasCategory(TimelineModel.TimelineModel.Category.UserTiming) ? purple : orange,
+        color: event.hasCategory(TimelineModel.TimelineModel.Category.UserTiming) ? 'purple' : 'orange',
         tall: false,
         lowPriority: false,
       };
     }
     var recordTypes = TimelineModel.TimelineModel.RecordType;
     var tall = false;
-    var color = green;
+    var color = 'green';
     switch (event.name) {
       case recordTypes.MarkDOMContent:
-        color = blue;
+        color = 'blue';
         tall = true;
         break;
       case recordTypes.MarkLoad:
-        color = red;
+        color = 'red';
         tall = true;
         break;
       case recordTypes.MarkFirstPaint:
-        color = green;
+        color = 'green';
+        tall = true;
+        break;
+      case recordTypes.MarkFMP:
+        color = 'orange';
+        tall = true;
+        break;
+      case recordTypes.MarkFMPCandidate:
+        color = 'orange';
         tall = true;
         break;
       case recordTypes.TimeStamp:
-        color = orange;
+        color = 'orange';
         break;
     }
     return {
diff --git a/third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineModel.js b/third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineModel.js
index d9e3925e..bcdfdf2c 100644
--- a/third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineModel.js
+++ b/third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineModel.js
@@ -106,11 +106,8 @@
     switch (event.name) {
       case recordTypes.TimeStamp:
       case recordTypes.MarkFirstPaint:
-      case recordTypes.FirstTextPaint:
-      case recordTypes.FirstImagePaint:
-      case recordTypes.FirstMeaningfulPaint:
-      case recordTypes.FirstPaint:
-      case recordTypes.FirstContentfulPaint:
+      case recordTypes.MarkFMP:
+      case recordTypes.MarkFMPCandidate:
         return true;
       case recordTypes.MarkDOMContent:
       case recordTypes.MarkLoad:
@@ -1090,17 +1087,13 @@
   MarkLoad: 'MarkLoad',
   MarkDOMContent: 'MarkDOMContent',
   MarkFirstPaint: 'MarkFirstPaint',
+  MarkFMP: 'firstMeaningfulPaint',
+  MarkFMPCandidate: 'firstMeaningfulPaintCandidate',
 
   TimeStamp: 'TimeStamp',
   ConsoleTime: 'ConsoleTime',
   UserTiming: 'UserTiming',
 
-  FirstTextPaint: 'firstTextPaint',
-  FirstImagePaint: 'firstImagePaint',
-  FirstMeaningfulPaint: 'firstMeaningfulPaint',
-  FirstPaint: 'firstPaint',
-  FirstContentfulPaint: 'firstContentfulPaint',
-
   ResourceSendRequest: 'ResourceSendRequest',
   ResourceReceiveResponse: 'ResourceReceiveResponse',
   ResourceReceivedData: 'ResourceReceivedData',
diff --git a/third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineModelFilter.js b/third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineModelFilter.js
index 1f8033b..77b2002 100644
--- a/third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineModelFilter.js
+++ b/third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineModelFilter.js
@@ -44,6 +44,25 @@
   }
 };
 
+TimelineModel.TimelineInvisibleEventsFilter = class extends TimelineModel.TimelineModelFilter {
+  /**
+   * @param {!Array<string>} invisibleTypes
+   */
+  constructor(invisibleTypes) {
+    super();
+    this._invisibleTypes = new Set(invisibleTypes);
+  }
+
+  /**
+   * @override
+   * @param {!SDK.TracingModel.Event} event
+   * @return {boolean}
+   */
+  accept(event) {
+    return !this._invisibleTypes.has(TimelineModel.TimelineVisibleEventsFilter._eventType(event));
+  }
+};
+
 TimelineModel.ExclusiveNameFilter = class extends TimelineModel.TimelineModelFilter {
   /**
    * @param {!Array<string>} excludeNames
diff --git a/third_party/WebKit/Source/devtools/front_end/ui/toolbar.css b/third_party/WebKit/Source/devtools/front_end/ui/toolbar.css
index 4664e203..f45303bd 100644
--- a/third_party/WebKit/Source/devtools/front_end/ui/toolbar.css
+++ b/third_party/WebKit/Source/devtools/front_end/ui/toolbar.css
@@ -214,6 +214,10 @@
     border-radius: 2px;
 }
 
+select.toolbar-item[data-keyboard-focus="true"]:focus > * {
+    background: white;
+}
+
 /* Input */
 
 .toolbar-input {
diff --git a/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp
index 94fe155..44ccdb3c 100644
--- a/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp
+++ b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp
@@ -1511,7 +1511,7 @@
 ImageData* BaseRenderingContext2D::createImageData(
     ImageData* image_data,
     ExceptionState& exception_state) const {
-  ImageData* result = ImageData::Create(image_data->size());
+  ImageData* result = ImageData::Create(image_data->Size());
   if (!result)
     exception_state.ThrowRangeError("Out of memory at ImageData creation");
   return result;
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBCursor.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBCursor.cpp
index 97911604..15d5515 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBCursor.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBCursor.cpp
@@ -219,7 +219,7 @@
                                       IDBDatabase::kNotValidKeyErrorMessage);
     return;
   }
-  continueFunction(key, nullptr, exception_state);
+  Continue(key, nullptr, exception_state);
 }
 
 void IDBCursor::continuePrimaryKey(ScriptState* script_state,
@@ -286,12 +286,12 @@
     return;
   }
 
-  continueFunction(key, primary_key, exception_state);
+  Continue(key, primary_key, exception_state);
 }
 
-void IDBCursor::continueFunction(IDBKey* key,
-                                 IDBKey* primary_key,
-                                 ExceptionState& exception_state) {
+void IDBCursor::Continue(IDBKey* key,
+                         IDBKey* primary_key,
+                         ExceptionState& exception_state) {
   DCHECK(transaction_->IsActive());
   DCHECK(got_value_);
   DCHECK(!IsDeleted());
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBCursor.h b/third_party/WebKit/Source/modules/indexeddb/IDBCursor.h
index 85cd1f0..c4a3e1d 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBCursor.h
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBCursor.h
@@ -87,7 +87,7 @@
   bool isPrimaryKeyDirty() const { return primary_key_dirty_; }
   bool isValueDirty() const { return value_dirty_; }
 
-  void continueFunction(IDBKey*, IDBKey* primary_key, ExceptionState&);
+  void Continue(IDBKey*, IDBKey* primary_key, ExceptionState&);
   void PostSuccessHandlerCallback();
   bool IsDeleted() const;
   void Close();
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBFactory.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBFactory.cpp
index 1782a240..84057d4 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBFactory.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBFactory.cpp
@@ -154,7 +154,7 @@
                                              const String& name,
                                              ExceptionState& exception_state) {
   return DeleteDatabaseInternal(script_state, name, exception_state,
-                                false /* force_close */);
+                                /*force_close=*/false);
 }
 
 IDBOpenDBRequest* IDBFactory::CloseConnectionsAndDeleteDatabase(
@@ -162,7 +162,7 @@
     const String& name,
     ExceptionState& exception_state) {
   return DeleteDatabaseInternal(script_state, name, exception_state,
-                                true /* force_close */);
+                                /*force_close=*/true);
 }
 
 IDBOpenDBRequest* IDBFactory::DeleteDatabaseInternal(
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBIndex.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBIndex.cpp
index d80e150e..c997e91 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBIndex.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBIndex.cpp
@@ -27,7 +27,7 @@
 
 #include <memory>
 #include "bindings/core/v8/ExceptionState.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/modules/v8/ToV8ForModules.h"
 #include "bindings/modules/v8/V8BindingForModules.h"
 #include "core/dom/ExceptionCode.h"
@@ -286,7 +286,7 @@
                                  ExceptionState& exception_state) {
   IDB_TRACE("IDBIndex::getAllKeys");
   return GetAllInternal(script_state, range, max_count, exception_state,
-                        true /* keyOnly */);
+                        /*key_only=*/true);
 }
 
 IDBRequest* IDBIndex::getKey(ScriptState* script_state,
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBKeyPath.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBKeyPath.cpp
index adb501cb..9b62882e 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBKeyPath.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBKeyPath.cpp
@@ -88,7 +88,7 @@
     return;
   }
 
-  key_path.Split('.', /*allowEmptyEntries*/ true, elements);
+  key_path.Split('.', /*allow_empty_entries=*/true, elements);
   for (size_t i = 0; i < elements.size(); ++i) {
     if (!IsIdentifier(elements[i])) {
       error = kIDBKeyPathParseErrorIdentifier;
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBKeyRange.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBKeyRange.cpp
index 3027290..a16662f 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBKeyRange.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBKeyRange.cpp
@@ -26,7 +26,7 @@
 #include "modules/indexeddb/IDBKeyRange.h"
 
 #include "bindings/core/v8/ExceptionState.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/modules/v8/ToV8ForModules.h"
 #include "bindings/modules/v8/V8BindingForModules.h"
 #include "core/dom/ExceptionCode.h"
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp
index 48e4aa7..9cbf73a 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp
@@ -30,7 +30,7 @@
 #include "bindings/core/v8/ExceptionState.h"
 #include "bindings/core/v8/ScriptState.h"
 #include "bindings/core/v8/SerializedScriptValueFactory.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/modules/v8/ToV8ForModules.h"
 #include "bindings/modules/v8/V8BindingForModules.h"
 #include "core/dom/DOMStringList.h"
@@ -170,7 +170,7 @@
   IDBRequest* request = IDBRequest::Create(script_state, IDBAny::Create(this),
                                            transaction_.Get());
   BackendDB()->Get(transaction_->Id(), Id(), IDBIndexMetadata::kInvalidId,
-                   key_range, false /* keyOnly */,
+                   key_range, /*key_only=*/false,
                    request->CreateWebCallbacks().release());
   return request;
 }
@@ -214,7 +214,7 @@
   IDBRequest* request = IDBRequest::Create(script_state, IDBAny::Create(this),
                                            transaction_.Get());
   BackendDB()->Get(transaction_->Id(), Id(), IDBIndexMetadata::kInvalidId,
-                   key_range, true /* keyOnly */,
+                   key_range, /*key_only=*/true,
                    request->CreateWebCallbacks().release());
   return request;
 }
@@ -645,7 +645,7 @@
 namespace {
 // This class creates the index keys for a given index by extracting
 // them from the SerializedScriptValue, for all the existing values in
-// the objectStore. It only needs to be kept alive by virtue of being
+// the object store. It only needs to be kept alive by virtue of being
 // a listener on an IDBRequest object, in the same way that JavaScript
 // cursor success handlers are kept alive.
 class IndexPopulator final : public EventListener {
@@ -707,7 +707,7 @@
     Vector<int64_t> index_ids;
     index_ids.push_back(IndexMetadata().id);
     if (cursor && !cursor->IsDeleted()) {
-      cursor->continueFunction(nullptr, nullptr, ASSERT_NO_EXCEPTION);
+      cursor->Continue(nullptr, nullptr, ASSERT_NO_EXCEPTION);
 
       IDBKey* primary_key = cursor->IdbPrimaryKey();
       ScriptValue value = cursor->value(script_state_.Get());
@@ -1060,10 +1060,10 @@
 void IDBObjectStore::ClearIndexCache() {
   DCHECK(!transaction_->IsActive() || (IsDeleted() && IsNewlyCreated()));
 
-// There is no harm in having clearIndexCache() happen multiple times for
-// the same object. We assert that it is called once to uncover potential
-// object store accounting bugs.
 #if DCHECK_IS_ON()
+  // There is no harm in having ClearIndexCache() happen multiple times for
+  // the same object. We assert that it is called once to uncover potential
+  // object store accounting bugs.
   DCHECK(!clear_index_cache_called_);
   clear_index_cache_called_ = true;
 #endif  // DCHECK_IS_ON()
@@ -1124,7 +1124,7 @@
   BackendDB()->RenameIndex(transaction_->Id(), Id(), index_id, new_name);
 
   auto metadata_iterator = metadata_->indexes.Find(index_id);
-  DCHECK_NE(metadata_iterator, metadata_->indexes.end()) << "Invalid indexId";
+  DCHECK_NE(metadata_iterator, metadata_->indexes.end()) << "Invalid index_id";
   const String& old_name = metadata_iterator->value->name;
 
   DCHECK(index_map_.Contains(old_name))
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.h b/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.h
index 1c8bf9ca..166af9a4 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.h
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.h
@@ -170,7 +170,7 @@
   //
   // Used when a versionchange transaction is aborted.
   void RevertMetadata(RefPtr<IDBObjectStoreMetadata> previous_metadata);
-  // This relies on the changes made by revertMetadata().
+  // This relies on the changes made by RevertMetadata().
   void RevertDeletedIndexMetadata(IDBIndex& deleted_index);
 
   // Used by IDBIndex::setName:
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBObservation.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBObservation.cpp
index 75de57c..e627928 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBObservation.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBObservation.cpp
@@ -6,7 +6,7 @@
 
 #include "bindings/core/v8/ExceptionState.h"
 #include "bindings/core/v8/ScriptState.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/modules/v8/ToV8ForModules.h"
 #include "bindings/modules/v8/V8BindingForModules.h"
 #include "modules/IndexedDBNames.h"
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBObserverChanges.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBObserverChanges.cpp
index 691eca1..1f1fdda8 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBObserverChanges.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBObserverChanges.cpp
@@ -6,7 +6,7 @@
 
 #include "bindings/core/v8/ExceptionState.h"
 #include "bindings/core/v8/ScriptState.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/modules/v8/ToV8ForModules.h"
 #include "bindings/modules/v8/V8BindingForModules.h"
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBObserverChanges.h b/third_party/WebKit/Source/modules/indexeddb/IDBObserverChanges.h
index 57d56c5..389bc8c0 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBObserverChanges.h
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBObserverChanges.h
@@ -54,7 +54,7 @@
 
   Member<IDBDatabase> database_;
   Member<IDBTransaction> transaction_;
-  // Map objectStoreId to IDBObservation list.
+  // Map object_store_id to IDBObservation list.
   HeapHashMap<int64_t, HeapVector<Member<IDBObservation>>> records_;
 };
 
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBOpenDBRequest.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBOpenDBRequest.cpp
index 423378a9..3c5f9f4c8 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBOpenDBRequest.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBOpenDBRequest.cpp
@@ -132,7 +132,7 @@
 
   IDBDatabase* idb_database = nullptr;
   if (ResultAsAny()) {
-    // Previous onUpgradeNeeded call delivered the backend.
+    // Previous OnUpgradeNeeded call delivered the backend.
     DCHECK(!backend.get());
     idb_database = ResultAsAny()->IdbDatabase();
     DCHECK(idb_database);
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp
index b62eeb02..b06389c 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp
@@ -30,7 +30,7 @@
 
 #include <memory>
 #include "bindings/core/v8/ExceptionState.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/modules/v8/ToV8ForModules.h"
 #include "bindings/modules/v8/V8BindingForModules.h"
 #include "core/dom/DOMException.h"
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBRequest.h b/third_party/WebKit/Source/modules/indexeddb/IDBRequest.h
index 80ad135..67cd951f 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBRequest.h
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBRequest.h
@@ -193,7 +193,7 @@
 
   // Transactions should be aborted after event dispatch if an exception was
   // not caught. This is cleared before dispatch, set by a call to
-  // uncaughtExceptionInEventHandler() during dispatch, and checked afterwards
+  // UncaughtExceptionInEventHandler() during dispatch, and checked afterwards
   // to abort if necessary.
   bool did_throw_in_event_handler_ = false;
 
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBRequestTest.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBRequestTest.cpp
index 8a7c323..87766553 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBRequestTest.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBRequestTest.cpp
@@ -78,7 +78,7 @@
       scope.GetScriptState(), IDBAny::CreateUndefined(), transaction);
   EXPECT_EQ(request->readyState(), "pending");
 
-  // Simulate the IDBTransaction having received onAbort from back end and
+  // Simulate the IDBTransaction having received OnAbort from back end and
   // aborting the request:
   request->Abort();
 
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.cpp
index 40af722..3b29056 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.cpp
@@ -165,7 +165,7 @@
 
 IDBTransaction::~IDBTransaction() {
   // Note: IDBTransaction is a ContextLifecycleObserver (rather than
-  // ContextClient) only in order to be able call upon getExecutionContext()
+  // ContextClient) only in order to be able call upon GetExecutionContext()
   // during this destructor.
   DCHECK(state_ == kFinished || !GetExecutionContext());
   DCHECK(request_list_.IsEmpty() || !GetExecutionContext());
@@ -305,7 +305,7 @@
 
 void IDBTransaction::IndexDeleted(IDBIndex* index) {
   DCHECK(index);
-  DCHECK(!index->IsDeleted()) << "indexDeleted called twice for the same index";
+  DCHECK(!index->IsDeleted()) << "IndexDeleted called twice for the same index";
 
   IDBObjectStore* object_store = index->objectStore();
   DCHECK_EQ(object_store->transaction(), this);
@@ -341,7 +341,7 @@
 }
 
 void IDBTransaction::SetActive(bool active) {
-  DCHECK_NE(state_, kFinished) << "A finished transaction tried to setActive("
+  DCHECK_NE(state_, kFinished) << "A finished transaction tried to SetActive("
                                << (active ? "true" : "false") << ")";
   if (state_ == kFinishing)
     return;
@@ -588,7 +588,7 @@
       DCHECK(!old_store_metadata_.Contains(object_store));
       object_store->ClearIndexCache();
     } else {
-      // We'll call clearIndexCache() on this store in the loop below.
+      // We'll call ClearIndexCache() on this store in the loop below.
       DCHECK(old_store_metadata_.Contains(object_store));
     }
   }
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.h b/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.h
index 1046398c..f24644a 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.h
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.h
@@ -133,8 +133,9 @@
   // ScriptWrappable
   bool HasPendingActivity() const final;
 
-  // For use in IDBObjectStore.isNewlyCreated(). The rest of the code should use
-  // IDBObjectStore.isNewlyCreated() instead of calling this method directly.
+  // For use in IDBObjectStore::IsNewlyCreated(). The rest of the code should
+  // use IDBObjectStore::IsNewlyCreated() instead of calling this method
+  // directly.
   int64_t OldMaxObjectStoreId() const {
     DCHECK(IsVersionChange());
     return old_database_metadata_.max_object_store_id;
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBTransactionTest.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBTransactionTest.cpp
index 64fa0288..7baa164 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBTransactionTest.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBTransactionTest.cpp
@@ -92,8 +92,8 @@
   ThreadState::Current()->CollectAllGarbage();
   EXPECT_EQ(1u, set.size());
 
-  // This will generate an abort() call to the back end which is dropped by the
-  // fake proxy, so an explicit onAbort call is made.
+  // This will generate an Abort() call to the back end which is dropped by the
+  // fake proxy, so an explicit OnAbort call is made.
   scope.GetExecutionContext()->NotifyContextDestroyed();
   transaction->OnAbort(DOMException::Create(kAbortError, "Aborted"));
   transaction.Clear();
@@ -143,7 +143,7 @@
   // The test will not fail if it is, but ASAN would notice the error.
   db->OnAbort(kTransactionId, DOMException::Create(kAbortError, "Aborted"));
 
-  // onAbort() should have cleared the transaction's reference to the database.
+  // OnAbort() should have cleared the transaction's reference to the database.
   ThreadState::Current()->CollectAllGarbage();
   EXPECT_EQ(0u, set.size());
 }
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBVersionChangeEvent.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBVersionChangeEvent.cpp
index 4de95928a..75dcf68 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBVersionChangeEvent.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBVersionChangeEvent.cpp
@@ -38,7 +38,7 @@
     const Nullable<unsigned long long>& new_version,
     WebIDBDataLoss data_loss,
     const String& data_loss_message)
-    : Event(event_type, false /*canBubble*/, false /*cancelable*/),
+    : Event(event_type, /*can_bubble=*/false, /*cancelable=*/false),
       old_version_(old_version),
       new_version_(new_version),
       data_loss_(data_loss),
@@ -47,7 +47,7 @@
 IDBVersionChangeEvent::IDBVersionChangeEvent(
     const AtomicString& event_type,
     const IDBVersionChangeEventInit& initializer)
-    : Event(event_type, false /*canBubble*/, false /*cancelable*/),
+    : Event(event_type, /*can_bubble=*/false, /*cancelable=*/false),
       old_version_(initializer.oldVersion()),
       new_version_(nullptr),
       data_loss_(kWebIDBDataLossNone) {
diff --git a/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.cpp b/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.cpp
index 880b93e..89d723a 100644
--- a/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.cpp
@@ -566,7 +566,7 @@
     // Continue cursor before making injected script calls, otherwise
     // transaction might be finished.
     DummyExceptionStateForTesting exception_state;
-    idb_cursor->continueFunction(nullptr, nullptr, exception_state);
+    idb_cursor->Continue(nullptr, nullptr, exception_state);
     if (exception_state.HadException()) {
       request_callback_->sendFailure(
           Response::Error("Could not continue cursor."));
diff --git a/third_party/WebKit/Source/modules/indexeddb/MockWebIDBDatabase.h b/third_party/WebKit/Source/modules/indexeddb/MockWebIDBDatabase.h
index 8a1cddc..971f62e 100644
--- a/third_party/WebKit/Source/modules/indexeddb/MockWebIDBDatabase.h
+++ b/third_party/WebKit/Source/modules/indexeddb/MockWebIDBDatabase.h
@@ -21,111 +21,111 @@
   static std::unique_ptr<MockWebIDBDatabase> Create();
 
   MOCK_METHOD5(CreateObjectStore,
-               void(long long transactionId,
-                    long long objectStoreId,
+               void(long long transaction_id,
+                    long long object_store_id,
                     const WebString& name,
                     const WebIDBKeyPath&,
-                    bool autoIncrement));
+                    bool auto_increment));
   MOCK_METHOD2(DeleteObjectStore,
-               void(long long transactionId, long long objectStoreId));
+               void(long long transaction_id, long long object_store_id));
   MOCK_METHOD3(RenameObjectStore,
-               void(long long transactionId,
-                    long long objectStoreId,
-                    const WebString& newName));
+               void(long long transaction_id,
+                    long long object_store_id,
+                    const WebString& new_name));
   MOCK_METHOD3(CreateTransaction,
                void(long long id,
                     const WebVector<long long>& scope,
                     WebIDBTransactionMode));
   MOCK_METHOD0(Close, void());
   MOCK_METHOD0(VersionChangeIgnored, void());
-  MOCK_METHOD1(Abort, void(long long transactionId));
-  MOCK_METHOD1(Commit, void(long long transactionId));
+  MOCK_METHOD1(Abort, void(long long transaction_id));
+  MOCK_METHOD1(Commit, void(long long transaction_id));
   MOCK_METHOD7(CreateIndex,
-               void(long long transactionId,
-                    long long objectStoreId,
-                    long long indexId,
+               void(long long transaction_id,
+                    long long object_store_id,
+                    long long index_id,
                     const WebString& name,
                     const WebIDBKeyPath&,
                     bool unique,
-                    bool multiEntry));
+                    bool multi_entry));
   MOCK_METHOD3(DeleteIndex,
-               void(long long transactionId,
-                    long long objectStoreId,
-                    long long indexId));
+               void(long long transaction_id,
+                    long long object_store_id,
+                    long long index_id));
   MOCK_METHOD4(RenameIndex,
-               void(long long transactionId,
-                    long long objectStoreId,
-                    long long indexId,
-                    const WebString& newName));
+               void(long long transaction_id,
+                    long long object_store_id,
+                    long long index_id,
+                    const WebString& new_name));
   MOCK_METHOD6(
       AddObserver,
-      void(long long transactionId,
-           int32_t observerId,
-           bool includeTransaction,
-           bool noRecords,
+      void(long long transaction_id,
+           int32_t observer_id,
+           bool include_transaction,
+           bool no_records,
            bool values,
-           const std::bitset<kWebIDBOperationTypeCount>& operationTypes));
+           const std::bitset<kWebIDBOperationTypeCount>& operation_types));
   MOCK_CONST_METHOD1(ContainsObserverId, bool(int32_t id));
   MOCK_METHOD1(RemoveObservers,
-               void(const WebVector<int32_t>& observerIdsToRemove));
+               void(const WebVector<int32_t>& observer_ids_to_remove));
   MOCK_METHOD6(Get,
-               void(long long transactionId,
-                    long long objectStoreId,
-                    long long indexId,
+               void(long long transaction_id,
+                    long long object_store_id,
+                    long long index_id,
                     const WebIDBKeyRange&,
-                    bool keyOnly,
+                    bool key_only,
                     WebIDBCallbacks*));
   MOCK_METHOD7(GetAll,
-               void(long long transactionId,
-                    long long objectStoreId,
-                    long long indexId,
+               void(long long transaction_id,
+                    long long object_store_id,
+                    long long index_id,
                     const WebIDBKeyRange&,
-                    long long maxCount,
-                    bool keyOnly,
+                    long long max_count,
+                    bool key_only,
                     WebIDBCallbacks*));
   MOCK_METHOD9(Put,
-               void(long long transactionId,
-                    long long objectStoreId,
+               void(long long transaction_id,
+                    long long object_store_id,
                     const WebData& value,
                     const WebVector<WebBlobInfo>&,
                     const WebIDBKey&,
                     WebIDBPutMode,
                     WebIDBCallbacks*,
-                    const WebVector<long long>& indexIds,
+                    const WebVector<long long>& index_ids,
                     const WebVector<WebIndexKeys>&));
   MOCK_METHOD5(SetIndexKeys,
-               void(long long transactionId,
-                    long long objectStoreId,
+               void(long long transaction_id,
+                    long long object_store_id,
                     const WebIDBKey&,
-                    const WebVector<long long>& indexIds,
+                    const WebVector<long long>& index_ids,
                     const WebVector<WebIndexKeys>&));
   MOCK_METHOD3(SetIndexesReady,
-               void(long long transactionId,
-                    long long objectStoreId,
-                    const WebVector<long long>& indexIds));
+               void(long long transaction_id,
+                    long long object_store_id,
+                    const WebVector<long long>& index_ids));
   MOCK_METHOD8(OpenCursor,
-               void(long long transactionId,
-                    long long objectStoreId,
-                    long long indexId,
+               void(long long transaction_id,
+                    long long object_store_id,
+                    long long index_id,
                     const WebIDBKeyRange&,
                     WebIDBCursorDirection,
-                    bool keyOnly,
+                    bool key_only,
                     WebIDBTaskType,
                     WebIDBCallbacks*));
   MOCK_METHOD5(Count,
-               void(long long transactionId,
-                    long long objectStoreId,
-                    long long indexId,
+               void(long long transaction_id,
+                    long long object_store_id,
+                    long long index_id,
                     const WebIDBKeyRange&,
                     WebIDBCallbacks*));
   MOCK_METHOD4(DeleteRange,
-               void(long long transactionId,
-                    long long objectStoreId,
+               void(long long transaction_id,
+                    long long object_store_id,
                     const WebIDBKeyRange&,
                     WebIDBCallbacks*));
   MOCK_METHOD3(Clear,
-               void(long long transactionId,
-                    long long objectStoreId,
+               void(long long transaction_id,
+                    long long object_store_id,
                     WebIDBCallbacks*));
   MOCK_METHOD1(AckReceivedBlobs, void(const WebVector<WebString>& uuids));
 
diff --git a/third_party/WebKit/Source/modules/mediasession/MediaMetadata.cpp b/third_party/WebKit/Source/modules/mediasession/MediaMetadata.cpp
index ca8750ad..c4e707e 100644
--- a/third_party/WebKit/Source/modules/mediasession/MediaMetadata.cpp
+++ b/third_party/WebKit/Source/modules/mediasession/MediaMetadata.cpp
@@ -6,7 +6,7 @@
 
 #include "bindings/core/v8/ExceptionState.h"
 #include "bindings/core/v8/ScriptState.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "core/dom/ExecutionContext.h"
 #include "core/dom/TaskRunnerHelper.h"
 #include "modules/mediasession/MediaImage.h"
diff --git a/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp b/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp
index a4b1297..47d43f0 100644
--- a/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp
+++ b/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp
@@ -186,7 +186,7 @@
       image_buffer_->NewSkImageSnapshot(kPreferNoAcceleration, reason);
   ImageData* image_data = nullptr;
   if (snapshot) {
-    image_data = ImageData::Create(offscreenCanvas()->size());
+    image_data = ImageData::Create(offscreenCanvas()->Size());
     SkImageInfo image_info =
         SkImageInfo::Make(this->Width(), this->Height(), kRGBA_8888_SkColorType,
                           kUnpremul_SkAlphaType);
@@ -232,11 +232,11 @@
 void OffscreenCanvasRenderingContext2D::DidDraw(const SkIRect& dirty_rect) {}
 
 bool OffscreenCanvasRenderingContext2D::StateHasFilter() {
-  return GetState().HasFilterForOffscreenCanvas(offscreenCanvas()->size());
+  return GetState().HasFilterForOffscreenCanvas(offscreenCanvas()->Size());
 }
 
 sk_sp<SkImageFilter> OffscreenCanvasRenderingContext2D::StateGetFilter() {
-  return GetState().GetFilterForOffscreenCanvas(offscreenCanvas()->size());
+  return GetState().GetFilterForOffscreenCanvas(offscreenCanvas()->Size());
 }
 
 void OffscreenCanvasRenderingContext2D::ValidateStateStack() const {
diff --git a/third_party/WebKit/Source/modules/payments/PaymentAppRequestConversion.cpp b/third_party/WebKit/Source/modules/payments/PaymentAppRequestConversion.cpp
index 224ed78..fa5c982 100644
--- a/third_party/WebKit/Source/modules/payments/PaymentAppRequestConversion.cpp
+++ b/third_party/WebKit/Source/modules/payments/PaymentAppRequestConversion.cpp
@@ -5,7 +5,7 @@
 #include "modules/payments/PaymentAppRequestConversion.h"
 
 #include "bindings/core/v8/ScriptState.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "modules/payments/PaymentAppRequest.h"
 #include "modules/payments/PaymentCurrencyAmount.h"
 #include "modules/payments/PaymentDetailsModifier.h"
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationReceiverTest.cpp b/third_party/WebKit/Source/modules/presentation/PresentationReceiverTest.cpp
index 4da9e22..f031b901 100644
--- a/third_party/WebKit/Source/modules/presentation/PresentationReceiverTest.cpp
+++ b/third_party/WebKit/Source/modules/presentation/PresentationReceiverTest.cpp
@@ -47,10 +47,10 @@
                                   callbacks);
   }
 
-  void GetAvailability(const WebVector<WebURL>& availability_ur_ls,
+  void GetAvailability(const WebVector<WebURL>& availability_urls,
                        std::unique_ptr<WebPresentationAvailabilityCallbacks>
                            callbacks) override {
-    return getAvailability_(availability_ur_ls, callbacks);
+    return getAvailability_(availability_urls, callbacks);
   }
 
  public:
diff --git a/third_party/WebKit/Source/modules/serviceworkers/FetchEvent.cpp b/third_party/WebKit/Source/modules/serviceworkers/FetchEvent.cpp
index 04f19ac..d1650d9c 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/FetchEvent.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/FetchEvent.cpp
@@ -5,7 +5,7 @@
 #include "modules/serviceworkers/FetchEvent.h"
 
 #include "bindings/core/v8/ScriptState.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8PrivateProperty.h"
 #include "core/dom/ExecutionContext.h"
 #include "modules/fetch/BytesConsumerForDataConsumerHandle.h"
diff --git a/third_party/WebKit/Source/modules/serviceworkers/FetchEvent.idl b/third_party/WebKit/Source/modules/serviceworkers/FetchEvent.idl
index f1efb96..3d76d24 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/FetchEvent.idl
+++ b/third_party/WebKit/Source/modules/serviceworkers/FetchEvent.idl
@@ -13,5 +13,5 @@
     readonly attribute boolean isReload;
 
     [CallWith=ScriptState, RaisesException] void respondWith(Promise<Response> r);
-    [OriginTrialEnabled=ServiceWorkerNavigationPreload, CallWith=ScriptState] readonly attribute Promise<any> preloadResponse;
+    [RuntimeEnabled=ServiceWorkerNavigationPreload, CallWith=ScriptState] readonly attribute Promise<any> preloadResponse;
 };
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchEvent.cpp b/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchEvent.cpp
index 32ceb93..d3d50b0 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchEvent.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchEvent.cpp
@@ -4,7 +4,7 @@
 
 #include "modules/serviceworkers/ForeignFetchEvent.h"
 
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8PrivateProperty.h"
 #include "modules/fetch/Request.h"
 #include "modules/serviceworkers/ServiceWorkerGlobalScope.h"
diff --git a/third_party/WebKit/Source/modules/serviceworkers/InstallEvent.cpp b/third_party/WebKit/Source/modules/serviceworkers/InstallEvent.cpp
index c09c82e..5e09649 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/InstallEvent.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/InstallEvent.cpp
@@ -69,27 +69,27 @@
     return;
   }
   const Vector<String>& sub_scopes = options.scopes();
-  Vector<KURL> sub_scope_ur_ls(sub_scopes.size());
+  Vector<KURL> sub_scope_urls(sub_scopes.size());
   for (size_t i = 0; i < sub_scopes.size(); ++i) {
-    sub_scope_ur_ls[i] = execution_context->CompleteURL(sub_scopes[i]);
-    if (!sub_scope_ur_ls[i].IsValid()) {
+    sub_scope_urls[i] = execution_context->CompleteURL(sub_scopes[i]);
+    if (!sub_scope_urls[i].IsValid()) {
       exception_state.ThrowTypeError("Invalid subscope URL: " + sub_scopes[i]);
       return;
     }
-    sub_scope_ur_ls[i].RemoveFragmentIdentifier();
-    if (!origin->CanRequest(sub_scope_ur_ls[i])) {
+    sub_scope_urls[i].RemoveFragmentIdentifier();
+    if (!origin->CanRequest(sub_scope_urls[i])) {
       exception_state.ThrowTypeError("Subscope URL is not within scope: " +
                                      sub_scopes[i]);
       return;
     }
-    String sub_scope_path = sub_scope_ur_ls[i].GetPath();
+    String sub_scope_path = sub_scope_urls[i].GetPath();
     if (!sub_scope_path.StartsWith(scope_path)) {
       exception_state.ThrowTypeError("Subscope URL is not within scope: " +
                                      sub_scopes[i]);
       return;
     }
   }
-  client->RegisterForeignFetchScopes(sub_scope_ur_ls, parsed_origins);
+  client->RegisterForeignFetchScopes(sub_scope_urls, parsed_origins);
 }
 
 const AtomicString& InstallEvent::InterfaceName() const {
diff --git a/third_party/WebKit/Source/modules/serviceworkers/NavigationPreloadManager.idl b/third_party/WebKit/Source/modules/serviceworkers/NavigationPreloadManager.idl
index fb2521d5..a18e39d1 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/NavigationPreloadManager.idl
+++ b/third_party/WebKit/Source/modules/serviceworkers/NavigationPreloadManager.idl
@@ -5,7 +5,7 @@
 // TODO(falken): Revise link when this lands in the spec:
 // https://github.com/w3c/ServiceWorker/issues/920
 [
-    OriginTrialEnabled=ServiceWorkerNavigationPreload,
+    RuntimeEnabled=ServiceWorkerNavigationPreload,
     Exposed=(Window,Worker),
 ] interface NavigationPreloadManager {
     // TODO(mgiuca): Put SecureContext on the interface, not individual methods.
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerError.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerError.cpp
index 3bf1fb9..25504131 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerError.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerError.cpp
@@ -31,7 +31,7 @@
 #include "modules/serviceworkers/ServiceWorkerError.h"
 
 #include "bindings/core/v8/ScriptPromiseResolver.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "core/dom/DOMException.h"
 #include "core/dom/ExceptionCode.h"
 
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.idl b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.idl
index adea0c3..d25a82c 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.idl
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.idl
@@ -11,7 +11,7 @@
     readonly attribute ServiceWorker? installing;
     readonly attribute ServiceWorker? waiting;
     readonly attribute ServiceWorker? active;
-    [OriginTrialEnabled=ServiceWorkerNavigationPreload] readonly attribute NavigationPreloadManager navigationPreload;
+    [RuntimeEnabled=ServiceWorkerNavigationPreload] readonly attribute NavigationPreloadManager navigationPreload;
 
     readonly attribute USVString scope;
 
diff --git a/third_party/WebKit/Source/modules/shapedetection/ShapeDetector.cpp b/third_party/WebKit/Source/modules/shapedetection/ShapeDetector.cpp
index 3287f40..437ecae 100644
--- a/third_party/WebKit/Source/modules/shapedetection/ShapeDetector.cpp
+++ b/third_party/WebKit/Source/modules/shapedetection/ShapeDetector.cpp
@@ -128,7 +128,7 @@
                                                   : kDontPremultiplyAlpha,
                                               kN32ColorType);
     pixel_data_ptr = pixel_data->Data();
-    allocation_size = image_bitmap->size().Area() * 4 /* bytes per pixel */;
+    allocation_size = image_bitmap->Size().Area() * 4 /* bytes per pixel */;
   } else {
     // TODO(mcasas): retrieve the pixels from elsewhere.
     NOTREACHED();
@@ -151,13 +151,13 @@
     ImageData* image_data) {
   ScriptPromise promise = resolver->Promise();
 
-  if (image_data->size().IsZero()) {
+  if (image_data->Size().IsZero()) {
     resolver->Resolve(HeapVector<Member<DOMRect>>());
     return promise;
   }
 
   uint8_t* const data = image_data->data()->Data();
-  WTF::CheckedNumeric<int> allocation_size = image_data->size().Area() * 4;
+  WTF::CheckedNumeric<int> allocation_size = image_data->Size().Area() * 4;
 
   mojo::ScopedSharedBufferHandle shared_buffer_handle =
       GetSharedBufferOnData(resolver, data, allocation_size.ValueOrDefault(0));
diff --git a/third_party/WebKit/Source/modules/vr/VRDisplay.cpp b/third_party/WebKit/Source/modules/vr/VRDisplay.cpp
index 29548126..553622a 100644
--- a/third_party/WebKit/Source/modules/vr/VRDisplay.cpp
+++ b/third_party/WebKit/Source/modules/vr/VRDisplay.cpp
@@ -673,6 +673,18 @@
       EventTypeNames::vrdisplaydeactivate, true, false, this, reason));
 }
 
+void VRDisplay::ProcessScheduledWindowAnimations(double timestamp) {
+  TRACE_EVENT1("gpu", "VRDisplay::window.rAF", "frame", vr_frame_id_);
+  auto doc = navigator_vr_->GetDocument();
+  if (!doc)
+    return;
+  auto page = doc->GetPage();
+  if (!page)
+    return;
+  // TODO(klausw): update timestamp based on scheduling delay?
+  page->Animator().ServiceScriptedAnimations(timestamp);
+}
+
 void VRDisplay::ProcessScheduledAnimations(double timestamp) {
   // Check if we still have a valid context, the animation controller
   // or document may have disappeared since we scheduled this.
@@ -686,6 +698,15 @@
   pending_raf_ = false;
 
   scripted_animation_controller_->ServiceScriptedAnimations(timestamp);
+
+  // For GVR, we shut down normal vsync processing during VR presentation.
+  // Trigger any callbacks on window.rAF manually so that they run after
+  // completing the vrDisplay.rAF processing.
+  if (is_presenting_ && !capabilities_->hasExternalDisplay()) {
+    Platform::Current()->CurrentThread()->GetWebTaskRunner()->PostTask(
+        BLINK_FROM_HERE, WTF::Bind(&VRDisplay::ProcessScheduledWindowAnimations,
+                                   WrapWeakPersistent(this), timestamp));
+  }
 }
 
 void VRDisplay::OnVSync(device::mojom::blink::VRPosePtr pose,
diff --git a/third_party/WebKit/Source/modules/vr/VRDisplay.h b/third_party/WebKit/Source/modules/vr/VRDisplay.h
index 25f30e8..16dead3 100644
--- a/third_party/WebKit/Source/modules/vr/VRDisplay.h
+++ b/third_party/WebKit/Source/modules/vr/VRDisplay.h
@@ -142,6 +142,7 @@
 
   ScriptedAnimationController& EnsureScriptedAnimationController(Document*);
   void ProcessScheduledAnimations(double timestamp);
+  void ProcessScheduledWindowAnimations(double timestamp);
 
   Member<NavigatorVR> navigator_vr_;
   unsigned display_id_ = 0;
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioWorkletGlobalScope.cpp b/third_party/WebKit/Source/modules/webaudio/AudioWorkletGlobalScope.cpp
index 4c1e7ec8..f93e04a0 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioWorkletGlobalScope.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/AudioWorkletGlobalScope.cpp
@@ -4,7 +4,7 @@
 
 #include "modules/webaudio/AudioWorkletGlobalScope.h"
 
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8BindingMacros.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioWorkletGlobalScopeTest.cpp b/third_party/WebKit/Source/modules/webaudio/AudioWorkletGlobalScopeTest.cpp
index 6e4e965..e08e4f9 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioWorkletGlobalScopeTest.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/AudioWorkletGlobalScopeTest.cpp
@@ -8,7 +8,7 @@
 #include "bindings/core/v8/ScriptState.h"
 #include "bindings/core/v8/ScriptValue.h"
 #include "bindings/core/v8/SourceLocation.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8BindingForTesting.h"
 #include "bindings/core/v8/V8BindingMacros.h"
diff --git a/third_party/WebKit/Source/modules/webdatabase/SQLResultSetRowList.cpp b/third_party/WebKit/Source/modules/webdatabase/SQLResultSetRowList.cpp
index 8288bc9..925d1513d 100644
--- a/third_party/WebKit/Source/modules/webdatabase/SQLResultSetRowList.cpp
+++ b/third_party/WebKit/Source/modules/webdatabase/SQLResultSetRowList.cpp
@@ -29,7 +29,7 @@
 #include "modules/webdatabase/SQLResultSetRowList.h"
 
 #include "bindings/core/v8/ScriptValue.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/modules/v8/ToV8ForModules.h"
 #include "core/dom/ExceptionCode.h"
 
diff --git a/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.cpp b/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.cpp
index 9a90200..d3d020d4 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.cpp
+++ b/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.cpp
@@ -3463,20 +3463,28 @@
 
 bool WebGL2RenderingContextBase::ValidateClearBuffer(const char* function_name,
                                                      GLenum buffer,
-                                                     GLsizei size) {
+                                                     GLsizei size,
+                                                     GLuint src_offset) {
+  CheckedNumeric<GLsizei> checked_size(size);
+  checked_size -= src_offset;
+  if (!checked_size.IsValid()) {
+    SynthesizeGLError(GL_INVALID_VALUE, function_name,
+                      "invalid array size / srcOffset");
+    return false;
+  }
   switch (buffer) {
     case GL_COLOR:
-      if (size < 4) {
+      if (checked_size.ValueOrDie() < 4) {
         SynthesizeGLError(GL_INVALID_VALUE, function_name,
-                          "invalid array size");
+                          "invalid array size / srcOffset");
         return false;
       }
       break;
     case GL_DEPTH:
     case GL_STENCIL:
-      if (size < 1) {
+      if (checked_size.ValueOrDie() < 1) {
         SynthesizeGLError(GL_INVALID_VALUE, function_name,
-                          "invalid array size");
+                          "invalid array size / srcOffset");
         return false;
       }
       break;
@@ -3498,64 +3506,74 @@
 
 void WebGL2RenderingContextBase::clearBufferiv(GLenum buffer,
                                                GLint drawbuffer,
-                                               NotShared<DOMInt32Array> value) {
+                                               NotShared<DOMInt32Array> value,
+                                               GLuint src_offset) {
   if (isContextLost() ||
-      !ValidateClearBuffer("clearBufferiv", buffer, value.View()->length()))
+      !ValidateClearBuffer("clearBufferiv", buffer, value.View()->length(),
+                           src_offset))
     return;
 
-  ContextGL()->ClearBufferiv(buffer, drawbuffer, value.View()->Data());
+  ContextGL()->ClearBufferiv(buffer, drawbuffer,
+                             value.View()->Data() + src_offset);
 }
 
 void WebGL2RenderingContextBase::clearBufferiv(GLenum buffer,
                                                GLint drawbuffer,
-                                               const Vector<GLint>& value) {
+                                               const Vector<GLint>& value,
+                                               GLuint src_offset) {
   if (isContextLost() ||
-      !ValidateClearBuffer("clearBufferiv", buffer, value.size()))
+      !ValidateClearBuffer("clearBufferiv", buffer, value.size(), src_offset))
     return;
 
-  ContextGL()->ClearBufferiv(buffer, drawbuffer, value.Data());
-}
-
-void WebGL2RenderingContextBase::clearBufferuiv(
-    GLenum buffer,
-    GLint drawbuffer,
-    NotShared<DOMUint32Array> value) {
-  if (isContextLost() ||
-      !ValidateClearBuffer("clearBufferuiv", buffer, value.View()->length()))
-    return;
-
-  ContextGL()->ClearBufferuiv(buffer, drawbuffer, value.View()->Data());
+  ContextGL()->ClearBufferiv(buffer, drawbuffer, value.Data() + src_offset);
 }
 
 void WebGL2RenderingContextBase::clearBufferuiv(GLenum buffer,
                                                 GLint drawbuffer,
-                                                const Vector<GLuint>& value) {
+                                                NotShared<DOMUint32Array> value,
+                                                GLuint src_offset) {
   if (isContextLost() ||
-      !ValidateClearBuffer("clearBufferuiv", buffer, value.size()))
+      !ValidateClearBuffer("clearBufferuiv", buffer, value.View()->length(),
+                           src_offset))
     return;
 
-  ContextGL()->ClearBufferuiv(buffer, drawbuffer, value.Data());
+  ContextGL()->ClearBufferuiv(buffer, drawbuffer,
+                              value.View()->Data() + src_offset);
 }
 
-void WebGL2RenderingContextBase::clearBufferfv(
-    GLenum buffer,
-    GLint drawbuffer,
-    NotShared<DOMFloat32Array> value) {
+void WebGL2RenderingContextBase::clearBufferuiv(GLenum buffer,
+                                                GLint drawbuffer,
+                                                const Vector<GLuint>& value,
+                                                GLuint src_offset) {
   if (isContextLost() ||
-      !ValidateClearBuffer("clearBufferfv", buffer, value.View()->length()))
+      !ValidateClearBuffer("clearBufferuiv", buffer, value.size(), src_offset))
     return;
 
-  ContextGL()->ClearBufferfv(buffer, drawbuffer, value.View()->Data());
+  ContextGL()->ClearBufferuiv(buffer, drawbuffer, value.Data() + src_offset);
 }
 
 void WebGL2RenderingContextBase::clearBufferfv(GLenum buffer,
                                                GLint drawbuffer,
-                                               const Vector<GLfloat>& value) {
+                                               NotShared<DOMFloat32Array> value,
+                                               GLuint src_offset) {
   if (isContextLost() ||
-      !ValidateClearBuffer("clearBufferfv", buffer, value.size()))
+      !ValidateClearBuffer("clearBufferfv", buffer, value.View()->length(),
+                           src_offset))
     return;
 
-  ContextGL()->ClearBufferfv(buffer, drawbuffer, value.Data());
+  ContextGL()->ClearBufferfv(buffer, drawbuffer,
+                             value.View()->Data() + src_offset);
+}
+
+void WebGL2RenderingContextBase::clearBufferfv(GLenum buffer,
+                                               GLint drawbuffer,
+                                               const Vector<GLfloat>& value,
+                                               GLuint src_offset) {
+  if (isContextLost() ||
+      !ValidateClearBuffer("clearBufferfv", buffer, value.size(), src_offset))
+    return;
+
+  ContextGL()->ClearBufferfv(buffer, drawbuffer, value.Data() + src_offset);
 }
 
 void WebGL2RenderingContextBase::clearBufferfi(GLenum buffer,
diff --git a/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.h b/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.h
index 52b1d744..085bc48 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.h
+++ b/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.h
@@ -843,12 +843,12 @@
 
   /* Multiple Render Targets */
   void drawBuffers(const Vector<GLenum>&);
-  void clearBufferiv(GLenum, GLint, NotShared<DOMInt32Array>);
-  void clearBufferiv(GLenum, GLint, const Vector<GLint>&);
-  void clearBufferuiv(GLenum, GLint, NotShared<DOMUint32Array>);
-  void clearBufferuiv(GLenum, GLint, const Vector<GLuint>&);
-  void clearBufferfv(GLenum, GLint, NotShared<DOMFloat32Array>);
-  void clearBufferfv(GLenum, GLint, const Vector<GLfloat>&);
+  void clearBufferiv(GLenum, GLint, NotShared<DOMInt32Array>, GLuint);
+  void clearBufferiv(GLenum, GLint, const Vector<GLint>&, GLuint);
+  void clearBufferuiv(GLenum, GLint, NotShared<DOMUint32Array>, GLuint);
+  void clearBufferuiv(GLenum, GLint, const Vector<GLuint>&, GLuint);
+  void clearBufferfv(GLenum, GLint, NotShared<DOMFloat32Array>, GLuint);
+  void clearBufferfv(GLenum, GLint, const Vector<GLfloat>&, GLuint);
   void clearBufferfi(GLenum, GLint, GLfloat, GLint);
 
   /* Query Objects */
@@ -982,7 +982,8 @@
 
   bool ValidateClearBuffer(const char* function_name,
                            GLenum buffer,
-                           GLsizei length);
+                           GLsizei length,
+                           GLuint src_offset);
 
   enum TexStorageType {
     kTexStorageType2D,
diff --git a/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.idl b/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.idl
index c645b87..75fe60be 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.idl
+++ b/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.idl
@@ -465,12 +465,12 @@
 
     /* Multiple Render Targets */
     void drawBuffers(sequence<GLenum> buffers);
-    void clearBufferiv(GLenum buffer, GLint drawbuffer, Int32Array value);
-    void clearBufferiv(GLenum buffer, GLint drawbuffer, sequence<GLint> value);
-    void clearBufferuiv(GLenum buffer, GLint drawbuffer, Uint32Array value);
-    void clearBufferuiv(GLenum buffer, GLint drawbuffer, sequence<GLuint> value);
-    void clearBufferfv(GLenum buffer, GLint drawbuffer, Float32Array value);
-    void clearBufferfv(GLenum buffer, GLint drawbuffer, sequence<GLfloat> value);
+    void clearBufferiv(GLenum buffer, GLint drawbuffer, Int32Array value, optional GLuint srcOffset = 0);
+    void clearBufferiv(GLenum buffer, GLint drawbuffer, sequence<GLint> value, optional GLuint srcOffset = 0);
+    void clearBufferuiv(GLenum buffer, GLint drawbuffer, Uint32Array value, optional GLuint srcOffset = 0);
+    void clearBufferuiv(GLenum buffer, GLint drawbuffer, sequence<GLuint> value, optional GLuint srcOffset = 0);
+    void clearBufferfv(GLenum buffer, GLint drawbuffer, Float32Array value, optional GLuint srcOffset = 0);
+    void clearBufferfv(GLenum buffer, GLint drawbuffer, sequence<GLfloat> value, optional GLuint srcOffset = 0);
     void clearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
 
     /* Query Objects */
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
index 25e6283..b34b002 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
+++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
@@ -770,8 +770,8 @@
 
   RefPtr<StaticBitmapImage> image;
   if (CreationAttributes().preserveDrawingBuffer()) {
-    int width = GetDrawingBuffer()->size().Width();
-    int height = GetDrawingBuffer()->size().Height();
+    int width = GetDrawingBuffer()->Size().Width();
+    int height = GetDrawingBuffer()->Size().Height();
     SkImageInfo image_info =
         SkImageInfo::Make(width, height, kRGBA_8888_SkColorType,
                           CreationAttributes().alpha() ? kPremul_SkAlphaType
@@ -830,7 +830,7 @@
 
   GetDrawingBuffer()->CopyToPlatformTexture(
       gl, texture_target, texture_id, true, false, IntPoint(0, 0),
-      IntRect(IntPoint(0, 0), GetDrawingBuffer()->size()), kBackBuffer);
+      IntRect(IntPoint(0, 0), GetDrawingBuffer()->Size()), kBackBuffer);
   return surface->makeImageSnapshot();
 }
 
@@ -845,15 +845,15 @@
       return image_data;
     }
 
-    int width = GetDrawingBuffer()->size().Width();
-    int height = GetDrawingBuffer()->size().Height();
+    int width = GetDrawingBuffer()->Size().Width();
+    int height = GetDrawingBuffer()->Size().Height();
     SkImageInfo image_info =
         SkImageInfo::Make(width, height, kRGBA_8888_SkColorType,
                           CreationAttributes().alpha() ? kPremul_SkAlphaType
                                                        : kOpaque_SkAlphaType);
     sk_sp<SkImage> snapshot = MakeImageSnapshot(image_info);
     if (snapshot) {
-      image_data = ImageData::Create(GetDrawingBuffer()->size());
+      image_data = ImageData::Create(GetDrawingBuffer()->Size());
       snapshot->readPixels(image_info, image_data->data()->Data(),
                            image_info.minRowBytes(), 0, 0);
     }
@@ -1615,11 +1615,11 @@
 }
 
 int WebGLRenderingContextBase::drawingBufferWidth() const {
-  return isContextLost() ? 0 : GetDrawingBuffer()->size().Width();
+  return isContextLost() ? 0 : GetDrawingBuffer()->Size().Width();
 }
 
 int WebGLRenderingContextBase::drawingBufferHeight() const {
-  return isContextLost() ? 0 : GetDrawingBuffer()->size().Height();
+  return isContextLost() ? 0 : GetDrawingBuffer()->Size().Height();
 }
 
 void WebGLRenderingContextBase::activeTexture(GLenum texture) {
@@ -4587,7 +4587,7 @@
   if (!image->CurrentFrameKnownToBeOpaque())
     buf->Canvas()->clear(SK_ColorTRANSPARENT);
 
-  IntRect src_rect(IntPoint(), image->size());
+  IntRect src_rect(IntPoint(), image->Size());
   IntRect dest_rect(0, 0, size.Width(), size.Height());
   PaintFlags flags;
   // TODO(ccameron): WebGL should produce sRGB images.
@@ -4803,7 +4803,7 @@
     }
     if (!WebGLImageConversion::ExtractImageData(
             pixels->data()->Data(),
-            WebGLImageConversion::DataFormat::kDataFormatRGBA8, pixels->size(),
+            WebGLImageConversion::DataFormat::kDataFormatRGBA8, pixels->Size(),
             adjusted_source_image_rect, depth, unpack_image_height, format,
             type, unpack_flip_y_, unpack_premultiply_alpha_, data)) {
       SynthesizeGLError(GL_INVALID_VALUE, func_name, "bad image data");
@@ -4915,7 +4915,8 @@
                                  SentinelEmptyRect(), 1, 0, exception_state);
 }
 
-bool WebGLRenderingContextBase::CanUseTexImageByGPU(GLenum type) {
+bool WebGLRenderingContextBase::CanUseTexImageByGPU(GLenum format,
+                                                    GLenum type) {
 #if OS(MACOSX)
   // RGB5_A1 is not color-renderable on NVIDIA Mac, see crbug.com/676209.
   // Though, glCopyTextureCHROMIUM can handle RGB5_A1 internalformat by doing a
@@ -4925,6 +4926,23 @@
   if (type == GL_UNSIGNED_SHORT_5_5_5_1)
     return false;
 #endif
+  // TODO(kbr): bugs were observed when using CopyTextureCHROMIUM to
+  // copy hardware-accelerated video textures to red-channel textures.
+  // These bugs were seen on macOS but may indicate more general
+  // problems. Investigate the root cause of this and fix it.
+  // crbug.com/710673
+  if (format == GL_RED || format == GL_RED_INTEGER)
+    return false;
+
+#if OS(ANDROID)
+  // TODO(kbr): bugs were seen on Android devices with NVIDIA GPUs
+  // when copying hardware-accelerated video textures to
+  // floating-point textures. Investigate the root cause of this and
+  // fix it. crbug.com/710874
+  if (type == GL_FLOAT)
+    return false;
+#endif
+
   // OES_texture_half_float doesn't support HALF_FLOAT_OES type for
   // CopyTexImage/CopyTexSubImage. And OES_texture_half_float doesn't require
   // HALF_FLOAT_OES type texture to be renderable. So, HALF_FLOAT_OES type
@@ -5116,7 +5134,7 @@
     // float/integer/sRGB internal format.
     // TODO(crbug.com/622958): relax the constrains if copyTextureCHROMIUM is
     // upgraded to handle more formats.
-    if (!canvas->IsAccelerated() || !CanUseTexImageByGPU(type)) {
+    if (!canvas->IsAccelerated() || !CanUseTexImageByGPU(format, type)) {
       // 2D canvas has only FrontBuffer.
       TexImageImpl(function_id, target, level, internalformat, xoffset, yoffset,
                    zoffset, format, type,
@@ -5228,9 +5246,10 @@
       source_image_rect == SentinelEmptyRect() ||
       source_image_rect ==
           IntRect(0, 0, video->videoWidth(), video->videoHeight());
-  const bool use_copyTextureCHROMIUM =
-      function_id == kTexImage2D && source_image_rect_is_default &&
-      depth == 1 && GL_TEXTURE_2D == target && CanUseTexImageByGPU(type);
+  const bool use_copyTextureCHROMIUM = function_id == kTexImage2D &&
+                                       source_image_rect_is_default &&
+                                       depth == 1 && GL_TEXTURE_2D == target &&
+                                       CanUseTexImageByGPU(format, type);
   // Format of source video may be 16-bit format, e.g. Y16 format.
   // glCopyTextureCHROMIUM requires the source texture to be in 8-bit format.
   // Converting 16-bits formated source texture to 8-bits formated texture will
@@ -5244,16 +5263,9 @@
     // to system memory if possible.  Otherwise, it will fall back to the normal
     // SW path.
 
-    // Note that neither
-    // HTMLVideoElement::copyVideoTextureToPlatformTexture nor
-    // ImageBuffer::copyToPlatformTexture allocate the destination texture
-    // any more.
-    TexImage2DBase(target, level, internalformat, video->videoWidth(),
-                   video->videoHeight(), 0, format, type, nullptr);
-
-    if (video->CopyVideoTextureToPlatformTexture(ContextGL(), texture->Object(),
-                                                 unpack_premultiply_alpha_,
-                                                 unpack_flip_y_)) {
+    if (video->CopyVideoTextureToPlatformTexture(
+            ContextGL(), texture->Object(), internalformat, format, type,
+            unpack_premultiply_alpha_, unpack_flip_y_)) {
       texture->UpdateLastUploadedVideo(video->GetWebMediaPlayer());
       return;
     }
@@ -5297,6 +5309,11 @@
         // This is a straight GPU-GPU copy, any necessary color space conversion
         // was handled in the paintCurrentFrameInContext() call.
 
+        // Note that copyToPlatformTexture no longer allocates the destination
+        // texture.
+        TexImage2DBase(target, level, internalformat, video->videoWidth(),
+                       video->videoHeight(), 0, format, type, nullptr);
+
         if (image_buffer->CopyToPlatformTexture(
                 FunctionIDToSnapshotReason(function_id), ContextGL(), target,
                 texture->Object(), unpack_premultiply_alpha_, unpack_flip_y_,
@@ -5393,7 +5410,7 @@
 
   // TODO(kbr): make this work for sub-rectangles of ImageBitmaps.
   if (function_id != kTexSubImage3D && function_id != kTexImage3D &&
-      bitmap->IsAccelerated() && CanUseTexImageByGPU(type) &&
+      bitmap->IsAccelerated() && CanUseTexImageByGPU(format, type) &&
       !selecting_sub_rectangle) {
     if (function_id == kTexImage2D) {
       TexImage2DBase(target, level, internalformat, width, height, 0, format,
@@ -5442,12 +5459,12 @@
     if ((is_pixel_data_bgra &&
          !WebGLImageConversion::ExtractImageData(
              pixel_data_ptr, WebGLImageConversion::DataFormat::kDataFormatBGRA8,
-             bitmap->size(), source_sub_rect, depth, unpack_image_height,
+             bitmap->Size(), source_sub_rect, depth, unpack_image_height,
              format, type, false, false, data)) ||
         (is_pixel_data_rgba &&
          !WebGLImageConversion::ExtractImageData(
              pixel_data_ptr, WebGLImageConversion::DataFormat::kDataFormatRGBA8,
-             bitmap->size(), source_sub_rect, depth, unpack_image_height,
+             bitmap->Size(), source_sub_rect, depth, unpack_image_height,
              format, type, false, false, data))) {
       SynthesizeGLError(GL_INVALID_VALUE, func_name, "bad image data");
       return;
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.h b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.h
index 3f92cf2..ee5d953 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.h
+++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.h
@@ -1111,7 +1111,7 @@
                      GLint zoffset,
                      CanvasImageSource*,
                      const IntRect& source_sub_rectangle);
-  virtual bool CanUseTexImageByGPU(GLenum type);
+  bool CanUseTexImageByGPU(GLenum format, GLenum type);
 
   virtual WebGLImageConversion::PixelStoreParams GetPackPixelStoreParams();
   virtual WebGLImageConversion::PixelStoreParams GetUnpackPixelStoreParams(
diff --git a/third_party/WebKit/Source/modules/webusb/USBDevice.cpp b/third_party/WebKit/Source/modules/webusb/USBDevice.cpp
index e651ee3..df77227d 100644
--- a/third_party/WebKit/Source/modules/webusb/USBDevice.cpp
+++ b/third_party/WebKit/Source/modules/webusb/USBDevice.cpp
@@ -6,7 +6,7 @@
 
 #include "bindings/core/v8/ScriptPromise.h"
 #include "bindings/core/v8/ScriptPromiseResolver.h"
-#include "bindings/core/v8/ToV8.h"
+#include "bindings/core/v8/ToV8ForCore.h"
 #include "core/dom/DOMArrayBuffer.h"
 #include "core/dom/DOMArrayBufferView.h"
 #include "core/dom/DOMException.h"
diff --git a/third_party/WebKit/Source/platform/DragImage.h b/third_party/WebKit/Source/platform/DragImage.h
index 5bd6091cf..7cc2e3e 100644
--- a/third_party/WebKit/Source/platform/DragImage.h
+++ b/third_party/WebKit/Source/platform/DragImage.h
@@ -70,7 +70,7 @@
 
   const SkBitmap& Bitmap() { return bitmap_; }
   float ResolutionScale() const { return resolution_scale_; }
-  IntSize size() const { return IntSize(bitmap_.width(), bitmap_.height()); }
+  IntSize Size() const { return IntSize(bitmap_.width(), bitmap_.height()); }
 
   void Scale(float scale_x, float scale_y);
 
diff --git a/third_party/WebKit/Source/platform/DragImageTest.cpp b/third_party/WebKit/Source/platform/DragImageTest.cpp
index 91d9fb4..43d1de7 100644
--- a/third_party/WebKit/Source/platform/DragImageTest.cpp
+++ b/third_party/WebKit/Source/platform/DragImageTest.cpp
@@ -59,7 +59,7 @@
     return AdoptRef(new TestImage(size));
   }
 
-  IntSize size() const override {
+  IntSize Size() const override {
     ASSERT(image_);
 
     return IntSize(image_->width(), image_->height());
@@ -118,7 +118,7 @@
   ASSERT_TRUE(drag_image);
 
   drag_image->Scale(0.5, 0.5);
-  IntSize size = drag_image->size();
+  IntSize size = drag_image->Size();
   EXPECT_EQ(1, size.Width());
   EXPECT_EQ(1, size.Height());
 }
@@ -150,7 +150,7 @@
   std::unique_ptr<DragImage> expected_image = DragImage::Create(
       url, expected_label, font_description, device_scale_factor);
 
-  EXPECT_EQ(test_image->size().Width(), expected_image->size().Width());
+  EXPECT_EQ(test_image->Size().Width(), expected_image->Size().Width());
 }
 
 TEST(DragImageTest, InterpolationNone) {
diff --git a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5 b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5
index 66ee8e6..bf202e6 100644
--- a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5
+++ b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5
@@ -779,7 +779,7 @@
     },
     {
       name: "PresentationReceiver",
-      status: "experimental",
+      status: "stable",
     },
     {
       name: "PrintBrowser",
@@ -849,7 +849,7 @@
     },
     {
       name: "ServiceWorkerNavigationPreload",
-      origin_trial_feature_name: "ServiceWorkerNavigationPreload",
+      status: "stable",
     },
     {
       name: "SetRootScroller",
diff --git a/third_party/WebKit/Source/platform/exported/WebImage.cpp b/third_party/WebKit/Source/platform/exported/WebImage.cpp
index 724838b..3a9131d9 100644
--- a/third_party/WebKit/Source/platform/exported/WebImage.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebImage.cpp
@@ -126,7 +126,7 @@
   return bitmap_.isNull();
 }
 
-WebSize WebImage::size() const {
+WebSize WebImage::Size() const {
   return WebSize(bitmap_.width(), bitmap_.height());
 }
 
diff --git a/third_party/WebKit/Source/platform/exported/WebScrollbarImpl.cpp b/third_party/WebKit/Source/platform/exported/WebScrollbarImpl.cpp
index bbfdea4c..c8859d1 100644
--- a/third_party/WebKit/Source/platform/exported/WebScrollbarImpl.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebScrollbarImpl.cpp
@@ -44,7 +44,7 @@
   return scrollbar_->Location();
 }
 
-WebSize WebScrollbarImpl::size() const {
+WebSize WebScrollbarImpl::Size() const {
   return scrollbar_->Size();
 }
 
diff --git a/third_party/WebKit/Source/platform/exported/WebScrollbarImpl.h b/third_party/WebKit/Source/platform/exported/WebScrollbarImpl.h
index 5c79db2..dc7765a 100644
--- a/third_party/WebKit/Source/platform/exported/WebScrollbarImpl.h
+++ b/third_party/WebKit/Source/platform/exported/WebScrollbarImpl.h
@@ -50,7 +50,7 @@
   bool IsOverlay() const override;
   int Value() const override;
   WebPoint Location() const override;
-  WebSize size() const override;
+  WebSize Size() const override;
   bool Enabled() const override;
   int Maximum() const override;
   int TotalSize() const override;
diff --git a/third_party/WebKit/Source/platform/exported/WebScrollbarThemeClientImpl.cpp b/third_party/WebKit/Source/platform/exported/WebScrollbarThemeClientImpl.cpp
index 6521d40e..e2b20e8 100644
--- a/third_party/WebKit/Source/platform/exported/WebScrollbarThemeClientImpl.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebScrollbarThemeClientImpl.cpp
@@ -56,7 +56,7 @@
 }
 
 IntSize WebScrollbarThemeClientImpl::Size() const {
-  return scrollbar_.size();
+  return scrollbar_.Size();
 }
 
 IntPoint WebScrollbarThemeClientImpl::Location() const {
diff --git a/third_party/WebKit/Source/platform/graphics/AcceleratedStaticBitmapImage.cpp b/third_party/WebKit/Source/platform/graphics/AcceleratedStaticBitmapImage.cpp
index cc37b9e..a7b5a46a 100644
--- a/third_party/WebKit/Source/platform/graphics/AcceleratedStaticBitmapImage.cpp
+++ b/third_party/WebKit/Source/platform/graphics/AcceleratedStaticBitmapImage.cpp
@@ -56,8 +56,8 @@
 
 AcceleratedStaticBitmapImage::~AcceleratedStaticBitmapImage() {}
 
-IntSize AcceleratedStaticBitmapImage::size() const {
-  return texture_holder_->size();
+IntSize AcceleratedStaticBitmapImage::Size() const {
+  return texture_holder_->Size();
 }
 
 void AcceleratedStaticBitmapImage::UpdateSyncToken(gpu::SyncToken sync_token) {
diff --git a/third_party/WebKit/Source/platform/graphics/AcceleratedStaticBitmapImage.h b/third_party/WebKit/Source/platform/graphics/AcceleratedStaticBitmapImage.h
index 8ed1dc5c..0d91cbb 100644
--- a/third_party/WebKit/Source/platform/graphics/AcceleratedStaticBitmapImage.h
+++ b/third_party/WebKit/Source/platform/graphics/AcceleratedStaticBitmapImage.h
@@ -37,7 +37,7 @@
       IntSize mailbox_size);
 
   bool CurrentFrameKnownToBeOpaque(MetadataMode = kUseCurrentMetadata) override;
-  IntSize size() const override;
+  IntSize Size() const override;
   sk_sp<SkImage> ImageForCurrentFrame() override;
   bool IsTextureBacked() const override { return true; }
 
diff --git a/third_party/WebKit/Source/platform/graphics/BitmapImage.cpp b/third_party/WebKit/Source/platform/graphics/BitmapImage.cpp
index 628de99..0a61fbac 100644
--- a/third_party/WebKit/Source/platform/graphics/BitmapImage.cpp
+++ b/third_party/WebKit/Source/platform/graphics/BitmapImage.cpp
@@ -175,7 +175,7 @@
   have_size_ = true;
 }
 
-IntSize BitmapImage::size() const {
+IntSize BitmapImage::Size() const {
   UpdateSize();
   return size_;
 }
@@ -332,7 +332,7 @@
 
   size_available_ = source_.IsSizeAvailable();
 
-  if (size_available_ && HasVisibleImageSize(size())) {
+  if (size_available_ && HasVisibleImageSize(Size())) {
     BitmapImageMetrics::CountDecodedImageType(source_.FilenameExtension());
     if (source_.FilenameExtension() == "jpg")
       BitmapImageMetrics::CountImageOrientation(
diff --git a/third_party/WebKit/Source/platform/graphics/BitmapImage.h b/third_party/WebKit/Source/platform/graphics/BitmapImage.h
index fed9073..4ee77dc5 100644
--- a/third_party/WebKit/Source/platform/graphics/BitmapImage.h
+++ b/third_party/WebKit/Source/platform/graphics/BitmapImage.h
@@ -61,7 +61,7 @@
 
   bool CurrentFrameHasSingleSecurityOrigin() const override;
 
-  IntSize size() const override;
+  IntSize Size() const override;
   IntSize SizeRespectingOrientation() const;
   bool GetHotSpot(IntPoint&) const override;
   String FilenameExtension() const override;
diff --git a/third_party/WebKit/Source/platform/graphics/BitmapImageTest.cpp b/third_party/WebKit/Source/platform/graphics/BitmapImageTest.cpp
index 3930947..419f214 100644
--- a/third_party/WebKit/Source/platform/graphics/BitmapImageTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/BitmapImageTest.cpp
@@ -236,7 +236,7 @@
   LoadImage("/LayoutTests/images/resources/anim_none.gif", false);
   FrameAtIndex(1);
   int frame_size =
-      static_cast<int>(image_->size().Area() * sizeof(ImageFrame::PixelData));
+      static_cast<int>(image_->Size().Area() * sizeof(ImageFrame::PixelData));
   EXPECT_EQ(frame_size, LastDecodedSizeChange());
 }
 
diff --git a/third_party/WebKit/Source/platform/graphics/CrossfadeGeneratedImage.cpp b/third_party/WebKit/Source/platform/graphics/CrossfadeGeneratedImage.cpp
index 01687882..fe20233 100644
--- a/third_party/WebKit/Source/platform/graphics/CrossfadeGeneratedImage.cpp
+++ b/third_party/WebKit/Source/platform/graphics/CrossfadeGeneratedImage.cpp
@@ -44,8 +44,8 @@
 void CrossfadeGeneratedImage::DrawCrossfade(PaintCanvas* canvas,
                                             const PaintFlags& flags,
                                             ImageClampingMode clamp_mode) {
-  FloatRect from_image_rect(FloatPoint(), FloatSize(from_image_->size()));
-  FloatRect to_image_rect(FloatPoint(), FloatSize(to_image_->size()));
+  FloatRect from_image_rect(FloatPoint(), FloatSize(from_image_->Size()));
+  FloatRect to_image_rect(FloatPoint(), FloatSize(to_image_->Size()));
   FloatRect dest_rect((FloatPoint()), FloatSize(crossfade_size_));
 
   // TODO(junov): The various effects encoded into paint should probably be
diff --git a/third_party/WebKit/Source/platform/graphics/CrossfadeGeneratedImage.h b/third_party/WebKit/Source/platform/graphics/CrossfadeGeneratedImage.h
index ff9369a91..4d9ef645 100644
--- a/third_party/WebKit/Source/platform/graphics/CrossfadeGeneratedImage.h
+++ b/third_party/WebKit/Source/platform/graphics/CrossfadeGeneratedImage.h
@@ -50,7 +50,7 @@
   bool UsesContainerSize() const override { return false; }
   bool HasRelativeSize() const override { return false; }
 
-  IntSize size() const override { return crossfade_size_; }
+  IntSize Size() const override { return crossfade_size_; }
 
  protected:
   void Draw(PaintCanvas*,
diff --git a/third_party/WebKit/Source/platform/graphics/DecodingImageGenerator.cpp b/third_party/WebKit/Source/platform/graphics/DecodingImageGenerator.cpp
index 243d3413..afd588d 100644
--- a/third_party/WebKit/Source/platform/graphics/DecodingImageGenerator.cpp
+++ b/third_party/WebKit/Source/platform/graphics/DecodingImageGenerator.cpp
@@ -147,7 +147,7 @@
   if (!decoder || !decoder->IsSizeAvailable())
     return nullptr;
 
-  const IntSize size = decoder->size();
+  const IntSize size = decoder->Size();
   const SkImageInfo info =
       SkImageInfo::MakeN32(size.Width(), size.Height(), kPremul_SkAlphaType,
                            decoder->ColorSpaceForSkImages());
diff --git a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
index 09de72ed..d1048585 100644
--- a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
@@ -179,8 +179,8 @@
                          : has_embedded_color_space_;
 }
 
-IntSize DeferredImageDecoder::size() const {
-  return actual_decoder_ ? actual_decoder_->size() : size_;
+IntSize DeferredImageDecoder::Size() const {
+  return actual_decoder_ ? actual_decoder_->Size() : size_;
 }
 
 IntSize DeferredImageDecoder::FrameSizeAtIndex(size_t index) const {
@@ -255,7 +255,7 @@
   if (frame_generator_)
     return;
 
-  size_ = actual_decoder_->size();
+  size_ = actual_decoder_->Size();
   has_hot_spot_ = actual_decoder_->HotSpot(hot_spot_);
   filename_extension_ = actual_decoder_->FilenameExtension();
   // JPEG images support YUV decoding; other decoders do not. (WebP could in the
diff --git a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.h b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.h
index 05eca6c..9a842c3a 100644
--- a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.h
+++ b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.h
@@ -68,7 +68,7 @@
 
   bool IsSizeAvailable();
   bool HasEmbeddedColorSpace() const;
-  IntSize size() const;
+  IntSize Size() const;
   IntSize FrameSizeAtIndex(size_t index) const;
   size_t FrameCount();
   int RepetitionCount() const;
diff --git a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoderTest.cpp b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoderTest.cpp
index 8d54bf57..d0818d0 100644
--- a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoderTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoderTest.cpp
@@ -114,7 +114,7 @@
     repetition_count_ = kCAnimationNone;
     status_ = ImageFrame::kFrameComplete;
     frame_duration_ = 0;
-    decoded_size_ = actual_decoder_->size();
+    decoded_size_ = actual_decoder_->Size();
   }
 
   void TearDown() override { ImageDecodingStore::Instance().Clear(); }
diff --git a/third_party/WebKit/Source/platform/graphics/GeneratedImage.h b/third_party/WebKit/Source/platform/graphics/GeneratedImage.h
index b7235ec..1d77523f 100644
--- a/third_party/WebKit/Source/platform/graphics/GeneratedImage.h
+++ b/third_party/WebKit/Source/platform/graphics/GeneratedImage.h
@@ -39,7 +39,7 @@
   bool UsesContainerSize() const override { return true; }
   bool HasRelativeSize() const override { return true; }
 
-  IntSize size() const override { return size_; }
+  IntSize Size() const override { return size_; }
 
   // Assume that generated content has no decoded data we need to worry about
   void DestroyDecodedData() override {}
diff --git a/third_party/WebKit/Source/platform/graphics/Image.cpp b/third_party/WebKit/Source/platform/graphics/Image.cpp
index 798ef9e..f82b3e98 100644
--- a/third_party/WebKit/Source/platform/graphics/Image.cpp
+++ b/third_party/WebKit/Source/platform/graphics/Image.cpp
@@ -94,7 +94,7 @@
                                 const FloatSize& scaled_tile_size,
                                 SkBlendMode op,
                                 const FloatSize& repeat_spacing) {
-  FloatSize intrinsic_tile_size(size());
+  FloatSize intrinsic_tile_size(Size());
   if (HasRelativeSize()) {
     intrinsic_tile_size.SetWidth(scaled_tile_size.Width());
     intrinsic_tile_size.SetHeight(scaled_tile_size.Height());
diff --git a/third_party/WebKit/Source/platform/graphics/Image.h b/third_party/WebKit/Source/platform/graphics/Image.h
index 470af4e3..869a0477 100644
--- a/third_party/WebKit/Source/platform/graphics/Image.h
+++ b/third_party/WebKit/Source/platform/graphics/Image.h
@@ -90,15 +90,15 @@
   virtual bool CurrentFrameHasSingleSecurityOrigin() const { return false; }
 
   static Image* NullImage();
-  bool IsNull() const { return size().IsEmpty(); }
+  bool IsNull() const { return Size().IsEmpty(); }
 
   virtual bool UsesContainerSize() const { return false; }
   virtual bool HasRelativeSize() const { return false; }
 
-  virtual IntSize size() const = 0;
-  IntRect Rect() const { return IntRect(IntPoint(), size()); }
-  int width() const { return size().Width(); }
-  int height() const { return size().Height(); }
+  virtual IntSize Size() const = 0;
+  IntRect Rect() const { return IntRect(IntPoint(), Size()); }
+  int width() const { return Size().Width(); }
+  int height() const { return Size().Height(); }
   virtual bool GetHotSpot(IntPoint&) const { return false; }
 
   enum SizeAvailability { kSizeAvailable, kSizeUnavailable };
diff --git a/third_party/WebKit/Source/platform/graphics/ImageBuffer.cpp b/third_party/WebKit/Source/platform/graphics/ImageBuffer.cpp
index e6a72baa..fe2f72f 100644
--- a/third_party/WebKit/Source/platform/graphics/ImageBuffer.cpp
+++ b/third_party/WebKit/Source/platform/graphics/ImageBuffer.cpp
@@ -323,7 +323,7 @@
 
   return drawing_buffer->CopyToPlatformTexture(
       gl, GL_TEXTURE_2D, texture_id, true, false, IntPoint(0, 0),
-      IntRect(IntPoint(0, 0), drawing_buffer->size()), source_buffer);
+      IntRect(IntPoint(0, 0), drawing_buffer->Size()), source_buffer);
 }
 
 void ImageBuffer::Draw(GraphicsContext& context,
diff --git a/third_party/WebKit/Source/platform/graphics/ImageLayerChromiumTest.cpp b/third_party/WebKit/Source/platform/graphics/ImageLayerChromiumTest.cpp
index 0491ab0f..e3466b5 100644
--- a/third_party/WebKit/Source/platform/graphics/ImageLayerChromiumTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/ImageLayerChromiumTest.cpp
@@ -49,7 +49,7 @@
     return image_->isOpaque();
   }
 
-  IntSize size() const override { return size_; }
+  IntSize Size() const override { return size_; }
 
   sk_sp<SkImage> ImageForCurrentFrame() override { return image_; }
 
diff --git a/third_party/WebKit/Source/platform/graphics/MailboxTextureHolder.h b/third_party/WebKit/Source/platform/graphics/MailboxTextureHolder.h
index d822d4e..9c203f6 100644
--- a/third_party/WebKit/Source/platform/graphics/MailboxTextureHolder.h
+++ b/third_party/WebKit/Source/platform/graphics/MailboxTextureHolder.h
@@ -20,7 +20,7 @@
   bool IsSkiaTextureHolder() final { return false; }
   bool IsMailboxTextureHolder() final { return true; }
   unsigned SharedContextId() final;
-  IntSize size() const final { return size_; }
+  IntSize Size() const final { return size_; }
   bool CurrentFrameKnownToBeOpaque(Image::MetadataMode) final { return false; }
 
   gpu::Mailbox GetMailbox() final { return mailbox_; }
diff --git a/third_party/WebKit/Source/platform/graphics/OffscreenCanvasFrameDispatcherImpl.cpp b/third_party/WebKit/Source/platform/graphics/OffscreenCanvasFrameDispatcherImpl.cpp
index 89b5cb6f..29d8a5e7 100644
--- a/third_party/WebKit/Source/platform/graphics/OffscreenCanvasFrameDispatcherImpl.cpp
+++ b/third_party/WebKit/Source/platform/graphics/OffscreenCanvasFrameDispatcherImpl.cpp
@@ -203,7 +203,7 @@
     bool
         is_web_gl_software_rendering /* This flag is true when WebGL's commit is
     called on SwiftShader. */) {
-  if (!image || !VerifyImageSize(image->size()))
+  if (!image || !VerifyImageSize(image->Size()))
     return;
   if (!frame_sink_id_.is_valid()) {
     PostImageToPlaceholder(std::move(image));
diff --git a/third_party/WebKit/Source/platform/graphics/PlaceholderImage.h b/third_party/WebKit/Source/platform/graphics/PlaceholderImage.h
index d211171..f87d166 100644
--- a/third_party/WebKit/Source/platform/graphics/PlaceholderImage.h
+++ b/third_party/WebKit/Source/platform/graphics/PlaceholderImage.h
@@ -28,7 +28,7 @@
 
   ~PlaceholderImage() override;
 
-  IntSize size() const override { return size_; }
+  IntSize Size() const override { return size_; }
 
   sk_sp<SkImage> ImageForCurrentFrame() override;
 
diff --git a/third_party/WebKit/Source/platform/graphics/SkiaTextureHolder.cpp b/third_party/WebKit/Source/platform/graphics/SkiaTextureHolder.cpp
index d759d86..ab57e09 100644
--- a/third_party/WebKit/Source/platform/graphics/SkiaTextureHolder.cpp
+++ b/third_party/WebKit/Source/platform/graphics/SkiaTextureHolder.cpp
@@ -34,7 +34,7 @@
   DCHECK(texture_holder->IsMailboxTextureHolder());
   const gpu::Mailbox mailbox = texture_holder->GetMailbox();
   const gpu::SyncToken sync_token = texture_holder->GetSyncToken();
-  const IntSize mailbox_size = texture_holder->size();
+  const IntSize mailbox_size = texture_holder->Size();
 
   gpu::gles2::GLES2Interface* shared_gl = SharedGpuContext::Gl();
   GrContext* shared_gr_context = SharedGpuContext::Gr();
diff --git a/third_party/WebKit/Source/platform/graphics/SkiaTextureHolder.h b/third_party/WebKit/Source/platform/graphics/SkiaTextureHolder.h
index c801c0fe..15b5202 100644
--- a/third_party/WebKit/Source/platform/graphics/SkiaTextureHolder.h
+++ b/third_party/WebKit/Source/platform/graphics/SkiaTextureHolder.h
@@ -18,7 +18,7 @@
   bool IsSkiaTextureHolder() final { return true; }
   bool IsMailboxTextureHolder() final { return false; }
   unsigned SharedContextId() final;
-  IntSize size() const final {
+  IntSize Size() const final {
     return IntSize(image_->width(), image_->height());
   }
   bool CurrentFrameKnownToBeOpaque(Image::MetadataMode) final {
diff --git a/third_party/WebKit/Source/platform/graphics/TextureHolder.h b/third_party/WebKit/Source/platform/graphics/TextureHolder.h
index e487b13..18dec34 100644
--- a/third_party/WebKit/Source/platform/graphics/TextureHolder.h
+++ b/third_party/WebKit/Source/platform/graphics/TextureHolder.h
@@ -24,7 +24,7 @@
   virtual bool IsSkiaTextureHolder() = 0;
   virtual bool IsMailboxTextureHolder() = 0;
   virtual unsigned SharedContextId() = 0;
-  virtual IntSize size() const = 0;
+  virtual IntSize Size() const = 0;
   virtual bool CurrentFrameKnownToBeOpaque(Image::MetadataMode) = 0;
 
   // Methods overrided by MailboxTextureHolder
diff --git a/third_party/WebKit/Source/platform/graphics/UnacceleratedStaticBitmapImage.cpp b/third_party/WebKit/Source/platform/graphics/UnacceleratedStaticBitmapImage.cpp
index 5892c07..ce8205ef 100644
--- a/third_party/WebKit/Source/platform/graphics/UnacceleratedStaticBitmapImage.cpp
+++ b/third_party/WebKit/Source/platform/graphics/UnacceleratedStaticBitmapImage.cpp
@@ -21,7 +21,7 @@
 
 UnacceleratedStaticBitmapImage::~UnacceleratedStaticBitmapImage() {}
 
-IntSize UnacceleratedStaticBitmapImage::size() const {
+IntSize UnacceleratedStaticBitmapImage::Size() const {
   return IntSize(image_->width(), image_->height());
 }
 
diff --git a/third_party/WebKit/Source/platform/graphics/UnacceleratedStaticBitmapImage.h b/third_party/WebKit/Source/platform/graphics/UnacceleratedStaticBitmapImage.h
index 0e08dd0..c740ca9 100644
--- a/third_party/WebKit/Source/platform/graphics/UnacceleratedStaticBitmapImage.h
+++ b/third_party/WebKit/Source/platform/graphics/UnacceleratedStaticBitmapImage.h
@@ -16,7 +16,7 @@
   static PassRefPtr<UnacceleratedStaticBitmapImage> Create(sk_sp<SkImage>);
 
   bool CurrentFrameKnownToBeOpaque(MetadataMode = kUseCurrentMetadata) override;
-  IntSize size() const override;
+  IntSize Size() const override;
   sk_sp<SkImage> ImageForCurrentFrame() override;
 
   void Draw(PaintCanvas*,
diff --git a/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp b/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp
index 9f08a210..7a26d0f 100644
--- a/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp
+++ b/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp
@@ -311,7 +311,7 @@
     WebGLImageConversion::AlphaOp op =
         need_premultiply ? WebGLImageConversion::kAlphaDoPremultiply
                          : WebGLImageConversion::kAlphaDoNothing;
-    ReadBackFramebuffer(pixels, size().Width(), size().Height(), kReadbackSkia,
+    ReadBackFramebuffer(pixels, Size().Width(), Size().Height(), kReadbackSkia,
                         op);
   }
 
@@ -1052,8 +1052,8 @@
   ScopedStateRestorer scoped_state_restorer(this);
 
   DCHECK(!premultiplied_alpha_);
-  width = size().Width();
-  height = size().Height();
+  width = Size().Width();
+  height = Size().Height();
 
   CheckedNumeric<int> data_size = 4;
   data_size *= width;
diff --git a/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.h b/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.h
index b776ff6..16e778c 100644
--- a/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.h
+++ b/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.h
@@ -154,7 +154,7 @@
   // Bind the default framebuffer to |target|. |target| must be
   // GL_FRAMEBUFFER, GL_READ_FRAMEBUFFER, or GL_DRAW_FRAMEBUFFER.
   void Bind(GLenum target);
-  IntSize size() const { return size_; }
+  IntSize Size() const { return size_; }
 
   // Resolves the multisample color buffer to the normal color buffer and leaves
   // the resolved color buffer bound to GL_READ_FRAMEBUFFER and
diff --git a/third_party/WebKit/Source/platform/graphics/gpu/ImageLayerBridge.cpp b/third_party/WebKit/Source/platform/graphics/gpu/ImageLayerBridge.cpp
index 1eb13b5..1c7f678a3 100644
--- a/third_party/WebKit/Source/platform/graphics/gpu/ImageLayerBridge.cpp
+++ b/third_party/WebKit/Source/platform/graphics/gpu/ImageLayerBridge.cpp
@@ -111,7 +111,7 @@
         bitmap.get(), gfx::Size(image_->width(), image_->height()));
     auto func = WTF::Bind(&ImageLayerBridge::MailboxReleasedSoftware,
                           weak_ptr_factory_.CreateWeakPtr(),
-                          base::Passed(&bitmap), image_->size());
+                          base::Passed(&bitmap), image_->Size());
     *out_release_callback = cc::SingleReleaseCallback::Create(
         ConvertToBaseCallback(std::move(func)));
   }
@@ -126,17 +126,17 @@
 std::unique_ptr<cc::SharedBitmap> ImageLayerBridge::CreateOrRecycleBitmap() {
   auto it = std::remove_if(recycled_bitmaps_.begin(), recycled_bitmaps_.end(),
                            [this](const RecycledBitmap& bitmap) {
-                             return bitmap.size != image_->size();
+                             return bitmap.size != image_->Size();
                            });
   recycled_bitmaps_.Shrink(it - recycled_bitmaps_.begin());
 
   if (!recycled_bitmaps_.IsEmpty()) {
     RecycledBitmap recycled = std::move(recycled_bitmaps_.back());
     recycled_bitmaps_.pop_back();
-    DCHECK(recycled.size == image_->size());
+    DCHECK(recycled.size == image_->Size());
     return std::move(recycled.bitmap);
   }
-  return Platform::Current()->AllocateSharedBitmap(image_->size());
+  return Platform::Current()->AllocateSharedBitmap(image_->Size());
 }
 
 void ImageLayerBridge::MailboxReleasedGpu(RefPtr<StaticBitmapImage> image,
diff --git a/third_party/WebKit/Source/platform/graphics/test/MockImageDecoder.h b/third_party/WebKit/Source/platform/graphics/test/MockImageDecoder.h
index eb63c13..74fe6ff 100644
--- a/third_party/WebKit/Source/platform/graphics/test/MockImageDecoder.h
+++ b/third_party/WebKit/Source/platform/graphics/test/MockImageDecoder.h
@@ -76,7 +76,7 @@
   ~MockImageDecoder() { client_->DecoderBeingDestroyed(); }
 
   IntSize DecodedSize() const override {
-    return client_->DecodedSize().IsEmpty() ? size() : client_->DecodedSize();
+    return client_->DecodedSize().IsEmpty() ? Size() : client_->DecodedSize();
   }
 
   String FilenameExtension() const override { return "mock"; }
@@ -114,7 +114,7 @@
 
   void InitializeNewFrame(size_t index) override {
     if (frame_buffer_cache_[index].AllocatePixelData(
-            size().Width(), size().Height(), ColorSpaceForSkImages()))
+            Size().Width(), Size().Height(), ColorSpaceForSkImages()))
       frame_buffer_cache_[index].ZeroFillPixelData();
     frame_buffer_cache_[index].SetHasAlpha(false);
   }
diff --git a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp
index 0372d6d..86cb401b 100644
--- a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp
@@ -296,7 +296,7 @@
 
   // When this frame spans the entire image rect we can set hasAlpha to false,
   // since there are logically no transparent pixels outside of the frame rect.
-  if (buffer.OriginalFrameRect().Contains(IntRect(IntPoint(), size()))) {
+  if (buffer.OriginalFrameRect().Contains(IntRect(IntPoint(), Size()))) {
     buffer.SetHasAlpha(false);
     buffer.SetRequiredPreviousFrameIndex(kNotFound);
   } else if (buffer.RequiredPreviousFrameIndex() != kNotFound) {
@@ -353,7 +353,7 @@
   size_t required_previous_frame_index = buffer->RequiredPreviousFrameIndex();
   if (required_previous_frame_index == kNotFound) {
     // This frame doesn't rely on any previous data.
-    if (!buffer->AllocatePixelData(size().Width(), size().Height(),
+    if (!buffer->AllocatePixelData(Size().Width(), Size().Height(),
                                    ColorSpaceForSkImages())) {
       return false;
     }
@@ -377,7 +377,7 @@
       // We want to clear the previous frame to transparent, without
       // affecting pixels in the image outside of the frame.
       const IntRect& prev_rect = prev_buffer->OriginalFrameRect();
-      DCHECK(!prev_rect.Contains(IntRect(IntPoint(), size())));
+      DCHECK(!prev_rect.Contains(IntRect(IntPoint(), Size())));
       buffer->ZeroFillFrameRect(prev_rect);
     }
   }
@@ -435,7 +435,7 @@
   const ImageFrame* curr_buffer = &frame_buffer_cache_[frame_index];
   if ((frame_rect_is_opaque ||
        curr_buffer->GetAlphaBlendSource() == ImageFrame::kBlendAtopBgcolor) &&
-      curr_buffer->OriginalFrameRect().Contains(IntRect(IntPoint(), size())))
+      curr_buffer->OriginalFrameRect().Contains(IntRect(IntPoint(), Size())))
     return kNotFound;
 
   // The starting state for this frame depends on the previous frame's
@@ -463,7 +463,7 @@
       // this frame is a blank frame, so it can again be decoded alone.
       // Otherwise, the previous frame contributes to this frame.
       return (prev_buffer->OriginalFrameRect().Contains(
-                  IntRect(IntPoint(), size())) ||
+                  IntRect(IntPoint(), Size())) ||
               (prev_buffer->RequiredPreviousFrameIndex() == kNotFound))
                  ? kNotFound
                  : prev_frame;
diff --git a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.h b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.h
index 946d6cd..8ad82490 100644
--- a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.h
+++ b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.h
@@ -140,11 +140,11 @@
 
   bool IsDecodedSizeAvailable() const { return !failed_ && size_available_; }
 
-  virtual IntSize size() const { return size_; }
+  virtual IntSize Size() const { return size_; }
 
   // Decoders which downsample images should override this method to
   // return the actual decoded size.
-  virtual IntSize DecodedSize() const { return size(); }
+  virtual IntSize DecodedSize() const { return Size(); }
 
   // Image decoders that support YUV decoding must override this to
   // provide the size of each component.
@@ -165,7 +165,7 @@
   // sizes. This does NOT differ from size() for GIF or WebP, since
   // decoding GIF or WebP composites any smaller frames against previous
   // frames to create full-size frames.
-  virtual IntSize FrameSizeAtIndex(size_t) const { return size(); }
+  virtual IntSize FrameSizeAtIndex(size_t) const { return Size(); }
 
   // Returns whether the size is legal (i.e. not going to result in
   // overflow elsewhere).  If not, marks decoding as failed.
diff --git a/third_party/WebKit/Source/platform/image-decoders/ImageDecoderTestHelpers.cpp b/third_party/WebKit/Source/platform/image-decoders/ImageDecoderTestHelpers.cpp
index b36335c..735a98c1 100644
--- a/third_party/WebKit/Source/platform/image-decoders/ImageDecoderTestHelpers.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/ImageDecoderTestHelpers.cpp
@@ -232,14 +232,14 @@
 
     if (length < frame_offset) {
       EXPECT_FALSE(decoder->IsSizeAvailable());
-      EXPECT_TRUE(decoder->size().IsEmpty());
+      EXPECT_TRUE(decoder->Size().IsEmpty());
       EXPECT_FALSE(decoder->HasEmbeddedColorSpace());
       EXPECT_EQ(0u, decoder->FrameCount());
       EXPECT_EQ(kCAnimationLoopOnce, decoder->RepetitionCount());
       EXPECT_FALSE(decoder->FrameBufferAtIndex(0));
     } else {
       EXPECT_TRUE(decoder->IsSizeAvailable());
-      EXPECT_FALSE(decoder->size().IsEmpty());
+      EXPECT_FALSE(decoder->Size().IsEmpty());
       EXPECT_EQ(decoder->HasEmbeddedColorSpace(), has_color_space);
       EXPECT_EQ(1u, decoder->FrameCount());
       EXPECT_EQ(expected_repetition_count, decoder->RepetitionCount());
diff --git a/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageDecoderTest.cpp b/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageDecoderTest.cpp
index ae7232ab..15d85c7 100644
--- a/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageDecoderTest.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageDecoderTest.cpp
@@ -31,8 +31,8 @@
   std::unique_ptr<ImageDecoder> decoder = CreateDecoder();
   decoder->SetData(data.Get(), true);
   EXPECT_TRUE(decoder->IsSizeAvailable());
-  EXPECT_EQ(256, decoder->size().Width());
-  EXPECT_EQ(256, decoder->size().Height());
+  EXPECT_EQ(256, decoder->Size().Width());
+  EXPECT_EQ(256, decoder->Size().Height());
 }
 
 TEST(BMPImageDecoderTest, parseAndDecode) {
diff --git a/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageReader.cpp b/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageReader.cpp
index 80c6818b..f3df130 100644
--- a/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageReader.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageReader.cpp
@@ -117,8 +117,8 @@
   // Initialize the framebuffer if needed.
   DCHECK(buffer_);  // Parent should set this before asking us to decode!
   if (buffer_->GetStatus() == ImageFrame::kFrameEmpty) {
-    if (!buffer_->AllocatePixelData(parent_->size().Width(),
-                                    parent_->size().Height(),
+    if (!buffer_->AllocatePixelData(parent_->Size().Width(),
+                                    parent_->Size().Height(),
                                     parent_->ColorSpaceForSkImages())) {
       return parent_->SetFailed();  // Unable to allocate.
     }
@@ -130,10 +130,10 @@
     buffer_->SetHasAlpha(false);
 
     // For BMPs, the frame always fills the entire image.
-    buffer_->SetOriginalFrameRect(IntRect(IntPoint(), parent_->size()));
+    buffer_->SetOriginalFrameRect(IntRect(IntPoint(), parent_->Size()));
 
     if (!is_top_down_)
-      coord_.SetY(parent_->size().Height() - 1);
+      coord_.SetY(parent_->Size().Height() - 1);
   }
 
   // Decode the data.
@@ -150,7 +150,7 @@
        !seen_non_zero_alpha_pixel_)) {
     // Reset decoding coordinates to start of image.
     coord_.SetX(0);
-    coord_.SetY(is_top_down_ ? 0 : (parent_->size().Height() - 1));
+    coord_.SetY(is_top_down_ ? 0 : (parent_->Size().Height() - 1));
 
     // The AND mask is stored as 1-bit data.
     info_header_.bi_bit_count = 1;
@@ -643,7 +643,7 @@
       switch (code) {
         case 0:  // Magic token: EOL
           // Skip any remaining pixels in this row.
-          if (coord_.X() < parent_->size().Width())
+          if (coord_.X() < parent_->Size().Width())
             buffer_->SetHasAlpha(true);
           MoveBufferToNextRow();
 
@@ -652,8 +652,8 @@
 
         case 1:  // Magic token: EOF
           // Skip any remaining pixels in the image.
-          if ((coord_.X() < parent_->size().Width()) ||
-              (is_top_down_ ? (coord_.Y() < (parent_->size().Height() - 1))
+          if ((coord_.X() < parent_->Size().Width()) ||
+              (is_top_down_ ? (coord_.Y() < (parent_->Size().Height() - 1))
                             : (coord_.Y() > 0)))
             buffer_->SetHasAlpha(true);
           // There's no need to move |m_coord| here to trigger the caller
@@ -674,7 +674,7 @@
           const uint8_t dy = ReadUint8(3);
           if (dx || dy)
             buffer_->SetHasAlpha(true);
-          if (((coord_.X() + dx) > parent_->size().Width()) ||
+          if (((coord_.X() + dx) > parent_->Size().Width()) ||
               PastEndOfImage(dy))
             return kFailure;
 
@@ -704,7 +704,7 @@
       // The following color data is repeated for |count| total pixels.
       // Strangely, some BMPs seem to specify excessively large counts
       // here; ignore pixels past the end of the row.
-      const int end_x = std::min(coord_.X() + count, parent_->size().Width());
+      const int end_x = std::min(coord_.X() + count, parent_->Size().Width());
 
       if (info_header_.bi_compression == RLE24) {
         // Bail if there isn't enough data.
@@ -746,11 +746,11 @@
     return kInsufficientData;
 
   if (!in_rle)
-    num_pixels = parent_->size().Width();
+    num_pixels = parent_->Size().Width();
 
   // Fail if we're being asked to decode more pixels than remain in the row.
   const int end_x = coord_.X() + num_pixels;
-  if (end_x > parent_->size().Width())
+  if (end_x > parent_->Size().Width())
     return kFailure;
 
   // Determine how many bytes of data the requested number of pixels
diff --git a/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageReader.h b/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageReader.h
index de4ac00..2d3df42 100644
--- a/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageReader.h
+++ b/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageReader.h
@@ -195,7 +195,7 @@
   // the end of the image.  Here "plus" means "toward the end of the
   // image", so downwards for m_isTopDown images and upwards otherwise.
   inline bool PastEndOfImage(int num_rows) {
-    return is_top_down_ ? ((coord_.Y() + num_rows) >= parent_->size().Height())
+    return is_top_down_ ? ((coord_.Y() + num_rows) >= parent_->Size().Height())
                         : ((coord_.Y() - num_rows) < 0);
   }
 
diff --git a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp
index 92b2183..25a00e1 100644
--- a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp
@@ -112,10 +112,10 @@
   const int x_begin = frame_context->xOffset();
   const int y_begin = frame_context->yOffset() + row_number;
   const int x_end = std::min(static_cast<int>(frame_context->xOffset() + width),
-                             size().Width());
+                             Size().Width());
   const int y_end = std::min(
       static_cast<int>(frame_context->yOffset() + row_number + repeat_count),
-      size().Height());
+      Size().Height());
   if (!width || (x_begin < 0) || (y_begin < 0) || (x_end <= x_begin) ||
       (y_end <= y_begin))
     return true;
@@ -222,7 +222,7 @@
   ImageFrame* buffer = &frame_buffer_cache_[index];
   const GIFFrameContext* frame_context = reader_->frameContext(index);
   buffer->SetOriginalFrameRect(
-      Intersection(frame_context->frameRect(), IntRect(IntPoint(), size())));
+      Intersection(frame_context->frameRect(), IntRect(IntPoint(), Size())));
   buffer->SetDuration(frame_context->delayTime());
   buffer->SetDisposalMethod(frame_context->getDisposalMethod());
   buffer->SetRequiredPreviousFrameIndex(
diff --git a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoderTest.cpp b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoderTest.cpp
index bf7fa97..ee469c8 100644
--- a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoderTest.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoderTest.cpp
@@ -433,7 +433,7 @@
   decoder->SetMemoryAllocator(nullptr);
 
   ASSERT_TRUE(frame);
-  EXPECT_EQ(IntRect(IntPoint(), decoder->size()), frame->OriginalFrameRect());
+  EXPECT_EQ(IntRect(IntPoint(), decoder->Size()), frame->OriginalFrameRect());
   EXPECT_FALSE(frame->HasAlpha());
 }
 
diff --git a/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoder.cpp
index 6c6ddd6c..669289ee6 100644
--- a/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoder.cpp
@@ -65,13 +65,13 @@
     SetDataForPNGDecoderAtIndex(i);
 }
 
-IntSize ICOImageDecoder::size() const {
-  return frame_size_.IsEmpty() ? ImageDecoder::size() : frame_size_;
+IntSize ICOImageDecoder::Size() const {
+  return frame_size_.IsEmpty() ? ImageDecoder::Size() : frame_size_;
 }
 
 IntSize ICOImageDecoder::FrameSizeAtIndex(size_t index) const {
   return (index && (index < dir_entries_.size())) ? dir_entries_[index].size_
-                                                  : size();
+                                                  : Size();
 }
 
 bool ICOImageDecoder::SetSize(unsigned width, unsigned height) {
@@ -220,7 +220,7 @@
   if (png_decoder->IsSizeAvailable()) {
     // Fail if the size the PNGImageDecoder calculated does not match the size
     // in the directory.
-    if (png_decoder->size() != dir_entry.size_)
+    if (png_decoder->Size() != dir_entry.size_)
       return SetFailed();
 
     const auto* frame = png_decoder->FrameBufferAtIndex(0);
diff --git a/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoder.h b/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoder.h
index 6254b9bc..bcec03e 100644
--- a/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoder.h
+++ b/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoder.h
@@ -50,7 +50,7 @@
   // ImageDecoder:
   String FilenameExtension() const override { return "ico"; }
   void OnSetData(SegmentReader*) override;
-  IntSize size() const override;
+  IntSize Size() const override;
   IntSize FrameSizeAtIndex(size_t) const override;
   bool SetSize(unsigned width, unsigned height) override;
   bool FrameIsCompleteAtIndex(size_t) const override;
diff --git a/third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
index fbf6830..69b457f 100644
--- a/third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
@@ -758,7 +758,7 @@
 }
 
 unsigned JPEGImageDecoder::DesiredScaleNumerator() const {
-  size_t original_bytes = size().Width() * size().Height() * 4;
+  size_t original_bytes = Size().Width() * Size().Height() * 4;
 
   if (original_bytes <= max_decoded_bytes_)
     return scaleDenominator;
@@ -949,7 +949,7 @@
     buffer.SetHasAlpha(true);
 
     // For JPEGs, the frame always fills the entire image.
-    buffer.SetOriginalFrameRect(IntRect(IntPoint(), size()));
+    buffer.SetOriginalFrameRect(IntRect(IntPoint(), Size()));
   }
 
 #if defined(TURBO_JPEG_RGB_SWIZZLE)
diff --git a/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoder.cpp
index 7ec8bc2c..7f37ec5 100644
--- a/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoder.cpp
@@ -129,7 +129,7 @@
   const PNGImageReader::FrameInfo& frame_info = reader_->GetFrameInfo(index);
   ImageFrame& buffer = frame_buffer_cache_[index];
 
-  DCHECK(IntRect(IntPoint(), size()).Contains(frame_info.frame_rect));
+  DCHECK(IntRect(IntPoint(), Size()).Contains(frame_info.frame_rect));
   buffer.SetOriginalFrameRect(frame_info.frame_rect);
 
   buffer.SetDuration(frame_info.duration);
@@ -292,7 +292,7 @@
     if (PNG_INTERLACE_ADAM7 ==
         png_get_interlace_type(png, reader_->InfoPtr())) {
       unsigned color_channels = has_alpha_channel_ ? 4 : 3;
-      reader_->CreateInterlaceBuffer(color_channels * size().Area());
+      reader_->CreateInterlaceBuffer(color_channels * Size().Area());
       if (!reader_->InterlaceBuffer()) {
         longjmp(JMPBUF(png), 1);
         return;
@@ -303,7 +303,7 @@
   }
 
   const IntRect& frame_rect = buffer.OriginalFrameRect();
-  DCHECK(IntRect(IntPoint(), size()).Contains(frame_rect));
+  DCHECK(IntRect(IntPoint(), Size()).Contains(frame_rect));
 
   /* libpng comments (here to explain what follows).
    *
@@ -332,7 +332,7 @@
   int y = row_index + frame_rect.Y();
   if (y < 0)
     return;
-  DCHECK_LT(y, size().Height());
+  DCHECK_LT(y, Size().Height());
 
   /* libpng comments (continued).
    *
@@ -358,7 +358,7 @@
 
   if (png_bytep interlace_buffer = reader_->InterlaceBuffer()) {
     unsigned color_channels = has_alpha ? 4 : 3;
-    row = interlace_buffer + (row_index * color_channels * size().Width());
+    row = interlace_buffer + (row_index * color_channels * Size().Width());
     png_progressive_combine_row(reader_->PngPtr(), row, row_buffer);
   }
 
diff --git a/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoderTest.cpp b/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoderTest.cpp
index 0f422d9..6b37372 100644
--- a/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoderTest.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoderTest.cpp
@@ -53,7 +53,7 @@
 void TestSize(const char* png_file, IntSize expected_size) {
   auto decoder = CreateDecoderWithPngData(png_file);
   EXPECT_TRUE(decoder->IsSizeAvailable());
-  EXPECT_EQ(expected_size, decoder->size());
+  EXPECT_EQ(expected_size, decoder->Size());
 }
 
 // Test whether querying for the size of the image works if we present the
@@ -74,11 +74,11 @@
 
     if (length < bytes_needed_to_decode_size) {
       EXPECT_FALSE(decoder->IsSizeAvailable());
-      EXPECT_TRUE(decoder->size().IsEmpty());
+      EXPECT_TRUE(decoder->Size().IsEmpty());
       EXPECT_FALSE(decoder->Failed());
     } else {
       EXPECT_TRUE(decoder->IsSizeAvailable());
-      EXPECT_EQ(expected_size, decoder->size());
+      EXPECT_EQ(expected_size, decoder->Size());
     }
   }
   EXPECT_FALSE(decoder->Failed());
@@ -625,7 +625,7 @@
 
   IntSize expected_size(5, 5);
   EXPECT_TRUE(decoder->IsSizeAvailable());
-  EXPECT_EQ(expected_size, decoder->size());
+  EXPECT_EQ(expected_size, decoder->Size());
 
   const size_t kExpectedFrameCount = 0;
   EXPECT_EQ(kExpectedFrameCount, decoder->FrameCount());
@@ -892,7 +892,7 @@
   frame = decoder->FrameBufferAtIndex(1);
   ASSERT_TRUE(frame);
   ASSERT_FALSE(decoder->Failed());
-  ASSERT_NE(IntRect({}, decoder->size()), frame->OriginalFrameRect());
+  ASSERT_NE(IntRect({}, decoder->Size()), frame->OriginalFrameRect());
   ASSERT_EQ(kNotFound, frame->RequiredPreviousFrameIndex());
 
   const auto hash = HashBitmap(frame->Bitmap());
diff --git a/third_party/WebKit/Source/platform/image-decoders/webp/WEBPImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/webp/WEBPImageDecoder.cpp
index dea2eb4d..4aa6b91 100644
--- a/third_party/WebKit/Source/platform/image-decoders/webp/WEBPImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/webp/WEBPImageDecoder.cpp
@@ -245,7 +245,7 @@
       buffer.RequiredPreviousFrameIndex();
   if (required_previous_frame_index == kNotFound) {
     frame_background_has_alpha_ =
-        !buffer.OriginalFrameRect().Contains(IntRect(IntPoint(), size()));
+        !buffer.OriginalFrameRect().Contains(IntRect(IntPoint(), Size()));
   } else {
     const ImageFrame& prev_buffer =
         frame_buffer_cache_[required_previous_frame_index];
@@ -397,7 +397,7 @@
   IntRect frame_rect(animated_frame.x_offset, animated_frame.y_offset,
                      animated_frame.width, animated_frame.height);
   buffer->SetOriginalFrameRect(
-      Intersection(frame_rect, IntRect(IntPoint(), size())));
+      Intersection(frame_rect, IntRect(IntPoint(), Size())));
   buffer->SetDuration(animated_frame.duration);
   buffer->SetDisposalMethod(animated_frame.dispose_method ==
                                     WEBP_MUX_DISPOSE_BACKGROUND
@@ -460,7 +460,7 @@
   DCHECK_NE(buffer.GetStatus(), ImageFrame::kFrameComplete);
 
   if (buffer.GetStatus() == ImageFrame::kFrameEmpty) {
-    if (!buffer.AllocatePixelData(size().Width(), size().Height(),
+    if (!buffer.AllocatePixelData(Size().Width(), Size().Height(),
                                   ColorSpaceForSkImages()))
       return SetFailed();
     buffer.ZeroFillPixelData();
@@ -469,7 +469,7 @@
     // loading. The correct alpha value for the frame will be set when it is
     // fully decoded.
     buffer.SetHasAlpha(true);
-    buffer.SetOriginalFrameRect(IntRect(IntPoint(), size()));
+    buffer.SetOriginalFrameRect(IntRect(IntPoint(), Size()));
   }
 
   const IntRect& frame_rect = buffer.OriginalFrameRect();
@@ -490,7 +490,7 @@
     WebPInitDecBuffer(&decoder_buffer_);
     decoder_buffer_.colorspace = mode;
     decoder_buffer_.u.RGBA.stride =
-        size().Width() * sizeof(ImageFrame::PixelData);
+        Size().Width() * sizeof(ImageFrame::PixelData);
     decoder_buffer_.u.RGBA.size =
         decoder_buffer_.u.RGBA.stride * frame_rect.Height();
     decoder_buffer_.is_external_memory = 1;
diff --git a/third_party/WebKit/Source/web/ChromeClientImpl.cpp b/third_party/WebKit/Source/web/ChromeClientImpl.cpp
index cb86012..ba81ee3 100644
--- a/third_party/WebKit/Source/web/ChromeClientImpl.cpp
+++ b/third_party/WebKit/Source/web/ChromeClientImpl.cpp
@@ -205,8 +205,8 @@
     // These numbers will be fairly wrong. The window's x/y coordinates will
     // be the top left corner of the screen and the size will be the content
     // size instead of the window size.
-    rect.width = web_view_->size().width;
-    rect.height = web_view_->size().height;
+    rect.width = web_view_->Size().width;
+    rect.height = web_view_->Size().height;
   }
   return IntRect(rect);
 }
diff --git a/third_party/WebKit/Source/web/FullscreenController.cpp b/third_party/WebKit/Source/web/FullscreenController.cpp
index a09e2ca3..3cd0485 100644
--- a/third_party/WebKit/Source/web/FullscreenController.cpp
+++ b/third_party/WebKit/Source/web/FullscreenController.cpp
@@ -271,7 +271,7 @@
   PageScaleConstraints fullscreen_constraints;
   if (!remove_constraints) {
     fullscreen_constraints = PageScaleConstraints(1.0, 1.0, 1.0);
-    fullscreen_constraints.layout_size = FloatSize(web_view_impl_->size());
+    fullscreen_constraints.layout_size = FloatSize(web_view_impl_->Size());
   }
   web_view_impl_->GetPageScaleConstraintsSet().SetFullscreenConstraints(
       fullscreen_constraints);
diff --git a/third_party/WebKit/Source/web/InspectorOverlay.cpp b/third_party/WebKit/Source/web/InspectorOverlay.cpp
index e0a4d18..3954ddc 100644
--- a/third_party/WebKit/Source/web/InspectorOverlay.cpp
+++ b/third_party/WebKit/Source/web/InspectorOverlay.cpp
@@ -412,7 +412,7 @@
 
   IntRect visible_rect_in_document =
       view->GetScrollableArea()->VisibleContentRect();
-  IntSize viewport_size = frame->GetPage()->GetVisualViewport().size();
+  IntSize viewport_size = frame->GetPage()->GetVisualViewport().Size();
   OverlayMainFrame()->View()->Resize(viewport_size);
   OverlayPage()->GetVisualViewport().SetSize(viewport_size);
   OverlayMainFrame()->SetPageZoomFactor(WindowToViewportScale());
diff --git a/third_party/WebKit/Source/web/PageOverlay.cpp b/third_party/WebKit/Source/web/PageOverlay.cpp
index 726e354..339e9ad 100644
--- a/third_party/WebKit/Source/web/PageOverlay.cpp
+++ b/third_party/WebKit/Source/web/PageOverlay.cpp
@@ -96,7 +96,7 @@
     }
   }
 
-  FloatSize size(frame->GetPage()->GetVisualViewport().size());
+  FloatSize size(frame->GetPage()->GetVisualViewport().Size());
   if (size != layer_->Size())
     layer_->SetSize(size);
 
diff --git a/third_party/WebKit/Source/web/RotationViewportAnchor.cpp b/third_party/WebKit/Source/web/RotationViewportAnchor.cpp
index ba65ea6..47cb34b 100644
--- a/third_party/WebKit/Source/web/RotationViewportAnchor.cpp
+++ b/third_party/WebKit/Source/web/RotationViewportAnchor.cpp
@@ -136,7 +136,7 @@
 
   // Note, we specifically use the unscaled visual viewport size here as the
   // conversion into content-space below will apply the scale.
-  FloatPoint anchor_offset(visual_viewport_->size());
+  FloatPoint anchor_offset(visual_viewport_->Size());
   anchor_offset.Scale(anchor_in_inner_view_coords_.Width(),
                       anchor_in_inner_view_coords_.Height());
 
@@ -168,7 +168,7 @@
       page_scale_constraints_set_.FinalConstraints().ClampToConstraints(
           new_page_scale_factor);
 
-  FloatSize visual_viewport_size(visual_viewport_->size());
+  FloatSize visual_viewport_size(visual_viewport_->Size());
   visual_viewport_size.Scale(1 / new_page_scale_factor);
 
   IntPoint main_frame_origin;
diff --git a/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp b/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp
index 3d12b17f..fe1b404c 100644
--- a/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp
+++ b/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp
@@ -154,7 +154,7 @@
   self_keep_alive_.Clear();
 }
 
-WebSize WebFrameWidgetImpl::size() {
+WebSize WebFrameWidgetImpl::Size() {
   return size_;
 }
 
diff --git a/third_party/WebKit/Source/web/WebFrameWidgetImpl.h b/third_party/WebKit/Source/web/WebFrameWidgetImpl.h
index 676840f8..ac28f742 100644
--- a/third_party/WebKit/Source/web/WebFrameWidgetImpl.h
+++ b/third_party/WebKit/Source/web/WebFrameWidgetImpl.h
@@ -75,7 +75,7 @@
 
   // WebWidget functions:
   void Close() override;
-  WebSize size() override;
+  WebSize Size() override;
   void Resize(const WebSize&) override;
   void ResizeVisualViewport(const WebSize&) override;
   void DidEnterFullscreen() override;
diff --git a/third_party/WebKit/Source/web/WebImageDecoder.cpp b/third_party/WebKit/Source/web/WebImageDecoder.cpp
index 0cbd472..1da10eb 100644
--- a/third_party/WebKit/Source/web/WebImageDecoder.cpp
+++ b/third_party/WebKit/Source/web/WebImageDecoder.cpp
@@ -77,9 +77,9 @@
   return private_->IsSizeAvailable();
 }
 
-WebSize WebImageDecoder::size() const {
+WebSize WebImageDecoder::Size() const {
   DCHECK(private_);
-  return private_->size();
+  return private_->Size();
 }
 
 size_t WebImageDecoder::FrameCount() const {
diff --git a/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp b/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp
index 3177631..8ed362f 100644
--- a/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp
+++ b/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp
@@ -1739,7 +1739,7 @@
   bool is_main_frame = !Parent();
   IntSize initial_size = (is_main_frame || !FrameWidget())
                              ? web_view->MainFrameSize()
-                             : (IntSize)FrameWidget()->size();
+                             : (IntSize)FrameWidget()->Size();
   Color base_background_color = web_view->BaseBackgroundColor();
   if (!is_main_frame && Parent()->IsWebRemoteFrame())
     base_background_color = Color::kTransparent;
diff --git a/third_party/WebKit/Source/web/WebViewFrameWidget.cpp b/third_party/WebKit/Source/web/WebViewFrameWidget.cpp
index d8f26dd..e62eba8 100644
--- a/third_party/WebKit/Source/web/WebViewFrameWidget.cpp
+++ b/third_party/WebKit/Source/web/WebViewFrameWidget.cpp
@@ -37,8 +37,8 @@
   delete this;
 }
 
-WebSize WebViewFrameWidget::size() {
-  return web_view_->size();
+WebSize WebViewFrameWidget::Size() {
+  return web_view_->Size();
 }
 
 void WebViewFrameWidget::Resize(const WebSize& size) {
diff --git a/third_party/WebKit/Source/web/WebViewFrameWidget.h b/third_party/WebKit/Source/web/WebViewFrameWidget.h
index bd6a7447..c891504 100644
--- a/third_party/WebKit/Source/web/WebViewFrameWidget.h
+++ b/third_party/WebKit/Source/web/WebViewFrameWidget.h
@@ -43,7 +43,7 @@
 
   // WebFrameWidget overrides:
   void Close() override;
-  WebSize size() override;
+  WebSize Size() override;
   void Resize(const WebSize&) override;
   void ResizeVisualViewport(const WebSize&) override;
   void DidEnterFullscreen() override;
diff --git a/third_party/WebKit/Source/web/WebViewImpl.cpp b/third_party/WebKit/Source/web/WebViewImpl.cpp
index 14a28bb..16ac66b8 100644
--- a/third_party/WebKit/Source/web/WebViewImpl.cpp
+++ b/third_party/WebKit/Source/web/WebViewImpl.cpp
@@ -1794,7 +1794,7 @@
   Deref();  // Balances ref() acquired in WebView::create
 }
 
-WebSize WebViewImpl::size() {
+WebSize WebViewImpl::Size() {
   return size_;
 }
 
@@ -2852,7 +2852,7 @@
   if (!need_animation)
     return;
 
-  FloatSize target_viewport_size(visual_viewport.size());
+  FloatSize target_viewport_size(visual_viewport.Size());
   target_viewport_size.Scale(1 / new_scale);
 
   if (textbox_rect_in_document.Width() <= target_viewport_size.Width()) {
diff --git a/third_party/WebKit/Source/web/WebViewImpl.h b/third_party/WebKit/Source/web/WebViewImpl.h
index 0bb1e38..a22ef37 100644
--- a/third_party/WebKit/Source/web/WebViewImpl.h
+++ b/third_party/WebKit/Source/web/WebViewImpl.h
@@ -109,7 +109,7 @@
 
   // WebWidget methods:
   void Close() override;
-  WebSize size() override;
+  WebSize Size() override;
   void Resize(const WebSize&) override;
   void ResizeVisualViewport(const WebSize&) override;
   void DidEnterFullscreen() override;
diff --git a/third_party/WebKit/Source/web/tests/BrowserControlsTest.cpp b/third_party/WebKit/Source/web/tests/BrowserControlsTest.cpp
index e2a1abc..e047b2c 100644
--- a/third_party/WebKit/Source/web/tests/BrowserControlsTest.cpp
+++ b/third_party/WebKit/Source/web/tests/BrowserControlsTest.cpp
@@ -159,7 +159,7 @@
 TEST_F(BrowserControlsTest, MAYBE(HideOnScrollDown)) {
   WebViewImpl* web_view = Initialize();
   // initialize browser controls to be shown.
-  web_view->ResizeWithBrowserControls(web_view->size(), 50.f, true);
+  web_view->ResizeWithBrowserControls(web_view->Size(), 50.f, true);
   web_view->GetBrowserControls().SetShownRatio(1);
 
   web_view->HandleInputEvent(GenerateEvent(WebInputEvent::kGestureScrollBegin));
@@ -196,7 +196,7 @@
 TEST_F(BrowserControlsTest, MAYBE(ShowOnScrollUp)) {
   WebViewImpl* web_view = Initialize();
   // initialize browser controls to be hidden.
-  web_view->ResizeWithBrowserControls(web_view->size(), 50.f, false);
+  web_view->ResizeWithBrowserControls(web_view->Size(), 50.f, false);
   web_view->GetBrowserControls().SetShownRatio(0);
 
   web_view->HandleInputEvent(GenerateEvent(WebInputEvent::kGestureScrollBegin));
@@ -222,7 +222,7 @@
 TEST_F(BrowserControlsTest, MAYBE(ScrollDownThenUp)) {
   WebViewImpl* web_view = Initialize();
   // initialize browser controls to be shown and position page at 100px.
-  web_view->ResizeWithBrowserControls(web_view->size(), 50.f, true);
+  web_view->ResizeWithBrowserControls(web_view->Size(), 50.f, true);
   web_view->GetBrowserControls().SetShownRatio(1);
   GetFrame()->View()->GetScrollableArea()->SetScrollOffset(ScrollOffset(0, 100),
                                                            kProgrammaticScroll);
@@ -278,7 +278,7 @@
 TEST_F(BrowserControlsTest, MAYBE(ScrollUpThenDown)) {
   WebViewImpl* web_view = Initialize();
   // initialize browser controls to be hidden and position page at 100px.
-  web_view->ResizeWithBrowserControls(web_view->size(), 50.f, false);
+  web_view->ResizeWithBrowserControls(web_view->Size(), 50.f, false);
   web_view->GetBrowserControls().SetShownRatio(0);
   GetFrame()->View()->GetScrollableArea()->SetScrollOffset(ScrollOffset(0, 100),
                                                            kProgrammaticScroll);
@@ -315,7 +315,7 @@
 TEST_F(BrowserControlsTest, MAYBE(HorizontalScroll)) {
   WebViewImpl* web_view = Initialize();
   // initialize browser controls to be shown.
-  web_view->ResizeWithBrowserControls(web_view->size(), 50.f, true);
+  web_view->ResizeWithBrowserControls(web_view->Size(), 50.f, true);
   web_view->GetBrowserControls().SetShownRatio(1);
 
   web_view->HandleInputEvent(GenerateEvent(WebInputEvent::kGestureScrollBegin));
@@ -344,7 +344,7 @@
   web_view->SetPageScaleFactor(2.0);
 
   // Initialize browser controls to be shown.
-  web_view->ResizeWithBrowserControls(web_view->size(), 50.f, true);
+  web_view->ResizeWithBrowserControls(web_view->Size(), 50.f, true);
   web_view->GetBrowserControls().SetShownRatio(1);
 
   web_view->HandleInputEvent(GenerateEvent(WebInputEvent::kGestureScrollBegin));
@@ -399,7 +399,7 @@
   web_view->SetPageScaleFactor(2.0);
 
   // Initialize browser controls to be shown.
-  web_view->ResizeWithBrowserControls(web_view->size(), 50.f, true);
+  web_view->ResizeWithBrowserControls(web_view->Size(), 50.f, true);
   web_view->GetBrowserControls().SetShownRatio(1);
 
   web_view->GetBrowserControls().ScrollBegin();
@@ -416,7 +416,7 @@
 // Scrollable subregions should scroll before browser controls
 TEST_F(BrowserControlsTest, MAYBE(ScrollableSubregionScrollFirst)) {
   WebViewImpl* web_view = Initialize("overflow-scrolling.html");
-  web_view->ResizeWithBrowserControls(web_view->size(), 50.f, true);
+  web_view->ResizeWithBrowserControls(web_view->Size(), 50.f, true);
   web_view->GetBrowserControls().SetShownRatio(1);
   GetFrame()->View()->GetScrollableArea()->SetScrollOffset(ScrollOffset(0, 50),
                                                            kProgrammaticScroll);
@@ -472,7 +472,7 @@
 // Scrollable iframes should scroll before browser controls
 TEST_F(BrowserControlsTest, MAYBE(ScrollableIframeScrollFirst)) {
   WebViewImpl* web_view = Initialize("iframe-scrolling.html");
-  web_view->ResizeWithBrowserControls(web_view->size(), 50.f, true);
+  web_view->ResizeWithBrowserControls(web_view->Size(), 50.f, true);
   web_view->GetBrowserControls().SetShownRatio(1);
   GetFrame()->View()->GetScrollableArea()->SetScrollOffset(ScrollOffset(0, 50),
                                                            kProgrammaticScroll);
@@ -528,13 +528,13 @@
 // Browser controls visibility should remain consistent when height is changed.
 TEST_F(BrowserControlsTest, MAYBE(HeightChangeMaintainsVisibility)) {
   WebViewImpl* web_view = Initialize();
-  web_view->ResizeWithBrowserControls(web_view->size(), 20.f, false);
+  web_view->ResizeWithBrowserControls(web_view->Size(), 20.f, false);
   web_view->GetBrowserControls().SetShownRatio(0);
 
-  web_view->ResizeWithBrowserControls(web_view->size(), 20.f, false);
+  web_view->ResizeWithBrowserControls(web_view->Size(), 20.f, false);
   EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset());
 
-  web_view->ResizeWithBrowserControls(web_view->size(), 40.f, false);
+  web_view->ResizeWithBrowserControls(web_view->Size(), 40.f, false);
   EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset());
 
   // Scroll up to show browser controls.
@@ -543,14 +543,14 @@
 
   // Changing height of a fully shown browser controls should correctly adjust
   // content offset
-  web_view->ResizeWithBrowserControls(web_view->size(), 30.f, false);
+  web_view->ResizeWithBrowserControls(web_view->Size(), 30.f, false);
   EXPECT_FLOAT_EQ(30.f, web_view->GetBrowserControls().ContentOffset());
 }
 
 // Zero delta should not have any effect on browser controls.
 TEST_F(BrowserControlsTest, MAYBE(ZeroHeightMeansNoEffect)) {
   WebViewImpl* web_view = Initialize();
-  web_view->ResizeWithBrowserControls(web_view->size(), 0, false);
+  web_view->ResizeWithBrowserControls(web_view->Size(), 0, false);
   web_view->GetBrowserControls().SetShownRatio(0);
   GetFrame()->View()->GetScrollableArea()->SetScrollOffset(ScrollOffset(0, 100),
                                                            kProgrammaticScroll);
@@ -577,7 +577,7 @@
 TEST_F(BrowserControlsTest, MAYBE(ScrollUpPastLimitDoesNotHide)) {
   WebViewImpl* web_view = Initialize();
   // Initialize browser controls to be shown
-  web_view->ResizeWithBrowserControls(web_view->size(), 50.f, true);
+  web_view->ResizeWithBrowserControls(web_view->Size(), 50.f, true);
   web_view->GetBrowserControls().SetShownRatio(1);
   // Use 2x scale so that both visual viewport and frameview are scrollable
   web_view->SetPageScaleFactor(2.0);
@@ -609,7 +609,7 @@
 // Browser controls should honor its constraints
 TEST_F(BrowserControlsTest, MAYBE(StateConstraints)) {
   WebViewImpl* web_view = Initialize();
-  web_view->ResizeWithBrowserControls(web_view->size(), 50.f, false);
+  web_view->ResizeWithBrowserControls(web_view->Size(), 50.f, false);
   GetFrame()->View()->GetScrollableArea()->SetScrollOffset(ScrollOffset(0, 100),
                                                            kProgrammaticScroll);
 
diff --git a/third_party/WebKit/Source/web/tests/FrameSerializerTest.cpp b/third_party/WebKit/Source/web/tests/FrameSerializerTest.cpp
index 23867da..709cc96 100644
--- a/third_party/WebKit/Source/web/tests/FrameSerializerTest.cpp
+++ b/third_party/WebKit/Source/web/tests/FrameSerializerTest.cpp
@@ -107,11 +107,11 @@
   }
 
   void RegisterRewriteURL(const char* from_url, const char* to_url) {
-    rewrite_ur_ls_.insert(from_url, to_url);
+    rewrite_urls_.insert(from_url, to_url);
   }
 
   void RegisterSkipURL(const char* url) {
-    skip_ur_ls_.push_back(KURL(base_url_, url));
+    skip_urls_.push_back(KURL(base_url_, url));
   }
 
   void Serialize(const char* url) {
@@ -173,27 +173,27 @@
       }
     }
 
-    if (complete_url.IsNull() || !rewrite_ur_ls_.Contains(complete_url))
+    if (complete_url.IsNull() || !rewrite_urls_.Contains(complete_url))
       return false;
 
     StringBuilder uri_builder;
     uri_builder.Append(rewrite_folder_);
     uri_builder.Append('/');
-    uri_builder.Append(rewrite_ur_ls_.at(complete_url));
+    uri_builder.Append(rewrite_urls_.at(complete_url));
     rewritten_link = uri_builder.ToString();
     return true;
   }
 
   bool ShouldSkipResourceWithURL(const KURL& url) {
-    return skip_ur_ls_.Contains(url);
+    return skip_urls_.Contains(url);
   }
 
   FrameTestHelpers::WebViewHelper helper_;
   std::string folder_;
   KURL base_url_;
   Deque<SerializedResource> resources_;
-  HashMap<String, String> rewrite_ur_ls_;
-  Vector<String> skip_ur_ls_;
+  HashMap<String, String> rewrite_urls_;
+  Vector<String> skip_urls_;
   String rewrite_folder_;
 };
 
diff --git a/third_party/WebKit/Source/web/tests/VisualViewportTest.cpp b/third_party/WebKit/Source/web/tests/VisualViewportTest.cpp
index 64d7c1d..39e2e168 100644
--- a/third_party/WebKit/Source/web/tests/VisualViewportTest.cpp
+++ b/third_party/WebKit/Source/web/tests/VisualViewportTest.cpp
@@ -205,22 +205,22 @@
 
   VisualViewport& visualViewport = frame()->GetPage()->GetVisualViewport();
 
-  IntSize webViewSize = webViewImpl()->size();
+  IntSize webViewSize = webViewImpl()->Size();
 
   // Make sure the visual viewport was initialized.
-  EXPECT_SIZE_EQ(webViewSize, visualViewport.size());
+  EXPECT_SIZE_EQ(webViewSize, visualViewport.Size());
 
   // Resizing the WebView should change the VisualViewport.
   webViewSize = IntSize(640, 480);
   webViewImpl()->Resize(webViewSize);
-  EXPECT_SIZE_EQ(webViewSize, IntSize(webViewImpl()->size()));
-  EXPECT_SIZE_EQ(webViewSize, visualViewport.size());
+  EXPECT_SIZE_EQ(webViewSize, IntSize(webViewImpl()->Size()));
+  EXPECT_SIZE_EQ(webViewSize, visualViewport.Size());
 
   // Resizing the visual viewport shouldn't affect the WebView.
   IntSize newViewportSize = IntSize(320, 200);
   visualViewport.SetSize(newViewportSize);
-  EXPECT_SIZE_EQ(webViewSize, IntSize(webViewImpl()->size()));
-  EXPECT_SIZE_EQ(newViewportSize, visualViewport.size());
+  EXPECT_SIZE_EQ(webViewSize, IntSize(webViewImpl()->Size()));
+  EXPECT_SIZE_EQ(newViewportSize, visualViewport.Size());
 }
 
 // Make sure that the visibleContentRect method acurately reflects the scale and
@@ -459,7 +459,7 @@
   VisualViewport& visualViewport = frame()->GetPage()->GetVisualViewport();
 
   // Initial visible rect should be the whole frame.
-  EXPECT_SIZE_EQ(IntSize(webViewImpl()->size()), visualViewport.size());
+  EXPECT_SIZE_EQ(IntSize(webViewImpl()->Size()), visualViewport.Size());
 
   // Viewport is whole frame.
   IntSize size = IntSize(400, 200);
@@ -472,7 +472,7 @@
   expectedRect.Scale(0.5);
   visualViewport.SetScale(2);
   EXPECT_EQ(2, visualViewport.Scale());
-  EXPECT_SIZE_EQ(size, visualViewport.size());
+  EXPECT_SIZE_EQ(size, visualViewport.Size());
   EXPECT_FLOAT_RECT_EQ(expectedRect, visualViewport.VisibleRect());
 
   // Move the viewport.
@@ -703,13 +703,13 @@
   // typically the scale will be clamped to prevent it from actually being
   // larger.
   visualViewport.SetSize(IntSize(330, 250));
-  EXPECT_SIZE_EQ(IntSize(330, 250), visualViewport.size());
+  EXPECT_SIZE_EQ(IntSize(330, 250), visualViewport.Size());
 
   // Resize both the viewport and the frame to be larger.
   webViewImpl()->Resize(IntSize(640, 480));
   webViewImpl()->UpdateAllLifecyclePhases();
-  EXPECT_SIZE_EQ(IntSize(webViewImpl()->size()), visualViewport.size());
-  EXPECT_SIZE_EQ(IntSize(webViewImpl()->size()),
+  EXPECT_SIZE_EQ(IntSize(webViewImpl()->Size()), visualViewport.Size());
+  EXPECT_SIZE_EQ(IntSize(webViewImpl()->Size()),
                  frame()->View()->FrameRect().Size());
   visualViewport.SetLocation(FloatPoint(1000, 1000));
   EXPECT_FLOAT_POINT_EQ(FloatPoint(320, 240),
@@ -819,8 +819,8 @@
 TEST_P(VisualViewportTest, TestVisualViewportGetsSizeInAutoSizeMode) {
   initializeWithDesktopSettings();
 
-  EXPECT_SIZE_EQ(IntSize(0, 0), IntSize(webViewImpl()->size()));
-  EXPECT_SIZE_EQ(IntSize(0, 0), frame()->GetPage()->GetVisualViewport().size());
+  EXPECT_SIZE_EQ(IntSize(0, 0), IntSize(webViewImpl()->Size()));
+  EXPECT_SIZE_EQ(IntSize(0, 0), frame()->GetPage()->GetVisualViewport().Size());
 
   webViewImpl()->EnableAutoResizeMode(WebSize(10, 10), WebSize(1000, 1000));
 
@@ -828,7 +828,7 @@
   navigateTo(m_baseURL + "200-by-300.html");
 
   EXPECT_SIZE_EQ(IntSize(200, 300),
-                 frame()->GetPage()->GetVisualViewport().size());
+                 frame()->GetPage()->GetVisualViewport().Size());
 }
 
 // Test that the text selection handle's position accounts for the visual
@@ -1445,7 +1445,7 @@
                                    browserControlsHeight / minPageScale),
                  frameView.FrameRect().Size());
   EXPECT_SIZE_EQ(IntSize(500, visualViewportHeight - browserControlsHeight),
-                 visualViewport.size());
+                 visualViewport.Size());
 
   // Scroll all the way to the bottom, hiding the browser controls in the
   // process.
@@ -1474,7 +1474,7 @@
   webViewImpl()->ResizeWithBrowserControls(WebSize(500, visualViewportHeight),
                                            20, false);
 
-  EXPECT_SIZE_EQ(IntSize(500, visualViewportHeight), visualViewport.size());
+  EXPECT_SIZE_EQ(IntSize(500, visualViewportHeight), visualViewport.Size());
   EXPECT_SIZE_EQ(IntSize(250, visualViewportHeight / pageScale),
                  visualViewport.VisibleRect().Size());
   EXPECT_SIZE_EQ(IntSize(1000, layoutViewportHeight),
@@ -1514,7 +1514,7 @@
                  visualViewport.VisibleRect().Size());
   EXPECT_SIZE_EQ(IntSize(1000, layoutViewportHeight),
                  frameView.FrameRect().Size());
-  EXPECT_SIZE_EQ(IntSize(500, visualViewportHeight), visualViewport.size());
+  EXPECT_SIZE_EQ(IntSize(500, visualViewportHeight), visualViewport.Size());
 
   // Scroll all the way to the bottom, showing the the browser controls in the
   // process. (This could happen via window.scrollTo during a scroll, for
@@ -1548,7 +1548,7 @@
       WebSize(500, visualViewportHeight - browserControlsHeight), 20, true);
 
   EXPECT_SIZE_EQ(IntSize(500, visualViewportHeight - browserControlsHeight),
-                 visualViewport.size());
+                 visualViewport.Size());
   EXPECT_SIZE_EQ(
       IntSize(250, (visualViewportHeight - browserControlsHeight) / pageScale),
       visualViewport.VisibleRect().Size());
@@ -1565,7 +1565,7 @@
 // the main frame's scroll offset. crbug.com/428193.
 TEST_P(VisualViewportTest, TestTopControlHidingResizeDoesntClampMainFrame) {
   initializeWithAndroidSettings();
-  webViewImpl()->ResizeWithBrowserControls(webViewImpl()->size(), 500, false);
+  webViewImpl()->ResizeWithBrowserControls(webViewImpl()->Size(), 500, false);
   webViewImpl()->ApplyViewportDeltas(WebFloatSize(), WebFloatSize(),
                                      WebFloatSize(), 1, 1);
   webViewImpl()->ResizeWithBrowserControls(WebSize(1000, 1000), 500, true);
diff --git a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
index 5b9d629..f7aacb4 100644
--- a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
+++ b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
@@ -3041,7 +3041,7 @@
       web_view_helper.Resize(
           WebSize(viewport_size.width, viewport_size.height));
       web_view_helper.WebView()->SetPageScaleFactor(initial_page_scale_factor);
-      ASSERT_EQ(viewport_size, web_view_helper.WebView()->size());
+      ASSERT_EQ(viewport_size, web_view_helper.WebView()->Size());
       ASSERT_EQ(initial_page_scale_factor,
                 web_view_helper.WebView()->PageScaleFactor());
       web_view_helper.Resize(
@@ -7422,8 +7422,8 @@
   WebElement element = node.To<WebElement>();
   WebImage image = element.ImageContents();
   ASSERT_FALSE(image.IsNull());
-  EXPECT_EQ(image.size().width, 10);
-  EXPECT_EQ(image.size().height, 10);
+  EXPECT_EQ(image.Size().width, 10);
+  EXPECT_EQ(image.Size().height, 10);
   SkBitmap bitmap = image.GetSkBitmap();
   SkAutoLockPixels locker(bitmap);
   EXPECT_EQ(bitmap.getColor(0, 0), SK_ColorBLUE);
@@ -8523,8 +8523,8 @@
   SkCanvas canvas(bitmap);
   canvas.drawColor(SK_ColorGREEN);
 
-  EXPECT_EQ(reference_bitmap_size.Width(), drag_image->size().Width());
-  EXPECT_EQ(reference_bitmap_size.Height(), drag_image->size().Height());
+  EXPECT_EQ(reference_bitmap_size.Width(), drag_image->Size().Width());
+  EXPECT_EQ(reference_bitmap_size.Height(), drag_image->Size().Height());
   const SkBitmap& drag_bitmap = drag_image->Bitmap();
   SkAutoLockPixels lock_pixel(drag_bitmap);
   EXPECT_EQ(
@@ -8728,8 +8728,8 @@
   // after swapping to a local frame.
   Page* page =
       ToWebViewImpl(local_frame->View())->GetPage()->MainFrame()->GetPage();
-  EXPECT_EQ(size.width, page->GetVisualViewport().size().Width());
-  EXPECT_EQ(size.height, page->GetVisualViewport().size().Height());
+  EXPECT_EQ(size.width, page->GetVisualViewport().Size().Width());
+  EXPECT_EQ(size.height, page->GetVisualViewport().Size().Height());
 
   // Manually reset to break WebViewHelper's dependency on the stack allocated
   // TestWebFrameClient.
diff --git a/third_party/WebKit/Source/web/tests/WebImageTest.cpp b/third_party/WebKit/Source/web/tests/WebImageTest.cpp
index c5df21e..dc938eab 100644
--- a/third_party/WebKit/Source/web/tests/WebImageTest.cpp
+++ b/third_party/WebKit/Source/web/tests/WebImageTest.cpp
@@ -49,7 +49,7 @@
   ASSERT_TRUE(data.Get());
 
   WebImage image = WebImage::FromData(WebData(data), WebSize());
-  EXPECT_TRUE(image.size() == WebSize(1, 1));
+  EXPECT_TRUE(image.Size() == WebSize(1, 1));
   SkAutoLockPixels auto_lock(image.GetSkBitmap());
   EXPECT_EQ(SkColorSetARGB(255, 255, 255, 255),
             image.GetSkBitmap().getColor(0, 0));
@@ -61,8 +61,8 @@
 
   WebVector<WebImage> images = WebImage::FramesFromData(WebData(data));
   ASSERT_EQ(2u, images.size());
-  EXPECT_TRUE(images[0].size() == WebSize(2, 2));
-  EXPECT_TRUE(images[1].size() == WebSize(1, 1));
+  EXPECT_TRUE(images[0].Size() == WebSize(2, 2));
+  EXPECT_TRUE(images[1].Size() == WebSize(1, 1));
   SkAutoLockPixels auto_lock1(images[0].GetSkBitmap());
   EXPECT_EQ(SkColorSetARGB(255, 255, 255, 255),
             images[0].GetSkBitmap().getColor(0, 0));
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py
index fecac2d..6a792fc 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py
@@ -213,10 +213,6 @@
         if not self._options.dry_run:
             self._write_json_files(summarized_full_results, summarized_failing_results, initial_results, running_all_tests)
 
-            if self._options.write_full_results_to:
-                self._filesystem.copyfile(self._filesystem.join(self._results_directory, "full_results.json"),
-                                          self._options.write_full_results_to)
-
             self._upload_json_files()
 
             results_path = self._filesystem.join(self._results_directory, "results.html")
@@ -495,8 +491,15 @@
         # from a file url for results.html and Chromium doesn't allow that.
         json_results_generator.write_json(self._filesystem, summarized_failing_results, full_results_path, callback="ADD_RESULTS")
 
+        # Write out the JSON files suitable for other tools to process.
+        # As the output can be quite large (as there are 60k+ tests) we also
+        # support only outputting the failing results.
+        if self._options.json_failing_test_results:
+            # FIXME(tansell): Make sure this includes an *unexpected* results
+            # (IE Passing when expected to be failing.)
+            json_results_generator.write_json(self._filesystem, summarized_failing_results, self._options.json_failing_test_results)
         if self._options.json_test_results:
-            json_results_generator.write_json(self._filesystem, summarized_failing_results, self._options.json_test_results)
+            json_results_generator.write_json(self._filesystem, summarized_full_results, self._options.json_test_results)
 
         _log.debug("Finished writing JSON files.")
 
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
index c5fe3cdf..aec5831 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
@@ -164,9 +164,14 @@
                 default=False,
                 help='Show all failures in results.html, rather than only regressions'),
             optparse.make_option(
-                '--json-test-results',
-                action='store',
-                help='Path to write the JSON test results to.'),
+                '--json-test-results',              # New name from json_results_generator
+                '--write-full-results-to',          # Old argument name
+                '--isolated-script-test-output',    # Isolated API
+                help='Path to write the JSON test results for *all* tests.'),
+            # FIXME(tansell): Remove this option if nobody is found who needs it.
+            optparse.make_option(
+                '--json-failing-test-results',
+                help='Path to write the JSON test results for only *failing* tests.'),
             optparse.make_option(
                 '--new-baseline',
                 action='store_true',
@@ -466,10 +471,6 @@
                 '--test-results-server',
                 default='',
                 help='If specified, upload results json files to this appengine server.'),
-            optparse.make_option(
-                '--write-full-results-to',
-                help=('If specified, copy full_results.json from the results dir to the '
-                      'specified path.')),
         ]))
 
     option_parser = optparse.OptionParser()
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py
index 76f8050..7e1af3c 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py
@@ -170,7 +170,7 @@
 
     def test_basic(self):
         options, args = parse_args(
-            extra_args=['--json-test-results', '/tmp/json_test_results.json'],
+            extra_args=['--json-failing-test-results', '/tmp/json_failing_test_results.json'],
             tests_included=True)
         logging_stream = StringIO.StringIO()
         stdout = StringIO.StringIO()
@@ -210,9 +210,6 @@
         json_to_eval = failing_results_text.replace('ADD_RESULTS(', '').replace(');', '')
         self.assertEqual(json.loads(json_to_eval), details.summarized_failing_results)
 
-        json_test_results = host.filesystem.read_text_file('/tmp/json_test_results.json')
-        self.assertEqual(json.loads(json_test_results), details.summarized_failing_results)
-
         full_results_text = host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json')
         self.assertEqual(json.loads(full_results_text), details.summarized_full_results)
 
@@ -1007,12 +1004,38 @@
                                 tests_included=True, host=host)
         self.assertIn('OUT:', err.getvalue())
 
-    def test_write_full_results_to(self):
-        host = MockHost()
-        details, _, _ = logging_run(['--write-full-results-to', '/tmp/full_results.json',
-                                     '--order', 'natural'], host=host)
+    def _check_json_test_results(self, host, details):
         self.assertEqual(details.exit_code, 0)
-        self.assertTrue(host.filesystem.exists('/tmp/full_results.json'))
+        self.assertTrue(host.filesystem.exists('/tmp/json_results.json'))
+        json_failing_test_results = host.filesystem.read_text_file('/tmp/json_results.json')
+        self.assertEqual(json.loads(json_failing_test_results), details.summarized_full_results)
+
+    def test_json_test_results(self):
+        host = MockHost()
+        details, _, _ = logging_run(
+            ['--json-test-results', '/tmp/json_results.json'], host=host)
+        self._check_json_test_results(host, details)
+
+    def test_json_test_results_alias_write_full_results_to(self):
+        host = MockHost()
+        details, _, _ = logging_run(
+            ['--write-full-results-to', '/tmp/json_results.json'], host=host)
+        self._check_json_test_results(host, details)
+
+    def test_json_test_results_alias_isolated_script_test_output(self):
+        host = MockHost()
+        details, _, _ = logging_run(
+            ['--isolated-script-test-output', '/tmp/json_results.json'], host=host)
+        self._check_json_test_results(host, details)
+
+    def test_json_failing_test_results(self):
+        host = MockHost()
+        details, _, _ = logging_run(
+            ['--json-failing-test-results', '/tmp/json_failing_results.json'], host=host)
+        self.assertEqual(details.exit_code, 0)
+        self.assertTrue(host.filesystem.exists('/tmp/json_failing_results.json'))
+        json_failing_test_results = host.filesystem.read_text_file('/tmp/json_failing_results.json')
+        self.assertEqual(json.loads(json_failing_test_results), details.summarized_failing_results)
 
     def test_buildbot_results_are_printed_on_early_exit(self):
         stdout = StringIO.StringIO()
diff --git a/third_party/WebKit/public/platform/WebExternalBitmap.h b/third_party/WebKit/public/platform/WebExternalBitmap.h
index 0ea28fd..62fc5bc 100644
--- a/third_party/WebKit/public/platform/WebExternalBitmap.h
+++ b/third_party/WebKit/public/platform/WebExternalBitmap.h
@@ -37,7 +37,7 @@
 
 class WebExternalBitmap {
  public:
-  virtual WebSize size() = 0;
+  virtual WebSize Size() = 0;
 
   // Sets the size of the bitmap. This may reallocate the bitmap and
   // invalidate the pointer returned from pixels if the size changes.
diff --git a/third_party/WebKit/public/platform/WebImage.h b/third_party/WebKit/public/platform/WebImage.h
index 151529c0..5fed0176 100644
--- a/third_party/WebKit/public/platform/WebImage.h
+++ b/third_party/WebKit/public/platform/WebImage.h
@@ -77,7 +77,7 @@
   BLINK_PLATFORM_EXPORT void Assign(const WebImage&);
 
   BLINK_PLATFORM_EXPORT bool IsNull() const;
-  BLINK_PLATFORM_EXPORT WebSize size() const;
+  BLINK_PLATFORM_EXPORT WebSize Size() const;
 
 #if INSIDE_BLINK
   BLINK_PLATFORM_EXPORT WebImage(WTF::PassRefPtr<Image>);
diff --git a/third_party/WebKit/public/platform/WebMediaPlayer.h b/third_party/WebKit/public/platform/WebMediaPlayer.h
index 959631b..4f17e2e 100644
--- a/third_party/WebKit/public/platform/WebMediaPlayer.h
+++ b/third_party/WebKit/public/platform/WebMediaPlayer.h
@@ -177,19 +177,20 @@
 
   // TODO(kbr): remove non-|target| version. crbug.com/349871
   //
-  // Do a GPU-GPU texture copy of the natural size of the current
-  // video frame to |texture|. Caller is responsible for allocating
-  // |texture| with the appropriate size. If the copy is impossible or
-  // fails, it returns false.
+  // Do a GPU-GPU texture copy of the current video frame to |texture|,
+  // reallocating |texture| at the appropriate size with given internal
+  // format, format, and type if necessary. If the copy is impossible
+  // or fails, it returns false.
   virtual bool CopyVideoTextureToPlatformTexture(gpu::gles2::GLES2Interface*,
                                                  unsigned texture,
+                                                 unsigned internal_format,
+                                                 unsigned format,
+                                                 unsigned type,
                                                  bool premultiply_alpha,
                                                  bool flip_y) {
     return false;
   }
 
-  // TODO(kbr): when updating calling code to use this, remove the
-  // |internalFormat| and |type| parameters. crbug.com/349871
   // Do a GPU-GPU textures copy. If the copy is impossible or fails, it returns
   // false.
   virtual bool CopyVideoTextureToPlatformTexture(gpu::gles2::GLES2Interface*,
diff --git a/third_party/WebKit/public/platform/WebScrollbar.h b/third_party/WebKit/public/platform/WebScrollbar.h
index 0a32bfb..8d15d9c 100644
--- a/third_party/WebKit/public/platform/WebScrollbar.h
+++ b/third_party/WebKit/public/platform/WebScrollbar.h
@@ -72,7 +72,7 @@
   virtual int Value() const = 0;
 
   virtual WebPoint Location() const = 0;
-  virtual WebSize size() const = 0;
+  virtual WebSize Size() const = 0;
   virtual bool Enabled() const = 0;
   virtual int Maximum() const = 0;
   virtual int TotalSize() const = 0;
diff --git a/third_party/WebKit/public/web/WebImageDecoder.h b/third_party/WebKit/public/web/WebImageDecoder.h
index 9631d686..70552482 100644
--- a/third_party/WebKit/public/web/WebImageDecoder.h
+++ b/third_party/WebKit/public/web/WebImageDecoder.h
@@ -63,7 +63,7 @@
   BLINK_EXPORT bool IsSizeAvailable() const;
 
   // Returns the size of the image.
-  BLINK_EXPORT WebSize size() const;
+  BLINK_EXPORT WebSize Size() const;
 
   // Gives frame count for the image. For multiple frames, decoder scans the
   // image data for the count.
diff --git a/third_party/WebKit/public/web/WebView.h b/third_party/WebKit/public/web/WebView.h
index 8dce5a3d..e811392b 100644
--- a/third_party/WebKit/public/web/WebView.h
+++ b/third_party/WebKit/public/web/WebView.h
@@ -81,7 +81,7 @@
 
   // WebWidget overrides.
   using WebWidget::Close;
-  using WebWidget::size;
+  using WebWidget::Size;
   using WebWidget::Resize;
   using WebWidget::ResizeVisualViewport;
   using WebWidget::DidEnterFullscreen;
diff --git a/third_party/WebKit/public/web/WebWidget.h b/third_party/WebKit/public/web/WebWidget.h
index e91cbe36..9183285c 100644
--- a/third_party/WebKit/public/web/WebWidget.h
+++ b/third_party/WebKit/public/web/WebWidget.h
@@ -60,7 +60,7 @@
   virtual void Close() {}
 
   // Returns the current size of the WebWidget.
-  virtual WebSize size() { return WebSize(); }
+  virtual WebSize Size() { return WebSize(); }
 
   // Called to resize the WebWidget.
   virtual void Resize(const WebSize&) {}
diff --git a/tools/binary_size/libsupersize/archive.py b/tools/binary_size/libsupersize/archive.py
index 0991f0b..7443c37 100644
--- a/tools/binary_size/libsupersize/archive.py
+++ b/tools/binary_size/libsupersize/archive.py
@@ -11,9 +11,13 @@
 import gzip
 import logging
 import os
+import multiprocessing
+import posixpath
 import re
 import subprocess
 import sys
+import tempfile
+import zipfile
 
 import describe
 import file_format
@@ -205,12 +209,16 @@
   Groups include:
    * Symbols that have [clone] in their name (created by compiler optimization).
    * Star symbols (such as "** merge strings", and "** symbol gap")
+
+  To view created groups:
+    Print(size_info.symbols.Filter(lambda s: s.IsGroup()), recursive=True)
   """
   # http://unix.stackexchange.com/questions/223013/function-symbol-gets-part-suffix-after-compilation
   # Example name suffixes:
-  #     [clone .part.322]
-  #     [clone .isra.322]
-  #     [clone .constprop.1064]
+  #     [clone .part.322]  # GCC
+  #     [clone .isra.322]  # GCC
+  #     [clone .constprop.1064]  # GCC
+  #     [clone .11064]  # clang
 
   # Step 1: Create name map, find clones, collect star syms into replacements.
   logging.debug('Creating name -> symbol map')
@@ -351,6 +359,9 @@
     _PostProcessSizeInfo(size_info)
 
   if logging.getLogger().isEnabledFor(logging.DEBUG):
+    # Padding is reported in size coverage logs.
+    if raw_only:
+      _CalculatePadding(size_info.raw_symbols)
     for line in describe.DescribeSizeInfoCoverage(size_info):
       logging.info(line)
   logging.info('Recorded info for %d symbols', len(size_info.raw_symbols))
@@ -386,6 +397,12 @@
   return section_sizes
 
 
+def _ArchFromElf(elf_path, tool_prefix):
+  args = [tool_prefix + 'readelf', '-h', elf_path]
+  stdout = subprocess.check_output(args)
+  return re.search('Machine:\s*(\S+)', stdout).group(1)
+
+
 def _ParseGnArgs(args_path):
   """Returns a list of normalized "key=value" strings."""
   args = {}
@@ -399,15 +416,30 @@
   return ["%s=%s" % x for x in sorted(args.iteritems())]
 
 
+def _ElfInfoFromApk(apk_path, apk_so_path, tool_prefix):
+  """Returns a tuple of (build_id, section_sizes)."""
+  with zipfile.ZipFile(apk_path) as apk, \
+       tempfile.NamedTemporaryFile() as f:
+    f.write(apk.read(apk_so_path))
+    f.flush()
+    build_id = BuildIdFromElf(f.name, tool_prefix)
+    section_sizes = _SectionSizesFromElf(f.name, tool_prefix)
+    return build_id, section_sizes
+
+
 def AddArguments(parser):
   parser.add_argument('size_file', help='Path to output .size file.')
-  parser.add_argument('--elf-file', required=True,
+  parser.add_argument('--apk-file',
+                      help='.apk file to measure. When set, --elf-file will be '
+                            'derived (if unset). Providing the .apk allows '
+                            'for the size of packed relocations to be recorded')
+  parser.add_argument('--elf-file',
                       help='Path to input ELF file. Currently used for '
-                           'capturing metadata. Pass "" to skip '
-                           'metadata collection.')
+                           'capturing metadata.')
   parser.add_argument('--map-file',
                       help='Path to input .map(.gz) file. Defaults to '
-                           '{{elf_file}}.map(.gz)?')
+                           '{{elf_file}}.map(.gz)?. If given without '
+                           '--elf-file, no size metadata will be recorded.')
   parser.add_argument('--no-source-paths', action='store_true',
                       help='Do not use .ninja files to map '
                            'object_path -> source_path')
@@ -421,26 +453,47 @@
   if not args.size_file.endswith('.size'):
     parser.error('size_file must end with .size')
 
-  if args.map_file:
-    if (not args.map_file.endswith('.map')
-        and not args.map_file.endswith('.map.gz')):
+  elf_path = args.elf_file
+  map_path = args.map_file
+  apk_path = args.apk_file
+  any_input = apk_path or elf_path or map_path
+  if not any_input:
+    parser.error('Most pass at least one of --apk-file, --elf-file, --map-file')
+  lazy_paths = paths.LazyPaths(args=args, input_file=any_input)
+
+  if apk_path:
+    with zipfile.ZipFile(apk_path) as z:
+      lib_infos = [f for f in z.infolist()
+                   if f.filename.endswith('.so') and f.file_size > 0]
+    assert lib_infos, 'APK has no .so files.'
+    # TODO(agrieve): Add support for multiple .so files, and take into account
+    #     secondary architectures.
+    apk_so_path = max(lib_infos, key=lambda x:x.file_size).filename
+    logging.debug('Sub-apk path=%s', apk_so_path)
+    if not elf_path:
+      elf_path = os.path.join(
+          lazy_paths.output_directory, 'lib.unstripped',
+          os.path.basename(apk_so_path.replace('crazy.', '')))
+      logging.debug('Detected --elf-file=%s', elf_path)
+
+  if map_path:
+    if not map_path.endswith('.map') and not map_path.endswith('.map.gz'):
       parser.error('Expected --map-file to end with .map or .map.gz')
-    map_file_path = args.map_file
   else:
-    map_file_path = args.elf_file + '.map'
-    if not os.path.exists(map_file_path):
-      map_file_path += '.gz'
-    if not os.path.exists(map_file_path):
+    map_path = elf_path + '.map'
+    if not os.path.exists(map_path):
+      map_path += '.gz'
+    if not os.path.exists(map_path):
       parser.error('Could not find .map(.gz)? file. Use --map-file.')
 
-  lazy_paths = paths.LazyPaths(args=args, input_file=args.elf_file)
   metadata = None
-  if args.elf_file:
+  if elf_path:
     logging.debug('Constructing metadata')
-    git_rev = _DetectGitRevision(os.path.dirname(args.elf_file))
-    build_id = BuildIdFromElf(args.elf_file, lazy_paths.tool_prefix)
+    git_rev = _DetectGitRevision(os.path.dirname(elf_path))
+    architecture = _ArchFromElf(elf_path, lazy_paths.tool_prefix)
+    build_id = BuildIdFromElf(elf_path, lazy_paths.tool_prefix)
     timestamp_obj = datetime.datetime.utcfromtimestamp(os.path.getmtime(
-        args.elf_file))
+        elf_path))
     timestamp = calendar.timegm(timestamp_obj.timetuple())
     gn_args = _ParseGnArgs(os.path.join(lazy_paths.output_directory, 'args.gn'))
 
@@ -449,26 +502,55 @@
 
     metadata = {
         models.METADATA_GIT_REVISION: git_rev,
-        models.METADATA_MAP_FILENAME: relative_to_out(map_file_path),
-        models.METADATA_ELF_FILENAME: relative_to_out(args.elf_file),
+        models.METADATA_MAP_FILENAME: relative_to_out(map_path),
+        models.METADATA_ELF_ARCHITECTURE: architecture,
+        models.METADATA_ELF_FILENAME: relative_to_out(elf_path),
         models.METADATA_ELF_MTIME: timestamp,
         models.METADATA_ELF_BUILD_ID: build_id,
         models.METADATA_GN_ARGS: gn_args,
     }
 
-  size_info = CreateSizeInfo(map_file_path, lazy_paths,
-                             no_source_paths=args.no_source_paths,
-                             raw_only=True)
+    if apk_path:
+      metadata[models.METADATA_APK_FILENAME] = relative_to_out(apk_path)
+      # Extraction takes around 1 second, so do it in parallel.
+      pool_of_one = multiprocessing.Pool(1)
+      apk_elf_result = pool_of_one.apply_async(
+          _ElfInfoFromApk, (apk_path, apk_so_path, lazy_paths.tool_prefix))
+      pool_of_one.close()
+
+  size_info = CreateSizeInfo(
+      map_path, lazy_paths, no_source_paths=args.no_source_paths, raw_only=True)
 
   if metadata:
     size_info.metadata = metadata
     logging.debug('Validating section sizes')
-    elf_section_sizes = _SectionSizesFromElf(args.elf_file,
-                                             lazy_paths.tool_prefix)
+    elf_section_sizes = _SectionSizesFromElf(elf_path, lazy_paths.tool_prefix)
     for k, v in elf_section_sizes.iteritems():
       assert v == size_info.section_sizes.get(k), (
           'ELF file and .map file do not match.')
 
+    if apk_path:
+      logging.debug('Extracting section sizes from .so within .apk')
+      unstripped_section_sizes = size_info.section_sizes
+      apk_build_id, size_info.section_sizes = apk_elf_result.get()
+      assert apk_build_id == build_id, (
+          'BuildID for %s within %s did not match the one at %s' %
+          (apk_so_path, apk_path, elf_path))
+
+      packed_section_name = None
+      if architecture == 'ARM':
+        packed_section_name = '.rel.dyn'
+      elif architecture == 'AArch64':
+        packed_section_name = '.rela.dyn'
+
+      if packed_section_name:
+        logging.debug('Recording size of unpacked relocations')
+        if packed_section_name not in size_info.section_sizes:
+          logging.warning('Packed section not present: %s', packed_section_name)
+        else:
+          size_info.section_sizes['%s (unpacked)' % packed_section_name] = (
+              unstripped_section_sizes.get(packed_section_name))
+
   logging.info('Recording metadata: \n  %s',
                '\n  '.join(describe.DescribeMetadata(size_info.metadata)))
   logging.info('Saving result to %s', args.size_file)
diff --git a/tools/binary_size/libsupersize/console.py b/tools/binary_size/libsupersize/console.py
index 34de184..3dbb6a8 100644
--- a/tools/binary_size/libsupersize/console.py
+++ b/tools/binary_size/libsupersize/console.py
@@ -77,11 +77,9 @@
 
     if len(size_infos) == 1:
       self._variables['size_info'] = size_infos[0]
-      self._variables['symbols'] = size_infos[0].symbols
     else:
       for i, size_info in enumerate(size_infos):
         self._variables['size_info%d' % (i + 1)] = size_info
-        self._variables['symbols%d' % (i + 1)] = size_info.symbols
 
   def _PrintFunc(self, obj, verbose=False, recursive=False, use_pager=None,
                  to_file=None):
@@ -150,19 +148,19 @@
         'Print(size_info, verbose=True)',
         '',
         '# Show two levels of .text, grouped by first two subdirectories',
-        'text_syms = symbols.WhereInSection("t")',
+        'text_syms = size_info.symbols.WhereInSection("t")',
         'by_path = text_syms.GroupBySourcePath(depth=2)',
         'Print(by_path.WhereBiggerThan(1024))',
         '',
         '# Show all non-vtable generated symbols',
-        'generated_syms = symbols.WhereIsGenerated()',
+        'generated_syms = size_info.symbols.WhereIsGenerated()',
         'Print(generated_syms.WhereNameMatches(r"vtable").Inverted())',
         '',
         '# Show all symbols that have "print" in their name or path, except',
         '# those within components/.',
         '# Note: Could have also used Inverted(), as above.',
         '# Note: Use "help(ExpandRegex)" for more about what {{_print_}} does.',
-        'print_syms = symbols.WhereMatches(r"{{_print_}}")',
+        'print_syms = size_info.symbols.WhereMatches(r"{{_print_}}")',
         'Print(print_syms - print_syms.WherePathMatches(r"^components/"))',
         '',
         '# Diff two .size files and save result to a file:',
diff --git a/tools/binary_size/libsupersize/integration_test.py b/tools/binary_size/libsupersize/integration_test.py
index 830c335..30fa4fd 100755
--- a/tools/binary_size/libsupersize/integration_test.py
+++ b/tools/binary_size/libsupersize/integration_test.py
@@ -71,7 +71,7 @@
   def test_Archive(self):
     with tempfile.NamedTemporaryFile(suffix='.size') as temp_file:
       _RunApp('archive', temp_file.name, '--output-directory', _TEST_DATA_DIR,
-              '--map-file', _TEST_MAP_PATH, '--elf-file', '')
+              '--map-file', _TEST_MAP_PATH)
       size_info = archive.LoadAndPostProcessSizeInfo(temp_file.name)
     # Check that saving & loading is the same as directly parsing the .map.
     expected_size_info = self._CloneSizeInfo()
@@ -90,7 +90,7 @@
     # Just tests that it doesn't crash.
     with tempfile.NamedTemporaryFile(suffix='.size') as temp_file:
       _RunApp('archive', temp_file.name, '--no-source-paths',
-              '--map-file', _TEST_MAP_PATH, '--elf-file', '')
+              '--map-file', _TEST_MAP_PATH)
       archive.LoadAndPostProcessSizeInfo(temp_file.name)
 
   @_CompareWithGolden
diff --git a/tools/binary_size/libsupersize/models.py b/tools/binary_size/libsupersize/models.py
index 178ab0b8..dac0072 100644
--- a/tools/binary_size/libsupersize/models.py
+++ b/tools/binary_size/libsupersize/models.py
@@ -31,7 +31,9 @@
 
 
 METADATA_GIT_REVISION = 'git_revision'
+METADATA_APK_FILENAME = 'apk_file_name'  # Path relative to output_directory.
 METADATA_MAP_FILENAME = 'map_file_name'  # Path relative to output_directory.
+METADATA_ELF_ARCHITECTURE = 'elf_arch'  # "Machine" field from readelf -h
 METADATA_ELF_FILENAME = 'elf_file_name'  # Path relative to output_directory.
 METADATA_ELF_MTIME = 'elf_mtime'  # int timestamp in utc.
 METADATA_ELF_BUILD_ID = 'elf_build_id'
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 18ad474..03543d5 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -21985,6 +21985,14 @@
   </summary>
 </histogram>
 
+<histogram name="GPU.DirectComposition.FramesSinceColorSpaceChange"
+    units="frames">
+  <owner>jbauman@chromium.org</owner>
+  <summary>
+    How many frames since the last time the layer color format was changed.
+  </summary>
+</histogram>
+
 <histogram name="GPU.DirectComposition.OverlaysSupported"
     enum="BooleanOverlaySupported">
   <owner>jbauman@chromium.org</owner>
@@ -74153,17 +74161,17 @@
 
 <histogram name="Translate.LanguageVerification"
     enum="TranslateLanguageVerification">
-  <owner>kenjibaheux@google.com</owner>
+  <owner>yyushkina@chromium.org</owner>
   <summary>
-    For each page load, measures whether the provided Content-Language header
-    matches the language determined by CLD.  Beyond directly matching or
-    mismatching the Content-Language header, CLD can complement the
-    Content-Language.  For example, suppose the Content-Language header
-    specifies 'zh' (general Chinese), a language code that the Translate server
-    does not support.  In this case, CLD can detect a subcode like '-TW' or
-    '-CN', resulting in language codes 'zh-TW' and 'zh-CN', which the Translate
-    server supports.  This is referred to as &quot;complementing a language
-    subcode&quot;.
+    For each page load, measures whether the provided HTML language (i.e. the
+    page lang attribute if it exists, otherwise the header Content-Language
+    value) matches the language determined by CLD. Beyond directly matching or
+    mismatching the HTML language, CLD can complement the HTML language. For
+    example, suppose the HTML language is 'zh' (general Chinese), a language
+    code that the Translate server does not support.  In this case, CLD can
+    detect a subcode like '-TW' or '-CN', resulting in language codes 'zh-TW'
+    and 'zh-CN', which the Translate server supports. This is referred to as
+    &quot;complementing a language subcode&quot;.
   </summary>
 </histogram>
 
diff --git a/tools/perf/benchmarks/blink_style.py b/tools/perf/benchmarks/blink_style.py
index b468c68..73e1929 100644
--- a/tools/perf/benchmarks/blink_style.py
+++ b/tools/perf/benchmarks/blink_style.py
@@ -22,8 +22,7 @@
     return 'blink_style.top_25'
 
 
-@benchmark.Disabled('all') # crbug.com/702194
-#@benchmark.Enabled('android')
+@benchmark.Enabled('android')
 class BlinkStyleKeyMobileSites(perf_benchmark.PerfBenchmark):
   """Measures performance of Blink's style engine (CSS Parsing, Style Recalc,
   etc.) on key mobile sites.
diff --git a/tools/perf/benchmarks/oilpan_gc_times.py b/tools/perf/benchmarks/oilpan_gc_times.py
index bee7b82..91711d5 100644
--- a/tools/perf/benchmarks/oilpan_gc_times.py
+++ b/tools/perf/benchmarks/oilpan_gc_times.py
@@ -48,8 +48,7 @@
     return 'oilpan_gc_times.key_silk_cases'
 
 
-@benchmark.Disabled('all') # crbug.com/702194
-#@benchmark.Enabled('android')
+@benchmark.Enabled('android')
 class OilpanGCTimesSyncScrollKeyMobileSites(perf_benchmark.PerfBenchmark):
   tag = 'sync_scroll'
   test = oilpan_gc_times.OilpanGCTimesForSmoothness
diff --git a/tools/perf/benchmarks/smoothness.py b/tools/perf/benchmarks/smoothness.py
index ef0b3069..733eb12 100644
--- a/tools/perf/benchmarks/smoothness.py
+++ b/tools/perf/benchmarks/smoothness.py
@@ -153,8 +153,7 @@
               possible_browser.platform.GetOSName() == 'win')
 
 
-@benchmark.Disabled('all') # crbug.com/702194
-#@benchmark.Enabled('android')
+@benchmark.Enabled('android')
 @benchmark.Owner(emails=['vmiura@chromium.org', 'tdresser@chromium.org'])
 class SmoothnessKeyMobileSites(_Smoothness):
   """Measures rendering statistics while scrolling down the key mobile sites.
@@ -277,8 +276,7 @@
             possible_browser.browser_type == 'reference')
 
 
-@benchmark.Disabled('all') # crbug.com/702194
-#@benchmark.Enabled('android')
+@benchmark.Enabled('android')
 @benchmark.Owner(emails=['tdresser@chromium.org', 'rbyers@chromium.org'])
 class SmoothnessSyncScrollKeyMobileSites(_Smoothness):
   """Measures rendering statistics for the key mobile sites with synchronous
diff --git a/tools/perf/benchmarks/v8.py b/tools/perf/benchmarks/v8.py
index e671c67..f835c10 100644
--- a/tools/perf/benchmarks/v8.py
+++ b/tools/perf/benchmarks/v8.py
@@ -43,8 +43,7 @@
     return 'v8.top_25_smooth'
 
 
-@benchmark.Disabled('all') # crbug.com/702194
-#@benchmark.Enabled('android')
+@benchmark.Enabled('android')
 @benchmark.Owner(emails=['hpayer@chromium.org', 'rmcilroy@chromium.org'])
 class V8KeyMobileSites(perf_benchmark.PerfBenchmark):
   """Measures V8 GC metrics on the while scrolling down key mobile sites.
diff --git a/ui/compositor/layer_unittest.cc b/ui/compositor/layer_unittest.cc
index bc3639c..865504a 100644
--- a/ui/compositor/layer_unittest.cc
+++ b/ui/compositor/layer_unittest.cc
@@ -2202,15 +2202,9 @@
   DISALLOW_COPY_AND_ASSIGN(TestMetricsReporter);
 };
 
-// https://crbug.com/709080
-#if defined(OS_WIN)
-#define MAYBE_ReportMetrics DISABLED_ReportMetrics
-#else
-#define MAYBE_ReportMetrics ReportMetrics
-#endif
 // Starts an animation and tests that incrementing compositor frame count can
 // be used to report animation smoothness metrics.
-TEST_F(LayerWithRealCompositorTest, MAYBE_ReportMetrics) {
+TEST_F(LayerWithRealCompositorTest, ReportMetrics) {
   std::unique_ptr<Layer> root(CreateLayer(LAYER_SOLID_COLOR));
   GetCompositor()->SetRootLayer(root.get());
   LayerAnimator* animator = root->GetAnimator();
diff --git a/ui/display/manager/display_manager.cc b/ui/display/manager/display_manager.cc
index 2a6e59bb..6b34dedc 100644
--- a/ui/display/manager/display_manager.cc
+++ b/ui/display/manager/display_manager.cc
@@ -487,6 +487,21 @@
   return iter->second;
 }
 
+void DisplayManager::SetSelectedModeForDisplayId(
+    int64_t display_id,
+    const scoped_refptr<ManagedDisplayMode>& display_mode) {
+  ManagedDisplayInfo info = GetDisplayInfo(display_id);
+  auto iter = FindDisplayMode(info, display_mode);
+  if (iter == info.display_modes().end()) {
+    LOG(WARNING) << "Unsupported display mode was requested:"
+                 << "size=" << display_mode->size().ToString()
+                 << ", ui scale=" << display_mode->ui_scale()
+                 << ", scale factor=" << display_mode->device_scale_factor();
+  }
+
+  display_modes_[display_id] = *iter;
+}
+
 bool DisplayManager::IsDisplayUIScalingEnabled() const {
   return GetDisplayIdForUIScaling() != kInvalidDisplayId;
 }
diff --git a/ui/display/manager/display_manager.h b/ui/display/manager/display_manager.h
index 5524f31..9de768fc 100644
--- a/ui/display/manager/display_manager.h
+++ b/ui/display/manager/display_manager.h
@@ -208,11 +208,18 @@
   scoped_refptr<ManagedDisplayMode> GetActiveModeForDisplayId(
       int64_t display_id) const;
 
-  // Returns the display's selected mode. This returns false and doesn't set
-  // |mode_out| if the display mode is in default.
+  // Returns the display's selected mode.
   scoped_refptr<ManagedDisplayMode> GetSelectedModeForDisplayId(
       int64_t display_id) const;
 
+  // Sets the selected mode of |display_id| to |display_mode| if it's a
+  // supported mode. This doesn't trigger reconfiguration or observers
+  // notifications. This is suitable to be used from within an observer
+  // notification to prevent reentrance to UpdateDisplaysWith().
+  void SetSelectedModeForDisplayId(
+      int64_t display_id,
+      const scoped_refptr<ManagedDisplayMode>& display_mode);
+
   // Tells if the virtual resolution feature is enabled.
   bool IsDisplayUIScalingEnabled() const;
 
diff --git a/ui/views/animation/ink_drop_impl_unittest.cc b/ui/views/animation/ink_drop_impl_unittest.cc
index d63ce21..2a9904e 100644
--- a/ui/views/animation/ink_drop_impl_unittest.cc
+++ b/ui/views/animation/ink_drop_impl_unittest.cc
@@ -15,6 +15,7 @@
 #include "ui/compositor/scoped_animation_duration_scale_mode.h"
 #include "ui/views/animation/test/ink_drop_impl_test_api.h"
 #include "ui/views/animation/test/test_ink_drop_host.h"
+#include "ui/views/test/platform_test_helper.h"
 #include "ui/views/test/views_test_base.h"
 
 namespace views {
@@ -235,6 +236,13 @@
 
 TEST_F(InkDropImplTest,
        SettingHighlightStateDuringStateExitIsntAllowedDeathTest) {
+  // gtest death tests, such as EXPECT_DCHECK_DEATH(), can not work in the
+  // presence of fork() and other process launching. In views-mus, we have
+  // already launched additional processes for our service manager. Performing
+  // this test under mus is impossible.
+  if (PlatformTestHelper::IsMus())
+    return;
+
   ::testing::FLAGS_gtest_death_test_style = "threadsafe";
 
   test::InkDropImplTestApi::SetStateOnExitHighlightState::Install(
diff --git a/ui/views/layout/grid_layout_unittest.cc b/ui/views/layout/grid_layout_unittest.cc
index 35cc80b..91c759efe 100644
--- a/ui/views/layout/grid_layout_unittest.cc
+++ b/ui/views/layout/grid_layout_unittest.cc
@@ -7,6 +7,7 @@
 #include "base/compiler_specific.h"
 #include "base/test/gtest_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "ui/views/test/platform_test_helper.h"
 #include "ui/views/view.h"
 
 namespace views {
@@ -772,6 +773,13 @@
 // GridLayout must guard against this as it hasn't yet updated the internal
 // structures it uses to calculate Layout, so will give bogus results.
 TEST_F(GridLayoutTest, LayoutOnAddDeath) {
+  // gtest death tests, such as EXPECT_DCHECK_DEATH(), can not work in the
+  // presence of fork() and other process launching. In views-mus, we have
+  // already launched additional processes for our service manager. Performing
+  // this test under mus is impossible.
+  if (PlatformTestHelper::IsMus())
+    return;
+
   // Don't use the |layout| data member from the test harness, otherwise
   // SetLayoutManager() can take not take ownership.
   GridLayout* grid_layout = new GridLayout(&host);
diff --git a/ui/webui/resources/cr_elements/network/cr_network_icon.html b/ui/webui/resources/cr_elements/network/cr_network_icon.html
index d9fbc66..9158262 100644
--- a/ui/webui/resources/cr_elements/network/cr_network_icon.html
+++ b/ui/webui/resources/cr_elements/network/cr_network_icon.html
@@ -26,6 +26,7 @@
 
       /* Upper-left corner */
       #technology {
+        --iron-icon-fill-color: #5a5a5a;
         height: 20px;
         left: 0;
         position: absolute;
@@ -35,11 +36,12 @@
 
       /* Lower-right corner */
       #secure {
-        height: 20px;
+        --iron-icon-fill-color: #5a5a5a;
+        height: 8px;
         left: 16px;
         position: absolute;
         top: 16px;
-        width: 20px;
+        width: 8px;
       }
 
       /* Images */
@@ -131,7 +133,7 @@
         icon="[[getTechnology_(networkState)]]">
     </iron-icon>
     <iron-icon id="secure" hidden="[[!showSecure_(networkState)]]"
-        icon="network:badge-secure">
+        icon="network8:badge-secure">
     </iron-icon>
   </template>
   <script src="cr_network_icon.js"></script>
diff --git a/ui/webui/resources/cr_elements/network/network_icons.html b/ui/webui/resources/cr_elements/network/network_icons.html
index 21551ba4..8097dbf 100644
--- a/ui/webui/resources/cr_elements/network/network_icons.html
+++ b/ui/webui/resources/cr_elements/network/network_icons.html
@@ -1,11 +1,11 @@
 <link rel="import" href="chrome://resources/html/polymer.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-iconset-svg/iron-iconset-svg.html">
 
+<!-- These icons were converted from source .svg files. -->
+
 <iron-iconset-svg name="network" size="20">
   <svg>
     <defs>
-      <!-- These icons were converted from source .svg files. -->
-
       <!-- Badges -->
       <g id="badge-1x"><path d="M0 1h1V0h1v5H1V2H0M3 2h1v1H3V2zm1 1h1v1H4V3zM3 4h1v1H3V4zm2 0h1v1H5V4zm0-2h1v1H5V2z"/></g>
       <g id="badge-3g"><path d="M9 0H5v5h4V2H7v1h1v1H6V1h3M3 3v2h1V0H0v1h3v1H1v1h2zM0 4h3v1H0V4z"/></g>
@@ -17,7 +17,17 @@
       <g id="badge-hspa-plus"><path d="M0 0h1v2h2V0h1v5H3V3H1v2H0M7 1V0H6v1H5v1h1v1h1V2h1V1H7z"/></g>
       <g id="badge-lte"><path d="M0 0v5h3V4H1V0M3 0h5v1H6v4H5V1H3M9 0v5h3V4h-2V3h1V2h-1V1h2V0"/></g>
       <g id="badge-lte-advanced"><path d="M0 0v5h3V4H1V0M3 0h5v1H6v4H5V1H3M9 0v5h3V4h-2V3h1V2h-1V1h2V0M15 1V0h-1v1h-1v1h1v1h1V2h1V1h-1z"/></g>
-      <g id="badge-secure"><path d="M1 4c0-.552.45-1 .99-1h4.02c.546 0 .99.444.99 1v3c0 .552-.45 1-.99 1H1.99C1.445 8 1 7.556 1 7V4zm2.5 1h1v1h-1V5z"/><path d="M2 1h1v3H2V1zm3 0h1v3H5V1zm.5-1v1h-3V0h3z"/></g>
+    </defs>
+  </svg>
+</iron-iconset-svg>
+
+<iron-iconset-svg name="network8" size="8">
+  <svg>
+    <defs>
+      <g id="badge-secure" fill-rule="evenodd">
+        <path d="M1 4c0-.552.45-1 .99-1h4.02c.546 0 .99.444.99 1v3c0 .552-.45 1-.99 1H1.99C1.445 8 1 7.556 1 7V4zm2.5 1h1v1h-1V5z"/>
+        <path d="M2 1h1v3H2V1zm3 0h1v3H5V1zm.5-1v1h-3V0h3z"/>
+      </g>
     </defs>
   </svg>
 </iron-iconset-svg>
diff --git a/ui/webui/resources/html/md_select_css.html b/ui/webui/resources/html/md_select_css.html
index 0c483be..f9a8062 100644
--- a/ui/webui/resources/html/md_select_css.html
+++ b/ui/webui/resources/html/md_select_css.html
@@ -34,10 +34,13 @@
 
       /* Mirroring paper-dropdown-menu disabled style. */
       .md-select[disabled] {
-        border-bottom: 1px dashed var(--secondary-text-color);
+        pointer-events: none;
+      }
+
+      .md-select[disabled],
+      .md-select[disabled] + .md-select-underline {
         color: var(--secondary-text-color);
         opacity: 0.65;
-        pointer-events: none;
       }
 
       :host-context([dir=rtl]) .md-select {
@@ -77,6 +80,10 @@
         transition: transform 200ms ease-out;
       }
 
+      .md-select[disabled] + .md-select-underline {
+        border-top: 1px dashed var(--secondary-text-color);
+      }
+
       .md-select-wrapper {
         display: inline-block;
         max-width: 100%;