diff --git a/DEPS b/DEPS
index 4644760..bb8507f 100644
--- a/DEPS
+++ b/DEPS
@@ -40,11 +40,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': '26c90e04797e15c37ec00e0f836292b8a207d294',
+  'skia_revision': '96cf2065f356ff93722953aa6a9d665fc377c40b',
   # 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': '8dd39fe35df127390b0f1de3e236c39cd9222697',
+  'v8_revision': '31cf05f86bedaa512b8509290848e9317af67be7',
   # 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': 'c83c28092f67f352cbd690138151b253dfdf547b',
+  'pdfium_revision': '8c1a66b6c55dfce51b6b2c2c5de479b97b9792ed',
   # 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.
@@ -163,7 +163,7 @@
     Var('chromium_git') + '/external/leveldb.git' + '@' + 'a53934a3ae1244679f812d998a4f16f2c7f309a6',
 
   'src/third_party/snappy/src':
-    Var('chromium_git') + '/external/github.com/google/snappy.git' + '@' + '1cd3ab02e9dcbc1b76781530fb4981e4eac61b50',
+    Var('chromium_git') + '/external/github.com/google/snappy.git' + '@' + '8b60aac4fdbbb8f1dcce778accb5c04136c3a908',
 
   'src/tools/gyp':
     Var('chromium_git') + '/external/gyp.git' + '@' + 'e7079f0e0e14108ab0dba58728ff219637458563',
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 699a62b..ee6ab23 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -340,6 +340,7 @@
 
 _ANDROID_SPECIFIC_PYDEPS_FILES = [
     'build/android/test_runner.pydeps',
+    'build/android/test_wrapper/logdog_wrapper.pydeps',
     'net/tools/testserver/testserver.pydeps',
 ]
 
diff --git a/WATCHLISTS b/WATCHLISTS
index 479e1ae5..5302ca2 100644
--- a/WATCHLISTS
+++ b/WATCHLISTS
@@ -806,6 +806,12 @@
         'ui/gl/gl_.*egl.*|'\
         'ui/gl/gl_.*ozone.*'
     },
+    'page_info' : {
+      'filepath': 'chrome/browser/ui/page_info/'\
+                  '|chrome/browser/ui/.*/page_info/'\
+                  '|chrome/android/java/src/org/chromium/chrome/browser/pageinfo/'\
+                  '|ios/chrome/browser/ui/omnibox/page_info_'
+  },
     'page_load_metrics' : {
       'filepath': 'chrome/browser/page_load_metrics/'\
                   '|chrome/common/page_load_metrics/'\
@@ -2050,6 +2056,8 @@
                       'iclelland+watch@chromuim.org'],
     'ozone': ['kalyan.kondapally@intel.com',
               'ozone-reviews@chromium.org'],
+    'page_info' : ['lgarron+watch@chromium.org',
+                   'raymes+watch@chromium.org'],
     'page_load_metrics' : ['csharrison+watch@chromium.org',
                            'loading-reviews+metrics@chromium.org',
                            'speed-metrics-reviews@chromium.org'],
diff --git a/ash/accelerators/accelerator_controller_delegate_aura.cc b/ash/accelerators/accelerator_controller_delegate_aura.cc
index 79b857aa..a974f88 100644
--- a/ash/accelerators/accelerator_controller_delegate_aura.cc
+++ b/ash/accelerators/accelerator_controller_delegate_aura.cc
@@ -25,23 +25,18 @@
 #include "ash/magnifier/magnification_controller.h"
 #include "ash/public/cpp/shell_window_ids.h"
 #include "ash/root_window_controller.h"
-#include "ash/rotator/window_rotation.h"
 #include "ash/screenshot_delegate.h"
 #include "ash/shell.h"
 #include "ash/touch/touch_hud_debug.h"
 #include "ash/utility/screenshot_controller.h"
 #include "ash/wm/power_button_controller.h"
 #include "ash/wm/window_state_aura.h"
-#include "ash/wm/window_util.h"
 #include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/metrics/user_metrics.h"
 #include "base/sys_info.h"
 #include "third_party/skia/include/core/SkColor.h"
 #include "ui/base/accelerators/accelerator.h"
-#include "ui/compositor/layer.h"
-#include "ui/compositor/layer_animation_sequence.h"
-#include "ui/compositor/layer_animator.h"
 #include "ui/display/manager/display_manager.h"
 #include "ui/display/screen.h"
 #include "ui/events/event.h"
@@ -103,23 +98,6 @@
       display::Display::ROTATION_SOURCE_USER);
 }
 
-// Rotate the active window.
-void HandleRotateActiveWindow() {
-  base::RecordAction(UserMetricsAction("Accel_Rotate_Active_Window"));
-  aura::Window* active_window = wm::GetActiveWindow();
-  if (active_window) {
-    // The rotation animation bases its target transform on the current
-    // rotation and position. Since there could be an animation in progress
-    // right now, queue this animation so when it starts it picks up a neutral
-    // rotation and position. Use replace so we only enqueue one at a time.
-    active_window->layer()->GetAnimator()->set_preemption_strategy(
-        ui::LayerAnimator::REPLACE_QUEUED_ANIMATIONS);
-    active_window->layer()->GetAnimator()->StartAnimation(
-        new ui::LayerAnimationSequence(
-            base::MakeUnique<WindowRotation>(360, active_window->layer())));
-  }
-}
-
 void HandleTakeWindowScreenshot(ScreenshotDelegate* screenshot_delegate) {
   base::RecordAction(UserMetricsAction("Accel_Take_Window_Screenshot"));
   DCHECK(screenshot_delegate);
@@ -210,7 +188,6 @@
     case POWER_PRESSED:
     case POWER_RELEASED:
     case ROTATE_SCREEN:
-    case ROTATE_WINDOW:
     case SCALE_UI_DOWN:
     case SCALE_UI_RESET:
     case SCALE_UI_UP:
@@ -262,7 +239,6 @@
     case POWER_PRESSED:
     case POWER_RELEASED:
     case ROTATE_SCREEN:
-    case ROTATE_WINDOW:
     case TAKE_PARTIAL_SCREENSHOT:
     case TAKE_SCREENSHOT:
     case TAKE_WINDOW_SCREENSHOT:
@@ -336,9 +312,6 @@
     case ROTATE_SCREEN:
       HandleRotateScreen();
       break;
-    case ROTATE_WINDOW:
-      HandleRotateActiveWindow();
-      break;
     case SCALE_UI_DOWN:
       accelerators::ZoomInternalDisplay(false /* down */);
       break;
diff --git a/ash/common/accelerators/accelerator_controller.cc b/ash/common/accelerators/accelerator_controller.cc
index d1077cd..e4af731e 100644
--- a/ash/common/accelerators/accelerator_controller.cc
+++ b/ash/common/accelerators/accelerator_controller.cc
@@ -42,8 +42,10 @@
 #include "ash/common/wm_window.h"
 #include "ash/resources/vector_icons/vector_icons.h"
 #include "ash/root_window_controller.h"
+#include "ash/rotator/window_rotation.h"
 #include "ash/shell.h"
 #include "ash/strings/grit/ash_strings.h"
+#include "ash/wm/window_util.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/metrics/user_metrics.h"
 #include "base/strings/string_split.h"
@@ -55,6 +57,9 @@
 #include "ui/base/ime/chromeos/ime_keyboard.h"
 #include "ui/base/ime/chromeos/input_method_manager.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/compositor/layer.h"
+#include "ui/compositor/layer_animation_sequence.h"
+#include "ui/compositor/layer_animator.h"
 #include "ui/gfx/paint_vector_icon.h"
 #include "ui/keyboard/keyboard_controller.h"
 #include "ui/message_center/message_center.h"
@@ -288,6 +293,23 @@
   WmShell::Get()->new_window_controller()->RestoreTab();
 }
 
+// Rotate the active window.
+void HandleRotateActiveWindow() {
+  base::RecordAction(UserMetricsAction("Accel_Rotate_Active_Window"));
+  aura::Window* active_window = wm::GetActiveWindow();
+  if (!active_window)
+    return;
+  // The rotation animation bases its target transform on the current
+  // rotation and position. Since there could be an animation in progress
+  // right now, queue this animation so when it starts it picks up a neutral
+  // rotation and position. Use replace so we only enqueue one at a time.
+  active_window->layer()->GetAnimator()->set_preemption_strategy(
+      ui::LayerAnimator::REPLACE_QUEUED_ANIMATIONS);
+  active_window->layer()->GetAnimator()->StartAnimation(
+      new ui::LayerAnimationSequence(
+          base::MakeUnique<WindowRotation>(360, active_window->layer())));
+}
+
 void HandleShowKeyboardOverlay() {
   base::RecordAction(UserMetricsAction("Accel_Show_Keyboard_Overlay"));
   WmShell::Get()->new_window_controller()->ShowKeyboardOverlay();
@@ -929,6 +951,7 @@
     case OPEN_GET_HELP:
     case PRINT_UI_HIERARCHIES:
     case RESTORE_TAB:
+    case ROTATE_WINDOW:
     case SHOW_IME_MENU_BUBBLE:
     case SHOW_KEYBOARD_OVERLAY:
     case SHOW_SYSTEM_TRAY_BUBBLE:
@@ -1099,6 +1122,9 @@
     case RESTORE_TAB:
       HandleRestoreTab();
       break;
+    case ROTATE_WINDOW:
+      HandleRotateActiveWindow();
+      break;
     case SHOW_IME_MENU_BUBBLE:
       HandleShowImeMenuBubble();
       break;
diff --git a/ash/common/devtools/ash_devtools_dom_agent.cc b/ash/common/devtools/ash_devtools_dom_agent.cc
index f72c249..058f10e 100644
--- a/ash/common/devtools/ash_devtools_dom_agent.cc
+++ b/ash/common/devtools/ash_devtools_dom_agent.cc
@@ -185,17 +185,19 @@
     observer.OnWidgetBoundsChanged(widget);
 }
 
-void AshDevToolsDOMAgent::OnChildViewRemoved(views::View* view,
-                                             views::View* parent) {
+void AshDevToolsDOMAgent::OnChildViewRemoved(views::View* parent,
+                                             views::View* view) {
   RemoveViewTree(view, parent, true);
 }
 
-void AshDevToolsDOMAgent::OnChildViewAdded(views::View* view) {
+void AshDevToolsDOMAgent::OnChildViewAdded(views::View* parent,
+                                           views::View* view) {
   AddViewTree(view);
 }
 
-void AshDevToolsDOMAgent::OnChildViewReordered(views::View* view) {
-  RemoveViewTree(view, view->parent(), false);
+void AshDevToolsDOMAgent::OnChildViewReordered(views::View* parent,
+                                               views::View* view) {
+  RemoveViewTree(view, parent, false);
   AddViewTree(view);
 }
 
diff --git a/ash/common/devtools/ash_devtools_dom_agent.h b/ash/common/devtools/ash_devtools_dom_agent.h
index 9799043..758bf63 100644
--- a/ash/common/devtools/ash_devtools_dom_agent.h
+++ b/ash/common/devtools/ash_devtools_dom_agent.h
@@ -67,9 +67,9 @@
                              const gfx::Rect& new_bounds) override;
 
   // views::ViewObserver
-  void OnChildViewRemoved(views::View* view, views::View* parent) override;
-  void OnChildViewAdded(views::View* view) override;
-  void OnChildViewReordered(views::View*) override;
+  void OnChildViewRemoved(views::View* parent, views::View* view) override;
+  void OnChildViewAdded(views::View* parent, views::View* view) override;
+  void OnChildViewReordered(views::View* parent, views::View*) override;
   void OnViewBoundsChanged(views::View* view) override;
 
   WmWindow* GetWindowFromNodeId(int nodeId);
diff --git a/ash/mus/accelerators/accelerator_controller_delegate_mus.cc b/ash/mus/accelerators/accelerator_controller_delegate_mus.cc
index 41e30db5..0dfa273c 100644
--- a/ash/mus/accelerators/accelerator_controller_delegate_mus.cc
+++ b/ash/mus/accelerators/accelerator_controller_delegate_mus.cc
@@ -51,7 +51,6 @@
     case MAGNIFY_SCREEN_ZOOM_OUT:
     case POWER_PRESSED:
     case POWER_RELEASED:
-    case ROTATE_WINDOW:
     case TAKE_PARTIAL_SCREENSHOT:
     case TAKE_SCREENSHOT:
     case TAKE_WINDOW_SCREENSHOT:
diff --git a/base/allocator/partition_allocator/partition_alloc.cc b/base/allocator/partition_allocator/partition_alloc.cc
index cdf85779..bd3823e0 100644
--- a/base/allocator/partition_allocator/partition_alloc.cc
+++ b/base/allocator/partition_allocator/partition_alloc.cc
@@ -246,12 +246,12 @@
 }
 
 #if !defined(ARCH_CPU_64_BITS)
-static NOINLINE void partitionOutOfMemoryWithLotsOfUncommitedPages() {
+static NOINLINE void PartitionOutOfMemoryWithLotsOfUncommitedPages() {
   OOM_CRASH();
 }
 #endif
 
-static NOINLINE void partitionOutOfMemory(const PartitionRootBase* root) {
+static NOINLINE void PartitionOutOfMemory(const PartitionRootBase* root) {
 #if !defined(ARCH_CPU_64_BITS)
   // Check whether this OOM is due to a lot of super pages that are allocated
   // but not committed, probably due to http://crbug.com/421387.
@@ -259,7 +259,7 @@
           root->total_size_of_direct_mapped_pages -
           root->total_size_of_committed_pages >
       kReasonableSizeOfUnusedPages) {
-    partitionOutOfMemoryWithLotsOfUncommitedPages();
+    PartitionOutOfMemoryWithLotsOfUncommitedPages();
   }
 #endif
   if (PartitionRootBase::gOomHandlingFunction)
@@ -267,11 +267,11 @@
   OOM_CRASH();
 }
 
-static NOINLINE void partitionExcessiveAllocationSize() {
+static NOINLINE void PartitionExcessiveAllocationSize() {
   OOM_CRASH();
 }
 
-static NOINLINE void partitionBucketFull() {
+static NOINLINE void PartitionBucketFull() {
   OOM_CRASH();
 }
 
@@ -316,7 +316,7 @@
   return ret;
 }
 
-static void partitionIncreaseCommittedPages(PartitionRootBase* root,
+static void PartitionIncreaseCommittedPages(PartitionRootBase* root,
                                             size_t len) {
   root->total_size_of_committed_pages += len;
   DCHECK(root->total_size_of_committed_pages <=
@@ -324,7 +324,7 @@
              root->total_size_of_direct_mapped_pages);
 }
 
-static void partitionDecreaseCommittedPages(PartitionRootBase* root,
+static void PartitionDecreaseCommittedPages(PartitionRootBase* root,
                                             size_t len) {
   root->total_size_of_committed_pages -= len;
   DCHECK(root->total_size_of_committed_pages <=
@@ -332,18 +332,18 @@
              root->total_size_of_direct_mapped_pages);
 }
 
-static ALWAYS_INLINE void partitionDecommitSystemPages(PartitionRootBase* root,
+static ALWAYS_INLINE void PartitionDecommitSystemPages(PartitionRootBase* root,
                                                        void* address,
                                                        size_t length) {
   DecommitSystemPages(address, length);
-  partitionDecreaseCommittedPages(root, length);
+  PartitionDecreaseCommittedPages(root, length);
 }
 
-static ALWAYS_INLINE void partitionRecommitSystemPages(PartitionRootBase* root,
+static ALWAYS_INLINE void PartitionRecommitSystemPages(PartitionRootBase* root,
                                                        void* address,
                                                        size_t length) {
   RecommitSystemPages(address, length);
-  partitionIncreaseCommittedPages(root, length);
+  PartitionIncreaseCommittedPages(root, length);
 }
 
 static ALWAYS_INLINE void* PartitionAllocPartitionPages(
@@ -364,7 +364,7 @@
     // allocation.
     char* ret = root->next_partition_page;
     root->next_partition_page += total_size;
-    partitionIncreaseCommittedPages(root, total_size);
+    PartitionIncreaseCommittedPages(root, total_size);
     return ret;
   }
 
@@ -379,7 +379,7 @@
     return 0;
 
   root->total_size_of_super_pages += kSuperPageSize;
-  partitionIncreaseCommittedPages(root, total_size);
+  PartitionIncreaseCommittedPages(root, total_size);
 
   root->next_super_page = super_page + kSuperPageSize;
   char* ret = super_page + kPartitionPageSize;
@@ -445,13 +445,13 @@
 }
 
 static ALWAYS_INLINE uint16_t
-partitionBucketPartitionPages(const PartitionBucket* bucket) {
+PartitionBucketPartitionPages(const PartitionBucket* bucket) {
   return (bucket->num_system_pages_per_slot_span +
           (kNumSystemPagesPerPartitionPage - 1)) /
          kNumSystemPagesPerPartitionPage;
 }
 
-static ALWAYS_INLINE void partitionPageReset(PartitionPage* page) {
+static ALWAYS_INLINE void PartitionPageReset(PartitionPage* page) {
   DCHECK(PartitionPageStateIsDecommitted(page));
 
   page->num_unprovisioned_slots = PartitionBucketSlots(page->bucket);
@@ -460,13 +460,13 @@
   page->next_page = nullptr;
 }
 
-static ALWAYS_INLINE void partitionPageSetup(PartitionPage* page,
+static ALWAYS_INLINE void PartitionPageSetup(PartitionPage* page,
                                              PartitionBucket* bucket) {
   // The bucket never changes. We set it up once.
   page->bucket = bucket;
   page->empty_cache_index = -1;
 
-  partitionPageReset(page);
+  PartitionPageReset(page);
 
   // If this page has just a single slot, do not set up page offsets for any
   // page metadata other than the first one. This ensures that attempts to
@@ -474,17 +474,17 @@
   if (page->num_unprovisioned_slots == 1)
     return;
 
-  uint16_t num_partition_pages = partitionBucketPartitionPages(bucket);
-  char* pageCharPtr = reinterpret_cast<char*>(page);
+  uint16_t num_partition_pages = PartitionBucketPartitionPages(bucket);
+  char* page_char_ptr = reinterpret_cast<char*>(page);
   for (uint16_t i = 1; i < num_partition_pages; ++i) {
-    pageCharPtr += kPageMetadataSize;
-    PartitionPage* secondaryPage =
-        reinterpret_cast<PartitionPage*>(pageCharPtr);
-    secondaryPage->page_offset = i;
+    page_char_ptr += kPageMetadataSize;
+    PartitionPage* secondary_page =
+        reinterpret_cast<PartitionPage*>(page_char_ptr);
+    secondary_page->page_offset = i;
   }
 }
 
-static ALWAYS_INLINE char* partitionPageAllocAndFillFreelist(
+static ALWAYS_INLINE char* PartitionPageAllocAndFillFreelist(
     PartitionPage* page) {
   DCHECK(page != &PartitionRootGeneric::gSeedPage);
   uint16_t num_slots = page->num_unprovisioned_slots;
@@ -541,10 +541,10 @@
     page->freelist_head = entry;
     while (--num_new_freelist_entries) {
       freelist_pointer += size;
-      PartitionFreelistEntry* nextEntry =
+      PartitionFreelistEntry* next_entry =
           reinterpret_cast<PartitionFreelistEntry*>(freelist_pointer);
-      entry->next = PartitionFreelistMask(nextEntry);
-      entry = nextEntry;
+      entry->next = PartitionFreelistMask(next_entry);
+      entry = next_entry;
     }
     entry->next = PartitionFreelistMask(0);
   } else {
@@ -561,7 +561,7 @@
 // As potential pages are scanned, they are tidied up according to their state.
 // Empty pages are swept on to the empty page list, decommitted pages on to the
 // decommitted page list and full pages are unlinked from any list.
-static bool partitionSetNewActivePage(PartitionBucket* bucket) {
+static bool PartitionSetNewActivePage(PartitionBucket* bucket) {
   PartitionPage* page = bucket->active_pages_head;
   if (page == &PartitionRootBase::gSeedPage)
     return false;
@@ -597,7 +597,7 @@
       // num_full_pages is a uint16_t for efficient packing so guard against
       // overflow to be safe.
       if (UNLIKELY(!bucket->num_full_pages))
-        partitionBucketFull();
+        PartitionBucketFull();
       // Not necessary but might help stop accidents.
       page->next_page = 0;
     }
@@ -614,14 +614,14 @@
       reinterpret_cast<char*>(page) + 3 * kPageMetadataSize);
 }
 
-static ALWAYS_INLINE void partitionPageSetRawSize(PartitionPage* page,
+static ALWAYS_INLINE void PartitionPageSetRawSize(PartitionPage* page,
                                                   size_t size) {
-  size_t* raw_sizePtr = PartitionPageGetRawSizePtr(page);
-  if (UNLIKELY(raw_sizePtr != nullptr))
-    *raw_sizePtr = size;
+  size_t* raw_size_ptr = PartitionPageGetRawSizePtr(page);
+  if (UNLIKELY(raw_size_ptr != nullptr))
+    *raw_size_ptr = size;
 }
 
-static ALWAYS_INLINE PartitionPage* partitionDirectMap(PartitionRootBase* root,
+static ALWAYS_INLINE PartitionPage* PartitionDirectMap(PartitionRootBase* root,
                                                        int flags,
                                                        size_t raw_size) {
   size_t size = PartitionDirectMapSize(raw_size);
@@ -648,9 +648,9 @@
   if (UNLIKELY(!ptr))
     return nullptr;
 
-  size_t committedPageSize = size + kSystemPageSize;
-  root->total_size_of_direct_mapped_pages += committedPageSize;
-  partitionIncreaseCommittedPages(root, committedPageSize);
+  size_t committed_page_size = size + kSystemPageSize;
+  root->total_size_of_direct_mapped_pages += committed_page_size;
+  PartitionIncreaseCommittedPages(root, committed_page_size);
 
   char* slot = ptr + kPartitionPageSize;
   SetSystemPagesInaccessible(ptr + (kSystemPageSize * 2),
@@ -679,9 +679,9 @@
   DCHECK(!page->empty_cache_index);
   page->bucket = bucket;
   page->freelist_head = reinterpret_cast<PartitionFreelistEntry*>(slot);
-  PartitionFreelistEntry* nextEntry =
+  PartitionFreelistEntry* next_entry =
       reinterpret_cast<PartitionFreelistEntry*>(slot);
-  nextEntry->next = PartitionFreelistMask(0);
+  next_entry->next = PartitionFreelistMask(0);
 
   DCHECK(!bucket->active_pages_head);
   DCHECK(!bucket->empty_pages_head);
@@ -690,21 +690,21 @@
   DCHECK(!bucket->num_full_pages);
   bucket->slot_size = size;
 
-  PartitionDirectMapExtent* mapExtent = partitionPageToDirectMapExtent(page);
-  mapExtent->map_size = map_size - kPartitionPageSize - kSystemPageSize;
-  mapExtent->bucket = bucket;
+  PartitionDirectMapExtent* map_extent = partitionPageToDirectMapExtent(page);
+  map_extent->map_size = map_size - kPartitionPageSize - kSystemPageSize;
+  map_extent->bucket = bucket;
 
   // Maintain the doubly-linked list of all direct mappings.
-  mapExtent->next_extent = root->direct_map_list;
-  if (mapExtent->next_extent)
-    mapExtent->next_extent->prev_extent = mapExtent;
-  mapExtent->prev_extent = nullptr;
-  root->direct_map_list = mapExtent;
+  map_extent->next_extent = root->direct_map_list;
+  if (map_extent->next_extent)
+    map_extent->next_extent->prev_extent = map_extent;
+  map_extent->prev_extent = nullptr;
+  root->direct_map_list = map_extent;
 
   return page;
 }
 
-static ALWAYS_INLINE void partitionDirectUnmap(PartitionPage* page) {
+static ALWAYS_INLINE void PartitionDirectUnmap(PartitionPage* page) {
   PartitionRootBase* root = PartitionPageToRoot(page);
   const PartitionDirectMapExtent* extent = partitionPageToDirectMapExtent(page);
   size_t unmap_size = extent->map_size;
@@ -725,10 +725,10 @@
   // page.
   unmap_size += kPartitionPageSize + kSystemPageSize;
 
-  size_t uncommittedPageSize = page->bucket->slot_size + kSystemPageSize;
-  partitionDecreaseCommittedPages(root, uncommittedPageSize);
-  DCHECK(root->total_size_of_direct_mapped_pages >= uncommittedPageSize);
-  root->total_size_of_direct_mapped_pages -= uncommittedPageSize;
+  size_t uncommitted_page_size = page->bucket->slot_size + kSystemPageSize;
+  PartitionDecreaseCommittedPages(root, uncommitted_page_size);
+  DCHECK(root->total_size_of_direct_mapped_pages >= uncommitted_page_size);
+  root->total_size_of_direct_mapped_pages -= uncommitted_page_size;
 
   DCHECK(!(unmap_size & kPageAllocationGranularityOffsetMask));
 
@@ -747,7 +747,7 @@
   // The slow path is called when the freelist is empty.
   DCHECK(!bucket->active_pages_head->freelist_head);
 
-  PartitionPage* newPage = nullptr;
+  PartitionPage* new_page = nullptr;
 
   // For the PartitionAllocGeneric API, we have a bunch of buckets marked
   // as special cases. We bounce them through to the slow path so that we
@@ -761,88 +761,88 @@
     if (size > kGenericMaxDirectMapped) {
       if (returnNull)
         return nullptr;
-      partitionExcessiveAllocationSize();
+      PartitionExcessiveAllocationSize();
     }
-    newPage = partitionDirectMap(root, flags, size);
-  } else if (LIKELY(partitionSetNewActivePage(bucket))) {
+    new_page = PartitionDirectMap(root, flags, size);
+  } else if (LIKELY(PartitionSetNewActivePage(bucket))) {
     // First, did we find an active page in the active pages list?
-    newPage = bucket->active_pages_head;
-    DCHECK(PartitionPageStateIsActive(newPage));
+    new_page = bucket->active_pages_head;
+    DCHECK(PartitionPageStateIsActive(new_page));
   } else if (LIKELY(bucket->empty_pages_head != nullptr) ||
              LIKELY(bucket->decommitted_pages_head != nullptr)) {
     // Second, look in our lists of empty and decommitted pages.
     // Check empty pages first, which are preferred, but beware that an
     // empty page might have been decommitted.
-    while (LIKELY((newPage = bucket->empty_pages_head) != nullptr)) {
-      DCHECK(newPage->bucket == bucket);
-      DCHECK(PartitionPageStateIsEmpty(newPage) ||
-             PartitionPageStateIsDecommitted(newPage));
-      bucket->empty_pages_head = newPage->next_page;
+    while (LIKELY((new_page = bucket->empty_pages_head) != nullptr)) {
+      DCHECK(new_page->bucket == bucket);
+      DCHECK(PartitionPageStateIsEmpty(new_page) ||
+             PartitionPageStateIsDecommitted(new_page));
+      bucket->empty_pages_head = new_page->next_page;
       // Accept the empty page unless it got decommitted.
-      if (newPage->freelist_head) {
-        newPage->next_page = nullptr;
+      if (new_page->freelist_head) {
+        new_page->next_page = nullptr;
         break;
       }
-      DCHECK(PartitionPageStateIsDecommitted(newPage));
-      newPage->next_page = bucket->decommitted_pages_head;
-      bucket->decommitted_pages_head = newPage;
+      DCHECK(PartitionPageStateIsDecommitted(new_page));
+      new_page->next_page = bucket->decommitted_pages_head;
+      bucket->decommitted_pages_head = new_page;
     }
-    if (UNLIKELY(!newPage) &&
+    if (UNLIKELY(!new_page) &&
         LIKELY(bucket->decommitted_pages_head != nullptr)) {
-      newPage = bucket->decommitted_pages_head;
-      DCHECK(newPage->bucket == bucket);
-      DCHECK(PartitionPageStateIsDecommitted(newPage));
-      bucket->decommitted_pages_head = newPage->next_page;
-      void* addr = PartitionPageToPointer(newPage);
-      partitionRecommitSystemPages(root, addr,
-                                   PartitionBucketBytes(newPage->bucket));
-      partitionPageReset(newPage);
+      new_page = bucket->decommitted_pages_head;
+      DCHECK(new_page->bucket == bucket);
+      DCHECK(PartitionPageStateIsDecommitted(new_page));
+      bucket->decommitted_pages_head = new_page->next_page;
+      void* addr = PartitionPageToPointer(new_page);
+      PartitionRecommitSystemPages(root, addr,
+                                   PartitionBucketBytes(new_page->bucket));
+      PartitionPageReset(new_page);
     }
-    DCHECK(newPage);
+    DCHECK(new_page);
   } else {
     // Third. If we get here, we need a brand new page.
-    uint16_t num_partition_pages = partitionBucketPartitionPages(bucket);
+    uint16_t num_partition_pages = PartitionBucketPartitionPages(bucket);
     void* rawPages =
         PartitionAllocPartitionPages(root, flags, num_partition_pages);
     if (LIKELY(rawPages != nullptr)) {
-      newPage = PartitionPointerToPageNoAlignmentCheck(rawPages);
-      partitionPageSetup(newPage, bucket);
+      new_page = PartitionPointerToPageNoAlignmentCheck(rawPages);
+      PartitionPageSetup(new_page, bucket);
     }
   }
 
   // Bail if we had a memory allocation failure.
-  if (UNLIKELY(!newPage)) {
+  if (UNLIKELY(!new_page)) {
     DCHECK(bucket->active_pages_head == &PartitionRootGeneric::gSeedPage);
     if (returnNull)
       return nullptr;
-    partitionOutOfMemory(root);
+    PartitionOutOfMemory(root);
   }
 
-  bucket = newPage->bucket;
+  bucket = new_page->bucket;
   DCHECK(bucket != &PartitionRootBase::gPagedBucket);
-  bucket->active_pages_head = newPage;
-  partitionPageSetRawSize(newPage, size);
+  bucket->active_pages_head = new_page;
+  PartitionPageSetRawSize(new_page, size);
 
   // If we found an active page with free slots, or an empty page, we have a
   // usable freelist head.
-  if (LIKELY(newPage->freelist_head != nullptr)) {
-    PartitionFreelistEntry* entry = newPage->freelist_head;
-    PartitionFreelistEntry* newHead = PartitionFreelistMask(entry->next);
-    newPage->freelist_head = newHead;
-    newPage->num_allocated_slots++;
+  if (LIKELY(new_page->freelist_head != nullptr)) {
+    PartitionFreelistEntry* entry = new_page->freelist_head;
+    PartitionFreelistEntry* new_head = PartitionFreelistMask(entry->next);
+    new_page->freelist_head = new_head;
+    new_page->num_allocated_slots++;
     return entry;
   }
   // Otherwise, we need to build the freelist.
-  DCHECK(newPage->num_unprovisioned_slots);
-  return partitionPageAllocAndFillFreelist(newPage);
+  DCHECK(new_page->num_unprovisioned_slots);
+  return PartitionPageAllocAndFillFreelist(new_page);
 }
 
-static ALWAYS_INLINE void partitionDecommitPage(PartitionRootBase* root,
+static ALWAYS_INLINE void PartitionDecommitPage(PartitionRootBase* root,
                                                 PartitionPage* page) {
   DCHECK(PartitionPageStateIsEmpty(page));
   DCHECK(!PartitionBucketIsDirectMapped(page->bucket));
   void* addr = PartitionPageToPointer(page);
-  partitionDecommitSystemPages(root, addr, PartitionBucketBytes(page->bucket));
+  PartitionDecommitSystemPages(root, addr, PartitionBucketBytes(page->bucket));
 
   // We actually leave the decommitted page in the active list. We'll sweep
   // it on to the decommitted page list when we next walk the active page
@@ -855,17 +855,17 @@
   DCHECK(PartitionPageStateIsDecommitted(page));
 }
 
-static void partitionDecommitPageIfPossible(PartitionRootBase* root,
+static void PartitionDecommitPageIfPossible(PartitionRootBase* root,
                                             PartitionPage* page) {
   DCHECK(page->empty_cache_index >= 0);
   DCHECK(static_cast<unsigned>(page->empty_cache_index) < kMaxFreeableSpans);
   DCHECK(page == root->global_empty_page_ring[page->empty_cache_index]);
   page->empty_cache_index = -1;
   if (PartitionPageStateIsEmpty(page))
-    partitionDecommitPage(root, page);
+    PartitionDecommitPage(root, page);
 }
 
-static ALWAYS_INLINE void partitionRegisterEmptyPage(PartitionPage* page) {
+static ALWAYS_INLINE void PartitionRegisterEmptyPage(PartitionPage* page) {
   DCHECK(PartitionPageStateIsEmpty(page));
   PartitionRootBase* root = PartitionPageToRoot(page);
 
@@ -877,30 +877,30 @@
     root->global_empty_page_ring[page->empty_cache_index] = 0;
   }
 
-  int16_t currentIndex = root->global_empty_page_ring_index;
-  PartitionPage* pageToDecommit = root->global_empty_page_ring[currentIndex];
+  int16_t current_index = root->global_empty_page_ring_index;
+  PartitionPage* pageToDecommit = root->global_empty_page_ring[current_index];
   // The page might well have been re-activated, filled up, etc. before we get
   // around to looking at it here.
   if (pageToDecommit)
-    partitionDecommitPageIfPossible(root, pageToDecommit);
+    PartitionDecommitPageIfPossible(root, pageToDecommit);
 
   // We put the empty slot span on our global list of "pages that were once
   // empty". thus providing it a bit of breathing room to get re-used before
   // we really free it. This improves performance, particularly on Mac OS X
   // which has subpar memory management performance.
-  root->global_empty_page_ring[currentIndex] = page;
-  page->empty_cache_index = currentIndex;
-  ++currentIndex;
-  if (currentIndex == kMaxFreeableSpans)
-    currentIndex = 0;
-  root->global_empty_page_ring_index = currentIndex;
+  root->global_empty_page_ring[current_index] = page;
+  page->empty_cache_index = current_index;
+  ++current_index;
+  if (current_index == kMaxFreeableSpans)
+    current_index = 0;
+  root->global_empty_page_ring_index = current_index;
 }
 
-static void partitionDecommitEmptyPages(PartitionRootBase* root) {
+static void PartitionDecommitEmptyPages(PartitionRootBase* root) {
   for (size_t i = 0; i < kMaxFreeableSpans; ++i) {
     PartitionPage* page = root->global_empty_page_ring[i];
     if (page)
-      partitionDecommitPageIfPossible(root, page);
+      PartitionDecommitPageIfPossible(root, page);
     root->global_empty_page_ring[i] = nullptr;
   }
 }
@@ -911,19 +911,19 @@
   if (LIKELY(page->num_allocated_slots == 0)) {
     // Page became fully unused.
     if (UNLIKELY(PartitionBucketIsDirectMapped(bucket))) {
-      partitionDirectUnmap(page);
+      PartitionDirectUnmap(page);
       return;
     }
     // If it's the current active page, change it. We bounce the page to
     // the empty list as a force towards defragmentation.
     if (LIKELY(page == bucket->active_pages_head))
-      (void)partitionSetNewActivePage(bucket);
+      (void)PartitionSetNewActivePage(bucket);
     DCHECK(bucket->active_pages_head != page);
 
-    partitionPageSetRawSize(page, 0);
+    PartitionPageSetRawSize(page, 0);
     DCHECK(!PartitionPageGetRawSize(page));
 
-    partitionRegisterEmptyPage(page);
+    PartitionRegisterEmptyPage(page);
   } else {
     DCHECK(!PartitionBucketIsDirectMapped(bucket));
     // Ensure that the page is full. That's the only valid case if we
@@ -980,7 +980,7 @@
 
     // Shrink by decommitting unneeded pages and making them inaccessible.
     size_t decommitSize = current_size - new_size;
-    partitionDecommitSystemPages(root, char_ptr + new_size, decommitSize);
+    PartitionDecommitSystemPages(root, char_ptr + new_size, decommitSize);
     SetSystemPagesInaccessible(char_ptr + new_size, decommitSize);
   } else if (new_size <= partitionPageToDirectMapExtent(page)->map_size) {
     // Grow within the actually allocated memory. Just need to make the
@@ -988,7 +988,7 @@
     size_t recommit_size = new_size - current_size;
     bool ret = SetSystemPagesAccessible(char_ptr + current_size, recommit_size);
     CHECK(ret);
-    partitionRecommitSystemPages(root, char_ptr + current_size, recommit_size);
+    PartitionRecommitSystemPages(root, char_ptr + current_size, recommit_size);
 
 #if DCHECK_IS_ON()
     memset(char_ptr + current_size, kUninitializedByte, recommit_size);
@@ -1004,7 +1004,7 @@
   PartitionCookieWriteValue(char_ptr + raw_size - kCookieSize);
 #endif
 
-  partitionPageSetRawSize(page, raw_size);
+  PartitionPageSetRawSize(page, raw_size);
   DCHECK(PartitionPageGetRawSize(page) == raw_size);
 
   page->bucket->slot_size = new_size;
@@ -1026,7 +1026,7 @@
   }
 
   if (new_size > kGenericMaxDirectMapped)
-    partitionExcessiveAllocationSize();
+    PartitionExcessiveAllocationSize();
 
   DCHECK(PartitionPointerIsValid(PartitionCookieFreePointerAdjust(ptr)));
 
@@ -1043,13 +1043,13 @@
     }
   }
 
-  size_t actualNewSize = PartitionAllocActualSize(root, new_size);
-  size_t actualOldSize = PartitionAllocGetSize(ptr);
+  size_t actual_new_size = PartitionAllocActualSize(root, new_size);
+  size_t actual_old_size = PartitionAllocGetSize(ptr);
 
   // TODO: note that tcmalloc will "ignore" a downsizing realloc() unless the
   // new size is a significant percentage smaller. We could do the same if we
   // determine it is a win.
-  if (actualNewSize == actualOldSize) {
+  if (actual_new_size == actual_old_size) {
     // Trying to allocate a block of size new_size would give us a block of
     // the same size as the one we've already got, so no point in doing
     // anything here.
@@ -1058,7 +1058,7 @@
 
   // This realloc cannot be resized in-place. Sadness.
   void* ret = PartitionAllocGeneric(root, new_size, type_name);
-  size_t copy_size = actualOldSize;
+  size_t copy_size = actual_old_size;
   if (new_size < copy_size)
     copy_size = new_size;
 
@@ -1089,14 +1089,14 @@
     return discardable_bytes;
   }
 
-  const size_t maxSlotCount =
+  const size_t max_slot_count =
       (kPartitionPageSize * kMaxPartitionPagesPerSlotSpan) / kSystemPageSize;
-  DCHECK(bucket_num_slots <= maxSlotCount);
+  DCHECK(bucket_num_slots <= max_slot_count);
   DCHECK(page->num_unprovisioned_slots < bucket_num_slots);
   size_t num_slots = bucket_num_slots - page->num_unprovisioned_slots;
-  char slotUsage[maxSlotCount];
-  size_t lastSlot = static_cast<size_t>(-1);
-  memset(slotUsage, 1, num_slots);
+  char slot_usage[max_slot_count];
+  size_t last_slot = static_cast<size_t>(-1);
+  memset(slot_usage, 1, num_slots);
   char* ptr = reinterpret_cast<char*>(PartitionPageToPointer(page));
   PartitionFreelistEntry* entry = page->freelist_head;
   // First, walk the freelist for this page and make a bitmap of which slots
@@ -1104,7 +1104,7 @@
   while (entry) {
     size_t slotIndex = (reinterpret_cast<char*>(entry) - ptr) / slot_size;
     DCHECK(slotIndex < num_slots);
-    slotUsage[slotIndex] = 0;
+    slot_usage[slotIndex] = 0;
     entry = PartitionFreelistMask(entry->next);
     // If we have a slot where the masked freelist entry is 0, we can
     // actually discard that freelist entry because touching a discarded
@@ -1112,59 +1112,59 @@
     // (Note that this optimization won't fire on big endian machines
     // because the masking function is negation.)
     if (!PartitionFreelistMask(entry))
-      lastSlot = slotIndex;
+      last_slot = slotIndex;
   }
 
   // If the slot(s) at the end of the slot span are not in used, we can
   // truncate them entirely and rewrite the freelist.
-  size_t truncatedSlots = 0;
-  while (!slotUsage[num_slots - 1]) {
-    truncatedSlots++;
+  size_t truncated_slots = 0;
+  while (!slot_usage[num_slots - 1]) {
+    truncated_slots++;
     num_slots--;
     DCHECK(num_slots);
   }
   // First, do the work of calculating the discardable bytes. Don't actually
   // discard anything unless the discard flag was passed in.
-  char* beginPtr = nullptr;
-  char* endPtr = nullptr;
-  size_t unprovisionedBytes = 0;
-  if (truncatedSlots) {
-    beginPtr = ptr + (num_slots * slot_size);
-    endPtr = beginPtr + (slot_size * truncatedSlots);
-    beginPtr = reinterpret_cast<char*>(
-        RoundUpToSystemPage(reinterpret_cast<size_t>(beginPtr)));
+  char* begin_ptr = nullptr;
+  char* end_ptr = nullptr;
+  size_t unprovisioned_bytes = 0;
+  if (truncated_slots) {
+    begin_ptr = ptr + (num_slots * slot_size);
+    end_ptr = begin_ptr + (slot_size * truncated_slots);
+    begin_ptr = reinterpret_cast<char*>(
+        RoundUpToSystemPage(reinterpret_cast<size_t>(begin_ptr)));
     // We round the end pointer here up and not down because we're at the
     // end of a slot span, so we "own" all the way up the page boundary.
-    endPtr = reinterpret_cast<char*>(
-        RoundUpToSystemPage(reinterpret_cast<size_t>(endPtr)));
-    DCHECK(endPtr <= ptr + PartitionBucketBytes(bucket));
-    if (beginPtr < endPtr) {
-      unprovisionedBytes = endPtr - beginPtr;
-      discardable_bytes += unprovisionedBytes;
+    end_ptr = reinterpret_cast<char*>(
+        RoundUpToSystemPage(reinterpret_cast<size_t>(end_ptr)));
+    DCHECK(end_ptr <= ptr + PartitionBucketBytes(bucket));
+    if (begin_ptr < end_ptr) {
+      unprovisioned_bytes = end_ptr - begin_ptr;
+      discardable_bytes += unprovisioned_bytes;
     }
   }
-  if (unprovisionedBytes && discard) {
-    DCHECK(truncatedSlots > 0);
-    size_t numNewEntries = 0;
-    page->num_unprovisioned_slots += static_cast<uint16_t>(truncatedSlots);
+  if (unprovisioned_bytes && discard) {
+    DCHECK(truncated_slots > 0);
+    size_t num_new_entries = 0;
+    page->num_unprovisioned_slots += static_cast<uint16_t>(truncated_slots);
     // Rewrite the freelist.
-    PartitionFreelistEntry** entryPtr = &page->freelist_head;
+    PartitionFreelistEntry** entry_ptr = &page->freelist_head;
     for (size_t slotIndex = 0; slotIndex < num_slots; ++slotIndex) {
-      if (slotUsage[slotIndex])
+      if (slot_usage[slotIndex])
         continue;
       PartitionFreelistEntry* entry = reinterpret_cast<PartitionFreelistEntry*>(
           ptr + (slot_size * slotIndex));
-      *entryPtr = PartitionFreelistMask(entry);
-      entryPtr = reinterpret_cast<PartitionFreelistEntry**>(entry);
-      numNewEntries++;
+      *entry_ptr = PartitionFreelistMask(entry);
+      entry_ptr = reinterpret_cast<PartitionFreelistEntry**>(entry);
+      num_new_entries++;
     }
     // Terminate the freelist chain.
-    *entryPtr = nullptr;
+    *entry_ptr = nullptr;
     // The freelist head is stored unmasked.
     page->freelist_head = PartitionFreelistMask(page->freelist_head);
-    DCHECK(numNewEntries == num_slots - page->num_allocated_slots);
+    DCHECK(num_new_entries == num_slots - page->num_allocated_slots);
     // Discard the memory.
-    DiscardSystemPages(beginPtr, unprovisionedBytes);
+    DiscardSystemPages(begin_ptr, unprovisioned_bytes);
   }
 
   // Next, walk the slots and for any not in use, consider where the system
@@ -1172,30 +1172,30 @@
   // system as long as we don't interfere with a freelist pointer or an
   // adjacent slot.
   for (size_t i = 0; i < num_slots; ++i) {
-    if (slotUsage[i])
+    if (slot_usage[i])
       continue;
     // The first address we can safely discard is just after the freelist
     // pointer. There's one quirk: if the freelist pointer is actually a
     // null, we can discard that pointer value too.
-    char* beginPtr = ptr + (i * slot_size);
-    char* endPtr = beginPtr + slot_size;
-    if (i != lastSlot)
-      beginPtr += sizeof(PartitionFreelistEntry);
-    beginPtr = reinterpret_cast<char*>(
-        RoundUpToSystemPage(reinterpret_cast<size_t>(beginPtr)));
-    endPtr = reinterpret_cast<char*>(
-        RoundDownToSystemPage(reinterpret_cast<size_t>(endPtr)));
-    if (beginPtr < endPtr) {
-      size_t partialSlotBytes = endPtr - beginPtr;
-      discardable_bytes += partialSlotBytes;
+    char* begin_ptr = ptr + (i * slot_size);
+    char* end_ptr = begin_ptr + slot_size;
+    if (i != last_slot)
+      begin_ptr += sizeof(PartitionFreelistEntry);
+    begin_ptr = reinterpret_cast<char*>(
+        RoundUpToSystemPage(reinterpret_cast<size_t>(begin_ptr)));
+    end_ptr = reinterpret_cast<char*>(
+        RoundDownToSystemPage(reinterpret_cast<size_t>(end_ptr)));
+    if (begin_ptr < end_ptr) {
+      size_t partial_slot_bytes = end_ptr - begin_ptr;
+      discardable_bytes += partial_slot_bytes;
       if (discard)
-        DiscardSystemPages(beginPtr, partialSlotBytes);
+        DiscardSystemPages(begin_ptr, partial_slot_bytes);
     }
   }
   return discardable_bytes;
 }
 
-static void partitionPurgeBucket(PartitionBucket* bucket) {
+static void PartitionPurgeBucket(PartitionBucket* bucket) {
   if (bucket->active_pages_head != &PartitionRootGeneric::gSeedPage) {
     for (PartitionPage* page = bucket->active_pages_head; page;
          page = page->next_page) {
@@ -1207,7 +1207,7 @@
 
 void PartitionPurgeMemory(PartitionRoot* root, int flags) {
   if (flags & PartitionPurgeDecommitEmptyPages)
-    partitionDecommitEmptyPages(root);
+    PartitionDecommitEmptyPages(root);
   // We don't currently do anything for PartitionPurgeDiscardUnusedSystemPages
   // here because that flag is only useful for allocations >= system page
   // size. We only have allocations that large inside generic partitions
@@ -1217,12 +1217,12 @@
 void PartitionPurgeMemoryGeneric(PartitionRootGeneric* root, int flags) {
   subtle::SpinLock::Guard guard(root->lock);
   if (flags & PartitionPurgeDecommitEmptyPages)
-    partitionDecommitEmptyPages(root);
+    PartitionDecommitEmptyPages(root);
   if (flags & PartitionPurgeDiscardUnusedSystemPages) {
     for (size_t i = 0; i < kGenericNumBuckets; ++i) {
       PartitionBucket* bucket = &root->buckets[i];
       if (bucket->slot_size >= kSystemPageSize)
-        partitionPurgeBucket(bucket);
+        PartitionPurgeBucket(bucket);
     }
   }
 }
@@ -1279,9 +1279,9 @@
   stats_out->num_full_pages = static_cast<size_t>(bucket->num_full_pages);
   stats_out->bucket_slot_size = bucket->slot_size;
   uint16_t bucket_num_slots = PartitionBucketSlots(bucket);
-  size_t bucketUsefulStorage = stats_out->bucket_slot_size * bucket_num_slots;
+  size_t bucket_useful_storage = stats_out->bucket_slot_size * bucket_num_slots;
   stats_out->allocated_page_size = PartitionBucketBytes(bucket);
-  stats_out->active_bytes = bucket->num_full_pages * bucketUsefulStorage;
+  stats_out->active_bytes = bucket->num_full_pages * bucket_useful_storage;
   stats_out->resident_bytes =
       bucket->num_full_pages * stats_out->allocated_page_size;
 
diff --git a/base/android/junit/src/org/chromium/base/PromiseTest.java b/base/android/junit/src/org/chromium/base/PromiseTest.java
index 7f15da0..4c76a3c 100644
--- a/base/android/junit/src/org/chromium/base/PromiseTest.java
+++ b/base/android/junit/src/org/chromium/base/PromiseTest.java
@@ -8,13 +8,14 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-import org.chromium.base.Promise.UnhandledRejectionException;
-import org.chromium.testing.local.LocalRobolectricTestRunner;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.annotation.Config;
 import org.robolectric.shadows.ShadowLooper;
 
+import org.chromium.base.Promise.UnhandledRejectionException;
+import org.chromium.testing.local.LocalRobolectricTestRunner;
+
 /** Unit tests for {@link Promise}. */
 @RunWith(LocalRobolectricTestRunner.class)
 @Config(manifest = Config.NONE)
@@ -38,7 +39,7 @@
         final Value value = new Value();
 
         Promise<Integer> promise = new Promise<Integer>();
-        promise.then(this.<Integer>setValue(value, 1));
+        promise.then(PromiseTest.<Integer>setValue(value, 1));
 
         assertEquals(value.get(), 0);
 
@@ -75,7 +76,7 @@
         Promise<Integer> promise = Promise.fulfilled(new Integer(0));
         assertEquals(value.get(), 0);
 
-        promise.then(this.<Integer>setValue(value, 1));
+        promise.then(PromiseTest.<Integer>setValue(value, 1));
 
         assertEquals(value.get(), 1);
     }
@@ -158,7 +159,7 @@
     @Test
     public void rejectPromiseNoHandler() {
         Promise<Integer> promise = new Promise<Integer>();
-        promise.then(this.<Integer>identity()).then(this.<Integer>pass());
+        promise.then(PromiseTest.<Integer>identity()).then(PromiseTest.<Integer>pass());
 
         boolean caught = false;
         try {
@@ -174,7 +175,8 @@
     @Test
     public void rejectPromiseHandled() {
         Promise<Integer> promise = new Promise<Integer>();
-        promise.then(this.<Integer>identity()).then(this.<Integer>pass(), this.<Exception>pass());
+        promise.then(PromiseTest.<Integer>identity())
+                .then(PromiseTest.<Integer>pass(), PromiseTest.<Exception>pass());
 
         boolean caught = false;
         try {
@@ -190,7 +192,7 @@
     @Test
     public void rejectionInformation() {
         Promise<Integer> promise = new Promise<Integer>();
-        promise.then(this.<Integer>pass());
+        promise.then(PromiseTest.<Integer>pass());
 
         String message = "Promise Test";
         try {
@@ -209,9 +211,9 @@
         Promise<Integer> promise = new Promise<Integer>();
 
         Promise<Integer> result =
-                promise.then(this.<Integer>identity()).then(this.<Integer>identity());
+                promise.then(PromiseTest.<Integer>identity()).then(PromiseTest.<Integer>identity());
 
-        result.then(this.<Integer>pass(), this.<Exception>setValue(value, 5));
+        result.then(PromiseTest.<Integer>pass(), PromiseTest.<Exception>setValue(value, 5));
 
         promise.reject(new Exception());
         ShadowLooper.runUiThreadTasksIncludingDelayedTasks();
@@ -230,7 +232,7 @@
             public Integer apply(Integer argument) {
                 throw new IllegalArgumentException();
             }
-        }).then(this.<Integer>pass(), this.<Exception>setValue(value, 5));
+        }).then(PromiseTest.<Integer>pass(), PromiseTest.<Exception>setValue(value, 5));
 
         promise.fulfill(0);
 
@@ -249,7 +251,7 @@
             public Promise<Integer> apply(Integer argument) {
                 throw new IllegalArgumentException();
             }
-        }).then(this.<Integer>pass(), this.<Exception>setValue(value, 5));
+        }).then(PromiseTest.<Integer>pass(), PromiseTest.<Exception>setValue(value, 5));
 
         promise.fulfill(0);
 
@@ -269,7 +271,7 @@
             public Promise<Integer> apply(Integer argument) {
                 return inner;
             }
-        }).then(this.<Integer>pass(), this.<Exception>setValue(value, 5));
+        }).then(PromiseTest.<Integer>pass(), PromiseTest.<Exception>setValue(value, 5));
 
         promise.fulfill(0);
 
diff --git a/build/android/BUILD.gn b/build/android/BUILD.gn
index 53366db..406f3f60 100644
--- a/build/android/BUILD.gn
+++ b/build/android/BUILD.gn
@@ -125,6 +125,16 @@
          ]
 }
 
+group("logdog_wrapper_py") {
+  _py_files = read_file("test_wrapper/logdog_wrapper.pydeps", "list lines")
+
+  # Filter out comments.
+  set_sources_assignment_filter([ "#*" ])
+  sources = _py_files
+
+  data = sources
+}
+
 # Create wrapper scripts in out/bin that takes care of setting the
 # --output-directory.
 _scripts_to_wrap = [
diff --git a/build/android/pylib/gtest/gtest_test_instance.py b/build/android/pylib/gtest/gtest_test_instance.py
index 678f68b1..32e7b7d 100644
--- a/build/android/pylib/gtest/gtest_test_instance.py
+++ b/build/android/pylib/gtest/gtest_test_instance.py
@@ -262,11 +262,13 @@
     if len(args.suite_name) > 1:
       raise ValueError('Platform mode currently supports only 1 gtest suite')
     self._exe_dist_dir = None
+    self._external_shard_index = args.test_launcher_shard_index
     self._extract_test_list_from_filter = args.extract_test_list_from_filter
+    self._filter_tests_lock = threading.Lock()
     self._shard_timeout = args.shard_timeout
     self._store_tombstones = args.store_tombstones
+    self._total_external_shards = args.test_launcher_total_shards
     self._suite = args.suite_name[0]
-    self._filter_tests_lock = threading.Lock()
 
     # GYP:
     if args.executable_dist_dir:
@@ -366,6 +368,14 @@
     return self._exe_dist_dir
 
   @property
+  def external_shard_index(self):
+    return self._external_shard_index
+
+  @property
+  def extract_test_list_from_filter(self):
+    return self._extract_test_list_from_filter
+
+  @property
   def extras(self):
     return self._extras
 
@@ -410,8 +420,8 @@
     return self._test_arguments
 
   @property
-  def extract_test_list_from_filter(self):
-    return self._extract_test_list_from_filter
+  def total_external_shards(self):
+    return self._total_external_shards
 
   #override
   def TestType(self):
diff --git a/build/android/pylib/instrumentation/instrumentation_test_instance.py b/build/android/pylib/instrumentation/instrumentation_test_instance.py
index 93e3a633..1824537 100644
--- a/build/android/pylib/instrumentation/instrumentation_test_instance.py
+++ b/build/android/pylib/instrumentation/instrumentation_test_instance.py
@@ -504,6 +504,9 @@
     self._edit_shared_prefs = []
     self._initializeEditPrefsAttributes(args)
 
+    self._external_shard_index = args.test_launcher_shard_index
+    self._total_external_shards = args.test_launcher_total_shards
+
   def _initializeApkAttributes(self, args, error_func):
     if args.apk_under_test:
       apk_under_test_path = args.apk_under_test
@@ -734,6 +737,10 @@
     return self._edit_shared_prefs
 
   @property
+  def external_shard_index(self):
+    return self._external_shard_index
+
+  @property
   def flags(self):
     return self._flags
 
@@ -789,6 +796,10 @@
   def timeout_scale(self):
     return self._timeout_scale
 
+  @property
+  def total_external_shards(self):
+    return self._total_external_shards
+
   #override
   def TestType(self):
     return 'instrumentation'
diff --git a/build/android/pylib/local/device/local_device_gtest_run.py b/build/android/pylib/local/device/local_device_gtest_run.py
index 82da5354..a121296 100644
--- a/build/android/pylib/local/device/local_device_gtest_run.py
+++ b/build/android/pylib/local/device/local_device_gtest_run.py
@@ -359,7 +359,6 @@
         logging.info('No tests found. Output:')
         for l in raw_test_list:
           logging.info('  %s', l)
-      tests = self._test_instance.FilterTests(tests)
       return tests
 
     # Query all devices in case one fails.
@@ -370,7 +369,12 @@
     if all(not tl for tl in test_lists):
       raise device_errors.CommandFailedError(
           'Failed to list tests on any device')
-    return list(sorted(set().union(*[set(tl) for tl in test_lists if tl])))
+    tests = list(sorted(set().union(*[set(tl) for tl in test_lists if tl])))
+    tests = self._test_instance.FilterTests(tests)
+    tests = self._ApplyExternalSharding(
+        tests, self._test_instance.external_shard_index,
+        self._test_instance.total_external_shards)
+    return tests
 
   #override
   def _RunTest(self, device, test):
diff --git a/build/android/pylib/local/device/local_device_instrumentation_test_run.py b/build/android/pylib/local/device/local_device_instrumentation_test_run.py
index 1cc82f96..3adced3 100644
--- a/build/android/pylib/local/device/local_device_instrumentation_test_run.py
+++ b/build/android/pylib/local/device/local_device_instrumentation_test_run.py
@@ -205,7 +205,11 @@
 
   #override
   def _GetTests(self):
-    return self._test_instance.GetTests()
+    tests = self._test_instance.GetTests()
+    tests = self._ApplyExternalSharding(
+        tests, self._test_instance.external_shard_index,
+        self._test_instance.total_external_shards)
+    return tests
 
   #override
   def _GetUniqueTestName(self, test):
diff --git a/build/android/pylib/local/device/local_device_test_run.py b/build/android/pylib/local/device/local_device_test_run.py
index 1d7ebdf8..14c4366 100644
--- a/build/android/pylib/local/device/local_device_test_run.py
+++ b/build/android/pylib/local/device/local_device_test_run.py
@@ -54,6 +54,17 @@
     return device_path
 
 
+class TestsTerminated(Exception):
+  pass
+
+
+class InvalidShardingSettings(Exception):
+  def __init__(self, shard_index, total_shards):
+    super(InvalidShardingSettings, self).__init__(
+        'Invalid sharding settings. shard_index: %d total_shards: %d'
+            % (shard_index, total_shards))
+
+
 class LocalDeviceTestRun(test_run.TestRun):
 
   def __init__(self, env, test_instance):
@@ -95,9 +106,6 @@
 
       logging.info('Finished running tests on this device.')
 
-    class TestsTerminated(Exception):
-      pass
-
     def stop_tests(_signum, _frame):
       logging.critical('Received SIGTERM. Stopping test execution.')
       exit_now.set()
@@ -177,6 +185,17 @@
 
     return [t for t in failed_tests if self._ShouldRetry(t)]
 
+  def _ApplyExternalSharding(self, tests, shard_index, total_shards):
+    logging.info('Using external sharding settings. This is shard %d/%d',
+                 shard_index, total_shards)
+
+    if total_shards < 0 or shard_index < 0 or total_shards <= shard_index:
+      raise InvalidShardingSettings(shard_index, total_shards)
+
+    return [
+        t for t in tests
+        if hash(self._GetUniqueTestName(t)) % total_shards == shard_index]
+
   def GetTool(self, device):
     if not str(device) in self._tools:
       self._tools[str(device)] = valgrind_tools.CreateTool(
@@ -196,7 +215,6 @@
 
   def _GetTests(self):
     raise NotImplementedError
-
   def _RunTest(self, device, test):
     raise NotImplementedError
 
diff --git a/build/android/test_runner.py b/build/android/test_runner.py
index ee6f87a..2c7fe8e 100755
--- a/build/android/test_runner.py
+++ b/build/android/test_runner.py
@@ -12,6 +12,7 @@
 import itertools
 import logging
 import os
+import shutil
 import signal
 import sys
 import threading
@@ -34,6 +35,7 @@
 from pylib.base import test_run_factory
 from pylib.results import json_results
 from pylib.results import report_results
+from pylib.utils import logdog_helper
 
 from py_utils import contextlib_ext
 
@@ -63,6 +65,14 @@
       dest='json_results_file', type=os.path.realpath,
       help='If set, will dump results in JSON form '
            'to specified file.')
+  parser.add_argument(
+      '--test-launcher-shard-index',
+      type=int, default=os.environ.get('GTEST_SHARD_INDEX', 0),
+      help='Index of the external shard to run.')
+  parser.add_argument(
+      '--test-launcher-total-shards',
+      type=int, default=os.environ.get('GTEST_TOTAL_SHARDS', 1),
+      help='Total number of external shards.')
 
   return parser
 
@@ -208,6 +218,12 @@
       help='Run the test under a tool '
            '(use --tool help to list them)')
 
+  parser.add_argument(
+      '--upload-logcats-file',
+      action='store_true',
+      dest='upload_logcats_file',
+      help='Whether to upload logcat file to logdog.')
+
   logcat_output_group = parser.add_mutually_exclusive_group()
   logcat_output_group.add_argument(
       '--logcat-output-dir', type=os.path.realpath,
@@ -725,6 +741,24 @@
       write_json_file(),
       args.json_results_file)
 
+  @contextlib.contextmanager
+  def upload_logcats_file():
+    try:
+      yield
+    finally:
+      if not args.logcat_output_file:
+        logging.critical('Cannot upload logcats file. '
+                        'File to save logcat is not specified.')
+      else:
+        with open(args.logcat_output_file) as src:
+          dst = logdog_helper.open_text('unified_logcats')
+          if dst:
+            shutil.copyfileobj(src, dst)
+
+  logcats_uploader = contextlib_ext.Optional(
+      upload_logcats_file(),
+      'upload_logcats_file' in args and args.upload_logcats_file)
+
   ### Set up test objects.
 
   env = environment_factory.CreateEnvironment(args, infra_error)
@@ -734,7 +768,7 @@
 
   ### Run.
 
-  with json_writer, env, test_instance, test_run:
+  with json_writer, logcats_uploader, env, test_instance, test_run:
 
     repetitions = (xrange(args.repeat + 1) if args.repeat >= 0
                    else itertools.count())
diff --git a/build/android/test_wrapper/logdog_wrapper.py b/build/android/test_wrapper/logdog_wrapper.py
index 14ed7d13..0296650 100755
--- a/build/android/test_wrapper/logdog_wrapper.py
+++ b/build/android/test_wrapper/logdog_wrapper.py
@@ -11,81 +11,76 @@
 import signal
 import subprocess
 import sys
-import urllib
 
+_SRC_PATH = os.path.abspath(os.path.join(
+    os.path.dirname(__file__), '..', '..', '..'))
+sys.path.append(os.path.join(_SRC_PATH, 'third_party', 'catapult', 'devil'))
+sys.path.append(os.path.join(_SRC_PATH, 'third_party', 'catapult', 'common',
+                             'py_utils'))
+
+from devil.utils import signal_handler
+from py_utils import tempfile_ext
+
+PROJECT = 'chromium'
+OUTPUT = 'logdog'
+COORDINATOR_HOST = 'luci-logdog.appspot.com'
+SERVICE_ACCOUNT_JSON = ('/creds/service_accounts'
+                        '/service-account-luci-logdog-publisher.json')
 
 def CommandParser():
   # Parses the command line arguments being passed in
   parser = argparse.ArgumentParser()
+  parser.add_argument('--target', required=True,
+                      help='The test target to be run.')
   parser.add_argument('--logdog-bin-cmd', required=True,
-                      help='Command for running logdog butler binary')
-  parser.add_argument('--project', required=True,
-                      help='Name of logdog project')
-  parser.add_argument('--logdog-server',
-                      default='services-dot-luci-logdog.appspot.com',
-                      help='URL of logdog server, https:// is assumed.')
-  parser.add_argument('--service-account-json', required=True,
-                      help='Location of authentication json')
-  parser.add_argument('--prefix', required=True,
-                      help='Prefix to be used for logdog stream')
-  parser.add_argument('--source', required=True,
-                      help='Location of file for logdog to stream')
-  parser.add_argument('--name', required=True,
-                      help='Name to be used for logdog stream')
+                      help='The logdog bin cmd.')
   return parser
 
-
-def CreateUrl(server, project, prefix, name):
-  stream_name = '%s/%s/+/%s' % (project, prefix, name)
-  return 'https://%s/v/?s=%s' % (server, urllib.quote_plus(stream_name))
-
-
-def CreateSignalForwarder(proc):
-  def handler(signum, _frame):
+def CreateStopTestsMethod(proc):
+  def StopTests(signum, _frame):
     logging.error('Forwarding signal %s to test process', str(signum))
     proc.send_signal(signum)
-
-  return handler
-
+  return StopTests
 
 def main():
   parser = CommandParser()
-  args, test_cmd = parser.parse_known_args(sys.argv[1:])
+  args, extra_cmd_args = parser.parse_known_args(sys.argv[1:])
+
   logging.basicConfig(level=logging.INFO)
-  if not test_cmd:
-    parser.error('Must specify command to run after the logdog flags')
-  test_proc = subprocess.Popen(test_cmd)
-  original_sigterm_handler = signal.signal(
-      signal.SIGTERM, CreateSignalForwarder(test_proc))
-  try:
-    result = test_proc.wait()
-  finally:
-    signal.signal(signal.SIGTERM, original_sigterm_handler)
-  if '${SWARMING_TASK_ID}' in args.prefix:
-    args.prefix = args.prefix.replace('${SWARMING_TASK_ID}',
-                                      os.environ.get('SWARMING_TASK_ID'))
-  url = CreateUrl('luci-logdog.appspot.com', args.project, args.prefix,
-                  args.name)
-  logdog_cmd = [args.logdog_bin_cmd, '-project', args.project,
-                '-output', 'logdog,host=%s' % args.logdog_server,
-                '-prefix', args.prefix,
-                '-service-account-json', args.service_account_json,
-                'stream', '-source', args.source,
-                '-stream', '-name=%s' % args.name]
+  with tempfile_ext.NamedTemporaryDirectory() as logcat_output_dir:
+    test_cmd = [
+        os.path.join('bin', 'run_%s' % args.target),
+        '--logcat-output-file', os.path.join(logcat_output_dir, 'logcats'),
+        '--upload-logcats-file',
+        '--target-devices-file', '${SWARMING_BOT_FILE}',
+        '-v'] + extra_cmd_args
 
-  if not os.path.exists(args.logdog_bin_cmd):
-    logging.error(
-        'Logdog binary %s unavailable. Unable to upload logcats.',
-        args.logdog_bin_cmd)
-  elif not os.path.exists(args.source):
-    logging.error(
-        'Logcat sources not found at %s. Unable to upload logcats.',
-        args.source)
-  else:
-    subprocess.call(logdog_cmd)
-    logging.info('Logcats are located at: %s', url)
-  return result
+    with tempfile_ext.NamedTemporaryDirectory(
+        prefix='tmp_android_logdog_wrapper') as temp_directory:
+      if not os.path.exists(args.logdog_bin_cmd):
+        logging.error(
+            'Logdog binary %s unavailable. Unable to create logdog client',
+            args.logdog_bin_cmd)
+      else:
+        streamserver_uri = 'unix:%s' % os.path.join(temp_directory,
+                                                    'butler.sock')
+        prefix = os.path.join('android', 'swarming', 'logcats',
+                              os.environ.get('SWARMING_TASK_ID'))
 
+        # Call test_cmdline through logdog butler subcommand.
+        test_cmd = [
+            args.logdog_bin_cmd, '-project', PROJECT,
+            '-output', OUTPUT,
+            '-prefix', prefix,
+            '--service-account-json', SERVICE_ACCOUNT_JSON,
+            '-coordinator-host', COORDINATOR_HOST,
+            'run', '-streamserver-uri', streamserver_uri, '--'] + test_cmd
+
+      test_proc = subprocess.Popen(test_cmd)
+      with signal_handler.SignalHandler(signal.SIGTERM,
+                                        CreateStopTestsMethod(test_proc)):
+        result = test_proc.wait()
+    return result
 
 if __name__ == '__main__':
   sys.exit(main())
diff --git a/build/android/test_wrapper/logdog_wrapper.pydeps b/build/android/test_wrapper/logdog_wrapper.pydeps
new file mode 100644
index 0000000..cd57f2fd
--- /dev/null
+++ b/build/android/test_wrapper/logdog_wrapper.pydeps
@@ -0,0 +1,11 @@
+# Generated by running:
+#   build/print_python_deps.py --root build/android --output build/android/test_wrapper/logdog_wrapper.pydeps build/android/test_wrapper/logdog_wrapper.py
+../../third_party/catapult/common/py_utils/py_utils/__init__.py
+../../third_party/catapult/common/py_utils/py_utils/tempfile_ext.py
+../../third_party/catapult/devil/devil/__init__.py
+../../third_party/catapult/devil/devil/utils/__init__.py
+../../third_party/catapult/devil/devil/utils/reraiser_thread.py
+../../third_party/catapult/devil/devil/utils/signal_handler.py
+../../third_party/catapult/devil/devil/utils/timeout_retry.py
+../../third_party/catapult/devil/devil/utils/watchdog_timer.py
+test_wrapper/logdog_wrapper.py
diff --git a/build/config/android/internal_rules.gni b/build/config/android/internal_rules.gni
index d2d9f99..9ef8d27 100644
--- a/build/config/android/internal_rules.gni
+++ b/build/config/android/internal_rules.gni
@@ -483,7 +483,11 @@
     script = "//build/android/gyp/create_test_runner_script.py"
     depfile = "$target_gen_dir/$target_name.d"
 
-    data_deps += [ "//build/android:test_runner_py" ]
+    data_deps += [
+      "//build/android:test_runner_py",
+      "//build/android:logdog_wrapper_py",
+    ]
+
     data = []
 
     test_runner_args = [
diff --git a/cc/base/switches.cc b/cc/base/switches.cc
index a9576a9..fca84ca 100644
--- a/cc/base/switches.cc
+++ b/cc/base/switches.cc
@@ -50,10 +50,6 @@
 // Enables the GPU benchmarking extension
 const char kEnableGpuBenchmarking[] = "enable-gpu-benchmarking";
 
-// Force all rasterization and compositing to be done in linear color space,
-// with physically correct blending and interpolation.
-const char kEnableTrueColorRendering[] = "enable-true-color-rendering";
-
 // Enables multi-client Surface synchronization. In practice, this indicates
 // that LayerTreeHost expects to be given a valid LocalSurfaceId provided by
 // the parent compositor.
diff --git a/cc/base/switches.h b/cc/base/switches.h
index 5ec1cc40..1bd124c 100644
--- a/cc/base/switches.h
+++ b/cc/base/switches.h
@@ -30,7 +30,6 @@
 // Switches for both the renderer and ui compositors.
 CC_EXPORT extern const char kEnableColorCorrectRendering[];
 CC_EXPORT extern const char kEnableGpuBenchmarking[];
-CC_EXPORT extern const char kEnableTrueColorRendering[];
 CC_EXPORT extern const char kEnableSurfaceSynchronization[];
 
 // Debug visualizations.
diff --git a/cc/playback/image_hijack_canvas.cc b/cc/playback/image_hijack_canvas.cc
index bd26d32..7fe112e9 100644
--- a/cc/playback/image_hijack_canvas.cc
+++ b/cc/playback/image_hijack_canvas.cc
@@ -5,6 +5,7 @@
 #include "cc/playback/image_hijack_canvas.h"
 
 #include "base/optional.h"
+#include "base/trace_event/trace_event.h"
 #include "cc/playback/discardable_image_map.h"
 #include "cc/tiles/image_decode_cache.h"
 #include "third_party/skia/include/core/SkPath.h"
@@ -137,6 +138,8 @@
 void ImageHijackCanvas::onDrawPicture(const SkPicture* picture,
                                       const SkMatrix* matrix,
                                       const SkPaint* paint) {
+  TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
+               "ImageHijackCanvas::onDrawPicture");
   // Ensure that pictures are unpacked by this canvas, instead of being
   // forwarded to the raster canvas.
   SkCanvas::onDrawPicture(picture, matrix, paint);
@@ -146,6 +149,8 @@
                                     SkScalar x,
                                     SkScalar y,
                                     const SkPaint* paint) {
+  TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
+               "ImageHijackCanvas::onDrawImage");
   if (!image->isLazyGenerated()) {
     DCHECK(!ShouldSkipImage(image));
     SkNWayCanvas::onDrawImage(image, x, y, paint);
@@ -184,6 +189,8 @@
                                         const SkRect& dst,
                                         const SkPaint* paint,
                                         SrcRectConstraint constraint) {
+  TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
+               "ImageHijackCanvas::onDrawImageRect");
   if (!image->isLazyGenerated()) {
     DCHECK(!ShouldSkipImage(image));
     SkNWayCanvas::onDrawImageRect(image, src, dst, paint, constraint);
@@ -225,6 +232,8 @@
 }
 
 void ImageHijackCanvas::onDrawRect(const SkRect& r, const SkPaint& paint) {
+  TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
+               "ImageHijackCanvas::onDrawRect");
   if (ShouldSkipImageInPaint(paint))
     return;
 
@@ -238,6 +247,8 @@
 }
 
 void ImageHijackCanvas::onDrawPath(const SkPath& path, const SkPaint& paint) {
+  TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
+               "ImageHijackCanvas::onDrawPath");
   if (ShouldSkipImageInPaint(paint))
     return;
 
@@ -251,6 +262,8 @@
 }
 
 void ImageHijackCanvas::onDrawOval(const SkRect& r, const SkPaint& paint) {
+  TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
+               "ImageHijackCanvas::onDrawOval");
   if (ShouldSkipImageInPaint(paint))
     return;
 
@@ -268,6 +281,8 @@
                                   SkScalar sweep_angle,
                                   bool use_center,
                                   const SkPaint& paint) {
+  TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
+               "ImageHijackCanvas::onDrawArc");
   if (ShouldSkipImageInPaint(paint))
     return;
 
@@ -282,6 +297,8 @@
 }
 
 void ImageHijackCanvas::onDrawRRect(const SkRRect& rr, const SkPaint& paint) {
+  TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
+               "ImageHijackCanvas::onDrawRRect");
   if (ShouldSkipImageInPaint(paint))
     return;
 
@@ -303,7 +320,12 @@
 }
 
 bool ImageHijackCanvas::ShouldSkipImage(const SkImage* image) const {
-  return images_to_skip_->find(image->uniqueID()) != images_to_skip_->end();
+  bool skip =
+      images_to_skip_->find(image->uniqueID()) != images_to_skip_->end();
+  TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
+               "ImageHijackCanvas::ShouldSkipImage", "imageId",
+               image->uniqueID(), "skip", skip);
+  return skip;
 }
 
 bool ImageHijackCanvas::ShouldSkipImageInPaint(const SkPaint& paint) const {
diff --git a/cc/raster/gpu_raster_buffer_provider.cc b/cc/raster/gpu_raster_buffer_provider.cc
index 2e253dc..208068a 100644
--- a/cc/raster/gpu_raster_buffer_provider.cc
+++ b/cc/raster/gpu_raster_buffer_provider.cc
@@ -200,8 +200,8 @@
   if (!sync_token.HasData())
     return true;
 
-  // IsSyncTokenSignalled is threadsafe, no need for worker context lock.
-  return worker_context_provider_->ContextSupport()->IsSyncTokenSignalled(
+  // IsSyncTokenSignaled is thread-safe, no need for worker context lock.
+  return worker_context_provider_->ContextSupport()->IsSyncTokenSignaled(
       sync_token);
 }
 
diff --git a/cc/raster/one_copy_raster_buffer_provider.cc b/cc/raster/one_copy_raster_buffer_provider.cc
index 18dc44cd..355cb27 100644
--- a/cc/raster/one_copy_raster_buffer_provider.cc
+++ b/cc/raster/one_copy_raster_buffer_provider.cc
@@ -173,8 +173,8 @@
   if (!sync_token.HasData())
     return true;
 
-  // IsSyncTokenSignalled is threadsafe, no need for worker context lock.
-  return worker_context_provider_->ContextSupport()->IsSyncTokenSignalled(
+  // IsSyncTokenSignaled is thread-safe, no need for worker context lock.
+  return worker_context_provider_->ContextSupport()->IsSyncTokenSignaled(
       sync_token);
 }
 
diff --git a/cc/test/test_context_support.cc b/cc/test/test_context_support.cc
index 8c49d11b..02af055 100644
--- a/cc/test/test_context_support.cc
+++ b/cc/test/test_context_support.cc
@@ -27,8 +27,7 @@
                             weak_ptr_factory_.GetWeakPtr()));
 }
 
-bool TestContextSupport::IsSyncTokenSignalled(
-    const gpu::SyncToken& sync_token) {
+bool TestContextSupport::IsSyncTokenSignaled(const gpu::SyncToken& sync_token) {
   return true;
 }
 
diff --git a/cc/test/test_context_support.h b/cc/test/test_context_support.h
index 457e227..c12776c 100644
--- a/cc/test/test_context_support.h
+++ b/cc/test/test_context_support.h
@@ -29,7 +29,7 @@
   // gpu::ContextSupport implementation.
   void SignalSyncToken(const gpu::SyncToken& sync_token,
                        const base::Closure& callback) override;
-  bool IsSyncTokenSignalled(const gpu::SyncToken& sync_token) override;
+  bool IsSyncTokenSignaled(const gpu::SyncToken& sync_token) override;
   void SignalQuery(uint32_t query, const base::Closure& callback) override;
   void SetAggressivelyFreeResources(bool aggressively_free_resources) override;
   void Swap() override;
diff --git a/cc/tiles/checker_image_tracker.cc b/cc/tiles/checker_image_tracker.cc
index 0690470..8bbcbeb 100644
--- a/cc/tiles/checker_image_tracker.cc
+++ b/cc/tiles/checker_image_tracker.cc
@@ -40,6 +40,9 @@
     std::vector<DrawImage>* images,
     ImageIdFlatSet* checkered_images,
     WhichTree tree) {
+  TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
+               "CheckerImageTracker::FilterImagesForCheckeringForTile", "tree",
+               tree);
   DCHECK(checkered_images->empty());
 
   base::EraseIf(*images,
@@ -56,6 +59,8 @@
 }
 
 const ImageIdFlatSet& CheckerImageTracker::TakeImagesToInvalidateOnSyncTree() {
+  TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
+               "CheckerImageTracker::TakeImagesToInvalidateOnSyncTree");
   DCHECK_EQ(invalidated_images_on_current_sync_tree_.size(), 0u)
       << "Sync tree can not be invalidated more than once";
 
@@ -65,6 +70,8 @@
 }
 
 void CheckerImageTracker::DidActivateSyncTree() {
+  TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
+               "CheckerImageTracker::DidActivateSyncTree");
   for (auto image_id : invalidated_images_on_current_sync_tree_) {
     auto it = image_id_to_decode_request_id_.find(image_id);
     image_controller_->UnlockImageDecode(it->second);
@@ -78,6 +85,8 @@
     ImageId image_id,
     ImageController::ImageDecodeRequestId request_id,
     ImageController::ImageDecodeResult result) {
+  TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
+               "CheckerImageTracker::DidFinishImageDecode");
   TRACE_EVENT_ASYNC_END0("cc", "CheckerImageTracker::DeferImageDecode",
                          image_id);
 
@@ -130,6 +139,8 @@
 
 void CheckerImageTracker::ScheduleImageDecodeIfNecessary(
     const sk_sp<const SkImage>& image) {
+  TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
+               "CheckerImageTracker::ScheduleImageDecodeIfNecessary");
   ImageId image_id = image->uniqueID();
 
   // If the image has already been decoded, or a decode request is pending, we
diff --git a/chrome/VERSION b/chrome/VERSION
index 7cad168..9db4e92 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=59
 MINOR=0
-BUILD=3042
+BUILD=3043
 PATCH=0
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
index 465a699a..10e4978 100644
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -185,6 +185,8 @@
     "//components/ntp_tiles/android:ntp_tiles_java",
     "//components/offline_items_collection/core:core_java",
     "//components/payments/content:payment_request_java",
+    "//components/payments/content/android:java",
+    "//components/payments/content/android:mojom_java",
     "//components/policy/android:policy_java",
     "//components/precache/android:precache_java",
     "//components/safe_browsing_db/android:safe_browsing_java",
@@ -342,6 +344,8 @@
     "//components/bookmarks/common/android:bookmarks_java",
     "//components/invalidation/impl:java",
     "//components/payments/content:payment_request_java",
+    "//components/payments/content/android:java",
+    "//components/payments/content/android:mojom_java",
     "//components/signin/core/browser/android:java",
     "//components/signin/core/browser/android:signin_java_test_support",
     "//components/sync:sync_java_test_support",
@@ -422,6 +426,8 @@
     "//components/minidump_uploader:minidump_uploader_javatests",
     "//components/navigation_interception/android:navigation_interception_java",
     "//components/payments/content:payment_request_java",
+    "//components/payments/content/android:java",
+    "//components/payments/content/android:mojom_java",
     "//components/policy/android:policy_java",
     "//components/precache/android:precache_java",
     "//components/precache/android:precache_javatests",
diff --git a/chrome/android/java/DEPS b/chrome/android/java/DEPS
index 8c434f9..cea2e2f7 100644
--- a/chrome/android/java/DEPS
+++ b/chrome/android/java/DEPS
@@ -8,6 +8,7 @@
   "+components/location/android/java",
   "+components/minidump_uploader",
   "+components/navigation_interception",
+  "+components/payments/content/android/java/src/org/chromium/components/payments",
   "+components/precache/android/java",
   "+components/safe_json/android/java",
   "+components/sync/android/java/src/org/chromium/components/sync",
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java
index 7a75b3a..20f75a0 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java
@@ -510,8 +510,7 @@
     @Override
     public void startSearchTermResolutionRequest(String selection) {
         WebContents baseWebContents = getBaseWebContents();
-        if (baseWebContents != null) {
-            assert mContext != null;
+        if (baseWebContents != null && mContext != null) {
             nativeStartSearchTermResolutionRequest(
                     mNativeContextualSearchManagerPtr, mContext, getBaseWebContents());
         }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFactory.java
index 582b1bf..58f37e7 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFactory.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFactory.java
@@ -4,20 +4,17 @@
 
 package org.chromium.chrome.browser.payments;
 
-import android.content.Context;
 import android.content.Intent;
-import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.graphics.drawable.Drawable;
-import android.net.Uri;
+import android.text.TextUtils;
 import android.util.Pair;
 
-import org.chromium.base.ContextUtils;
-import org.chromium.chrome.browser.ChromeActivity;
 import org.chromium.chrome.browser.ChromeFeatureList;
-import org.chromium.chrome.browser.UrlConstants;
 import org.chromium.chrome.browser.payments.PaymentAppFactory.PaymentAppCreatedCallback;
 import org.chromium.chrome.browser.payments.PaymentAppFactory.PaymentAppFactoryAddition;
+import org.chromium.components.payments.PaymentManifestDownloader;
+import org.chromium.components.payments.PaymentManifestParser;
 import org.chromium.content_public.browser.WebContents;
 
 import java.util.HashMap;
@@ -27,76 +24,13 @@
 
 /** Builds instances of payment apps based on installed third party Android payment apps. */
 public class AndroidPaymentAppFactory implements PaymentAppFactoryAddition {
-    private static final String ACTION_IS_READY_TO_PAY =
-            "org.chromium.intent.action.IS_READY_TO_PAY";
-
-    /** The action name for the Pay Basic-card Intent. */
-    private static final String ACTION_PAY_BASIC_CARD = "org.chromium.intent.action.PAY_BASIC_CARD";
-
-    /**
-     * The basic-card payment method name used by merchant and defined by W3C:
-     * https://w3c.github.io/webpayments-methods-card/#method-id
-     */
-    private static final String BASIC_CARD_PAYMENT_METHOD = "basic-card";
-
     @Override
-    public void create(WebContents webContents, Set<String> methods,
-            PaymentAppCreatedCallback callback) {
-        Context context = ChromeActivity.fromWebContents(webContents);
-        if (context == null) {
-            callback.onAllPaymentAppsCreated();
-            return;
-        }
-
-        Map<String, AndroidPaymentApp> installedApps = new HashMap<>();
-        PackageManager pm = context.getPackageManager();
-        Intent payIntent = new Intent();
-
-        boolean paymentAppsFilterEnabled =
-                ChromeFeatureList.isEnabled(ChromeFeatureList.ANDROID_PAYMENT_APPS_FILTER);
-        Intent filterIntent = new Intent(AndroidPaymentApp.ACTION_PAY);
-
-        for (String methodName : methods) {
-            if (methodName.startsWith(UrlConstants.HTTPS_URL_PREFIX)) {
-                payIntent.setAction(AndroidPaymentApp.ACTION_PAY);
-                payIntent.setData(Uri.parse(methodName));
-            } else if (methodName.equals(BASIC_CARD_PAYMENT_METHOD)) {
-                payIntent.setAction(ACTION_PAY_BASIC_CARD);
-                payIntent.setData(null);
-            } else {
-                continue;
-            }
-
-            List<ResolveInfo> matches = pm.queryIntentActivities(payIntent, 0);
-            for (int i = 0; i < matches.size(); i++) {
-                ResolveInfo match = matches.get(i);
-                String packageName = match.activityInfo.packageName;
-                if (paymentAppsFilterEnabled) {
-                    filterIntent.setPackage(packageName);
-                    if (pm.resolveActivity(filterIntent, 0) == null) continue;
-                }
-                AndroidPaymentApp installedApp = installedApps.get(packageName);
-                if (installedApp == null) {
-                    CharSequence label = match.loadLabel(pm);
-                    installedApp =
-                            new AndroidPaymentApp(webContents, packageName, match.activityInfo.name,
-                                    label == null ? "" : label.toString(), match.loadIcon(pm));
-                    callback.onPaymentAppCreated(installedApp);
-                    installedApps.put(packageName, installedApp);
-                }
-                installedApp.addMethodName(methodName);
-            }
-        }
-
-        List<ResolveInfo> matches = pm.queryIntentServices(new Intent(ACTION_IS_READY_TO_PAY), 0);
-        for (int i = 0; i < matches.size(); i++) {
-            ResolveInfo match = matches.get(i);
-            String packageName = match.serviceInfo.packageName;
-            AndroidPaymentApp installedApp = installedApps.get(packageName);
-            if (installedApp != null) installedApp.setIsReadyToPayAction(match.serviceInfo.name);
-        }
-
-        callback.onAllPaymentAppsCreated();
+    public void create(
+            WebContents webContents, Set<String> methods, PaymentAppCreatedCallback callback) {
+        AndroidPaymentAppFinder.find(webContents, methods,
+                ChromeFeatureList.isEnabled(ChromeFeatureList.ANDROID_PAYMENT_APPS_FILTER),
+                new PaymentManifestDownloader(webContents), new PaymentManifestParser(),
+                new PackageManagerDelegate(), callback);
     }
 
     /**
@@ -105,11 +39,11 @@
      * @return True if there are Android payment apps on device.
      */
     public static boolean hasAndroidPaymentApps() {
-        PackageManager pm = ContextUtils.getApplicationContext().getPackageManager();
+        PackageManagerDelegate packageManagerDelegate = new PackageManagerDelegate();
         // Note that all Android payment apps must support org.chromium.intent.action.PAY action
         // without additional data to be detected.
         Intent payIntent = new Intent(AndroidPaymentApp.ACTION_PAY);
-        return !pm.queryIntentActivities(payIntent, 0).isEmpty();
+        return !packageManagerDelegate.getActivitiesThatCanRespondToIntent(payIntent).isEmpty();
     }
 
     /**
@@ -121,14 +55,17 @@
     public static Map<String, Pair<String, Drawable>> getAndroidPaymentAppsInfo() {
         Map<String, Pair<String, Drawable>> paymentAppsInfo = new HashMap<>();
 
-        PackageManager pm = ContextUtils.getApplicationContext().getPackageManager();
+        PackageManagerDelegate packageManagerDelegate = new PackageManagerDelegate();
         Intent payIntent = new Intent(AndroidPaymentApp.ACTION_PAY);
-        List<ResolveInfo> matches = pm.queryIntentActivities(payIntent, 0);
+        List<ResolveInfo> matches =
+                packageManagerDelegate.getActivitiesThatCanRespondToIntent(payIntent);
         if (matches.isEmpty()) return paymentAppsInfo;
 
         for (ResolveInfo match : matches) {
+            CharSequence label = packageManagerDelegate.getAppLabel(match);
+            if (TextUtils.isEmpty(label)) continue;
             Pair<String, Drawable> appInfo =
-                    new Pair<>(match.loadLabel(pm).toString(), match.loadIcon(pm));
+                    new Pair<>(label.toString(), packageManagerDelegate.getAppIcon(match));
             paymentAppsInfo.put(match.activityInfo.packageName, appInfo);
         }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java
new file mode 100644
index 0000000..c27ccae2
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java
@@ -0,0 +1,263 @@
+// 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.
+
+package org.chromium.chrome.browser.payments;
+
+import android.content.Intent;
+import android.content.pm.ResolveInfo;
+import android.net.Uri;
+import android.text.TextUtils;
+
+import org.chromium.base.Log;
+import org.chromium.chrome.browser.UrlConstants;
+import org.chromium.chrome.browser.payments.PaymentAppFactory.PaymentAppCreatedCallback;
+import org.chromium.chrome.browser.payments.PaymentManifestVerifier.ManifestVerifyCallback;
+import org.chromium.components.payments.PaymentManifestDownloader;
+import org.chromium.components.payments.PaymentManifestParser;
+import org.chromium.content_public.browser.WebContents;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Finds installed native Android payment apps and verifies their signatures according to the
+ * payment method manifests. The manifests are located based on the payment method name, which
+ * is a URI that starts with "https://". The "basic-card" payment method is an exception: it's a
+ * common payment method that does not have a manifest and can be used by any payment app.
+ */
+public class AndroidPaymentAppFinder implements ManifestVerifyCallback {
+    private static final String TAG = "cr_PaymentAppFinder";
+
+    /** The name of the intent for the service to check whether an app is ready to pay. */
+    /* package */ static final String ACTION_IS_READY_TO_PAY =
+                          "org.chromium.intent.action.IS_READY_TO_PAY";
+
+    /** The name of the intent for the action of paying using "basic-card" method. */
+    /* package */ static final String ACTION_PAY_BASIC_CARD =
+                          "org.chromium.intent.action.PAY_BASIC_CARD";
+
+    /**
+     * The basic-card payment method name used by merchant and defined by W3C:
+     * https://w3c.github.io/webpayments-methods-card/#method-id
+     */
+    /* package */ static final String BASIC_CARD_PAYMENT_METHOD = "basic-card";
+
+    /** The maximum number of payment method manifests to download. */
+    private static final int MAX_NUMBER_OF_MANIFESTS = 10;
+
+    private final WebContents mWebContents;
+    private final boolean mQueryBasicCard;
+    private final Set<URI> mPaymentMethods;
+    private final PaymentManifestDownloader mDownloader;
+    private final PaymentManifestParser mParser;
+    private final PackageManagerDelegate mPackageManagerDelegate;
+    private final PaymentAppCreatedCallback mCallback;
+
+    /**
+     * A map of payment method names to the list of (yet) unverified Android apps that claim to
+     * handle these methods. Example payment method names in this data structure:
+     * "https://bobpay.com", "https://android.com/pay". Basic card is excluded.
+     */
+    private final Map<URI, Set<ResolveInfo>> mPendingApps;
+
+    /** A map of Android package name to the payment app. */
+    private final Map<String, AndroidPaymentApp> mResult;
+
+    /**
+     * Whether payment apps are required to have an intent filter with a single PAY action and no
+     * additional data, i.e., whether payments apps are required to show up in "Autofill and
+     * Payments" settings.
+     */
+    private final boolean mRequireShowInSettings;
+
+    /**
+     * The intent filter for a single PAY action and no additional data. Used to filter out payment
+     * apps that don't show up in "Autofill and Payments" settings.
+     */
+    private final Intent mSettingsLookup;
+
+    /**
+     * Finds native Android payment apps.
+     *
+     * @param webContents            The web contents that invoked the web payments API.
+     * @param methods                The list of payment methods requested by the merchant. For
+     *                               example, "https://bobpay.com", "https://android.com/pay",
+     *                               "basic-card".
+     * @param requireShowInSettings  Whether payment apps are required to show up in "autofill and
+     *                               Payments" settings.
+     * @param downloader             The manifest downloader.
+     * @param parser                 The manifest parser.
+     * @param packageManagerDelegate The package information retriever.
+     * @param callback               The asynchronous callback to be invoked (on the UI thread) when
+     *                               all Android payment apps have been found.
+     */
+    public static void find(WebContents webContents, Set<String> methods,
+            boolean requireShowInSettings, PaymentManifestDownloader downloader,
+            PaymentManifestParser parser, PackageManagerDelegate packageManagerDelegate,
+            PaymentAppCreatedCallback callback) {
+        new AndroidPaymentAppFinder(webContents, methods, requireShowInSettings, downloader, parser,
+                packageManagerDelegate, callback)
+                .findAndroidPaymentApps();
+    }
+
+    private AndroidPaymentAppFinder(WebContents webContents, Set<String> methods,
+            boolean requireShowInSettings, PaymentManifestDownloader downloader,
+            PaymentManifestParser parser, PackageManagerDelegate packageManagerDelegate,
+            PaymentAppCreatedCallback callback) {
+        mWebContents = webContents;
+        mQueryBasicCard = methods.contains(BASIC_CARD_PAYMENT_METHOD);
+        mPaymentMethods = new HashSet<>();
+        for (String method : methods) {
+            assert !TextUtils.isEmpty(method);
+
+            if (!method.startsWith(UrlConstants.HTTPS_URL_PREFIX)) continue;
+
+            URI uri;
+            try {
+                // Don't use java.net.URL, because it performs a synchronous DNS lookup in
+                // the constructor.
+                uri = new URI(method);
+            } catch (URISyntaxException e) {
+                continue;
+            }
+
+            if (uri.isAbsolute()) {
+                assert UrlConstants.HTTPS_SCHEME.equals(uri.getScheme());
+                mPaymentMethods.add(uri);
+            }
+        }
+
+        mDownloader = downloader;
+        mParser = parser;
+        mPackageManagerDelegate = packageManagerDelegate;
+        mCallback = callback;
+        mPendingApps = new HashMap<>();
+        mResult = new HashMap<>();
+        mRequireShowInSettings = requireShowInSettings;
+        mSettingsLookup = new Intent(AndroidPaymentApp.ACTION_PAY);
+    }
+
+    private void findAndroidPaymentApps() {
+        List<PaymentManifestVerifier> verifiers = new ArrayList<>();
+        if (!mPaymentMethods.isEmpty()) {
+            Intent payIntent = new Intent(AndroidPaymentApp.ACTION_PAY);
+            for (URI methodName : mPaymentMethods) {
+                payIntent.setData(Uri.parse(methodName.toString()));
+                List<ResolveInfo> apps =
+                        mPackageManagerDelegate.getActivitiesThatCanRespondToIntent(payIntent);
+                if (apps.isEmpty()) continue;
+
+                // Start the parser utility process as soon as possible, once we know that a
+                // manifest file needs to be parsed. The startup can take up to 2 seconds.
+                if (!mParser.isUtilityProcessRunning()) mParser.startUtilityProcess();
+
+                verifiers.add(new PaymentManifestVerifier(methodName, apps, mDownloader, mParser,
+                        mPackageManagerDelegate, this /* callback */));
+                mPendingApps.put(methodName, new HashSet<>(apps));
+                if (verifiers.size() == MAX_NUMBER_OF_MANIFESTS) {
+                    Log.d(TAG, "Reached maximum number of allowed payment app manifests.");
+                    break;
+                }
+            }
+        }
+
+        if (mQueryBasicCard) {
+            Intent basicCardPayIntent = new Intent(ACTION_PAY_BASIC_CARD);
+            List<ResolveInfo> apps =
+                    mPackageManagerDelegate.getActivitiesThatCanRespondToIntent(basicCardPayIntent);
+            for (int i = 0; i < apps.size(); i++) {
+                // Chrome does not verify app manifests for "basic-card" support.
+                onValidPaymentApp(BASIC_CARD_PAYMENT_METHOD, apps.get(i));
+            }
+        }
+
+        if (verifiers.isEmpty()) {
+            onSearchFinished();
+            return;
+        }
+
+        for (int i = 0; i < verifiers.size(); i++) {
+            verifiers.get(i).verify();
+        }
+    }
+
+    @Override
+    public void onValidPaymentApp(URI methodName, ResolveInfo resolveInfo) {
+        onValidPaymentApp(methodName.toString(), resolveInfo);
+        removePendingApp(methodName, resolveInfo);
+    }
+
+    /** Same as above, but also works for non-URI method names, e.g., "basic-card". */
+    private void onValidPaymentApp(String methodName, ResolveInfo resolveInfo) {
+        String packageName = resolveInfo.activityInfo.packageName;
+        AndroidPaymentApp app = mResult.get(packageName);
+        if (app == null) {
+            if (mRequireShowInSettings) {
+                mSettingsLookup.setPackage(packageName);
+                if (mPackageManagerDelegate.resolveActivity(mSettingsLookup) == null) return;
+            }
+            CharSequence label = mPackageManagerDelegate.getAppLabel(resolveInfo);
+            if (TextUtils.isEmpty(label)) {
+                Log.d(TAG,
+                        String.format(Locale.getDefault(), "Skipping '%s' because of empty label.",
+                                packageName));
+                return;
+            }
+            app = new AndroidPaymentApp(mWebContents, packageName, resolveInfo.activityInfo.name,
+                    label.toString(), mPackageManagerDelegate.getAppIcon(resolveInfo));
+            mResult.put(packageName, app);
+        }
+        app.addMethodName(methodName);
+    }
+
+    @Override
+    public void onInvalidPaymentApp(URI methodName, ResolveInfo resolveInfo) {
+        removePendingApp(methodName, resolveInfo);
+    }
+
+    /** Removes the (method, app) pair from the list of pending information to be verified. */
+    private void removePendingApp(URI methodName, ResolveInfo resolveInfo) {
+        Set<ResolveInfo> pendingAppsForMethod = mPendingApps.get(methodName);
+        pendingAppsForMethod.remove(resolveInfo);
+        if (pendingAppsForMethod.isEmpty()) mPendingApps.remove(methodName);
+        if (mPendingApps.isEmpty()) onSearchFinished();
+    }
+
+    @Override
+    public void onInvalidManifest(URI methodName) {
+        mPendingApps.remove(methodName);
+        if (mPendingApps.isEmpty()) onSearchFinished();
+    }
+
+    /**
+     * Checks for IS_READY_TO_PAY service in each valid payment app and returns the valid apps
+     * to the caller. Called when finished verifying all payment methods and apps.
+     */
+    private void onSearchFinished() {
+        assert mPendingApps.isEmpty();
+
+        if (mParser.isUtilityProcessRunning()) mParser.stopUtilityProcess();
+
+        List<ResolveInfo> resolveInfos = mPackageManagerDelegate.getServicesThatCanRespondToIntent(
+                new Intent(ACTION_IS_READY_TO_PAY));
+        for (int i = 0; i < resolveInfos.size(); i++) {
+            ResolveInfo resolveInfo = resolveInfos.get(i);
+            AndroidPaymentApp app = mResult.get(resolveInfo.serviceInfo.packageName);
+            if (app != null) app.setIsReadyToPayAction(resolveInfo.serviceInfo.name);
+        }
+
+        for (Map.Entry<String, AndroidPaymentApp> entry : mResult.entrySet()) {
+            mCallback.onPaymentAppCreated(entry.getValue());
+        }
+
+        mCallback.onAllPaymentAppsCreated();
+    }
+}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/PackageManagerDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/PackageManagerDelegate.java
new file mode 100644
index 0000000..8afbbc2a
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/PackageManagerDelegate.java
@@ -0,0 +1,99 @@
+// 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.
+
+package org.chromium.chrome.browser.payments;
+
+import android.content.Intent;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.ResolveInfo;
+import android.graphics.drawable.Drawable;
+import android.os.StrictMode;
+import android.os.StrictMode.ThreadPolicy;
+
+import org.chromium.base.ContextUtils;
+
+import java.util.List;
+
+/** Abstraction of Android's package manager to enable unit testing. */
+public class PackageManagerDelegate {
+    /**
+     * Retrieves package information of an installed application.
+     *
+     * @param packageName The package name of an installed application.
+     * @return The package information of the installed application.
+     */
+    public PackageInfo getPackageInfoWithSignatures(String packageName) {
+        try {
+            return ContextUtils.getApplicationContext().getPackageManager().getPackageInfo(
+                    packageName, PackageManager.GET_SIGNATURES);
+        } catch (NameNotFoundException e) {
+            return null;
+        }
+    }
+
+    /**
+     * Retrieves the single activity that matches the given intent, or null if none found.
+     * @param intent The intent to query.
+     * @return The matching activity.
+     */
+    public ResolveInfo resolveActivity(Intent intent) {
+        ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads();
+        try {
+            return ContextUtils.getApplicationContext().getPackageManager().resolveActivity(
+                    intent, 0);
+        } finally {
+            StrictMode.setThreadPolicy(oldPolicy);
+        }
+    }
+
+    /**
+     * Retrieves the list of activities that can respond to the given intent.
+     * @param intent The intent to query.
+     * @return The list of activities that can respond to the intent.
+     */
+    public List<ResolveInfo> getActivitiesThatCanRespondToIntent(Intent intent) {
+        ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads();
+        try {
+            return ContextUtils.getApplicationContext().getPackageManager().queryIntentActivities(
+                    intent, 0);
+        } finally {
+            StrictMode.setThreadPolicy(oldPolicy);
+        }
+    }
+
+    /**
+     * Retrieves the list of services that can respond to the given intent.
+     * @param intent The intent to query.
+     * @return The list of services that can respond to the intent.
+     */
+    public List<ResolveInfo> getServicesThatCanRespondToIntent(Intent intent) {
+        ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads();
+        try {
+            return ContextUtils.getApplicationContext().getPackageManager().queryIntentServices(
+                    intent, 0);
+        } finally {
+            StrictMode.setThreadPolicy(oldPolicy);
+        }
+    }
+
+    /**
+     * Retrieves the label of the app.
+     * @param resolveInfo The identifying information for an app.
+     * @return The label for this app.
+     */
+    public CharSequence getAppLabel(ResolveInfo resolveInfo) {
+        return resolveInfo.loadLabel(ContextUtils.getApplicationContext().getPackageManager());
+    }
+
+    /**
+     * Retrieves the icon of the app.
+     * @param resolveInfo The identifying information for an app.
+     * @return The icon for this app.
+     */
+    public Drawable getAppIcon(ResolveInfo resolveInfo) {
+        return resolveInfo.loadIcon(ContextUtils.getApplicationContext().getPackageManager());
+    }
+}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentManifestVerifier.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentManifestVerifier.java
new file mode 100644
index 0000000..0b20667
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentManifestVerifier.java
@@ -0,0 +1,246 @@
+// 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.
+
+package org.chromium.chrome.browser.payments;
+
+import android.content.pm.PackageInfo;
+import android.content.pm.ResolveInfo;
+import android.content.pm.Signature;
+
+import org.chromium.base.Log;
+import org.chromium.chrome.browser.UrlConstants;
+import org.chromium.components.payments.PaymentManifestDownloader;
+import org.chromium.components.payments.PaymentManifestDownloader.ManifestDownloadCallback;
+import org.chromium.components.payments.PaymentManifestParser;
+import org.chromium.components.payments.PaymentManifestParser.ManifestParseCallback;
+import org.chromium.payments.mojom.PaymentManifestSection;
+
+import java.net.URI;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.Formatter;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Verifies that the discovered native Android payment apps have the sufficient privileges
+ * to handle a single payment method. Downloads and parses the manifest to compare package
+ * names, versions, and signatures to the apps.
+ *
+ * Spec:
+ * https://docs.google.com/document/d/1izV4uC-tiRJG3JLooqY3YRLU22tYOsLTNq0P_InPJeE/edit#heading=h.cjp3jlnl47h5
+ */
+public class PaymentManifestVerifier implements ManifestDownloadCallback, ManifestParseCallback {
+    private static final String TAG = "cr_PaymentManifest";
+
+    /** Interface for the callback to invoke when finished verification. */
+    public interface ManifestVerifyCallback {
+        /**
+         * Enables invoking the given native Android payment app for the given payment method.
+         * Called when the app has been found to have the right privileges to handle this payment
+         * method.
+         *
+         * @param methodName  The payment method name that the payment app offers to handle.
+         * @param resolveInfo Identifying information for the native Android payment app.
+         */
+        void onValidPaymentApp(URI methodName, ResolveInfo resolveInfo);
+
+        /**
+         * Disables invoking the given native Android payment app for the given payment method.
+         * Called when the app has been found to not have the right privileges to handle this
+         * payment app.
+         *
+         * @param methodName  The payment method name that the payment app offers to handle.
+         * @param resolveInfo Identifying information for the native Android payment app.
+         */
+        void onInvalidPaymentApp(URI methodName, ResolveInfo resolveInfo);
+
+        /**
+         * Disables invoking any native Android payment app for the given payment method. Called if
+         * unable to download or parse the payment method manifest.
+         *
+         * @param methodName The payment method name that has an invalid payment method manifest.
+         */
+        void onInvalidManifest(URI methodName);
+    }
+
+    /** Identifying information about an installed native Android payment app. */
+    private static class AppInfo {
+        /** Identifies a native Android payment app. */
+        public ResolveInfo resolveInfo;
+
+        /** The version code for the native Android payment app, e.g., 123. */
+        public long version;
+
+        /**
+         * The SHA256 certificate fingerprints for the native Android payment app, .e.g,
+         * ["308201dd30820146020101300d06092a864886f70d010105050030"].
+         */
+        public Set<String> sha256CertFingerprints;
+    }
+
+    private final PaymentManifestDownloader mDownloader;
+    private final URI mMethodName;
+    private final List<AppInfo> mMatchingApps;
+    private final PaymentManifestParser mParser;
+    private final PackageManagerDelegate mPackageManagerDelegate;
+    private final ManifestVerifyCallback mCallback;
+    private final MessageDigest mMessageDigest;
+
+    /**
+     * Builds the manifest verifier.
+     *
+     * @param methodName             The name of the payment method name that apps offer to handle.
+     *                               Must be an absolute URI with HTTPS scheme.
+     * @param matchingApps           The identifying information for the native Android payment apps
+     *                               that offer to handle this payment method.
+     * @param downloader             The manifest downloader.
+     * @param parser                 The manifest parser.
+     * @param packageManagerDelegate The package information retriever.
+     * @param callback               The callback to be notified of verification result.
+     */
+    public PaymentManifestVerifier(URI methodName, List<ResolveInfo> matchingApps,
+            PaymentManifestDownloader downloader, PaymentManifestParser parser,
+            PackageManagerDelegate packageManagerDelegate, ManifestVerifyCallback callback) {
+        assert methodName.isAbsolute();
+        assert UrlConstants.HTTPS_SCHEME.equals(methodName.getScheme());
+        assert !matchingApps.isEmpty();
+
+        mMethodName = methodName;
+        mMatchingApps = new ArrayList<>();
+        for (int i = 0; i < matchingApps.size(); i++) {
+            AppInfo appInfo = new AppInfo();
+            appInfo.resolveInfo = matchingApps.get(i);
+            mMatchingApps.add(appInfo);
+        }
+        mDownloader = downloader;
+        mParser = parser;
+        mPackageManagerDelegate = packageManagerDelegate;
+        mCallback = callback;
+
+        MessageDigest md = null;
+        try {
+            md = MessageDigest.getInstance("SHA-256");
+        } catch (NoSuchAlgorithmException e) {
+            // Intentionally ignore.
+            Log.d(TAG, "Unable to generate SHA-256 hashes. Only \"package\": \"*\" supported.");
+        }
+        mMessageDigest = md;
+    }
+
+    /**
+     * Verifies that the discovered native Android payment apps have the sufficient
+     * privileges to handle this payment method.
+     */
+    public void verify() {
+        mDownloader.download(mMethodName, this);
+    }
+
+    @Override
+    public void onManifestDownloadSuccess(String content) {
+        mParser.parse(content, this);
+    }
+
+    @Override
+    public void onManifestDownloadFailure() {
+        mCallback.onInvalidManifest(mMethodName);
+    }
+
+    @Override
+    public void onManifestParseSuccess(PaymentManifestSection[] manifest) {
+        assert manifest != null;
+        assert manifest.length > 0;
+
+        for (int i = 0; i < manifest.length; i++) {
+            PaymentManifestSection section = manifest[i];
+            // "package": "*" in the manifest file indicates an unrestricted payment method. Any app
+            // can use this payment method name.
+            if ("*".equals(section.packageName)) {
+                for (int j = 0; j < mMatchingApps.size(); j++) {
+                    mCallback.onValidPaymentApp(mMethodName, mMatchingApps.get(j).resolveInfo);
+                }
+                return;
+            }
+        }
+
+        if (mMessageDigest == null) {
+            mCallback.onInvalidManifest(mMethodName);
+            return;
+        }
+
+        for (int i = 0; i < mMatchingApps.size(); i++) {
+            AppInfo appInfo = mMatchingApps.get(i);
+            PackageInfo packageInfo = mPackageManagerDelegate.getPackageInfoWithSignatures(
+                    appInfo.resolveInfo.activityInfo.packageName);
+
+            // Leaving appInfo.sha256CertFingerprints uninitialized will call onInvalidPaymentApp()
+            // for this app below.
+            if (packageInfo == null) continue;
+
+            appInfo.version = packageInfo.versionCode;
+            appInfo.sha256CertFingerprints = new HashSet<>();
+            Signature[] signatures = packageInfo.signatures;
+            for (int j = 0; j < signatures.length; j++) {
+                mMessageDigest.update(signatures[j].toByteArray());
+
+                // The digest is reset after completing the hash computation.
+                appInfo.sha256CertFingerprints.add(byteArrayToString(mMessageDigest.digest()));
+            }
+        }
+
+        List<Set<String>> sectionsFingerprints = new ArrayList<>();
+        for (int i = 0; i < manifest.length; i++) {
+            PaymentManifestSection section = manifest[i];
+            Set<String> fingerprints = new HashSet<>();
+            if (section.sha256CertFingerprints != null) {
+                for (int j = 0; j < section.sha256CertFingerprints.length; j++) {
+                    fingerprints.add(byteArrayToString(section.sha256CertFingerprints[j]));
+                }
+            }
+            sectionsFingerprints.add(fingerprints);
+        }
+
+        for (int i = 0; i < mMatchingApps.size(); i++) {
+            AppInfo appInfo = mMatchingApps.get(i);
+            boolean isAllowed = false;
+            for (int j = 0; j < manifest.length; j++) {
+                PaymentManifestSection section = manifest[j];
+                if (appInfo.resolveInfo.activityInfo.packageName.equals(section.packageName)
+                        && appInfo.version >= section.version
+                        && appInfo.sha256CertFingerprints != null
+                        && appInfo.sha256CertFingerprints.equals(sectionsFingerprints.get(j))) {
+                    mCallback.onValidPaymentApp(mMethodName, appInfo.resolveInfo);
+                    isAllowed = true;
+                    break;
+                }
+            }
+            if (!isAllowed) mCallback.onInvalidPaymentApp(mMethodName, appInfo.resolveInfo);
+        }
+    }
+
+    /**
+     * Formats bytes into a string for easier comparison as a member of a set.
+     *
+     * @param input Input bytes.
+     * @return A string representation of the input bytes, e.g., "0123456789abcdef".
+     */
+    private static String byteArrayToString(byte[] input) {
+        if (input == null) return null;
+
+        StringBuilder builder = new StringBuilder(input.length * 2);
+        Formatter formatter = new Formatter(builder);
+        for (byte b : input) {
+            formatter.format("%02x", b);
+        }
+
+        return builder.toString();
+    }
+
+    @Override
+    public void onManifestParseFailure() {
+        mCallback.onInvalidManifest(mMethodName);
+    }
+}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
index 83ea538..fa2b40a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
@@ -44,6 +44,8 @@
 import org.chromium.chrome.browser.tabmodel.TabModelObserver;
 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
 import org.chromium.chrome.browser.tabmodel.TabModelSelectorObserver;
+import org.chromium.components.payments.CurrencyFormatter;
+import org.chromium.components.payments.PaymentValidator;
 import org.chromium.components.url_formatter.UrlFormatter;
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.mojo.system.MojoException;
@@ -403,8 +405,8 @@
 
         if (!parseAndValidateDetailsOrDisconnectFromClient(details)) return;
 
-        PaymentAppFactory.getInstance().create(
-                mWebContents, Collections.unmodifiableSet(mMethodData.keySet()), this);
+        PaymentAppFactory.getInstance().create(mWebContents,
+                Collections.unmodifiableSet(mMethodData.keySet()), this /* callback */);
 
         mRequestShipping = options != null && options.requestShipping;
         mRequestPayerName = options != null && options.requestPayerName;
@@ -632,6 +634,15 @@
             }
         }
 
+        if (queryApps.isEmpty()) {
+            CanMakePaymentQuery query = sCanMakePaymentQueries.get(mSchemelessOriginForPaymentApp);
+            if (query != null && query.matchesPaymentMethods(mMethodData)) {
+                query.notifyObserversOfResponse(false);
+            }
+        }
+
+        if (disconnectIfNoPaymentMethodsSupported()) return;
+
         // Query instruments after mMerchantSupportsAutofillPaymentInstruments has been initialized,
         // so a fast response from a non-autofill payment app at the front of the app list does not
         // cause NOT_SUPPORTED payment rejection.
@@ -1386,7 +1397,9 @@
         }
 
         CanMakePaymentQuery query = sCanMakePaymentQueries.get(mSchemelessOriginForPaymentApp);
-        if (query != null) query.notifyObserversOfResponse(mCanMakePayment);
+        if (query != null && query.matchesPaymentMethods(mMethodData)) {
+            query.notifyObserversOfResponse(mCanMakePayment);
+        }
 
         // The list of payment instruments is ready to display.
         List<PaymentInstrument> sortedInstruments = new ArrayList<>();
@@ -1412,15 +1425,14 @@
      * @return True if no payment methods are supported
      */
     private boolean disconnectIfNoPaymentMethodsSupported() {
-        if (!isFinishedQueryingPaymentApps()) return false;
+        if (!isFinishedQueryingPaymentApps() || !mIsCurrentPaymentRequestShowing) return false;
 
         boolean foundPaymentMethods = mPaymentMethodsSection != null
                 && !mPaymentMethodsSection.isEmpty();
         boolean userCanAddCreditCard = mMerchantSupportsAutofillPaymentInstruments
                 && !ChromeFeatureList.isEnabled(ChromeFeatureList.NO_CREDIT_CARD_ABORT);
 
-        if (!mArePaymentMethodsSupported || (mIsCurrentPaymentRequestShowing && !foundPaymentMethods
-                                                    && !userCanAddCreditCard)) {
+        if (!mArePaymentMethodsSupported || (!foundPaymentMethods && !userCanAddCreditCard)) {
             // All payment apps have responded, but none of them have instruments. It's possible to
             // add credit cards, but the merchant does not support them either. The payment request
             // must be rejected.
diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni
index 00911f8..5a528bb5 100644
--- a/chrome/android/java_sources.gni
+++ b/chrome/android/java_sources.gni
@@ -700,6 +700,7 @@
   "java/src/org/chromium/chrome/browser/password_manager/Credential.java",
   "java/src/org/chromium/chrome/browser/payments/AddressEditor.java",
   "java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFactory.java",
+  "java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java",
   "java/src/org/chromium/chrome/browser/payments/AndroidPaymentApp.java",
   "java/src/org/chromium/chrome/browser/payments/AutofillAddress.java",
   "java/src/org/chromium/chrome/browser/payments/AutofillContact.java",
@@ -707,18 +708,18 @@
   "java/src/org/chromium/chrome/browser/payments/AutofillPaymentInstrument.java",
   "java/src/org/chromium/chrome/browser/payments/CardEditor.java",
   "java/src/org/chromium/chrome/browser/payments/ContactEditor.java",
-  "java/src/org/chromium/chrome/browser/payments/CurrencyFormatter.java",
   "java/src/org/chromium/chrome/browser/payments/EditorBase.java",
+  "java/src/org/chromium/chrome/browser/payments/PackageManagerDelegate.java",
   "java/src/org/chromium/chrome/browser/payments/PaymentApp.java",
   "java/src/org/chromium/chrome/browser/payments/PaymentAppFactory.java",
   "java/src/org/chromium/chrome/browser/payments/PaymentInstrument.java",
+  "java/src/org/chromium/chrome/browser/payments/PaymentManifestVerifier.java",
   "java/src/org/chromium/chrome/browser/payments/PaymentPreferencesUtil.java",
   "java/src/org/chromium/chrome/browser/payments/PaymentRequestFactory.java",
   "java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java",
   "java/src/org/chromium/chrome/browser/payments/PaymentRequestJourneyLogger.java",
   "java/src/org/chromium/chrome/browser/payments/PaymentRequestMetrics.java",
   "java/src/org/chromium/chrome/browser/payments/PaymentResponseHelper.java",
-  "java/src/org/chromium/chrome/browser/payments/PaymentValidator.java",
   "java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentApp.java",
   "java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentAppBridge.java",
   "java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentInstrument.java",
@@ -1610,8 +1611,10 @@
   "junit/src/org/chromium/chrome/browser/offlinepages/downloads/OfflinePageDownloadBridgeTest.java",
   "junit/src/org/chromium/chrome/browser/omaha/ResponseParserTest.java",
   "junit/src/org/chromium/chrome/browser/omaha/VersionNumberTest.java",
+  "junit/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderTest.java",
   "junit/src/org/chromium/chrome/browser/payments/AutofillContactTest.java",
   "junit/src/org/chromium/chrome/browser/payments/AutofillContactUnitTest.java",
+  "junit/src/org/chromium/chrome/browser/payments/PaymentManifestVerifierTest.java",
   "junit/src/org/chromium/chrome/browser/physicalweb/MockPwsClient.java",
   "junit/src/org/chromium/chrome/browser/physicalweb/PwsClientImplTest.java",
   "junit/src/org/chromium/chrome/browser/physicalweb/PwsResultTest.java",
diff --git a/chrome/android/javatests/DEPS b/chrome/android/javatests/DEPS
index 54787d21..7f564ef 100644
--- a/chrome/android/javatests/DEPS
+++ b/chrome/android/javatests/DEPS
@@ -7,6 +7,7 @@
   "+components/location/android/java",
   "+components/minidump_uploader",
   "+components/navigation_interception",
+  "+components/payments/content/android/java/src/org/chromium/components/payments",
   "+components/precache/android/javatests",
   "+components/sync/android/java/src/org/chromium/components/sync",
   # We should only depend on the util package of something that lives in
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/CurrencyFormatterTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/CurrencyFormatterTest.java
index a2740cd..4c8e4e2 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/CurrencyFormatterTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/CurrencyFormatterTest.java
@@ -9,6 +9,7 @@
 import junit.framework.Assert;
 
 import org.chromium.base.LocaleUtils;
+import org.chromium.components.payments.CurrencyFormatter;
 import org.chromium.content.browser.test.NativeLibraryTestBase;
 
 import java.util.Arrays;
diff --git a/chrome/android/junit/DEPS b/chrome/android/junit/DEPS
index 23c55aec..859f7f4 100644
--- a/chrome/android/junit/DEPS
+++ b/chrome/android/junit/DEPS
@@ -1,5 +1,6 @@
 include_rules = [
   "+components/bookmarks/common/android",
+  "+components/payments/content/android/java/src/org/chromium/components/payments",
   "+components/sync/android/java/src/org/chromium/components/sync",
   "+components/sync/test/android/javatests/src/org/chromium/components/sync/test/util",
   "+content/public/android/java",
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderTest.java
new file mode 100644
index 0000000..bf68431
--- /dev/null
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderTest.java
@@ -0,0 +1,235 @@
+// 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.
+
+package org.chromium.chrome.browser.payments;
+
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
+import android.content.pm.Signature;
+import android.net.Uri;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentMatcher;
+import org.mockito.ArgumentMatchers;
+import org.mockito.Mockito;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+
+import org.chromium.chrome.browser.payments.PaymentAppFactory.PaymentAppCreatedCallback;
+import org.chromium.components.payments.PaymentManifestDownloader;
+import org.chromium.components.payments.PaymentManifestParser;
+import org.chromium.content_public.browser.WebContents;
+import org.chromium.payments.mojom.PaymentManifestSection;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/** Tests for the native Android payment app finder. */
+@RunWith(RobolectricTestRunner.class)
+@Config(sdk = 21, manifest = Config.NONE)
+public class AndroidPaymentAppFinderTest {
+    public AndroidPaymentAppFinderTest() {}
+
+    @Test
+    public void testNoValidPaymentMethodNames() {
+        Set<String> methodNames = new HashSet<>();
+        methodNames.add("unknown-payment-method-name");
+        methodNames.add("http://not.secure.payment.method.name.com");
+        methodNames.add("https://"); // Invalid URI.
+        PaymentAppCreatedCallback callback = Mockito.mock(PaymentAppCreatedCallback.class);
+
+        AndroidPaymentAppFinder.find(Mockito.mock(WebContents.class), methodNames, false,
+                Mockito.mock(PaymentManifestDownloader.class),
+                Mockito.mock(PaymentManifestParser.class),
+                Mockito.mock(PackageManagerDelegate.class), callback);
+
+        Mockito.verify(callback, Mockito.never())
+                .onPaymentAppCreated(Mockito.any(PaymentApp.class));
+        Mockito.verify(callback).onAllPaymentAppsCreated();
+    }
+
+    @Test
+    public void testQueryBasicCardsWithoutApps() {
+        PackageManagerDelegate packageManagerDelegate = Mockito.mock(PackageManagerDelegate.class);
+        Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntent(
+                             new Intent(AndroidPaymentAppFinder.ACTION_PAY_BASIC_CARD)))
+                .thenReturn(new ArrayList<ResolveInfo>());
+        Set<String> methodNames = new HashSet<>();
+        methodNames.add(AndroidPaymentAppFinder.BASIC_CARD_PAYMENT_METHOD);
+        PaymentAppCreatedCallback callback = Mockito.mock(PaymentAppCreatedCallback.class);
+
+        AndroidPaymentAppFinder.find(Mockito.mock(WebContents.class), methodNames, false,
+                Mockito.mock(PaymentManifestDownloader.class),
+                Mockito.mock(PaymentManifestParser.class), packageManagerDelegate, callback);
+
+        Mockito.verify(callback, Mockito.never())
+                .onPaymentAppCreated(Mockito.any(PaymentApp.class));
+        Mockito.verify(callback).onAllPaymentAppsCreated();
+    }
+
+    @Test
+    public void testQueryBasicCardsWithTwoApps() {
+        List<ResolveInfo> activities = new ArrayList<>();
+        ResolveInfo alicePay = new ResolveInfo();
+        alicePay.activityInfo = new ActivityInfo();
+        alicePay.activityInfo.packageName = "com.alicepay.app";
+        alicePay.activityInfo.name = "com.alicepay.app.WebPaymentActivity";
+        activities.add(alicePay);
+        ResolveInfo bobPay = new ResolveInfo();
+        bobPay.activityInfo = new ActivityInfo();
+        bobPay.activityInfo.packageName = "com.bobpay.app";
+        bobPay.activityInfo.name = "com.bobpay.app.WebPaymentActivity";
+        activities.add(bobPay);
+        PackageManagerDelegate packageManagerDelegate = Mockito.mock(PackageManagerDelegate.class);
+        Mockito.when(packageManagerDelegate.getAppLabel(Mockito.any(ResolveInfo.class)))
+                .thenReturn("A non-empty label");
+        Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntent(
+                             new Intent(AndroidPaymentAppFinder.ACTION_PAY_BASIC_CARD)))
+                .thenReturn(activities);
+        Mockito.when(packageManagerDelegate.getServicesThatCanRespondToIntent(
+                             new Intent(AndroidPaymentAppFinder.ACTION_IS_READY_TO_PAY)))
+                .thenReturn(new ArrayList<ResolveInfo>());
+        Set<String> methodNames = new HashSet<>();
+        methodNames.add(AndroidPaymentAppFinder.BASIC_CARD_PAYMENT_METHOD);
+        PaymentAppCreatedCallback callback = Mockito.mock(PaymentAppCreatedCallback.class);
+
+        AndroidPaymentAppFinder.find(Mockito.mock(WebContents.class), methodNames, false,
+                Mockito.mock(PaymentManifestDownloader.class),
+                Mockito.mock(PaymentManifestParser.class), packageManagerDelegate, callback);
+
+        Mockito.verify(callback).onPaymentAppCreated(
+                ArgumentMatchers.argThat(Matches.paymentAppIdentifier("com.alicepay.app")));
+        Mockito.verify(callback).onPaymentAppCreated(
+                ArgumentMatchers.argThat(Matches.paymentAppIdentifier("com.bobpay.app")));
+        Mockito.verify(callback).onAllPaymentAppsCreated();
+    }
+
+    @Test
+    public void testQueryBobPayWithoutApps() {
+        Intent bobPayIntent = new Intent("org.chromium.intent.action.PAY");
+        bobPayIntent.setData(Uri.parse("https://bobpay.com"));
+        PackageManagerDelegate packageManagerDelegate = Mockito.mock(PackageManagerDelegate.class);
+        Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntent(bobPayIntent))
+                .thenReturn(new ArrayList<ResolveInfo>());
+        Set<String> methodNames = new HashSet<>();
+        methodNames.add("https://bobpay.com");
+        PaymentAppCreatedCallback callback = Mockito.mock(PaymentAppCreatedCallback.class);
+
+        AndroidPaymentAppFinder.find(Mockito.mock(WebContents.class), methodNames, false,
+                Mockito.mock(PaymentManifestDownloader.class),
+                Mockito.mock(PaymentManifestParser.class), packageManagerDelegate, callback);
+
+        Mockito.verify(callback, Mockito.never())
+                .onPaymentAppCreated(Mockito.any(PaymentApp.class));
+        Mockito.verify(callback).onAllPaymentAppsCreated();
+    }
+
+    @Test
+    public void testQueryBobPayWithOneAppThatHasIsReadyToPayService() {
+        List<ResolveInfo> activities = new ArrayList<>();
+        ResolveInfo bobPay = new ResolveInfo();
+        bobPay.activityInfo = new ActivityInfo();
+        bobPay.activityInfo.packageName = "com.bobpay.app";
+        bobPay.activityInfo.name = "com.bobpay.app.WebPaymentActivity";
+        activities.add(bobPay);
+        Intent bobPayIntent = new Intent("org.chromium.intent.action.PAY");
+        bobPayIntent.setData(Uri.parse("https://bobpay.com"));
+        PackageManagerDelegate packageManagerDelegate = Mockito.mock(PackageManagerDelegate.class);
+        Mockito.when(packageManagerDelegate.getAppLabel(Mockito.any(ResolveInfo.class)))
+                .thenReturn("A non-empty label");
+        Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntent(bobPayIntent))
+                .thenReturn(activities);
+
+        List<ResolveInfo> services = new ArrayList<>();
+        ResolveInfo isBobPayReadyToPay = new ResolveInfo();
+        isBobPayReadyToPay.serviceInfo = new ServiceInfo();
+        isBobPayReadyToPay.serviceInfo.packageName = "com.bobpay.app";
+        isBobPayReadyToPay.serviceInfo.name = "com.bobpay.app.IsReadyToWebPay";
+        services.add(isBobPayReadyToPay);
+        Intent isReadyToPayIntent = new Intent(AndroidPaymentAppFinder.ACTION_IS_READY_TO_PAY);
+        Mockito.when(packageManagerDelegate.getServicesThatCanRespondToIntent(isReadyToPayIntent))
+                .thenReturn(services);
+
+        PackageInfo bobPayPackageInfo = new PackageInfo();
+        bobPayPackageInfo.versionCode = 10;
+        bobPayPackageInfo.signatures = new Signature[1];
+        bobPayPackageInfo.signatures[0] = new Signature("01020304050607080900");
+        Mockito.when(packageManagerDelegate.getPackageInfoWithSignatures("com.bobpay.app"))
+                .thenReturn(bobPayPackageInfo);
+
+        PaymentManifestDownloader downloader = new PaymentManifestDownloader(null) {
+            @Override
+            public void download(URI uri, ManifestDownloadCallback callback) {
+                callback.onManifestDownloadSuccess("some content here");
+            }
+        };
+
+        PaymentManifestParser parser = new PaymentManifestParser() {
+            @Override
+            public void parse(String content, ManifestParseCallback callback) {
+                PaymentManifestSection[] manifest = new PaymentManifestSection[1];
+                manifest[0] = new PaymentManifestSection();
+                manifest[0].packageName = "com.bobpay.app";
+                manifest[0].version = 10;
+                // SHA256("01020304050607080900"):
+                manifest[0].sha256CertFingerprints = new byte[][] {{(byte) 0x9A, (byte) 0x89,
+                        (byte) 0xC6, (byte) 0x8C, (byte) 0x4C, (byte) 0x5E, (byte) 0x28,
+                        (byte) 0xB8, (byte) 0xC4, (byte) 0xA5, (byte) 0x56, (byte) 0x76,
+                        (byte) 0x73, (byte) 0xD4, (byte) 0x62, (byte) 0xFF, (byte) 0xF5,
+                        (byte) 0x15, (byte) 0xDB, (byte) 0x46, (byte) 0x11, (byte) 0x6F,
+                        (byte) 0x99, (byte) 0x00, (byte) 0x62, (byte) 0x4D, (byte) 0x09,
+                        (byte) 0xC4, (byte) 0x74, (byte) 0xF5, (byte) 0x93, (byte) 0xFB}};
+                callback.onManifestParseSuccess(manifest);
+            }
+
+            @Override
+            public void startUtilityProcess() {}
+
+            @Override
+            public void stopUtilityProcess() {}
+        };
+
+        Set<String> methodNames = new HashSet<>();
+        methodNames.add("https://bobpay.com");
+        PaymentAppCreatedCallback callback = Mockito.mock(PaymentAppCreatedCallback.class);
+
+        AndroidPaymentAppFinder.find(Mockito.mock(WebContents.class), methodNames, false,
+                downloader, parser, packageManagerDelegate, callback);
+
+        Mockito.verify(callback).onPaymentAppCreated(
+                ArgumentMatchers.argThat(Matches.paymentAppIdentifier("com.bobpay.app")));
+        Mockito.verify(callback).onAllPaymentAppsCreated();
+    }
+
+    private static final class Matches implements ArgumentMatcher<PaymentApp> {
+        private final String mExpectedAppIdentifier;
+
+        private Matches(String expectedAppIdentifier) {
+            mExpectedAppIdentifier = expectedAppIdentifier;
+        }
+
+        /**
+         * Builds a matcher based on payment app identifier.
+         *
+         * @param expectedAppIdentifier The expected app identifier to match.
+         * @return A matcher to use in a mock expectation.
+         */
+        public static ArgumentMatcher<PaymentApp> paymentAppIdentifier(
+                String expectedAppIdentifier) {
+            return new Matches(expectedAppIdentifier);
+        }
+
+        @Override
+        public boolean matches(PaymentApp app) {
+            return app.getAppIdentifier().equals(mExpectedAppIdentifier);
+        }
+    }
+}
\ No newline at end of file
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/payments/PaymentManifestVerifierTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/payments/PaymentManifestVerifierTest.java
new file mode 100644
index 0000000..564d708
--- /dev/null
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/payments/PaymentManifestVerifierTest.java
@@ -0,0 +1,161 @@
+// 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.
+
+package org.chromium.chrome.browser.payments;
+
+import android.content.pm.ActivityInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.ResolveInfo;
+import android.content.pm.Signature;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+
+import org.chromium.chrome.browser.payments.PaymentManifestVerifier.ManifestVerifyCallback;
+import org.chromium.components.payments.PaymentManifestDownloader;
+import org.chromium.components.payments.PaymentManifestParser;
+import org.chromium.payments.mojom.PaymentManifestSection;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.List;
+
+/** A test for the verifier of a payment app manifest. */
+@RunWith(RobolectricTestRunner.class)
+@Config(sdk = 21, manifest = Config.NONE)
+public class PaymentManifestVerifierTest {
+    private final URI mMethodName;
+    private final ResolveInfo mAlicePay;
+    private final ResolveInfo mBobPay;
+    private final List<ResolveInfo> mMatchingApps;
+    private final PaymentManifestDownloader mDownloader;
+    private final PaymentManifestParser mAnyAppAllowedParser;
+    private final PackageManagerDelegate mPackageManagerDelegate;
+    private final ManifestVerifyCallback mCallback;
+
+    public PaymentManifestVerifierTest() throws URISyntaxException {
+        mMethodName = new URI("https://example.com");
+
+        mAlicePay = new ResolveInfo();
+        mAlicePay.activityInfo = new ActivityInfo();
+        mAlicePay.activityInfo.packageName = "com.alicepay.app";
+
+        mBobPay = new ResolveInfo();
+        mBobPay.activityInfo = new ActivityInfo();
+        mBobPay.activityInfo.packageName = "com.bobpay.app";
+
+        mMatchingApps = new ArrayList<>();
+        mMatchingApps.add(mAlicePay);
+        mMatchingApps.add(mBobPay);
+
+        mDownloader = new PaymentManifestDownloader(null) {
+            @Override
+            public void download(URI uri, ManifestDownloadCallback callback) {
+                callback.onManifestDownloadSuccess("some content here");
+            }
+        };
+
+        mAnyAppAllowedParser = new PaymentManifestParser() {
+            @Override
+            public void parse(String content, ManifestParseCallback callback) {
+                PaymentManifestSection[] manifest = new PaymentManifestSection[1];
+                manifest[0] = new PaymentManifestSection();
+                manifest[0].packageName = "*";
+                callback.onManifestParseSuccess(manifest);
+            }
+        };
+
+        mPackageManagerDelegate = Mockito.mock(PackageManagerDelegate.class);
+
+        PackageInfo bobPayPackageInfo = new PackageInfo();
+        bobPayPackageInfo.versionCode = 10;
+        bobPayPackageInfo.signatures = new Signature[1];
+        bobPayPackageInfo.signatures[0] = new Signature("01020304050607080900");
+        Mockito.when(mPackageManagerDelegate.getPackageInfoWithSignatures("com.bobpay.app"))
+                .thenReturn(bobPayPackageInfo);
+
+        PackageInfo alicePayPackageInfo = new PackageInfo();
+        alicePayPackageInfo.versionCode = 10;
+        alicePayPackageInfo.signatures = new Signature[1];
+        alicePayPackageInfo.signatures[0] = new Signature("ABCDEFABCDEFABCDEFAB");
+        Mockito.when(mPackageManagerDelegate.getPackageInfoWithSignatures("com.alicepay.app"))
+                .thenReturn(alicePayPackageInfo);
+
+        mCallback = Mockito.mock(ManifestVerifyCallback.class);
+    }
+
+    @Test
+    public void testUnableToDownload() {
+        PaymentManifestVerifier verifier = new PaymentManifestVerifier(
+                mMethodName, mMatchingApps, new PaymentManifestDownloader(null) {
+                    @Override
+                    public void download(URI uri, ManifestDownloadCallback callback) {
+                        callback.onManifestDownloadFailure();
+                    }
+                }, mAnyAppAllowedParser, mPackageManagerDelegate, mCallback);
+
+        verifier.verify();
+
+        Mockito.verify(mCallback).onInvalidManifest(mMethodName);
+    }
+
+    @Test
+    public void testUnableToParse() {
+        PaymentManifestVerifier verifier = new PaymentManifestVerifier(
+                mMethodName, mMatchingApps, mDownloader, new PaymentManifestParser() {
+                    @Override
+                    public void parse(String content, ManifestParseCallback callback) {
+                        callback.onManifestParseFailure();
+                    }
+                }, mPackageManagerDelegate, mCallback);
+
+        verifier.verify();
+
+        Mockito.verify(mCallback).onInvalidManifest(mMethodName);
+    }
+
+    @Test
+    public void testAnyAppAllowed() {
+        PaymentManifestVerifier verifier = new PaymentManifestVerifier(mMethodName, mMatchingApps,
+                mDownloader, mAnyAppAllowedParser, mPackageManagerDelegate, mCallback);
+
+        verifier.verify();
+
+        Mockito.verify(mCallback).onValidPaymentApp(mMethodName, mAlicePay);
+        Mockito.verify(mCallback).onValidPaymentApp(mMethodName, mBobPay);
+    }
+
+    @Test
+    public void testBobPayAllowed() {
+        PaymentManifestVerifier verifier = new PaymentManifestVerifier(
+                mMethodName, mMatchingApps, mDownloader, new PaymentManifestParser() {
+                    @Override
+                    public void parse(String content, ManifestParseCallback callback) {
+                        PaymentManifestSection[] manifest = new PaymentManifestSection[1];
+                        manifest[0] = new PaymentManifestSection();
+                        manifest[0].packageName = "com.bobpay.app";
+                        manifest[0].version = 10;
+                        // SHA256("01020304050607080900"):
+                        manifest[0].sha256CertFingerprints = new byte[][] {{(byte) 0x9A,
+                                (byte) 0x89, (byte) 0xC6, (byte) 0x8C, (byte) 0x4C, (byte) 0x5E,
+                                (byte) 0x28, (byte) 0xB8, (byte) 0xC4, (byte) 0xA5, (byte) 0x56,
+                                (byte) 0x76, (byte) 0x73, (byte) 0xD4, (byte) 0x62, (byte) 0xFF,
+                                (byte) 0xF5, (byte) 0x15, (byte) 0xDB, (byte) 0x46, (byte) 0x11,
+                                (byte) 0x6F, (byte) 0x99, (byte) 0x00, (byte) 0x62, (byte) 0x4D,
+                                (byte) 0x09, (byte) 0xC4, (byte) 0x74, (byte) 0xF5, (byte) 0x93,
+                                (byte) 0xFB}};
+                        callback.onManifestParseSuccess(manifest);
+                    }
+                }, mPackageManagerDelegate, mCallback);
+
+        verifier.verify();
+
+        Mockito.verify(mCallback).onInvalidPaymentApp(mMethodName, mAlicePay);
+        Mockito.verify(mCallback).onValidPaymentApp(mMethodName, mBobPay);
+    }
+}
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index cf59764..9202721 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -914,6 +914,10 @@
           Hide This Plugin
         </message>
       </if>
+      <!-- Since Flash is a proper noun we don't have to distinguish between title and non-title case. -->
+      <message name="IDS_CONTENT_CONTEXT_ENABLE_FLASH" desc="The name of the Enable Flash command on the blocked plugin context menu">
+        Enable Flash
+      </message>
 
       <!-- Ash multi-user warning dialog -->
       <if expr="use_ash">
@@ -14986,6 +14990,12 @@
         Enable ChromeVox screen reader features in ARC
       </message>
     </if>
+    <message name="IDS_FLAGS_MOJO_LOADING_NAME" desc="Title for the flag to enable Mojo IPC for resource loading" translateable="false">
+      Use Mojo IPC for resource loading
+    </message>
+    <message name="IDS_FLAGS_MOJO_LOADING_DESCRIPTION" desc="Description for the flag to enable Mojo IPC for resource loading" translateable="false">
+      Use Mojo IPC instead of traditional Chrome IPC for resource loading.
+    </message>
   </messages>
  </release>
 </grit>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index fc3bac2..45f0448 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -4070,7 +4070,6 @@
       "../android/java/src/org/chromium/chrome/browser/password_manager/AccountChooserDialog.java",
       "../android/java/src/org/chromium/chrome/browser/password_manager/AutoSigninFirstRunDialog.java",
       "../android/java/src/org/chromium/chrome/browser/password_manager/Credential.java",
-      "../android/java/src/org/chromium/chrome/browser/payments/PaymentValidator.java",
       "../android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentAppBridge.java",
       "../android/java/src/org/chromium/chrome/browser/permissions/PermissionDialogController.java",
       "../android/java/src/org/chromium/chrome/browser/permissions/PermissionDialogDelegate.java",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 11fb300..877cbac 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -2353,7 +2353,7 @@
 #if defined(OS_MACOSX)
     {"tab-strip-keyboard-focus", IDS_FLAGS_TAB_STRIP_KEYBOARD_FOCUS_NAME,
      IDS_FLAGS_TAB_STRIP_KEYBOARD_FOCUS_DESCRIPTION, kOsMac,
-     FEATURE_VALUE_TYPE(features::kTabStripKeyboardFocus)}
+     FEATURE_VALUE_TYPE(features::kTabStripKeyboardFocus)},
 #endif
 
 #if defined(OS_CHROMEOS)
@@ -2363,6 +2363,10 @@
      SINGLE_VALUE_TYPE(chromeos::switches::kEnableChromeVoxArcSupport)},
 #endif  // defined(OS_CHROMEOS)
 
+    {"enable-mojo-loading", IDS_FLAGS_MOJO_LOADING_NAME,
+     IDS_FLAGS_MOJO_LOADING_DESCRIPTION, kOsAll,
+     FEATURE_VALUE_TYPE(features::kLoadingWithMojo)},
+
     // NOTE: Adding new command-line switches requires adding corresponding
     // entries to enum "LoginCustomFlags" in histograms.xml. See note in
     // histograms.xml and don't forget to run AboutFlagsHistogramTest unit test.
diff --git a/chrome/browser/android/chrome_jni_registrar.cc b/chrome/browser/android/chrome_jni_registrar.cc
index d57a1cd6..ed3003c 100644
--- a/chrome/browser/android/chrome_jni_registrar.cc
+++ b/chrome/browser/android/chrome_jni_registrar.cc
@@ -173,6 +173,8 @@
 #include "components/invalidation/impl/android/component_jni_registrar.h"
 #include "components/payments/content/android/currency_formatter_android.h"
 #include "components/payments/content/android/payment_details_validation_android.h"
+#include "components/payments/content/android/payment_manifest_downloader_android.h"
+#include "components/payments/content/android/payment_manifest_parser_android.h"
 #include "components/policy/core/browser/android/component_jni_registrar.h"
 #include "components/safe_browsing_db/android/jni_registrar.h"
 #include "components/safe_json/android/component_jni_registrar.h"
@@ -349,7 +351,9 @@
      autofill::PasswordGenerationPopupViewAndroid::Register},
     {"PasswordUIViewAndroid",
      PasswordUIViewAndroid::RegisterPasswordUIViewAndroid},
-    {"PaymentValidator", RegisterPaymentValidator},
+    {"PaymentManifestDownloader", payments::RegisterPaymentManifestDownloader},
+    {"PaymentManifestParser", payments::RegisterPaymentManifestParser},
+    {"PaymentValidator", payments::RegisterPaymentValidator},
     {"PermissionDialogDelegate",
      PermissionDialogDelegate::RegisterPermissionDialogDelegate},
     {"PermissionUpdateInfoBarDelegate",
diff --git a/chrome/browser/android/contextualsearch/contextual_search_context.cc b/chrome/browser/android/contextualsearch/contextual_search_context.cc
index 82900a6..ab8abf0 100644
--- a/chrome/browser/android/contextualsearch/contextual_search_context.cc
+++ b/chrome/browser/android/contextualsearch/contextual_search_context.cc
@@ -12,6 +12,10 @@
 ContextualSearchContext::ContextualSearchContext(JNIEnv* env, jobject obj)
     : can_resolve(false),
       can_send_base_page_url(false),
+      selected_text(std::string()),
+      home_country(std::string()),
+      base_page_url(GURL()),
+      surrounding_text(base::string16()),
       start_offset(0),
       end_offset(0) {
   java_object_.Reset(env, obj);
diff --git a/chrome/browser/android/ntp/new_tab_page_url_handler.cc b/chrome/browser/android/ntp/new_tab_page_url_handler.cc
index 38dc11c..e4396d2 100644
--- a/chrome/browser/android/ntp/new_tab_page_url_handler.cc
+++ b/chrome/browser/android/ntp/new_tab_page_url_handler.cc
@@ -36,8 +36,8 @@
     // chrome-native://history when M57 is a distant memory.
     // See http://crbug.com/654071.
     if (base::FeatureList::IsEnabled(features::kNativeAndroidHistoryManager) &&
-        (url->host() == kChromeUIHistoryHost ||
-            url->host() == kChromeUIHistoryFrameHost)) {
+        (url->host() == content::kChromeUIHistoryHost ||
+         url->host() == kChromeUIHistoryFrameHost)) {
       *url = GURL(content::kChromeUINativeHistoryURL);
       return true;
     }
diff --git a/chrome/browser/browser_about_handler.cc b/chrome/browser/browser_about_handler.cc
index a89d62b..96c0189 100644
--- a/chrome/browser/browser_about_handler.cc
+++ b/chrome/browser/browser_about_handler.cc
@@ -21,6 +21,7 @@
 #include "chrome/common/url_constants.h"
 #include "components/url_formatter/url_fixer.h"
 #include "content/public/common/content_features.h"
+#include "content/public/common/url_constants.h"
 #include "extensions/features/features.h"
 
 #if !defined(OS_ANDROID)
@@ -86,7 +87,7 @@
     path = chrome::kChromeUIExtensionsHost;
 #endif  // BUILDFLAG(ENABLE_EXTENSIONS)
   // Redirect chrome://history.
-  } else if (host == chrome::kChromeUIHistoryHost) {
+  } else if (host == content::kChromeUIHistoryHost) {
 #if defined(OS_ANDROID)
     // TODO(twellington): remove this after native Android history launches.
     // See http://crbug.com/654071.
@@ -99,11 +100,11 @@
     // Material design history is handled on the top-level chrome://history
     // host.
     if (base::FeatureList::IsEnabled(features::kMaterialDesignHistory)) {
-      host = chrome::kChromeUIHistoryHost;
+      host = content::kChromeUIHistoryHost;
       path = url->path();
     } else {
       host = chrome::kChromeUIUberHost;
-      path = chrome::kChromeUIHistoryHost + url->path();
+      path = content::kChromeUIHistoryHost + url->path();
     }
 #endif
   // Redirect chrome://settings, unless MD settings is enabled.
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 569bb3e6..1926ea7 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -178,6 +178,7 @@
 #include "content/public/common/sandbox_type.h"
 #include "content/public/common/service_manager_connection.h"
 #include "content/public/common/service_names.mojom.h"
+#include "content/public/common/url_constants.h"
 #include "content/public/common/url_utils.h"
 #include "content/public/common/web_preferences.h"
 #include "device/bluetooth/adapter_factory.h"
@@ -652,7 +653,7 @@
   if (user_manager::UserManager::Get()->IsLoggedInAsGuest()) {
     if (url->SchemeIs(content::kChromeUIScheme) &&
         (url->DomainIs(chrome::kChromeUIBookmarksHost) ||
-         url->DomainIs(chrome::kChromeUIHistoryHost))) {
+         url->DomainIs(content::kChromeUIHistoryHost))) {
       // Rewrite with new tab URL
       *url = GURL(chrome::kChromeUINewTabURL);
     }
diff --git a/chrome/browser/chrome_content_utility_manifest_overlay.json b/chrome/browser/chrome_content_utility_manifest_overlay.json
index 3056727c..b6937f6 100644
--- a/chrome/browser/chrome_content_utility_manifest_overlay.json
+++ b/chrome/browser/chrome_content_utility_manifest_overlay.json
@@ -14,6 +14,7 @@
           "extensions::mojom::RemovableStorageWriter",
           "extensions::mojom::WiFiCredentialsGetter",
           "net::interfaces::ProxyResolverFactory",
+          "payments::mojom::PaymentManifestParser",
           "safe_json::mojom::SafeJsonParser"
         ]
       }
diff --git a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.cc b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.cc
index 6c8b936..1e7a586 100644
--- a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.cc
+++ b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.cc
@@ -65,6 +65,15 @@
 
 }  // namespace
 
+// static
+const int64_t ArcDocumentsProviderRoot::kInvalidWatcherId = -1;
+// static
+const uint64_t ArcDocumentsProviderRoot::kInvalidWatcherRequestId = 0;
+// static
+const ArcDocumentsProviderRoot::WatcherData
+    ArcDocumentsProviderRoot::kInvalidWatcherData = {kInvalidWatcherId,
+                                                     kInvalidWatcherRequestId};
+
 ArcDocumentsProviderRoot::ArcDocumentsProviderRoot(
     const std::string& authority,
     const std::string& root_document_id)
@@ -102,30 +111,39 @@
     const WatcherCallback& watcher_callback,
     const StatusCallback& callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  if (path_to_watcher_id_.count(path)) {
+  if (path_to_watcher_data_.count(path)) {
     callback.Run(base::File::FILE_ERROR_FAILED);
     return;
   }
+  uint64_t watcher_request_id = next_watcher_request_id_++;
+  path_to_watcher_data_.insert(
+      std::make_pair(path, WatcherData{kInvalidWatcherId, watcher_request_id}));
   ResolveToDocumentId(
-      path,
-      base::Bind(&ArcDocumentsProviderRoot::AddWatcherWithDocumentId,
-                 weak_ptr_factory_.GetWeakPtr(), path, watcher_callback,
-                 callback));
+      path, base::Bind(&ArcDocumentsProviderRoot::AddWatcherWithDocumentId,
+                       weak_ptr_factory_.GetWeakPtr(), path, watcher_request_id,
+                       watcher_callback));
+
+  // HACK: Invoke |callback| immediately.
+  //
+  // TODO(crbug.com/698624): Remove this hack. It was introduced because Files
+  // app freezes until AddWatcher() finishes, but it should be handled in Files
+  // app rather than here.
+  callback.Run(base::File::FILE_OK);
 }
 
 void ArcDocumentsProviderRoot::RemoveWatcher(const base::FilePath& path,
                                              const StatusCallback& callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  auto iter = path_to_watcher_id_.find(path);
-  if (iter == path_to_watcher_id_.end()) {
+  auto iter = path_to_watcher_data_.find(path);
+  if (iter == path_to_watcher_data_.end()) {
     callback.Run(base::File::FILE_ERROR_FAILED);
     return;
   }
-  int64_t watcher_id = iter->second;
-  path_to_watcher_id_.erase(iter);
-  if (watcher_id < 0) {
-    // This is an orphan watcher. Just remove an entry from
-    // |path_to_watcher_id_| and return success.
+  int64_t watcher_id = iter->second.id;
+  path_to_watcher_data_.erase(iter);
+  if (watcher_id == kInvalidWatcherId) {
+    // This is an invalid watcher. No need to send a request to the remote
+    // service.
     callback.Run(base::File::FILE_OK);
     return;
   }
@@ -147,9 +165,9 @@
 
 void ArcDocumentsProviderRoot::OnWatchersCleared() {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  // Mark all watchers orphan.
-  for (auto& entry : path_to_watcher_id_)
-    entry.second = -1;
+  // Mark all watchers invalid.
+  for (auto& entry : path_to_watcher_data_)
+    entry.second = kInvalidWatcherData;
 }
 
 void ArcDocumentsProviderRoot::GetFileInfoWithDocumentId(
@@ -232,52 +250,55 @@
 
 void ArcDocumentsProviderRoot::AddWatcherWithDocumentId(
     const base::FilePath& path,
+    uint64_t watcher_request_id,
     const WatcherCallback& watcher_callback,
-    const StatusCallback& callback,
     const std::string& document_id) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
+
+  if (IsWatcherInflightRequestCanceled(path, watcher_request_id))
+    return;
+
   if (document_id.empty()) {
-    callback.Run(base::File::FILE_ERROR_NOT_FOUND);
+    DCHECK(path_to_watcher_data_.count(path));
+    path_to_watcher_data_[path] = kInvalidWatcherData;
     return;
   }
+
   // Start observing ArcFileSystemOperationRunner if we have not.
   if (!observer_wrapper_) {
     observer_wrapper_ =
         new file_system_operation_runner_util::ObserverIOThreadWrapper(this);
     file_system_operation_runner_util::AddObserverOnIOThread(observer_wrapper_);
   }
+
   file_system_operation_runner_util::AddWatcherOnIOThread(
       authority_, document_id, watcher_callback,
       base::Bind(&ArcDocumentsProviderRoot::OnWatcherAdded,
-                 weak_ptr_factory_.GetWeakPtr(), path, callback));
+                 weak_ptr_factory_.GetWeakPtr(), path, watcher_request_id));
 }
 
 void ArcDocumentsProviderRoot::OnWatcherAdded(const base::FilePath& path,
-                                              const StatusCallback& callback,
+                                              uint64_t watcher_request_id,
                                               int64_t watcher_id) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  if (watcher_id < 0) {
-    callback.Run(base::File::FILE_ERROR_FAILED);
-    return;
-  }
-  if (path_to_watcher_id_.count(path)) {
-    // Multiple watchers have been installed on the same file path in a race.
-    // Following the contract of WatcherManager, we reject all except the first.
+
+  if (IsWatcherInflightRequestCanceled(path, watcher_request_id)) {
     file_system_operation_runner_util::RemoveWatcherOnIOThread(
         watcher_id,
         base::Bind(&ArcDocumentsProviderRoot::OnWatcherAddedButRemoved,
-                   weak_ptr_factory_.GetWeakPtr(), callback));
+                   weak_ptr_factory_.GetWeakPtr()));
     return;
   }
-  path_to_watcher_id_.insert(std::make_pair(path, watcher_id));
-  callback.Run(base::File::FILE_OK);
+
+  DCHECK(path_to_watcher_data_.count(path));
+  path_to_watcher_data_[path] =
+      WatcherData{watcher_id < 0 ? kInvalidWatcherId : watcher_id,
+                  kInvalidWatcherRequestId};
 }
 
-void ArcDocumentsProviderRoot::OnWatcherAddedButRemoved(
-    const StatusCallback& callback,
-    bool success) {
+void ArcDocumentsProviderRoot::OnWatcherAddedButRemoved(bool success) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  callback.Run(base::File::FILE_ERROR_FAILED);
+  // Ignore |success|.
 }
 
 void ArcDocumentsProviderRoot::OnWatcherRemoved(const StatusCallback& callback,
@@ -286,6 +307,14 @@
   callback.Run(success ? base::File::FILE_OK : base::File::FILE_ERROR_FAILED);
 }
 
+bool ArcDocumentsProviderRoot::IsWatcherInflightRequestCanceled(
+    const base::FilePath& path,
+    uint64_t watcher_request_id) const {
+  auto iter = path_to_watcher_data_.find(path);
+  return (iter == path_to_watcher_data_.end() ||
+          iter->second.inflight_request_id != watcher_request_id);
+}
+
 void ArcDocumentsProviderRoot::ResolveToContentUrlWithDocumentId(
     const ResolveToContentUrlCallback& callback,
     const std::string& document_id) {
diff --git a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.h b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.h
index d2afb37..d5bac2956 100644
--- a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.h
+++ b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.h
@@ -122,6 +122,33 @@
     bool is_directory;
   };
 
+  // Represents the status of a document watcher.
+  struct WatcherData {
+    // ID of a watcher in the remote file system service.
+    //
+    // Valid IDs are represented by positive integers. An invalid watcher is
+    // represented by |kInvalidWatcherId|, which occurs in several cases:
+    //
+    // - AddWatcher request is still in-flight. In this case, a valid ID is set
+    //   to |inflight_request_id|.
+    //
+    // - The remote file system service notified us that it stopped and all
+    //   watchers were forgotten. Such watchers are still tracked here, but they
+    //   are not known by the remote service.
+    int64_t id;
+
+    // A unique ID of AddWatcher() request.
+    //
+    // While AddWatcher() is in-flight, a positive integer is set to this
+    // variable, and |id| is |kInvalidWatcherId|. Otherwise it is set to
+    // |kInvalidWatcherRequestId|.
+    uint64_t inflight_request_id;
+  };
+
+  static const int64_t kInvalidWatcherId;
+  static const uint64_t kInvalidWatcherRequestId;
+  static const WatcherData kInvalidWatcherData;
+
   // Mapping from a file name to a ThinDocument.
   using NameToThinDocumentMap =
       std::map<base::FilePath::StringType, ThinDocument>;
@@ -145,16 +172,21 @@
       NameToThinDocumentMap mapping);
 
   void AddWatcherWithDocumentId(const base::FilePath& path,
+                                uint64_t watcher_request_id,
                                 const WatcherCallback& watcher_callback,
-                                const StatusCallback& callback,
                                 const std::string& document_id);
   void OnWatcherAdded(const base::FilePath& path,
-                      const StatusCallback& callback,
+                      uint64_t watcher_request_id,
                       int64_t watcher_id);
-  void OnWatcherAddedButRemoved(const StatusCallback& callback, bool success);
+  void OnWatcherAddedButRemoved(bool success);
 
   void OnWatcherRemoved(const StatusCallback& callback, bool success);
 
+  // Returns true if the specified watcher request has been canceled.
+  // This function should be called only while the request is in-flight.
+  bool IsWatcherInflightRequestCanceled(const base::FilePath& path,
+                                        uint64_t watcher_request_id) const;
+
   void ResolveToContentUrlWithDocumentId(
       const ResolveToContentUrlCallback& callback,
       const std::string& document_id);
@@ -184,18 +216,15 @@
   const std::string authority_;
   const std::string root_document_id_;
 
-  // Map from a file path to a watcher ID.
-  //
-  // A watcher can be "orphan" when watchers are cleared as notified by
-  // OnWatchersCleared() callback. Such watchers are still tracked here,
-  // but they are not known by the remote service, so they are represented
-  // by the invalid watcher ID (-1).
+  // Map from a file path to a watcher data.
   //
   // Note that we do not use a document ID as a key here to guarantee that
   // a watch installed by AddWatcher() can be always identified in
   // RemoveWatcher() with the same file path specified.
   // See the documentation of AddWatcher() for more details.
-  std::map<base::FilePath, int64_t> path_to_watcher_id_;
+  std::map<base::FilePath, WatcherData> path_to_watcher_data_;
+
+  uint64_t next_watcher_request_id_ = 1;
 
   // Can be null if this instance is not observing ArcFileSystemOperationRunner.
   // Observation is started on the first call of AddWatcher().
diff --git a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root_unittest.cc b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root_unittest.cc
index fe09ee9f..3ee78a9f 100644
--- a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root_unittest.cc
+++ b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root_unittest.cc
@@ -316,6 +316,14 @@
     run_loop.Run();
   }
 
+  // Even if AddWatcher() returns, the watch may not have started. In order to
+  // make installation finish we run the message loop until idle. This depends
+  // on the behavior of FakeFileSystemInstance.
+  //
+  // TODO(crbug.com/698624): Remove the hack to make AddWatcher() return
+  // immediately.
+  base::RunLoop().RunUntilIdle();
+
   EXPECT_EQ(0, num_called);
   fake_file_system_.TriggerWatchers(kAuthority, kDirSpec.document_id,
                                     storage::WatcherManager::CHANGED);
@@ -358,6 +366,14 @@
     run_loop.Run();
   }
 
+  // Even if AddWatcher() returns, the watch may not have started. In order to
+  // make installation finish we run the message loop until idle. This depends
+  // on the behavior of FakeFileSystemInstance.
+  //
+  // TODO(crbug.com/698624): Remove the hack to make AddWatcher() return
+  // immediately.
+  base::RunLoop().RunUntilIdle();
+
   EXPECT_EQ(0, num_called);
   fake_file_system_.TriggerWatchers(kAuthority, kDirSpec.document_id,
                                     storage::WatcherManager::DELETED);
diff --git a/chrome/browser/chromeos/login/chrome_restart_request.cc b/chrome/browser/chromeos/login/chrome_restart_request.cc
index d7f81a1..445eab3 100644
--- a/chrome/browser/chromeos/login/chrome_restart_request.cc
+++ b/chrome/browser/chromeos/login/chrome_restart_request.cc
@@ -199,7 +199,6 @@
     cc::switches::kEnableGpuBenchmarking,
     cc::switches::kEnableLayerLists,
     cc::switches::kEnableMainFrameBeforeActivation,
-    cc::switches::kEnableTrueColorRendering,
     cc::switches::kShowCompositedLayerBorders,
     cc::switches::kShowFPSCounter,
     cc::switches::kShowLayerAnimationBounds,
diff --git a/chrome/browser/extensions/extension_browsertest.cc b/chrome/browser/extensions/extension_browsertest.cc
index 1fad3cd..35e284e2 100644
--- a/chrome/browser/extensions/extension_browsertest.cc
+++ b/chrome/browser/extensions/extension_browsertest.cc
@@ -56,6 +56,7 @@
 #include "extensions/browser/extension_registry.h"
 #include "extensions/browser/extension_system.h"
 #include "extensions/browser/notification_types.h"
+#include "extensions/browser/test_extension_registry_observer.h"
 #include "extensions/browser/uninstall_reason.h"
 #include "extensions/common/constants.h"
 #include "extensions/common/extension_set.h"
@@ -484,14 +485,21 @@
 }
 
 void ExtensionBrowserTest::ReloadExtension(const std::string& extension_id) {
-  observer_->Watch(extensions::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
-                   content::NotificationService::AllSources());
+  extensions::ExtensionRegistry* registry =
+      extensions::ExtensionRegistry::Get(profile());
+  const Extension* extension = registry->GetInstalledExtension(extension_id);
+  ASSERT_TRUE(extension);
+  extensions::TestExtensionRegistryObserver observer(registry, extension_id);
+  extensions::ExtensionSystem::Get(profile())
+      ->extension_service()
+      ->ReloadExtension(extension_id);
+  observer.WaitForExtensionLoaded();
 
-  ExtensionService* service =
-      extensions::ExtensionSystem::Get(profile())->extension_service();
-  service->ReloadExtension(extension_id);
-
-  observer_->Wait();
+  // We need to let other ExtensionRegistryObservers handle the extension load
+  // in order to finish initialization. This has to be done before waiting for
+  // extension views to load, since we only register views after observing
+  // extension load.
+  base::RunLoop().RunUntilIdle();
   observer_->WaitForExtensionViewsToLoad();
 }
 
diff --git a/chrome/browser/extensions/process_management_browsertest.cc b/chrome/browser/extensions/process_management_browsertest.cc
index c446d02a..012fb55 100644
--- a/chrome/browser/extensions/process_management_browsertest.cc
+++ b/chrome/browser/extensions/process_management_browsertest.cc
@@ -6,19 +6,16 @@
 
 #include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
-#include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/extensions/extension_apitest.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
-#include "chrome/browser/sessions/session_tab_helper.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/extensions/extension_process_policy.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/test/base/ui_test_utils.h"
-#include "content/public/browser/notification_service.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/render_process_host.h"
 #include "content/public/browser/render_view_host.h"
@@ -393,68 +390,3 @@
   // Verify that Chrome Web Store is isolated in a separate renderer process.
   EXPECT_NE(old_process_host, new_process_host);
 }
-
-// This test verifies that blocked navigations to extensions pages do not
-// overwrite process-per-site map inside content/.
-IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest,
-                       NavigateToBlockedExtensionPageInNewTab) {
-  host_resolver()->AddRule("*", "127.0.0.1");
-  ASSERT_TRUE(embedded_test_server()->Start());
-
-  // Load an extension, which will block a request for a specific page in it.
-  const extensions::Extension* extension = LoadExtension(
-      test_data_dir_.AppendASCII("web_request_site_process_registration"));
-  ASSERT_TRUE(extension);
-
-  WebContents* web_contents =
-      browser()->tab_strip_model()->GetActiveWebContents();
-  GURL blocked_url(extension->GetResourceURL("/blocked.html"));
-
-  // Navigating to the blocked extension URL should be done through a redirect,
-  // otherwise it will result in an OpenURL IPC from the renderer process, which
-  // will initiate a navigation through the browser process.
-  GURL redirect_url(
-      embedded_test_server()->GetURL("/server-redirect?" + blocked_url.spec()));
-
-  // Navigate the current tab to the test page in the extension, which will
-  // create the extension process and register the webRequest blocking listener.
-  ui_test_utils::NavigateToURL(browser(),
-                               extension->GetResourceURL("/test.html"));
-
-  // Open a new tab to about:blank, which will result in a new SiteInstance
-  // without an explicit site URL set.
-  ui_test_utils::NavigateToURLWithDisposition(
-      browser(), GURL(url::kAboutBlankURL),
-      WindowOpenDisposition::NEW_FOREGROUND_TAB,
-      ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
-  WebContents* new_web_contents =
-      browser()->tab_strip_model()->GetActiveWebContents();
-
-  // Navigate the new tab to an extension URL that will be blocked by
-  // webRequest. It must be a renderer-initiated navigation. It also uses a
-  // redirect, otherwise the regular renderer process will send an OpenURL
-  // IPC to the browser due to the chrome-extension:// URL.
-  std::string script =
-      base::StringPrintf("location.href = '%s';", redirect_url.spec().c_str());
-  content::TestNavigationObserver observer(new_web_contents);
-  EXPECT_TRUE(content::ExecuteScript(new_web_contents, script));
-  observer.Wait();
-
-  EXPECT_EQ(observer.last_navigation_url(), blocked_url);
-  EXPECT_FALSE(observer.last_navigation_succeeded());
-
-  // Very subtle check for content/ internal functionality :(.
-  // When a navigation is blocked, it still commits an error page. Since
-  // extensions use the process-per-site model, each extension URL is registered
-  // in a map from URL to a process. Creating a brand new SiteInstance for the
-  // extension URL should always result in a SiteInstance that has a process and
-  // the process is the same for all SiteInstances. This allows us to verify
-  // that the site-to-process map for the extension hasn't been overwritten by
-  // the process of the |blocked_url|.
-  scoped_refptr<content::SiteInstance> new_site_instance =
-      content::SiteInstance::CreateForURL(web_contents->GetBrowserContext(),
-                                          extension->GetResourceURL(""));
-  EXPECT_TRUE(new_site_instance->HasProcess());
-  EXPECT_EQ(new_site_instance->GetProcess(),
-            web_contents->GetSiteInstance()->GetProcess());
-}
diff --git a/chrome/browser/previews/previews_service.cc b/chrome/browser/previews/previews_service.cc
index bfc31ea..a0375e5 100644
--- a/chrome/browser/previews/previews_service.cc
+++ b/chrome/browser/previews/previews_service.cc
@@ -4,17 +4,65 @@
 
 #include "chrome/browser/previews/previews_service.h"
 
+#include "base/bind.h"
 #include "base/files/file_path.h"
 #include "base/memory/ptr_util.h"
 #include "base/sequenced_task_runner.h"
 #include "base/threading/sequenced_worker_pool.h"
 #include "chrome/common/chrome_constants.h"
+#include "components/previews/core/previews_experiments.h"
 #include "components/previews/core/previews_io_data.h"
 #include "components/previews/core/previews_opt_out_store.h"
 #include "components/previews/core/previews_opt_out_store_sql.h"
 #include "components/previews/core/previews_ui_service.h"
 #include "content/public/browser/browser_thread.h"
 
+namespace {
+
+// Returns true if previews can be shown for |type|.
+bool IsPreviewsTypeEnabled(previews::PreviewsType type) {
+  switch (type) {
+    case previews::PreviewsType::OFFLINE:
+      return previews::params::IsOfflinePreviewsEnabled();
+    case previews::PreviewsType::NONE:
+    case previews::PreviewsType::LAST:
+      break;
+  }
+  NOTREACHED();
+  return false;
+}
+
+// Returns the version of preview treatment |type|. Defaults to 0 if not
+// specified in field trial config.
+int GetPreviewsTypeVersion(previews::PreviewsType type) {
+  switch (type) {
+    case previews::PreviewsType::OFFLINE:
+      return previews::params::OfflinePreviewsVersion();
+    case previews::PreviewsType::NONE:
+    case previews::PreviewsType::LAST:
+      break;
+  }
+  NOTREACHED();
+  return -1;
+}
+
+// Returns the enabled PreviewsTypes with their version.
+std::unique_ptr<previews::PreviewsTypeList> GetEnabledPreviews() {
+  std::unique_ptr<previews::PreviewsTypeList> enabled_previews(
+      new previews::PreviewsTypeList());
+
+  // Loop across all previews types (relies on sequential enum values).
+  for (int i = static_cast<int>(previews::PreviewsType::NONE) + 1;
+       i < static_cast<int>(previews::PreviewsType::LAST); ++i) {
+    previews::PreviewsType type = static_cast<previews::PreviewsType>(i);
+    if (IsPreviewsTypeEnabled(type))
+      enabled_previews->push_back({type, GetPreviewsTypeVersion(type)});
+  }
+  return enabled_previews;
+}
+
+}  // namespace
+
 PreviewsService::PreviewsService() {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 }
@@ -39,5 +87,7 @@
       previews_io_data, io_task_runner,
       base::MakeUnique<previews::PreviewsOptOutStoreSQL>(
           io_task_runner, background_task_runner,
-          profile_path.Append(chrome::kPreviewsOptOutDBFilename)));
+          profile_path.Append(chrome::kPreviewsOptOutDBFilename),
+          GetEnabledPreviews()),
+      base::Bind(&IsPreviewsTypeEnabled));
 }
diff --git a/chrome/browser/resources/chromeos/switch_access/switch_access_unittest.gtestjs b/chrome/browser/resources/chromeos/switch_access/switch_access_unittest.gtestjs
new file mode 100644
index 0000000..5ed07b0
--- /dev/null
+++ b/chrome/browser/resources/chromeos/switch_access/switch_access_unittest.gtestjs
@@ -0,0 +1,135 @@
+// 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.
+
+/**
+ * Test fixture for switch_access.js.
+ * @constructor
+ * @extends {testing.Test}
+ */
+function SwitchAccessUnitTest () {
+  testing.Test.call(this);
+};
+
+SwitchAccessUnitTest.prototype = {
+  __proto__: testing.Test.prototype,
+
+  /** @override */
+  extraLibraries: [
+    'test_support.js',
+    'switch_access.js',
+    'testable_switch_access.js',
+  ],
+
+  getSampleTree: function() {
+    // root
+    //   middle1
+    //     leaf1
+    //     leaf2
+    //     leaf3
+    //   middle2
+    //     leaf4
+    //     leaf5
+    let root = {};
+    let middle1 = {};
+    let middle2 = {};
+    let leaf1 = {};
+    let leaf2 = {};
+    let leaf3 = {};
+    let leaf4 = {};
+    let leaf5 = {};
+
+    root.firstChild = middle1;
+    root.lastChild = middle2;
+
+    middle1.parent = root;
+    middle2.parent = root;
+    middle1.nextSibling = middle2;
+    middle2.previousSibling = middle1;
+    middle1.firstChild = leaf1;
+    middle1.lastChild = leaf3;
+    middle2.firstChild = leaf4;
+    middle2.lastChild = leaf5;
+
+    leaf1.parent = middle1;
+    leaf2.parent = middle1;
+    leaf3.parent = middle1;
+    leaf1.nextSibling = leaf2;
+    leaf2.previousSibling = leaf1;
+    leaf2.nextSibling = leaf3;
+    leaf3.previousSibling = leaf2;
+
+    leaf4.parent = middle2;
+    leaf5.parent = middle2;
+    leaf4.nextSibling = leaf5;
+    leaf5.previousSibling = leaf4;
+
+    return {
+      root: root,
+      middle1: middle1,
+      middle2: middle2,
+      leaf1: leaf1,
+      leaf2: leaf2,
+      leaf3: leaf3,
+      leaf4: leaf4,
+      leaf5: leaf5
+    };
+  }
+};
+
+TEST_F('SwitchAccessUnitTest', 'GetNextNode', function() {
+  let tree = this.getSampleTree();
+  let tsa = new TestableSwitchAccess();
+
+  let order =
+      [tree.root, tree.middle1, tree.leaf1, tree.leaf2, tree.leaf3,
+      tree.middle2, tree.leaf4, tree.leaf5];
+  let node = tree.root;
+  for (let i = 0; i < order.length; i++) {
+    assertEquals(order[i], node);
+    node = tsa.getNextNode(node);
+  }
+  assertEquals(null, node);
+});
+
+TEST_F('SwitchAccessUnitTest', 'GetPreviousNode', function() {
+  let tree = this.getSampleTree();
+  let tsa = new TestableSwitchAccess();
+
+  let order =
+      [tree.leaf5, tree.leaf4, tree.middle2, tree.leaf3, tree.leaf2,
+      tree.leaf1, tree.middle1, tree.root];
+  let node = tree.leaf5;
+  for (let i = 0; i < order.length; i++) {
+    assertEquals(order[i], node);
+    node = tsa.getPreviousNode(node);
+  }
+  assertEquals(null, node);
+});
+
+TEST_F('SwitchAccessUnitTest', 'GetYoungestDescendant', function() {
+  let tree = this.getSampleTree();
+  let tsa = new TestableSwitchAccess();
+
+  assertEquals(tree.leaf5, tsa.getYoungestDescendant(tree.root));
+  assertEquals(tree.leaf3, tsa.getYoungestDescendant(tree.middle1));
+  assertEquals(tree.leaf5, tsa.getYoungestDescendant(tree.middle2));
+  assertEquals(null, tsa.getYoungestDescendant(tree.leaf1));
+  assertEquals(null, tsa.getYoungestDescendant(tree.leaf2));
+  assertEquals(null, tsa.getYoungestDescendant(tree.leaf3));
+  assertEquals(null, tsa.getYoungestDescendant(tree.leaf4));
+  assertEquals(null, tsa.getYoungestDescendant(tree.leaf5));
+});
+
+TEST_F('SwitchAccessUnitTest', 'IsInteresting', function() {
+  let node1 = {};
+  let node2 = {state: {}};
+  let node3 = {state: {focusable: false}};
+  let node4 = {state: {focusable: true}};
+  let tsa = new TestableSwitchAccess();
+
+  assertTrue(tsa.isInteresting(node1) === undefined);
+  assertTrue(tsa.isInteresting(node2) === undefined);
+  assertFalse(tsa.isInteresting(node3));
+  assertTrue(tsa.isInteresting(node4));
+});
diff --git a/chrome/browser/resources/chromeos/switch_access/test_support.js b/chrome/browser/resources/chromeos/switch_access/test_support.js
new file mode 100644
index 0000000..ef7f228
--- /dev/null
+++ b/chrome/browser/resources/chromeos/switch_access/test_support.js
@@ -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.
+
+/**
+ * Stubs out extension API types and functions, and DOM elements, so
+ * SwitchAccessUnitTest can load.
+ */
+chrome.automation = {};
+
+chrome.automation.getDesktop = function() {};
+
+window = {};
diff --git a/chrome/browser/resources/chromeos/switch_access/testable_switch_access.js b/chrome/browser/resources/chromeos/switch_access/testable_switch_access.js
new file mode 100644
index 0000000..83777034
--- /dev/null
+++ b/chrome/browser/resources/chromeos/switch_access/testable_switch_access.js
@@ -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.
+
+/**
+ * Subclass of SwitchAccess that exposes SwitchAccess's methods for testing.
+ */
+let TestableSwitchAccess = function() {
+  SwitchAccess.call(this);
+};
+
+TestableSwitchAccess.prototype = {
+  __proto__: SwitchAccess.prototype,
+
+  getNextNode: function(node) {
+    return this.getNextNode_(node);
+  },
+
+  getPreviousNode: function(node) {
+    return this.getPreviousNode_(node);
+  },
+
+  getYoungestDescendant: function(node) {
+    return this.getYoungestDescendant_(node);
+  },
+
+  isInteresting: function(node) {
+    return this.isInteresting_(node);
+  }
+};
diff --git a/chrome/browser/resources/md_bookmarks/actions.js b/chrome/browser/resources/md_bookmarks/actions.js
index 7ed4cfc..e70bcee 100644
--- a/chrome/browser/resources/md_bookmarks/actions.js
+++ b/chrome/browser/resources/md_bookmarks/actions.js
@@ -80,6 +80,44 @@
   }
 
   /**
+   * @param {string} id
+   * @param {boolean} add
+   * @param {boolean} range
+   * @param {BookmarksPageState} state
+   * @return {!Action}
+   */
+  function selectItem(id, add, range, state) {
+    var anchor = state.selection.anchor;
+    var toSelect = [];
+
+    // TODO(tsergeant): Make it possible to deselect items by ctrl-clicking them
+    // again.
+    if (range && anchor) {
+      var displayedList = bookmarks.util.getDisplayedList(state);
+      var selectedIndex = displayedList.indexOf(id);
+      assert(selectedIndex != -1);
+      var anchorIndex = displayedList.indexOf(anchor);
+      if (anchorIndex == -1)
+        anchorIndex = selectedIndex;
+
+      var startIndex = Math.min(anchorIndex, selectedIndex);
+      var endIndex = Math.max(anchorIndex, selectedIndex);
+
+      for (var i = startIndex; i <= endIndex; i++)
+        toSelect.push(displayedList[i]);
+    } else {
+      toSelect.push(id);
+    }
+
+    return {
+      name: 'select-items',
+      add: add,
+      anchor: id,
+      items: toSelect,
+    };
+  }
+
+  /**
    * @param {string} term
    * @return {!Action}
    */
@@ -111,6 +149,7 @@
     refreshNodes: refreshNodes,
     removeBookmark: removeBookmark,
     selectFolder: selectFolder,
+    selectItem: selectItem,
     setSearchResults: setSearchResults,
     setSearchTerm: setSearchTerm,
   };
diff --git a/chrome/browser/resources/md_bookmarks/item.js b/chrome/browser/resources/md_bookmarks/item.js
index 45ff2b6..e7590a7 100644
--- a/chrome/browser/resources/md_bookmarks/item.js
+++ b/chrome/browser/resources/md_bookmarks/item.js
@@ -44,6 +44,9 @@
     this.watch('item_', function(store) {
       return store.nodes[this.itemId];
     }.bind(this));
+    this.watch('isSelectedItem_', function(store) {
+      return !!store.selection.items[this.itemId];
+    }.bind(this));
 
     this.updateFromStore();
   },
@@ -78,11 +81,8 @@
    * @private
    */
   onClick_: function(e) {
-    this.fire('select-item', {
-      item: this.item_,
-      range: e.shiftKey,
-      add: e.ctrlKey,
-    });
+    this.dispatch(bookmarks.actions.selectItem(
+        this.itemId, e.ctrlKey, e.shiftKey, this.getState()));
   },
 
   /**
diff --git a/chrome/browser/resources/md_bookmarks/reducers.js b/chrome/browser/resources/md_bookmarks/reducers.js
index 629017b2..901203cd 100644
--- a/chrome/browser/resources/md_bookmarks/reducers.js
+++ b/chrome/browser/resources/md_bookmarks/reducers.js
@@ -10,6 +10,56 @@
  */
 
 cr.define('bookmarks', function() {
+  var SelectionState = {};
+
+  /**
+   * @param {SelectionState} selectionState
+   * @param {Action} action
+   * @return {SelectionState}
+   */
+  SelectionState.selectItems = function(selectionState, action) {
+    var newItems = {};
+    if (action.add)
+      Object.assign(newItems, selectionState.items);
+
+    action.items.forEach(function(id) {
+      newItems[id] = true;
+    });
+
+    return /** @type {SelectionState} */ (Object.assign({}, selectionState, {
+      items: newItems,
+      anchor: action.anchor,
+    }));
+  };
+
+  /**
+   * @param {SelectionState} selectionState
+   * @return {SelectionState}
+   */
+  SelectionState.deselectAll = function(selectionState) {
+    return {
+      items: {},
+      anchor: null,
+    };
+  };
+
+  /**
+   * @param {SelectionState} selection
+   * @param {Action} action
+   * @return {SelectionState}
+   */
+  SelectionState.updateSelection = function(selection, action) {
+    switch (action.name) {
+      case 'clear-search':
+      case 'finish-search':
+      case 'select-folder':
+        return SelectionState.deselectAll(selection);
+      case 'select-items':
+        return SelectionState.selectItems(selection, action);
+    }
+    return selection;
+  };
+
   var SearchState = {};
 
   /**
@@ -181,52 +231,53 @@
   var ClosedFolderState = {};
 
   /**
-   * @param {ClosedFolderState} state
+   * @param {ClosedFolderState} closedFolders
    * @param {Action} action
    * @param {NodeList} nodes
    * @return {ClosedFolderState}
    */
-  ClosedFolderState.openAncestorsOf = function(state, action, nodes) {
+  ClosedFolderState.openAncestorsOf = function(closedFolders, action, nodes) {
     var id = action.id;
     var modifications = {};
     var parentId = nodes[id].parentId;
     while (parentId) {
-      if (state[parentId]) {
+      if (closedFolders[parentId]) {
         modifications[parentId] = false;
       }
       parentId = nodes[parentId].parentId;
     }
 
-    return Object.assign({}, state, modifications);
+    return Object.assign({}, closedFolders, modifications);
   };
 
   /**
-   * @param {ClosedFolderState} state
+   * @param {ClosedFolderState} closedFolders
    * @param {Action} action
    * @return {ClosedFolderState}
    */
-  ClosedFolderState.changeFolderOpen = function(state, action) {
+  ClosedFolderState.changeFolderOpen = function(closedFolders, action) {
     var closed = !action.open;
     var modification = {};
     modification[action.id] = closed;
 
-    return Object.assign({}, state, modification);
+    return Object.assign({}, closedFolders, modification);
   };
 
   /**
-   * @param {ClosedFolderState} state
+   * @param {ClosedFolderState} closedFolders
    * @param {Action} action
    * @param {NodeList} nodes
    * @return {ClosedFolderState}
    */
-  ClosedFolderState.updateClosedFolders = function(state, action, nodes) {
+  ClosedFolderState.updateClosedFolders = function(
+      closedFolders, action, nodes) {
     switch (action.name) {
       case 'change-folder-open':
-        return ClosedFolderState.changeFolderOpen(state, action);
+        return ClosedFolderState.changeFolderOpen(closedFolders, action);
       case 'select-folder':
-        return ClosedFolderState.openAncestorsOf(state, action, nodes);
+        return ClosedFolderState.openAncestorsOf(closedFolders, action, nodes);
       default:
-        return state;
+        return closedFolders;
     };
   };
 
@@ -245,6 +296,7 @@
       closedFolders: ClosedFolderState.updateClosedFolders(
           state.closedFolders, action, state.nodes),
       search: SearchState.updateSearch(state.search, action),
+      selection: SelectionState.updateSelection(state.selection, action),
     };
   }
 
@@ -254,5 +306,6 @@
     NodeState: NodeState,
     SearchState: SearchState,
     SelectedFolderState: SelectedFolderState,
+    SelectionState: SelectionState,
   };
 });
diff --git a/chrome/browser/resources/md_bookmarks/types.js b/chrome/browser/resources/md_bookmarks/types.js
index 9ffdc99c..a3b463a 100644
--- a/chrome/browser/resources/md_bookmarks/types.js
+++ b/chrome/browser/resources/md_bookmarks/types.js
@@ -28,6 +28,14 @@
 
 /**
  * @typedef{{
+ *   items: !Object<string, boolean>,
+ *   anchor: ?string,
+ * }}
+ */
+var SelectionState;
+
+/**
+ * @typedef{{
  *   term: string,
  *   inProgress: boolean,
  *   results: !Array<string>,
@@ -44,6 +52,7 @@
  *   selectedFolder: ?string,
  *   closedFolders: ClosedFolderState,
  *   search: SearchState,
+ *   selection: SelectionState,
  * }}
  */
 var BookmarksPageState;
diff --git a/chrome/browser/resources/md_bookmarks/util.js b/chrome/browser/resources/md_bookmarks/util.js
index 8fac070..bf20a151 100644
--- a/chrome/browser/resources/md_bookmarks/util.js
+++ b/chrome/browser/resources/md_bookmarks/util.js
@@ -60,6 +60,10 @@
         inProgress: false,
         results: [],
       },
+      selection: {
+        items: {},
+        anchor: null,
+      },
     };
   }
 
diff --git a/chrome/browser/resources/settings/device_page/device_page.html b/chrome/browser/resources/settings/device_page/device_page.html
index da02e5f..d42961e 100644
--- a/chrome/browser/resources/settings/device_page/device_page.html
+++ b/chrome/browser/resources/settings/device_page/device_page.html
@@ -102,10 +102,10 @@
           <settings-storage></settings-storage>
         </settings-subpage>
       </template>
-      <template is="dom-if" route-path="/power">
+      <template is="dom-if" route-path="/power"
+          no-search$="[[!enablePowerSettings_]]">
         <settings-subpage
             associated-control="[[$$('#powerRow')]]"
-            no-search$="[[!enablePowerSettings_]]"
             page-title="$i18n{powerTitle}">
           <settings-power enable-power-settings="[[enablePowerSettings_]]">
           </settings-power>
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index b886345a..e4348e5 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -1501,6 +1501,16 @@
       "views/login_view.h",
       "views/new_back_shortcut_bubble.cc",
       "views/new_back_shortcut_bubble.h",
+      "views/page_info/chosen_object_row.cc",
+      "views/page_info/chosen_object_row.h",
+      "views/page_info/chosen_object_row_observer.h",
+      "views/page_info/non_accessible_image_view.cc",
+      "views/page_info/non_accessible_image_view.h",
+      "views/page_info/permission_selector_row.cc",
+      "views/page_info/permission_selector_row.h",
+      "views/page_info/permission_selector_row_observer.h",
+      "views/page_info/website_settings_popup_view.cc",
+      "views/page_info/website_settings_popup_view.h",
       "views/payments/credit_card_editor_view_controller.cc",
       "views/payments/credit_card_editor_view_controller.h",
       "views/payments/editor_view_controller.cc",
@@ -1547,18 +1557,8 @@
       "views/toolbar/toolbar_actions_bar_bubble_views.h",
       "views/update_recommended_message_box.cc",
       "views/update_recommended_message_box.h",
-      "views/website_settings/chosen_object_row.cc",
-      "views/website_settings/chosen_object_row.h",
-      "views/website_settings/chosen_object_row_observer.h",
-      "views/website_settings/non_accessible_image_view.cc",
-      "views/website_settings/non_accessible_image_view.h",
       "views/website_settings/permission_prompt_impl.cc",
       "views/website_settings/permission_prompt_impl.h",
-      "views/website_settings/permission_selector_row.cc",
-      "views/website_settings/permission_selector_row.h",
-      "views/website_settings/permission_selector_row_observer.h",
-      "views/website_settings/website_settings_popup_view.cc",
-      "views/website_settings/website_settings_popup_view.h",
     ]
     deps += [
       "//chrome/browser/ui/views",
diff --git a/chrome/browser/ui/browser_navigator.cc b/chrome/browser/ui/browser_navigator.cc
index 1a7e806..6d5739e 100644
--- a/chrome/browser/ui/browser_navigator.cc
+++ b/chrome/browser/ui/browser_navigator.cc
@@ -36,6 +36,7 @@
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/web_contents.h"
+#include "content/public/common/url_constants.h"
 #include "extensions/features/features.h"
 
 #if defined(USE_ASH)
@@ -643,7 +644,7 @@
        url.host_piece() == chrome::kChromeUIMdSettingsHost ||
        url.host_piece() == chrome::kChromeUISettingsFrameHost ||
        url.host_piece() == chrome::kChromeUIHelpHost ||
-       url.host_piece() == chrome::kChromeUIHistoryHost ||
+       url.host_piece() == content::kChromeUIHistoryHost ||
        url.host_piece() == chrome::kChromeUIExtensionsHost ||
        url.host_piece() == chrome::kChromeUIBookmarksHost ||
 #if !defined(OS_CHROMEOS)
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_view_cocoa.h b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_view_cocoa.h
index 72ba129..6f8cb7b 100644
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_view_cocoa.h
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_view_cocoa.h
@@ -11,6 +11,8 @@
 
 @class BookmarkBarController;
 
+// A simple custom NSView for the bookmark bar used to prevent clicking and
+// dragging from moving the browser window.
 @interface BookmarkBarView : NSView {
  @private
   BOOL dropIndicatorShown_;
@@ -33,8 +35,6 @@
 @property(nonatomic, assign) BookmarkBarController* controller;
 @end
 
-// A simple custom NSView for the bookmark bar used to prevent clicking and
-// dragging from moving the browser window.
 @interface BookmarkBarView()  // TestingOrInternalAPI
 @property(nonatomic, readonly) BOOL dropIndicatorShown;
 @property(nonatomic, readonly) CGFloat dropIndicatorPosition;
diff --git a/chrome/browser/ui/cocoa/page_info/OWNERS b/chrome/browser/ui/cocoa/page_info/OWNERS
index a58718a4..857cf90 100644
--- a/chrome/browser/ui/cocoa/page_info/OWNERS
+++ b/chrome/browser/ui/cocoa/page_info/OWNERS
@@ -1,4 +1,8 @@
-palmer@chromium.org
+# Please use the following reviewer(s) for Mac code LGTM
 rsesek@chromium.org
 
+# Other owners
+lgarron@chromium.org
+palmer@chromium.org
+
 # COMPONENT: UI>Browser>Bubbles>PageInfo
diff --git a/chrome/browser/ui/page_info/OWNERS b/chrome/browser/ui/page_info/OWNERS
index 85149f6c..7e05578 100644
--- a/chrome/browser/ui/page_info/OWNERS
+++ b/chrome/browser/ui/page_info/OWNERS
@@ -1,4 +1,5 @@
 # Please use for OWNERS code reviews
+lgarron@chromium.org
 benwells@chromium.org
 estark@chromium.org
 felt@chromium.org
diff --git a/chrome/browser/ui/views/browser_dialogs_views_mac.cc b/chrome/browser/ui/views/browser_dialogs_views_mac.cc
index 984f41ce..702aa69 100644
--- a/chrome/browser/ui/views/browser_dialogs_views_mac.cc
+++ b/chrome/browser/ui/views/browser_dialogs_views_mac.cc
@@ -9,9 +9,9 @@
 #include "chrome/browser/ui/browser_dialogs.h"
 #include "chrome/browser/ui/views/bookmarks/bookmark_bubble_view.h"
 #include "chrome/browser/ui/views/content_setting_bubble_contents.h"
+#include "chrome/browser/ui/views/page_info/website_settings_popup_view.h"
 #include "chrome/browser/ui/views/task_manager_view.h"
 #include "chrome/browser/ui/views/update_recommended_message_box.h"
-#include "chrome/browser/ui/views/website_settings/website_settings_popup_view.h"
 
 // This file provides definitions of desktop browser dialog-creation methods for
 // Mac where a Cocoa browser is using Views dialogs. I.e. it is included in the
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index e40229f3..0dc58c7 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -80,6 +80,7 @@
 #include "chrome/browser/ui/views/location_bar/zoom_bubble_view.h"
 #include "chrome/browser/ui/views/new_back_shortcut_bubble.h"
 #include "chrome/browser/ui/views/omnibox/omnibox_view_views.h"
+#include "chrome/browser/ui/views/page_info/website_settings_popup_view.h"
 #include "chrome/browser/ui/views/profiles/profile_indicator_icon.h"
 #include "chrome/browser/ui/views/status_bubble_views.h"
 #include "chrome/browser/ui/views/tabs/browser_tab_strip_controller.h"
@@ -91,7 +92,6 @@
 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
 #include "chrome/browser/ui/views/translate/translate_bubble_view.h"
 #include "chrome/browser/ui/views/update_recommended_message_box.h"
-#include "chrome/browser/ui/views/website_settings/website_settings_popup_view.h"
 #include "chrome/browser/ui/window_sizer/window_sizer.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/extensions/command.h"
diff --git a/chrome/browser/ui/views/location_bar/location_icon_view.cc b/chrome/browser/ui/views/location_bar/location_icon_view.cc
index d388e2f..bf75955 100644
--- a/chrome/browser/ui/views/location_bar/location_icon_view.cc
+++ b/chrome/browser/ui/views/location_bar/location_icon_view.cc
@@ -6,7 +6,7 @@
 
 #include "chrome/browser/ui/view_ids.h"
 #include "chrome/browser/ui/views/location_bar/location_bar_view.h"
-#include "chrome/browser/ui/views/website_settings/website_settings_popup_view.h"
+#include "chrome/browser/ui/views/page_info/website_settings_popup_view.h"
 #include "chrome/grit/generated_resources.h"
 #include "chrome/grit/theme_resources.h"
 #include "components/grit/components_scaled_resources.h"
diff --git a/chrome/browser/ui/views/location_bar/location_icon_view_interactive_uitest.cc b/chrome/browser/ui/views/location_bar/location_icon_view_interactive_uitest.cc
index ca23b00..9550122 100644
--- a/chrome/browser/ui/views/location_bar/location_icon_view_interactive_uitest.cc
+++ b/chrome/browser/ui/views/location_bar/location_icon_view_interactive_uitest.cc
@@ -6,8 +6,8 @@
 
 #include "chrome/browser/ui/views/frame/browser_view.h"
 #include "chrome/browser/ui/views/location_bar/location_bar_view.h"
+#include "chrome/browser/ui/views/page_info/website_settings_popup_view.h"
 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
-#include "chrome/browser/ui/views/website_settings/website_settings_popup_view.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/interactive_test_utils.h"
 
diff --git a/chrome/browser/ui/views/page_info/OWNERS b/chrome/browser/ui/views/page_info/OWNERS
new file mode 100644
index 0000000..254c31a
--- /dev/null
+++ b/chrome/browser/ui/views/page_info/OWNERS
@@ -0,0 +1,7 @@
+lgarron@chromium.org
+benwells@chromium.org
+felt@chromium.org
+palmer@chromium.org
+raymes@chromium.org
+
+# COMPONENT: UI>Browser>Bubbles>PageInfo
diff --git a/chrome/browser/ui/views/website_settings/chosen_object_row.cc b/chrome/browser/ui/views/page_info/chosen_object_row.cc
similarity index 93%
rename from chrome/browser/ui/views/website_settings/chosen_object_row.cc
rename to chrome/browser/ui/views/page_info/chosen_object_row.cc
index b655d44..6fbd7b8 100644
--- a/chrome/browser/ui/views/website_settings/chosen_object_row.cc
+++ b/chrome/browser/ui/views/page_info/chosen_object_row.cc
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/ui/views/website_settings/chosen_object_row.h"
+#include "chrome/browser/ui/views/page_info/chosen_object_row.h"
 
-#include "chrome/browser/ui/views/website_settings/chosen_object_row_observer.h"
-#include "chrome/browser/ui/views/website_settings/website_settings_popup_view.h"
+#include "chrome/browser/ui/views/page_info/chosen_object_row_observer.h"
+#include "chrome/browser/ui/views/page_info/website_settings_popup_view.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/resources/grit/ui_resources.h"
diff --git a/chrome/browser/ui/views/website_settings/chosen_object_row.h b/chrome/browser/ui/views/page_info/chosen_object_row.h
similarity index 85%
rename from chrome/browser/ui/views/website_settings/chosen_object_row.h
rename to chrome/browser/ui/views/page_info/chosen_object_row.h
index 02a14c3..30fc5919 100644
--- a/chrome/browser/ui/views/website_settings/chosen_object_row.h
+++ b/chrome/browser/ui/views/page_info/chosen_object_row.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_UI_VIEWS_WEBSITE_SETTINGS_CHOSEN_OBJECT_ROW_H_
-#define CHROME_BROWSER_UI_VIEWS_WEBSITE_SETTINGS_CHOSEN_OBJECT_ROW_H_
+#ifndef CHROME_BROWSER_UI_VIEWS_PAGE_INFO_CHOSEN_OBJECT_ROW_H_
+#define CHROME_BROWSER_UI_VIEWS_PAGE_INFO_CHOSEN_OBJECT_ROW_H_
 
 #include "base/macros.h"
 #include "chrome/browser/ui/page_info/website_settings_ui.h"
@@ -42,4 +42,4 @@
   DISALLOW_COPY_AND_ASSIGN(ChosenObjectRow);
 };
 
-#endif  // CHROME_BROWSER_UI_VIEWS_WEBSITE_SETTINGS_CHOSEN_OBJECT_ROW_H_
+#endif  // CHROME_BROWSER_UI_VIEWS_PAGE_INFO_CHOSEN_OBJECT_ROW_H_
diff --git a/chrome/browser/ui/views/website_settings/chosen_object_row_observer.h b/chrome/browser/ui/views/page_info/chosen_object_row_observer.h
similarity index 67%
rename from chrome/browser/ui/views/website_settings/chosen_object_row_observer.h
rename to chrome/browser/ui/views/page_info/chosen_object_row_observer.h
index ef76b00..42bd32f 100644
--- a/chrome/browser/ui/views/website_settings/chosen_object_row_observer.h
+++ b/chrome/browser/ui/views/page_info/chosen_object_row_observer.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_UI_VIEWS_WEBSITE_SETTINGS_CHOSEN_OBJECT_ROW_OBSERVER_H_
-#define CHROME_BROWSER_UI_VIEWS_WEBSITE_SETTINGS_CHOSEN_OBJECT_ROW_OBSERVER_H_
+#ifndef CHROME_BROWSER_UI_VIEWS_PAGE_INFO_CHOSEN_OBJECT_ROW_OBSERVER_H_
+#define CHROME_BROWSER_UI_VIEWS_PAGE_INFO_CHOSEN_OBJECT_ROW_OBSERVER_H_
 
 #include "chrome/browser/ui/page_info/website_settings_ui.h"
 
@@ -17,4 +17,4 @@
   virtual ~ChosenObjectRowObserver() {}
 };
 
-#endif  // CHROME_BROWSER_UI_VIEWS_WEBSITE_SETTINGS_CHOSEN_OBJECT_ROW_OBSERVER_H_
+#endif  // CHROME_BROWSER_UI_VIEWS_PAGE_INFO_CHOSEN_OBJECT_ROW_OBSERVER_H_
diff --git a/chrome/browser/ui/views/website_settings/non_accessible_image_view.cc b/chrome/browser/ui/views/page_info/non_accessible_image_view.cc
similarity index 82%
rename from chrome/browser/ui/views/website_settings/non_accessible_image_view.cc
rename to chrome/browser/ui/views/page_info/non_accessible_image_view.cc
index d0638d8..eca9f37 100644
--- a/chrome/browser/ui/views/website_settings/non_accessible_image_view.cc
+++ b/chrome/browser/ui/views/page_info/non_accessible_image_view.cc
@@ -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 "chrome/browser/ui/views/website_settings/non_accessible_image_view.h"
+#include "chrome/browser/ui/views/page_info/non_accessible_image_view.h"
 
 #include "ui/accessibility/ax_enums.h"
 #include "ui/accessibility/ax_node_data.h"
diff --git a/chrome/browser/ui/views/website_settings/non_accessible_image_view.h b/chrome/browser/ui/views/page_info/non_accessible_image_view.h
similarity index 69%
rename from chrome/browser/ui/views/website_settings/non_accessible_image_view.h
rename to chrome/browser/ui/views/page_info/non_accessible_image_view.h
index 80eb9956..c0ae82ad 100644
--- a/chrome/browser/ui/views/website_settings/non_accessible_image_view.h
+++ b/chrome/browser/ui/views/page_info/non_accessible_image_view.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_UI_VIEWS_WEBSITE_SETTINGS_NON_ACCESSIBLE_IMAGE_VIEW_H_
-#define CHROME_BROWSER_UI_VIEWS_WEBSITE_SETTINGS_NON_ACCESSIBLE_IMAGE_VIEW_H_
+#ifndef CHROME_BROWSER_UI_VIEWS_PAGE_INFO_NON_ACCESSIBLE_IMAGE_VIEW_H_
+#define CHROME_BROWSER_UI_VIEWS_PAGE_INFO_NON_ACCESSIBLE_IMAGE_VIEW_H_
 
 #include "base/macros.h"
 #include "ui/views/controls/image_view.h"
@@ -20,4 +20,4 @@
   DISALLOW_COPY_AND_ASSIGN(NonAccessibleImageView);
 };
 
-#endif  // CHROME_BROWSER_UI_VIEWS_WEBSITE_SETTINGS_NON_ACCESSIBLE_IMAGE_VIEW_H_
+#endif  // CHROME_BROWSER_UI_VIEWS_PAGE_INFO_NON_ACCESSIBLE_IMAGE_VIEW_H_
diff --git a/chrome/browser/ui/views/website_settings/permission_selector_row.cc b/chrome/browser/ui/views/page_info/permission_selector_row.cc
similarity index 97%
rename from chrome/browser/ui/views/website_settings/permission_selector_row.cc
rename to chrome/browser/ui/views/page_info/permission_selector_row.cc
index 8efa7385..3ac5644 100644
--- a/chrome/browser/ui/views/website_settings/permission_selector_row.cc
+++ b/chrome/browser/ui/views/page_info/permission_selector_row.cc
@@ -2,15 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/ui/views/website_settings/permission_selector_row.h"
+#include "chrome/browser/ui/views/page_info/permission_selector_row.h"
 
 #include "base/i18n/rtl.h"
 #include "base/macros.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/ui/page_info/permission_menu_model.h"
 #include "chrome/browser/ui/page_info/website_settings_ui.h"
-#include "chrome/browser/ui/views/website_settings/non_accessible_image_view.h"
-#include "chrome/browser/ui/views/website_settings/website_settings_popup_view.h"
+#include "chrome/browser/ui/views/page_info/non_accessible_image_view.h"
+#include "chrome/browser/ui/views/page_info/website_settings_popup_view.h"
 #include "chrome/grit/generated_resources.h"
 #include "ui/accessibility/ax_node_data.h"
 #include "ui/base/material_design/material_design_controller.h"
diff --git a/chrome/browser/ui/views/website_settings/permission_selector_row.h b/chrome/browser/ui/views/page_info/permission_selector_row.h
similarity index 89%
rename from chrome/browser/ui/views/website_settings/permission_selector_row.h
rename to chrome/browser/ui/views/page_info/permission_selector_row.h
index a2ff854..8150a81 100644
--- a/chrome/browser/ui/views/website_settings/permission_selector_row.h
+++ b/chrome/browser/ui/views/page_info/permission_selector_row.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_UI_VIEWS_WEBSITE_SETTINGS_PERMISSION_SELECTOR_ROW_H_
-#define CHROME_BROWSER_UI_VIEWS_WEBSITE_SETTINGS_PERMISSION_SELECTOR_ROW_H_
+#ifndef CHROME_BROWSER_UI_VIEWS_PAGE_INFO_PERMISSION_SELECTOR_ROW_H_
+#define CHROME_BROWSER_UI_VIEWS_PAGE_INFO_PERMISSION_SELECTOR_ROW_H_
 
 #include <memory>
 
@@ -12,7 +12,7 @@
 #include "base/observer_list.h"
 #include "chrome/browser/ui/page_info/permission_menu_model.h"
 #include "chrome/browser/ui/page_info/website_settings_ui.h"
-#include "chrome/browser/ui/views/website_settings/permission_selector_row_observer.h"
+#include "chrome/browser/ui/views/page_info/permission_selector_row_observer.h"
 #include "components/content_settings/core/common/content_settings.h"
 #include "components/content_settings/core/common/content_settings_types.h"
 #include "ui/views/controls/button/menu_button_listener.h"
@@ -85,4 +85,4 @@
   DISALLOW_COPY_AND_ASSIGN(PermissionSelectorRow);
 };
 
-#endif  // CHROME_BROWSER_UI_VIEWS_WEBSITE_SETTINGS_PERMISSION_SELECTOR_ROW_H_
+#endif  // CHROME_BROWSER_UI_VIEWS_PAGE_INFO_PERMISSION_SELECTOR_ROW_H_
diff --git a/chrome/browser/ui/views/website_settings/permission_selector_row_observer.h b/chrome/browser/ui/views/page_info/permission_selector_row_observer.h
similarity index 66%
rename from chrome/browser/ui/views/website_settings/permission_selector_row_observer.h
rename to chrome/browser/ui/views/page_info/permission_selector_row_observer.h
index 6e836a68..8d7a98f 100644
--- a/chrome/browser/ui/views/website_settings/permission_selector_row_observer.h
+++ b/chrome/browser/ui/views/page_info/permission_selector_row_observer.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_UI_VIEWS_WEBSITE_SETTINGS_PERMISSION_SELECTOR_ROW_OBSERVER_H_
-#define CHROME_BROWSER_UI_VIEWS_WEBSITE_SETTINGS_PERMISSION_SELECTOR_ROW_OBSERVER_H_
+#ifndef CHROME_BROWSER_UI_VIEWS_PAGE_INFO_PERMISSION_SELECTOR_ROW_OBSERVER_H_
+#define CHROME_BROWSER_UI_VIEWS_PAGE_INFO_PERMISSION_SELECTOR_ROW_OBSERVER_H_
 
 #include "chrome/browser/ui/page_info/website_settings_ui.h"
 
@@ -17,4 +17,4 @@
   virtual ~PermissionSelectorRowObserver() {}
 };
 
-#endif  // CHROME_BROWSER_UI_VIEWS_WEBSITE_SETTINGS_PERMISSION_SELECTOR_ROW_OBSERVER_H_
+#endif  // CHROME_BROWSER_UI_VIEWS_PAGE_INFO_PERMISSION_SELECTOR_ROW_OBSERVER_H_
diff --git a/chrome/browser/ui/views/website_settings/website_settings_popup_view.cc b/chrome/browser/ui/views/page_info/website_settings_popup_view.cc
similarity index 98%
rename from chrome/browser/ui/views/website_settings/website_settings_popup_view.cc
rename to chrome/browser/ui/views/page_info/website_settings_popup_view.cc
index 502bb471..dbfc251 100644
--- a/chrome/browser/ui/views/website_settings/website_settings_popup_view.cc
+++ b/chrome/browser/ui/views/page_info/website_settings_popup_view.cc
@@ -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 "chrome/browser/ui/views/website_settings/website_settings_popup_view.h"
+#include "chrome/browser/ui/views/page_info/website_settings_popup_view.h"
 
 #include <stddef.h>
 
@@ -24,9 +24,9 @@
 #include "chrome/browser/ui/page_info/website_settings.h"
 #include "chrome/browser/ui/views/collected_cookies_views.h"
 #include "chrome/browser/ui/views/harmony/layout_delegate.h"
-#include "chrome/browser/ui/views/website_settings/chosen_object_row.h"
-#include "chrome/browser/ui/views/website_settings/non_accessible_image_view.h"
-#include "chrome/browser/ui/views/website_settings/permission_selector_row.h"
+#include "chrome/browser/ui/views/page_info/chosen_object_row.h"
+#include "chrome/browser/ui/views/page_info/non_accessible_image_view.h"
+#include "chrome/browser/ui/views/page_info/permission_selector_row.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/grit/chromium_strings.h"
 #include "chrome/grit/generated_resources.h"
diff --git a/chrome/browser/ui/views/website_settings/website_settings_popup_view.h b/chrome/browser/ui/views/page_info/website_settings_popup_view.h
similarity index 92%
rename from chrome/browser/ui/views/website_settings/website_settings_popup_view.h
rename to chrome/browser/ui/views/page_info/website_settings_popup_view.h
index 8fa0cc6..557dc0c 100644
--- a/chrome/browser/ui/views/website_settings/website_settings_popup_view.h
+++ b/chrome/browser/ui/views/page_info/website_settings_popup_view.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_UI_VIEWS_WEBSITE_SETTINGS_WEBSITE_SETTINGS_POPUP_VIEW_H_
-#define CHROME_BROWSER_UI_VIEWS_WEBSITE_SETTINGS_WEBSITE_SETTINGS_POPUP_VIEW_H_
+#ifndef CHROME_BROWSER_UI_VIEWS_PAGE_INFO_WEBSITE_SETTINGS_POPUP_VIEW_H_
+#define CHROME_BROWSER_UI_VIEWS_PAGE_INFO_WEBSITE_SETTINGS_POPUP_VIEW_H_
 
 #include <memory>
 
@@ -11,9 +11,9 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/ui/page_info/website_settings_ui.h"
-#include "chrome/browser/ui/views/website_settings/chosen_object_row_observer.h"
-#include "chrome/browser/ui/views/website_settings/permission_selector_row.h"
-#include "chrome/browser/ui/views/website_settings/permission_selector_row_observer.h"
+#include "chrome/browser/ui/views/page_info/chosen_object_row_observer.h"
+#include "chrome/browser/ui/views/page_info/permission_selector_row.h"
+#include "chrome/browser/ui/views/page_info/permission_selector_row_observer.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "ui/views/bubble/bubble_dialog_delegate.h"
 #include "ui/views/controls/button/button.h"
@@ -183,4 +183,4 @@
   DISALLOW_COPY_AND_ASSIGN(WebsiteSettingsPopupView);
 };
 
-#endif  // CHROME_BROWSER_UI_VIEWS_WEBSITE_SETTINGS_WEBSITE_SETTINGS_POPUP_VIEW_H_
+#endif  // CHROME_BROWSER_UI_VIEWS_PAGE_INFO_WEBSITE_SETTINGS_POPUP_VIEW_H_
diff --git a/chrome/browser/ui/views/website_settings/website_settings_popup_view_interactive_uitest.cc b/chrome/browser/ui/views/page_info/website_settings_popup_view_interactive_uitest.cc
similarity index 96%
rename from chrome/browser/ui/views/website_settings/website_settings_popup_view_interactive_uitest.cc
rename to chrome/browser/ui/views/page_info/website_settings_popup_view_interactive_uitest.cc
index 28efa6e..822c1c29 100644
--- a/chrome/browser/ui/views/website_settings/website_settings_popup_view_interactive_uitest.cc
+++ b/chrome/browser/ui/views/page_info/website_settings_popup_view_interactive_uitest.cc
@@ -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 "chrome/browser/ui/views/website_settings/website_settings_popup_view.h"
+#include "chrome/browser/ui/views/page_info/website_settings_popup_view.h"
 
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
diff --git a/chrome/browser/ui/views/website_settings/website_settings_popup_view_unittest.cc b/chrome/browser/ui/views/page_info/website_settings_popup_view_unittest.cc
similarity index 97%
rename from chrome/browser/ui/views/website_settings/website_settings_popup_view_unittest.cc
rename to chrome/browser/ui/views/page_info/website_settings_popup_view_unittest.cc
index 5e9255dc..00f2047 100644
--- a/chrome/browser/ui/views/website_settings/website_settings_popup_view_unittest.cc
+++ b/chrome/browser/ui/views/page_info/website_settings_popup_view_unittest.cc
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/ui/views/website_settings/website_settings_popup_view.h"
+#include "chrome/browser/ui/views/page_info/website_settings_popup_view.h"
 
 #include "base/macros.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h"
-#include "chrome/browser/ui/views/website_settings/chosen_object_row.h"
-#include "chrome/browser/ui/views/website_settings/permission_selector_row.h"
+#include "chrome/browser/ui/views/page_info/chosen_object_row.h"
+#include "chrome/browser/ui/views/page_info/permission_selector_row.h"
 #include "chrome/browser/usb/usb_chooser_context.h"
 #include "chrome/browser/usb/usb_chooser_context_factory.h"
 #include "chrome/test/base/testing_profile.h"
diff --git a/chrome/browser/ui/views/website_settings/OWNERS b/chrome/browser/ui/views/website_settings/OWNERS
index 58f8c3a9..a78ee5a 100644
--- a/chrome/browser/ui/views/website_settings/OWNERS
+++ b/chrome/browser/ui/views/website_settings/OWNERS
@@ -3,4 +3,4 @@
 palmer@chromium.org
 raymes@chromium.org
 
-# COMPONENT: UI>Browser>SiteSettings
+# COMPONENT: UI>Browser>Permissions>Prompts
diff --git a/chrome/browser/ui/views/website_settings/permission_prompt_impl.cc b/chrome/browser/ui/views/website_settings/permission_prompt_impl.cc
index 3d115e0..582c3ba 100644
--- a/chrome/browser/ui/views/website_settings/permission_prompt_impl.cc
+++ b/chrome/browser/ui/views/website_settings/permission_prompt_impl.cc
@@ -17,8 +17,8 @@
 #include "chrome/browser/ui/layout_constants.h"
 #include "chrome/browser/ui/views/exclusive_access_bubble_views.h"
 #include "chrome/browser/ui/views/harmony/layout_delegate.h"
-#include "chrome/browser/ui/views/website_settings/permission_selector_row.h"
-#include "chrome/browser/ui/views/website_settings/permission_selector_row_observer.h"
+#include "chrome/browser/ui/views/page_info/permission_selector_row.h"
+#include "chrome/browser/ui/views/page_info/permission_selector_row_observer.h"
 #include "chrome/grit/generated_resources.h"
 #include "components/strings/grit/components_strings.h"
 #include "components/url_formatter/elide_url.h"
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
index 5be5b1ff..45433fe5 100644
--- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -80,6 +80,7 @@
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_ui.h"
 #include "content/public/common/content_client.h"
+#include "content/public/common/url_constants.h"
 #include "content/public/common/url_utils.h"
 #include "device/vr/features.h"
 #include "extensions/features/features.h"
@@ -437,7 +438,7 @@
   }
   // Material Design history is on its own host, rather than on an Uber page.
   if (base::FeatureList::IsEnabled(features::kMaterialDesignHistory) &&
-      url.host_piece() == chrome::kChromeUIHistoryHost) {
+      url.host_piece() == content::kChromeUIHistoryHost) {
     return &NewWebUI<MdHistoryUI>;
   }
   // Material Design Settings gets its own host, if enabled.
@@ -796,7 +797,7 @@
   if (page_url.host_piece() == chrome::kChromeUIFlagsHost)
     return FlagsUI::GetFaviconResourceBytes(scale_factor);
 
-  if (page_url.host_piece() == chrome::kChromeUIHistoryHost)
+  if (page_url.host_piece() == content::kChromeUIHistoryHost)
     return HistoryUI::GetFaviconResourceBytes(scale_factor);
 
 #if !defined(OS_ANDROID)
diff --git a/chrome/browser/ui/webui/md_history_ui.cc b/chrome/browser/ui/webui/md_history_ui.cc
index 7ef8b01a..7462e625 100644
--- a/chrome/browser/ui/webui/md_history_ui.cc
+++ b/chrome/browser/ui/webui/md_history_ui.cc
@@ -30,6 +30,7 @@
 #include "components/strings/grit/components_strings.h"
 #include "content/public/browser/web_ui.h"
 #include "content/public/browser/web_ui_data_source.h"
+#include "content/public/common/url_constants.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/resource/resource_bundle.h"
 
@@ -51,7 +52,7 @@
 content::WebUIDataSource* CreateMdHistoryUIHTMLSource(Profile* profile,
                                                       bool use_test_title) {
   content::WebUIDataSource* source =
-      content::WebUIDataSource::Create(chrome::kChromeUIHistoryHost);
+      content::WebUIDataSource::Create(content::kChromeUIHistoryHost);
 
   // Localized strings (alphabetical order).
   source->AddLocalizedString("bookmarked", IDS_HISTORY_ENTRY_BOOKMARKED);
@@ -249,7 +250,7 @@
   update->SetBoolean(kIsUserSignedInKey, IsUserSignedIn(profile));
   update->SetBoolean(kShowMenuPromoKey, !MenuPromoShown(profile));
 
-  content::WebUIDataSource::Update(profile, chrome::kChromeUIHistoryHost,
+  content::WebUIDataSource::Update(profile, content::kChromeUIHistoryHost,
                                    std::move(update));
 }
 
diff --git a/chrome/browser/ui/webui/uber/uber_ui.cc b/chrome/browser/ui/webui/uber/uber_ui.cc
index 5cc1e167..9ccff785 100644
--- a/chrome/browser/ui/webui/uber/uber_ui.cc
+++ b/chrome/browser/ui/webui/uber/uber_ui.cc
@@ -30,6 +30,7 @@
 #include "content/public/browser/web_ui.h"
 #include "content/public/browser/web_ui_data_source.h"
 #include "content/public/common/browser_side_navigation_policy.h"
+#include "content/public/common/url_constants.h"
 #include "extensions/browser/extension_registry.h"
 #include "extensions/common/extension_set.h"
 
@@ -58,7 +59,7 @@
   source->AddString("helpFrameURL", chrome::kChromeUIHelpFrameURL);
   source->AddString("helpHost", chrome::kChromeUIHelpHost);
   source->AddString("historyFrameURL", chrome::kChromeUIHistoryFrameURL);
-  source->AddString("historyHost", chrome::kChromeUIHistoryHost);
+  source->AddString("historyHost", content::kChromeUIHistoryHost);
   source->AddString("settingsFrameURL", chrome::kChromeUISettingsFrameURL);
   source->AddString("settingsHost", chrome::kChromeUISettingsHost);
 
@@ -108,12 +109,12 @@
                              IDS_MANAGE_EXTENSIONS_SETTING_WINDOWS_TITLE);
   source->AddString("helpHost", chrome::kChromeUIHelpHost);
   source->AddLocalizedString("helpDisplayName", IDS_ABOUT_TITLE);
-  source->AddString("historyHost", chrome::kChromeUIHistoryHost);
+  source->AddString("historyHost", content::kChromeUIHistoryHost);
   source->AddLocalizedString("historyDisplayName", IDS_HISTORY_TITLE);
   source->AddString("settingsHost", chrome::kChromeUISettingsHost);
   source->AddLocalizedString("settingsDisplayName", IDS_SETTINGS_TITLE);
   bool overrides_history =
-      HasExtensionType(browser_context, chrome::kChromeUIHistoryHost);
+      HasExtensionType(browser_context, content::kChromeUIHistoryHost);
   source->AddString("overridesHistory", overrides_history ? "yes" : "no");
   source->AddBoolean("hideHistory", base::FeatureList::IsEnabled(
                                         features::kMaterialDesignHistory) &&
@@ -130,10 +131,10 @@
 void UpdateHistoryNavigation(content::WebUI* web_ui) {
   bool overrides_history =
       HasExtensionType(web_ui->GetWebContents()->GetBrowserContext(),
-                       chrome::kChromeUIHistoryHost);
+                       content::kChromeUIHistoryHost);
   web_ui->CallJavascriptFunctionUnsafe(
       "uber_frame.setNavigationOverride",
-      base::Value(chrome::kChromeUIHistoryHost),
+      base::Value(content::kChromeUIHistoryHost),
       base::Value(overrides_history ? "yes" : "no"));
 }
 
@@ -175,7 +176,7 @@
   RegisterSubpage(chrome::kChromeUIHelpFrameURL,
                   chrome::kChromeUIHelpHost);
   RegisterSubpage(chrome::kChromeUIHistoryFrameURL,
-                  chrome::kChromeUIHistoryHost);
+                  content::kChromeUIHistoryHost);
   RegisterSubpage(chrome::kChromeUISettingsFrameURL,
                   chrome::kChromeUISettingsHost);
   RegisterSubpage(chrome::kChromeUIUberFrameURL,
diff --git a/chrome/common/extensions/chrome_manifest_url_handlers.cc b/chrome/common/extensions/chrome_manifest_url_handlers.cc
index cb6a0e9..173b955 100644
--- a/chrome/common/extensions/chrome_manifest_url_handlers.cc
+++ b/chrome/common/extensions/chrome_manifest_url_handlers.cc
@@ -15,6 +15,7 @@
 #include "build/build_config.h"
 #include "chrome/common/chrome_constants.h"
 #include "chrome/common/url_constants.h"
+#include "content/public/common/url_constants.h"
 #include "extensions/common/error_utils.h"
 #include "extensions/common/file_util.h"
 #include "extensions/common/manifest.h"
@@ -108,7 +109,7 @@
     // Restrict override pages to a list of supported URLs.
     bool is_allowed_host = page == chrome::kChromeUINewTabHost ||
                            page == chrome::kChromeUIBookmarksHost ||
-                           page == chrome::kChromeUIHistoryHost;
+                           page == content::kChromeUIHistoryHost;
 #if defined(OS_CHROMEOS)
     is_allowed_host = is_allowed_host ||
                       page == chrome::kChromeUIActivationMessageHost ||
diff --git a/chrome/common/extensions/docs/templates/private/api_property.html b/chrome/common/extensions/docs/templates/private/api_property.html
index f728033..0b30e78 100644
--- a/chrome/common/extensions/docs/templates/private/api_property.html
+++ b/chrome/common/extensions/docs/templates/private/api_property.html
@@ -23,7 +23,9 @@
     <table class="innerTable">
     <thead><th colspan="3">Functions</th></thead>
     {{#f:functions}}
-      {{+partials.function function:f parentName:false/}}
+      <tr><td>
+        {{+partials.function function:f parentName:false/}}
+      </td></tr>
     {{/functions}}
     </table>
     {{/functions}}
diff --git a/chrome/common/url_constants.cc b/chrome/common/url_constants.cc
index 99dd99b..2ff9a65 100644
--- a/chrome/common/url_constants.cc
+++ b/chrome/common/url_constants.cc
@@ -209,7 +209,6 @@
 const char kChromeUIHangUIHost[] = "uithreadhang";
 const char kChromeUIHelpFrameHost[] = "help-frame";
 const char kChromeUIHelpHost[] = "help";
-const char kChromeUIHistoryHost[] = "history";
 const char kChromeUIHistoryFrameHost[] = "history-frame";
 const char kChromeUIIdentityInternalsHost[] = "identity-internals";
 const char kChromeUIInspectHost[] = "inspect";
@@ -644,7 +643,6 @@
     kChromeUIDeviceLogHost,
     kChromeUIFlagsHost,
     kChromeUIGCMInternalsHost,
-    kChromeUIHistoryHost,
     kChromeUIInvalidationsHost,
     kChromeUILocalStateHost,
     kChromeUINetExportHost,
@@ -675,6 +673,7 @@
     content::kChromeUIDinoHost,
     content::kChromeUIGpuHost,
     content::kChromeUIHistogramHost,
+    content::kChromeUIHistoryHost,
     content::kChromeUIIndexedDBInternalsHost,
     content::kChromeUIMediaInternalsHost,
     content::kChromeUINetworkErrorHost,
diff --git a/chrome/common/url_constants.h b/chrome/common/url_constants.h
index 5f8d4a0..fef7786 100644
--- a/chrome/common/url_constants.h
+++ b/chrome/common/url_constants.h
@@ -193,7 +193,6 @@
 extern const char kChromeUIHelpHost[];
 extern const char kChromeUIHangHost[];
 extern const char kChromeUIHangUIHost[];
-extern const char kChromeUIHistoryHost[];
 extern const char kChromeUIHistoryFrameHost[];
 extern const char kChromeUIIdentityInternalsHost[];
 extern const char kChromeUIInspectHost[];
diff --git a/chrome/renderer/custom_menu_commands.h b/chrome/renderer/custom_menu_commands.h
index b1bcbc1..66e4755 100644
--- a/chrome/renderer/custom_menu_commands.h
+++ b/chrome/renderer/custom_menu_commands.h
@@ -10,6 +10,7 @@
 enum MenuCommands {
   MENU_COMMAND_PLUGIN_RUN = 1,
   MENU_COMMAND_PLUGIN_HIDE = 2,
+  MENU_COMMAND_ENABLE_FLASH = 3,
 };
 
 }  // namespace chrome
diff --git a/chrome/renderer/plugins/chrome_plugin_placeholder.cc b/chrome/renderer/plugins/chrome_plugin_placeholder.cc
index a116130..964954a 100644
--- a/chrome/renderer/plugins/chrome_plugin_placeholder.cc
+++ b/chrome/renderer/plugins/chrome_plugin_placeholder.cc
@@ -264,6 +264,10 @@
       HidePlugin();
       break;
     }
+    case chrome::MENU_COMMAND_ENABLE_FLASH: {
+      ShowPermissionBubbleCallback();
+      break;
+    }
     default:
       NOTREACHED();
   }
@@ -296,7 +300,9 @@
     params.custom_items.push_back(separator_item);
   }
 
-  if (!GetPluginInfo().path.value().empty()) {
+  bool flash_hidden =
+      status_ == ChromeViewHostMsg_GetPluginInfo_Status::kFlashHiddenPreferHtml;
+  if (!GetPluginInfo().path.value().empty() && !flash_hidden) {
     content::MenuItem run_item;
     run_item.action = chrome::MENU_COMMAND_PLUGIN_RUN;
     // Disable this menu item if the plugin is blocked by policy.
@@ -305,6 +311,15 @@
     params.custom_items.push_back(run_item);
   }
 
+  if (flash_hidden) {
+    content::MenuItem enable_flash_item;
+    enable_flash_item.action = chrome::MENU_COMMAND_ENABLE_FLASH;
+    enable_flash_item.enabled = true;
+    enable_flash_item.label =
+        l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_ENABLE_FLASH);
+    params.custom_items.push_back(enable_flash_item);
+  }
+
   content::MenuItem hide_item;
   hide_item.action = chrome::MENU_COMMAND_PLUGIN_HIDE;
   bool is_main_frame_plugin_document =
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 3c5f150a..d2612b5 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -558,6 +558,7 @@
           "../browser/ui/views/location_bar/location_icon_view_interactive_uitest.cc",
           "../browser/ui/views/location_bar/star_view_browsertest.cc",
           "../browser/ui/views/omnibox/omnibox_view_views_browsertest.cc",
+          "../browser/ui/views/page_info/website_settings_popup_view_interactive_uitest.cc",
           "../browser/ui/views/passwords/manage_passwords_bubble_view_interactive_uitest.cc",
           "../browser/ui/views/passwords/manage_passwords_icon_view_interactive_uitest.cc",
           "../browser/ui/views/ssl_client_certificate_selector_browsertest.cc",
@@ -567,7 +568,6 @@
           "../browser/ui/views/toolbar/toolbar_button_interactive_uitest.cc",
           "../browser/ui/views/toolbar/toolbar_view_interactive_uitest.cc",
           "../browser/ui/views/translate/translate_bubble_test_utils_views.cc",
-          "../browser/ui/views/website_settings/website_settings_popup_view_interactive_uitest.cc",
           "base/interactive_test_utils_views.cc",
         ]
       }
@@ -3040,11 +3040,15 @@
     sources += [
       "../browser/resources/chromeos/braille_ime/braille_ime_unittest.gtestjs",
       "../browser/resources/chromeos/select_to_speak/select_to_speak_unittest.gtestjs",
+      "../browser/resources/chromeos/switch_access/switch_access_unittest.gtestjs",
     ]
     extra_js_files += [
       "../browser/resources/chromeos/braille_ime/braille_ime.js",
       "../browser/resources/chromeos/select_to_speak/select_to_speak.js",
       "../browser/resources/chromeos/select_to_speak/test_support.js",
+      "../browser/resources/chromeos/switch_access/switch_access.js",
+      "../browser/resources/chromeos/switch_access/test_support.js",
+      "../browser/resources/chromeos/switch_access/testable_switch_access.js",
     ]
   }
 }
@@ -4801,11 +4805,11 @@
       "../browser/ui/views/apps/app_info_dialog/app_info_permissions_panel_unittest.cc",
       "../browser/ui/views/confirm_bubble_views_unittest.cc",
       "../browser/ui/views/global_error_bubble_view_unittest.cc",
+      "../browser/ui/views/page_info/website_settings_popup_view_unittest.cc",
       "../browser/ui/views/payments/credit_card_editor_view_controller_unittest.cc",
       "../browser/ui/views/payments/payment_request_item_list_unittest.cc",
       "../browser/ui/views/payments/validating_textfield_unittest.cc",
       "../browser/ui/views/payments/view_stack_unittest.cc",
-      "../browser/ui/views/website_settings/website_settings_popup_view_unittest.cc",
     ]
     if (is_chromeos) {
       sources += [ "../browser/ui/views/ime_driver/input_method_bridge_chromeos_unittest.cc" ]
diff --git a/chrome/test/data/extensions/web_request_site_process_registration/blocked.html b/chrome/test/data/extensions/web_request_site_process_registration/blocked.html
deleted file mode 100644
index f251fa3..0000000
--- a/chrome/test/data/extensions/web_request_site_process_registration/blocked.html
+++ /dev/null
@@ -1,9 +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.
--->
-<html>
-<head></head>
-<body>Mostly empty page, which will be blocked from loading.</body>
-</html>
diff --git a/chrome/test/data/extensions/web_request_site_process_registration/manifest.json b/chrome/test/data/extensions/web_request_site_process_registration/manifest.json
deleted file mode 100644
index 7df7d42..0000000
--- a/chrome/test/data/extensions/web_request_site_process_registration/manifest.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "name": "webRequest Blocking",
-  "version": "1.0",
-  "manifest_version": 2,
-  "description": "Tests navigation to a page blocked by webRequest API.",
-  "permissions": ["webRequest", "webRequestBlocking", "<all_urls>"],
-  "web_accessible_resources": [ "blocked.html" ]
-}
diff --git a/chrome/test/data/extensions/web_request_site_process_registration/test.html b/chrome/test/data/extensions/web_request_site_process_registration/test.html
deleted file mode 100644
index 89b5fc26..0000000
--- a/chrome/test/data/extensions/web_request_site_process_registration/test.html
+++ /dev/null
@@ -1,6 +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.
--->
-<script src="test.js"></script>
diff --git a/chrome/test/data/extensions/web_request_site_process_registration/test.js b/chrome/test/data/extensions/web_request_site_process_registration/test.js
deleted file mode 100644
index a7f5d61..0000000
--- a/chrome/test/data/extensions/web_request_site_process_registration/test.js
+++ /dev/null
@@ -1,13 +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.
-
-chrome.webRequest.onBeforeRequest.addListener(
-  function(details) {
-    if (details.url == chrome.extension.getURL("/blocked.html")) {
-      return {cancel: true};
-    }
-  },
-  {urls: ["<all_urls>"]},
-  ["blocking"]
-);
diff --git a/chrome/test/data/safe_browsing/dmg/make_hfs.sh b/chrome/test/data/safe_browsing/dmg/make_hfs.sh
index 4287ee4..0de6c360 100755
--- a/chrome/test/data/safe_browsing/dmg/make_hfs.sh
+++ b/chrome/test/data/safe_browsing/dmg/make_hfs.sh
@@ -33,6 +33,10 @@
 
 RAMDISK_VOLUME=$(hdiutil attach -nomount ram://$RAMDISK_SIZE)
 diskutil erasevolume "${FILESYSTEM_TYPE}" "${VOLUME_NAME}" ${RAMDISK_VOLUME}
+>&2 echo "Temporary debugging for crbug.com/696529."
+>&2 diskutil list
+>&2 hdiutil pmap -complete -debug ${RAMDISK_VOLUME}
+>&2 echo "RAMDISK_VOLUME: " + ${RAMDISK_VOLUME}
 diskutil mount ${RAMDISK_VOLUME}
 
 pushd "/Volumes/${VOLUME_NAME}"
diff --git a/chrome/test/data/webui/md_bookmarks/list_test.js b/chrome/test/data/webui/md_bookmarks/list_test.js
index 62de4f3..a2cd6f9 100644
--- a/chrome/test/data/webui/md_bookmarks/list_test.js
+++ b/chrome/test/data/webui/md_bookmarks/list_test.js
@@ -65,4 +65,53 @@
 
     assertDeepEquals(['1', '3', '5', '7'], ids);
   });
+
+  test('selects individual items', function() {
+    var items = list.root.querySelectorAll('bookmarks-item');
+
+    customClick(items[0]);
+    var expected = {
+      name: 'select-items',
+      add: false,
+      anchor: '1',
+      items: ['1'],
+    };
+    assertDeepEquals(expected, store.lastAction);
+
+    customClick(items[2], {ctrlKey: true});
+    expected.add = true;
+    expected.anchor = '5';
+    expected.items = ['5'];
+    assertDeepEquals(expected, store.lastAction);
+  });
+
+  test('shift-selects multiple items', function() {
+    var items = list.root.querySelectorAll('bookmarks-item');
+    store.data.selection.anchor = '1';
+
+    customClick(items[2], {shiftKey: true});
+
+    assertEquals('select-items', store.lastAction.name);
+    assertFalse(store.lastAction.add);
+    assertEquals('5', store.lastAction.anchor);
+    assertDeepEquals(['1', '3', '5'], store.lastAction.items);
+  });
+
+  test('selects the item when the anchor is missing', function() {
+    var items = list.root.querySelectorAll('bookmarks-item');
+    // Anchor hasn't been set yet:
+    store.data.selection.anchor = null;
+
+    customClick(items[0], {shiftKey: true});
+    assertEquals('1', store.lastAction.anchor);
+    assertDeepEquals(['1'], store.lastAction.items);
+
+    // Anchor item doesn't exist:
+    store.data.selection.anchor = '42';
+
+    customClick(items[1], {shiftKey: true});
+
+    assertEquals('3', store.lastAction.anchor);
+    assertDeepEquals(['3'], store.lastAction.items);
+  });
 });
diff --git a/chrome/test/data/webui/md_bookmarks/reducers_test.js b/chrome/test/data/webui/md_bookmarks/reducers_test.js
index 0d9da77..ba605475 100644
--- a/chrome/test/data/webui/md_bookmarks/reducers_test.js
+++ b/chrome/test/data/webui/md_bookmarks/reducers_test.js
@@ -2,6 +2,84 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+suite('selection state', function() {
+  var state;
+  var action;
+
+  function select(items, anchor, add) {
+    return {
+      name: 'select-items',
+      add: add,
+      anchor: anchor,
+      items: items,
+    };
+  }
+
+  setup(function() {
+    state = {
+      anchor: null,
+      items: {},
+    };
+  });
+
+  test('can select an item', function() {
+    action = select(['1'], '1', false);
+    state = bookmarks.SelectionState.updateSelection(state, action);
+
+    assertDeepEquals({'1': true}, state.items);
+    assertEquals('1', state.anchor);
+
+    // Replace current selection.
+    action = select(['2'], '2', false);
+    state = bookmarks.SelectionState.updateSelection(state, action);
+    assertDeepEquals({'2': true}, state.items);
+    assertEquals('2', state.anchor);
+
+    // Add to current selection.
+    action = select(['3'], '3', true);
+    state = bookmarks.SelectionState.updateSelection(state, action);
+    assertDeepEquals({'2': true, '3': true}, state.items);
+    assertEquals('3', state.anchor);
+  });
+
+  test('can select multiple items', function() {
+    action = select(['1', '2', '3'], '3', false);
+    state = bookmarks.SelectionState.updateSelection(state, action);
+    assertDeepEquals({'1': true, '2': true, '3': true}, state.items);
+
+    action = select(['3', '4'], '4', true);
+    state = bookmarks.SelectionState.updateSelection(state, action);
+    assertDeepEquals({'1': true, '2': true, '3': true, '4': true}, state.items);
+  });
+
+  test('is cleared when selected folder changes', function() {
+    action = select(['1', '2', '3'], '3', false);
+    state = bookmarks.SelectionState.updateSelection(state, action);
+
+    action = bookmarks.actions.selectFolder('2');
+    state = bookmarks.SelectionState.updateSelection(state, action);
+    assertDeepEquals({}, state.items);
+  });
+
+  test('is cleared when search finished', function() {
+    action = select(['1', '2', '3'], '3', false);
+    state = bookmarks.SelectionState.updateSelection(state, action);
+
+    action = bookmarks.actions.setSearchResults(['2']);
+    state = bookmarks.SelectionState.updateSelection(state, action);
+    assertDeepEquals({}, state.items);
+  });
+
+  test('is cleared when search cleared', function() {
+    action = select(['1', '2', '3'], '3', false);
+    state = bookmarks.SelectionState.updateSelection(state, action);
+
+    action = bookmarks.actions.clearSearch();
+    state = bookmarks.SelectionState.updateSelection(state, action);
+    assertDeepEquals({}, state.items);
+  });
+});
+
 suite('closed folder state', function() {
   var nodes;
   // TODO(tsergeant): Remove use of 'initialState' and 'nextState'.
diff --git a/chrome/utility/BUILD.gn b/chrome/utility/BUILD.gn
index 637a2336..36aad7e 100644
--- a/chrome/utility/BUILD.gn
+++ b/chrome/utility/BUILD.gn
@@ -99,6 +99,10 @@
     ]
   }
 
+  if (is_android) {
+    deps += [ "//components/payments/content/android/utility" ]
+  }
+
   if (enable_extensions) {
     sources += [
       "extensions/extensions_handler.cc",
diff --git a/chrome/utility/DEPS b/chrome/utility/DEPS
index ad6f8306..3021b8c 100644
--- a/chrome/utility/DEPS
+++ b/chrome/utility/DEPS
@@ -1,6 +1,7 @@
 include_rules = [
   "+chrome/grit",
   "+chrome/installer/util",
+  "+components/payments/content/android/utility",
   "+components/safe_json",
   "+components/wifi",
   "+content/public/child",
diff --git a/chrome/utility/chrome_content_utility_client.cc b/chrome/utility/chrome_content_utility_client.cc
index 6a77ced0..00256732 100644
--- a/chrome/utility/chrome_content_utility_client.cc
+++ b/chrome/utility/chrome_content_utility_client.cc
@@ -36,6 +36,8 @@
 #include "mojo/public/cpp/bindings/strong_binding.h"
 #include "net/proxy/mojo_proxy_resolver_factory_impl.h"
 #include "net/proxy/proxy_resolver_v8.h"
+#else
+#include "components/payments/content/android/utility/payment_manifest_parser.h"
 #endif
 
 #if defined(OS_CHROMEOS)
@@ -275,6 +277,8 @@
       base::Bind(CreateProxyResolverFactory));
   registry->AddInterface(base::Bind(CreateResourceUsageReporter));
   registry->AddInterface(base::Bind(&ProfileImportHandler::Create));
+#else
+  registry->AddInterface(base::Bind(&payments::PaymentManifestParser::Create));
 #endif
   registry->AddInterface(
       base::Bind(&safe_json::SafeJsonParserMojoImpl::Create));
diff --git a/chromecast/base/chromecast_switches.cc b/chromecast/base/chromecast_switches.cc
index 426de0c7..3cd4cf6ba1 100644
--- a/chromecast/base/chromecast_switches.cc
+++ b/chromecast/base/chromecast_switches.cc
@@ -5,6 +5,7 @@
 #include "chromecast/base/chromecast_switches.h"
 
 #include "base/command_line.h"
+#include "base/strings/string_number_conversions.h"
 
 namespace switches {
 
@@ -70,6 +71,9 @@
 // Optional flag to set a fixed sample rate for the alsa device.
 const char kAlsaFixedOutputSampleRate[] = "alsa-fixed-output-sample-rate";
 
+// Calibrated max output volume dBa for voice content at 1 meter, if known.
+const char kMaxOutputVolumeDba1m[] = "max-output-volume-dba1m";
+
 // Some platforms typically have very little 'free' memory, but plenty is
 // available in buffers+cached.  For such platforms, configure this amount
 // as the portion of buffers+cached memory that should be treated as
@@ -111,4 +115,33 @@
   return default_value;
 }
 
+int GetSwitchValueInt(const std::string& switch_name, const int default_value) {
+  const base::CommandLine* command_line =
+      base::CommandLine::ForCurrentProcess();
+  if (!command_line->HasSwitch(switch_name)) {
+    return default_value;
+  }
+
+  int arg_value;
+  if (!base::StringToInt(command_line->GetSwitchValueASCII(switch_name),
+                         &arg_value)) {
+    LOG(DFATAL) << "--" << switch_name << " only accepts integers as arguments";
+    return default_value;
+  }
+  return arg_value;
+}
+
+int GetSwitchValueNonNegativeInt(const std::string& switch_name,
+                                 const int default_value) {
+  DCHECK_GE(default_value, 0)
+      << "--" << switch_name << " must have a non-negative default value";
+
+  int value = GetSwitchValueInt(switch_name, default_value);
+  if (value < 0) {
+    LOG(DFATAL) << "--" << switch_name << " must have a non-negative value";
+    return default_value;
+  }
+  return value;
+}
+
 }  // namespace chromecast
diff --git a/chromecast/base/chromecast_switches.h b/chromecast/base/chromecast_switches.h
index d692803..27aa9b3 100644
--- a/chromecast/base/chromecast_switches.h
+++ b/chromecast/base/chromecast_switches.h
@@ -45,6 +45,7 @@
 extern const char kAlsaCheckCloseTimeout[];
 extern const char kAlsaEnableUpsampling[];
 extern const char kAlsaFixedOutputSampleRate[];
+extern const char kMaxOutputVolumeDba1m[];
 
 // Memory pressure switches
 extern const char kMemPressureSystemReservedKb[];
@@ -68,6 +69,17 @@
 bool GetSwitchValueBoolean(const std::string& switch_string,
                            const bool default_value);
 
+// Gets an integer value from switch |switch_name|. If the switch is not present
+// in the command line, or the value is not an integer, the |default_value| is
+// returned.
+int GetSwitchValueInt(const std::string& switch_name, const int default_value);
+
+// Gets a non-negative integer value from switch |switch_name|. If the switch is
+// not present in the command line, or the value is not a non-negative integer,
+// the |default_value| is returned.
+int GetSwitchValueNonNegativeInt(const std::string& switch_name,
+                                 const int default_value);
+
 }  // namespace chromecast
 
 #endif  // CHROMECAST_BASE_CHROMECAST_SWITCHES_H_
diff --git a/chromecast/chromecast.gni b/chromecast/chromecast.gni
index 6f71705..dc4ac9a 100644
--- a/chromecast/chromecast.gni
+++ b/chromecast/chromecast.gni
@@ -27,6 +27,9 @@
   # TODO(antz): default to false for audio-only builds, might need further
   # clean up (b/27119303)
   enable_chromecast_webui = !is_cast_audio_only && !is_android
+
+  # Set true to enable assistant features.
+  enable_assistant = false
 }
 
 declare_args() {
@@ -43,3 +46,7 @@
   cast_build_release =
       read_file("//chromecast/internal/build/cast_build_release", "trim string")
 }
+
+# Assistant shall only be enabled on audio-only builds.
+assert(!enable_assistant || is_cast_audio_only,
+       "Assistant is only available on audio devices.")
diff --git a/chromecast/media/cma/backend/alsa/BUILD.gn b/chromecast/media/cma/backend/alsa/BUILD.gn
index a14fcc9..13ddc12 100644
--- a/chromecast/media/cma/backend/alsa/BUILD.gn
+++ b/chromecast/media/cma/backend/alsa/BUILD.gn
@@ -50,6 +50,10 @@
     "stream_mixer_alsa_input_impl.h",
   ]
 
+  if (enable_assistant) {
+    sources += [ "volume_control.cc" ]
+  }
+
   libs = [ "asound" ]
 
   deps = [
diff --git a/chromecast/media/cma/backend/alsa/audio_decoder_alsa.cc b/chromecast/media/cma/backend/alsa/audio_decoder_alsa.cc
index 0221c0a9..7688835 100644
--- a/chromecast/media/cma/backend/alsa/audio_decoder_alsa.cc
+++ b/chromecast/media/cma/backend/alsa/audio_decoder_alsa.cc
@@ -108,9 +108,9 @@
   TRACE_FUNCTION_ENTRY0();
   current_pts_ = start_pts;
   DCHECK(IsValidConfig(config_));
-  mixer_input_.reset(new StreamMixerAlsaInput(this, config_.samples_per_second,
-                                              backend_->Primary(),
-                                              backend_->DeviceId()));
+  mixer_input_.reset(new StreamMixerAlsaInput(
+      this, config_.samples_per_second, backend_->Primary(),
+      backend_->DeviceId(), backend_->ContentType()));
   mixer_input_->SetVolumeMultiplier(volume_multiplier_);
   // Create decoder_ if necessary. This can happen if Stop() was called, and
   // SetConfig() was not called since then.
@@ -238,9 +238,9 @@
     // Destroy the old input first to ensure that the mixer output sample rate
     // is updated.
     mixer_input_.reset();
-    mixer_input_.reset(new StreamMixerAlsaInput(this, config.samples_per_second,
-                                                backend_->Primary(),
-                                                backend_->DeviceId()));
+    mixer_input_.reset(new StreamMixerAlsaInput(
+        this, config.samples_per_second, backend_->Primary(),
+        backend_->DeviceId(), backend_->ContentType()));
     mixer_input_->SetVolumeMultiplier(volume_multiplier_);
     pending_output_frames_ = kNoPendingOutput;
   }
diff --git a/chromecast/media/cma/backend/alsa/audio_filter_interface.h b/chromecast/media/cma/backend/alsa/audio_filter_interface.h
index afcb4d59..a4e6ddf 100644
--- a/chromecast/media/cma/backend/alsa/audio_filter_interface.h
+++ b/chromecast/media/cma/backend/alsa/audio_filter_interface.h
@@ -19,7 +19,7 @@
                                       ::media::SampleFormat sample_format) = 0;
 
   // Process data frames. Must be interleaved. |data| will be overwritten.
-  virtual bool ProcessInterleaved(uint8_t* data, int frames) = 0;
+  virtual bool ProcessInterleaved(uint8_t* data, int frames, float volume) = 0;
 };
 
 }  // namespace media
diff --git a/chromecast/media/cma/backend/alsa/filter_group.cc b/chromecast/media/cma/backend/alsa/filter_group.cc
index 0eb0d3be..1fa4df69 100644
--- a/chromecast/media/cma/backend/alsa/filter_group.cc
+++ b/chromecast/media/cma/backend/alsa/filter_group.cc
@@ -17,8 +17,10 @@
 }  // namespace
 
 FilterGroup::FilterGroup(const std::unordered_set<std::string>& input_types,
-                         AudioFilterFactory::FilterType filter_type)
+                         AudioFilterFactory::FilterType filter_type,
+                         AudioContentType content_type)
     : input_types_(input_types),
+      content_type_(content_type),
       output_samples_per_second_(0),
       sample_format_(::media::SampleFormat::kUnknownSampleFormat),
       audio_filter_(AudioFilterFactory::MakeAudioFilter(filter_type)),
@@ -78,7 +80,7 @@
   mixed_->ToInterleaved(chunk_size, BytesPerOutputFormatSample(),
                         interleaved_.data());
   if (audio_filter_) {
-    audio_filter_->ProcessInterleaved(interleaved_.data(), chunk_size);
+    audio_filter_->ProcessInterleaved(interleaved_.data(), chunk_size, volume_);
   }
 
   return true;
diff --git a/chromecast/media/cma/backend/alsa/filter_group.h b/chromecast/media/cma/backend/alsa/filter_group.h
index dddbf83..7db908c 100644
--- a/chromecast/media/cma/backend/alsa/filter_group.h
+++ b/chromecast/media/cma/backend/alsa/filter_group.h
@@ -15,10 +15,14 @@
 #include "base/macros.h"
 #include "chromecast/media/cma/backend/alsa/audio_filter_factory.h"
 #include "chromecast/media/cma/backend/alsa/stream_mixer_alsa.h"
+#include "chromecast/public/volume_control.h"
+
+namespace media {
+class AudioBus;
+}  // namespace media
 
 namespace chromecast {
 namespace media {
-class AudioBus;
 
 // FilterGroup contains state for an AudioFilter.
 // It takes multiple StreamMixerAlsa::InputQueues,
@@ -33,9 +37,14 @@
   // entry in |input_types| to be processed by this group.
   // |filter_type| is passed to AudioFilterFactory to create an AudioFilter.
   FilterGroup(const std::unordered_set<std::string>& input_types,
-              AudioFilterFactory::FilterType filter_type);
+              AudioFilterFactory::FilterType filter_type,
+              AudioContentType content_type);
   ~FilterGroup();
 
+  AudioContentType content_type() const { return content_type_; }
+
+  void set_volume(float volume) { volume_ = volume; }
+
   // Sets the sample rate and format in the AudioFilter.
   void Initialize(int output_samples_per_second, ::media::SampleFormat format);
 
@@ -64,11 +73,14 @@
   int BytesPerOutputFormatSample();
 
   const std::unordered_set<std::string> input_types_;
+  const AudioContentType content_type_;
   std::vector<StreamMixerAlsa::InputQueue*> active_inputs_;
 
   int output_samples_per_second_;
   ::media::SampleFormat sample_format_;
 
+  float volume_ = 0.0f;
+
   // Buffers that hold audio data while it is mixed.
   // These are kept as members of this class to minimize copies and
   // allocations.
diff --git a/chromecast/media/cma/backend/alsa/media_pipeline_backend_alsa.cc b/chromecast/media/cma/backend/alsa/media_pipeline_backend_alsa.cc
index ed95959..118d6db99 100644
--- a/chromecast/media/cma/backend/alsa/media_pipeline_backend_alsa.cc
+++ b/chromecast/media/cma/backend/alsa/media_pipeline_backend_alsa.cc
@@ -102,6 +102,10 @@
   return params_.device_id;
 }
 
+AudioContentType MediaPipelineBackendAlsa::ContentType() const {
+  return params_.content_type;
+}
+
 const scoped_refptr<base::SingleThreadTaskRunner>&
 MediaPipelineBackendAlsa::GetTaskRunner() const {
   return static_cast<TaskRunnerImpl*>(params_.task_runner)->runner();
diff --git a/chromecast/media/cma/backend/alsa/media_pipeline_backend_alsa.h b/chromecast/media/cma/backend/alsa/media_pipeline_backend_alsa.h
index 2ef0daf..6cdde74 100644
--- a/chromecast/media/cma/backend/alsa/media_pipeline_backend_alsa.h
+++ b/chromecast/media/cma/backend/alsa/media_pipeline_backend_alsa.h
@@ -13,6 +13,7 @@
 #include "base/time/time.h"
 #include "chromecast/public/media/media_pipeline_backend.h"
 #include "chromecast/public/media/media_pipeline_device_params.h"
+#include "chromecast/public/volume_control.h"
 
 namespace base {
 class SingleThreadTaskRunner;
@@ -43,6 +44,7 @@
 
   bool Primary() const;
   std::string DeviceId() const;
+  AudioContentType ContentType() const;
   const scoped_refptr<base::SingleThreadTaskRunner>& GetTaskRunner() const;
 
  private:
diff --git a/chromecast/media/cma/backend/alsa/slew_volume.cc b/chromecast/media/cma/backend/alsa/slew_volume.cc
index baaeda09..edff6e7 100644
--- a/chromecast/media/cma/backend/alsa/slew_volume.cc
+++ b/chromecast/media/cma/backend/alsa/slew_volume.cc
@@ -38,6 +38,9 @@
 // Slew rate should be volume_to_slew / slew_time / sample_rate
 void SlewVolume::SetVolume(double volume_scale) {
   volume_scale_ = volume_scale;
+  if (interrupted_) {
+    current_volume_ = volume_scale_;
+  }
   if (volume_scale_ > current_volume_) {
     max_slew_up_ = (volume_scale_ - current_volume_) * 1000.0 /
                    (max_slew_time_up_ms_ * sample_rate_);
@@ -47,6 +50,11 @@
   }
 }
 
+void SlewVolume::Interrupted() {
+  interrupted_ = true;
+  current_volume_ = volume_scale_;
+}
+
 void SlewVolume::ProcessFMAC(bool repeat_transition,
                              const float* src,
                              int frames,
@@ -63,6 +71,7 @@
     return;
   }
 
+  interrupted_ = false;
   if (repeat_transition) {
     current_volume_ = last_starting_volume_;
   } else {
@@ -112,6 +121,7 @@
     return true;
   }
 
+  interrupted_ = false;
   if (current_volume_ == volume_scale_) {
     if (current_volume_ == 1.0) {
       return true;
diff --git a/chromecast/media/cma/backend/alsa/slew_volume.h b/chromecast/media/cma/backend/alsa/slew_volume.h
index 44c042d..6308f50 100644
--- a/chromecast/media/cma/backend/alsa/slew_volume.h
+++ b/chromecast/media/cma/backend/alsa/slew_volume.h
@@ -23,6 +23,10 @@
   void SetSampleRate(int sample_rate);
   void SetVolume(double volume_scale);
 
+  // Called to indicate that the stream was interrupted; volume changes can be
+  // applied immediately.
+  void Interrupted();
+
   // Assumes 1 channel float data that is 16-byte aligned. Smoothly calculates
   // dest[i] += src[i] * volume_scaling
   // ProcessFMAC will be called once for each channel of audio present and
@@ -44,6 +48,7 @@
   int max_slew_time_down_ms_;
   double max_slew_up_;
   double max_slew_down_;
+  bool interrupted_ = true;
 
   DISALLOW_COPY_AND_ASSIGN(SlewVolume);
 };
diff --git a/chromecast/media/cma/backend/alsa/stream_mixer_alsa.cc b/chromecast/media/cma/backend/alsa/stream_mixer_alsa.cc
index 0430d33..e38074ea 100644
--- a/chromecast/media/cma/backend/alsa/stream_mixer_alsa.cc
+++ b/chromecast/media/cma/backend/alsa/stream_mixer_alsa.cc
@@ -17,7 +17,6 @@
 #include "base/memory/weak_ptr.h"
 #include "base/numerics/saturated_arithmetic.h"
 #include "base/single_thread_task_runner.h"
-#include "base/strings/string_number_conversions.h"
 #include "base/threading/platform_thread.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "chromecast/base/chromecast_switches.h"
@@ -126,50 +125,6 @@
          time.tv_nsec / 1000;
 }
 
-bool GetSwitchValueAsInt(const std::string& switch_name,
-                         int default_value,
-                         int* value) {
-  DCHECK(value);
-  *value = default_value;
-  if (!base::CommandLine::InitializedForCurrentProcess()) {
-    LOG(WARNING) << "No CommandLine for current process.";
-    return false;
-  }
-  const base::CommandLine* command_line =
-      base::CommandLine::ForCurrentProcess();
-  if (!command_line->HasSwitch(switch_name)) {
-    return false;
-  }
-
-  int arg_value;
-  if (!base::StringToInt(command_line->GetSwitchValueASCII(switch_name),
-                         &arg_value)) {
-    LOG(DFATAL) << "--" << switch_name << " only accepts integers as arguments";
-    return false;
-  }
-  *value = arg_value;
-  return true;
-}
-
-bool GetSwitchValueAsNonNegativeInt(const std::string& switch_name,
-                                    int default_value,
-                                    int* value) {
-  DCHECK_GE(default_value, 0) << "--" << switch_name
-                              << " must have a non-negative default value";
-  DCHECK(value);
-
-  if (!GetSwitchValueAsInt(switch_name, default_value, value)) {
-    return false;
-  }
-
-  if (*value < 0) {
-    LOG(DFATAL) << "--" << switch_name << " must have a non-negative value";
-    *value = default_value;
-    return false;
-  }
-  return true;
-}
-
 void VectorAccumulate(const int32_t* source, size_t size, int32_t* dest) {
   for (size_t i = 0; i < size; ++i) {
     dest[i] = base::SaturatedAddition(source[i], dest[i]);
@@ -190,6 +145,10 @@
 
 }  // namespace
 
+float StreamMixerAlsa::VolumeInfo::GetEffectiveVolume() {
+  return std::min(volume, limit);
+}
+
 // static
 bool StreamMixerAlsa::single_threaded_for_test_ = false;
 
@@ -214,7 +173,6 @@
       pcm_status_(nullptr),
       pcm_format_(SND_PCM_FORMAT_UNKNOWN),
       alsa_buffer_size_(0),
-      alsa_period_explicitly_set(false),
       alsa_period_size_(0),
       alsa_start_threshold_(0),
       alsa_avail_min_(0),
@@ -240,9 +198,8 @@
             switches::kAlsaOutputDevice);
   }
 
-  int fixed_samples_per_second;
-  GetSwitchValueAsNonNegativeInt(switches::kAlsaFixedOutputSampleRate,
-                                 kInvalidSampleRate, &fixed_samples_per_second);
+  int fixed_samples_per_second = GetSwitchValueNonNegativeInt(
+      switches::kAlsaFixedOutputSampleRate, kInvalidSampleRate);
   if (fixed_samples_per_second != kInvalidSampleRate) {
     LOG(INFO) << "Setting fixed sample rate to " << fixed_samples_per_second;
   }
@@ -259,18 +216,19 @@
   filter_groups_.push_back(base::MakeUnique<FilterGroup>(
       std::unordered_set<std::string>(
           {::media::AudioDeviceDescription::kCommunicationsDeviceId}),
-      AudioFilterFactory::COMMUNICATION_AUDIO_FILTER));
+      AudioFilterFactory::COMMUNICATION_AUDIO_FILTER,
+      AudioContentType::kMedia));
   filter_groups_.push_back(base::MakeUnique<FilterGroup>(
       std::unordered_set<std::string>({kAlarmAudioDeviceId}),
-      AudioFilterFactory::ALARM_AUDIO_FILTER));
+      AudioFilterFactory::ALARM_AUDIO_FILTER, AudioContentType::kAlarm));
   filter_groups_.push_back(base::MakeUnique<FilterGroup>(
       std::unordered_set<std::string>({kTtsAudioDeviceId}),
-      AudioFilterFactory::TTS_AUDIO_FILTER));
+      AudioFilterFactory::TTS_AUDIO_FILTER, AudioContentType::kCommunication));
   filter_groups_.push_back(base::MakeUnique<FilterGroup>(
       std::unordered_set<std::string>(
           {::media::AudioDeviceDescription::kDefaultDeviceId,
            kLocalAudioDeviceId, ""}),
-      AudioFilterFactory::MEDIA_AUDIO_FILTER));
+      AudioFilterFactory::MEDIA_AUDIO_FILTER, AudioContentType::kMedia));
 
   DefineAlsaParameters();
 }
@@ -281,52 +239,42 @@
 
 void StreamMixerAlsa::DefineAlsaParameters() {
   // Get the ALSA output configuration from the command line.
-  int buffer_size;
-  GetSwitchValueAsNonNegativeInt(switches::kAlsaOutputBufferSize,
-                                 kDefaultOutputBufferSizeFrames, &buffer_size);
-  alsa_buffer_size_ = buffer_size;
+  alsa_buffer_size_ = GetSwitchValueNonNegativeInt(
+      switches::kAlsaOutputBufferSize, kDefaultOutputBufferSizeFrames);
 
-  int period_size;
-  if (GetSwitchValueAsNonNegativeInt(switches::kAlsaOutputPeriodSize,
-                                     alsa_buffer_size_ / 16, &period_size)) {
-    if (period_size >= buffer_size) {
-      LOG(DFATAL) << "ALSA period size must be smaller than the buffer size";
-      period_size = buffer_size / 2;
-    } else {
-      alsa_period_explicitly_set = true;
-    }
+  alsa_period_size_ = GetSwitchValueNonNegativeInt(
+      switches::kAlsaOutputPeriodSize, alsa_buffer_size_ / 16);
+  if (alsa_period_size_ >= alsa_buffer_size_) {
+    LOG(DFATAL) << "ALSA period size must be smaller than the buffer size";
+    alsa_period_size_ = alsa_buffer_size_ / 2;
   }
-  alsa_period_size_ = period_size;
 
-  int start_threshold;
-  GetSwitchValueAsNonNegativeInt(switches::kAlsaOutputStartThreshold,
-                                 (buffer_size / period_size) * period_size,
-                                 &start_threshold);
-  if (start_threshold > buffer_size) {
+  alsa_start_threshold_ = GetSwitchValueNonNegativeInt(
+      switches::kAlsaOutputStartThreshold,
+      (alsa_buffer_size_ / alsa_period_size_) * alsa_period_size_);
+  if (alsa_start_threshold_ > alsa_buffer_size_) {
     LOG(DFATAL) << "ALSA start threshold must be no larger than "
                 << "the buffer size";
-    start_threshold = (buffer_size / period_size) * period_size;
+    alsa_start_threshold_ =
+        (alsa_buffer_size_ / alsa_period_size_) * alsa_period_size_;
   }
-  alsa_start_threshold_ = start_threshold;
 
   // By default, allow the transfer when at least period_size samples can be
   // processed.
-  int avail_min;
-  GetSwitchValueAsNonNegativeInt(switches::kAlsaOutputAvailMin, period_size,
-                                 &avail_min);
-  if (avail_min > buffer_size) {
+  alsa_avail_min_ = GetSwitchValueNonNegativeInt(switches::kAlsaOutputAvailMin,
+                                                 alsa_period_size_);
+  if (alsa_avail_min_ > alsa_buffer_size_) {
     LOG(DFATAL) << "ALSA avail min must be no larger than the buffer size";
-    avail_min = alsa_period_size_;
+    alsa_avail_min_ = alsa_period_size_;
   }
-  alsa_avail_min_ = avail_min;
 
   // --accept-resource-provider should imply a check close timeout of 0.
   int default_close_timeout = chromecast::GetSwitchValueBoolean(
                                   switches::kAcceptResourceProvider, false)
                                   ? 0
                                   : kDefaultCheckCloseTimeoutMs;
-  GetSwitchValueAsInt(switches::kAlsaCheckCloseTimeout, default_close_timeout,
-                      &check_close_timeout_);
+  check_close_timeout_ = GetSwitchValueInt(switches::kAlsaCheckCloseTimeout,
+                                           default_close_timeout);
 }
 
 unsigned int StreamMixerAlsa::DetermineOutputRate(unsigned int requested_rate) {
@@ -442,11 +390,7 @@
                  << " frames). This may lead to an increase in "
                     "either audio latency or audio underruns.";
 
-    // Always try to use the value for period_size that was passed in on the
-    // command line, if any.
-    if (!alsa_period_explicitly_set) {
-      alsa_period_size_ = alsa_buffer_size_ / 16;
-    } else if (alsa_period_size_ >= alsa_buffer_size_) {
+    if (alsa_period_size_ >= alsa_buffer_size_) {
       snd_pcm_uframes_t new_period_size = alsa_buffer_size_ / 2;
       LOG(DFATAL) << "Configured period size (" << alsa_period_size_
                   << ") is >= actual buffer size (" << alsa_buffer_size_
@@ -660,6 +604,14 @@
     CheckChangeOutputRate(input->input_samples_per_second());
   }
 
+  auto type = input->content_type();
+  if (input->primary()) {
+    input->SetContentTypeVolume(volume_info_[type].GetEffectiveVolume());
+  } else {
+    input->SetContentTypeVolume(volume_info_[type].volume);
+  }
+  input->SetMuted(volume_info_[type].muted);
+
   check_close_timer_->Stop();
   switch (state_) {
     case kStateUninitialized:
@@ -967,5 +919,57 @@
   observer->OnRemoved();
 }
 
+void StreamMixerAlsa::SetVolume(AudioContentType type, float level) {
+  RUN_ON_MIXER_THREAD(&StreamMixerAlsa::SetVolume, type, level);
+  volume_info_[type].volume = level;
+  float effective_volume = volume_info_[type].GetEffectiveVolume();
+  for (auto&& input : inputs_) {
+    if (input->content_type() == type) {
+      if (input->primary()) {
+        input->SetContentTypeVolume(effective_volume);
+      } else {
+        // Volume limits don't apply to effects streams.
+        input->SetContentTypeVolume(level);
+      }
+    }
+  }
+
+  for (auto&& filter : filter_groups_) {
+    if (filter->content_type() == type) {
+      filter->set_volume(effective_volume);
+    }
+  }
+}
+
+void StreamMixerAlsa::SetMuted(AudioContentType type, bool muted) {
+  RUN_ON_MIXER_THREAD(&StreamMixerAlsa::SetMuted, type, muted);
+  volume_info_[type].muted = muted;
+  for (auto&& input : inputs_) {
+    if (input->content_type() == type) {
+      input->SetMuted(muted);
+    }
+  }
+}
+
+void StreamMixerAlsa::SetOutputLimit(AudioContentType type, float limit) {
+  RUN_ON_MIXER_THREAD(&StreamMixerAlsa::SetOutputLimit, type, limit);
+  LOG(INFO) << "Set volume limit for " << static_cast<int>(type) << " to "
+            << limit;
+  volume_info_[type].limit = limit;
+  float effective_volume = volume_info_[type].GetEffectiveVolume();
+  for (auto&& input : inputs_) {
+    // Volume limits don't apply to effects streams.
+    if (input->primary() && input->content_type() == type) {
+      input->SetContentTypeVolume(effective_volume);
+    }
+  }
+
+  for (auto&& filter : filter_groups_) {
+    if (filter->content_type() == type) {
+      filter->set_volume(effective_volume);
+    }
+  }
+}
+
 }  // namespace media
 }  // namespace chromecast
diff --git a/chromecast/media/cma/backend/alsa/stream_mixer_alsa.h b/chromecast/media/cma/backend/alsa/stream_mixer_alsa.h
index b522f090..879b7d0 100644
--- a/chromecast/media/cma/backend/alsa/stream_mixer_alsa.h
+++ b/chromecast/media/cma/backend/alsa/stream_mixer_alsa.h
@@ -8,6 +8,7 @@
 #include <alsa/asoundlib.h>
 #include <stdint.h>
 
+#include <map>
 #include <memory>
 #include <string>
 #include <vector>
@@ -20,6 +21,7 @@
 #include "chromecast/media/cma/backend/alsa/media_pipeline_backend_alsa.h"
 #include "chromecast/media/cma/backend/alsa/stream_mixer_alsa_input.h"
 #include "chromecast/public/cast_media_shlib.h"
+#include "chromecast/public/volume_control.h"
 
 namespace media {
 class AudioBus;
@@ -73,6 +75,9 @@
     // or media/audio/audio_device_description.h
     virtual std::string device_id() const = 0;
 
+    // Returns the content type for volume control.
+    virtual AudioContentType content_type() const = 0;
+
     // Returns true if PrepareToDelete() has been called.
     virtual bool IsDeleting() const = 0;
 
@@ -129,6 +134,14 @@
     // Once the input is ready to be removed, it should call the supplied
     // |delete_cb|; this should only happen once per input.
     virtual void PrepareToDelete(const OnReadyToDeleteCb& delete_cb) = 0;
+
+    // Sets the multiplier based on this stream's content type. The resulting
+    // output volume should be the content type volume * the per-stream volume
+    // multiplier.
+    virtual void SetContentTypeVolume(float volume) = 0;
+
+    // Sets whether or not this stream should be muted.
+    virtual void SetMuted(bool muted) = 0;
   };
 
   enum State {
@@ -169,11 +182,29 @@
   void RemoveLoopbackAudioObserver(
       CastMediaShlib::LoopbackAudioObserver* observer);
 
+  // Sets the volume multiplier for the given content |type|.
+  void SetVolume(AudioContentType type, float level);
+
+  // Sets the mute state for the given content |type|.
+  void SetMuted(AudioContentType type, bool muted);
+
+  // Sets the volume multiplier limit for the given content |type|.
+  void SetOutputLimit(AudioContentType type, float limit);
+
  protected:
   StreamMixerAlsa();
   virtual ~StreamMixerAlsa();
 
  private:
+  // Contains volume control information for an audio content type.
+  struct VolumeInfo {
+    float GetEffectiveVolume();
+
+    float volume = 0.0f;
+    float limit = 1.0f;
+    bool muted = false;
+  };
+
   void ResetTaskRunnerForTest();
   void FinalizeOnMixerThread();
   void FinishFinalize();
@@ -232,7 +263,6 @@
   // only has to interact with the command line parameters once.
   std::string alsa_device_name_;
   snd_pcm_uframes_t alsa_buffer_size_;
-  bool alsa_period_explicitly_set;
   snd_pcm_uframes_t alsa_period_size_;
   snd_pcm_uframes_t alsa_start_threshold_;
   snd_pcm_uframes_t alsa_avail_min_;
@@ -251,6 +281,8 @@
   std::vector<std::unique_ptr<FilterGroup>> filter_groups_;
   std::vector<CastMediaShlib::LoopbackAudioObserver*> loopback_observers_;
 
+  std::map<AudioContentType, VolumeInfo> volume_info_;
+
   DISALLOW_COPY_AND_ASSIGN(StreamMixerAlsa);
 };
 
diff --git a/chromecast/media/cma/backend/alsa/stream_mixer_alsa_input.cc b/chromecast/media/cma/backend/alsa/stream_mixer_alsa_input.cc
index 52883ac21..5a79b17 100644
--- a/chromecast/media/cma/backend/alsa/stream_mixer_alsa_input.cc
+++ b/chromecast/media/cma/backend/alsa/stream_mixer_alsa_input.cc
@@ -15,10 +15,11 @@
 StreamMixerAlsaInput::StreamMixerAlsaInput(Delegate* delegate,
                                            int samples_per_second,
                                            bool primary,
-                                           const std::string& device_id) {
-  std::unique_ptr<StreamMixerAlsaInputImpl> impl(
-      new StreamMixerAlsaInputImpl(delegate, samples_per_second, primary,
-                                   device_id, StreamMixerAlsa::Get()));
+                                           const std::string& device_id,
+                                           AudioContentType content_type) {
+  std::unique_ptr<StreamMixerAlsaInputImpl> impl(new StreamMixerAlsaInputImpl(
+      delegate, samples_per_second, primary, device_id, content_type,
+      StreamMixerAlsa::Get()));
   impl_ = impl.get();  // Store a pointer to the impl, but the mixer owns it.
   StreamMixerAlsa::Get()->AddInput(std::move(impl));
 }
diff --git a/chromecast/media/cma/backend/alsa/stream_mixer_alsa_input.h b/chromecast/media/cma/backend/alsa/stream_mixer_alsa_input.h
index 7304108..2d77008c5 100644
--- a/chromecast/media/cma/backend/alsa/stream_mixer_alsa_input.h
+++ b/chromecast/media/cma/backend/alsa/stream_mixer_alsa_input.h
@@ -12,6 +12,7 @@
 #include "base/threading/thread_checker.h"
 #include "chromecast/media/cma/backend/alsa/media_pipeline_backend_alsa.h"
 #include "chromecast/public/media/media_pipeline_device_params.h"
+#include "chromecast/public/volume_control.h"
 
 namespace chromecast {
 namespace media {
@@ -52,7 +53,8 @@
   StreamMixerAlsaInput(Delegate* delegate,
                        int samples_per_second,
                        bool primary,
-                       const std::string& device_id);
+                       const std::string& device_id,
+                       AudioContentType content_type);
   // Removes this input from the mixer, destroying the mixer if there are no
   // remaining inputs.
   ~StreamMixerAlsaInput();
diff --git a/chromecast/media/cma/backend/alsa/stream_mixer_alsa_input_impl.cc b/chromecast/media/cma/backend/alsa/stream_mixer_alsa_input_impl.cc
index db8c3d5e..589bc89 100644
--- a/chromecast/media/cma/backend/alsa/stream_mixer_alsa_input_impl.cc
+++ b/chromecast/media/cma/backend/alsa/stream_mixer_alsa_input_impl.cc
@@ -59,6 +59,17 @@
 const int kMaxSlewTimeUpMs = 15;
 const int kMaxSlewTimeDownMs = 15;
 
+std::string AudioContentTypeToString(media::AudioContentType type) {
+  switch (type) {
+    case media::AudioContentType::kAlarm:
+      return "alarm";
+    case media::AudioContentType::kCommunication:
+      return "communication";
+    default:
+      return "media";
+  }
+}
+
 }  // namespace
 
 StreamMixerAlsaInputImpl::StreamMixerAlsaInputImpl(
@@ -66,17 +77,22 @@
     int input_samples_per_second,
     bool primary,
     const std::string& device_id,
+    AudioContentType content_type,
     StreamMixerAlsa* mixer)
     : delegate_(delegate),
       input_samples_per_second_(input_samples_per_second),
       primary_(primary),
       device_id_(device_id),
+      content_type_(content_type),
       mixer_(mixer),
       filter_group_(nullptr),
       mixer_task_runner_(mixer_->task_runner()),
       caller_task_runner_(base::ThreadTaskRunnerHandle::Get()),
       resample_ratio_(1.0),
       state_(kStateUninitialized),
+      stream_volume_multiplier_(1.0f),
+      type_volume_multiplier_(1.0f),
+      mute_volume_multiplier_(1.0f),
       slew_volume_(kMaxSlewTimeUpMs, kMaxSlewTimeDownMs),
       queued_frames_(0),
       queued_frames_including_resampler_(0),
@@ -88,7 +104,8 @@
       zeroed_frames_(0),
       is_underflowing_(false),
       weak_factory_(this) {
-  LOG(INFO) << "Create " << device_id_ << " (" << this << ")";
+  LOG(INFO) << "Create " << device_id_ << " (" << this
+            << "), content type = " << AudioContentTypeToString(content_type_);
   DCHECK(delegate_);
   DCHECK(mixer_);
   weak_this_ = weak_factory_.GetWeakPtr();
@@ -111,6 +128,10 @@
   return device_id_;
 }
 
+AudioContentType StreamMixerAlsaInputImpl::content_type() const {
+  return content_type_;
+}
+
 bool StreamMixerAlsaInputImpl::IsDeleting() const {
   DCHECK(mixer_task_runner_->BelongsToCurrentThread());
   return (state_ == kStateFinalFade || state_ == kStateDeleted);
@@ -265,6 +286,7 @@
     // Fade in once this input starts providing data again.
     fade_frames_remaining_ = NormalFadeFrames();
   }
+  slew_volume_.Interrupted();
 }
 
 void StreamMixerAlsaInputImpl::AfterWriteFrames(
@@ -528,13 +550,36 @@
 
 void StreamMixerAlsaInputImpl::SetVolumeMultiplier(float multiplier) {
   RUN_ON_MIXER_THREAD(SetVolumeMultiplier, multiplier);
-  LOG(INFO) << device_id_ << "(" << this << "): stream volume = " << multiplier;
   DCHECK(!IsDeleting());
-  if (multiplier > 1.0f)
-    multiplier = 1.0f;
-  if (multiplier < 0.0f)
-    multiplier = 0.0f;
-  slew_volume_.SetVolume(multiplier);
+  stream_volume_multiplier_ = std::max(0.0f, std::min(multiplier, 1.0f));
+  float effective_volume = stream_volume_multiplier_ * type_volume_multiplier_ *
+                           mute_volume_multiplier_;
+  LOG(INFO) << device_id_ << "(" << this
+            << "): stream volume = " << stream_volume_multiplier_
+            << ", effective multiplier = " << effective_volume;
+  slew_volume_.SetVolume(effective_volume);
+}
+
+void StreamMixerAlsaInputImpl::SetContentTypeVolume(float volume) {
+  DCHECK(mixer_task_runner_->BelongsToCurrentThread());
+  type_volume_multiplier_ = std::max(0.0f, std::min(volume, 1.0f));
+  float effective_volume = stream_volume_multiplier_ * type_volume_multiplier_ *
+                           mute_volume_multiplier_;
+  LOG(INFO) << device_id_ << "(" << this
+            << "): type volume = " << type_volume_multiplier_
+            << ", effective multiplier = " << effective_volume;
+  slew_volume_.SetVolume(effective_volume);
+}
+
+void StreamMixerAlsaInputImpl::SetMuted(bool muted) {
+  DCHECK(mixer_task_runner_->BelongsToCurrentThread());
+  mute_volume_multiplier_ = muted ? 0.0f : 1.0f;
+  float effective_volume = stream_volume_multiplier_ * type_volume_multiplier_ *
+                           mute_volume_multiplier_;
+  LOG(INFO) << device_id_ << "(" << this
+            << "): mute volume = " << mute_volume_multiplier_
+            << ", effective multiplier = " << effective_volume;
+  slew_volume_.SetVolume(effective_volume);
 }
 
 void StreamMixerAlsaInputImpl::VolumeScaleAccumulate(bool repeat_transition,
diff --git a/chromecast/media/cma/backend/alsa/stream_mixer_alsa_input_impl.h b/chromecast/media/cma/backend/alsa/stream_mixer_alsa_input_impl.h
index 2ff54a85..73186b0 100644
--- a/chromecast/media/cma/backend/alsa/stream_mixer_alsa_input_impl.h
+++ b/chromecast/media/cma/backend/alsa/stream_mixer_alsa_input_impl.h
@@ -18,6 +18,7 @@
 #include "chromecast/media/cma/backend/alsa/slew_volume.h"
 #include "chromecast/media/cma/backend/alsa/stream_mixer_alsa.h"
 #include "chromecast/media/cma/backend/alsa/stream_mixer_alsa_input.h"
+#include "chromecast/public/volume_control.h"
 
 namespace base {
 class SingleThreadTaskRunner;
@@ -94,6 +95,7 @@
                            int input_samples_per_second,
                            bool primary,
                            const std::string& device_id,
+                           AudioContentType content_type,
                            StreamMixerAlsa* mixer);
 
   ~StreamMixerAlsaInputImpl() override;
@@ -120,6 +122,7 @@
   int input_samples_per_second() const override;
   bool primary() const override;
   std::string device_id() const override;
+  AudioContentType content_type() const override;
   bool IsDeleting() const override;
   void Initialize(const MediaPipelineBackendAlsa::RenderingDelay&
                       mixer_rendering_delay) override;
@@ -136,6 +139,8 @@
                             mixer_rendering_delay) override;
   void SignalError(StreamMixerAlsaInput::MixerError error) override;
   void PrepareToDelete(const OnReadyToDeleteCb& delete_cb) override;
+  void SetContentTypeVolume(float volume) override;
+  void SetMuted(bool muted) override;
 
   // Tells the mixer to delete |this|. Makes sure not to call |delete_cb_| more
   // than once for |this|.
@@ -154,7 +159,8 @@
   StreamMixerAlsaInput::Delegate* const delegate_;
   const int input_samples_per_second_;
   const bool primary_;
-  std::string device_id_;
+  const std::string device_id_;
+  const AudioContentType content_type_;
   StreamMixerAlsa* const mixer_;
   FilterGroup* filter_group_;
   const scoped_refptr<base::SingleThreadTaskRunner> mixer_task_runner_;
@@ -163,6 +169,10 @@
   double resample_ratio_;
 
   State state_;
+
+  float stream_volume_multiplier_;
+  float type_volume_multiplier_;
+  float mute_volume_multiplier_;
   SlewVolume slew_volume_;
 
   base::Lock queue_lock_;  // Lock for the following queue-related members.
diff --git a/chromecast/media/cma/backend/alsa/stream_mixer_alsa_unittest.cc b/chromecast/media/cma/backend/alsa/stream_mixer_alsa_unittest.cc
index db5e342..6574d67 100644
--- a/chromecast/media/cma/backend/alsa/stream_mixer_alsa_unittest.cc
+++ b/chromecast/media/cma/backend/alsa/stream_mixer_alsa_unittest.cc
@@ -157,6 +157,9 @@
                void(const MediaPipelineBackendAlsa::RenderingDelay&
                         mixer_rendering_delay));
   std::string device_id() const override { return device_id_; }
+  AudioContentType content_type() const override {
+    return AudioContentType::kMedia;
+  }
   void set_filter_group(FilterGroup* group) override { filter_group_ = group; }
   FilterGroup* filter_group() override { return filter_group_; }
   int MaxReadSize() override { return max_read_size_; }
@@ -171,6 +174,9 @@
   MOCK_METHOD1(SignalError, void(StreamMixerAlsaInput::MixerError error));
   MOCK_METHOD1(PrepareToDelete, void(const OnReadyToDeleteCb& delete_cb));
 
+  void SetContentTypeVolume(float volume) override {}
+  void SetMuted(bool muted) override {}
+
   // Setters and getters for test control.
   void SetPaused(bool paused) { paused_ = paused; }
   void SetMaxReadSize(int max_read_size) { max_read_size_ = max_read_size; }
diff --git a/chromecast/media/cma/backend/alsa/volume_control.cc b/chromecast/media/cma/backend/alsa/volume_control.cc
new file mode 100644
index 0000000..090e13c
--- /dev/null
+++ b/chromecast/media/cma/backend/alsa/volume_control.cc
@@ -0,0 +1,294 @@
+// 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 "chromecast/public/volume_control.h"
+
+#include <algorithm>
+#include <cmath>
+#include <map>
+#include <memory>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/files/file_path.h"
+#include "base/files/file_util.h"
+#include "base/lazy_instance.h"
+#include "base/location.h"
+#include "base/logging.h"
+#include "base/macros.h"
+#include "base/memory/ptr_util.h"
+#include "base/synchronization/lock.h"
+#include "base/threading/thread.h"
+#include "base/values.h"
+#include "chromecast/base/init_command_line_shlib.h"
+#include "chromecast/base/serializers.h"
+#include "chromecast/media/cma/backend/alsa/stream_mixer_alsa.h"
+
+namespace chromecast {
+namespace media {
+
+namespace {
+
+const float kDefaultMediaDbFS = -25.0f;
+const float kDefaultAlarmDbFS = -20.0f;
+const float kDefaultCommunicationDbFS = -25.0f;
+
+const float kMinDbFS = -120.0f;
+
+const char kKeyMediaDbFS[] = "dbfs.media";
+const char kKeyAlarmDbFS[] = "dbfs.alarm";
+const char kKeyCommunicationDbFS[] = "dbfs.communication";
+
+struct LevelToDb {
+  float level;
+  float db;
+};
+
+const LevelToDb kVolumeMap[] = {{0.0f, kMinDbFS},
+                                {0.01f, -58.0f},
+                                {0.090909f, -48.0f},
+                                {0.818182f, -8.0f},
+                                {1.0f, 0.0f}};
+
+float DbFsToScale(float db) {
+  if (db <= kMinDbFS) {
+    return 0.0f;
+  }
+  return std::pow(10, db / 20);
+}
+
+std::string ContentTypeToDbFSKey(AudioContentType type) {
+  switch (type) {
+    case AudioContentType::kAlarm:
+      return kKeyAlarmDbFS;
+    case AudioContentType::kCommunication:
+      return kKeyCommunicationDbFS;
+    default:
+      return kKeyMediaDbFS;
+  }
+}
+
+class VolumeControlInternal {
+ public:
+  VolumeControlInternal() : thread_("VolumeControl") {
+    stored_values_.SetDouble(kKeyMediaDbFS, kDefaultMediaDbFS);
+    stored_values_.SetDouble(kKeyAlarmDbFS, kDefaultAlarmDbFS);
+    stored_values_.SetDouble(kKeyCommunicationDbFS, kDefaultCommunicationDbFS);
+
+    auto types = {AudioContentType::kMedia, AudioContentType::kAlarm,
+                  AudioContentType::kCommunication};
+    double volume;
+
+    storage_path_ = base::GetHomeDir().Append("saved_volumes");
+    auto old_stored_data = DeserializeJsonFromFile(storage_path_);
+    base::DictionaryValue* old_stored_dict;
+    if (old_stored_data && old_stored_data->GetAsDictionary(&old_stored_dict)) {
+      for (auto type : types) {
+        if (old_stored_dict->GetDouble(ContentTypeToDbFSKey(type), &volume)) {
+          stored_values_.SetDouble(ContentTypeToDbFSKey(type), volume);
+        }
+      }
+    }
+
+    for (auto type : types) {
+      CHECK(stored_values_.GetDouble(ContentTypeToDbFSKey(type), &volume));
+      volumes_[type] = VolumeControl::DbFSToVolume(volume);
+      StreamMixerAlsa::Get()->SetVolume(type, DbFsToScale(volume));
+
+      // Note that mute state is not persisted across reboots.
+      muted_[type] = false;
+    }
+
+    thread_.Start();
+  }
+
+  void AddVolumeObserver(VolumeObserver* observer) {
+    base::AutoLock lock(observer_lock_);
+    volume_observers_.push_back(observer);
+  }
+
+  void RemoveVolumeObserver(VolumeObserver* observer) {
+    base::AutoLock lock(observer_lock_);
+    volume_observers_.erase(std::remove(volume_observers_.begin(),
+                                        volume_observers_.end(), observer),
+                            volume_observers_.end());
+  }
+
+  float GetVolume(AudioContentType type) {
+    base::AutoLock lock(volume_lock_);
+    return volumes_[type];
+  }
+
+  void SetVolume(AudioContentType type, float level) {
+    level = std::max(0.0f, std::min(level, 1.0f));
+    thread_.task_runner()->PostTask(
+        FROM_HERE, base::Bind(&VolumeControlInternal::SetVolumeOnThread,
+                              base::Unretained(this), type, level));
+  }
+
+  bool IsMuted(AudioContentType type) {
+    base::AutoLock lock(volume_lock_);
+    return muted_[type];
+  }
+
+  void SetMuted(AudioContentType type, bool muted) {
+    thread_.task_runner()->PostTask(
+        FROM_HERE, base::Bind(&VolumeControlInternal::SetMutedOnThread,
+                              base::Unretained(this), type, muted));
+  }
+
+  void SetOutputLimit(AudioContentType type, float limit) {
+    limit = std::max(0.0f, std::min(limit, 1.0f));
+    StreamMixerAlsa::Get()->SetOutputLimit(
+        type, DbFsToScale(VolumeControl::VolumeToDbFS(limit)));
+  }
+
+ private:
+  void SetVolumeOnThread(AudioContentType type, float level) {
+    DCHECK(thread_.task_runner()->BelongsToCurrentThread());
+    {
+      base::AutoLock lock(volume_lock_);
+      if (level == volumes_[type]) {
+        return;
+      }
+      volumes_[type] = level;
+    }
+
+    float dbfs = VolumeControl::VolumeToDbFS(level);
+    StreamMixerAlsa::Get()->SetVolume(type, DbFsToScale(dbfs));
+
+    {
+      base::AutoLock lock(observer_lock_);
+      for (VolumeObserver* observer : volume_observers_) {
+        observer->OnVolumeChange(type, level);
+      }
+    }
+
+    stored_values_.SetDouble(ContentTypeToDbFSKey(type), dbfs);
+    SerializeJsonToFile(storage_path_, stored_values_);
+  }
+
+  void SetMutedOnThread(AudioContentType type, bool muted) {
+    {
+      base::AutoLock lock(volume_lock_);
+      if (muted == muted_[type]) {
+        return;
+      }
+      muted_[type] = muted;
+    }
+
+    StreamMixerAlsa::Get()->SetMuted(type, muted);
+
+    {
+      base::AutoLock lock(observer_lock_);
+      for (VolumeObserver* observer : volume_observers_) {
+        observer->OnMuteChange(type, muted);
+      }
+    }
+  }
+
+  base::FilePath storage_path_;
+  base::DictionaryValue stored_values_;
+
+  base::Lock volume_lock_;
+  std::map<AudioContentType, float> volumes_;
+  std::map<AudioContentType, bool> muted_;
+
+  base::Lock observer_lock_;
+  std::vector<VolumeObserver*> volume_observers_;
+
+  base::Thread thread_;
+
+  DISALLOW_COPY_AND_ASSIGN(VolumeControlInternal);
+};
+
+base::LazyInstance<VolumeControlInternal> g_volume_control =
+    LAZY_INSTANCE_INITIALIZER;
+
+}  // namespace
+
+// static
+void VolumeControl::Initialize(const std::vector<std::string>& argv) {
+  chromecast::InitCommandLineShlib(argv);
+}
+
+// static
+void VolumeControl::Finalize() {
+  // Nothing to do.
+}
+
+// static
+void VolumeControl::AddVolumeObserver(VolumeObserver* observer) {
+  g_volume_control.Get().AddVolumeObserver(observer);
+}
+
+// static
+void VolumeControl::RemoveVolumeObserver(VolumeObserver* observer) {
+  g_volume_control.Get().RemoveVolumeObserver(observer);
+}
+
+// static
+float VolumeControl::GetVolume(AudioContentType type) {
+  return g_volume_control.Get().GetVolume(type);
+}
+
+// static
+void VolumeControl::SetVolume(AudioContentType type, float level) {
+  g_volume_control.Get().SetVolume(type, level);
+}
+
+// static
+bool VolumeControl::IsMuted(AudioContentType type) {
+  return g_volume_control.Get().IsMuted(type);
+}
+
+// static
+void VolumeControl::SetMuted(AudioContentType type, bool muted) {
+  g_volume_control.Get().SetMuted(type, muted);
+}
+
+// static
+void VolumeControl::SetOutputLimit(AudioContentType type, float limit) {
+  g_volume_control.Get().SetOutputLimit(type, limit);
+}
+
+// static
+float VolumeControl::VolumeToDbFS(float volume) {
+  if (volume <= kVolumeMap[0].level) {
+    return kVolumeMap[0].db;
+  }
+  for (size_t i = 1; i < arraysize(kVolumeMap); ++i) {
+    if (volume < kVolumeMap[i].level) {
+      const float x_diff = kVolumeMap[i].level - kVolumeMap[i - 1].level;
+      const float y_diff = kVolumeMap[i].db - kVolumeMap[i - 1].db;
+
+      return kVolumeMap[i - 1].db +
+             (volume - kVolumeMap[i - 1].level) * y_diff / x_diff;
+    }
+  }
+  return kVolumeMap[arraysize(kVolumeMap) - 1].db;
+}
+
+// static
+float VolumeControl::DbFSToVolume(float db) {
+  if (db <= kVolumeMap[0].db) {
+    return kVolumeMap[0].level;
+  }
+  for (size_t i = 1; i < arraysize(kVolumeMap); ++i) {
+    if (db < kVolumeMap[i].db) {
+      const float x_diff = kVolumeMap[i].db - kVolumeMap[i - 1].db;
+      const float y_diff = kVolumeMap[i].level - kVolumeMap[i - 1].level;
+
+      return kVolumeMap[i - 1].level +
+             (db - kVolumeMap[i - 1].db) * y_diff / x_diff;
+    }
+  }
+  return kVolumeMap[arraysize(kVolumeMap) - 1].level;
+}
+
+}  // namespace media
+}  // namespace chromecast
diff --git a/chromeos/components/tether/BUILD.gn b/chromeos/components/tether/BUILD.gn
index b1143db..d0a3c524 100644
--- a/chromeos/components/tether/BUILD.gn
+++ b/chromeos/components/tether/BUILD.gn
@@ -72,6 +72,8 @@
     "fake_ble_connection_manager.h",
     "fake_tether_host_fetcher.cc",
     "fake_tether_host_fetcher.h",
+    "mock_host_scan_device_prioritizer.cc",
+    "mock_host_scan_device_prioritizer.h",
     "mock_local_device_data_provider.cc",
     "mock_local_device_data_provider.h",
   ]
diff --git a/chromeos/components/tether/connect_tethering_operation.cc b/chromeos/components/tether/connect_tethering_operation.cc
index 114c0d42..b7723b7 100644
--- a/chromeos/components/tether/connect_tethering_operation.cc
+++ b/chromeos/components/tether/connect_tethering_operation.cc
@@ -4,6 +4,7 @@
 
 #include "chromeos/components/tether/connect_tethering_operation.h"
 
+#include "chromeos/components/tether/host_scan_device_prioritizer.h"
 #include "chromeos/components/tether/message_wrapper.h"
 #include "chromeos/components/tether/proto/tether.pb.h"
 #include "components/proximity_auth/logging/logging.h"
@@ -20,12 +21,13 @@
 std::unique_ptr<ConnectTetheringOperation>
 ConnectTetheringOperation::Factory::NewInstance(
     const cryptauth::RemoteDevice& device_to_connect,
-    BleConnectionManager* connection_manager) {
+    BleConnectionManager* connection_manager,
+    HostScanDevicePrioritizer* host_scan_device_prioritizer) {
   if (!factory_instance_) {
     factory_instance_ = new Factory();
   }
-  return factory_instance_->BuildInstance(device_to_connect,
-                                          connection_manager);
+  return factory_instance_->BuildInstance(device_to_connect, connection_manager,
+                                          host_scan_device_prioritizer);
 }
 
 // static
@@ -37,17 +39,20 @@
 std::unique_ptr<ConnectTetheringOperation>
 ConnectTetheringOperation::Factory::BuildInstance(
     const cryptauth::RemoteDevice& device_to_connect,
-    BleConnectionManager* connection_manager) {
-  return base::MakeUnique<ConnectTetheringOperation>(device_to_connect,
-                                                     connection_manager);
+    BleConnectionManager* connection_manager,
+    HostScanDevicePrioritizer* host_scan_device_prioritizer) {
+  return base::MakeUnique<ConnectTetheringOperation>(
+      device_to_connect, connection_manager, host_scan_device_prioritizer);
 }
 
 ConnectTetheringOperation::ConnectTetheringOperation(
     const cryptauth::RemoteDevice& device_to_connect,
-    BleConnectionManager* connection_manager)
+    BleConnectionManager* connection_manager,
+    HostScanDevicePrioritizer* host_scan_device_prioritizer)
     : MessageTransferOperation(
           std::vector<cryptauth::RemoteDevice>{device_to_connect},
           connection_manager),
+      host_scan_device_prioritizer_(host_scan_device_prioritizer),
       has_authenticated_(false) {}
 
 ConnectTetheringOperation::~ConnectTetheringOperation() {}
@@ -89,6 +94,10 @@
                    << "response_code == SUCCESS. Config: {ssid: \""
                    << response->ssid() << "\", password: \""
                    << response->password() << "\"}";
+
+      host_scan_device_prioritizer_->RecordSuccessfulConnectTetheringResponse(
+          remote_device);
+
       NotifyObserversOfSuccessfulResponse(response->ssid(),
                                           response->password());
     } else {
diff --git a/chromeos/components/tether/connect_tethering_operation.h b/chromeos/components/tether/connect_tethering_operation.h
index d3e619a..d7135b9 100644
--- a/chromeos/components/tether/connect_tethering_operation.h
+++ b/chromeos/components/tether/connect_tethering_operation.h
@@ -18,6 +18,7 @@
 
 namespace tether {
 
+class HostScanDevicePrioritizer;
 class MessageWrapper;
 
 // Operation used to request that a tether host share its Internet connection.
@@ -31,14 +32,16 @@
    public:
     static std::unique_ptr<ConnectTetheringOperation> NewInstance(
         const cryptauth::RemoteDevice& device_to_connect,
-        BleConnectionManager* connection_manager);
+        BleConnectionManager* connection_manager,
+        HostScanDevicePrioritizer* host_scan_device_prioritizer);
 
     static void SetInstanceForTesting(Factory* factory);
 
    protected:
     virtual std::unique_ptr<ConnectTetheringOperation> BuildInstance(
         const cryptauth::RemoteDevice& devices_to_connect,
-        BleConnectionManager* connection_manager);
+        BleConnectionManager* connection_manager,
+        HostScanDevicePrioritizer* host_scan_device_prioritizer);
 
    private:
     static Factory* factory_instance_;
@@ -53,8 +56,10 @@
         ConnectTetheringResponse_ResponseCode error_code) = 0;
   };
 
-  ConnectTetheringOperation(const cryptauth::RemoteDevice& device_to_connect,
-                            BleConnectionManager* connection_manager);
+  ConnectTetheringOperation(
+      const cryptauth::RemoteDevice& device_to_connect,
+      BleConnectionManager* connection_manager,
+      HostScanDevicePrioritizer* host_scan_device_prioritizer);
   ~ConnectTetheringOperation() override;
 
   void AddObserver(Observer* observer);
@@ -77,8 +82,9 @@
   void NotifyObserversOfConnectionFailure(
       ConnectTetheringResponse_ResponseCode error_code);
 
-  base::ObserverList<Observer> observer_list_;
+  HostScanDevicePrioritizer* host_scan_device_prioritizer_;
   bool has_authenticated_;
+  base::ObserverList<Observer> observer_list_;
 
   DISALLOW_COPY_AND_ASSIGN(ConnectTetheringOperation);
 };
diff --git a/chromeos/components/tether/connect_tethering_operation_unittest.cc b/chromeos/components/tether/connect_tethering_operation_unittest.cc
index 7cc0b451..b75c224 100644
--- a/chromeos/components/tether/connect_tethering_operation_unittest.cc
+++ b/chromeos/components/tether/connect_tethering_operation_unittest.cc
@@ -11,10 +11,15 @@
 #include "chromeos/components/tether/ble_constants.h"
 #include "chromeos/components/tether/fake_ble_connection_manager.h"
 #include "chromeos/components/tether/message_wrapper.h"
+#include "chromeos/components/tether/mock_host_scan_device_prioritizer.h"
 #include "chromeos/components/tether/proto/tether.pb.h"
 #include "components/cryptauth/remote_device_test_util.h"
+#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
+using testing::_;
+using testing::StrictMock;
+
 namespace chromeos {
 
 namespace tether {
@@ -101,10 +106,13 @@
 
   void SetUp() override {
     fake_ble_connection_manager_ = base::MakeUnique<FakeBleConnectionManager>();
+    mock_host_scan_device_prioritizer_ =
+        base::MakeUnique<StrictMock<MockHostScanDevicePrioritizer>>();
     test_observer_ = base::WrapUnique(new TestObserver());
 
     operation_ = base::WrapUnique(new ConnectTetheringOperation(
-        test_device_, fake_ble_connection_manager_.get()));
+        test_device_, fake_ble_connection_manager_.get(),
+        mock_host_scan_device_prioritizer_.get()));
     operation_->AddObserver(test_observer_.get());
     operation_->Initialize();
   }
@@ -156,6 +164,8 @@
   const cryptauth::RemoteDevice test_device_;
 
   std::unique_ptr<FakeBleConnectionManager> fake_ble_connection_manager_;
+  std::unique_ptr<StrictMock<MockHostScanDevicePrioritizer>>
+      mock_host_scan_device_prioritizer_;
   std::unique_ptr<TestObserver> test_observer_;
   std::unique_ptr<ConnectTetheringOperation> operation_;
 
@@ -164,6 +174,10 @@
 };
 
 TEST_F(ConnectTetheringOperationTest, TestOperation_SuccessButInvalidResponse) {
+  EXPECT_CALL(*mock_host_scan_device_prioritizer_,
+              RecordSuccessfulConnectTetheringResponse(_))
+      .Times(0);
+
   SimulateDeviceAuthenticationAndVerifyMessageSent();
   SimulateResponseReceivedAndVerifyObserverCallbackInvoked(
       ConnectTetheringResponse_ResponseCode::
@@ -172,6 +186,9 @@
 }
 
 TEST_F(ConnectTetheringOperationTest, TestOperation_SuccessWithValidResponse) {
+  EXPECT_CALL(*mock_host_scan_device_prioritizer_,
+              RecordSuccessfulConnectTetheringResponse(test_device_));
+
   SimulateDeviceAuthenticationAndVerifyMessageSent();
   SimulateResponseReceivedAndVerifyObserverCallbackInvoked(
       ConnectTetheringResponse_ResponseCode::
@@ -180,6 +197,10 @@
 }
 
 TEST_F(ConnectTetheringOperationTest, TestOperation_UnknownError) {
+  EXPECT_CALL(*mock_host_scan_device_prioritizer_,
+              RecordSuccessfulConnectTetheringResponse(_))
+      .Times(0);
+
   SimulateDeviceAuthenticationAndVerifyMessageSent();
   SimulateResponseReceivedAndVerifyObserverCallbackInvoked(
       ConnectTetheringResponse_ResponseCode::
@@ -188,6 +209,10 @@
 }
 
 TEST_F(ConnectTetheringOperationTest, TestOperation_ProvisioningFailed) {
+  EXPECT_CALL(*mock_host_scan_device_prioritizer_,
+              RecordSuccessfulConnectTetheringResponse(_))
+      .Times(0);
+
   SimulateDeviceAuthenticationAndVerifyMessageSent();
   SimulateResponseReceivedAndVerifyObserverCallbackInvoked(
       ConnectTetheringResponse_ResponseCode::
@@ -196,6 +221,10 @@
 }
 
 TEST_F(ConnectTetheringOperationTest, TestCannotConnect) {
+  EXPECT_CALL(*mock_host_scan_device_prioritizer_,
+              RecordSuccessfulConnectTetheringResponse(_))
+      .Times(0);
+
   // Simulate the device failing to connect.
   fake_ble_connection_manager_->SetDeviceStatus(
       test_device_, cryptauth::SecureChannel::Status::CONNECTING);
diff --git a/chromeos/components/tether/host_scan_device_prioritizer.h b/chromeos/components/tether/host_scan_device_prioritizer.h
index 9457446..b5f2299 100644
--- a/chromeos/components/tether/host_scan_device_prioritizer.h
+++ b/chromeos/components/tether/host_scan_device_prioritizer.h
@@ -37,12 +37,12 @@
   // Records a TetherAvailabilityResponse. This function should be called each
   // time that a response is received from a potential host, even if a
   // connection is not started.
-  void RecordSuccessfulTetherAvailabilityResponse(
+  virtual void RecordSuccessfulTetherAvailabilityResponse(
       const cryptauth::RemoteDevice& remote_device);
 
   // Records a ConnectTetheringResponse. This function should be called each
   // time that a response is received from a host.
-  void RecordSuccessfulConnectTetheringResponse(
+  virtual void RecordSuccessfulConnectTetheringResponse(
       const cryptauth::RemoteDevice& remote_device);
 
   // Prioritizes |remote_devices| using the rules described above.
diff --git a/chromeos/components/tether/host_scanner_operation.cc b/chromeos/components/tether/host_scanner_operation.cc
index fa19e0a..3cef889 100644
--- a/chromeos/components/tether/host_scanner_operation.cc
+++ b/chromeos/components/tether/host_scanner_operation.cc
@@ -110,7 +110,8 @@
     HostScanDevicePrioritizer* host_scan_device_prioritizer)
     : MessageTransferOperation(
           PrioritizeDevices(devices_to_connect, host_scan_device_prioritizer),
-          connection_manager) {}
+          connection_manager),
+      host_scan_device_prioritizer_(host_scan_device_prioritizer) {}
 
 HostScannerOperation::~HostScannerOperation() {}
 
@@ -165,6 +166,9 @@
                  << "indicates that tethering is available. set_up_required = "
                  << set_up_required;
 
+    host_scan_device_prioritizer_->RecordSuccessfulTetherAvailabilityResponse(
+        remote_device);
+
     scanned_device_list_so_far_.push_back(ScannedDeviceInfo(
         remote_device, response->device_status(), set_up_required));
     NotifyObserversOfScannedDeviceList(false /* is_final_scan_result */);
diff --git a/chromeos/components/tether/host_scanner_operation.h b/chromeos/components/tether/host_scanner_operation.h
index bc774c5..a3da56db 100644
--- a/chromeos/components/tether/host_scanner_operation.h
+++ b/chromeos/components/tether/host_scanner_operation.h
@@ -100,6 +100,7 @@
  private:
   friend class HostScannerOperationTest;
 
+  HostScanDevicePrioritizer* host_scan_device_prioritizer_;
   base::ObserverList<Observer> observer_list_;
 
   DISALLOW_COPY_AND_ASSIGN(HostScannerOperation);
diff --git a/chromeos/components/tether/host_scanner_operation_unittest.cc b/chromeos/components/tether/host_scanner_operation_unittest.cc
index 918c9c22..64de775 100644
--- a/chromeos/components/tether/host_scanner_operation_unittest.cc
+++ b/chromeos/components/tether/host_scanner_operation_unittest.cc
@@ -11,12 +11,15 @@
 #include "base/logging.h"
 #include "chromeos/components/tether/ble_constants.h"
 #include "chromeos/components/tether/fake_ble_connection_manager.h"
-#include "chromeos/components/tether/host_scan_device_prioritizer.h"
 #include "chromeos/components/tether/message_wrapper.h"
+#include "chromeos/components/tether/mock_host_scan_device_prioritizer.h"
 #include "chromeos/components/tether/proto/tether.pb.h"
 #include "components/cryptauth/remote_device_test_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
+using testing::_;
+using testing::StrictMock;
+
 namespace chromeos {
 
 namespace tether {
@@ -25,10 +28,10 @@
 
 const char kDefaultCarrier[] = "Google Fi";
 
-class FakeHostScanDevicePrioritizer : public HostScanDevicePrioritizer {
+class TestHostScanDevicePrioritizer : public MockHostScanDevicePrioritizer {
  public:
-  FakeHostScanDevicePrioritizer() : HostScanDevicePrioritizer(nullptr) {}
-  ~FakeHostScanDevicePrioritizer() override {}
+  TestHostScanDevicePrioritizer() : MockHostScanDevicePrioritizer() {}
+  ~TestHostScanDevicePrioritizer() override {}
 
   // Simply reverses the device order.
   void SortByHostScanOrder(
@@ -112,8 +115,8 @@
 
   void SetUp() override {
     fake_ble_connection_manager_ = base::MakeUnique<FakeBleConnectionManager>();
-    fake_host_scan_device_prioritizer_ =
-        base::MakeUnique<FakeHostScanDevicePrioritizer>();
+    test_host_scan_device_prioritizer_ =
+        base::MakeUnique<StrictMock<TestHostScanDevicePrioritizer>>();
     test_observer_ = base::WrapUnique(new TestObserver());
   }
 
@@ -121,11 +124,11 @@
       const std::vector<cryptauth::RemoteDevice>& remote_devices) {
     operation_ = base::WrapUnique(new HostScannerOperation(
         remote_devices, fake_ble_connection_manager_.get(),
-        fake_host_scan_device_prioritizer_.get()));
+        test_host_scan_device_prioritizer_.get()));
     operation_->AddObserver(test_observer_.get());
 
     // Verify that the devices have been correctly prioritized.
-    fake_host_scan_device_prioritizer_->VerifyHasBeenPrioritized(
+    test_host_scan_device_prioritizer_->VerifyHasBeenPrioritized(
         remote_devices, operation_->remote_devices());
 
     EXPECT_FALSE(test_observer_->has_received_update);
@@ -205,8 +208,8 @@
   const std::vector<cryptauth::RemoteDevice> test_devices_;
 
   std::unique_ptr<FakeBleConnectionManager> fake_ble_connection_manager_;
-  std::unique_ptr<FakeHostScanDevicePrioritizer>
-      fake_host_scan_device_prioritizer_;
+  std::unique_ptr<StrictMock<TestHostScanDevicePrioritizer>>
+      test_host_scan_device_prioritizer_;
   std::unique_ptr<TestObserver> test_observer_;
   std::unique_ptr<HostScannerOperation> operation_;
 
@@ -220,36 +223,68 @@
 }
 
 TEST_F(HostScannerOperationTest, TestOperation_OneDevice_UnknownError) {
+  EXPECT_CALL(*test_host_scan_device_prioritizer_,
+              RecordSuccessfulTetherAvailabilityResponse(_))
+      .Times(0);
+
   TestOperationWithOneDevice(
       TetherAvailabilityResponse_ResponseCode ::
           TetherAvailabilityResponse_ResponseCode_UNKNOWN_ERROR);
 }
 
 TEST_F(HostScannerOperationTest, TestOperation_OneDevice_TetherAvailable) {
+  EXPECT_CALL(*test_host_scan_device_prioritizer_,
+              RecordSuccessfulTetherAvailabilityResponse(test_devices_[0]));
+
   TestOperationWithOneDevice(
       TetherAvailabilityResponse_ResponseCode ::
           TetherAvailabilityResponse_ResponseCode_TETHER_AVAILABLE);
 }
 
 TEST_F(HostScannerOperationTest, TestOperation_OneDevice_SetupNeeded) {
+  EXPECT_CALL(*test_host_scan_device_prioritizer_,
+              RecordSuccessfulTetherAvailabilityResponse(test_devices_[0]));
+
   TestOperationWithOneDevice(
       TetherAvailabilityResponse_ResponseCode ::
           TetherAvailabilityResponse_ResponseCode_SETUP_NEEDED);
 }
 
 TEST_F(HostScannerOperationTest, TestOperation_OneDevice_NoReception) {
+  EXPECT_CALL(*test_host_scan_device_prioritizer_,
+              RecordSuccessfulTetherAvailabilityResponse(_))
+      .Times(0);
+
   TestOperationWithOneDevice(
       TetherAvailabilityResponse_ResponseCode ::
           TetherAvailabilityResponse_ResponseCode_NO_RECEPTION);
 }
 
 TEST_F(HostScannerOperationTest, TestOperation_OneDevice_NoSimCard) {
+  EXPECT_CALL(*test_host_scan_device_prioritizer_,
+              RecordSuccessfulTetherAvailabilityResponse(_))
+      .Times(0);
+
   TestOperationWithOneDevice(
       TetherAvailabilityResponse_ResponseCode ::
           TetherAvailabilityResponse_ResponseCode_NO_SIM_CARD);
 }
 
 TEST_F(HostScannerOperationTest, TestMultipleDevices) {
+  EXPECT_CALL(*test_host_scan_device_prioritizer_,
+              RecordSuccessfulTetherAvailabilityResponse(test_devices_[0]));
+  EXPECT_CALL(*test_host_scan_device_prioritizer_,
+              RecordSuccessfulTetherAvailabilityResponse(test_devices_[1]))
+      .Times(0);
+  EXPECT_CALL(*test_host_scan_device_prioritizer_,
+              RecordSuccessfulTetherAvailabilityResponse(test_devices_[2]));
+  EXPECT_CALL(*test_host_scan_device_prioritizer_,
+              RecordSuccessfulTetherAvailabilityResponse(test_devices_[3]))
+      .Times(0);
+  EXPECT_CALL(*test_host_scan_device_prioritizer_,
+              RecordSuccessfulTetherAvailabilityResponse(test_devices_[4]))
+      .Times(0);
+
   ConstructOperation(test_devices_);
 
   // Simulate devices 0 and 2 authenticating successfully. Use different carrier
diff --git a/chromeos/components/tether/mock_host_scan_device_prioritizer.cc b/chromeos/components/tether/mock_host_scan_device_prioritizer.cc
new file mode 100644
index 0000000..7551b5cb
--- /dev/null
+++ b/chromeos/components/tether/mock_host_scan_device_prioritizer.cc
@@ -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.
+
+#include "chromeos/components/tether/mock_host_scan_device_prioritizer.h"
+
+namespace chromeos {
+
+namespace tether {
+
+MockHostScanDevicePrioritizer::MockHostScanDevicePrioritizer()
+    : HostScanDevicePrioritizer(nullptr) {}
+
+MockHostScanDevicePrioritizer::~MockHostScanDevicePrioritizer() {}
+
+}  // namespace tether
+
+}  // namespace chromeos
diff --git a/chromeos/components/tether/mock_host_scan_device_prioritizer.h b/chromeos/components/tether/mock_host_scan_device_prioritizer.h
new file mode 100644
index 0000000..3ab81836
--- /dev/null
+++ b/chromeos/components/tether/mock_host_scan_device_prioritizer.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.
+
+#ifndef CHROMEOS_COMPONENTS_TETHER_MOCK_HOST_SCAN_DEVICE_PRIORITIZER_H_
+#define CHROMEOS_COMPONENTS_TETHER_MOCK_HOST_SCAN_DEVICE_PRIORITIZER_H_
+
+#include <vector>
+
+#include "base/macros.h"
+#include "chromeos/components/tether/host_scan_device_prioritizer.h"
+#include "components/cryptauth/remote_device.h"
+#include "testing/gmock/include/gmock/gmock.h"
+
+namespace chromeos {
+
+namespace tether {
+
+// Test double for HostScanDevicePrioritizer.
+class MockHostScanDevicePrioritizer : public HostScanDevicePrioritizer {
+ public:
+  MockHostScanDevicePrioritizer();
+  ~MockHostScanDevicePrioritizer() override;
+
+  MOCK_METHOD1(RecordSuccessfulTetherAvailabilityResponse,
+               void(const cryptauth::RemoteDevice&));
+  MOCK_METHOD1(RecordSuccessfulConnectTetheringResponse,
+               void(const cryptauth::RemoteDevice&));
+  MOCK_CONST_METHOD1(SortByHostScanOrder,
+                     void(std::vector<cryptauth::RemoteDevice>*));
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(MockHostScanDevicePrioritizer);
+};
+
+}  // namespace tether
+
+}  // namespace chromeos
+
+#endif  // CHROMEOS_COMPONENTS_TETHER_MOCK_HOST_SCAN_DEVICE_PRIORITIZER_H_
diff --git a/components/BUILD.gn b/components/BUILD.gn
index dd5ed4e..cddbad6 100644
--- a/components/BUILD.gn
+++ b/components/BUILD.gn
@@ -246,6 +246,8 @@
       "//components/gcm_driver/instance_id/android:instance_id_driver_test_support_java",
       "//components/invalidation/impl",
       "//components/invalidation/impl:java",
+      "//components/payments/content/android:unit_tests",
+      "//components/payments/content/android/utility:unit_tests",
       "//components/policy/android:policy_java",
       "//components/safe_json",
       "//components/safe_json/android:safe_json_java",
diff --git a/components/crx_file/id_util.cc b/components/crx_file/id_util.cc
index 99a2456..85584f3 100644
--- a/components/crx_file/id_util.cc
+++ b/components/crx_file/id_util.cc
@@ -42,10 +42,12 @@
 std::string GenerateId(const std::string& input) {
   uint8_t hash[kIdSize];
   crypto::SHA256HashString(input, hash, sizeof(hash));
-  std::string output =
-      base::ToLowerASCII(base::HexEncode(hash, sizeof(hash)));
-  ConvertHexadecimalToIDAlphabet(&output);
+  return GenerateIdFromHex(base::HexEncode(hash, sizeof(hash)));
+}
 
+std::string GenerateIdFromHex(const std::string& input) {
+  std::string output = base::ToLowerASCII(input);
+  ConvertHexadecimalToIDAlphabet(&output);
   return output;
 }
 
diff --git a/components/crx_file/id_util.h b/components/crx_file/id_util.h
index 5c73587..67267519 100644
--- a/components/crx_file/id_util.h
+++ b/components/crx_file/id_util.h
@@ -23,6 +23,10 @@
 // always generate the same output ID.
 std::string GenerateId(const std::string& input);
 
+// Generates an ID from a HEX string. The same input string will always generate
+// the same output ID.
+std::string GenerateIdFromHex(const std::string& input);
+
 // Generates an ID for an extension in the given path.
 // Used while developing extensions, before they have a key.
 std::string GenerateIdForPath(const base::FilePath& path);
diff --git a/components/crx_file/id_util_unittest.cc b/components/crx_file/id_util_unittest.cc
index c198701..3cb19c7 100644
--- a/components/crx_file/id_util_unittest.cc
+++ b/components/crx_file/id_util_unittest.cc
@@ -37,6 +37,13 @@
 
   EXPECT_EQ("ncocknphbhhlhkikpnnlmbcnbgdempcd", GenerateId("_"));
 
+  EXPECT_EQ("a", GenerateIdFromHex("_"));
+
+  EXPECT_EQ(
+      "bjbdkfoakgmkndalgpadobhgbhhoanhongcmfnghaakjmggnkffgnhmdpfngkeho",
+      GenerateIdFromHex(
+          "1913a5e0a6cad30b6f03e176177e0d7ed62c5d6700a9c66da556d7c3f5d6a47e"));
+
   EXPECT_EQ(
       "jimneklojkjdibfkgiiophfhjhbdgcfi",
       GenerateId("this_string_is_longer_than_a_single_sha256_hash_digest"));
diff --git a/components/data_use_measurement/core/data_use_user_data.cc b/components/data_use_measurement/core/data_use_user_data.cc
index de9cf6f..a14d321 100644
--- a/components/data_use_measurement/core/data_use_user_data.cc
+++ b/components/data_use_measurement/core/data_use_user_data.cc
@@ -126,6 +126,8 @@
       return "Doodle";
     case UKM:
       return "UKM";
+    case PAYMENTS:
+      return "Payments";
   }
   return "INVALID";
 }
diff --git a/components/data_use_measurement/core/data_use_user_data.h b/components/data_use_measurement/core/data_use_user_data.h
index a3912d3..2539c88 100644
--- a/components/data_use_measurement/core/data_use_user_data.h
+++ b/components/data_use_measurement/core/data_use_user_data.h
@@ -64,6 +64,7 @@
     NTP_SNIPPETS_THUMBNAILS,
     DOODLE,
     UKM,
+    PAYMENTS,
   };
 
   // Data use broken by content type. This enum must remain synchronized
diff --git a/components/payments/DEPS b/components/payments/DEPS
new file mode 100644
index 0000000..90053c98a
--- /dev/null
+++ b/components/payments/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+  "-base/json/json_reader.h",
+]
diff --git a/components/payments/content/BUILD.gn b/components/payments/content/BUILD.gn
index a6f75fe..e58ff00 100644
--- a/components/payments/content/BUILD.gn
+++ b/components/payments/content/BUILD.gn
@@ -8,10 +8,6 @@
   sources = [
     "payment_request.mojom",
   ]
-
-  public_deps = [
-    "//mojo/common:common_custom_types",
-  ]
 }
 
 mojom("payment_app") {
@@ -21,7 +17,6 @@
 
   public_deps = [
     ":payment_request",
-    "//mojo/common:common_custom_types",
     "//url/mojo:url_mojom_gurl",
   ]
 }
@@ -72,7 +67,7 @@
 source_set("unit_tests") {
   testonly = true
   sources = [
-    "payments_validators_test.cc",
+    "payments_validators_unittest.cc",
   ]
 
   deps = [
diff --git a/components/payments/content/DEPS b/components/payments/content/DEPS
index ec8a116..a3fc48c 100644
--- a/components/payments/content/DEPS
+++ b/components/payments/content/DEPS
@@ -1,6 +1,7 @@
 include_rules = [
+  "-components/payments/content/android",
   "+components/autofill",
-  "+content/public/browser",
+  "+content/public",
   "+mojo/public/cpp",
   "+third_party/re2",
 ]
diff --git a/components/payments/content/android/BUILD.gn b/components/payments/content/android/BUILD.gn
index 8dafb9b..3f9e6833 100644
--- a/components/payments/content/android/BUILD.gn
+++ b/components/payments/content/android/BUILD.gn
@@ -4,6 +4,7 @@
 
 import("//build/config/android/config.gni")
 import("//build/config/android/rules.gni")
+import("//mojo/public/tools/bindings/mojom.gni")
 
 static_library("android") {
   sources = [
@@ -11,20 +12,81 @@
     "currency_formatter_android.h",
     "payment_details_validation_android.cc",
     "payment_details_validation_android.h",
+    "payment_manifest_downloader_android.cc",
+    "payment_manifest_downloader_android.h",
+    "payment_manifest_parser_android.cc",
+    "payment_manifest_parser_android.h",
   ]
   deps = [
+    ":downloader",
     ":jni_headers",
+    ":mojom",
     "//base",
     "//components/payments/content:payment_request",
     "//components/payments/content:payment_validation",
     "//components/payments/core",
+    "//components/strings",
+    "//content/public/browser",
+    "//net",
+    "//ui/base",
+  ]
+}
+
+static_library("downloader") {
+  sources = [
+    "payment_manifest_downloader.cc",
+    "payment_manifest_downloader.h",
+  ]
+  deps = [
+    "//base",
+    "//components/data_use_measurement/core",
+    "//components/link_header_util",
+    "//net",
   ]
 }
 
 generate_jni("jni_headers") {
   sources = [
-    "//chrome/android/java/src/org/chromium/chrome/browser/payments/CurrencyFormatter.java",
-    "//chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentValidator.java",
+    "java/src/org/chromium/components/payments/CurrencyFormatter.java",
+    "java/src/org/chromium/components/payments/PaymentManifestDownloader.java",
+    "java/src/org/chromium/components/payments/PaymentManifestParser.java",
+    "java/src/org/chromium/components/payments/PaymentValidator.java",
   ]
   jni_package = "payments"
 }
+
+android_library("java") {
+  java_files = [
+    "java/src/org/chromium/components/payments/CurrencyFormatter.java",
+    "java/src/org/chromium/components/payments/PaymentManifestDownloader.java",
+    "java/src/org/chromium/components/payments/PaymentManifestParser.java",
+    "java/src/org/chromium/components/payments/PaymentValidator.java",
+  ]
+  deps = [
+    ":mojom_java",
+    "//base:base_java",
+    "//components/payments/content:payment_request_java",
+    "//content/public/android:content_java",
+    "//mojo/public/java:bindings_java",
+  ]
+}
+
+mojom("mojom") {
+  sources = [
+    "payment_manifest_parser.mojom",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "payment_manifest_downloader_unittest.cc",
+  ]
+  deps = [
+    ":downloader",
+    "//base",
+    "//content/test:test_support",
+    "//net:test_support",
+    "//testing/gtest",
+  ]
+}
diff --git a/components/payments/content/android/DEPS b/components/payments/content/android/DEPS
index c80012b5..b05ee8b 100644
--- a/components/payments/content/android/DEPS
+++ b/components/payments/content/android/DEPS
@@ -1,3 +1,9 @@
 include_rules = [
+  "-components/payments/content/android/utility",
+  "+components/data_use_measurement",
+  "+components/link_header_util",
+  "+components/strings",
   "+jni",
+  "+net",
+  "+ui/base",
 ]
diff --git a/components/payments/content/android/OWNERS b/components/payments/content/android/OWNERS
new file mode 100644
index 0000000..08850f4
--- /dev/null
+++ b/components/payments/content/android/OWNERS
@@ -0,0 +1,2 @@
+per-file *.mojom=set noparent
+per-file *.mojom=file://ipc/SECURITY_OWNERS
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/CurrencyFormatter.java b/components/payments/content/android/java/src/org/chromium/components/payments/CurrencyFormatter.java
similarity index 98%
rename from chrome/android/java/src/org/chromium/chrome/browser/payments/CurrencyFormatter.java
rename to components/payments/content/android/java/src/org/chromium/components/payments/CurrencyFormatter.java
index bcb40f1..1c471bcb 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/CurrencyFormatter.java
+++ b/components/payments/content/android/java/src/org/chromium/components/payments/CurrencyFormatter.java
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-package org.chromium.chrome.browser.payments;
+package org.chromium.components.payments;
 
 import org.chromium.base.annotations.JNINamespace;
 
diff --git a/components/payments/content/android/java/src/org/chromium/components/payments/PaymentManifestDownloader.java b/components/payments/content/android/java/src/org/chromium/components/payments/PaymentManifestDownloader.java
new file mode 100644
index 0000000..0139ac6
--- /dev/null
+++ b/components/payments/content/android/java/src/org/chromium/components/payments/PaymentManifestDownloader.java
@@ -0,0 +1,63 @@
+// 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.
+
+package org.chromium.components.payments;
+
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JNINamespace;
+import org.chromium.content_public.browser.WebContents;
+
+import java.net.URI;
+
+/**
+ * See comment in:
+ * components/payments/content/android/payment_manifest_downloader.h
+ */
+@JNINamespace("payments")
+public class PaymentManifestDownloader {
+    /** Interface for the callback to invoke when finished downloading. */
+    public interface ManifestDownloadCallback {
+        /**
+         * Called on successful download of a payment method manifest.
+         *
+         * @param contents The successfully downloaded payment method manifest.
+         */
+        @CalledByNative("ManifestDownloadCallback")
+        void onManifestDownloadSuccess(String contents);
+
+        /** Called on failed download of a payment method manifest. */
+        @CalledByNative("ManifestDownloadCallback")
+        void onManifestDownloadFailure();
+    }
+
+    private final WebContents mWebContents;
+
+    /**
+     * Builds the downloader.
+     *
+     * @param webContents The web contents to use as the context for the download. If this goes
+     *                    away, the download is cancelled.
+     */
+    public PaymentManifestDownloader(WebContents webContents) {
+        mWebContents = webContents;
+    }
+
+    /**
+     * Downloads the manifest file asynchronously.
+     *
+     * @param methodName The payment method name that is a URI with HTTPS scheme.
+     * @param callback   The callback to invoke when finished downloading.
+     */
+    public void download(URI methodName, ManifestDownloadCallback callback) {
+        nativeDownloadPaymentManifest(mWebContents, methodName, callback);
+    }
+
+    @CalledByNative
+    private static String getUriString(URI methodName) {
+        return methodName.toString();
+    }
+
+    private static native void nativeDownloadPaymentManifest(
+            WebContents webContents, URI methodName, ManifestDownloadCallback callback);
+}
diff --git a/components/payments/content/android/java/src/org/chromium/components/payments/PaymentManifestParser.java b/components/payments/content/android/java/src/org/chromium/components/payments/PaymentManifestParser.java
new file mode 100644
index 0000000..13c78f5
--- /dev/null
+++ b/components/payments/content/android/java/src/org/chromium/components/payments/PaymentManifestParser.java
@@ -0,0 +1,86 @@
+// 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.
+
+package org.chromium.components.payments;
+
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JNINamespace;
+import org.chromium.payments.mojom.PaymentManifestSection;
+
+/** Parses payment manifests in a utility process. */
+@JNINamespace("payments")
+public class PaymentManifestParser {
+    /** Interface for the callback to invoke when finished parsing. */
+    public interface ManifestParseCallback {
+        /**
+         * Called on successful parse of a payment method manifest.
+         *
+         * @param manifest The successfully parsed payment method manifest.
+         */
+        @CalledByNative("ManifestParseCallback")
+        void onManifestParseSuccess(PaymentManifestSection[] manifest);
+
+        /** Called on failed parse of a payment method manifest. */
+        @CalledByNative("ManifestParseCallback")
+        void onManifestParseFailure();
+    }
+
+    /** Owned native host of the utility process that parses manifest contents. */
+    private long mNativePaymentManifestParserAndroid;
+
+    /** Starts the utility process. */
+    public void startUtilityProcess() {
+        assert mNativePaymentManifestParserAndroid == 0;
+        mNativePaymentManifestParserAndroid = nativeCreatePaymentManifestParserAndroid();
+        nativeStartUtilityProcess(mNativePaymentManifestParserAndroid);
+    }
+
+    /** Stops the utility process. */
+    public void stopUtilityProcess() {
+        assert mNativePaymentManifestParserAndroid != 0;
+        nativeStopUtilityProcess(mNativePaymentManifestParserAndroid);
+        mNativePaymentManifestParserAndroid = 0;
+    }
+
+    /** @return Whether the utility process is running. */
+    public boolean isUtilityProcessRunning() {
+        return mNativePaymentManifestParserAndroid != 0;
+    }
+
+    /**
+     * Parses the manifest file asynchronously.
+     *
+     * @param content  The content to parse.
+     * @param callback The callback to invoke when finished parsing.
+     */
+    public void parse(String content, ManifestParseCallback callback) {
+        nativeParsePaymentManifest(mNativePaymentManifestParserAndroid, content, callback);
+    }
+
+    @CalledByNative
+    private static PaymentManifestSection[] createManifest(int numberOfsections) {
+        return new PaymentManifestSection[numberOfsections];
+    }
+
+    @CalledByNative
+    private static void addSectionToManifest(PaymentManifestSection[] manifest, int sectionIndex,
+            String packageName, long version, int numberOfFingerprints) {
+        manifest[sectionIndex] = new PaymentManifestSection();
+        manifest[sectionIndex].packageName = packageName;
+        manifest[sectionIndex].version = version;
+        manifest[sectionIndex].sha256CertFingerprints = new byte[numberOfFingerprints][];
+    }
+
+    @CalledByNative
+    private static void addFingerprintToSection(PaymentManifestSection[] manifest, int sectionIndex,
+            int fingerprintIndex, byte[] fingerprint) {
+        manifest[sectionIndex].sha256CertFingerprints[fingerprintIndex] = fingerprint;
+    }
+
+    private static native long nativeCreatePaymentManifestParserAndroid();
+    private static native void nativeStartUtilityProcess(long nativePaymentManifestParserAndroid);
+    private static native void nativeParsePaymentManifest(long nativePaymentManifestParserAndroid,
+            String content, ManifestParseCallback callback);
+    private static native void nativeStopUtilityProcess(long nativePaymentManifestParserAndroid);
+}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentValidator.java b/components/payments/content/android/java/src/org/chromium/components/payments/PaymentValidator.java
similarity index 93%
rename from chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentValidator.java
rename to components/payments/content/android/java/src/org/chromium/components/payments/PaymentValidator.java
index f14507d..c725cfa 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentValidator.java
+++ b/components/payments/content/android/java/src/org/chromium/components/payments/PaymentValidator.java
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-package org.chromium.chrome.browser.payments;
+package org.chromium.components.payments;
 
 import org.chromium.base.annotations.JNINamespace;
 import org.chromium.payments.mojom.PaymentDetails;
diff --git a/components/payments/content/android/payment_details_validation_android.cc b/components/payments/content/android/payment_details_validation_android.cc
index 072dda08..ddc7ffc4 100644
--- a/components/payments/content/android/payment_details_validation_android.cc
+++ b/components/payments/content/android/payment_details_validation_android.cc
@@ -4,9 +4,14 @@
 
 #include "components/payments/content/android/payment_details_validation_android.h"
 
+#include <stdint.h>
+
+#include <cstring>
 #include <string>
 #include <utility>
+#include <vector>
 
+#include "base/android/jni_android.h"
 #include "components/payments/content/payment_details_validation.h"
 #include "components/payments/content/payment_request.mojom.h"
 #include "jni/PaymentValidator_jni.h"
@@ -25,11 +30,11 @@
   if (!mojom::PaymentDetails::Deserialize(std::move(mojo_buffer), &details))
     return false;
   std::string unused_error_message;
-  return payments::validatePaymentDetails(details, &unused_error_message);
+  return validatePaymentDetails(details, &unused_error_message);
+}
+
+bool RegisterPaymentValidator(JNIEnv* env) {
+  return RegisterNativesImpl(env);
 }
 
 }  // namespace payments
-
-bool RegisterPaymentValidator(JNIEnv* env) {
-  return payments::RegisterNativesImpl(env);
-}
diff --git a/components/payments/content/android/payment_details_validation_android.h b/components/payments/content/android/payment_details_validation_android.h
index 88367ae1e..1ff1d6a9 100644
--- a/components/payments/content/android/payment_details_validation_android.h
+++ b/components/payments/content/android/payment_details_validation_android.h
@@ -7,6 +7,10 @@
 
 #include <jni.h>
 
+namespace payments {
+
 bool RegisterPaymentValidator(JNIEnv* env);
 
+}  // namespace payments
+
 #endif  // COMPONENTS_PAYMENTS_CONTENT_ANDROID_PAYMENT_DETAILS_VALIDATION_ANDROID_H_
diff --git a/components/payments/content/android/payment_manifest_downloader.cc b/components/payments/content/android/payment_manifest_downloader.cc
new file mode 100644
index 0000000..052f32e8
--- /dev/null
+++ b/components/payments/content/android/payment_manifest_downloader.cc
@@ -0,0 +1,120 @@
+// 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 "components/payments/content/android/payment_manifest_downloader.h"
+
+#include <algorithm>
+#include <unordered_map>
+#include <utility>
+
+#include "base/bind.h"
+#include "base/logging.h"
+#include "base/strings/string_split.h"
+#include "components/data_use_measurement/core/data_use_user_data.h"
+#include "components/link_header_util/link_header_util.h"
+#include "net/base/load_flags.h"
+#include "net/http/http_response_headers.h"
+#include "net/http/http_status_code.h"
+#include "net/http/http_util.h"
+#include "net/url_request/url_request_context_getter.h"
+#include "url/url_constants.h"
+
+namespace payments {
+namespace {
+
+bool IsValidManifestUrl(const GURL& url) {
+  return url.is_valid() && url.SchemeIs(url::kHttpsScheme);
+}
+
+}  // namespace
+
+PaymentManifestDownloader::PaymentManifestDownloader(
+    const scoped_refptr<net::URLRequestContextGetter>& context,
+    const GURL& method_name,
+    Delegate* delegate)
+    : context_(context),
+      method_name_(method_name),
+      delegate_(delegate),
+      is_downloading_http_link_header_(true) {
+  DCHECK(IsValidManifestUrl(method_name_));
+}
+
+PaymentManifestDownloader::~PaymentManifestDownloader() {}
+
+void PaymentManifestDownloader::Download() {
+  InitiateDownload(method_name_, net::URLFetcher::HEAD);
+}
+
+void PaymentManifestDownloader::InitiateDownload(
+    const GURL& url,
+    net::URLFetcher::RequestType request_type) {
+  if (!IsValidManifestUrl(url)) {
+    delegate_->OnManifestDownloadFailure();
+    return;
+  }
+
+  fetcher_ = net::URLFetcher::Create(0 /* id */, url, request_type, this);
+  data_use_measurement::DataUseUserData::AttachToFetcher(
+      fetcher_.get(), data_use_measurement::DataUseUserData::PAYMENTS);
+  fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
+                         net::LOAD_DO_NOT_SAVE_COOKIES);
+  fetcher_->SetStopOnRedirect(true);
+  fetcher_->SetRequestContext(context_.get());
+  fetcher_->Start();
+}
+
+void PaymentManifestDownloader::OnURLFetchComplete(
+    const net::URLFetcher* source) {
+  if (source->GetResponseCode() != net::HTTP_OK) {
+    delegate_->OnManifestDownloadFailure();
+    return;
+  }
+
+  if (is_downloading_http_link_header_) {
+    is_downloading_http_link_header_ = false;
+
+    net::HttpResponseHeaders* headers = source->GetResponseHeaders();
+    if (!headers) {
+      delegate_->OnManifestDownloadFailure();
+      return;
+    }
+
+    std::string link_header;
+    headers->GetNormalizedHeader("link", &link_header);
+    if (!link_header.empty()) {
+      std::string manifest_url;
+      std::unordered_map<std::string, base::Optional<std::string>> params;
+      for (const auto& value : link_header_util::SplitLinkHeader(link_header)) {
+        if (!link_header_util::ParseLinkHeaderValue(value.first, value.second,
+                                                    &manifest_url, &params)) {
+          continue;
+        }
+
+        auto rel = params.find("rel");
+        if (rel == params.end())
+          continue;
+
+        std::vector<std::string> rel_parts =
+            base::SplitString(rel->second.value_or(""), HTTP_LWS,
+                              base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
+        if (std::find(rel_parts.begin(), rel_parts.end(),
+                      "payment-method-manifest") != rel_parts.end()) {
+          InitiateDownload(method_name_.Resolve(manifest_url),
+                           net::URLFetcher::GET);
+          return;
+        }
+      }
+    }
+  } else {
+    std::string content;
+    if (source->GetResponseAsString(&content) && !content.empty()) {
+      delegate_->OnManifestDownloadSuccess(content);
+      return;
+    }
+  }
+
+  delegate_->OnManifestDownloadFailure();
+}
+
+}  // namespace payments
diff --git a/components/payments/content/android/payment_manifest_downloader.h b/components/payments/content/android/payment_manifest_downloader.h
new file mode 100644
index 0000000..eb02b61e
--- /dev/null
+++ b/components/payments/content/android/payment_manifest_downloader.h
@@ -0,0 +1,98 @@
+// 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 COMPONENTS_PAYMENTS_CONTENT_ANDROID_PAYMENT_MANIFEST_DOWNLOADER_H_
+#define COMPONENTS_PAYMENTS_CONTENT_ANDROID_PAYMENT_MANIFEST_DOWNLOADER_H_
+
+#include <memory>
+#include <string>
+
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+#include "net/url_request/url_fetcher.h"
+#include "net/url_request/url_fetcher_delegate.h"
+#include "url/gurl.h"
+
+namespace net {
+class URLRequestContextGetter;
+}
+
+namespace payments {
+
+// Downloader of the payment method manifest based on the payment method name
+// that is a URL with HTTPS scheme, e.g., https://bobpay.com. The download
+// happens via two consecutive HTTP requests:
+//
+// 1) HEAD request for the payment method name. The HTTP response header is
+//    parsed for Link header that points to the location of the payment method
+//    manifest file. Example of a relative location:
+//
+//      Link: <data/payment-manifest.json>; rel="payment-method-manifest"
+//
+//    (This is relative to the payment method URL.) Example of an absolute
+//    location:
+//
+//      Link: <https://bobpay.com/data/payment-manifest.json>;
+//      rel="payment-method-manifest"
+//
+//    The absolute location must use HTTPS scheme.
+//
+// 2) GET request for the payment method manifest file.
+//
+// The downloader does not follow redirects. A download succeeds only if both
+// HTTP response codes are 200.
+class PaymentManifestDownloader : public net::URLFetcherDelegate {
+ public:
+  // The interface for receiving the result of downloading a manifest.
+  class Delegate {
+   public:
+    // Called when a manifest has been successfully downloaded.
+    virtual void OnManifestDownloadSuccess(const std::string& content) = 0;
+
+    // Called when failed to download the manifest for any reason:
+    //  - HTTP response code is not 200.
+    //  - HTTP response headers are absent.
+    //  - HTTP response headers does not contain Link headers.
+    //  - Link header does not contain rel="payment-method-manifest".
+    //  - Link header does not contain a valid URL.
+    //  - HTTP GET on the manifest URL returns empty content.
+    virtual void OnManifestDownloadFailure() = 0;
+
+   protected:
+    virtual ~Delegate() {}
+  };
+
+  // |delegate| should not be null and must outlive this object. |method_name|
+  // should be a valid URL that starts with "https://".
+  PaymentManifestDownloader(
+      const scoped_refptr<net::URLRequestContextGetter>& context,
+      const GURL& method_name,
+      Delegate* delegate);
+
+  ~PaymentManifestDownloader() override;
+
+  void Download();
+
+ private:
+  void InitiateDownload(const GURL& url,
+                        net::URLFetcher::RequestType request_type);
+
+  // net::URLFetcherDelegate
+  void OnURLFetchComplete(const net::URLFetcher* source) override;
+
+  scoped_refptr<net::URLRequestContextGetter> context_;
+  const GURL method_name_;
+
+  // Non-owned. Never null. Outlives this object.
+  Delegate* delegate_;
+
+  bool is_downloading_http_link_header_;
+  std::unique_ptr<net::URLFetcher> fetcher_;
+
+  DISALLOW_COPY_AND_ASSIGN(PaymentManifestDownloader);
+};
+
+}  // namespace payments
+
+#endif  // COMPONENTS_PAYMENTS_CONTENT_ANDROID_PAYMENT_MANIFEST_DOWNLOADER_H_
diff --git a/components/payments/content/android/payment_manifest_downloader_android.cc b/components/payments/content/android/payment_manifest_downloader_android.cc
new file mode 100644
index 0000000..1e3ae804
--- /dev/null
+++ b/components/payments/content/android/payment_manifest_downloader_android.cc
@@ -0,0 +1,100 @@
+// 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 "components/payments/content/android/payment_manifest_downloader_android.h"
+
+#include <memory>
+#include <utility>
+
+#include "base/android/jni_string.h"
+#include "base/android/scoped_java_ref.h"
+#include "base/logging.h"
+#include "base/memory/ptr_util.h"
+#include "components/payments/content/android/payment_manifest_downloader.h"
+#include "content/public/browser/browser_context.h"
+#include "content/public/browser/storage_partition.h"
+#include "content/public/browser/web_contents.h"
+#include "jni/PaymentManifestDownloader_jni.h"
+#include "net/url_request/url_request_context_getter.h"
+#include "url/gurl.h"
+#include "url/url_constants.h"
+
+namespace payments {
+namespace {
+
+class SelfDeletingDownloadDelegate
+    : public PaymentManifestDownloader::Delegate {
+ public:
+  explicit SelfDeletingDownloadDelegate(
+      const base::android::JavaParamRef<jobject>& jcallback)
+      : jcallback_(jcallback) {}
+
+  void set_downloader(std::unique_ptr<PaymentManifestDownloader> downloader) {
+    downloader_ = std::move(downloader);
+  }
+
+  void Download() { downloader_->Download(); }
+
+  // PaymentManifestDownloader::Delegate
+  void OnManifestDownloadSuccess(const std::string& content) override {
+    JNIEnv* env = base::android::AttachCurrentThread();
+    Java_ManifestDownloadCallback_onManifestDownloadSuccess(
+        env, jcallback_, base::android::ConvertUTF8ToJavaString(env, content));
+    delete this;
+  }
+
+  // PaymentManifestDownloader::Delegate
+  void OnManifestDownloadFailure() override {
+    Java_ManifestDownloadCallback_onManifestDownloadFailure(
+        base::android::AttachCurrentThread(), jcallback_);
+    delete this;
+  }
+
+ private:
+  ~SelfDeletingDownloadDelegate() override {}
+
+  base::android::ScopedJavaGlobalRef<jobject> jcallback_;
+  std::unique_ptr<PaymentManifestDownloader> downloader_;
+
+  DISALLOW_COPY_AND_ASSIGN(SelfDeletingDownloadDelegate);
+};
+
+}  // namespace
+
+bool RegisterPaymentManifestDownloader(JNIEnv* env) {
+  return RegisterNativesImpl(env);
+}
+
+void DownloadPaymentManifest(
+    JNIEnv* env,
+    const base::android::JavaParamRef<jclass>& jcaller,
+    const base::android::JavaParamRef<jobject>& jweb_contents,
+    const base::android::JavaParamRef<jobject>& jmethod_name,
+    const base::android::JavaParamRef<jobject>& jcallback) {
+  SelfDeletingDownloadDelegate* delegate =
+      new SelfDeletingDownloadDelegate(jcallback);
+
+  content::WebContents* web_contents =
+      content::WebContents::FromJavaWebContents(jweb_contents);
+  if (!web_contents) {
+    delegate->OnManifestDownloadFailure();
+    return;
+  }
+
+  GURL method_name(base::android::ConvertJavaStringToUTF8(
+      env, Java_PaymentManifestDownloader_getUriString(env, jmethod_name)));
+  DCHECK(method_name.is_valid());
+  DCHECK(method_name.SchemeIs(url::kHttpsScheme));
+
+  std::unique_ptr<PaymentManifestDownloader> downloader =
+      base::MakeUnique<PaymentManifestDownloader>(
+          content::BrowserContext::GetDefaultStoragePartition(
+              web_contents->GetBrowserContext())
+              ->GetURLRequestContext(),
+          method_name, delegate);
+  delegate->set_downloader(std::move(downloader));
+  delegate->Download();
+}
+
+}  // namespace payments
diff --git a/components/payments/content/android/payment_manifest_downloader_android.h b/components/payments/content/android/payment_manifest_downloader_android.h
new file mode 100644
index 0000000..12f2306d
--- /dev/null
+++ b/components/payments/content/android/payment_manifest_downloader_android.h
@@ -0,0 +1,16 @@
+// 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 COMPONENTS_PAYMENTS_CONTENT_ANDROID_PAYMENT_MANIFEST_DOWNLOADER_ANDROID_H_
+#define COMPONENTS_PAYMENTS_CONTENT_ANDROID_PAYMENT_MANIFEST_DOWNLOADER_ANDROID_H_
+
+#include <jni.h>
+
+namespace payments {
+
+bool RegisterPaymentManifestDownloader(JNIEnv* env);
+
+}  // namespace payments
+
+#endif  // COMPONENTS_PAYMENTS_CONTENT_ANDROID_PAYMENT_MANIFEST_DOWNLOADER_ANDROID_H_
diff --git a/components/payments/content/android/payment_manifest_downloader_unittest.cc b/components/payments/content/android/payment_manifest_downloader_unittest.cc
new file mode 100644
index 0000000..e69c60b
--- /dev/null
+++ b/components/payments/content/android/payment_manifest_downloader_unittest.cc
@@ -0,0 +1,205 @@
+// 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 "components/payments/content/android/payment_manifest_downloader.h"
+
+#include "base/threading/thread_task_runner_handle.h"
+#include "content/public/test/test_browser_thread_bundle.h"
+#include "net/http/http_response_headers.h"
+#include "net/url_request/test_url_fetcher_factory.h"
+#include "net/url_request/url_request_test_util.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace payments {
+namespace {
+
+class PaymentManifestDownloaderTest
+    : public testing::Test,
+      public PaymentManifestDownloader::Delegate {
+ public:
+  PaymentManifestDownloaderTest()
+      : context_(new net::TestURLRequestContextGetter(
+            base::ThreadTaskRunnerHandle::Get())),
+        downloader_(context_, GURL("https://bobpay.com"), this) {
+    downloader_.Download();
+  }
+
+  ~PaymentManifestDownloaderTest() override {}
+
+  // PaymentManifestDownloader::Delegate
+  MOCK_METHOD1(OnManifestDownloadSuccess, void(const std::string& content));
+  MOCK_METHOD0(OnManifestDownloadFailure, void());
+
+  net::TestURLFetcher* fetcher() { return factory_.GetFetcherByID(0); }
+
+ private:
+  content::TestBrowserThreadBundle thread_bundle_;
+  net::TestURLFetcherFactory factory_;
+  scoped_refptr<net::TestURLRequestContextGetter> context_;
+  PaymentManifestDownloader downloader_;
+
+  DISALLOW_COPY_AND_ASSIGN(PaymentManifestDownloaderTest);
+};
+
+TEST_F(PaymentManifestDownloaderTest, HttpHeadResponse404IsFailure) {
+  fetcher()->set_response_code(404);
+
+  EXPECT_CALL(*this, OnManifestDownloadFailure());
+
+  fetcher()->delegate()->OnURLFetchComplete(fetcher());
+}
+
+TEST_F(PaymentManifestDownloaderTest, NoHttpHeadersIsFailure) {
+  fetcher()->set_response_code(200);
+
+  EXPECT_CALL(*this, OnManifestDownloadFailure());
+
+  fetcher()->delegate()->OnURLFetchComplete(fetcher());
+}
+
+TEST_F(PaymentManifestDownloaderTest, EmptyHttpHeaderIsFailure) {
+  scoped_refptr<net::HttpResponseHeaders> headers(
+      new net::HttpResponseHeaders(std::string()));
+  fetcher()->set_response_headers(headers);
+  fetcher()->set_response_code(200);
+
+  EXPECT_CALL(*this, OnManifestDownloadFailure());
+
+  fetcher()->delegate()->OnURLFetchComplete(fetcher());
+}
+
+TEST_F(PaymentManifestDownloaderTest, EmptyHttpLinkHeaderIsFailure) {
+  scoped_refptr<net::HttpResponseHeaders> headers(
+      new net::HttpResponseHeaders(std::string()));
+  headers->AddHeader("Link:");
+  fetcher()->set_response_headers(headers);
+  fetcher()->set_response_code(200);
+
+  EXPECT_CALL(*this, OnManifestDownloadFailure());
+
+  fetcher()->delegate()->OnURLFetchComplete(fetcher());
+}
+
+TEST_F(PaymentManifestDownloaderTest, NoRelInHttpLinkHeaderIsFailure) {
+  scoped_refptr<net::HttpResponseHeaders> headers(
+      new net::HttpResponseHeaders(std::string()));
+  headers->AddHeader("Link: <manifest.json>");
+  fetcher()->set_response_headers(headers);
+  fetcher()->set_response_code(200);
+
+  EXPECT_CALL(*this, OnManifestDownloadFailure());
+
+  fetcher()->delegate()->OnURLFetchComplete(fetcher());
+}
+
+TEST_F(PaymentManifestDownloaderTest, NoUrlInHttpLinkHeaderIsFailure) {
+  scoped_refptr<net::HttpResponseHeaders> headers(
+      new net::HttpResponseHeaders(std::string()));
+  headers->AddHeader("Link: rel=payment-method-manifest");
+  fetcher()->set_response_headers(headers);
+  fetcher()->set_response_code(200);
+
+  EXPECT_CALL(*this, OnManifestDownloadFailure());
+
+  fetcher()->delegate()->OnURLFetchComplete(fetcher());
+}
+
+TEST_F(PaymentManifestDownloaderTest, NoManifestRellInHttpLinkHeaderIsFailure) {
+  scoped_refptr<net::HttpResponseHeaders> headers(
+      new net::HttpResponseHeaders(std::string()));
+  headers->AddHeader("Link: <manifest.json>; rel=web-app-manifest");
+  fetcher()->set_response_headers(headers);
+  fetcher()->set_response_code(200);
+
+  EXPECT_CALL(*this, OnManifestDownloadFailure());
+
+  fetcher()->delegate()->OnURLFetchComplete(fetcher());
+}
+
+TEST_F(PaymentManifestDownloaderTest, HttpGetResponse404IsFailure) {
+  scoped_refptr<net::HttpResponseHeaders> headers(
+      new net::HttpResponseHeaders(std::string()));
+  headers->AddHeader("Link: <manifest.json>; rel=payment-method-manifest");
+  fetcher()->set_response_headers(headers);
+  fetcher()->set_response_code(200);
+  fetcher()->delegate()->OnURLFetchComplete(fetcher());
+  fetcher()->set_response_code(404);
+
+  EXPECT_CALL(*this, OnManifestDownloadFailure());
+
+  fetcher()->delegate()->OnURLFetchComplete(fetcher());
+}
+
+TEST_F(PaymentManifestDownloaderTest, EmptyHttpGetResponseIsFailure) {
+  scoped_refptr<net::HttpResponseHeaders> headers(
+      new net::HttpResponseHeaders(std::string()));
+  headers->AddHeader("Link: <manifest.json>; rel=payment-method-manifest");
+  fetcher()->set_response_headers(headers);
+  fetcher()->set_response_code(200);
+  fetcher()->delegate()->OnURLFetchComplete(fetcher());
+  fetcher()->set_response_code(200);
+
+  EXPECT_CALL(*this, OnManifestDownloadFailure());
+
+  fetcher()->delegate()->OnURLFetchComplete(fetcher());
+}
+
+TEST_F(PaymentManifestDownloaderTest, NonEmptyHttpGetResponseIsSuccess) {
+  scoped_refptr<net::HttpResponseHeaders> headers(
+      new net::HttpResponseHeaders(std::string()));
+  headers->AddHeader("Link: <manifest.json>; rel=payment-method-manifest");
+  fetcher()->set_response_headers(headers);
+  fetcher()->set_response_code(200);
+  fetcher()->delegate()->OnURLFetchComplete(fetcher());
+  fetcher()->SetResponseString("manifest content");
+  fetcher()->set_response_code(200);
+
+  EXPECT_CALL(*this, OnManifestDownloadSuccess("manifest content"));
+
+  fetcher()->delegate()->OnURLFetchComplete(fetcher());
+}
+
+TEST_F(PaymentManifestDownloaderTest, RelativeHttpHeaderLinkUrl) {
+  scoped_refptr<net::HttpResponseHeaders> headers(
+      new net::HttpResponseHeaders(std::string()));
+  headers->AddHeader("Link: <manifest.json>; rel=payment-method-manifest");
+  fetcher()->set_response_headers(headers);
+  fetcher()->set_response_code(200);
+  fetcher()->delegate()->OnURLFetchComplete(fetcher());
+
+  EXPECT_EQ("https://bobpay.com/manifest.json",
+            fetcher()->GetOriginalURL().spec());
+}
+
+TEST_F(PaymentManifestDownloaderTest, AbsoluteHttpsHeaderLinkUrl) {
+  scoped_refptr<net::HttpResponseHeaders> headers(
+      new net::HttpResponseHeaders(std::string()));
+  headers->AddHeader(
+      "Link: <https://alicepay.com/manifest.json>; "
+      "rel=payment-method-manifest");
+  fetcher()->set_response_headers(headers);
+  fetcher()->set_response_code(200);
+  fetcher()->delegate()->OnURLFetchComplete(fetcher());
+
+  EXPECT_EQ("https://alicepay.com/manifest.json",
+            fetcher()->GetOriginalURL().spec());
+}
+
+TEST_F(PaymentManifestDownloaderTest, AbsoluteHttpHeaderLinkUrl) {
+  scoped_refptr<net::HttpResponseHeaders> headers(
+      new net::HttpResponseHeaders(std::string()));
+  headers->AddHeader(
+      "Link: <http://alicepay.com/manifest.json>; "
+      "rel=payment-method-manifest");
+  fetcher()->set_response_headers(headers);
+  fetcher()->set_response_code(200);
+
+  EXPECT_CALL(*this, OnManifestDownloadFailure());
+
+  fetcher()->delegate()->OnURLFetchComplete(fetcher());
+}
+
+}  // namespace
+}  // namespace payments
diff --git a/components/payments/content/android/payment_manifest_parser.mojom b/components/payments/content/android/payment_manifest_parser.mojom
new file mode 100644
index 0000000..75d4de5
--- /dev/null
+++ b/components/payments/content/android/payment_manifest_parser.mojom
@@ -0,0 +1,19 @@
+// 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.
+
+[JavaPackage="org.chromium.payments.mojom"]
+module payments.mojom;
+
+struct PaymentManifestSection {
+  string package_name;
+  // Optional version number. 0 if not defined.
+  int64 version;
+  // The result of SHA256(signing certificate bytes) for each certificate in the
+  // package.
+  array<array<uint8, 32>> sha256_cert_fingerprints;
+};
+
+interface PaymentManifestParser {
+  Parse(string content) => (array<PaymentManifestSection> manifest);
+};
diff --git a/components/payments/content/android/payment_manifest_parser_android.cc b/components/payments/content/android/payment_manifest_parser_android.cc
new file mode 100644
index 0000000..fbc1056
--- /dev/null
+++ b/components/payments/content/android/payment_manifest_parser_android.cc
@@ -0,0 +1,176 @@
+// 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 "components/payments/content/android/payment_manifest_parser_android.h"
+
+#include <stddef.h>
+
+#include <climits>
+
+#include "base/android/jni_array.h"
+#include "base/android/jni_string.h"
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/logging.h"
+#include "base/memory/ptr_util.h"
+#include "base/numerics/safe_conversions.h"
+#include "components/strings/grit/components_strings.h"
+#include "content/public/browser/utility_process_mojo_client.h"
+#include "jni/PaymentManifestParser_jni.h"
+#include "ui/base/l10n/l10n_util.h"
+
+namespace payments {
+
+class PaymentManifestParserAndroid::ParseCallback {
+ public:
+  explicit ParseCallback(const base::android::JavaParamRef<jobject>& jcallback)
+      : jcallback_(jcallback) {}
+
+  ~ParseCallback() {}
+
+  void OnManifestParseSuccess(
+      std::vector<mojom::PaymentManifestSectionPtr> manifest) {
+    DCHECK(!manifest.empty());
+
+    JNIEnv* env = base::android::AttachCurrentThread();
+    base::android::ScopedJavaLocalRef<jobjectArray> jmanifest =
+        Java_PaymentManifestParser_createManifest(env, manifest.size());
+
+    // Java array indices must be integers.
+    for (size_t i = 0; i < manifest.size() && i <= static_cast<size_t>(INT_MAX);
+         ++i) {
+      const mojom::PaymentManifestSectionPtr& section = manifest[i];
+      if (section->sha256_cert_fingerprints.size() >
+          static_cast<size_t>(INT_MAX)) {
+        continue;
+      }
+
+      Java_PaymentManifestParser_addSectionToManifest(
+          env, jmanifest.obj(), base::checked_cast<int>(i),
+          base::android::ConvertUTF8ToJavaString(env, section->package_name),
+          section->version,
+          base::checked_cast<int>(section->sha256_cert_fingerprints.size()));
+
+      for (size_t j = 0; j < section->sha256_cert_fingerprints.size() &&
+                         j <= static_cast<size_t>(INT_MAX);
+           ++j) {
+        const std::vector<uint8_t>& fingerprint =
+            section->sha256_cert_fingerprints[j];
+        Java_PaymentManifestParser_addFingerprintToSection(
+            env, jmanifest.obj(), base::checked_cast<int>(i),
+            base::checked_cast<int>(j),
+            base::android::ToJavaByteArray(env, fingerprint));
+      }
+    }
+
+    // Can trigger synchronous deletion of PaymentManifestParserAndroid.
+    Java_ManifestParseCallback_onManifestParseSuccess(env, jcallback_,
+                                                      jmanifest.obj());
+  }
+
+  void OnManifestParseFailure() {
+    // Can trigger synchronous deletion of PaymentManifestParserAndroid.
+    Java_ManifestParseCallback_onManifestParseFailure(
+        base::android::AttachCurrentThread(), jcallback_);
+  }
+
+ private:
+  base::android::ScopedJavaGlobalRef<jobject> jcallback_;
+
+  DISALLOW_COPY_AND_ASSIGN(ParseCallback);
+};
+
+PaymentManifestParserAndroid::PaymentManifestParserAndroid() {}
+
+PaymentManifestParserAndroid::~PaymentManifestParserAndroid() {}
+
+void PaymentManifestParserAndroid::StartUtilityProcess(
+    JNIEnv* env,
+    const base::android::JavaParamRef<jobject>& jcaller) {
+  mojo_client_ = base::MakeUnique<
+      content::UtilityProcessMojoClient<mojom::PaymentManifestParser>>(
+      l10n_util::GetStringUTF16(IDS_UTILITY_PROCESS_MANIFEST_PARSER_NAME));
+  mojo_client_->set_error_callback(
+      base::Bind(&PaymentManifestParserAndroid::OnUtilityProcessStopped,
+                 base::Unretained(this)));
+  mojo_client_->Start();
+}
+
+void PaymentManifestParserAndroid::ParsePaymentManifest(
+    JNIEnv* env,
+    const base::android::JavaParamRef<jobject>& jcaller,
+    const base::android::JavaParamRef<jstring>& jcontent,
+    const base::android::JavaParamRef<jobject>& jcallback) {
+  std::unique_ptr<ParseCallback> pending_callback =
+      base::MakeUnique<ParseCallback>(jcallback);
+
+  if (!mojo_client_) {
+    pending_callback->OnManifestParseFailure();
+    return;
+  }
+
+  ParseCallback* callback_identifier = pending_callback.get();
+  pending_callbacks_.push_back(std::move(pending_callback));
+  DCHECK_GE(10U, pending_callbacks_.size());
+
+  mojo_client_->service()->Parse(
+      base::android::ConvertJavaStringToUTF8(env, jcontent),
+      base::Bind(&PaymentManifestParserAndroid::OnParse, base::Unretained(this),
+                 callback_identifier));
+}
+
+void PaymentManifestParserAndroid::StopUtilityProcess(
+    JNIEnv* env,
+    const base::android::JavaParamRef<jobject>& jcaller) {
+  delete this;
+}
+
+void PaymentManifestParserAndroid::OnParse(
+    ParseCallback* callback_identifier,
+    std::vector<mojom::PaymentManifestSectionPtr> manifest) {
+  // At most 10 manifests to parse, so iterating a vector is not too slow.
+  for (auto it = pending_callbacks_.begin(); it != pending_callbacks_.end();
+       ++it) {
+    if (it->get() == callback_identifier) {
+      std::unique_ptr<ParseCallback> pending_callback = std::move(*it);
+      pending_callbacks_.erase(it);
+
+      // Can trigger synchronous deletion of this object, so can't access any of
+      // the member variables after this block.
+      if (manifest.empty())
+        pending_callback->OnManifestParseFailure();
+      else
+        pending_callback->OnManifestParseSuccess(std::move(manifest));
+      return;
+    }
+  }
+
+  // If unable to find the pending callback, then something went wrong in the
+  // utility process. Stop the utility process and notify all callbacks.
+  OnUtilityProcessStopped();
+}
+
+void PaymentManifestParserAndroid::OnUtilityProcessStopped() {
+  mojo_client_.reset();
+  std::vector<std::unique_ptr<ParseCallback>> callbacks =
+      std::move(pending_callbacks_);
+  for (const auto& callback : callbacks) {
+    // Can trigger synchronous deletion of this object, so can't access any of
+    // the member variables after this line.
+    callback->OnManifestParseFailure();
+  }
+}
+
+bool RegisterPaymentManifestParser(JNIEnv* env) {
+  return RegisterNativesImpl(env);
+}
+
+// Caller owns the result.
+jlong CreatePaymentManifestParserAndroid(
+    JNIEnv* env,
+    const base::android::JavaParamRef<jclass>& jcaller) {
+  return reinterpret_cast<jlong>(new PaymentManifestParserAndroid);
+}
+
+}  // namespace payments
diff --git a/components/payments/content/android/payment_manifest_parser_android.h b/components/payments/content/android/payment_manifest_parser_android.h
new file mode 100644
index 0000000..0b6250a
--- /dev/null
+++ b/components/payments/content/android/payment_manifest_parser_android.h
@@ -0,0 +1,66 @@
+// 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 COMPONENTS_PAYMENTS_CONTENT_ANDROID_PAYMENT_MANIFEST_PARSER_ANDROID_H_
+#define COMPONENTS_PAYMENTS_CONTENT_ANDROID_PAYMENT_MANIFEST_PARSER_ANDROID_H_
+
+#include <jni.h>
+
+#include <memory>
+#include <vector>
+
+#include "base/android/jni_android.h"
+#include "base/android/scoped_java_ref.h"
+#include "base/macros.h"
+#include "components/payments/content/android/payment_manifest_parser.mojom.h"
+
+namespace content {
+template <class MojoInterface>
+class UtilityProcessMojoClient;
+}
+
+namespace payments {
+
+// Host of the utility process that parses manifest contents.
+class PaymentManifestParserAndroid {
+ public:
+  PaymentManifestParserAndroid();
+  ~PaymentManifestParserAndroid();
+
+  void StartUtilityProcess(JNIEnv* env,
+                           const base::android::JavaParamRef<jobject>& jcaller);
+
+  void ParsePaymentManifest(
+      JNIEnv* env,
+      const base::android::JavaParamRef<jobject>& jcaller,
+      const base::android::JavaParamRef<jstring>& jcontent,
+      const base::android::JavaParamRef<jobject>& jcallback);
+
+  // Deletes this object.
+  void StopUtilityProcess(JNIEnv* env,
+                          const base::android::JavaParamRef<jobject>& jcaller);
+
+ private:
+  class ParseCallback;
+
+  // The |callback_identifier| parameter is a pointer to one of the owned
+  // elements in the |pending_callbacks_| list.
+  void OnParse(ParseCallback* callback_identifier,
+               std::vector<mojom::PaymentManifestSectionPtr> manifest);
+
+  void OnUtilityProcessStopped();
+
+  std::unique_ptr<
+      content::UtilityProcessMojoClient<mojom::PaymentManifestParser>>
+      mojo_client_;
+  std::vector<std::unique_ptr<ParseCallback>> pending_callbacks_;
+
+  DISALLOW_COPY_AND_ASSIGN(PaymentManifestParserAndroid);
+};
+
+bool RegisterPaymentManifestParser(JNIEnv* env);
+
+}  // namespace payments
+
+#endif  // COMPONENTS_PAYMENTS_CONTENT_ANDROID_PAYMENT_MANIFEST_PARSER_ANDROID_H_
diff --git a/components/payments/content/android/utility/BUILD.gn b/components/payments/content/android/utility/BUILD.gn
new file mode 100644
index 0000000..7b0aead
--- /dev/null
+++ b/components/payments/content/android/utility/BUILD.gn
@@ -0,0 +1,29 @@
+# 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.
+
+static_library("utility") {
+  sources = [
+    "fingerprint_parser.cc",
+    "fingerprint_parser.h",
+    "payment_manifest_parser.cc",
+    "payment_manifest_parser.h",
+  ]
+  deps = [
+    "//base",
+    "//components/payments/content/android:mojom",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "fingerprint_parser_unittest.cc",
+    "payment_manifest_parser_unittest.cc",
+  ]
+  deps = [
+    ":utility",
+    "//base",
+    "//testing/gtest",
+  ]
+}
diff --git a/components/payments/content/android/utility/DEPS b/components/payments/content/android/utility/DEPS
new file mode 100644
index 0000000..0afa1dd
--- /dev/null
+++ b/components/payments/content/android/utility/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+  "+base/json/json_reader.h",
+]
diff --git a/components/payments/content/android/utility/fingerprint_parser.cc b/components/payments/content/android/utility/fingerprint_parser.cc
new file mode 100644
index 0000000..1dff204e
--- /dev/null
+++ b/components/payments/content/android/utility/fingerprint_parser.cc
@@ -0,0 +1,50 @@
+// 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 "components/payments/content/android/utility/fingerprint_parser.h"
+
+#include "base/logging.h"
+#include "base/numerics/safe_conversions.h"
+
+namespace payments {
+namespace {
+
+bool IsUpperCaseHexDigit(char c) {
+  return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'F');
+}
+
+uint8_t HexDigitToByte(char c) {
+  DCHECK(IsUpperCaseHexDigit(c));
+  return base::checked_cast<uint8_t>(c >= '0' && c <= '9' ? c - '0'
+                                                          : c - 'A' + 10);
+}
+
+}  // namespace
+
+std::vector<uint8_t> FingerprintStringToByteArray(const std::string& input) {
+  std::vector<uint8_t> output;
+  if (input.size() != 32 * 3 - 1)
+    return output;
+
+  for (size_t i = 0; i < input.size(); i += 3) {
+    if (i < input.size() - 2 && input[i + 2] != ':') {
+      output.clear();
+      return output;
+    }
+
+    char big_end = input[i];
+    char little_end = input[i + 1];
+    if (!IsUpperCaseHexDigit(big_end) || !IsUpperCaseHexDigit(little_end)) {
+      output.clear();
+      return output;
+    }
+
+    output.push_back(HexDigitToByte(big_end) * static_cast<uint8_t>(16) +
+                     HexDigitToByte(little_end));
+  }
+
+  return output;
+}
+
+}  // namespace payments
diff --git a/components/payments/content/android/utility/fingerprint_parser.h b/components/payments/content/android/utility/fingerprint_parser.h
new file mode 100644
index 0000000..a6f9ac7
--- /dev/null
+++ b/components/payments/content/android/utility/fingerprint_parser.h
@@ -0,0 +1,21 @@
+// 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 COMPONENTS_PAYMENTS_CONTENT_ANDROID_UTILITY_FINGERPRINT_PARSER_H_
+#define COMPONENTS_PAYMENTS_CONTENT_ANDROID_UTILITY_FINGERPRINT_PARSER_H_
+
+#include <stddef.h>
+
+#include <string>
+#include <vector>
+
+namespace payments {
+
+// Converts a string representation of a 32-byte array (e.g., "01:02:03:04")
+// into a list of the corresponding bytes. Returns an empty list on error.
+std::vector<uint8_t> FingerprintStringToByteArray(const std::string& input);
+
+}  // namespace payments
+
+#endif  // COMPONENTS_PAYMENTS_CONTENT_ANDROID_UTILITY_FINGERPRINT_PARSER_H_
diff --git a/components/payments/content/android/utility/fingerprint_parser_unittest.cc b/components/payments/content/android/utility/fingerprint_parser_unittest.cc
new file mode 100644
index 0000000..11d3e2a
--- /dev/null
+++ b/components/payments/content/android/utility/fingerprint_parser_unittest.cc
@@ -0,0 +1,90 @@
+// 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 "components/payments/content/android/utility/fingerprint_parser.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace payments {
+namespace {
+
+TEST(FingerprintParserTest, CheckInputSize) {
+  // To short.
+  EXPECT_TRUE(FingerprintStringToByteArray("00:01:02:03:04:05:06:07:08:09:"
+                                           "A0:A1:A2:A3:A4:A5:A6:A7:A8:A9:"
+                                           "B0:B1:B2:B3:B4:B5:B6:B7:B8:B9:"
+                                           "C0:C")
+                  .empty());
+  EXPECT_TRUE(FingerprintStringToByteArray("00:01:02:03:04:05:06:07:08:09:"
+                                           "A0:A1:A2:A3:A4:A5:A6:A7:A8:A9:"
+                                           "B0:B1:B2:B3:B4:B5:B6:B7:B8:B9:"
+                                           "C0:")
+                  .empty());
+  EXPECT_TRUE(FingerprintStringToByteArray("00:01:02:03:04:05:06:07:08:09:"
+                                           "A0:A1:A2:A3:A4:A5:A6:A7:A8:A9:"
+                                           "B0:B1:B2:B3:B4:B5:B6:B7:B8:B9:"
+                                           "C0")
+                  .empty());
+
+  // To long.
+  EXPECT_TRUE(FingerprintStringToByteArray("00:01:02:03:04:05:06:07:08:09:"
+                                           "A0:A1:A2:A3:A4:A5:A6:A7:A8:A9:"
+                                           "B0:B1:B2:B3:B4:B5:B6:B7:B8:B9:"
+                                           "C0:C11")
+                  .empty());
+  EXPECT_TRUE(FingerprintStringToByteArray("00:01:02:03:04:05:06:07:08:09:"
+                                           "A0:A1:A2:A3:A4:A5:A6:A7:A8:A9:"
+                                           "B0:B1:B2:B3:B4:B5:B6:B7:B8:B9:"
+                                           "C0:C1:")
+                  .empty());
+  EXPECT_TRUE(FingerprintStringToByteArray("00:01:02:03:04:05:06:07:08:09:"
+                                           "A0:A1:A2:A3:A4:A5:A6:A7:A8:A9:"
+                                           "B0:B1:B2:B3:B4:B5:B6:B7:B8:B9:"
+                                           "C0:C1:C")
+                  .empty());
+  EXPECT_TRUE(FingerprintStringToByteArray("00:01:02:03:04:05:06:07:08:09:"
+                                           "A0:A1:A2:A3:A4:A5:A6:A7:A8:A9:"
+                                           "B0:B1:B2:B3:B4:B5:B6:B7:B8:B9:"
+                                           "C0:C1:C2")
+                  .empty());
+}
+
+TEST(FingerprintParserTest, CheckColonSeparator) {
+  EXPECT_TRUE(FingerprintStringToByteArray("00-01-02-03-04-05-06-07-08-09-"
+                                           "A0-A1-A2-A3-A4-A5-A6-A7-A8-A9-"
+                                           "B0-B1-B2-B3-B4-B5-B6-B7-B8-B9-"
+                                           "C0-C1")
+                  .empty());
+}
+
+TEST(FingerprintParserTest, MustBeHex) {
+  EXPECT_TRUE(FingerprintStringToByteArray("G0:G1:G2:G3:G4:G5:G6:G7:G8:G9:"
+                                           "A0:A1:A2:A3:A4:A5:A6:A7:A8:A9:"
+                                           "B0:B1:B2:B3:B4:B5:B6:B7:B8:B9:"
+                                           "C0:C1")
+                  .empty());
+}
+
+TEST(FingerprintParserTest, MustBeUpperCaseHex) {
+  EXPECT_TRUE(FingerprintStringToByteArray("00:01:02:03:04:05:06:07:08:09:"
+                                           "a0:a1:a2:a3:a4:a5:a6:a7:a8:a9:"
+                                           "b0:b1:b2:b3:b4:b5:b6:b7:b8:b9:"
+                                           "c0:c1")
+                  .empty());
+}
+
+TEST(FingerprintParserTest, CorrectParsing) {
+  std::vector<uint8_t> actual_output = FingerprintStringToByteArray(
+      "00:01:02:03:04:05:06:07:08:09:A0:"
+      "A1:A2:A3:A4:A5:A6:A7:A8:A9:B0:B1:"
+      "B2:B3:B4:B5:B6:B7:B8:B9:FE:FF");
+  std::vector<uint8_t> expect_output = {
+      0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0xA0,
+      0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xB0, 0xB1,
+      0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xFE, 0xFF};
+  EXPECT_EQ(expect_output, actual_output);
+}
+
+}  // namespace
+}  // namespace payments
diff --git a/components/payments/content/android/utility/payment_manifest_parser.cc b/components/payments/content/android/utility/payment_manifest_parser.cc
new file mode 100644
index 0000000..8b2158b
--- /dev/null
+++ b/components/payments/content/android/utility/payment_manifest_parser.cc
@@ -0,0 +1,142 @@
+// 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 "components/payments/content/android/utility/payment_manifest_parser.h"
+
+#include <stddef.h>
+
+#include <memory>
+#include <utility>
+
+#include "base/json/json_reader.h"
+#include "base/memory/ptr_util.h"
+#include "base/strings/string_util.h"
+#include "base/values.h"
+#include "components/payments/content/android/utility/fingerprint_parser.h"
+#include "mojo/public/cpp/bindings/strong_binding.h"
+
+namespace payments {
+
+// static
+void PaymentManifestParser::Create(
+    mojom::PaymentManifestParserRequest request) {
+  mojo::MakeStrongBinding(base::MakeUnique<PaymentManifestParser>(),
+                          std::move(request));
+}
+
+// static
+std::vector<mojom::PaymentManifestSectionPtr>
+PaymentManifestParser::ParseIntoVector(const std::string& input) {
+  std::vector<mojom::PaymentManifestSectionPtr> output;
+  std::unique_ptr<base::Value> value(base::JSONReader::Read(input));
+  if (!value)
+    return output;
+
+  std::unique_ptr<base::DictionaryValue> dict =
+      base::DictionaryValue::From(std::move(value));
+  if (!dict)
+    return output;
+
+  base::ListValue* list = nullptr;
+  if (!dict->GetList("android", &list) || !list)
+    return output;
+
+  size_t sections_size = list->GetSize();
+  const size_t kMaximumNumberOfSections = 100U;
+  if (sections_size > kMaximumNumberOfSections)
+    return output;
+
+  const char* const kVersion = "version";
+  const char* const kFingerprints = "sha256_cert_fingerprints";
+  for (size_t i = 0; i < sections_size; ++i) {
+    base::DictionaryValue* item = nullptr;
+    if (!list->GetDictionary(i, &item) || !item) {
+      output.clear();
+      return output;
+    }
+
+    mojom::PaymentManifestSectionPtr section =
+        mojom::PaymentManifestSection::New();
+    section->version = 0;
+
+    if (!item->GetString("package", &section->package_name) ||
+        section->package_name.empty() ||
+        !base::IsStringASCII(section->package_name)) {
+      output.clear();
+      return output;
+    }
+
+    if (section->package_name == "*") {
+      output.clear();
+      // If there's a section with "package": "*", then it must be the only
+      // section and it should not have "version" or "sha256_cert_fingerprints".
+      // (Any deviations from a correct format cause the full file to be
+      // rejected.)
+      if (!item->HasKey(kVersion) && !item->HasKey(kFingerprints) &&
+          sections_size == 1U) {
+        output.push_back(std::move(section));
+      }
+      return output;
+    }
+
+    if (!item->HasKey(kVersion) || !item->HasKey(kFingerprints)) {
+      output.clear();
+      return output;
+    }
+
+    int version = 0;
+    if (!item->GetInteger(kVersion, &version)) {
+      output.clear();
+      return output;
+    }
+
+    section->version = static_cast<int64_t>(version);
+
+    base::ListValue* fingerprints = nullptr;
+    if (!item->GetList(kFingerprints, &fingerprints) || !fingerprints ||
+        fingerprints->empty()) {
+      output.clear();
+      return output;
+    }
+
+    size_t fingerprints_size = fingerprints->GetSize();
+    const size_t kMaximumNumberOfFingerprints = 100U;
+    if (fingerprints_size > kMaximumNumberOfFingerprints) {
+      output.clear();
+      return output;
+    }
+
+    for (size_t j = 0; j < fingerprints_size; ++j) {
+      std::string fingerprint;
+      if (!fingerprints->GetString(j, &fingerprint) || fingerprint.empty()) {
+        output.clear();
+        return output;
+      }
+
+      std::vector<uint8_t> fingerprint_bytes =
+          FingerprintStringToByteArray(fingerprint);
+      if (32U != fingerprint_bytes.size()) {
+        output.clear();
+        return output;
+      }
+
+      section->sha256_cert_fingerprints.push_back(fingerprint_bytes);
+    }
+
+    output.push_back(std::move(section));
+  }
+
+  return output;
+}
+
+PaymentManifestParser::PaymentManifestParser() {}
+
+PaymentManifestParser::~PaymentManifestParser() {}
+
+void PaymentManifestParser::Parse(const std::string& content,
+                                  const ParseCallback& callback) {
+  callback.Run(ParseIntoVector(content));
+}
+
+}  // namespace payments
diff --git a/components/payments/content/android/utility/payment_manifest_parser.h b/components/payments/content/android/utility/payment_manifest_parser.h
new file mode 100644
index 0000000..6b06798
--- /dev/null
+++ b/components/payments/content/android/utility/payment_manifest_parser.h
@@ -0,0 +1,51 @@
+// 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 COMPONENTS_PAYMENTS_CONTENT_ANDROID_UTILITY_PAYMENT_MANIFEST_PARSER_H_
+#define COMPONENTS_PAYMENTS_CONTENT_ANDROID_UTILITY_PAYMENT_MANIFEST_PARSER_H_
+
+#include <string>
+#include <vector>
+
+#include "base/macros.h"
+#include "components/payments/content/android/payment_manifest_parser.mojom.h"
+
+namespace payments {
+
+// Parser for payment manifests. Should be used only in a utility process.
+//
+// Example valid manifest structure:
+//
+// {
+//   "android": [{
+//     "package": "com.bobpay.app",
+//     "version": 1,
+//     "sha256_cert_fingerprints": ["12:34:56:78:90:AB:CD:EF"]
+//   }]
+// }
+//
+// Spec:
+// https://docs.google.com/document/d/1izV4uC-tiRJG3JLooqY3YRLU22tYOsLTNq0P_InPJeE/edit#heading=h.cjp3jlnl47h5
+class PaymentManifestParser : public mojom::PaymentManifestParser {
+ public:
+  static void Create(mojom::PaymentManifestParserRequest request);
+
+  // The return value is move-only, so no copying occurs.
+  static std::vector<mojom::PaymentManifestSectionPtr> ParseIntoVector(
+      const std::string& input);
+
+  PaymentManifestParser();
+  ~PaymentManifestParser() override;
+
+  // mojom::PaymentManifestParser
+  void Parse(const std::string& content,
+             const ParseCallback& callback) override;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(PaymentManifestParser);
+};
+
+}  // namespace payments
+
+#endif  // COMPONENTS_PAYMENTS_CONTENT_ANDROID_UTILITY_PAYMENT_MANIFEST_PARSER_H_
diff --git a/components/payments/content/android/utility/payment_manifest_parser_unittest.cc b/components/payments/content/android/utility/payment_manifest_parser_unittest.cc
new file mode 100644
index 0000000..7523edc1
--- /dev/null
+++ b/components/payments/content/android/utility/payment_manifest_parser_unittest.cc
@@ -0,0 +1,185 @@
+// 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 "components/payments/content/android/utility/payment_manifest_parser.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace payments {
+namespace {
+
+void ExpectUnableToParse(const std::string& input) {
+  std::vector<mojom::PaymentManifestSectionPtr> actual_output =
+      PaymentManifestParser::ParseIntoVector(input);
+  EXPECT_TRUE(actual_output.empty());
+}
+
+void ExpectParsed(
+    const std::string& input,
+    const std::string& expected_package_name,
+    int expected_version,
+    const std::vector<std::vector<uint8_t>>& expected_fingerprints = {}) {
+  std::vector<mojom::PaymentManifestSectionPtr> actual_output =
+      PaymentManifestParser::ParseIntoVector(input);
+  ASSERT_EQ(1U, actual_output.size());
+  EXPECT_EQ(expected_package_name, actual_output.front()->package_name);
+  EXPECT_EQ(expected_version, actual_output.front()->version);
+  EXPECT_EQ(expected_fingerprints,
+            actual_output.front()->sha256_cert_fingerprints);
+}
+
+TEST(PaymentManifestParserTest, NullContentIsMalformed) {
+  ExpectUnableToParse(std::string());
+}
+
+TEST(PaymentManifestParserTest, NonJsonContentIsMalformed) {
+  ExpectUnableToParse("this is not json");
+}
+
+TEST(PaymentManifestParserTest, StringContentIsMalformed) {
+  ExpectUnableToParse("\"this is a string\"");
+}
+
+TEST(PaymentManifestParserTest, EmptyDictionaryIsMalformed) {
+  ExpectUnableToParse("{}");
+}
+
+TEST(PaymentManifestParserTest, NullAndroidSectionIsMalformed) {
+  ExpectUnableToParse("{\"android\": null}");
+}
+
+TEST(PaymentManifestParserTest, NumberAndroidSectionIsMalformed) {
+  ExpectUnableToParse("{\"android\": 0}");
+}
+
+TEST(PaymentManifestParserTest, ListOfNumbersAndroidSectionIsMalformed) {
+  ExpectUnableToParse("{\"android\": [0]}");
+}
+
+TEST(PaymentManifestParserTest,
+     ListOfEmptyDictionariesAndroidSectionIsMalformed) {
+  ExpectUnableToParse("{\"android\": [{}]}");
+}
+
+TEST(PaymentManifestParserTest, NoPackageNameIsMalformed) {
+  ExpectUnableToParse("{\"android\": [{\"version\": 3}]}");
+}
+
+TEST(PaymentManifestParserTest, OnlyPackageNameIsWellFormed) {
+  ExpectParsed("{\"android\": [{\"package\": \"*\"}]}", "*", 0);
+}
+
+TEST(PaymentManifestParserTest, WellFormed) {
+  ExpectParsed(
+      "{\"android\": [{"
+      "\"package\": \"com.bobpay.app\","
+      "\"version\":  3,"
+      "\"sha256_cert_fingerprints\": "
+      "[\"00:01:02:03:04:05:06:07:08:09:A0:A1:A2:A3:A4:A5:A6:A7:A8:A9:B0:B1:B2:"
+      "B3:B4:B5:B6:B7:B8:B9:C0:C1\"]}]}",
+      "com.bobpay.app", 3,
+      {{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0xA0,
+        0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xB0, 0xB1,
+        0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xC0, 0xC1}});
+}
+
+TEST(PaymentManifestParserTest, ValuesShouldNotHaveNulCharacters) {
+  ExpectUnableToParse(
+      "{\"android\": [{"
+      "\"package\": \"com.bob\0pay.app\","
+      "\"version\":  3,"
+      "\"sha256_cert_fingerprints\": "
+      "[\"00:01:02:03:04:05:06:07:08:09:A0:A1:A2:A3:A4:A5:A6:A7:A8:A9:B0:B1:B2:"
+      "B3:B4:B5:B6:B7:B8:B9:C0:C1\"]}]}");
+}
+
+TEST(PaymentManifestParserTest, StarPackageShouldBeTheOnlySection) {
+  ExpectUnableToParse(
+      "{\"android\": [{"
+      "\"package\": \"com.bobpay.app\","
+      "\"version\":  3,"
+      "\"sha256_cert_fingerprints\": "
+      "[\"00:01:02:03:04:05:06:07:08:09:A0:A1:A2:A3:A4:A5:A6:A7:A8:A9:B0:B1:B2:"
+      "B3:B4:B5:B6:B7:B8:B9:C0:C1\"]}, {"
+      "\"package\": \"*\"}]}");
+}
+
+TEST(PaymentManifestParserTest, DuplicateSignaturesWellFormed) {
+  ExpectParsed(
+      "{\"android\": [{"
+      "\"package\": \"com.bobpay.app\","
+      "\"version\":  3,"
+      "\"sha256_cert_fingerprints\": "
+      "[\"00:01:02:03:04:05:06:07:08:09:A0:A1:A2:A3:A4:A5:A6:A7:A8:A9:B0:B1:B2:"
+      "B3:B4:B5:B6:B7:B8:B9:C0:C1\","
+      "\"00:01:02:03:04:05:06:07:08:09:A0:A1:A2:A3:A4:A5:A6:A7:A8:A9:B0:B1:B2:"
+      "B3:B4:B5:B6:B7:B8:B9:C0:C1\"]}]}",
+      "com.bobpay.app", 3,
+      {{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0xA0,
+        0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xB0, 0xB1,
+        0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xC0, 0xC1},
+       {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0xA0,
+        0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xB0, 0xB1,
+        0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xC0, 0xC1}});
+}
+
+TEST(PaymentManifestParserTest, KeysShouldBeLowerCase) {
+  ExpectUnableToParse(
+      "{\"android\": [{"
+      "\"package\": \"com.bobpay.app\","
+      "\"version\":  3,"
+      "\"sha256_CERT_fingerprints\": "
+      "[\"00:01:02:03:04:05:06:07:08:09:A0:A1:A2:A3:A4:A5:A6:A7:A8:A9:B0:B1:B2:"
+      "B3:B4:B5:B6:B7:B8:B9:C0:C1\"]}]}");
+}
+
+TEST(PaymentManifestParserTest, FingerprintsShouldBeUpperCase) {
+  ExpectUnableToParse(
+      "{\"android\": [{"
+      "\"package\": \"com.bobpay.app\","
+      "\"version\":  3,"
+      "\"sha256_cert_fingerprints\": "
+      "[\"00:01:02:03:04:05:06:07:08:09:a0:a1:a2:a3:a4:a5:a6:a7:a8:a9:b0:b1:b2:"
+      "b3:b4:b5:b6:b7:b8:b9:c0:c1\"]}]}");
+}
+
+TEST(PaymentManifestParserTest, FingerprintBytesShouldBeColonSeparated) {
+  ExpectUnableToParse(
+      "{\"android\": [{"
+      "\"package\": \"com.bobpay.app\","
+      "\"version\":  3,"
+      "\"sha256_cert_fingerprints\":"
+      "[\"00010203040506070809A0A1A2A3A4A5A6A7A8A9B0B1B2B3B4B5B6B7B8B9C0C1\"]}]"
+      "}");
+}
+
+TEST(PaymentManifestParserTest, FingerprintsShouldBeHex) {
+  ExpectUnableToParse(
+      "{\"android\": [{"
+      "\"package\": \"com.bobpay.app\","
+      "\"version\":  3,"
+      "\"sha256_cert_fingerprints\": "
+      "[\"GG:01:02:03:04:05:06:07:08:09:A0:A1:A2:A3:A4:A5:A6:A7:A8:A9:B0:B1:B2:"
+      "B3:B4:B5:B6:B7:B8:B9:C0:C1\"]}]}");
+}
+
+TEST(PaymentManifestParserTest, FingerprintsShouldContainsThirtyTwoBytes) {
+  ExpectUnableToParse(
+      "{\"android\": [{"
+      "\"package\": \"com.bobpay.app\","
+      "\"version\":  3,"
+      "\"sha256_cert_fingerprints\": "
+      "[\"00:01:02:03:04:05:06:07:08:09:A0:A1:A2:A3:A4:A5:A6:A7:A8:A9:B0:B1:B2:"
+      "B3:B4:B5:B6:B7:B8:B9:C0\"]}]}");
+  ExpectUnableToParse(
+      "{\"android\": [{"
+      "\"package\": \"com.bobpay.app\","
+      "\"version\":  3,"
+      "\"sha256_cert_fingerprints\": "
+      "[\"00:01:02:03:04:05:06:07:08:09:A0:A1:A2:A3:A4:A5:A6:A7:A8:A9:B0:B1:B2:"
+      "B3:B4:B5:B6:B7:B8:B9:C0:C1:C2\"]}]}");
+}
+
+}  // namespace
+}  // namespace payments
diff --git a/components/payments/content/payment_request.h b/components/payments/content/payment_request.h
index 7933e61..08799d1 100644
--- a/components/payments/content/payment_request.h
+++ b/components/payments/content/payment_request.h
@@ -15,6 +15,7 @@
 #include "components/payments/content/payment_request_delegate.h"
 #include "components/payments/core/payment_instrument.h"
 #include "mojo/public/cpp/bindings/binding.h"
+#include "mojo/public/cpp/bindings/interface_request.h"
 
 namespace autofill {
 class AutofillProfile;
@@ -44,22 +45,21 @@
     virtual ~Observer() {}
   };
 
-  PaymentRequest(
-      content::WebContents* web_contents,
-      std::unique_ptr<PaymentRequestDelegate> delegate,
-      PaymentRequestWebContentsManager* manager,
-      mojo::InterfaceRequest<payments::mojom::PaymentRequest> request);
+  PaymentRequest(content::WebContents* web_contents,
+                 std::unique_ptr<PaymentRequestDelegate> delegate,
+                 PaymentRequestWebContentsManager* manager,
+                 mojo::InterfaceRequest<mojom::PaymentRequest> request);
   ~PaymentRequest() override;
 
-  // payments::mojom::PaymentRequest "stub"
-  void Init(payments::mojom::PaymentRequestClientPtr client,
-            std::vector<payments::mojom::PaymentMethodDataPtr> method_data,
-            payments::mojom::PaymentDetailsPtr details,
-            payments::mojom::PaymentOptionsPtr options) override;
+  // mojom::PaymentRequest
+  void Init(mojom::PaymentRequestClientPtr client,
+            std::vector<mojom::PaymentMethodDataPtr> method_data,
+            mojom::PaymentDetailsPtr details,
+            mojom::PaymentOptionsPtr options) override;
   void Show() override;
-  void UpdateWith(payments::mojom::PaymentDetailsPtr details) override {}
+  void UpdateWith(mojom::PaymentDetailsPtr details) override {}
   void Abort() override;
-  void Complete(payments::mojom::PaymentComplete result) override;
+  void Complete(mojom::PaymentComplete result) override;
   void CanMakePayment() override;
 
   // PaymentInstrument::Delegate:
@@ -145,8 +145,8 @@
   }
   const std::string& locale() { return delegate_->GetApplicationLocale(); }
 
-  payments::mojom::PaymentDetails* details() { return details_.get(); }
-  payments::mojom::PaymentOptions* options() { return options_.get(); }
+  mojom::PaymentDetails* details() { return details_.get(); }
+  mojom::PaymentOptions* options() { return options_.get(); }
   const std::vector<std::string>& supported_card_networks() {
     return supported_card_networks_;
   }
@@ -170,7 +170,7 @@
 
   // Validates the |method_data| and fills |supported_card_networks_|.
   void PopulateValidatedMethodData(
-      const std::vector<payments::mojom::PaymentMethodDataPtr>& method_data);
+      const std::vector<mojom::PaymentMethodDataPtr>& method_data);
 
   // Updates |is_ready_to_pay_| with the current state, by validating that all
   // the required information is available and notify observers.
@@ -195,10 +195,10 @@
   std::unique_ptr<PaymentRequestDelegate> delegate_;
   // |manager_| owns this PaymentRequest.
   PaymentRequestWebContentsManager* manager_;
-  mojo::Binding<payments::mojom::PaymentRequest> binding_;
-  payments::mojom::PaymentRequestClientPtr client_;
-  payments::mojom::PaymentDetailsPtr details_;
-  payments::mojom::PaymentOptionsPtr options_;
+  mojo::Binding<mojom::PaymentRequest> binding_;
+  mojom::PaymentRequestClientPtr client_;
+  mojom::PaymentDetailsPtr details_;
+  mojom::PaymentOptionsPtr options_;
   std::unique_ptr<CurrencyFormatter> currency_formatter_;
   // A set of supported basic card networks.
   std::vector<std::string> supported_card_networks_;
diff --git a/components/payments/content/payments_validators_test.cc b/components/payments/content/payments_validators_unittest.cc
similarity index 100%
rename from components/payments/content/payments_validators_test.cc
rename to components/payments/content/payments_validators_unittest.cc
diff --git a/components/payments/core/DEPS b/components/payments/core/DEPS
index 7798128..d1fca76 100644
--- a/components/payments/core/DEPS
+++ b/components/payments/core/DEPS
@@ -1,4 +1,5 @@
 include_rules = [
+  "-components/payments/content",
   "-content",
   "+components/autofill/core",
   "+third_party/libaddressinput",
diff --git a/components/payments_strings.grdp b/components/payments_strings.grdp
index e661419..ba61d946 100644
--- a/components/payments_strings.grdp
+++ b/components/payments_strings.grdp
@@ -248,4 +248,10 @@
   <message name="IDS_PAYMENTS_ANDROID_APP_ERROR" desc="Error message that is shown when an Android payment application fails to start." formatter_data="android_java">
     Unable to launch payment app.
   </message>
+
+  <if expr="is_android">
+    <message name="IDS_UTILITY_PROCESS_MANIFEST_PARSER_NAME" desc="The name of the utility process used for parsing manifest files.">
+      Manifest Parser
+    </message>
+  </if>
 </grit-part>
diff --git a/components/previews/core/previews_experiments.cc b/components/previews/core/previews_experiments.cc
index 77b973a..7b6d539 100644
--- a/components/previews/core/previews_experiments.cc
+++ b/components/previews/core/previews_experiments.cc
@@ -189,6 +189,19 @@
   return effective_connection_type;
 }
 
+bool IsOfflinePreviewsEnabled() {
+  //  Check if "show_offline_pages" is set to "true".
+  return ClientSidePreviewsParamValue(kOfflinePagesSlowNetwork) ==
+         kExperimentEnabled;
+}
+
+int OfflinePreviewsVersion() {
+  int version;
+  if (!base::StringToInt(ClientSidePreviewsParamValue(kVersion), &version))
+    version = 0;
+  return version;
+}
+
 }  // namespace params
 
 bool IsIncludedInClientSidePreviewsExperimentsFieldTrial() {
@@ -200,47 +213,6 @@
       kEnabled, base::CompareCase::SENSITIVE);
 }
 
-bool IsPreviewsTypeEnabled(PreviewsType type) {
-  switch (type) {
-    case PreviewsType::OFFLINE:
-      return ClientSidePreviewsParamValue(kOfflinePagesSlowNetwork) ==
-             kExperimentEnabled;
-    default:
-      NOTREACHED();
-      return false;
-  }
-}
-
-int GetPreviewsTypeVersion(PreviewsType type) {
-  int version = 0;  // default
-  switch (type) {
-    case PreviewsType::OFFLINE:
-      base::StringToInt(ClientSidePreviewsParamValue(kVersion), &version);
-      return version;
-    // List remaining enum cases vs. default to catch when new one is added.
-    case PreviewsType::NONE:
-      break;
-    case PreviewsType::LAST:
-      break;
-  }
-  NOTREACHED();
-  return -1;
-}
-
-std::unique_ptr<PreviewsTypeList> GetEnabledPreviews() {
-  std::unique_ptr<PreviewsTypeList> enabled_previews(new PreviewsTypeList());
-
-  // Loop across all previews types (relies on sequential enum values).
-  for (int i = static_cast<int>(PreviewsType::NONE) + 1;
-       i < static_cast<int>(PreviewsType::LAST); ++i) {
-    PreviewsType type = static_cast<PreviewsType>(i);
-    if (IsPreviewsTypeEnabled(type)) {
-      enabled_previews->push_back({type, GetPreviewsTypeVersion(type)});
-    }
-  }
-  return enabled_previews;
-}
-
 bool EnableOfflinePreviewsForTesting() {
   std::map<std::string, std::string> params;
   params[kOfflinePagesSlowNetwork] = kExperimentEnabled;
diff --git a/components/previews/core/previews_experiments.h b/components/previews/core/previews_experiments.h
index 0a6f3a6..a41f02fe 100644
--- a/components/previews/core/previews_experiments.h
+++ b/components/previews/core/previews_experiments.h
@@ -52,10 +52,17 @@
 // served.
 net::EffectiveConnectionType EffectiveConnectionTypeThreshold();
 
+// Whether offline previews are enabled.
+bool IsOfflinePreviewsEnabled();
+
+// The blacklist version for offline previews.
+int OfflinePreviewsVersion();
+
 }  // namespace params
 
 enum class PreviewsType {
   NONE = 0,
+  // The user is shown an offline page as a preview.
   OFFLINE = 1,
   // Insert new enum values here. Keep values sequential to allow looping
   // from NONE+1 to LAST-1.
@@ -67,17 +74,6 @@
 // Returns true if any client-side previews experiment is active.
 bool IsIncludedInClientSidePreviewsExperimentsFieldTrial();
 
-// Returns true if the field trial that should enable previews for |type| for
-// prohibitvely slow networks is active.
-bool IsPreviewsTypeEnabled(PreviewsType type);
-
-// Returns the version of preview treatment |type|. Defaults to 0 if not
-// specified in field trial config.
-int GetPreviewsTypeVersion(PreviewsType type);
-
-// Returns the enabled PreviewsTypes with their version.
-std::unique_ptr<PreviewsTypeList> GetEnabledPreviews();
-
 // Sets the appropriate state for field trial and variations to imitate the
 // offline pages field trial.
 bool EnableOfflinePreviewsForTesting();
diff --git a/components/previews/core/previews_experiments_unittest.cc b/components/previews/core/previews_experiments_unittest.cc
index faf92cc..f96fb55 100644
--- a/components/previews/core/previews_experiments_unittest.cc
+++ b/components/previews/core/previews_experiments_unittest.cc
@@ -145,13 +145,13 @@
 // Verifies that we can enable offline previews via field trial.
 TEST_F(PreviewsExperimentsTest, TestFieldTrialOfflinePage) {
   EXPECT_FALSE(IsIncludedInClientSidePreviewsExperimentsFieldTrial());
-  EXPECT_FALSE(IsPreviewsTypeEnabled(PreviewsType::OFFLINE));
+  EXPECT_FALSE(params::IsOfflinePreviewsEnabled());
 
   base::FieldTrialList field_trial_list(nullptr);
   ASSERT_TRUE(EnableOfflinePreviewsForTesting());
 
   EXPECT_TRUE(IsIncludedInClientSidePreviewsExperimentsFieldTrial());
-  EXPECT_TRUE(IsPreviewsTypeEnabled(PreviewsType::OFFLINE));
+  EXPECT_TRUE(params::IsOfflinePreviewsEnabled());
   variations::testing::ClearAllVariationParams();
 }
 
diff --git a/components/previews/core/previews_io_data.cc b/components/previews/core/previews_io_data.cc
index 0a7af37..9645fa24 100644
--- a/components/previews/core/previews_io_data.cc
+++ b/components/previews/core/previews_io_data.cc
@@ -51,8 +51,10 @@
 
 void PreviewsIOData::Initialize(
     base::WeakPtr<PreviewsUIService> previews_ui_service,
-    std::unique_ptr<PreviewsOptOutStore> previews_opt_out_store) {
+    std::unique_ptr<PreviewsOptOutStore> previews_opt_out_store,
+    const PreviewsIsEnabledCallback& is_enabled_callback) {
   DCHECK(ui_task_runner_->BelongsToCurrentThread());
+  is_enabled_callback_ = is_enabled_callback;
   previews_ui_service_ = previews_ui_service;
 
   // Set up the IO thread portion of |this|.
@@ -88,15 +90,16 @@
 
 bool PreviewsIOData::ShouldAllowPreview(const net::URLRequest& request,
                                         PreviewsType type) const {
-  if (!IsPreviewsTypeEnabled(type))
-    return false;
-  // The blacklist will disallow certain hosts for periods of time based on
-  // user's opting out of the preview
-  if (!previews_black_list_) {
+  if (is_enabled_callback_.is_null() || !previews_black_list_) {
     LogPreviewsEligibilityReason(
         PreviewsEligibilityReason::BLACKLIST_UNAVAILABLE, type);
     return false;
   }
+  if (!is_enabled_callback_.Run(type))
+    return false;
+
+  // The blacklist will disallow certain hosts for periods of time based on
+  // user's opting out of the preview
   PreviewsEligibilityReason status =
       previews_black_list_->IsLoadedAndAllowed(request.url(), type);
   if (status != PreviewsEligibilityReason::ALLOWED) {
diff --git a/components/previews/core/previews_io_data.h b/components/previews/core/previews_io_data.h
index a30ab6f..f6e8533 100644
--- a/components/previews/core/previews_io_data.h
+++ b/components/previews/core/previews_io_data.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <string>
 
+#include "base/callback.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
@@ -27,6 +28,8 @@
 class PreviewsOptOutStore;
 class PreviewsUIService;
 
+typedef base::Callback<bool(PreviewsType)> PreviewsIsEnabledCallback;
+
 // A class to manage the IO portion of inter-thread communication between
 // previews/ objects. Created on the UI thread, but used only on the IO thread
 // after initialization.
@@ -40,7 +43,8 @@
   // Stores |previews_ui_service| as |previews_ui_service_| and posts a task to
   // InitializeOnIOThread on the IO thread.
   void Initialize(base::WeakPtr<PreviewsUIService> previews_ui_service,
-                  std::unique_ptr<PreviewsOptOutStore> previews_opt_out_store);
+                  std::unique_ptr<PreviewsOptOutStore> previews_opt_out_store,
+                  const PreviewsIsEnabledCallback& is_enabled_callback);
 
   // Adds a navigation to |url| to the black list with result |opt_out|.
   void AddPreviewNavigation(const GURL& url, bool opt_out, PreviewsType type);
@@ -75,6 +79,9 @@
   scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
   scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;
 
+  // Whether the preview is enabled. Valid after Initialize() is called.
+  PreviewsIsEnabledCallback is_enabled_callback_;
+
   base::WeakPtrFactory<PreviewsIOData> weak_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(PreviewsIOData);
diff --git a/components/previews/core/previews_io_data_unittest.cc b/components/previews/core/previews_io_data_unittest.cc
index 39a8925e..23b1bac 100644
--- a/components/previews/core/previews_io_data_unittest.cc
+++ b/components/previews/core/previews_io_data_unittest.cc
@@ -37,6 +37,10 @@
 
 namespace {
 
+bool CheckOfflineFieldTrial(PreviewsType type) {
+  return previews::params::IsOfflinePreviewsEnabled();
+}
+
 class TestPreviewsIOData : public PreviewsIOData {
  public:
   TestPreviewsIOData(
@@ -125,7 +129,7 @@
   set_io_data(base::MakeUnique<TestPreviewsIOData>(loop_.task_runner(),
                                                    loop_.task_runner()));
   set_ui_service(base::MakeUnique<PreviewsUIService>(
-      io_data(), loop_.task_runner(), nullptr));
+      io_data(), loop_.task_runner(), nullptr, PreviewsIsEnabledCallback()));
   base::RunLoop().RunUntilIdle();
   // After the outstanding posted tasks have run, |io_data_| should be fully
   // initialized.
@@ -144,29 +148,38 @@
                                                    loop_.task_runner()));
   base::HistogramTester histogram_tester;
 
-  // If not in the field trial, don't log anything, and return false.
-  EXPECT_FALSE(io_data()->ShouldAllowPreview(*request, PreviewsType::OFFLINE));
-  histogram_tester.ExpectTotalCount("Previews.EligibilityReason.Offline", 0);
-
-  // Enable Offline previews field trial.
-  base::FieldTrialList field_trial_list(nullptr);
-  std::map<std::string, std::string> params;
-  params["show_offline_pages"] = "true";
-  variations::AssociateVariationParams("ClientSidePreviews", "Enabled", params);
-  base::FieldTrialList::CreateFieldTrial("ClientSidePreviews", "Enabled");
-
   // The blacklist is not created yet.
   EXPECT_FALSE(io_data()->ShouldAllowPreview(*request, PreviewsType::OFFLINE));
   histogram_tester.ExpectUniqueSample(
       "Previews.EligibilityReason.Offline",
       static_cast<int>(PreviewsEligibilityReason::BLACKLIST_UNAVAILABLE), 1);
 
-  set_ui_service(base::WrapUnique(
-      new PreviewsUIService(io_data(), loop_.task_runner(),
-                            base::MakeUnique<TestPreviewsOptOutStore>())));
+  set_ui_service(base::MakeUnique<PreviewsUIService>(
+      io_data(), loop_.task_runner(),
+      base::MakeUnique<TestPreviewsOptOutStore>(),
+      base::Bind(&CheckOfflineFieldTrial)));
+
+  // The blacklist is not created yet.
+  EXPECT_FALSE(io_data()->ShouldAllowPreview(*request, PreviewsType::OFFLINE));
+  histogram_tester.ExpectBucketCount(
+      "Previews.EligibilityReason.Offline",
+      static_cast<int>(PreviewsEligibilityReason::BLACKLIST_UNAVAILABLE), 2);
 
   base::RunLoop().RunUntilIdle();
 
+  histogram_tester.ExpectTotalCount("Previews.EligibilityReason.Offline", 2);
+  // If not in the field trial, don't log anything, and return false.
+  EXPECT_FALSE(io_data()->ShouldAllowPreview(*request, PreviewsType::OFFLINE));
+  histogram_tester.ExpectTotalCount("Previews.EligibilityReason.Offline", 2);
+
+  // Enable Offline previews field trial.
+  base::FieldTrialList field_trial_list(nullptr);
+  std::map<std::string, std::string> params;
+  params["show_offline_pages"] = "true";
+
+  variations::AssociateVariationParams("ClientSidePreviews", "Enabled", params);
+  base::FieldTrialList::CreateFieldTrial("ClientSidePreviews", "Enabled");
+
   // Return one of the failing statuses from the blacklist; cause the blacklist
   // to not be loaded by clearing the blacklist.
   base::Time now = base::Time::Now();
@@ -227,7 +240,7 @@
       "Previews.EligibilityReason.Offline",
       static_cast<int>(PreviewsEligibilityReason::ALLOWED), 1);
 
-  histogram_tester.ExpectTotalCount("Previews.EligibilityReason.Offline", 7);
+  histogram_tester.ExpectTotalCount("Previews.EligibilityReason.Offline", 8);
 
   variations::testing::ClearAllVariationParams();
 }
diff --git a/components/previews/core/previews_opt_out_store_sql.cc b/components/previews/core/previews_opt_out_store_sql.cc
index b1e4f58..4b9b97b 100644
--- a/components/previews/core/previews_opt_out_store_sql.cc
+++ b/components/previews/core/previews_opt_out_store_sql.cc
@@ -262,12 +262,12 @@
 // Checks the current set of enabled previews (with their current version)
 // and where a preview is now disabled or has a different version, cleans up
 // any associated blacklist entries.
-void CheckAndReconcileEnabledPreviewsWithDataBase(sql::Connection* db) {
+void CheckAndReconcileEnabledPreviewsWithDataBase(
+    sql::Connection* db,
+    PreviewsTypeList* enabled_previews) {
   std::unique_ptr<std::map<PreviewsType, int>> stored_previews(
       GetStoredPreviews(db));
 
-  std::unique_ptr<PreviewsTypeList> enabled_previews(GetEnabledPreviews());
-
   for (auto enabled_it = enabled_previews->begin();
        enabled_it != enabled_previews->end(); ++enabled_it) {
     PreviewsType type = enabled_it->first;
@@ -297,10 +297,11 @@
 
 void LoadBlackListFromDataBase(
     sql::Connection* db,
+    PreviewsTypeList* enabled_previews,
     scoped_refptr<base::SingleThreadTaskRunner> runner,
     LoadBlackListCallback callback) {
   // First handle any update needed wrt enabled previews and their versions.
-  CheckAndReconcileEnabledPreviewsWithDataBase(db);
+  CheckAndReconcileEnabledPreviewsWithDataBase(db, enabled_previews);
 
   // Gets the table sorted by host and time. Limits the number of hosts using
   // most recent opt_out time as the limiting function. Sorting is free due to
@@ -365,12 +366,13 @@
 // and actually do the work to access the SQL data base.
 void LoadBlackListSync(sql::Connection* db,
                        const base::FilePath& path,
+                       std::unique_ptr<PreviewsTypeList> enabled_previews,
                        scoped_refptr<base::SingleThreadTaskRunner> runner,
                        LoadBlackListCallback callback) {
   if (!db->is_open())
     InitDatabase(db, path);
 
-  LoadBlackListFromDataBase(db, runner, callback);
+  LoadBlackListFromDataBase(db, enabled_previews.get(), runner, callback);
 }
 
 // Deletes every row in the table that has entry time between |begin_time| and
@@ -405,10 +407,14 @@
 PreviewsOptOutStoreSQL::PreviewsOptOutStoreSQL(
     scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
     scoped_refptr<base::SequencedTaskRunner> background_task_runner,
-    const base::FilePath& path)
+    const base::FilePath& path,
+    std::unique_ptr<PreviewsTypeList> enabled_previews)
     : io_task_runner_(io_task_runner),
       background_task_runner_(background_task_runner),
-      db_file_path_(path) {}
+      db_file_path_(path),
+      enabled_previews_(std::move(enabled_previews)) {
+  DCHECK(enabled_previews_);
+}
 
 PreviewsOptOutStoreSQL::~PreviewsOptOutStoreSQL() {
   DCHECK(io_task_runner_->BelongsToCurrentThread());
@@ -441,8 +447,11 @@
   DCHECK(io_task_runner_->BelongsToCurrentThread());
   if (!db_)
     db_ = base::MakeUnique<sql::Connection>();
+  std::unique_ptr<PreviewsTypeList> enabled_previews =
+      base::MakeUnique<PreviewsTypeList>(*enabled_previews_);
   background_task_runner_->PostTask(
       FROM_HERE, base::Bind(&LoadBlackListSync, db_.get(), db_file_path_,
+                            base::Passed(std::move(enabled_previews)),
                             base::ThreadTaskRunnerHandle::Get(), callback));
 }
 
diff --git a/components/previews/core/previews_opt_out_store_sql.h b/components/previews/core/previews_opt_out_store_sql.h
index 801b850..0d3b6389 100644
--- a/components/previews/core/previews_opt_out_store_sql.h
+++ b/components/previews/core/previews_opt_out_store_sql.h
@@ -36,7 +36,8 @@
   PreviewsOptOutStoreSQL(
       scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
       scoped_refptr<base::SequencedTaskRunner> background_task_runner,
-      const base::FilePath& database_dir);
+      const base::FilePath& database_dir,
+      std::unique_ptr<PreviewsTypeList> enabled_previews);
   ~PreviewsOptOutStoreSQL() override;
 
   // PreviewsOptOutStore implementation:
@@ -60,6 +61,9 @@
   // SQL connection to the SQLite database.
   std::unique_ptr<sql::Connection> db_;
 
+  // All enabled previews and versions.
+  const std::unique_ptr<PreviewsTypeList> enabled_previews_;
+
   DISALLOW_COPY_AND_ASSIGN(PreviewsOptOutStoreSQL);
 };
 
diff --git a/components/previews/core/previews_opt_out_store_sql_unittest.cc b/components/previews/core/previews_opt_out_store_sql_unittest.cc
index 9974885..2057eed 100644
--- a/components/previews/core/previews_opt_out_store_sql_unittest.cc
+++ b/components/previews/core/previews_opt_out_store_sql_unittest.cc
@@ -64,16 +64,17 @@
   }
 
   // Creates a store that operates on one thread.
-  void Create() {
+  void Create(std::unique_ptr<PreviewsTypeList> enabled_previews) {
     store_ = base::MakeUnique<PreviewsOptOutStoreSQL>(
         base::ThreadTaskRunnerHandle::Get(),
         base::ThreadTaskRunnerHandle::Get(),
-        temp_dir_.GetPath().Append(kOptOutFilename));
+        temp_dir_.GetPath().Append(kOptOutFilename),
+        std::move(enabled_previews));
   }
 
   // Sets up initialization of |store_|.
-  void CreateAndLoad() {
-    Create();
+  void CreateAndLoad(std::unique_ptr<PreviewsTypeList> enabled_previews) {
+    Create(std::move(enabled_previews));
     Load();
   }
 
@@ -114,7 +115,9 @@
 TEST_F(PreviewsOptOutStoreSQLTest, TestErrorRecovery) {
   // Creates the database and corrupt to test the recovery method.
   std::string test_host = "host.com";
-  CreateAndLoad();
+  std::unique_ptr<PreviewsTypeList> enabled_previews(new PreviewsTypeList);
+  enabled_previews->push_back({PreviewsType::OFFLINE, 0});
+  CreateAndLoad(std::move(enabled_previews));
   store_->AddPreviewNavigation(true, test_host, PreviewsType::OFFLINE,
                                base::Time::Now());
   base::RunLoop().RunUntilIdle();
@@ -125,7 +128,9 @@
       temp_dir_.GetPath().Append(kOptOutFilename)));
   base::RunLoop().RunUntilIdle();
 
-  CreateAndLoad();
+  enabled_previews.reset(new PreviewsTypeList);
+  enabled_previews->push_back({PreviewsType::OFFLINE, 0});
+  CreateAndLoad(std::move(enabled_previews));
   // The data should be recovered.
   EXPECT_EQ(1U, black_list_map_->size());
   auto iter = black_list_map_->find(test_host);
@@ -137,7 +142,9 @@
 TEST_F(PreviewsOptOutStoreSQLTest, TestPersistance) {
   // Tests if data is stored as expected in the SQLite database.
   std::string test_host = "host.com";
-  CreateAndLoad();
+  std::unique_ptr<PreviewsTypeList> enabled_previews(new PreviewsTypeList);
+  enabled_previews->push_back({PreviewsType::OFFLINE, 0});
+  CreateAndLoad(std::move(enabled_previews));
   histogram_tester_.ExpectUniqueSample("Previews.OptOut.DBRowCount", 0, 1);
   base::Time now = base::Time::Now();
   store_->AddPreviewNavigation(true, test_host, PreviewsType::OFFLINE, now);
@@ -148,7 +155,9 @@
   DestroyStore();
 
   // Reload and test for persistence
-  CreateAndLoad();
+  enabled_previews.reset(new PreviewsTypeList);
+  enabled_previews->push_back({PreviewsType::OFFLINE, 0});
+  CreateAndLoad(std::move(enabled_previews));
   EXPECT_EQ(1U, black_list_map_->size());
   auto iter = black_list_map_->find(test_host);
 
@@ -172,7 +181,9 @@
   std::string row_limit_string = base::SizeTToString(row_limit);
   command_line->AppendSwitchASCII("previews-max-opt-out-rows",
                                   row_limit_string);
-  CreateAndLoad();
+  std::unique_ptr<PreviewsTypeList> enabled_previews(new PreviewsTypeList);
+  enabled_previews->push_back({PreviewsType::OFFLINE, 0});
+  CreateAndLoad(std::move(enabled_previews));
   histogram_tester_.ExpectUniqueSample("Previews.OptOut.DBRowCount", 0, 1);
   base::SimpleTestClock clock;
 
@@ -194,7 +205,9 @@
   DestroyStore();
 
   // Reload and test for persistence
-  CreateAndLoad();
+  enabled_previews.reset(new PreviewsTypeList);
+  enabled_previews->push_back({PreviewsType::OFFLINE, 0});
+  CreateAndLoad(std::move(enabled_previews));
   histogram_tester_.ExpectBucketCount("Previews.OptOut.DBRowCount",
                                       static_cast<int>(row_limit) + 1, 1);
   // The delete happens after the load, so it is possible to load more than
@@ -204,7 +217,9 @@
             host_indifferent_item_->OptOutRecordsSizeForTesting());
 
   DestroyStore();
-  CreateAndLoad();
+  enabled_previews.reset(new PreviewsTypeList);
+  enabled_previews->push_back({PreviewsType::OFFLINE, 0});
+  CreateAndLoad(std::move(enabled_previews));
   histogram_tester_.ExpectBucketCount("Previews.OptOut.DBRowCount",
                                       static_cast<int>(row_limit), 1);
 
@@ -232,7 +247,9 @@
   std::string row_limit_string = base::SizeTToString(row_limit);
   command_line->AppendSwitchASCII("previews-max-opt-out-rows-per-host",
                                   row_limit_string);
-  CreateAndLoad();
+  std::unique_ptr<PreviewsTypeList> enabled_previews(new PreviewsTypeList);
+  enabled_previews->push_back({PreviewsType::OFFLINE, 0});
+  CreateAndLoad(std::move(enabled_previews));
   histogram_tester_.ExpectUniqueSample("Previews.OptOut.DBRowCount", 0, 1);
   base::SimpleTestClock clock;
 
@@ -254,7 +271,9 @@
   DestroyStore();
 
   // Reload and test for persistence.
-  CreateAndLoad();
+  enabled_previews.reset(new PreviewsTypeList);
+  enabled_previews->push_back({PreviewsType::OFFLINE, 0});
+  CreateAndLoad(std::move(enabled_previews));
   histogram_tester_.ExpectBucketCount("Previews.OptOut.DBRowCount",
                                       static_cast<int>(row_limit), 1);
 
@@ -277,13 +296,10 @@
   // Tests if data is cleared for previews type when it is disabled.
   // Enable offline previews and add black list entry for it.
   std::map<std::string, std::string> params;
-  params["show_offline_pages"] = "true";
-  EXPECT_TRUE(
-      base::AssociateFieldTrialParams("ClientSidePreviews", "Enabled", params));
-  EXPECT_TRUE(
-      base::FieldTrialList::CreateFieldTrial("ClientSidePreviews", "Enabled"));
   std::string test_host = "host.com";
-  CreateAndLoad();
+  std::unique_ptr<PreviewsTypeList> enabled_previews(new PreviewsTypeList);
+  enabled_previews->push_back({PreviewsType::OFFLINE, 0});
+  CreateAndLoad(std::move(enabled_previews));
   histogram_tester_.ExpectUniqueSample("Previews.OptOut.DBRowCount", 0, 1);
   base::Time now = base::Time::Now();
   store_->AddPreviewNavigation(true, test_host, PreviewsType::OFFLINE, now);
@@ -292,41 +308,29 @@
   // Force data write to database then reload it and verify black list entry
   // is present.
   DestroyStore();
-  CreateAndLoad();
+  enabled_previews.reset(new PreviewsTypeList);
+  enabled_previews->push_back({PreviewsType::OFFLINE, 0});
+  CreateAndLoad(std::move(enabled_previews));
   auto iter = black_list_map_->find(test_host);
   EXPECT_NE(black_list_map_->end(), iter);
   EXPECT_EQ(1U, iter->second->OptOutRecordsSizeForTesting());
 
-  // Now reload with offline pages previews disabled and verify black list
-  // entry dropped.
-  ResetFieldTrials();
-  params["show_offline_pages"] = "false";
-  EXPECT_TRUE(
-      base::AssociateFieldTrialParams("ClientSidePreviews", "Enabled", params));
-  EXPECT_TRUE(
-      base::FieldTrialList::CreateFieldTrial("ClientSidePreviews", "Enabled"));
   DestroyStore();
-  CreateAndLoad();
+  enabled_previews.reset(new PreviewsTypeList);
+  CreateAndLoad(std::move(enabled_previews));
   iter = black_list_map_->find(test_host);
   EXPECT_EQ(black_list_map_->end(), iter);
 
-  // Clean up field trials set in this test.
-  ResetFieldTrials();
 }
 
 TEST_F(PreviewsOptOutStoreSQLTest,
        TestPreviewsVersionUpdateClearsBlacklistEntry) {
   // Tests if data is cleared for new version of previews type.
   // Enable offline previews and add black list entry for it.
-  std::map<std::string, std::string> params;
-  params["show_offline_pages"] = "true";
-  params["version"] = "1";
-  EXPECT_TRUE(
-      base::AssociateFieldTrialParams("ClientSidePreviews", "Enabled", params));
-  EXPECT_TRUE(
-      base::FieldTrialList::CreateFieldTrial("ClientSidePreviews", "Enabled"));
   std::string test_host = "host.com";
-  CreateAndLoad();
+  std::unique_ptr<PreviewsTypeList> enabled_previews(new PreviewsTypeList);
+  enabled_previews->push_back({PreviewsType::OFFLINE, 1});
+  CreateAndLoad(std::move(enabled_previews));
   histogram_tester_.ExpectUniqueSample("Previews.OptOut.DBRowCount", 0, 1);
   base::Time now = base::Time::Now();
   store_->AddPreviewNavigation(true, test_host, PreviewsType::OFFLINE, now);
@@ -335,26 +339,19 @@
   // Force data write to database then reload it and verify black list entry
   // is present.
   DestroyStore();
-  CreateAndLoad();
+  enabled_previews.reset(new PreviewsTypeList);
+  enabled_previews->push_back({PreviewsType::OFFLINE, 1});
+  CreateAndLoad(std::move(enabled_previews));
   auto iter = black_list_map_->find(test_host);
   EXPECT_NE(black_list_map_->end(), iter);
   EXPECT_EQ(1U, iter->second->OptOutRecordsSizeForTesting());
 
-  // Now reload with incremented previews version and verify black list
-  // entry dropped.
-  ResetFieldTrials();
-  params["version"] = "2";
-  EXPECT_TRUE(
-      base::AssociateFieldTrialParams("ClientSidePreviews", "Enabled", params));
-  EXPECT_TRUE(
-      base::FieldTrialList::CreateFieldTrial("ClientSidePreviews", "Enabled"));
   DestroyStore();
-  CreateAndLoad();
+  enabled_previews.reset(new PreviewsTypeList);
+  enabled_previews->push_back({PreviewsType::OFFLINE, 2});
+  CreateAndLoad(std::move(enabled_previews));
   iter = black_list_map_->find(test_host);
   EXPECT_EQ(black_list_map_->end(), iter);
-
-  // Clean up field trials set in this test.
-  ResetFieldTrials();
 }
 
 }  // namespace net
diff --git a/components/previews/core/previews_ui_service.cc b/components/previews/core/previews_ui_service.cc
index af146cc8..44cbb21 100644
--- a/components/previews/core/previews_ui_service.cc
+++ b/components/previews/core/previews_ui_service.cc
@@ -6,7 +6,6 @@
 
 #include "base/bind.h"
 #include "base/single_thread_task_runner.h"
-#include "components/previews/core/previews_io_data.h"
 #include "url/gurl.h"
 
 namespace previews {
@@ -14,10 +13,12 @@
 PreviewsUIService::PreviewsUIService(
     PreviewsIOData* previews_io_data,
     const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner,
-    std::unique_ptr<PreviewsOptOutStore> previews_opt_out_store)
+    std::unique_ptr<PreviewsOptOutStore> previews_opt_out_store,
+    const PreviewsIsEnabledCallback& is_enabled_callback)
     : io_task_runner_(io_task_runner), weak_factory_(this) {
   previews_io_data->Initialize(weak_factory_.GetWeakPtr(),
-                               std::move(previews_opt_out_store));
+                               std::move(previews_opt_out_store),
+                               is_enabled_callback);
 }
 
 PreviewsUIService::~PreviewsUIService() {
diff --git a/components/previews/core/previews_ui_service.h b/components/previews/core/previews_ui_service.h
index 12452bc..85dc8d1 100644
--- a/components/previews/core/previews_ui_service.h
+++ b/components/previews/core/previews_ui_service.h
@@ -13,6 +13,7 @@
 #include "base/threading/thread_checker.h"
 #include "base/time/time.h"
 #include "components/previews/core/previews_experiments.h"
+#include "components/previews/core/previews_io_data.h"
 #include "components/previews/core/previews_opt_out_store.h"
 
 class GURL;
@@ -31,7 +32,8 @@
   PreviewsUIService(
       PreviewsIOData* previews_io_data,
       const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner,
-      std::unique_ptr<PreviewsOptOutStore> previews_opt_out_store);
+      std::unique_ptr<PreviewsOptOutStore> previews_opt_out_store,
+      const PreviewsIsEnabledCallback& is_enabled_callback);
   virtual ~PreviewsUIService();
 
   // Sets |io_data_| to |io_data| to allow calls from the UI thread to the IO
diff --git a/components/previews/core/previews_ui_service_unittest.cc b/components/previews/core/previews_ui_service_unittest.cc
index 57a1bbd..0398ffd 100644
--- a/components/previews/core/previews_ui_service_unittest.cc
+++ b/components/previews/core/previews_ui_service_unittest.cc
@@ -26,7 +26,8 @@
       std::unique_ptr<PreviewsOptOutStore> previews_opt_out_store)
       : PreviewsUIService(previews_io_data,
                           io_task_runner,
-                          std::move(previews_opt_out_store)),
+                          std::move(previews_opt_out_store),
+                          PreviewsIsEnabledCallback()),
         io_data_set_(false) {}
   ~TestPreviewsUIService() override {}
 
diff --git a/content/browser/background_sync/background_sync_browsertest.cc b/content/browser/background_sync/background_sync_browsertest.cc
index 5eca632..c4a1897 100644
--- a/content/browser/background_sync/background_sync_browsertest.cc
+++ b/content/browser/background_sync/background_sync_browsertest.cc
@@ -4,6 +4,7 @@
 
 #include <stdint.h>
 
+#include <memory>
 #include <set>
 #include <string>
 #include <vector>
@@ -73,10 +74,11 @@
     const std::string& tag,
     const base::Callback<void(bool)>& callback,
     BackgroundSyncStatus error_type,
-    std::unique_ptr<ScopedVector<BackgroundSyncRegistration>> registrations) {
+    std::unique_ptr<std::vector<std::unique_ptr<BackgroundSyncRegistration>>>
+        registrations) {
   ASSERT_EQ(BACKGROUND_SYNC_STATUS_OK, error_type);
   // Find the right registration in the list and check its status.
-  for (const BackgroundSyncRegistration* registration : *registrations) {
+  for (const auto& registration : *registrations) {
     if (registration->options()->tag == tag) {
       callback.Run(registration->sync_state() ==
                    blink::mojom::BackgroundSyncState::PENDING);
diff --git a/content/browser/background_sync/background_sync_manager.cc b/content/browser/background_sync/background_sync_manager.cc
index 0e02f1d1..947db225 100644
--- a/content/browser/background_sync/background_sync_manager.cc
+++ b/content/browser/background_sync/background_sync_manager.cc
@@ -216,9 +216,8 @@
         FROM_HERE,
         base::Bind(
             callback, BACKGROUND_SYNC_STATUS_STORAGE_ERROR,
-            base::Passed(
-                std::unique_ptr<ScopedVector<BackgroundSyncRegistration>>(
-                    new ScopedVector<BackgroundSyncRegistration>()))));
+            base::Passed(base::MakeUnique<std::vector<
+                             std::unique_ptr<BackgroundSyncRegistration>>>())));
     return;
   }
 
@@ -789,13 +788,13 @@
     const StatusAndRegistrationsCallback& callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
 
-  std::unique_ptr<ScopedVector<BackgroundSyncRegistration>> out_registrations(
-      new ScopedVector<BackgroundSyncRegistration>());
+  auto out_registrations = base::MakeUnique<
+      std::vector<std::unique_ptr<BackgroundSyncRegistration>>>();
 
   if (disabled_) {
     base::ThreadTaskRunnerHandle::Get()->PostTask(
         FROM_HERE, base::Bind(callback, BACKGROUND_SYNC_STATUS_STORAGE_ERROR,
-                              base::Passed(std::move(out_registrations))));
+                              base::Passed(&out_registrations)));
     return;
   }
 
@@ -807,15 +806,14 @@
     for (const auto& tag_and_registration : registrations.registration_map) {
       const BackgroundSyncRegistration& registration =
           tag_and_registration.second;
-      BackgroundSyncRegistration* out_registration =
-          new BackgroundSyncRegistration(registration);
-      out_registrations->push_back(out_registration);
+      out_registrations->push_back(
+          base::MakeUnique<BackgroundSyncRegistration>(registration));
     }
   }
 
   base::ThreadTaskRunnerHandle::Get()->PostTask(
       FROM_HERE, base::Bind(callback, BACKGROUND_SYNC_STATUS_OK,
-                            base::Passed(std::move(out_registrations))));
+                            base::Passed(&out_registrations)));
 }
 
 bool BackgroundSyncManager::AreOptionConditionsMet(
diff --git a/content/browser/background_sync/background_sync_manager.h b/content/browser/background_sync/background_sync_manager.h
index f31a83a..4743f98 100644
--- a/content/browser/background_sync/background_sync_manager.h
+++ b/content/browser/background_sync/background_sync_manager.h
@@ -17,7 +17,6 @@
 #include "base/callback_forward.h"
 #include "base/cancelable_callback.h"
 #include "base/macros.h"
-#include "base/memory/scoped_vector.h"
 #include "base/memory/weak_ptr.h"
 #include "base/time/clock.h"
 #include "content/browser/background_sync/background_sync.pb.h"
@@ -59,9 +58,10 @@
   using StatusAndRegistrationCallback =
       base::Callback<void(BackgroundSyncStatus,
                           std::unique_ptr<BackgroundSyncRegistration>)>;
-  using StatusAndRegistrationsCallback = base::Callback<void(
-      BackgroundSyncStatus,
-      std::unique_ptr<ScopedVector<BackgroundSyncRegistration>>)>;
+  using StatusAndRegistrationsCallback =
+      base::Callback<void(BackgroundSyncStatus,
+                          std::unique_ptr<std::vector<
+                              std::unique_ptr<BackgroundSyncRegistration>>>)>;
 
   static std::unique_ptr<BackgroundSyncManager> Create(
       scoped_refptr<ServiceWorkerContextWrapper> service_worker_context);
diff --git a/content/browser/background_sync/background_sync_manager_unittest.cc b/content/browser/background_sync/background_sync_manager_unittest.cc
index 7219d1f..429e8bb 100644
--- a/content/browser/background_sync/background_sync_manager_unittest.cc
+++ b/content/browser/background_sync/background_sync_manager_unittest.cc
@@ -8,6 +8,7 @@
 
 #include <memory>
 #include <utility>
+#include <vector>
 
 #include "base/files/scoped_temp_dir.h"
 #include "base/location.h"
@@ -207,7 +208,8 @@
   void StatusAndRegistrationsCallback(
       bool* was_called,
       BackgroundSyncStatus status,
-      std::unique_ptr<ScopedVector<BackgroundSyncRegistration>> registrations) {
+      std::unique_ptr<std::vector<std::unique_ptr<BackgroundSyncRegistration>>>
+          registrations) {
     *was_called = true;
     callback_status_ = status;
     callback_registrations_ = std::move(registrations);
@@ -308,8 +310,8 @@
         if ((*iter)->options()->tag == registration_options.tag) {
           // Transfer the matching registration out of the vector into
           // callback_registration_ for testing.
-          callback_registration_.reset(*iter);
-          callback_registrations_->weak_erase(iter);
+          callback_registration_ = std::move(*iter);
+          callback_registrations_->erase(iter);
           return true;
         }
       }
@@ -425,7 +427,7 @@
   // Callback values.
   BackgroundSyncStatus callback_status_ = BACKGROUND_SYNC_STATUS_OK;
   std::unique_ptr<BackgroundSyncRegistration> callback_registration_;
-  std::unique_ptr<ScopedVector<BackgroundSyncRegistration>>
+  std::unique_ptr<std::vector<std::unique_ptr<BackgroundSyncRegistration>>>
       callback_registrations_;
   ServiceWorkerStatusCode callback_sw_status_code_ = SERVICE_WORKER_OK;
   int sync_events_called_ = 0;
diff --git a/content/browser/background_sync/background_sync_service_impl.cc b/content/browser/background_sync/background_sync_service_impl.cc
index 2bda9e73..2cef89d7 100644
--- a/content/browser/background_sync/background_sync_service_impl.cc
+++ b/content/browser/background_sync/background_sync_service_impl.cc
@@ -146,13 +146,13 @@
 void BackgroundSyncServiceImpl::OnGetRegistrationsResult(
     const GetRegistrationsCallback& callback,
     BackgroundSyncStatus status,
-    std::unique_ptr<ScopedVector<BackgroundSyncRegistration>>
+    std::unique_ptr<std::vector<std::unique_ptr<BackgroundSyncRegistration>>>
         result_registrations) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   DCHECK(result_registrations);
 
   std::vector<blink::mojom::SyncRegistrationPtr> mojo_registrations;
-  for (const BackgroundSyncRegistration* registration : *result_registrations)
+  for (const auto& registration : *result_registrations)
     mojo_registrations.push_back(ToMojoRegistration(*registration));
 
   callback.Run(static_cast<blink::mojom::BackgroundSyncError>(status),
diff --git a/content/browser/background_sync/background_sync_service_impl.h b/content/browser/background_sync/background_sync_service_impl.h
index 29ce8fa3..d31eeb3 100644
--- a/content/browser/background_sync/background_sync_service_impl.h
+++ b/content/browser/background_sync/background_sync_service_impl.h
@@ -7,10 +7,12 @@
 
 #include <stdint.h>
 
+#include <memory>
+#include <vector>
+
 #include "base/id_map.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_vector.h"
 #include "content/browser/background_sync/background_sync_manager.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "third_party/WebKit/public/platform/modules/background_sync/background_sync.mojom.h"
@@ -44,7 +46,8 @@
   void OnGetRegistrationsResult(
       const GetRegistrationsCallback& callback,
       BackgroundSyncStatus status,
-      std::unique_ptr<ScopedVector<BackgroundSyncRegistration>> result);
+      std::unique_ptr<std::vector<std::unique_ptr<BackgroundSyncRegistration>>>
+          result);
 
   // Called when an error is detected on binding_.
   void OnConnectionError();
diff --git a/content/browser/download/download_manager_impl_unittest.cc b/content/browser/download/download_manager_impl_unittest.cc
index 2eeafad..59da8aef 100644
--- a/content/browser/download/download_manager_impl_unittest.cc
+++ b/content/browser/download/download_manager_impl_unittest.cc
@@ -327,7 +327,8 @@
                    const base::FilePath& partition_path, bool in_memory));
 
   // Define these two methods to avoid a
-  // cannot access private member declared in class 'ScopedVector<net::URLRequestInterceptor>'
+  // 'cannot access private member declared in class
+  // URLRequestInterceptorScopedVector'
   // build error if they're put in MOCK_METHOD.
   net::URLRequestContextGetter* CreateRequestContext(
       ProtocolHandlerMap* protocol_handlers,
diff --git a/content/browser/frame_host/navigation_handle_impl.h b/content/browser/frame_host/navigation_handle_impl.h
index 8552ad4..3d62bb76 100644
--- a/content/browser/frame_host/navigation_handle_impl.h
+++ b/content/browser/frame_host/navigation_handle_impl.h
@@ -17,7 +17,6 @@
 #include "base/callback.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_vector.h"
 #include "content/browser/frame_host/frame_tree_node.h"
 #include "content/browser/frame_host/render_frame_host_impl.h"
 #include "content/common/content_export.h"
diff --git a/content/browser/frame_host/navigator_impl.cc b/content/browser/frame_host/navigator_impl.cc
index 722ee0d..44e9cec 100644
--- a/content/browser/frame_host/navigator_impl.cc
+++ b/content/browser/frame_host/navigator_impl.cc
@@ -625,12 +625,12 @@
   }
 
   // Update the site of the SiteInstance if it doesn't have one yet, unless
-  // assigning a site is not necessary for this URL or the commit was for an
-  // error page.  In that case, the SiteInstance can still be considered unused
-  // until a navigation to a real page.
+  // assigning a site is not necessary for this URL.  In that case, the
+  // SiteInstance can still be considered unused until a navigation to a real
+  // page.
   SiteInstanceImpl* site_instance = render_frame_host->GetSiteInstance();
-  if (!site_instance->HasSite() && ShouldAssignSiteForURL(params.url) &&
-      !params.url_is_unreachable) {
+  if (!site_instance->HasSite() &&
+      ShouldAssignSiteForURL(params.url)) {
     site_instance->SetSite(params.url);
   }
 
diff --git a/content/browser/permissions/permission_service_context.h b/content/browser/permissions/permission_service_context.h
index 4caf2bc..c2fc55a 100644
--- a/content/browser/permissions/permission_service_context.h
+++ b/content/browser/permissions/permission_service_context.h
@@ -6,7 +6,6 @@
 #define CONTENT_BROWSER_PERMISSIONS_PERMISSION_SERVICE_CONTEXT_H_
 
 #include "base/macros.h"
-#include "base/memory/scoped_vector.h"
 #include "content/public/browser/permission_type.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
diff --git a/content/browser/plugin_service_impl.h b/content/browser/plugin_service_impl.h
index 3e92d37..9e7a5ef 100644
--- a/content/browser/plugin_service_impl.h
+++ b/content/browser/plugin_service_impl.h
@@ -22,7 +22,6 @@
 #include "base/compiler_specific.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_vector.h"
 #include "base/memory/singleton.h"
 #include "base/sequence_checker.h"
 #include "base/sequenced_task_runner.h"
diff --git a/content/browser/presentation/presentation_service_impl.h b/content/browser/presentation/presentation_service_impl.h
index 4f7dbee..4756840 100644
--- a/content/browser/presentation/presentation_service_impl.h
+++ b/content/browser/presentation/presentation_service_impl.h
@@ -17,7 +17,6 @@
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
 #include "base/memory/linked_ptr.h"
-#include "base/memory/scoped_vector.h"
 #include "base/memory/weak_ptr.h"
 #include "base/optional.h"
 #include "content/common/content_export.h"
diff --git a/content/browser/renderer_host/input/synthetic_gesture_controller.h b/content/browser/renderer_host/input/synthetic_gesture_controller.h
index 5a92f31..770770a3 100644
--- a/content/browser/renderer_host/input/synthetic_gesture_controller.h
+++ b/content/browser/renderer_host/input/synthetic_gesture_controller.h
@@ -8,10 +8,10 @@
 #include <memory>
 #include <queue>
 #include <utility>
+#include <vector>
 
 #include "base/callback.h"
 #include "base/macros.h"
-#include "base/memory/scoped_vector.h"
 #include "base/time/time.h"
 #include "content/browser/renderer_host/input/synthetic_gesture.h"
 #include "content/common/content_export.h"
@@ -67,9 +67,7 @@
       gestures_.erase(gestures_.begin());
       callbacks_.pop();
     }
-    SyntheticGesture* FrontGesture() {
-      return gestures_.front();
-    }
+    SyntheticGesture* FrontGesture() { return gestures_.front().get(); }
     OnGestureCompleteCallback& FrontCallback() {
       return callbacks_.front();
     }
@@ -78,8 +76,10 @@
       return gestures_.empty();
     }
    private:
-    ScopedVector<SyntheticGesture> gestures_;
+    std::vector<std::unique_ptr<SyntheticGesture>> gestures_;
     std::queue<OnGestureCompleteCallback> callbacks_;
+
+    DISALLOW_COPY_AND_ASSIGN(GestureAndCallbackQueue);
   } pending_gesture_queue_;
 
   DISALLOW_COPY_AND_ASSIGN(SyntheticGestureController);
diff --git a/content/browser/renderer_host/media/audio_input_sync_writer.cc b/content/browser/renderer_host/media/audio_input_sync_writer.cc
index 3bed1440..c72b1cd 100644
--- a/content/browser/renderer_host/media/audio_input_sync_writer.cc
+++ b/content/browser/renderer_host/media/audio_input_sync_writer.cc
@@ -63,9 +63,7 @@
     CHECK_EQ(0U, reinterpret_cast<uintptr_t>(ptr) &
         (AudioBus::kChannelAlignment - 1));
     AudioInputBuffer* buffer = reinterpret_cast<AudioInputBuffer*>(ptr);
-    std::unique_ptr<AudioBus> audio_bus =
-        AudioBus::WrapMemory(params, buffer->audio);
-    audio_buses_.push_back(std::move(audio_bus));
+    audio_buses_.push_back(AudioBus::WrapMemory(params, buffer->audio));
     ptr += shared_memory_segment_size_;
   }
 }
@@ -153,8 +151,7 @@
     WriteParametersToCurrentSegment(volume, key_pressed, hardware_delay_bytes);
 
     // Copy data into shared memory using pre-allocated audio buses.
-    AudioBus* audio_bus = audio_buses_[current_segment_id_];
-    data->CopyTo(audio_bus);
+    data->CopyTo(audio_buses_[current_segment_id_].get());
 
     if (!SignalDataWrittenAndUpdateCounters())
       write_error = true;
@@ -291,7 +288,7 @@
 
     // Copy data from the fifo into shared memory using pre-allocated audio
     // buses.
-    (*audio_bus_it)->CopyTo(audio_buses_[current_segment_id_]);
+    (*audio_bus_it)->CopyTo(audio_buses_[current_segment_id_].get());
 
     if (!SignalDataWrittenAndUpdateCounters())
       write_error = true;
diff --git a/content/browser/renderer_host/media/audio_input_sync_writer.h b/content/browser/renderer_host/media/audio_input_sync_writer.h
index 1d883e18..880e49c 100644
--- a/content/browser/renderer_host/media/audio_input_sync_writer.h
+++ b/content/browser/renderer_host/media/audio_input_sync_writer.h
@@ -9,10 +9,11 @@
 #include <stdint.h>
 
 #include <deque>
+#include <memory>
+#include <vector>
 
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
-#include "base/memory/scoped_vector.h"
 #include "base/process/process.h"
 #include "base/sync_socket.h"
 #include "base/time/time.h"
@@ -149,14 +150,14 @@
 
   // Vector of audio buses allocated during construction and deleted in the
   // destructor.
-  ScopedVector<media::AudioBus> audio_buses_;
+  std::vector<std::unique_ptr<media::AudioBus>> audio_buses_;
 
   // Fifo for audio that is used in case there isn't room in the shared memory.
   // This can for example happen under load when the consumer side is starved.
   // It should ideally be rare, but we need to guarantee that the data arrives
   // since audio processing such as echo cancelling requires that to perform
   // properly.
-  ScopedVector<media::AudioBus> overflow_buses_;
+  std::vector<std::unique_ptr<media::AudioBus>> overflow_buses_;
   struct OverflowParams {
     double volume;
     uint32_t hardware_delay_bytes;
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
index 5548729..06761dd 100644
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -333,13 +333,7 @@
   SiteProcessMap() {}
 
   void RegisterProcess(const std::string& site, RenderProcessHost* process) {
-    // There could already exist a site to process mapping due to races between
-    // two WebContents with blank SiteInstances. If that occurs, keeping the
-    // exising entry and not overwriting it is a predictable behavior that is
-    // safe.
-    SiteToProcessMap::iterator i = map_.find(site);
-    if (i == map_.end())
-      map_[site] = process;
+    map_[site] = process;
   }
 
   RenderProcessHost* FindProcess(const std::string& site) {
@@ -1855,7 +1849,6 @@
     cc::switches::kEnableLayerLists,
     cc::switches::kEnableSurfaceSynchronization,
     cc::switches::kEnableTileCompression,
-    cc::switches::kEnableTrueColorRendering,
     cc::switches::kShowCompositedLayerBorders,
     cc::switches::kShowFPSCounter,
     cc::switches::kShowLayerAnimationBounds,
diff --git a/content/browser/renderer_host/render_process_host_unittest.cc b/content/browser/renderer_host/render_process_host_unittest.cc
index 019cae63..3bc7a02e 100644
--- a/content/browser/renderer_host/render_process_host_unittest.cc
+++ b/content/browser/renderer_host/render_process_host_unittest.cc
@@ -5,7 +5,10 @@
 #include <stddef.h>
 
 #include <limits>
+#include <memory>
+#include <vector>
 
+#include "base/memory/ptr_util.h"
 #include "build/build_config.h"
 #include "content/public/common/content_constants.h"
 #include "content/public/test/mock_render_process_host.h"
@@ -50,9 +53,9 @@
 
   // Add dummy process hosts to saturate the limit.
   ASSERT_NE(0u, kMaxRendererProcessCount);
-  ScopedVector<MockRenderProcessHost> hosts;
+  std::vector<std::unique_ptr<MockRenderProcessHost>> hosts;
   for (size_t i = 0; i < kMaxRendererProcessCount; ++i) {
-    hosts.push_back(new MockRenderProcessHost(browser_context()));
+    hosts.push_back(base::MakeUnique<MockRenderProcessHost>(browser_context()));
   }
 
   // Verify that the renderer sharing will happen.
@@ -73,9 +76,9 @@
 
   // Add a few dummy process hosts.
   ASSERT_NE(0u, kMaxRendererProcessCount);
-  ScopedVector<MockRenderProcessHost> hosts;
+  std::vector<std::unique_ptr<MockRenderProcessHost>> hosts;
   for (size_t i = 0; i < kMaxRendererProcessCount; ++i) {
-    hosts.push_back(new MockRenderProcessHost(browser_context()));
+    hosts.push_back(base::MakeUnique<MockRenderProcessHost>(browser_context()));
   }
 
   // Verify that the renderer sharing still won't happen.
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc
index 503ca52..752c352e 100644
--- a/content/browser/renderer_host/render_view_host_impl.cc
+++ b/content/browser/renderer_host/render_view_host_impl.cc
@@ -496,16 +496,12 @@
       command_line.HasSwitch(switches::kMainFrameResizesAreOrientationChanges);
 
   prefs.color_correct_rendering_enabled =
-      command_line.HasSwitch(cc::switches::kEnableColorCorrectRendering) ||
-      command_line.HasSwitch(cc::switches::kEnableTrueColorRendering);
+      command_line.HasSwitch(cc::switches::kEnableColorCorrectRendering);
 
   prefs.color_correct_rendering_default_mode_enabled =
       command_line.HasSwitch(
           switches::kEnableColorCorrectRenderingDefaultMode);
 
-  prefs.true_color_rendering_enabled =
-      command_line.HasSwitch(cc::switches::kEnableTrueColorRendering);
-
   prefs.spatial_navigation_enabled = command_line.HasSwitch(
       switches::kEnableSpatialNavigation);
 
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
index b4dc9e9..732394d 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -1022,7 +1022,6 @@
 void RenderWidgetHostViewAura::ProcessAckedTouchEvent(
     const TouchEventWithLatencyInfo& touch,
     InputEventAckState ack_result) {
-  ScopedVector<ui::TouchEvent> events;
   aura::WindowTreeHost* host = window_->GetHost();
   // |host| is NULL during tests.
   if (!host)
diff --git a/content/browser/tracing/background_tracing_config_impl.cc b/content/browser/tracing/background_tracing_config_impl.cc
index 43db94f..3ce2fab 100644
--- a/content/browser/tracing/background_tracing_config_impl.cc
+++ b/content/browser/tracing/background_tracing_config_impl.cc
@@ -145,11 +145,11 @@
   }
 
   std::unique_ptr<base::ListValue> configs_list(new base::ListValue());
-  for (auto* it : rules_) {
+  for (const auto& rule : rules_) {
     std::unique_ptr<base::DictionaryValue> config_dict(
         new base::DictionaryValue());
-    DCHECK(it);
-    it->IntoDict(config_dict.get());
+    DCHECK(rule);
+    rule->IntoDict(config_dict.get());
     configs_list->Append(std::move(config_dict));
   }
 
diff --git a/content/browser/tracing/background_tracing_config_impl.h b/content/browser/tracing/background_tracing_config_impl.h
index c006958..58ed5e87 100644
--- a/content/browser/tracing/background_tracing_config_impl.h
+++ b/content/browser/tracing/background_tracing_config_impl.h
@@ -5,9 +5,11 @@
 #ifndef CONTENT_BROWSER_TRACING_BACKGROUND_TRACING_CONFIG_IMPL_H_
 #define CONTENT_BROWSER_TRACING_BACKGROUND_TRACING_CONFIG_IMPL_H_
 
+#include <memory>
+#include <vector>
+
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
-#include "base/memory/scoped_vector.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/background_tracing_config.h"
 
@@ -43,7 +45,9 @@
     category_preset_ = category_preset;
   }
 
-  const ScopedVector<BackgroundTracingRule>& rules() const { return rules_; }
+  const std::vector<std::unique_ptr<BackgroundTracingRule>>& rules() const {
+    return rules_;
+  }
   const std::string& scenario_name() const { return scenario_name_; }
   const std::string& enable_blink_features() const {
     return enable_blink_features_;
@@ -76,7 +80,7 @@
                            ValidPreemptiveConfigToString);
 
   CategoryPreset category_preset_;
-  ScopedVector<BackgroundTracingRule> rules_;
+  std::vector<std::unique_ptr<BackgroundTracingRule>> rules_;
   std::string scenario_name_;
   std::string enable_blink_features_;
   std::string disable_blink_features_;
diff --git a/content/browser/tracing/background_tracing_config_unittest.cc b/content/browser/tracing/background_tracing_config_unittest.cc
index aae2971..dadffb3 100644
--- a/content/browser/tracing/background_tracing_config_unittest.cc
+++ b/content/browser/tracing/background_tracing_config_unittest.cc
@@ -50,7 +50,7 @@
   return "";
 }
 
-std::string RuleToString(const BackgroundTracingRule* rule) {
+std::string RuleToString(const std::unique_ptr<BackgroundTracingRule>& rule) {
   std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
 
   rule->IntoDict(dict.get());
diff --git a/content/browser/tracing/background_tracing_manager_impl.cc b/content/browser/tracing/background_tracing_manager_impl.cc
index 4e64d07..51ebefe3 100644
--- a/content/browser/tracing/background_tracing_manager_impl.cc
+++ b/content/browser/tracing/background_tracing_manager_impl.cc
@@ -178,9 +178,9 @@
   requires_anonymized_data_ = requires_anonymized_data;
 
   if (config_) {
-    DCHECK(!config_.get()->rules().empty());
-    for (auto* rule : config_.get()->rules())
-      static_cast<BackgroundTracingRule*>(rule)->Install();
+    DCHECK(!config_->rules().empty());
+    for (const auto& rule : config_->rules())
+      rule->Install();
 
     if (!config_->enable_blink_features().empty()) {
       command_line->AppendSwitchASCII(switches::kEnableBlinkFeatures,
@@ -243,10 +243,9 @@
   }
 
   std::string trigger_name = GetTriggerNameFromHandle(handle);
-  for (auto* rule : config_.get()->rules()) {
-    if (static_cast<BackgroundTracingRule*>(rule)
-            ->ShouldTriggerNamedEvent(trigger_name))
-      return static_cast<BackgroundTracingRule*>(rule);
+  for (const auto& rule : config_->rules()) {
+    if (rule->ShouldTriggerNamedEvent(trigger_name))
+      return rule.get();
   }
 
   return nullptr;
@@ -262,9 +261,9 @@
     return;
   }
 
-  for (auto* rule : config_->rules()) {
+  for (const auto& rule : config_->rules()) {
     if (rule->ShouldTriggerNamedEvent(histogram_name))
-      OnRuleTriggered(rule, StartedFinalizingCallback());
+      OnRuleTriggered(rule.get(), StartedFinalizingCallback());
   }
 }
 
diff --git a/content/common/origin_trials/trial_token_validator.cc b/content/common/origin_trials/trial_token_validator.cc
index 1460fe4..e3130dc 100644
--- a/content/common/origin_trials/trial_token_validator.cc
+++ b/content/common/origin_trials/trial_token_validator.cc
@@ -47,9 +47,8 @@
   if (origin_trial_policy->IsFeatureDisabled(trial_token->feature_name()))
     return blink::WebOriginTrialTokenStatus::FeatureDisabled;
 
-  // TODO(chasej): Add a new status for disabled tokens
   if (origin_trial_policy->IsTokenDisabled(trial_token->signature()))
-    return blink::WebOriginTrialTokenStatus::FeatureDisabled;
+    return blink::WebOriginTrialTokenStatus::TokenDisabled;
 
   *feature_name = trial_token->feature_name();
   return blink::WebOriginTrialTokenStatus::Success;
diff --git a/content/common/origin_trials/trial_token_validator_unittest.cc b/content/common/origin_trials/trial_token_validator_unittest.cc
index a41f386..b82ca80 100644
--- a/content/common/origin_trials/trial_token_validator_unittest.cc
+++ b/content/common/origin_trials/trial_token_validator_unittest.cc
@@ -308,8 +308,7 @@
   EXPECT_EQ(kAppropriateFeatureName, feature);
   // Disable the token; it should no longer be valid
   DisableToken(valid_token_signature_);
-  // TODO(chasej): Add a new status for disabled tokens
-  EXPECT_EQ(blink::WebOriginTrialTokenStatus::FeatureDisabled,
+  EXPECT_EQ(blink::WebOriginTrialTokenStatus::TokenDisabled,
             TrialTokenValidator::ValidateToken(kSampleToken,
                                                appropriate_origin_, &feature));
 }
diff --git a/content/public/android/java/src/org/chromium/content/browser/crypto/OWNERS b/content/public/android/java/src/org/chromium/content/browser/crypto/OWNERS
index fce4c0fa..10a1369 100644
--- a/content/public/android/java/src/org/chromium/content/browser/crypto/OWNERS
+++ b/content/public/android/java/src/org/chromium/content/browser/crypto/OWNERS
@@ -1,3 +1,4 @@
 dfalcantara@chromium.org
 palmer@chromium.org
 
+# COMPONENT: Internals>Core
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/crypto/OWNERS b/content/public/android/javatests/src/org/chromium/content/browser/crypto/OWNERS
index fce4c0fa..10a1369 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/crypto/OWNERS
+++ b/content/public/android/javatests/src/org/chromium/content/browser/crypto/OWNERS
@@ -1,3 +1,4 @@
 dfalcantara@chromium.org
 palmer@chromium.org
 
+# COMPONENT: Internals>Core
diff --git a/content/public/common/common_param_traits_macros.h b/content/public/common/common_param_traits_macros.h
index a7d48d0..1855f19 100644
--- a/content/public/common/common_param_traits_macros.h
+++ b/content/public/common/common_param_traits_macros.h
@@ -191,7 +191,6 @@
   IPC_STRUCT_TRAITS_MEMBER(sync_xhr_in_documents_enabled)
   IPC_STRUCT_TRAITS_MEMBER(color_correct_rendering_enabled)
   IPC_STRUCT_TRAITS_MEMBER(color_correct_rendering_default_mode_enabled)
-  IPC_STRUCT_TRAITS_MEMBER(true_color_rendering_enabled)
   IPC_STRUCT_TRAITS_MEMBER(should_respect_image_orientation)
   IPC_STRUCT_TRAITS_MEMBER(number_of_cpu_cores)
   IPC_STRUCT_TRAITS_MEMBER(editing_behavior)
diff --git a/content/public/common/content_switches.cc b/content/public/common/content_switches.cc
index b06ca7cd..313f2fae 100644
--- a/content/public/common/content_switches.cc
+++ b/content/public/common/content_switches.cc
@@ -357,13 +357,12 @@
 const char kEnableBrowserSideNavigation[]   = "enable-browser-side-navigation";
 
 // Changes the behavior of the "default" color space conversion mode in
-// createImageBitmap. When enabled without kEnableColorCorrectRendering or
-// kEnableTrueColorRendering flags, "default" means color correct the image
-// bitmap to the display color space.
+// createImageBitmap. When enabled without the kEnableColorCorrectRendering
+// flag, "default" means color correct the image bitmap to the display color
+// space.
 const char kEnableColorCorrectRenderingDefaultMode[] =
     "enable-color-correct-rendering-default-mode";
 
-
 // Enables display list based 2d canvas implementation. Options:
 //  1. Enable: allow browser to use display list for 2d canvas (browser makes
 //     decision).
diff --git a/content/public/common/web_preferences.h b/content/public/common/web_preferences.h
index ba18988..dcb00ef 100644
--- a/content/public/common/web_preferences.h
+++ b/content/public/common/web_preferences.h
@@ -171,7 +171,6 @@
   bool sync_xhr_in_documents_enabled;
   bool color_correct_rendering_enabled = false;
   bool color_correct_rendering_default_mode_enabled = false;
-  bool true_color_rendering_enabled = false;
   bool should_respect_image_orientation;
   int number_of_cpu_cores;
   EditingBehavior editing_behavior;
diff --git a/content/renderer/gpu/render_widget_compositor.cc b/content/renderer/gpu/render_widget_compositor.cc
index 8dadd144..ff45901 100644
--- a/content/renderer/gpu/render_widget_compositor.cc
+++ b/content/renderer/gpu/render_widget_compositor.cc
@@ -330,8 +330,7 @@
   settings.renderer_settings.use_gpu_memory_buffer_resources =
       compositor_deps->IsGpuMemoryBufferCompositorResourcesEnabled();
   settings.enable_color_correct_rasterization =
-      cmd.HasSwitch(cc::switches::kEnableColorCorrectRendering) ||
-      cmd.HasSwitch(cc::switches::kEnableTrueColorRendering);
+      cmd.HasSwitch(cc::switches::kEnableColorCorrectRendering);
   settings.renderer_settings.buffer_to_texture_target_map =
       compositor_deps->GetBufferToTextureTargetMap();
   settings.image_decode_tasks_enabled =
diff --git a/content/renderer/media/peer_connection_tracker.cc b/content/renderer/media/peer_connection_tracker.cc
index bfa8b6f2..49ff5c4 100644
--- a/content/renderer/media/peer_connection_tracker.cc
+++ b/content/renderer/media/peer_connection_tracker.cc
@@ -173,6 +173,19 @@
   return policy_str;
 }
 
+static std::string SerializeConfiguration(
+    const webrtc::PeerConnectionInterface::RTCConfiguration& config) {
+  std::ostringstream oss;
+  // TODO(hbos): Add serialization of certificate.
+  oss << "{ iceServers: " << SerializeServers(config.servers) << ", "
+      << "iceTransportPolicy: " << SerializeIceTransportType(config.type)
+      << ", "
+      << "bundlePolicy: " << SerializeBundlePolicy(config.bundle_policy) << ", "
+      << "rtcpMuxPolicy: " << SerializeRtcpMuxPolicy(config.rtcp_mux_policy)
+      << "iceCandidatePoolSize: " << config.ice_candidate_pool_size << " }";
+  return oss.str();
+}
+
 #define GET_STRING_OF_STATE(state)                \
   case WebRTCPeerConnectionHandlerClient::state:  \
     result = #state;                              \
@@ -428,11 +441,7 @@
   PeerConnectionInfo info;
 
   info.lid = GetNextLocalID();
-  info.rtc_configuration =
-      "{ iceServers: " +  SerializeServers(config.servers) + ", " +
-      "iceTransportPolicy: " + SerializeIceTransportType(config.type) + ", " +
-      "bundlePolicy: " + SerializeBundlePolicy(config.bundle_policy) + ", " +
-      "rtcpMuxPolicy: " + SerializeRtcpMuxPolicy(config.rtcp_mux_policy) + " }";
+  info.rtc_configuration = SerializeConfiguration(config);
 
   info.constraints = SerializeMediaConstraints(constraints);
   if (frame)
@@ -532,14 +541,8 @@
   if (id == -1)
     return;
 
-  std::ostringstream result;
-  result << "servers: " << SerializeServers(config.servers)
-         << "iceTransportType: " << SerializeIceTransportType(config.type)
-         << "bundlePolicy: " << SerializeBundlePolicy(config.bundle_policy)
-         << "rtcpMuxPolicy: " << SerializeRtcpMuxPolicy(config.rtcp_mux_policy)
-         << "}";
-
-  SendPeerConnectionUpdate(id, "setConfiguration", result.str());
+  SendPeerConnectionUpdate(id, "setConfiguration",
+                           SerializeConfiguration(config));
 }
 
 void PeerConnectionTracker::TrackAddIceCandidate(
diff --git a/content/renderer/media/rtc_peer_connection_handler.cc b/content/renderer/media/rtc_peer_connection_handler.cc
index 64ecb993..3240a7a 100644
--- a/content/renderer/media/rtc_peer_connection_handler.cc
+++ b/content/renderer/media/rtc_peer_connection_handler.cc
@@ -298,6 +298,8 @@
         static_cast<RTCCertificate*>(blink_certificate.get())
             ->rtcCertificate());
   }
+
+  webrtc_config->ice_candidate_pool_size = blink_config.iceCandidatePoolSize;
 }
 
 void CopyConstraintsIntoRtcConfiguration(
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 607afe6f2..6c053bb 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -3172,9 +3172,7 @@
   Send(new FrameHostMsg_FrameFocused(routing_id_));
 }
 
-void RenderFrameImpl::willCommitProvisionalLoad(blink::WebLocalFrame* frame) {
-  DCHECK_EQ(frame_, frame);
-
+void RenderFrameImpl::willCommitProvisionalLoad() {
   for (auto& observer : observers_)
     observer.WillCommitProvisionalLoad();
 }
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 171d03f..d5f7360 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -510,7 +510,7 @@
   void didChangeOpener(blink::WebFrame* frame) override;
   void frameDetached(blink::WebLocalFrame* frame, DetachType type) override;
   void frameFocused() override;
-  void willCommitProvisionalLoad(blink::WebLocalFrame* frame) override;
+  void willCommitProvisionalLoad() override;
   void didChangeName(const blink::WebString& name,
                      const blink::WebString& unique_name) override;
   void didEnforceInsecureRequestPolicy(
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index eedbd517..89b4592 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -968,9 +968,6 @@
   WebRuntimeFeatures::enableColorCorrectRenderingDefaultMode(
       prefs.color_correct_rendering_default_mode_enabled);
 
-  WebRuntimeFeatures::enableTrueColorRendering(
-      prefs.true_color_rendering_enabled);
-
   settings->setShouldRespectImageOrientation(
       prefs.should_respect_image_orientation);
 
diff --git a/content/test/data/media/peerconnection-setConfiguration.html b/content/test/data/media/peerconnection-setConfiguration.html
index 9bf30de..8a896c1 100644
--- a/content/test/data/media/peerconnection-setConfiguration.html
+++ b/content/test/data/media/peerconnection-setConfiguration.html
@@ -22,7 +22,12 @@
   function testSetConfiguration() {
     gPeerConnection = new RTCPeerConnection(
         {iceServers:[], iceTransportPolicy:'all', bundlePolicy:'balanced',
-         rtcpMuxPolicy:'require', certificates:[]});
+         rtcpMuxPolicy:'require', certificates:[], iceCandidatePoolSize:0});
+    // Change ICE candidate pool size, which will succeed before
+    // setLocalDescription is called.
+    gPeerConnection.setConfiguration(
+        {iceServers:[], iceTransportPolicy:'all', bundlePolicy:'balanced',
+         rtcpMuxPolicy:'require', certificates:[], iceCandidatePoolSize:1});
     // Now test successful cases of setConfiguration. Changes should trigger an
     // ICE restart in the next offer. To do this, first we need to trigger an
     // initial ICE gathering phase and wait until it completes.
@@ -38,7 +43,7 @@
       // Policy changed.
       gPeerConnection.setConfiguration(
           {iceServers:[], iceTransportPolicy:'relay', bundlePolicy:'balanced',
-           rtcpMuxPolicy:'require', certificates:[]});
+           rtcpMuxPolicy:'require', certificates:[], iceCandidatePoolSize:1});
       createOfferAndSetLocalDescription();
     }
   }
@@ -49,7 +54,8 @@
       // Servers changed.
       gPeerConnection.setConfiguration(
           {iceServers:[{urls:'stun:foo.invalid'}], iceTransportPolicy:'all',
-           bundlePolicy:'balanced', rtcpMuxPolicy:'require', certificates:[]});
+           bundlePolicy:'balanced', rtcpMuxPolicy:'require', certificates:[],
+           iceCandidatePoolSize:1});
       createOfferAndSetLocalDescription();
     }
   }
@@ -80,13 +86,13 @@
   function continueTestSetConfigurationErrors() {
     gPeerConnection = new RTCPeerConnection(
         {iceServers:[], iceTransportPolicy:'all', bundlePolicy:'balanced',
-         rtcpMuxPolicy:'require', certificates:[]});
+         rtcpMuxPolicy:'require', certificates:[], iceCandidatePoolSize:1});
     // If bundlePolicy, rtcpMuxPolicy or certificates are changed, an
     // InvalidModificationError should be thrown.
     assertThrows(gPeerConnection.setConfiguration,
                  {iceServers:[], iceTransportPolicy:'all',
                   bundlePolicy:'max-bundle', rtcpMuxPolicy:'require',
-                  certificates:[]});
+                  certificates:[], iceCandidatePoolSize:1});
     assertThrows(gPeerConnection.setConfiguration,
                  {iceServers:[], iceTransportPolicy:'all',
                   bundlePolicy:'balanced', rtcpMuxPolicy:'negotiate',
@@ -94,23 +100,46 @@
     assertThrows(gPeerConnection.setConfiguration,
                  {iceServers:[], iceTransportPolicy:'all',
                   bundlePolicy:'balanced', rtcpMuxPolicy:'require',
-                  certificates:[gCertificate]});
+                  certificates:[gCertificate], iceCandidatePoolSize:1});
     // Failure to parse URL should result in SyntaxError.
     assertThrows(gPeerConnection.setConfiguration,
                  {iceServers:[{url:'stunnnn:foo.invalid'}],
                   iceTransportPolicy:'all', bundlePolicy:'max-bundle',
-                  rtcpMuxPolicy:'require', certificates:[]});
+                  rtcpMuxPolicy:'require', certificates:[],
+                  iceCandidatePoolSize:1});
     // TURN server with missing username should result in InvalidAccessError.
     assertThrows(gPeerConnection.setConfiguration,
                  {iceServers:[{url:'turn:foo.invalid'}],
                   iceTransportPolicy:'all', bundlePolicy:'max-bundle',
-                  rtcpMuxPolicy:'require', certificates:[]});
+                  rtcpMuxPolicy:'require', certificates:[],
+                  iceCandidatePoolSize:1});
     // Sanity check that a configuration can be successfully set, and thus
     // there's not something unexpected causing the above exceptions.
     gPeerConnection.setConfiguration(
         {iceServers:[], iceTransportPolicy:'all', bundlePolicy:'balanced',
-         rtcpMuxPolicy:'require', certificates:[]});
-    reportTestSuccess();
+         rtcpMuxPolicy:'require', certificates:[], iceCandidatePoolSize:1});
+    // Lastly: only after applying a local description, changing the candidate
+    // pool size is not allowed.
+    gPeerConnection.createOffer({offerToReceiveAudio:1})
+      .then(function(offer) {
+        console.log("Setting offer:\n" + offer.sdp);
+        gPeerConnection.setLocalDescription(offer).then(
+          function() {
+            // Pool size absent, which means it should default to 0, which is
+            // different than its current value of 1.
+            assertThrows(gPeerConnection.setConfiguration,
+                         {iceServers:[], iceTransportPolicy:'all',
+                          bundlePolicy:'balanced', rtcpMuxPolicy:'require',
+                          certificates:[]});
+            reportTestSuccess();
+          },
+          function() { failTest('Failed to set local description.') }
+        );
+        },
+        function() {
+          failTest('Failed to generate offer.')
+        }
+      );
   }
 
   function assertThrows(func) {
diff --git a/docs/optional.md b/docs/optional.md
index dd028f1..70c9efb 100644
--- a/docs/optional.md
+++ b/docs/optional.md
@@ -63,10 +63,10 @@
 opt_1 == base::nullopt_t; // false
 ```
 
-`base::Optional<T>` has a helper function `make_optional<T&&>`:
+`base::Optional<T>` has a helper function `base::make_optional<T&&>`:
 
 ```C++
-base::Optional<int> opt = make_optional<int>(GetMagicNumber());
+base::Optional<int> opt = base::make_optional<int>(GetMagicNumber());
 ```
 
 Finally, `base::Optional<T>` is integrated with `std::hash`, using
diff --git a/gpu/command_buffer/client/client_test_helper.h b/gpu/command_buffer/client/client_test_helper.h
index 31756c35..f806fbb 100644
--- a/gpu/command_buffer/client/client_test_helper.h
+++ b/gpu/command_buffer/client/client_test_helper.h
@@ -117,7 +117,8 @@
   MOCK_METHOD1(IsFenceSyncReleased, bool(uint64_t release));
   MOCK_METHOD2(SignalSyncToken, void(const SyncToken& sync_token,
                                      const base::Closure& callback));
-  MOCK_METHOD1(CanWaitUnverifiedSyncToken, bool(const SyncToken*));
+  MOCK_METHOD1(WaitSyncTokenHint, void(const SyncToken&));
+  MOCK_METHOD1(CanWaitUnverifiedSyncToken, bool(const SyncToken&));
 
  private:
   DISALLOW_COPY_AND_ASSIGN(MockClientGpuControl);
diff --git a/gpu/command_buffer/client/context_support.h b/gpu/command_buffer/client/context_support.h
index ceba6896..53b33c8 100644
--- a/gpu/command_buffer/client/context_support.h
+++ b/gpu/command_buffer/client/context_support.h
@@ -27,9 +27,9 @@
   virtual void SignalSyncToken(const SyncToken& sync_token,
                                const base::Closure& callback) = 0;
 
-  // Returns true if the given sync token has been signalled. The sync token
-  // must belong to this context. This may be called from any thread.
-  virtual bool IsSyncTokenSignalled(const SyncToken& sync_token) = 0;
+  // Returns true if the given sync token has been signaled. The sync token must
+  // belong to this context. This may be called from any thread.
+  virtual bool IsSyncTokenSignaled(const SyncToken& sync_token) = 0;
 
   // Runs |callback| when a query created via glCreateQueryEXT() has cleared
   // passed the glEndQueryEXT() point.
diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc
index a309b258..fde1339 100644
--- a/gpu/command_buffer/client/gles2_implementation.cc
+++ b/gpu/command_buffer/client/gles2_implementation.cc
@@ -376,21 +376,14 @@
 
 void GLES2Implementation::SignalSyncToken(const gpu::SyncToken& sync_token,
                                           const base::Closure& callback) {
+  SyncToken verified_sync_token;
   if (sync_token.HasData() &&
-      (sync_token.verified_flush() ||
-       gpu_control_->CanWaitUnverifiedSyncToken(&sync_token))) {
-
-    gpu::SyncToken intermediate_sync_token = sync_token;
-
-    // Mark the intermediate sync token as verified if we can wait on
-    // unverified sync tokens.
-    intermediate_sync_token.SetVerifyFlush();
-
+      GetVerifiedSyncTokenForIPC(sync_token, &verified_sync_token)) {
+    // We can only send verified sync tokens across IPC.
     gpu_control_->SignalSyncToken(
-        intermediate_sync_token,
+        verified_sync_token,
         base::Bind(&GLES2Implementation::RunIfContextNotLost,
-                   weak_ptr_factory_.GetWeakPtr(),
-                   callback));
+                   weak_ptr_factory_.GetWeakPtr(), callback));
   } else {
     // Invalid sync token, just call the callback immediately.
     callback.Run();
@@ -399,7 +392,7 @@
 
 // This may be called from any thread. It's safe to access gpu_control_ without
 // the lock because it is const.
-bool GLES2Implementation::IsSyncTokenSignalled(
+bool GLES2Implementation::IsSyncTokenSignaled(
     const gpu::SyncToken& sync_token) {
   // Check that the sync token belongs to this context.
   DCHECK_EQ(gpu_control_->GetNamespaceID(), sync_token.namespace_id());
@@ -6127,15 +6120,15 @@
 void GLES2Implementation::GenUnverifiedSyncTokenCHROMIUM(GLuint64 fence_sync,
                                                          GLbyte* sync_token) {
   if (!sync_token) {
-    SetGLError(GL_INVALID_VALUE, "glGenNonFlushedSyncTokenCHROMIUM",
+    SetGLError(GL_INVALID_VALUE, "glGenUnverifiedSyncTokenCHROMIUM",
                "empty sync_token");
     return;
   } else if (!gpu_control_->IsFenceSyncRelease(fence_sync)) {
-    SetGLError(GL_INVALID_VALUE, "glGenNonFlushedSyncTokenCHROMIUM",
+    SetGLError(GL_INVALID_VALUE, "glGenUnverifiedSyncTokenCHROMIUM",
                "invalid fence sync");
     return;
   } else if (!gpu_control_->IsFenceSyncFlushed(fence_sync)) {
-    SetGLError(GL_INVALID_OPERATION, "glGenSyncTokenCHROMIUM",
+    SetGLError(GL_INVALID_OPERATION, "glGenUnverifiedSyncTokenCHROMIUM",
                "fence sync must be flushed before generating sync token");
     return;
   }
@@ -6156,12 +6149,14 @@
       memcpy(&sync_token, sync_tokens[i], sizeof(sync_token));
 
       if (sync_token.HasData() && !sync_token.verified_flush()) {
-        if (!gpu_control_->CanWaitUnverifiedSyncToken(&sync_token)) {
+        if (!GetVerifiedSyncTokenForIPC(sync_token, &sync_token)) {
           SetGLError(GL_INVALID_VALUE, "glVerifySyncTokensCHROMIUM",
                      "Cannot verify sync token using this context.");
           return;
         }
         requires_synchronization = true;
+        DCHECK(sync_token.verified_flush());
+        memcpy(sync_tokens[i], &sync_token, sizeof(sync_token));
       }
     }
   }
@@ -6172,43 +6167,51 @@
   if (requires_synchronization) {
     // Make sure we have no pending ordering barriers by flushing now.
     FlushHelper();
-
     // Ensure all the fence syncs are visible on GPU service.
     gpu_control_->EnsureWorkVisible();
-
-    // We can automatically mark everything as verified now.
-    for (GLsizei i = 0; i < count; ++i) {
-      if (sync_tokens[i]) {
-        SyncToken sync_token;
-        memcpy(&sync_token, sync_tokens[i], sizeof(sync_token));
-        if (sync_token.HasData() && !sync_token.verified_flush()) {
-          sync_token.SetVerifyFlush();
-          memcpy(sync_tokens[i], &sync_token, sizeof(sync_token));
-        }
-      }
-    }
   }
 }
 
-void GLES2Implementation::WaitSyncTokenCHROMIUM(const GLbyte* sync_token) {
-  if (sync_token) {
-    // Copy the data over before data access to ensure alignment.
-    SyncToken sync_token_data;
-    memcpy(&sync_token_data, sync_token, sizeof(SyncToken));
-    if (sync_token_data.HasData()) {
-      if (!sync_token_data.verified_flush() &&
-          !gpu_control_->CanWaitUnverifiedSyncToken(&sync_token_data)) {
-        SetGLError(GL_INVALID_VALUE, "glWaitSyncTokenCHROMIUM",
-                   "Cannot wait on sync_token which has not been verified");
-        return;
-      }
+void GLES2Implementation::WaitSyncTokenCHROMIUM(const GLbyte* sync_token_data) {
+  if (!sync_token_data)
+    return;
 
-      helper_->WaitSyncTokenCHROMIUM(
-          static_cast<GLint>(sync_token_data.namespace_id()),
-          sync_token_data.command_buffer_id().GetUnsafeValue(),
-          sync_token_data.release_count());
-    }
+  // Copy the data over before data access to ensure alignment.
+  SyncToken sync_token, verified_sync_token;
+  memcpy(&sync_token, sync_token_data, sizeof(SyncToken));
+
+  if (!sync_token.HasData())
+    return;
+
+  if (!GetVerifiedSyncTokenForIPC(sync_token, &verified_sync_token)) {
+    SetGLError(GL_INVALID_VALUE, "glWaitSyncTokenCHROMIUM",
+               "Cannot wait on sync_token which has not been verified");
+    return;
   }
+
+  helper_->WaitSyncTokenCHROMIUM(
+      static_cast<GLint>(sync_token.namespace_id()),
+      sync_token.command_buffer_id().GetUnsafeValue(),
+      sync_token.release_count());
+
+  // Enqueue sync token in flush after inserting command so that it's not
+  // included in an automatic flush.
+  gpu_control_->WaitSyncTokenHint(verified_sync_token);
+}
+
+bool GLES2Implementation::GetVerifiedSyncTokenForIPC(
+    const SyncToken& sync_token,
+    SyncToken* verified_sync_token) {
+  DCHECK(sync_token.HasData());
+  DCHECK(verified_sync_token);
+
+  if (!sync_token.verified_flush() &&
+      !gpu_control_->CanWaitUnverifiedSyncToken(sync_token))
+    return false;
+
+  *verified_sync_token = sync_token;
+  verified_sync_token->SetVerifyFlush();
+  return true;
 }
 
 namespace {
diff --git a/gpu/command_buffer/client/gles2_implementation.h b/gpu/command_buffer/client/gles2_implementation.h
index a0f2d12..25bbd9eb 100644
--- a/gpu/command_buffer/client/gles2_implementation.h
+++ b/gpu/command_buffer/client/gles2_implementation.h
@@ -251,10 +251,14 @@
   // ContextSupport implementation.
   void SignalSyncToken(const gpu::SyncToken& sync_token,
                        const base::Closure& callback) override;
-  bool IsSyncTokenSignalled(const gpu::SyncToken& sync_token) override;
+  bool IsSyncTokenSignaled(const gpu::SyncToken& sync_token) override;
   void SignalQuery(uint32_t query, const base::Closure& callback) override;
   void SetAggressivelyFreeResources(bool aggressively_free_resources) override;
 
+  // Helper to set verified bit on sync token if allowed by gpu control.
+  bool GetVerifiedSyncTokenForIPC(const gpu::SyncToken& sync_token,
+                                  gpu::SyncToken* verified_sync_token);
+
   // base::trace_event::MemoryDumpProvider implementation.
   bool OnMemoryDump(const base::trace_event::MemoryDumpArgs& args,
                     base::trace_event::ProcessMemoryDump* pmd) override;
diff --git a/gpu/command_buffer/client/gles2_implementation_unittest.cc b/gpu/command_buffer/client/gles2_implementation_unittest.cc
index 48484912..f193dc5 100644
--- a/gpu/command_buffer/client/gles2_implementation_unittest.cc
+++ b/gpu/command_buffer/client/gles2_implementation_unittest.cc
@@ -4087,7 +4087,7 @@
   ASSERT_FALSE(sync_token.verified_flush());
 
   ClearCommands();
-  EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(_))
+  EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(sync_token))
       .WillOnce(Return(false));
   gl_->VerifySyncTokensCHROMIUM(sync_token_datas, 1);
   EXPECT_TRUE(NoCommandsWritten());
@@ -4095,7 +4095,7 @@
   EXPECT_FALSE(sync_token.verified_flush());
 
   ClearCommands();
-  EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(_))
+  EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(sync_token))
       .WillOnce(Return(true));
   EXPECT_CALL(*gpu_control_, EnsureWorkVisible());
   gl_->VerifySyncTokensCHROMIUM(sync_token_datas, arraysize(sync_token_datas));
@@ -4154,10 +4154,10 @@
 
   // Ensure proper sequence of checking and validating.
   Sequence sequence;
-  EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(Pointee(sync_token1)))
+  EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(sync_token1))
       .InSequence(sequence)
       .WillOnce(Return(true));
-  EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(Pointee(sync_token2)))
+  EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(sync_token2))
       .InSequence(sequence)
       .WillOnce(Return(true));
   EXPECT_CALL(*gpu_control_, EnsureWorkVisible())
@@ -4171,11 +4171,12 @@
 }
 
 TEST_F(GLES2ImplementationTest, WaitSyncTokenCHROMIUM) {
-  const CommandBufferNamespace kNamespaceId = CommandBufferNamespace::GPU_IO;
-  const CommandBufferId kCommandBufferId =
-      CommandBufferId::FromUnsafeValue(234u);
-  const GLuint64 kFenceSync = 456u;
-  GLbyte sync_token[GL_SYNC_TOKEN_SIZE_CHROMIUM];
+  CommandBufferNamespace kNamespaceId = CommandBufferNamespace::GPU_IO;
+  CommandBufferId kCommandBufferId = CommandBufferId::FromUnsafeValue(234u);
+  GLuint64 kFenceSync = 456u;
+
+  gpu::SyncToken sync_token;
+  GLbyte* sync_token_data = sync_token.GetData();
 
   EXPECT_CALL(*gpu_control_, IsFenceSyncRelease(kFenceSync))
       .WillOnce(Return(true));
@@ -4185,7 +4186,7 @@
   EXPECT_CALL(*gpu_control_, GetCommandBufferID())
       .WillOnce(Return(kCommandBufferId));
   EXPECT_CALL(*gpu_control_, GetExtraCommandBufferData()).WillOnce(Return(0));
-  gl_->GenSyncTokenCHROMIUM(kFenceSync, sync_token);
+  gl_->GenSyncTokenCHROMIUM(kFenceSync, sync_token_data);
 
   struct Cmds {
     cmds::WaitSyncTokenCHROMIUM wait_sync_token;
@@ -4194,7 +4195,8 @@
   expected.wait_sync_token.Init(kNamespaceId, kCommandBufferId.GetUnsafeValue(),
                                 kFenceSync);
 
-  gl_->WaitSyncTokenCHROMIUM(sync_token);
+  EXPECT_CALL(*gpu_control_, WaitSyncTokenHint(sync_token));
+  gl_->WaitSyncTokenCHROMIUM(sync_token_data);
   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
 }
 
@@ -4222,7 +4224,7 @@
   ClearCommands();
   gpu::SyncToken unverified_sync_token(CommandBufferNamespace::GPU_IO, 0,
                                        gpu::CommandBufferId(), 0);
-  EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(_))
+  EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(unverified_sync_token))
       .WillOnce(Return(false));
   gl_->WaitSyncTokenCHROMIUM(unverified_sync_token.GetConstData());
   EXPECT_TRUE(NoCommandsWritten());
diff --git a/gpu/command_buffer/client/gpu_control.h b/gpu/command_buffer/client/gpu_control.h
index 6b7bdd5..519712e 100644
--- a/gpu/command_buffer/client/gpu_control.h
+++ b/gpu/command_buffer/client/gpu_control.h
@@ -98,15 +98,22 @@
   // the lock provided by the client.
   virtual bool IsFenceSyncReleased(uint64_t release) = 0;
 
-  // Runs |callback| when sync token is signalled.
+  // Runs |callback| when sync token is signaled.
   virtual void SignalSyncToken(const SyncToken& sync_token,
                                const base::Closure& callback) = 0;
 
+  // This allows the command buffer proxy to mark the next flush with sync token
+  // dependencies for the gpu scheduler. This is used in addition to the
+  // WaitSyncToken command in the command buffer which is still needed. For
+  // example, the WaitSyncToken command is used to pull texture updates when
+  // used in conjunction with MailboxManagerSync.
+  virtual void WaitSyncTokenHint(const SyncToken& sync_token) = 0;
+
   // Under some circumstances a sync token may be used which has not been
-  // verified to have been flushed. For example, fence syncs queued on the
-  // same channel as the wait command guarantee that the fence sync will
-  // be enqueued first so does not need to be flushed.
-  virtual bool CanWaitUnverifiedSyncToken(const SyncToken* sync_token) = 0;
+  // verified to have been flushed. For example, fence syncs queued on the same
+  // channel as the wait command guarantee that the fence sync will be enqueued
+  // first so does not need to be flushed.
+  virtual bool CanWaitUnverifiedSyncToken(const SyncToken& sync_token) = 0;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(GpuControl);
diff --git a/gpu/command_buffer/common/sync_token.h b/gpu/command_buffer/common/sync_token.h
index 6a6bfad2..990f0c9 100644
--- a/gpu/command_buffer/common/sync_token.h
+++ b/gpu/command_buffer/common/sync_token.h
@@ -8,6 +8,8 @@
 #include <stdint.h>
 #include <string.h>
 
+#include <tuple>
+
 #include "gpu/command_buffer/common/command_buffer_id.h"
 #include "gpu/command_buffer/common/constants.h"
 #include "gpu/gpu_export.h"
@@ -77,13 +79,9 @@
   int32_t extra_data_field() const { return extra_data_field_; }
 
   bool operator<(const SyncToken& other) const {
-    // TODO(dyen): Once all our compilers support c++11, we can replace this
-    // long list of comparisons with std::tie().
-    return (namespace_id_ < other.namespace_id()) ||
-           ((namespace_id_ == other.namespace_id()) &&
-            ((command_buffer_id_ < other.command_buffer_id()) ||
-             ((command_buffer_id_ == other.command_buffer_id()) &&
-              (release_count_ < other.release_count()))));
+    return std::tie(namespace_id_, command_buffer_id_, release_count_) <
+           std::tie(other.namespace_id_, other.command_buffer_id_,
+                    other.release_count_);
   }
 
   bool operator==(const SyncToken& other) const {
diff --git a/gpu/command_buffer/tests/gl_ext_multisample_compatibility_unittest.cc b/gpu/command_buffer/tests/gl_ext_multisample_compatibility_unittest.cc
index b618ecc..608735a 100644
--- a/gpu/command_buffer/tests/gl_ext_multisample_compatibility_unittest.cc
+++ b/gpu/command_buffer/tests/gl_ext_multisample_compatibility_unittest.cc
@@ -13,6 +13,7 @@
 #include "gpu/command_buffer/tests/gl_test_utils.h"
 #include "gpu/config/gpu_test_config.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gl/gl_context.h"
 
 #define SHADER0(Src) #Src
 
@@ -197,8 +198,8 @@
 
 #if defined(OS_ANDROID)
   // TODO: Figure out why this fails on NVIDIA Shield. crbug.com/700060.
-  std::string renderer(reinterpret_cast<const char*>(glGetString(GL_RENDERER)));
-  std::string version(reinterpret_cast<const char*>(glGetString(GL_VERSION)));
+  std::string renderer(gl_.context()->GetGLRenderer());
+  std::string version(gl_.context()->GetGLVersion());
   if (renderer.find("NVIDIA Tegra") != std::string::npos &&
       version.find("OpenGL ES 3.2 NVIDIA 361.00") != std::string::npos)
     return;
diff --git a/gpu/command_buffer/tests/gl_manager.cc b/gpu/command_buffer/tests/gl_manager.cc
index 06b238d..9ad1017c 100644
--- a/gpu/command_buffer/tests/gl_manager.cc
+++ b/gpu/command_buffer/tests/gl_manager.cc
@@ -621,7 +621,9 @@
   }
 }
 
-bool GLManager::CanWaitUnverifiedSyncToken(const gpu::SyncToken* sync_token) {
+void GLManager::WaitSyncTokenHint(const gpu::SyncToken& sync_token) {}
+
+bool GLManager::CanWaitUnverifiedSyncToken(const gpu::SyncToken& sync_token) {
   return false;
 }
 
diff --git a/gpu/command_buffer/tests/gl_manager.h b/gpu/command_buffer/tests/gl_manager.h
index b8877d61..073b56a1 100644
--- a/gpu/command_buffer/tests/gl_manager.h
+++ b/gpu/command_buffer/tests/gl_manager.h
@@ -146,7 +146,8 @@
   bool IsFenceSyncReleased(uint64_t release) override;
   void SignalSyncToken(const gpu::SyncToken& sync_token,
                        const base::Closure& callback) override;
-  bool CanWaitUnverifiedSyncToken(const gpu::SyncToken* sync_token) override;
+  void WaitSyncTokenHint(const gpu::SyncToken& sync_token) override;
+  bool CanWaitUnverifiedSyncToken(const gpu::SyncToken& sync_token) override;
 
  private:
   void PumpCommands();
diff --git a/gpu/gles2_conform_support/egl/context.cc b/gpu/gles2_conform_support/egl/context.cc
index 6b71251..f617144c 100644
--- a/gpu/gles2_conform_support/egl/context.cc
+++ b/gpu/gles2_conform_support/egl/context.cc
@@ -223,7 +223,9 @@
   NOTIMPLEMENTED();
 }
 
-bool Context::CanWaitUnverifiedSyncToken(const gpu::SyncToken* sync_token) {
+void Context::WaitSyncTokenHint(const gpu::SyncToken& sync_token) {}
+
+bool Context::CanWaitUnverifiedSyncToken(const gpu::SyncToken& sync_token) {
   return false;
 }
 
diff --git a/gpu/gles2_conform_support/egl/context.h b/gpu/gles2_conform_support/egl/context.h
index cff59766..7a9d435 100644
--- a/gpu/gles2_conform_support/egl/context.h
+++ b/gpu/gles2_conform_support/egl/context.h
@@ -76,7 +76,8 @@
   bool IsFenceSyncReleased(uint64_t release) override;
   void SignalSyncToken(const gpu::SyncToken& sync_token,
                        const base::Closure& callback) override;
-  bool CanWaitUnverifiedSyncToken(const gpu::SyncToken* sync_token) override;
+  void WaitSyncTokenHint(const gpu::SyncToken& sync_token) override;
+  bool CanWaitUnverifiedSyncToken(const gpu::SyncToken& sync_token) override;
 
   // Called by ThreadState to set the needed global variables when this context
   // is current.
diff --git a/gpu/ipc/client/command_buffer_proxy_impl.cc b/gpu/ipc/client/command_buffer_proxy_impl.cc
index 233df39..7e342392 100644
--- a/gpu/ipc/client/command_buffer_proxy_impl.cc
+++ b/gpu/ipc/client/command_buffer_proxy_impl.cc
@@ -44,6 +44,10 @@
       (static_cast<uint64_t>(channel_id) << 32) | route_id);
 }
 
+int GetChannelID(gpu::CommandBufferId command_buffer_id) {
+  return static_cast<int>(command_buffer_id.GetUnsafeValue() >> 32);
+}
+
 }  // namespace
 
 CommandBufferProxyImpl::CommandBufferProxyImpl(int channel_id,
@@ -54,13 +58,6 @@
       command_buffer_id_(CommandBufferProxyID(channel_id, route_id)),
       route_id_(route_id),
       stream_id_(stream_id),
-      flush_count_(0),
-      last_put_offset_(-1),
-      last_barrier_put_offset_(-1),
-      next_fence_sync_release_(1),
-      flushed_fence_sync_release_(0),
-      verified_fence_sync_release_(0),
-      next_signal_id_(0),
       weak_this_(AsWeakPtr()) {
   DCHECK(route_id);
   DCHECK_NE(stream_id, GPU_STREAM_INVALID);
@@ -265,7 +262,8 @@
     uint32_t highest_verified_flush_id;
     const uint32_t flush_id = channel_->OrderingBarrier(
         route_id_, stream_id_, put_offset, ++flush_count_, latency_info_,
-        put_offset_changed, true, &highest_verified_flush_id);
+        pending_sync_token_fences_, put_offset_changed, true,
+        &highest_verified_flush_id);
     if (put_offset_changed) {
       DCHECK(flush_id);
       const uint64_t fence_sync_release = next_fence_sync_release_ - 1;
@@ -278,8 +276,10 @@
     CleanupFlushedReleases(highest_verified_flush_id);
   }
 
-  if (put_offset_changed)
+  if (put_offset_changed) {
     latency_info_.clear();
+    pending_sync_token_fences_.clear();
+  }
 }
 
 void CommandBufferProxyImpl::OrderingBarrier(int32_t put_offset) {
@@ -298,7 +298,8 @@
     uint32_t highest_verified_flush_id;
     const uint32_t flush_id = channel_->OrderingBarrier(
         route_id_, stream_id_, put_offset, ++flush_count_, latency_info_,
-        put_offset_changed, false, &highest_verified_flush_id);
+        pending_sync_token_fences_, put_offset_changed, false,
+        &highest_verified_flush_id);
 
     if (put_offset_changed) {
       DCHECK(flush_id);
@@ -311,9 +312,10 @@
     }
     CleanupFlushedReleases(highest_verified_flush_id);
   }
-
-  if (put_offset_changed)
+  if (put_offset_changed) {
     latency_info_.clear();
+    pending_sync_token_fences_.clear();
+  }
 }
 
 void CommandBufferProxyImpl::SetLatencyInfo(
@@ -654,19 +656,28 @@
   signal_tasks_.insert(std::make_pair(signal_id, callback));
 }
 
+void CommandBufferProxyImpl::WaitSyncTokenHint(
+    const gpu::SyncToken& sync_token) {
+  CheckLock();
+  base::AutoLock lock(last_state_lock_);
+  if (last_state_.error != gpu::error::kNoError)
+    return;
+
+  pending_sync_token_fences_.push_back(sync_token);
+}
+
 bool CommandBufferProxyImpl::CanWaitUnverifiedSyncToken(
-    const gpu::SyncToken* sync_token) {
+    const gpu::SyncToken& sync_token) {
   // Can only wait on an unverified sync token if it is from the same channel.
-  const uint64_t token_channel =
-      sync_token->command_buffer_id().GetUnsafeValue() >> 32;
-  const uint64_t channel = command_buffer_id_.GetUnsafeValue() >> 32;
-  if (sync_token->namespace_id() != gpu::CommandBufferNamespace::GPU_IO ||
-      token_channel != channel) {
+  int sync_token_channel_id = GetChannelID(sync_token.command_buffer_id());
+  int channel_id = GetChannelID(command_buffer_id_);
+  if (sync_token.namespace_id() != gpu::CommandBufferNamespace::GPU_IO ||
+      sync_token_channel_id != channel_id) {
     return false;
   }
 
   // If waiting on a different stream, flush pending commands on that stream.
-  const int32_t release_stream_id = sync_token->extra_data_field();
+  int32_t release_stream_id = sync_token.extra_data_field();
   if (release_stream_id == gpu::GPU_STREAM_INVALID)
     return false;
 
diff --git a/gpu/ipc/client/command_buffer_proxy_impl.h b/gpu/ipc/client/command_buffer_proxy_impl.h
index c35b7009..626adac 100644
--- a/gpu/ipc/client/command_buffer_proxy_impl.h
+++ b/gpu/ipc/client/command_buffer_proxy_impl.h
@@ -125,7 +125,8 @@
   bool IsFenceSyncReleased(uint64_t release) override;
   void SignalSyncToken(const gpu::SyncToken& sync_token,
                        const base::Closure& callback) override;
-  bool CanWaitUnverifiedSyncToken(const gpu::SyncToken* sync_token) override;
+  void WaitSyncTokenHint(const gpu::SyncToken& sync_token) override;
+  bool CanWaitUnverifiedSyncToken(const gpu::SyncToken& sync_token) override;
 
   void TakeFrontBuffer(const gpu::Mailbox& mailbox);
   void ReturnFrontBuffer(const gpu::Mailbox& mailbox,
@@ -260,26 +261,28 @@
   const gpu::CommandBufferId command_buffer_id_;
   const int32_t route_id_;
   const int32_t stream_id_;
-  uint32_t flush_count_;
-  int32_t last_put_offset_;
-  int32_t last_barrier_put_offset_;
+  uint32_t flush_count_ = 0;
+  int32_t last_put_offset_ = -1;
+  int32_t last_barrier_put_offset_ = -1;
 
   // Next generated fence sync.
-  uint64_t next_fence_sync_release_;
+  uint64_t next_fence_sync_release_ = 1;
+
+  std::vector<SyncToken> pending_sync_token_fences_;
 
   // Unverified flushed fence syncs with their corresponding flush id.
   std::queue<std::pair<uint64_t, uint32_t>> flushed_release_flush_id_;
 
   // Last flushed fence sync release, same as last item in queue if not empty.
-  uint64_t flushed_fence_sync_release_;
+  uint64_t flushed_fence_sync_release_ = 0;
 
   // Last verified fence sync.
-  uint64_t verified_fence_sync_release_;
+  uint64_t verified_fence_sync_release_ = 0;
 
   GpuConsoleMessageCallback console_message_callback_;
 
   // Tasks to be invoked in SignalSyncPoint responses.
-  uint32_t next_signal_id_;
+  uint32_t next_signal_id_ = 0;
   SignalTaskMap signal_tasks_;
 
   gpu::Capabilities capabilities_;
diff --git a/gpu/ipc/client/gpu_channel_host.cc b/gpu/ipc/client/gpu_channel_host.cc
index 5e41fd9..af0c167a 100644
--- a/gpu/ipc/client/gpu_channel_host.cc
+++ b/gpu/ipc/client/gpu_channel_host.cc
@@ -134,6 +134,7 @@
     int32_t put_offset,
     uint32_t flush_count,
     const std::vector<ui::LatencyInfo>& latency_info,
+    const std::vector<SyncToken>& sync_token_fences,
     bool put_offset_changed,
     bool do_flush,
     uint32_t* highest_verified_flush_id) {
@@ -153,6 +154,9 @@
     flush_info.flush_id = flush_id;
     flush_info.latency_info.insert(flush_info.latency_info.end(),
                                    latency_info.begin(), latency_info.end());
+    flush_info.sync_token_fences.insert(flush_info.sync_token_fences.end(),
+                                        sync_token_fences.begin(),
+                                        sync_token_fences.end());
 
     if (do_flush)
       InternalFlush(&flush_info);
@@ -180,8 +184,9 @@
   DCHECK_LT(flush_info->flushed_stream_flush_id, flush_info->flush_id);
   Send(new GpuCommandBufferMsg_AsyncFlush(
       flush_info->route_id, flush_info->put_offset, flush_info->flush_count,
-      flush_info->latency_info));
+      flush_info->latency_info, flush_info->sync_token_fences));
   flush_info->latency_info.clear();
+  flush_info->sync_token_fences.clear();
   flush_info->flush_pending = false;
 
   flush_info->flushed_stream_flush_id = flush_info->flush_id;
diff --git a/gpu/ipc/client/gpu_channel_host.h b/gpu/ipc/client/gpu_channel_host.h
index 989f1df6..16981a2e 100644
--- a/gpu/ipc/client/gpu_channel_host.h
+++ b/gpu/ipc/client/gpu_channel_host.h
@@ -41,7 +41,7 @@
 }
 
 namespace gpu {
-
+struct SyncToken;
 class GpuChannelHost;
 using GpuChannelEstablishedCallback =
     base::Callback<void(scoped_refptr<GpuChannelHost>)>;
@@ -106,6 +106,7 @@
                            int32_t put_offset,
                            uint32_t flush_count,
                            const std::vector<ui::LatencyInfo>& latency_info,
+                           const std::vector<SyncToken>& sync_token_fences,
                            bool put_offset_changed,
                            bool do_flush,
                            uint32_t* highest_verified_flush_id);
@@ -232,6 +233,7 @@
     uint32_t flush_count;
     uint32_t flush_id;
     std::vector<ui::LatencyInfo> latency_info;
+    std::vector<SyncToken> sync_token_fences;
   };
 
   GpuChannelHost(GpuChannelHostFactory* factory,
diff --git a/gpu/ipc/common/gpu_messages.h b/gpu/ipc/common/gpu_messages.h
index 770ab3d..cb299c0 100644
--- a/gpu/ipc/common/gpu_messages.h
+++ b/gpu/ipc/common/gpu_messages.h
@@ -175,10 +175,11 @@
 // Caller passes its current put offset. Current state (including get offset)
 // is returned in shared memory. The input latency info for the current
 // frame is also sent to the GPU process.
-IPC_MESSAGE_ROUTED3(GpuCommandBufferMsg_AsyncFlush,
+IPC_MESSAGE_ROUTED4(GpuCommandBufferMsg_AsyncFlush,
                     int32_t /* put_offset */,
                     uint32_t /* flush_count */,
-                    std::vector<ui::LatencyInfo> /* latency_info */)
+                    std::vector<ui::LatencyInfo> /* latency_info */,
+                    std::vector<gpu::SyncToken> /* sync_token_fences */)
 
 // Sent by the GPU process to display messages in the console.
 IPC_MESSAGE_ROUTED1(GpuCommandBufferMsg_ConsoleMsg,
diff --git a/gpu/ipc/in_process_command_buffer.cc b/gpu/ipc/in_process_command_buffer.cc
index 7db6617..6f1f7f5 100644
--- a/gpu/ipc/in_process_command_buffer.cc
+++ b/gpu/ipc/in_process_command_buffer.cc
@@ -981,9 +981,11 @@
                  base::Unretained(this), sync_token, WrapCallback(callback)));
 }
 
+void InProcessCommandBuffer::WaitSyncTokenHint(const SyncToken& sync_token) {}
+
 bool InProcessCommandBuffer::CanWaitUnverifiedSyncToken(
-    const SyncToken* sync_token) {
-  return sync_token->namespace_id() == GetNamespaceID();
+    const SyncToken& sync_token) {
+  return sync_token.namespace_id() == GetNamespaceID();
 }
 
 #if defined(OS_WIN)
diff --git a/gpu/ipc/in_process_command_buffer.h b/gpu/ipc/in_process_command_buffer.h
index 6bc7066..daf3d00 100644
--- a/gpu/ipc/in_process_command_buffer.h
+++ b/gpu/ipc/in_process_command_buffer.h
@@ -128,7 +128,8 @@
   bool IsFenceSyncReleased(uint64_t release) override;
   void SignalSyncToken(const SyncToken& sync_token,
                        const base::Closure& callback) override;
-  bool CanWaitUnverifiedSyncToken(const SyncToken* sync_token) override;
+  void WaitSyncTokenHint(const SyncToken& sync_token) override;
+  bool CanWaitUnverifiedSyncToken(const SyncToken& sync_token) override;
 
 // ImageTransportSurfaceDelegate implementation:
 #if defined(OS_WIN)
diff --git a/gpu/ipc/service/gpu_command_buffer_stub.cc b/gpu/ipc/service/gpu_command_buffer_stub.cc
index bfa53ed..6d305cf 100644
--- a/gpu/ipc/service/gpu_command_buffer_stub.cc
+++ b/gpu/ipc/service/gpu_command_buffer_stub.cc
@@ -935,7 +935,8 @@
 void GpuCommandBufferStub::OnAsyncFlush(
     int32_t put_offset,
     uint32_t flush_count,
-    const std::vector<ui::LatencyInfo>& latency_info) {
+    const std::vector<ui::LatencyInfo>& latency_info,
+    const std::vector<SyncToken>& sync_token_fences) {
   TRACE_EVENT1(
       "gpu", "GpuCommandBufferStub::OnAsyncFlush", "put_offset", put_offset);
   DCHECK(command_buffer_);
diff --git a/gpu/ipc/service/gpu_command_buffer_stub.h b/gpu/ipc/service/gpu_command_buffer_stub.h
index 3803172..f0579cbd 100644
--- a/gpu/ipc/service/gpu_command_buffer_stub.h
+++ b/gpu/ipc/service/gpu_command_buffer_stub.h
@@ -161,7 +161,8 @@
                                  IPC::Message* reply_message);
   void OnAsyncFlush(int32_t put_offset,
                     uint32_t flush_count,
-                    const std::vector<ui::LatencyInfo>& latency_info);
+                    const std::vector<ui::LatencyInfo>& latency_info,
+                    const std::vector<SyncToken>& sync_token_fences);
   void OnRegisterTransferBuffer(int32_t id,
                                 base::SharedMemoryHandle transfer_buffer,
                                 uint32_t size);
diff --git a/ios/chrome/browser/context_menu/context_menu_egtest.mm b/ios/chrome/browser/context_menu/context_menu_egtest.mm
index 923a41e..993ebfb 100644
--- a/ios/chrome/browser/context_menu/context_menu_egtest.mm
+++ b/ios/chrome/browser/context_menu/context_menu_egtest.mm
@@ -16,9 +16,9 @@
 #import "ios/chrome/test/earl_grey/chrome_actions.h"
 #import "ios/chrome/test/earl_grey/chrome_assertions.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
+#import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
 #import "ios/chrome/test/earl_grey/chrome_test_case.h"
-#include "ios/chrome/test/earl_grey/chrome_util.h"
 #import "ios/testing/wait_util.h"
 #import "ios/web/public/test/earl_grey/web_view_matchers.h"
 #import "ios/web/public/test/http_server.h"
@@ -241,7 +241,7 @@
       selectElementWithMatcher:WebViewScrollView(
                                    chrome_test_util::GetCurrentWebState())]
       performAction:grey_swipeFastInDirection(kGREYDirectionDown)];
-  chrome_test_util::AssertToolbarVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:YES];
 
   SelectTabAtIndexInCurrentMode(1U);
 
diff --git a/ios/chrome/browser/ui/fullscreen_egtest.mm b/ios/chrome/browser/ui/fullscreen_egtest.mm
index a1ecf39..550cc49 100644
--- a/ios/chrome/browser/ui/fullscreen_egtest.mm
+++ b/ios/chrome/browser/ui/fullscreen_egtest.mm
@@ -17,9 +17,9 @@
 #import "ios/chrome/test/app/web_view_interaction_test_util.h"
 #include "ios/chrome/test/earl_grey/chrome_assertions.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
+#import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
 #import "ios/chrome/test/earl_grey/chrome_test_case.h"
-#import "ios/chrome/test/earl_grey/chrome_util.h"
 #import "ios/testing/wait_util.h"
 #import "ios/web/public/test/earl_grey/web_view_matchers.h"
 #import "ios/web/public/test/http_server.h"
@@ -104,7 +104,7 @@
       "http://ios/testing/data/http_server_files/two_pages.pdf");
   [ChromeEarlGrey loadURL:URL];
 
-  chrome_test_util::AssertToolbarVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:YES];
   // Initial y scroll position is -56 on iPhone and -95 on iPad, to make room
   // for the toolbar.
   // TODO(crbug.com/618887) Replace use of specific values when API which
@@ -129,11 +129,11 @@
       selectElementWithMatcher:WebViewScrollView(
                                    chrome_test_util::GetCurrentWebState())]
       performAction:grey_swipeFastInDirection(kGREYDirectionDown)];
-  chrome_test_util::AssertToolbarVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:YES];
 
   // Test that the toolbar is no longer visible after a user swipes up.
   HideToolbarUsingUI();
-  chrome_test_util::AssertToolbarNotVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:NO];
 }
 
 // Verifies that the toolbar properly appears/disappears when scrolling up/down
@@ -146,18 +146,18 @@
 
   // Test that the toolbar is hidden after a user swipes up.
   HideToolbarUsingUI();
-  chrome_test_util::AssertToolbarNotVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:NO];
 
   // Test that the toolbar is visible after a user swipes down.
   [[EarlGrey
       selectElementWithMatcher:WebViewScrollView(
                                    chrome_test_util::GetCurrentWebState())]
       performAction:grey_swipeFastInDirection(kGREYDirectionDown)];
-  chrome_test_util::AssertToolbarVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:YES];
 
   // Test that the toolbar is hidden after a user swipes up.
   HideToolbarUsingUI();
-  chrome_test_util::AssertToolbarNotVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:NO];
 }
 
 // Tests that link clicks from a chrome:// to chrome:// link result in the
@@ -202,12 +202,12 @@
 
   // Scroll to hide the UI.
   HideToolbarUsingUI();
-  chrome_test_util::AssertToolbarNotVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:NO];
 
   // Test that the toolbar is visible when moving from one chrome:// link to
   // another chrome:// link.
   chrome_test_util::TapWebViewElementWithId("version");
-  chrome_test_util::AssertToolbarVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:YES];
 }
 
 // Tests hiding and showing of the header with a user scroll on a long page.
@@ -220,16 +220,16 @@
   web::test::SetUpSimpleHttpServer(responses);
 
   [ChromeEarlGrey loadURL:URL];
-  chrome_test_util::AssertToolbarVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:YES];
   // Simulate a user scroll down.
   HideToolbarUsingUI();
-  chrome_test_util::AssertToolbarNotVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:NO];
   // Simulate a user scroll up.
   [[EarlGrey
       selectElementWithMatcher:WebViewScrollView(
                                    chrome_test_util::GetCurrentWebState())]
       performAction:grey_swipeFastInDirection(kGREYDirectionDown)];
-  chrome_test_util::AssertToolbarVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:YES];
 }
 
 // Tests that reloading of a page shows the header even if it was not shown
@@ -249,12 +249,12 @@
 
   // Hide the toolbar.
   HideToolbarUsingUI();
-  chrome_test_util::AssertToolbarNotVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:NO];
 
   chrome_test_util::TapWebViewElementWithId("link");
 
   // Main test is here: Make sure the header is still visible!
-  chrome_test_util::AssertToolbarVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:YES];
 }
 
 // Test to make sure the header is shown when a Tab opened by the current Tab is
@@ -290,7 +290,7 @@
 
   // Hide the toolbar.
   HideToolbarUsingUI();
-  chrome_test_util::AssertToolbarNotVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:NO];
 
   // Open new window.
   chrome_test_util::TapWebViewElementWithId("link1");
@@ -303,7 +303,7 @@
 
   // Hide the toolbar.
   HideToolbarUsingUI();
-  chrome_test_util::AssertToolbarNotVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:NO];
 
   // Close the tab.
   chrome_test_util::TapWebViewElementWithId("link2");
@@ -311,7 +311,7 @@
 
   // Make sure the toolbar is on the screen.
   chrome_test_util::AssertMainTabCount(1);
-  chrome_test_util::AssertToolbarVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:YES];
 }
 
 // Tests that the header is shown when a regular page (non-native page) is
@@ -341,24 +341,24 @@
   AssertStringIsPresentOnPage("link1");
   // Dismiss the toolbar.
   HideToolbarUsingUI();
-  chrome_test_util::AssertToolbarNotVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:NO];
 
   // Navigate to the other page.
   chrome_test_util::TapWebViewElementWithId("link1");
   AssertStringIsPresentOnPage("link2");
 
   // Make sure toolbar is shown since a new load has started.
-  chrome_test_util::AssertToolbarVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:YES];
 
   // Dismiss the toolbar.
   HideToolbarUsingUI();
-  chrome_test_util::AssertToolbarNotVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:NO];
 
   // Go back.
   chrome_test_util::TapWebViewElementWithId("link2");
 
   // Make sure the toolbar has loaded now that a new page has loaded.
-  chrome_test_util::AssertToolbarVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:YES];
 }
 
 // Tests that the header is shown when a native page is loaded from a page where
@@ -379,13 +379,13 @@
 
   // Dismiss the toolbar.
   HideToolbarUsingUI();
-  chrome_test_util::AssertToolbarNotVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:NO];
 
   // Go back to NTP, which is a native view.
   chrome_test_util::TapWebViewElementWithId("link");
 
   // Make sure the toolbar is visible now that a new page has loaded.
-  chrome_test_util::AssertToolbarVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:YES];
 }
 
 // Tests that the header is shown when loading an error page in a native view
@@ -405,11 +405,11 @@
 
   [ChromeEarlGrey loadURL:URL];
   HideToolbarUsingUI();
-  chrome_test_util::AssertToolbarNotVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:NO];
 
   chrome_test_util::TapWebViewElementWithId("link");
   AssertURLIs(ErrorPageResponseProvider::GetDnsFailureUrl());
-  chrome_test_util::AssertToolbarVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:YES];
 }
 
 @end
diff --git a/ios/chrome/browser/web/progress_indicator_egtest.mm b/ios/chrome/browser/web/progress_indicator_egtest.mm
index cc2130e..e2ef563e 100644
--- a/ios/chrome/browser/web/progress_indicator_egtest.mm
+++ b/ios/chrome/browser/web/progress_indicator_egtest.mm
@@ -12,9 +12,9 @@
 #include "ios/chrome/test/app/navigation_test_util.h"
 #include "ios/chrome/test/app/web_view_interaction_test_util.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
+#import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
 #import "ios/chrome/test/earl_grey/chrome_test_case.h"
-#include "ios/chrome/test/earl_grey/chrome_util.h"
 #import "ios/testing/earl_grey/disabled_test_macros.h"
 #import "ios/third_party/material_components_ios/src/components/ProgressView/src/MaterialProgressView.h"
 #import "ios/web/public/test/http_server.h"
@@ -157,8 +157,7 @@
   [[EarlGrey selectElementWithMatcher:ProgressViewWithProgress(0.5)]
       assertWithMatcher:grey_sufficientlyVisible()];
 
-  // Verify toolbar visible.
-  chrome_test_util::AssertToolbarVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:YES];
 }
 
 // Tests that the progress indicator is shown and has expected progress value
@@ -197,8 +196,7 @@
   [[EarlGrey selectElementWithMatcher:ProgressViewWithProgress(0.5)]
       assertWithMatcher:grey_sufficientlyVisible()];
 
-  // Verify toolbar visible.
-  chrome_test_util::AssertToolbarVisible();
+  [ChromeEarlGreyUI waitForToolbarVisible:YES];
 }
 
 // Tests that the progress indicator disappears after form has been submitted.
diff --git a/ios/chrome/test/earl_grey/BUILD.gn b/ios/chrome/test/earl_grey/BUILD.gn
index beb0dd3..c1ba2ea 100644
--- a/ios/chrome/test/earl_grey/BUILD.gn
+++ b/ios/chrome/test/earl_grey/BUILD.gn
@@ -153,8 +153,6 @@
     "chrome_matchers.mm",
     "chrome_test_case.h",
     "chrome_test_case.mm",
-    "chrome_util.h",
-    "chrome_util.mm",
   ]
 
   deps = [
diff --git a/ios/chrome/test/earl_grey/chrome_earl_grey_ui.h b/ios/chrome/test/earl_grey/chrome_earl_grey_ui.h
index 792001a..aee3b866 100644
--- a/ios/chrome/test/earl_grey/chrome_earl_grey_ui.h
+++ b/ios/chrome/test/earl_grey/chrome_earl_grey_ui.h
@@ -29,6 +29,11 @@
 // Requires having a tab opened.
 + (void)openShareMenu;
 
+// Waits for toolbar to become visible if |isVisible| is YES, or waits for it
+// to disappear if |isVisible| is NO. Induces a GREYAssert if the condition is
+// not met after a timeout.
++ (void)waitForToolbarVisible:(BOOL)isVisible;
+
 @end
 
 #endif  // IOS_CHROME_TEST_EARL_GREY_CHROME_EARL_GREY_UI_H_
diff --git a/ios/chrome/test/earl_grey/chrome_earl_grey_ui.mm b/ios/chrome/test/earl_grey/chrome_earl_grey_ui.mm
index 68be6086..a04aec38 100644
--- a/ios/chrome/test/earl_grey/chrome_earl_grey_ui.mm
+++ b/ios/chrome/test/earl_grey/chrome_earl_grey_ui.mm
@@ -79,4 +79,21 @@
       performAction:grey_tap()];
 }
 
++ (void)waitForToolbarVisible:(BOOL)isVisible {
+  const NSTimeInterval kWaitForToolbarAnimationTimeout = 1.0;
+  ConditionBlock condition = ^{
+    NSError* error = nil;
+    id<GREYMatcher> visibleMatcher = isVisible ? grey_notNil() : grey_nil();
+    [[EarlGrey selectElementWithMatcher:chrome_test_util::ToolsMenuButton()]
+        assertWithMatcher:visibleMatcher
+                    error:&error];
+    return error == nil;
+  };
+  NSString* errorMessage =
+      isVisible ? @"Toolbar was not visible" : @"Toolbar was visible";
+  GREYAssert(testing::WaitUntilConditionOrTimeout(
+                 kWaitForToolbarAnimationTimeout, condition),
+             errorMessage);
+}
+
 @end
diff --git a/ios/chrome/test/earl_grey/chrome_util.h b/ios/chrome/test/earl_grey/chrome_util.h
deleted file mode 100644
index bd09c48..0000000
--- a/ios/chrome/test/earl_grey/chrome_util.h
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef IOS_CHROME_TEST_EARL_GREY_CHROME_UTIL_H_
-#define IOS_CHROME_TEST_EARL_GREY_CHROME_UTIL_H_
-
-namespace chrome_test_util {
-
-// Asserts that the toolbar is not visible.
-void AssertToolbarNotVisible();
-
-// Asserts that the toolbar is visible.
-void AssertToolbarVisible();
-
-}  // namespace chrome_test_util
-
-#endif  // IOS_CHROME_TEST_EARL_GREY_CHROME_UTIL_H_
diff --git a/ios/chrome/test/earl_grey/chrome_util.mm b/ios/chrome/test/earl_grey/chrome_util.mm
deleted file mode 100644
index 57c49fc7..0000000
--- a/ios/chrome/test/earl_grey/chrome_util.mm
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ios/chrome/test/earl_grey/chrome_util.h"
-
-#import <EarlGrey/EarlGrey.h>
-
-#import "ios/chrome/browser/ui/toolbar/toolbar_controller.h"
-#import "ios/chrome/test/app/chrome_test_util.h"
-#import "ios/testing/wait_util.h"
-#import "ios/web/public/test/earl_grey/web_view_matchers.h"
-
-#if !defined(__has_feature) || !__has_feature(objc_arc)
-#error "This file requires ARC support."
-#endif
-
-namespace {
-const NSTimeInterval kWaitForToolbarAnimationTimeout = 1.0;
-}  // namespace
-
-namespace chrome_test_util {
-
-void AssertToolbarNotVisible() {
-  ConditionBlock condition = ^{
-    id<GREYMatcher> toolsMenuButton =
-        grey_allOf(grey_accessibilityID(kToolbarToolsMenuButtonIdentifier),
-                   grey_sufficientlyVisible(), nil);
-    NSError* error = nil;
-    [[EarlGrey selectElementWithMatcher:toolsMenuButton]
-        assertWithMatcher:grey_notNil()
-                    error:&error];
-    return error != nil;
-  };
-  GREYAssert(testing::WaitUntilConditionOrTimeout(
-                 kWaitForToolbarAnimationTimeout, condition),
-             @"The toolbar is still visible.");
-}
-
-void AssertToolbarVisible() {
-  ConditionBlock condition = ^{
-    id<GREYMatcher> toolsMenuButton =
-        grey_allOf(grey_accessibilityID(kToolbarToolsMenuButtonIdentifier),
-                   grey_sufficientlyVisible(), nil);
-    NSError* error = nil;
-    [[EarlGrey selectElementWithMatcher:toolsMenuButton]
-        assertWithMatcher:grey_notNil()
-                    error:&error];
-    return error == nil;
-  };
-  GREYAssert(testing::WaitUntilConditionOrTimeout(
-                 kWaitForToolbarAnimationTimeout, condition),
-             @"The toolbar is not visible.");
-}
-
-}  // namespace chrome_test_util
diff --git a/media/base/android/android_cdm_factory.cc b/media/base/android/android_cdm_factory.cc
index 7ff8cd1..2bde80f 100644
--- a/media/base/android/android_cdm_factory.cc
+++ b/media/base/android/android_cdm_factory.cc
@@ -79,8 +79,9 @@
   }
 
   scoped_refptr<MediaDrmBridge> cdm(MediaDrmBridge::Create(
-      key_system, security_level, create_fetcher_cb_, session_message_cb,
-      session_closed_cb, session_keys_change_cb, session_expiration_update_cb));
+      key_system, security_origin, security_level, create_fetcher_cb_,
+      session_message_cb, session_closed_cb, session_keys_change_cb,
+      session_expiration_update_cb));
   if (!cdm) {
     error_message = "MediaDrmBridge cannot be created for " + key_system +
                     " with security level " + base::IntToString(security_level);
diff --git a/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java b/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java
index 0ae882b..fea28980 100644
--- a/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java
+++ b/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java
@@ -54,6 +54,7 @@
     private static final String TAG = "cr_media";
     private static final String SECURITY_LEVEL = "securityLevel";
     private static final String SERVER_CERTIFICATE = "serviceCertificate";
+    private static final String ORIGIN = "origin";
     private static final String PRIVACY_MODE = "privacyMode";
     private static final String SESSION_SHARING = "sessionSharing";
     private static final String ENABLE = "enable";
@@ -328,12 +329,13 @@
      * Create a new MediaDrmBridge from the crypto scheme UUID.
      *
      * @param schemeUUID Crypto scheme UUID.
+     * @param securityOrigin Security origin. Empty value means no need for origin isolated storage.
      * @param securityLevel Security level. If empty, the default one should be used.
      * @param nativeMediaDrmBridge Native object of this class.
      */
     @CalledByNative
-    private static MediaDrmBridge create(
-            byte[] schemeUUID, String securityLevel, long nativeMediaDrmBridge) {
+    private static MediaDrmBridge create(byte[] schemeUUID, String securityOrigin,
+            String securityLevel, long nativeMediaDrmBridge) {
         UUID cryptoScheme = getUUIDFromBytes(schemeUUID);
         if (cryptoScheme == null || !MediaDrm.isCryptoSchemeSupported(cryptoScheme)) {
             return null;
@@ -358,6 +360,10 @@
             return null;
         }
 
+        if (!securityOrigin.isEmpty() && !mediaDrmBridge.setOrigin(securityOrigin)) {
+            return null;
+        }
+
         if (!mediaDrmBridge.createMediaCrypto()) {
             return null;
         }
@@ -366,6 +372,34 @@
     }
 
     /**
+     * Set the security origin for the MediaDrm. All information should be isolated for different
+     * origins, e.g. certificates, licenses.
+     */
+    private boolean setOrigin(String origin) {
+        assert Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
+
+        if (!isWidevine()) {
+            Log.d(TAG, "Property " + ORIGIN + " isn't supported");
+            return true;
+        }
+
+        assert mMediaDrm != null;
+        assert !origin.isEmpty();
+
+        try {
+            mMediaDrm.setPropertyString(ORIGIN, origin);
+            return true;
+        } catch (java.lang.IllegalArgumentException e) {
+            Log.e(TAG, "Failed to set security origin %s", origin, e);
+        } catch (java.lang.IllegalStateException e) {
+            Log.e(TAG, "Failed to set security origin %s", origin, e);
+        }
+
+        Log.e(TAG, "Security origin %s not supported!", origin);
+        return false;
+    }
+
+    /**
      * Set the security level that the MediaDrm object uses.
      * This function should be called right after we construct MediaDrmBridge
      * and before we make any other calls.
diff --git a/media/base/android/media_drm_bridge.cc b/media/base/android/media_drm_bridge.cc
index bc35e36..33800c7b 100644
--- a/media/base/android/media_drm_bridge.cc
+++ b/media/base/android/media_drm_bridge.cc
@@ -298,6 +298,7 @@
 // static
 scoped_refptr<MediaDrmBridge> MediaDrmBridge::CreateInternal(
     const std::string& key_system,
+    const GURL& security_origin,
     SecurityLevel security_level,
     const CreateFetcherCB& create_fetcher_cb,
     const SessionMessageCB& session_message_cb,
@@ -312,8 +313,9 @@
     return nullptr;
 
   scoped_refptr<MediaDrmBridge> media_drm_bridge(new MediaDrmBridge(
-      scheme_uuid, security_level, create_fetcher_cb, session_message_cb,
-      session_closed_cb, session_keys_change_cb, session_expiration_update_cb));
+      scheme_uuid, security_origin, security_level, create_fetcher_cb,
+      session_message_cb, session_closed_cb, session_keys_change_cb,
+      session_expiration_update_cb));
 
   if (media_drm_bridge->j_media_drm_.is_null())
     media_drm_bridge = nullptr;
@@ -324,6 +326,7 @@
 // static
 scoped_refptr<MediaDrmBridge> MediaDrmBridge::Create(
     const std::string& key_system,
+    const GURL& security_origin,
     SecurityLevel security_level,
     const CreateFetcherCB& create_fetcher_cb,
     const SessionMessageCB& session_message_cb,
@@ -335,9 +338,10 @@
   if (!IsAvailable())
     return nullptr;
 
-  return CreateInternal(key_system, security_level, create_fetcher_cb,
-                        session_message_cb, session_closed_cb,
-                        session_keys_change_cb, session_expiration_update_cb);
+  return CreateInternal(key_system, security_origin, security_level,
+                        create_fetcher_cb, session_message_cb,
+                        session_closed_cb, session_keys_change_cb,
+                        session_expiration_update_cb);
 }
 
 // static
@@ -351,9 +355,10 @@
   if (!AreMediaDrmApisAvailable())
     return nullptr;
 
-  return MediaDrmBridge::Create(
-      key_system, security_level, create_fetcher_cb, SessionMessageCB(),
-      SessionClosedCB(), SessionKeysChangeCB(), SessionExpirationUpdateCB());
+  return MediaDrmBridge::Create(key_system, GURL::EmptyGURL(), security_level,
+                                create_fetcher_cb, SessionMessageCB(),
+                                SessionClosedCB(), SessionKeysChangeCB(),
+                                SessionExpirationUpdateCB());
 }
 
 void MediaDrmBridge::SetServerCertificate(
@@ -758,6 +763,7 @@
 
 MediaDrmBridge::MediaDrmBridge(
     const std::vector<uint8_t>& scheme_uuid,
+    const GURL& security_origin,
     SecurityLevel security_level,
     const CreateFetcherCB& create_fetcher_cb,
     const SessionMessageCB& session_message_cb,
@@ -787,9 +793,23 @@
   ScopedJavaLocalRef<jstring> j_security_level =
       ConvertUTF8ToJavaString(env, security_level_str);
 
+  bool use_origin_isolated_storage =
+      // TODO(yucliu): Remove the check once persistent storage is fully
+      // supported and check if origin is valid.
+      base::FeatureList::IsEnabled(kMediaDrmPersistentLicense) &&
+      // MediaDrm implements origin isolated storage on M.
+      base::android::BuildInfo::GetInstance()->sdk_int() >= 23;
+
+  // TODO(yucliu): Per EME spec on individualization, implementation should not
+  // expose application-specific information. Considering encode origin before
+  // passing to MediaDrm.
+  ScopedJavaLocalRef<jstring> j_security_origin = ConvertUTF8ToJavaString(
+      env, use_origin_isolated_storage ? security_origin.spec() : "");
+
   // Note: OnMediaCryptoReady() could be called in this call.
   j_media_drm_.Reset(Java_MediaDrmBridge_create(
-      env, j_scheme_uuid, j_security_level, reinterpret_cast<intptr_t>(this)));
+      env, j_scheme_uuid, j_security_origin, j_security_level,
+      reinterpret_cast<intptr_t>(this)));
 }
 
 MediaDrmBridge::~MediaDrmBridge() {
diff --git a/media/base/android/media_drm_bridge.h b/media/base/android/media_drm_bridge.h
index 6daa240..3f37a68 100644
--- a/media/base/android/media_drm_bridge.h
+++ b/media/base/android/media_drm_bridge.h
@@ -91,6 +91,7 @@
   // if |security_level| is SECURITY_LEVEL_DEFAULT.
   static scoped_refptr<MediaDrmBridge> Create(
       const std::string& key_system,
+      const GURL& security_origin,
       SecurityLevel security_level,
       const CreateFetcherCB& create_fetcher_cb,
       const SessionMessageCB& session_message_cb,
@@ -100,6 +101,8 @@
 
   // Same as Create() except that no session callbacks are provided. This is
   // used when we need to use MediaDrmBridge without creating any sessions.
+  // TODO(yucliu): Pass |security_origin| here to clear per-origin certs and
+  // licenses.
   static scoped_refptr<MediaDrmBridge> CreateWithoutSessionSupport(
       const std::string& key_system,
       SecurityLevel security_level,
@@ -235,6 +238,7 @@
 
   static scoped_refptr<MediaDrmBridge> CreateInternal(
       const std::string& key_system,
+      const GURL& security_origin,
       SecurityLevel security_level,
       const CreateFetcherCB& create_fetcher_cb,
       const SessionMessageCB& session_message_cb,
@@ -247,6 +251,7 @@
   // SECURITY_LEVEL_DEFAULT. Sessions should not be created if session callbacks
   // are null.
   MediaDrmBridge(const std::vector<uint8_t>& scheme_uuid,
+                 const GURL& security_origin,
                  SecurityLevel security_level,
                  const CreateFetcherCB& create_fetcher_cb,
                  const SessionMessageCB& session_message_cb,
diff --git a/media/base/decoder_buffer.cc b/media/base/decoder_buffer.cc
index e0351c0..d8509d1 100644
--- a/media/base/decoder_buffer.cc
+++ b/media/base/decoder_buffer.cc
@@ -50,7 +50,6 @@
   data_.reset(AllocateFFmpegSafeBlock(size_));
   if (side_data_size_ > 0)
     side_data_.reset(AllocateFFmpegSafeBlock(side_data_size_));
-  splice_timestamp_ = kNoTimestamp;
 }
 
 // static
@@ -88,7 +87,6 @@
 
   if (timestamp() != buffer.timestamp() || duration() != buffer.duration() ||
       is_key_frame() != buffer.is_key_frame() ||
-      splice_timestamp() != buffer.splice_timestamp() ||
       discard_padding() != buffer.discard_padding() ||
       data_size() != buffer.data_size() ||
       side_data_size() != buffer.side_data_size()) {
diff --git a/media/base/decoder_buffer.h b/media/base/decoder_buffer.h
index ac87dcf7..0341e57 100644
--- a/media/base/decoder_buffer.h
+++ b/media/base/decoder_buffer.h
@@ -148,20 +148,6 @@
     return data_ == NULL;
   }
 
-  // Indicates this buffer is part of a splice around |splice_timestamp_|.
-  // Returns kNoTimestamp if the buffer is not part of a splice.
-  base::TimeDelta splice_timestamp() const {
-    DCHECK(!end_of_stream());
-    return splice_timestamp_;
-  }
-
-  // When set to anything but kNoTimestamp indicates this buffer is part of a
-  // splice around |splice_timestamp|.
-  void set_splice_timestamp(base::TimeDelta splice_timestamp) {
-    DCHECK(!end_of_stream());
-    splice_timestamp_ = splice_timestamp;
-  }
-
   bool is_key_frame() const {
     DCHECK(!end_of_stream());
     return is_key_frame_;
@@ -205,7 +191,6 @@
   std::unique_ptr<uint8_t, base::AlignedFreeDeleter> side_data_;
   std::unique_ptr<DecryptConfig> decrypt_config_;
   DiscardPadding discard_padding_;
-  base::TimeDelta splice_timestamp_;
   bool is_key_frame_;
 
   // Constructor helper method for memory allocations.
diff --git a/media/gpu/video_decode_accelerator_unittest.cc b/media/gpu/video_decode_accelerator_unittest.cc
index 67d4432..16f528e 100644
--- a/media/gpu/video_decode_accelerator_unittest.cc
+++ b/media/gpu/video_decode_accelerator_unittest.cc
@@ -150,6 +150,8 @@
 // Magic constants for differentiating the reasons for NotifyResetDone being
 // called.
 enum ResetPoint {
+  // Reset() right after calling Flush() (before getting NotifyFlushDone()).
+  RESET_BEFORE_NOTIFY_FLUSH_DONE = -5,
   // Reset() just after calling Decode() with a fragment containing config info.
   RESET_AFTER_FIRST_CONFIG_INFO = -4,
   START_OF_STREAM_RESET = -3,
@@ -476,6 +478,8 @@
 
   // Delete the associated decoder helper.
   void DeleteDecoder();
+  // Reset the associated decoder after flushing.
+  void ResetDecoderAfterFlush();
 
   // Compute & return the first encoded bytes (including a start frame) to send
   // to the decoder, starting at |start_pos| and returning one fragment. Skips
@@ -807,6 +811,20 @@
   }
 }
 
+void GLRenderingVDAClient::ResetDecoderAfterFlush() {
+  --remaining_play_throughs_;
+  DCHECK_GE(remaining_play_throughs_, 0);
+  // SetState(CS_RESETTING) should be called before decoder_->Reset(), because
+  // VDA can call NotifyFlushDone() from Reset().
+  // TODO(johnylin): call SetState() before all decoder Flush() and Reset().
+  SetState(CS_RESETTING);
+  // It is necessary to check decoder deleted here because it is possible to
+  // delete decoder in SetState() in some cases.
+  if (decoder_deleted())
+    return;
+  decoder_->Reset();
+}
+
 void GLRenderingVDAClient::NotifyEndOfBitstreamBuffer(
     int32_t bitstream_buffer_id) {
   if (decoder_deleted())
@@ -824,6 +842,10 @@
     if (state_ != CS_FLUSHING) {
       decoder_->Flush();
       SetState(CS_FLUSHING);
+      if (reset_after_frame_num_ == RESET_BEFORE_NOTIFY_FLUSH_DONE) {
+        SetState(CS_FLUSHED);
+        ResetDecoderAfterFlush();
+      }
     }
   } else if (decode_calls_per_second_ == 0) {
     DecodeNextFragment();
@@ -834,13 +856,16 @@
   if (decoder_deleted())
     return;
 
-  SetState(CS_FLUSHED);
-  --remaining_play_throughs_;
-  DCHECK_GE(remaining_play_throughs_, 0);
-  if (decoder_deleted())
+  if (reset_after_frame_num_ == RESET_BEFORE_NOTIFY_FLUSH_DONE) {
+    // In ResetBeforeNotifyFlushDone case client is not necessary to wait for
+    // NotifyFlushDone(). But if client gets here, it should be always before
+    // NotifyResetDone().
+    ASSERT_EQ(state_, CS_RESETTING);
     return;
-  decoder_->Reset();
-  SetState(CS_RESETTING);
+  }
+
+  SetState(CS_FLUSHED);
+  ResetDecoderAfterFlush();
 }
 
 void GLRenderingVDAClient::NotifyResetDone() {
@@ -1463,7 +1488,10 @@
       // could still be returned until resetting done.
       if (video_file->reset_after_frame_num > 0)
         EXPECT_GE(client->num_decoded_frames(), video_file->num_frames);
-      else
+      // In ResetBeforeNotifyFlushDone case the decoded frames may be less than
+      // the video frames because decoder is reset before flush done.
+      else if (video_file->reset_after_frame_num !=
+               RESET_BEFORE_NOTIFY_FLUSH_DONE)
         EXPECT_EQ(client->num_decoded_frames(), video_file->num_frames);
     }
     if (reset_point == END_OF_STREAM_RESET) {
@@ -1566,6 +1594,18 @@
                                       false,
                                       false)));
 
+// Test Reset() immediately after Flush() and before NotifyFlushDone().
+INSTANTIATE_TEST_CASE_P(
+    ResetBeforeNotifyFlushDone,
+    VideoDecodeAcceleratorParamTest,
+    ::testing::Values(std::make_tuple(1,
+                                      1,
+                                      1,
+                                      RESET_BEFORE_NOTIFY_FLUSH_DONE,
+                                      CS_RESET,
+                                      false,
+                                      false)));
+
 // Test that Reset() mid-stream works fine and doesn't affect decoding even when
 // Decode() calls are made during the reset.
 INSTANTIATE_TEST_CASE_P(
diff --git a/media/mojo/clients/mojo_decryptor_unittest.cc b/media/mojo/clients/mojo_decryptor_unittest.cc
index a95cef7..6698326 100644
--- a/media/mojo/clients/mojo_decryptor_unittest.cc
+++ b/media/mojo/clients/mojo_decryptor_unittest.cc
@@ -11,8 +11,6 @@
 #include "base/macros.h"
 #include "base/run_loop.h"
 #include "base/test/test_message_loop.h"
-#include "media/base/cdm_context.h"
-#include "media/base/content_decryption_module.h"
 #include "media/base/decryptor.h"
 #include "media/base/mock_filters.h"
 #include "media/base/video_frame.h"
@@ -38,24 +36,9 @@
   MojoDecryptorTest() {
     decryptor_.reset(new StrictMock<MockDecryptor>());
 
-    cdm_context_.reset(new StrictMock<MockCdmContext>());
-    EXPECT_CALL(*cdm_context_, GetDecryptor())
-        .WillRepeatedly(Return(decryptor_.get()));
-
-    cdm_ = new StrictMock<MockCdm>(
-        base::Bind(&MojoDecryptorTest::OnSessionMessage,
-                   base::Unretained(this)),
-        base::Bind(&MojoDecryptorTest::OnSessionClosed, base::Unretained(this)),
-        base::Bind(&MojoDecryptorTest::OnSessionKeysChange,
-                   base::Unretained(this)),
-        base::Bind(&MojoDecryptorTest::OnSessionExpirationUpdate,
-                   base::Unretained(this)));
-    EXPECT_CALL(*cdm_.get(), GetCdmContext())
-        .WillRepeatedly(Return(cdm_context_.get()));
-
     mojom::DecryptorPtr remote_decryptor;
     mojo_decryptor_service_.reset(new MojoDecryptorService(
-        cdm_, mojo::MakeRequest(&remote_decryptor),
+        decryptor_.get(), mojo::MakeRequest(&remote_decryptor),
         base::Bind(&MojoDecryptorTest::OnConnectionClosed,
                    base::Unretained(this))));
 
@@ -100,26 +83,8 @@
                void(Decryptor::Status status,
                     const scoped_refptr<VideoFrame>& frame));
   MOCK_METHOD0(OnConnectionClosed, void());
-  MOCK_METHOD3(OnSessionMessage,
-               void(const std::string& session_id,
-                    ContentDecryptionModule::MessageType message_type,
-                    const std::vector<uint8_t>& message));
-  MOCK_METHOD1(OnSessionClosed, void(const std::string& session_id));
-  MOCK_METHOD2(OnSessionExpirationUpdate,
-               void(const std::string& session_id, base::Time new_expiry_time));
   MOCK_METHOD0(OnFrameDestroyed, void());
 
-  // MOCK methods don't work with move-only types like CdmKeysInfo. Add an extra
-  // OnSessionKeysChangeCalled() function to work around this.
-  MOCK_METHOD2(OnSessionKeysChangeCalled,
-               void(const std::string& session_id,
-                    bool has_additional_usable_key));
-  void OnSessionKeysChange(const std::string& session_id,
-                           bool has_additional_usable_key,
-                           CdmKeysInfo keys_info) {
-    OnSessionKeysChangeCalled(session_id, has_additional_usable_key);
-  }
-
  protected:
   // Fixture members.
   base::TestMessageLoop message_loop_;
@@ -130,10 +95,8 @@
   // The matching MojoDecryptorService for |mojo_decryptor_|.
   std::unique_ptr<MojoDecryptorService> mojo_decryptor_service_;
 
-  // Helpers needed by |mojo_decryptor_service_|.
+  // The actual Decryptor object used by |mojo_decryptor_service_|.
   std::unique_ptr<StrictMock<MockDecryptor>> decryptor_;
-  std::unique_ptr<StrictMock<MockCdmContext>> cdm_context_;
-  scoped_refptr<StrictMock<MockCdm>> cdm_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(MojoDecryptorTest);
diff --git a/media/mojo/common/media_type_converters.cc b/media/mojo/common/media_type_converters.cc
index 2343559..f8f7225 100644
--- a/media/mojo/common/media_type_converters.cc
+++ b/media/mojo/common/media_type_converters.cc
@@ -118,7 +118,6 @@
   mojo_buffer->data_size = base::checked_cast<uint32_t>(input->data_size());
   mojo_buffer->front_discard = input->discard_padding().first;
   mojo_buffer->back_discard = input->discard_padding().second;
-  mojo_buffer->splice_timestamp = input->splice_timestamp();
 
   // Note: The side data is always small, so this copy is okay.
   if (input->side_data()) {
@@ -165,7 +164,6 @@
   media::DecoderBuffer::DiscardPadding discard_padding(input->front_discard,
                                                        input->back_discard);
   buffer->set_discard_padding(discard_padding);
-  buffer->set_splice_timestamp(input->splice_timestamp);
 
   // TODO(dalecurtis): We intentionally do not deserialize the data section of
   // the DecoderBuffer here; this must instead be done by clients via their
diff --git a/media/mojo/common/media_type_converters_unittest.cc b/media/mojo/common/media_type_converters_unittest.cc
index c01d71ca..82c741d 100644
--- a/media/mojo/common/media_type_converters_unittest.cc
+++ b/media/mojo/common/media_type_converters_unittest.cc
@@ -184,7 +184,6 @@
       reinterpret_cast<const uint8_t*>(&kSideData), kSideDataSize));
   buffer->set_timestamp(base::TimeDelta::FromMilliseconds(123));
   buffer->set_duration(base::TimeDelta::FromMilliseconds(456));
-  buffer->set_splice_timestamp(base::TimeDelta::FromMilliseconds(200));
   buffer->set_discard_padding(
       DecoderBuffer::DiscardPadding(base::TimeDelta::FromMilliseconds(5),
                                     base::TimeDelta::FromMilliseconds(6)));
@@ -202,7 +201,6 @@
   EXPECT_EQ(buffer->timestamp(), result->timestamp());
   EXPECT_EQ(buffer->duration(), result->duration());
   EXPECT_EQ(buffer->is_key_frame(), result->is_key_frame());
-  EXPECT_EQ(buffer->splice_timestamp(), result->splice_timestamp());
   EXPECT_EQ(buffer->discard_padding(), result->discard_padding());
 
   // Both |buffer| and |result| are not encrypted.
diff --git a/media/mojo/common/mojo_decoder_buffer_converter_unittest.cc b/media/mojo/common/mojo_decoder_buffer_converter_unittest.cc
index 8a8b30d..124d6ac 100644
--- a/media/mojo/common/mojo_decoder_buffer_converter_unittest.cc
+++ b/media/mojo/common/mojo_decoder_buffer_converter_unittest.cc
@@ -74,7 +74,6 @@
       reinterpret_cast<const uint8_t*>(&kSideData), kSideDataSize));
   buffer->set_timestamp(base::TimeDelta::FromMilliseconds(123));
   buffer->set_duration(base::TimeDelta::FromMilliseconds(456));
-  buffer->set_splice_timestamp(base::TimeDelta::FromMilliseconds(200));
   buffer->set_discard_padding(
       DecoderBuffer::DiscardPadding(base::TimeDelta::FromMilliseconds(5),
                                     base::TimeDelta::FromMilliseconds(6)));
diff --git a/media/mojo/interfaces/media_types.mojom b/media/mojo/interfaces/media_types.mojom
index 6d57ff5a..bd91003 100644
--- a/media/mojo/interfaces/media_types.mojom
+++ b/media/mojo/interfaces/media_types.mojom
@@ -130,9 +130,6 @@
   // These fields indicate the amount of data to discard after decoding.
   mojo.common.mojom.TimeDelta front_discard;
   mojo.common.mojom.TimeDelta back_discard;
-
-  // Indicates this buffer is part of a splice around |splice_timestamp|.
-  mojo.common.mojom.TimeDelta splice_timestamp;
 };
 
 // This defines a mojo transport format for media::AudioBuffer.
diff --git a/media/mojo/services/mojo_cdm_service.cc b/media/mojo/services/mojo_cdm_service.cc
index 76569fa1..6234e80c 100644
--- a/media/mojo/services/mojo_cdm_service.cc
+++ b/media/mojo/services/mojo_cdm_service.cc
@@ -203,10 +203,8 @@
   mojom::DecryptorPtr decryptor_service;
   CdmContext* const cdm_context = cdm_->GetCdmContext();
   if (cdm_context && cdm_context->GetDecryptor()) {
-    // MojoDecryptorService takes a reference to the CDM, but it is still owned
-    // by |this|.
     decryptor_.reset(new MojoDecryptorService(
-        cdm_, MakeRequest(&decryptor_service),
+        cdm_context->GetDecryptor(), MakeRequest(&decryptor_service),
         base::Bind(&MojoCdmService::OnDecryptorConnectionError, weak_this_)));
   }
 
diff --git a/media/mojo/services/mojo_cdm_service.h b/media/mojo/services/mojo_cdm_service.h
index 892001f..737acc4 100644
--- a/media/mojo/services/mojo_cdm_service.h
+++ b/media/mojo/services/mojo_cdm_service.h
@@ -106,6 +106,8 @@
   CdmFactory* cdm_factory_;
   scoped_refptr<::media::ContentDecryptionModule> cdm_;
 
+  // MojoDecryptorService is passed the Decryptor from |cdm_|, so
+  // |decryptor_| must not outlive |cdm_|.
   std::unique_ptr<MojoDecryptorService> decryptor_;
 
   // Set to a valid CDM ID if the |cdm_| is successfully created.
diff --git a/media/mojo/services/mojo_decryptor_service.cc b/media/mojo/services/mojo_decryptor_service.cc
index 6e0d44b..592bcb6 100644
--- a/media/mojo/services/mojo_decryptor_service.cc
+++ b/media/mojo/services/mojo_decryptor_service.cc
@@ -9,8 +9,6 @@
 #include "base/bind.h"
 #include "base/numerics/safe_conversions.h"
 #include "media/base/audio_decoder_config.h"
-#include "media/base/cdm_context.h"
-#include "media/base/content_decryption_module.h"
 #include "media/base/decoder_buffer.h"
 #include "media/base/decryptor.h"
 #include "media/base/video_decoder_config.h"
@@ -48,12 +46,13 @@
 }  // namespace
 
 MojoDecryptorService::MojoDecryptorService(
-    const scoped_refptr<ContentDecryptionModule>& cdm,
+    media::Decryptor* decryptor,
     mojo::InterfaceRequest<mojom::Decryptor> request,
     const base::Closure& error_handler)
-    : binding_(this, std::move(request)), cdm_(cdm), weak_factory_(this) {
+    : binding_(this, std::move(request)),
+      decryptor_(decryptor),
+      weak_factory_(this) {
   DVLOG(1) << __func__;
-  decryptor_ = cdm->GetCdmContext()->GetDecryptor();
   DCHECK(decryptor_);
   weak_this_ = weak_factory_.GetWeakPtr();
   binding_.set_connection_error_handler(error_handler);
diff --git a/media/mojo/services/mojo_decryptor_service.h b/media/mojo/services/mojo_decryptor_service.h
index 13149776..e3f9909 100644
--- a/media/mojo/services/mojo_decryptor_service.h
+++ b/media/mojo/services/mojo_decryptor_service.h
@@ -21,7 +21,6 @@
 namespace media {
 
 class DecoderBuffer;
-class ContentDecryptionModule;
 class MojoDecoderBufferReader;
 class MojoDecoderBufferWriter;
 
@@ -33,14 +32,10 @@
   using StreamType = media::Decryptor::StreamType;
   using Status = media::Decryptor::Status;
 
-  // Constructs a MojoDecryptorService and binds it to the |request|. Keeps a
-  // copy of |cdm| to prevent it from being deleted as long as it is needed.
+  // Constructs a MojoDecryptorService and binds it to the |request|.
   // |error_handler| will be called if a connection error occurs.
-  // TODO(jrummell): Ideally this should take a Decryptor instead of |cdm|.
-  // The owner of the MojoDecryptorService should control the lifetime of the
-  // CDM. Both this and the CDM are owned by MojoCdmService, so it seems
-  // possible. http://crbug.com/701107.
-  MojoDecryptorService(const scoped_refptr<ContentDecryptionModule>& cdm,
+  // Caller must ensure that |decryptor| outlives |this|.
+  MojoDecryptorService(media::Decryptor* decryptor,
                        mojo::InterfaceRequest<mojom::Decryptor> request,
                        const base::Closure& error_handler);
 
@@ -106,9 +101,6 @@
   // Helper class to receive encrypted DecoderBuffer from the client.
   std::unique_ptr<MojoDecoderBufferReader> mojo_decoder_buffer_reader_;
 
-  // Keep ownership of |cdm_| while it is being used. |decryptor_| is the actual
-  // Decryptor referenced by |cdm_|.
-  scoped_refptr<ContentDecryptionModule> cdm_;
   media::Decryptor* decryptor_;
 
   base::WeakPtr<MojoDecryptorService> weak_this_;
diff --git a/media/remoting/proto_utils.cc b/media/remoting/proto_utils.cc
index 3431f3e..52bd4f2 100644
--- a/media/remoting/proto_utils.cc
+++ b/media/remoting/proto_utils.cc
@@ -88,11 +88,6 @@
         DecoderBuffer::DiscardPadding(front_discard, back_discard));
   }
 
-  if (buffer_message.has_splice_timestamp_usec()) {
-    buffer->set_splice_timestamp(base::TimeDelta::FromMicroseconds(
-        buffer_message.splice_timestamp_usec()));
-  }
-
   if (buffer_message.has_side_data()) {
     buffer->CopySideDataFrom(
         reinterpret_cast<const uint8_t*>(buffer_message.side_data().data()),
@@ -140,8 +135,6 @@
       decoder_buffer.discard_padding().first.InMicroseconds());
   buffer_message->set_back_discard_usec(
       decoder_buffer.discard_padding().second.InMicroseconds());
-  buffer_message->set_splice_timestamp_usec(
-      decoder_buffer.splice_timestamp().InMicroseconds());
 
   if (decoder_buffer.side_data_size()) {
     buffer_message->set_side_data(decoder_buffer.side_data(),
diff --git a/media/remoting/rpc.proto b/media/remoting/rpc.proto
index 814dc41..20a6883 100644
--- a/media/remoting/rpc.proto
+++ b/media/remoting/rpc.proto
@@ -19,7 +19,7 @@
   optional DecryptConfig decrypt_config = 4;
   optional int64 front_discard_usec = 5;
   optional int64 back_discard_usec = 6;
-  optional int64 splice_timestamp_usec = 7;
+  optional int64 splice_timestamp_usec = 7 [deprecated=true];
   optional bytes side_data = 8;
   // To distinguish from valid 0-length buffers
   optional bool is_eos = 9;
diff --git a/net/quic/test_tools/simulator/queue.cc b/net/quic/test_tools/simulator/queue.cc
index 12073f8e..a7e8cb9 100644
--- a/net/quic/test_tools/simulator/queue.cc
+++ b/net/quic/test_tools/simulator/queue.cc
@@ -2,8 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "net/quic/platform/api/quic_logging.h"
 #include "net/quic/test_tools/simulator/queue.h"
+#include "net/quic/platform/api/quic_logging.h"
+#include "net/quic/test_tools/simulator/simulator.h"
 
 using std::string;
 
@@ -16,7 +17,14 @@
     : Actor(simulator, name),
       capacity_(capacity),
       bytes_queued_(0),
-      listener_(nullptr) {}
+      aggregation_threshold_(0),
+      aggregation_timeout_(QuicTime::Delta::Infinite()),
+      current_bundle_(0),
+      current_bundle_bytes_(0),
+      listener_(nullptr) {
+  aggregation_timeout_alarm_.reset(simulator_->GetAlarmFactory()->CreateAlarm(
+      new AggregationAlarmDelegate(this)));
+}
 
 Queue::~Queue() {}
 
@@ -35,17 +43,28 @@
   }
 
   bytes_queued_ += packet->size;
-  queue_.emplace(std::move(packet));
+  queue_.emplace(std::move(packet), current_bundle_);
+
+  if (IsAggregationEnabled()) {
+    current_bundle_bytes_ += queue_.front().packet->size;
+    if (!aggregation_timeout_alarm_->IsSet()) {
+      aggregation_timeout_alarm_->Set(clock_->Now() + aggregation_timeout_);
+    }
+    if (current_bundle_bytes_ >= aggregation_threshold_) {
+      NextBundle();
+    }
+  }
+
   ScheduleNextPacketDequeue();
 }
 
 void Queue::Act() {
   DCHECK(!queue_.empty());
   if (tx_port_->TimeUntilAvailable().IsZero()) {
-    DCHECK(bytes_queued_ >= queue_.front()->size);
-    bytes_queued_ -= queue_.front()->size;
+    DCHECK(bytes_queued_ >= queue_.front().packet->size);
+    bytes_queued_ -= queue_.front().packet->size;
 
-    tx_port_->AcceptPacket(std::move(queue_.front()));
+    tx_port_->AcceptPacket(std::move(queue_.front().packet));
     queue_.pop();
     if (listener_ != nullptr) {
       listener_->OnPacketDequeued();
@@ -55,12 +74,46 @@
   ScheduleNextPacketDequeue();
 }
 
+void Queue::EnableAggregation(QuicByteCount aggregation_threshold,
+                              QuicTime::Delta aggregation_timeout) {
+  DCHECK_EQ(bytes_queued_, 0u);
+  DCHECK_GT(aggregation_threshold, 0u);
+  DCHECK(!aggregation_timeout.IsZero());
+  DCHECK(!aggregation_timeout.IsInfinite());
+
+  aggregation_threshold_ = aggregation_threshold;
+  aggregation_timeout_ = aggregation_timeout;
+}
+
+Queue::AggregationAlarmDelegate::AggregationAlarmDelegate(Queue* queue)
+    : queue_(queue) {}
+
+void Queue::AggregationAlarmDelegate::OnAlarm() {
+  queue_->NextBundle();
+  queue_->ScheduleNextPacketDequeue();
+}
+
+Queue::EnqueuedPacket::EnqueuedPacket(std::unique_ptr<Packet> packet,
+                                      AggregationBundleNumber bundle)
+    : packet(std::move(packet)), bundle(bundle) {}
+Queue::EnqueuedPacket::~EnqueuedPacket() = default;
+
+void Queue::NextBundle() {
+  current_bundle_++;
+  current_bundle_bytes_ = 0;
+  aggregation_timeout_alarm_->Cancel();
+}
+
 void Queue::ScheduleNextPacketDequeue() {
   if (queue_.empty()) {
     DCHECK_EQ(bytes_queued_, 0u);
     return;
   }
 
+  if (IsAggregationEnabled() && queue_.front().bundle == current_bundle_) {
+    return;
+  }
+
   Schedule(clock_->Now() + tx_port_->TimeUntilAvailable());
 }
 
diff --git a/net/quic/test_tools/simulator/queue.h b/net/quic/test_tools/simulator/queue.h
index b704893..532bb22 100644
--- a/net/quic/test_tools/simulator/queue.h
+++ b/net/quic/test_tools/simulator/queue.h
@@ -5,6 +5,7 @@
 #ifndef NET_QUIC_TEST_TOOLS_SIMULATOR_QUEUE_H_
 #define NET_QUIC_TEST_TOOLS_SIMULATOR_QUEUE_H_
 
+#include "net/quic/core/quic_alarm.h"
 #include "net/quic/test_tools/simulator/link.h"
 
 namespace net {
@@ -39,14 +40,73 @@
     listener_ = listener;
   }
 
+  // Enables packet aggregation on the queue.  Packet aggregation makes the
+  // queue bundle packets up until they reach certain size.  When the
+  // aggregation is enabled, the packets are not dequeued until the total size
+  // of packets in the queue reaches |aggregation_threshold|.  The packets are
+  // automatically flushed from the queue if the oldest packet has been in it
+  // for |aggregation_timeout|.
+  //
+  // This method may only be called when the queue is empty.  Once enabled,
+  // aggregation cannot be disabled.
+  void EnableAggregation(QuicByteCount aggregation_threshold,
+                         QuicTime::Delta aggregation_timeout);
+
  private:
+  typedef uint64_t AggregationBundleNumber;
+
+  // In order to implement packet aggregation, each packet is tagged with a
+  // bundle number.  The queue keeps a bundle counter, and whenever a bundle is
+  // ready, it increments the number of the current bundle.  Only the packets
+  // outside of the current bundle are allowed to leave the queue.
+  struct EnqueuedPacket {
+    EnqueuedPacket(std::unique_ptr<Packet> packet,
+                   AggregationBundleNumber bundle);
+    ~EnqueuedPacket();
+
+    std::unique_ptr<Packet> packet;
+    AggregationBundleNumber bundle;
+  };
+
+  // Alarm handler for aggregation timeout.
+  class AggregationAlarmDelegate : public QuicAlarm::Delegate {
+   public:
+    explicit AggregationAlarmDelegate(Queue* queue);
+
+    void OnAlarm() override;
+
+   private:
+    Queue* queue_;
+  };
+
+  inline bool IsAggregationEnabled() const {
+    return aggregation_threshold_ > 0;
+  }
+
+  // Increment the bundle counter and reset the bundle state.  This causes all
+  // packets currently in the bundle to be flushed onto the link.
+  void NextBundle();
+
   void ScheduleNextPacketDequeue();
 
   const QuicByteCount capacity_;
   QuicByteCount bytes_queued_;
 
+  QuicByteCount aggregation_threshold_;
+  QuicTime::Delta aggregation_timeout_;
+  // The number of the current aggregation bundle.  Monotonically increasing.
+  // All packets in the previous bundles are allowed to leave the queue, and
+  // none of the packets in the current one are.
+  AggregationBundleNumber current_bundle_;
+  // Size of the current bundle.  Whenever it exceeds |aggregation_threshold_|,
+  // the next bundle is created.
+  QuicByteCount current_bundle_bytes_;
+  // Alarm responsible for flushing the current bundle upon timeout.  Set when
+  // the first packet in the bundle is enqueued.
+  std::unique_ptr<QuicAlarm> aggregation_timeout_alarm_;
+
   ConstrainedPortInterface* tx_port_;
-  std::queue<std::unique_ptr<Packet>> queue_;
+  std::queue<EnqueuedPacket> queue_;
 
   ListenerInterface* listener_;
 
diff --git a/net/quic/test_tools/simulator/simulator_test.cc b/net/quic/test_tools/simulator/simulator_test.cc
index 577491e..d72330c 100644
--- a/net/quic/test_tools/simulator/simulator_test.cc
+++ b/net/quic/test_tools/simulator/simulator_test.cc
@@ -728,5 +728,81 @@
                        saturator2.counter()->bytes(), 0.1f);
 }
 
+// Test that the packet aggregation support in queues work.
+TEST(SimulatorTest, PacketAggregation) {
+  // Model network where the delays are dominated by transfer delay.
+  const QuicBandwidth bandwidth = QuicBandwidth::FromBytesPerSecond(1000);
+  const QuicTime::Delta base_propagation_delay =
+      QuicTime::Delta::FromMicroseconds(1);
+  const QuicByteCount aggregation_threshold = 1000;
+  const QuicTime::Delta aggregation_timeout = QuicTime::Delta::FromSeconds(30);
+
+  Simulator simulator;
+  LinkSaturator saturator1(&simulator, "Saturator 1", 10, "Saturator 2");
+  LinkSaturator saturator2(&simulator, "Saturator 2", 10, "Saturator 1");
+  Switch network_switch(&simulator, "Switch", 8, 10 * aggregation_threshold);
+
+  // Make links with asymmetric propagation delay so that Saturator 2 only
+  // receives packets addressed to it.
+  SymmetricLink link1(&saturator1, network_switch.port(1), bandwidth,
+                      base_propagation_delay);
+  SymmetricLink link2(&saturator2, network_switch.port(2), bandwidth,
+                      2 * base_propagation_delay);
+
+  // Enable aggregation in 1 -> 2 direction.
+  Queue* queue = network_switch.port_queue(2);
+  queue->EnableAggregation(aggregation_threshold, aggregation_timeout);
+
+  // Enable aggregation in 2 -> 1 direction in a way that all packets are larger
+  // than the threshold, so that aggregation is effectively a no-op.
+  network_switch.port_queue(1)->EnableAggregation(5, aggregation_timeout);
+
+  // Fill up the aggregation buffer up to 90% (900 bytes).
+  simulator.RunFor(0.9 * bandwidth.TransferTime(aggregation_threshold));
+  EXPECT_EQ(0u, saturator2.counter()->bytes());
+
+  // Stop sending, ensure that given a timespan much shorter than timeout, the
+  // packets remain in the queue.
+  saturator1.Pause();
+  saturator2.Pause();
+  simulator.RunFor(QuicTime::Delta::FromSeconds(10));
+  EXPECT_EQ(0u, saturator2.counter()->bytes());
+  EXPECT_EQ(900u, queue->bytes_queued());
+
+  // Ensure that all packets have reached the saturator not affected by
+  // aggregation.  Here, 10 extra bytes account for a misrouted packet in the
+  // beginning.
+  EXPECT_EQ(910u, saturator1.counter()->bytes());
+
+  // Send 500 more bytes.  Since the aggregation threshold is 1000 bytes, and
+  // queue already has 900 bytes, 1000 bytes will be send and 400 will be in the
+  // queue.
+  saturator1.Resume();
+  simulator.RunFor(0.5 * bandwidth.TransferTime(aggregation_threshold));
+  saturator1.Pause();
+  simulator.RunFor(QuicTime::Delta::FromSeconds(10));
+  EXPECT_EQ(1000u, saturator2.counter()->bytes());
+  EXPECT_EQ(400u, queue->bytes_queued());
+
+  // Actually time out, and cause all of the data to be received.
+  simulator.RunFor(aggregation_timeout);
+  EXPECT_EQ(1400u, saturator2.counter()->bytes());
+  EXPECT_EQ(0u, queue->bytes_queued());
+
+  // Run saturator for a longer time, to ensure that the logic to cancel and
+  // reset alarms works correctly.
+  saturator1.Resume();
+  simulator.RunFor(5.5 * bandwidth.TransferTime(aggregation_threshold));
+  saturator1.Pause();
+  simulator.RunFor(QuicTime::Delta::FromSeconds(10));
+  EXPECT_EQ(6400u, saturator2.counter()->bytes());
+  EXPECT_EQ(500u, queue->bytes_queued());
+
+  // Time out again.
+  simulator.RunFor(aggregation_timeout);
+  EXPECT_EQ(6900u, saturator2.counter()->bytes());
+  EXPECT_EQ(0u, queue->bytes_queued());
+}
+
 }  // namespace simulator
 }  // namespace net
diff --git a/net/quic/test_tools/simulator/switch.h b/net/quic/test_tools/simulator/switch.h
index c6177c5..35a1aa8 100644
--- a/net/quic/test_tools/simulator/switch.h
+++ b/net/quic/test_tools/simulator/switch.h
@@ -31,7 +31,10 @@
     return &ports_[port_number - 1];
   }
 
-  inline const Queue* port_queue(SwitchPortNumber port_number) {
+  inline const Queue* port_queue(SwitchPortNumber port_number) const {
+    return ports_[port_number - 1].queue();
+  }
+  inline Queue* port_queue(SwitchPortNumber port_number) {
     return ports_[port_number - 1].queue();
   }
 
@@ -58,6 +61,7 @@
 
     inline bool connected() const { return connected_; }
     inline const Queue* queue() const { return &queue_; }
+    inline Queue* queue() { return &queue_; }
 
    private:
     Switch* parent_;
diff --git a/ppapi/proxy/ppapi_command_buffer_proxy.cc b/ppapi/proxy/ppapi_command_buffer_proxy.cc
index 8a5d0622..dab3a58 100644
--- a/ppapi/proxy/ppapi_command_buffer_proxy.cc
+++ b/ppapi/proxy/ppapi_command_buffer_proxy.cc
@@ -214,8 +214,13 @@
   NOTIMPLEMENTED();
 }
 
+void PpapiCommandBufferProxy::WaitSyncTokenHint(
+    const gpu::SyncToken& sync_token) {
+  // TODO(sunnyps): Forward sync token dependency hints to the renderer.
+}
+
 bool PpapiCommandBufferProxy::CanWaitUnverifiedSyncToken(
-    const gpu::SyncToken* sync_token) {
+    const gpu::SyncToken& sync_token) {
   return false;
 }
 
diff --git a/ppapi/proxy/ppapi_command_buffer_proxy.h b/ppapi/proxy/ppapi_command_buffer_proxy.h
index 5f43ed4d..af1bfa4 100644
--- a/ppapi/proxy/ppapi_command_buffer_proxy.h
+++ b/ppapi/proxy/ppapi_command_buffer_proxy.h
@@ -71,7 +71,8 @@
   bool IsFenceSyncReleased(uint64_t release) override;
   void SignalSyncToken(const gpu::SyncToken& sync_token,
                        const base::Closure& callback) override;
-  bool CanWaitUnverifiedSyncToken(const gpu::SyncToken* sync_token) override;
+  void WaitSyncTokenHint(const gpu::SyncToken& sync_token) override;
+  bool CanWaitUnverifiedSyncToken(const gpu::SyncToken& sync_token) override;
   int32_t GetExtraCommandBufferData() const override;
 
  private:
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json
index ddf9de8..824caef 100644
--- a/testing/buildbot/chromium.android.json
+++ b/testing/buildbot/chromium.android.json
@@ -17,7 +17,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -49,7 +49,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -80,7 +80,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -111,7 +111,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -143,7 +143,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -174,7 +174,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -205,7 +205,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -239,7 +239,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -271,7 +271,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -302,7 +302,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -336,7 +336,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -368,7 +368,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -399,7 +399,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -430,7 +430,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -461,7 +461,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -492,7 +492,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -523,7 +523,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -555,7 +555,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -586,7 +586,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -617,7 +617,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -648,7 +648,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -679,7 +679,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -711,7 +711,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -743,7 +743,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -775,7 +775,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -807,7 +807,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -842,7 +842,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -874,7 +874,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -905,7 +905,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -936,7 +936,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -968,7 +968,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -999,7 +999,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1030,7 +1030,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1061,7 +1061,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1092,7 +1092,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1123,7 +1123,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1154,7 +1154,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:3ff24775a900b675866fbcacf2a8f98a18b2a16a"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1333,7 +1333,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1366,7 +1366,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1402,7 +1402,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1435,7 +1435,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1468,7 +1468,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1501,7 +1501,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1534,7 +1534,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1567,7 +1567,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1600,7 +1600,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1633,7 +1633,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1666,7 +1666,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1699,7 +1699,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1732,7 +1732,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1765,7 +1765,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1798,7 +1798,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1831,7 +1831,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1864,7 +1864,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1897,7 +1897,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1930,7 +1930,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1966,7 +1966,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1999,7 +1999,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2032,7 +2032,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2065,7 +2065,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2098,7 +2098,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2131,7 +2131,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2164,7 +2164,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2197,7 +2197,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2233,7 +2233,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2269,7 +2269,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2305,7 +2305,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2341,7 +2341,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2483,7 +2483,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2517,7 +2517,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2548,7 +2548,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2579,7 +2579,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2613,7 +2613,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2644,7 +2644,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2675,7 +2675,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2710,7 +2710,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2744,7 +2744,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2775,7 +2775,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2810,7 +2810,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2841,7 +2841,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2876,7 +2876,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2907,7 +2907,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2942,7 +2942,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2976,7 +2976,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -3007,7 +3007,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -3042,7 +3042,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -3073,7 +3073,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -3104,7 +3104,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -3135,7 +3135,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -3166,7 +3166,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -3197,7 +3197,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -3228,7 +3228,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -3259,7 +3259,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -3290,7 +3290,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -3321,7 +3321,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -3352,7 +3352,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -3386,7 +3386,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -3417,7 +3417,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -3448,7 +3448,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -3479,7 +3479,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
diff --git a/testing/buildbot/chromium.linux.json b/testing/buildbot/chromium.linux.json
index ca3449d..e05e1bf 100644
--- a/testing/buildbot/chromium.linux.json
+++ b/testing/buildbot/chromium.linux.json
@@ -33,7 +33,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -65,7 +65,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -96,7 +96,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -127,7 +127,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -159,7 +159,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -190,7 +190,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -221,7 +221,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -255,7 +255,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -290,7 +290,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -322,7 +322,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -353,7 +353,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -384,7 +384,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -419,7 +419,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -451,7 +451,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -482,7 +482,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -513,7 +513,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -544,7 +544,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -575,7 +575,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -607,7 +607,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -638,7 +638,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -669,7 +669,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -700,7 +700,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -731,7 +731,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -763,7 +763,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -795,7 +795,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -827,7 +827,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -859,7 +859,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -894,7 +894,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -926,7 +926,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -957,7 +957,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -988,7 +988,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1019,7 +1019,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1050,7 +1050,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1081,7 +1081,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1112,7 +1112,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1143,7 +1143,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1248,7 +1248,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1280,7 +1280,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1311,7 +1311,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1342,7 +1342,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1374,7 +1374,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1405,7 +1405,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1436,7 +1436,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1470,7 +1470,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1505,7 +1505,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1537,7 +1537,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1568,7 +1568,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1599,7 +1599,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1634,7 +1634,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1666,7 +1666,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1697,7 +1697,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1728,7 +1728,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1759,7 +1759,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1790,7 +1790,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1822,7 +1822,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1853,7 +1853,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1884,7 +1884,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1915,7 +1915,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1946,7 +1946,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -1978,7 +1978,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2010,7 +2010,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2042,7 +2042,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2074,7 +2074,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2109,7 +2109,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2141,7 +2141,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2172,7 +2172,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2203,7 +2203,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2235,7 +2235,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2266,7 +2266,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2297,7 +2297,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2328,7 +2328,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2359,7 +2359,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
@@ -2390,7 +2390,7 @@
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
               "location": "bin",
-              "revision": "git_revision:dec8cc6fd715753846d0aca1693dc63844ea55d6"
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
             }
           ],
           "dimension_sets": [
diff --git a/testing/buildbot/chromium.perf.fyi.json b/testing/buildbot/chromium.perf.fyi.json
index 5c0b256..6f9d31b 100644
--- a/testing/buildbot/chromium.perf.fyi.json
+++ b/testing/buildbot/chromium.perf.fyi.json
@@ -21,7 +21,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device7",
+              "id": "build248-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -50,64 +50,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device4",
-              "os": "Android",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device4",
+              "id": "build248-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -192,7 +135,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device3",
+              "id": "build248-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -221,7 +164,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device3",
+              "id": "build248-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -363,7 +306,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device3",
+              "id": "build249-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -392,7 +335,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device3",
+              "id": "build249-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -420,7 +363,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device5",
+              "id": "build249-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -449,7 +392,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device5",
+              "id": "build249-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -477,7 +420,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build245-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -506,7 +449,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build245-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -534,7 +477,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device1",
+              "id": "build249-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -563,7 +506,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device1",
+              "id": "build249-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -591,7 +534,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device3",
+              "id": "build248-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -620,7 +563,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device3",
+              "id": "build248-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -648,7 +591,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device7",
+              "id": "build249-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -677,7 +620,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device7",
+              "id": "build249-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -762,7 +705,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device4",
+              "id": "build248-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -791,7 +734,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device4",
+              "id": "build248-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -819,7 +762,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device5",
+              "id": "build248-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -848,7 +791,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device5",
+              "id": "build248-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1047,7 +990,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device5",
+              "id": "build249-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1076,7 +1019,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device5",
+              "id": "build249-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1104,7 +1047,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device2",
+              "id": "build248-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1133,7 +1076,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device2",
+              "id": "build248-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1161,7 +1104,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device5",
+              "id": "build249-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1190,7 +1133,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device5",
+              "id": "build249-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1218,7 +1161,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device5",
+              "id": "build249-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1247,7 +1190,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device5",
+              "id": "build249-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1275,7 +1218,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device4",
+              "id": "build249-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1304,7 +1247,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device4",
+              "id": "build249-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1332,7 +1275,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device6",
+              "id": "build248-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1361,7 +1304,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device6",
+              "id": "build248-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1389,7 +1332,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device1",
+              "id": "build248-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1418,7 +1361,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device1",
+              "id": "build248-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1446,7 +1389,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device2",
+              "id": "build248-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1475,7 +1418,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device2",
+              "id": "build248-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1503,7 +1446,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device3",
+              "id": "build245-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1532,7 +1475,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device3",
+              "id": "build245-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1560,7 +1503,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device5",
+              "id": "build249-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1589,7 +1532,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device5",
+              "id": "build249-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1617,7 +1560,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device4",
+              "id": "build248-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1646,7 +1589,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device4",
+              "id": "build248-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1674,7 +1617,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device7",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1703,7 +1646,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device7",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1731,7 +1674,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device1",
+              "id": "build248-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1760,7 +1703,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device1",
+              "id": "build248-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1788,7 +1731,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device5",
+              "id": "build245-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1817,7 +1760,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device5",
+              "id": "build245-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1845,7 +1788,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device4",
+              "id": "build249-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1874,7 +1817,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device4",
+              "id": "build249-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1902,7 +1845,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device1",
+              "id": "build248-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -1931,7 +1874,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device1",
+              "id": "build248-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -2016,7 +1959,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device7",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -2045,7 +1988,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device7",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -2073,7 +2016,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -2102,7 +2045,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -2358,7 +2301,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device6",
+              "id": "build245-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -2387,7 +2330,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device6",
+              "id": "build245-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -2415,7 +2358,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device3",
+              "id": "build245-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -2444,7 +2387,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device3",
+              "id": "build245-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -2472,7 +2415,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device7",
+              "id": "build248-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -2501,7 +2444,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device7",
+              "id": "build248-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -2529,7 +2472,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device4",
+              "id": "build249-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -2558,7 +2501,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device4",
+              "id": "build249-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -2871,7 +2814,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build249-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -2900,7 +2843,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build249-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -2928,7 +2871,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device1",
+              "id": "build249-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -2957,7 +2900,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device1",
+              "id": "build249-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -2985,7 +2928,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device4",
+              "id": "build248-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -3014,7 +2957,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device4",
+              "id": "build248-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -3042,7 +2985,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device3",
+              "id": "build249-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -3071,7 +3014,64 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device3",
+              "id": "build249-m4--device3",
+              "os": "Android",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=android-chromium"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "android_devices": "1",
+              "id": "build248-m4--device1",
+              "os": "Android",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=reference",
+          "--output-trace-tag=_ref"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2.reference",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "android_devices": "1",
+              "id": "build248-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -3327,7 +3327,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device4",
+              "id": "build248-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -3356,7 +3356,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device4",
+              "id": "build248-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -3384,7 +3384,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device7",
+              "id": "build248-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -3413,7 +3413,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device7",
+              "id": "build248-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -3555,7 +3555,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device6",
+              "id": "build248-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -3584,7 +3584,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device6",
+              "id": "build248-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -3783,7 +3783,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device1",
+              "id": "build248-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -3812,7 +3812,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device1",
+              "id": "build248-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -3840,7 +3840,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device7",
+              "id": "build248-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -3869,7 +3869,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device7",
+              "id": "build248-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -3897,7 +3897,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build249-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -3926,7 +3926,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build249-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -3954,7 +3954,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device7",
+              "id": "build249-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -3983,7 +3983,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device7",
+              "id": "build249-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -4011,7 +4011,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device5",
+              "id": "build248-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -4040,7 +4040,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device5",
+              "id": "build248-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -4353,7 +4353,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device6",
+              "id": "build248-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -4382,7 +4382,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device6",
+              "id": "build248-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -4467,7 +4467,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device6",
+              "id": "build248-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -4496,7 +4496,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device6",
+              "id": "build248-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -4581,7 +4581,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device2",
+              "id": "build249-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -4610,7 +4610,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device2",
+              "id": "build249-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -4638,7 +4638,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device2",
+              "id": "build249-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -4667,7 +4667,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device2",
+              "id": "build249-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -4752,7 +4752,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device2",
+              "id": "build249-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -4781,7 +4781,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device2",
+              "id": "build249-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -4809,7 +4809,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device1",
+              "id": "build249-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -4838,7 +4838,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device1",
+              "id": "build249-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -4866,7 +4866,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device3",
+              "id": "build249-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -4895,7 +4895,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device3",
+              "id": "build249-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -4980,7 +4980,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device5",
+              "id": "build249-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -5009,7 +5009,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device5",
+              "id": "build249-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -5151,7 +5151,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device4",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -5180,7 +5180,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device4",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -5265,7 +5265,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device7",
+              "id": "build249-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -5294,7 +5294,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device7",
+              "id": "build249-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -5379,7 +5379,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build249-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -5408,7 +5408,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build249-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -5607,7 +5607,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device1",
+              "id": "build249-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -5636,7 +5636,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device1",
+              "id": "build249-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -5664,7 +5664,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device5",
+              "id": "build249-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -5693,7 +5693,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device5",
+              "id": "build249-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -5721,7 +5721,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build245-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -5750,7 +5750,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build245-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -5778,7 +5778,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device4",
+              "id": "build248-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -5807,7 +5807,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device4",
+              "id": "build248-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -5949,7 +5949,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device6",
+              "id": "build248-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -5978,7 +5978,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device6",
+              "id": "build248-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -6006,7 +6006,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device6",
+              "id": "build248-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -6035,7 +6035,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device6",
+              "id": "build248-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -6177,7 +6177,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device7",
+              "id": "build248-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -6206,7 +6206,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device7",
+              "id": "build248-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -6234,7 +6234,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device2",
+              "id": "build248-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -6263,7 +6263,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device2",
+              "id": "build248-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -6291,7 +6291,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device2",
+              "id": "build249-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -6320,7 +6320,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device2",
+              "id": "build249-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -6576,7 +6576,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device2",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -6605,7 +6605,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device2",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -6747,7 +6747,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device5",
+              "id": "build248-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -6776,7 +6776,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device5",
+              "id": "build248-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -6804,7 +6804,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device5",
+              "id": "build248-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -6833,7 +6833,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device5",
+              "id": "build248-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -6918,7 +6918,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device7",
+              "id": "build249-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -6947,7 +6947,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device7",
+              "id": "build249-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -7089,7 +7089,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device7",
+              "id": "build249-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -7118,7 +7118,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device7",
+              "id": "build249-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -7203,7 +7203,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device3",
+              "id": "build249-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -7232,7 +7232,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device3",
+              "id": "build249-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -7260,7 +7260,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device5",
+              "id": "build249-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -7289,7 +7289,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device5",
+              "id": "build249-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -7317,7 +7317,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device2",
+              "id": "build245-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -7346,7 +7346,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device2",
+              "id": "build245-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -7374,7 +7374,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device7",
+              "id": "build248-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -7403,7 +7403,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device7",
+              "id": "build248-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -7488,7 +7488,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device4",
+              "id": "build249-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -7574,7 +7574,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device4",
+              "id": "build249-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -7830,7 +7830,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build249-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -7859,7 +7859,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build249-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -8001,7 +8001,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device7",
+              "id": "build248-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -8030,7 +8030,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device7",
+              "id": "build248-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -8115,7 +8115,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device2",
+              "id": "build248-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -8144,7 +8144,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device2",
+              "id": "build248-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -8172,7 +8172,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device7",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -8201,7 +8201,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device7",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -8229,7 +8229,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device5",
+              "id": "build248-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -8258,7 +8258,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device5",
+              "id": "build248-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -8628,7 +8628,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device7",
+              "id": "build248-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -8657,7 +8657,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device7",
+              "id": "build248-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -8685,7 +8685,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device1",
+              "id": "build245-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -8714,7 +8714,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device1",
+              "id": "build245-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -8742,7 +8742,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device5",
+              "id": "build249-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -8771,7 +8771,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device5",
+              "id": "build249-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -8799,7 +8799,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device3",
+              "id": "build248-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -8828,7 +8828,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device3",
+              "id": "build248-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -8856,7 +8856,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device7",
+              "id": "build249-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -8885,7 +8885,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device7",
+              "id": "build249-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -9027,7 +9027,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device6",
+              "id": "build248-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -9056,7 +9056,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device6",
+              "id": "build248-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -9483,7 +9483,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -9512,7 +9512,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -9540,7 +9540,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device5",
+              "id": "build249-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -9569,7 +9569,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device5",
+              "id": "build249-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -9597,7 +9597,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device1",
+              "id": "build248-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -9626,7 +9626,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device1",
+              "id": "build248-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -9654,7 +9654,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device4",
+              "id": "build249-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -9683,7 +9683,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device4",
+              "id": "build249-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -9882,7 +9882,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device3",
+              "id": "build245-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -9911,7 +9911,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device3",
+              "id": "build245-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -9939,7 +9939,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device6",
+              "id": "build248-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -9968,7 +9968,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device6",
+              "id": "build248-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -10053,7 +10053,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device3",
+              "id": "build248-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -10082,7 +10082,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device3",
+              "id": "build248-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -10566,7 +10566,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device6",
+              "id": "build245-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -10652,7 +10652,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device6",
+              "id": "build245-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -10680,7 +10680,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device6",
+              "id": "build245-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -10709,7 +10709,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device6",
+              "id": "build245-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -10737,7 +10737,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device7",
+              "id": "build245-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -10766,7 +10766,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device7",
+              "id": "build245-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -10794,7 +10794,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device5",
+              "id": "build249-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -10823,7 +10823,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device5",
+              "id": "build249-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -10851,7 +10851,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device4",
+              "id": "build248-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -10880,7 +10880,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device4",
+              "id": "build248-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -10965,7 +10965,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device2",
+              "id": "build245-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -10994,7 +10994,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device2",
+              "id": "build245-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf"
             }
@@ -11045,7 +11045,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build149-b1",
+              "id": "build148-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -11074,64 +11074,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build149-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build146-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build146-b1",
+              "id": "build148-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -11216,7 +11159,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build154-b1",
+              "id": "build153-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -11245,7 +11188,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build154-b1",
+              "id": "build153-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -11330,7 +11273,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build146-b1",
+              "id": "build140-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -11359,7 +11302,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build146-b1",
+              "id": "build140-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -11444,7 +11387,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build149-b1",
+              "id": "build146-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -11473,7 +11416,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build149-b1",
+              "id": "build146-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -11501,7 +11444,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build148-b1",
+              "id": "build152-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -11530,7 +11473,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build148-b1",
+              "id": "build152-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -11558,7 +11501,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build144-b1",
+              "id": "build145-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -11587,7 +11530,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build144-b1",
+              "id": "build145-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -11615,7 +11558,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build144-b1",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -11644,7 +11587,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build144-b1",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -11672,7 +11615,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build151-b1",
+              "id": "build47-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -11701,7 +11644,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build151-b1",
+              "id": "build47-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -11786,7 +11729,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build153-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -11815,7 +11758,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build153-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -11843,7 +11786,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build145-b1",
+              "id": "build144-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -11872,7 +11815,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build145-b1",
+              "id": "build144-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12128,7 +12071,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build146-b1",
+              "id": "build147-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12157,7 +12100,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build146-b1",
+              "id": "build147-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12204,7 +12147,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build153-b1",
+              "id": "build143-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12233,7 +12176,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build153-b1",
+              "id": "build143-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12318,7 +12261,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build148-b1",
+              "id": "build144-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12347,7 +12290,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build148-b1",
+              "id": "build144-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12375,7 +12318,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build48-b4",
+              "id": "build152-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12404,7 +12347,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build48-b4",
+              "id": "build152-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12432,7 +12375,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build150-b1",
+              "id": "build154-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12461,7 +12404,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build150-b1",
+              "id": "build154-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12489,7 +12432,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build48-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12518,7 +12461,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build48-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12546,7 +12489,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build153-b1",
+              "id": "build146-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12575,7 +12518,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build153-b1",
+              "id": "build146-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12603,7 +12546,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build147-b1",
+              "id": "build149-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12632,7 +12575,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build147-b1",
+              "id": "build149-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12660,7 +12603,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build149-b1",
+              "id": "build142-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12689,7 +12632,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build149-b1",
+              "id": "build142-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12717,7 +12660,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build142-b1",
+              "id": "build147-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12746,7 +12689,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build142-b1",
+              "id": "build147-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12774,7 +12717,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build151-b1",
+              "id": "build141-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12803,7 +12746,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build151-b1",
+              "id": "build141-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12831,7 +12774,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
+              "id": "build143-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12860,7 +12803,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
+              "id": "build143-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12888,7 +12831,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build154-b1",
+              "id": "build155-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12917,7 +12860,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build154-b1",
+              "id": "build155-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12945,7 +12888,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build155-b1",
+              "id": "build145-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -12974,7 +12917,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build155-b1",
+              "id": "build145-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -13002,7 +12945,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build149-b1",
+              "id": "build148-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -13031,7 +12974,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build149-b1",
+              "id": "build148-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -13059,7 +13002,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build48-b4",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -13088,7 +13031,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build48-b4",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -13116,7 +13059,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build151-b1",
+              "id": "build141-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -13145,7 +13088,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build151-b1",
+              "id": "build141-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -13420,7 +13363,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build144-b1",
+              "id": "build48-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -13449,7 +13392,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build144-b1",
+              "id": "build48-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -13477,7 +13420,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build142-b1",
+              "id": "build141-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -13506,7 +13449,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build142-b1",
+              "id": "build141-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -13534,7 +13477,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build140-b1",
+              "id": "build154-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -13563,7 +13506,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build140-b1",
+              "id": "build154-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -13591,7 +13534,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build153-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -13620,7 +13563,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build153-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -13952,7 +13895,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build154-b1",
+              "id": "build150-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -13981,7 +13924,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build154-b1",
+              "id": "build150-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -14009,7 +13952,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build141-b1",
+              "id": "build47-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -14038,7 +13981,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build141-b1",
+              "id": "build47-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -14066,7 +14009,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build148-b1",
+              "id": "build149-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -14095,7 +14038,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build148-b1",
+              "id": "build149-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -14123,7 +14066,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build141-b1",
+              "id": "build146-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -14152,7 +14095,64 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build141-b1",
+              "id": "build146-b1",
+              "os": "Windows-10-10586",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=release_x64"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:22b1",
+              "id": "build47-b4",
+              "os": "Windows-10-10586",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=reference",
+          "--output-trace-tag=_ref"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2.reference",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:22b1",
+              "id": "build47-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -14408,7 +14408,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build150-b1",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -14437,7 +14437,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build150-b1",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -14465,7 +14465,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build143-b1",
+              "id": "build152-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -14494,7 +14494,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build143-b1",
+              "id": "build152-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -14636,7 +14636,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build143-b1",
+              "id": "build142-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -14665,7 +14665,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build143-b1",
+              "id": "build142-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -14864,7 +14864,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build150-b1",
+              "id": "build149-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -14893,7 +14893,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build150-b1",
+              "id": "build149-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -14921,7 +14921,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build48-b4",
+              "id": "build155-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -14950,7 +14950,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build48-b4",
+              "id": "build155-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -14978,7 +14978,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build151-b1",
+              "id": "build142-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -15007,7 +15007,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build151-b1",
+              "id": "build142-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -15035,7 +15035,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build151-b1",
+              "id": "build152-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -15064,7 +15064,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build151-b1",
+              "id": "build152-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -15092,7 +15092,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build147-b1",
+              "id": "build146-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -15121,7 +15121,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build147-b1",
+              "id": "build146-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -15377,7 +15377,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build48-b4",
+              "id": "build47-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -15406,7 +15406,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build48-b4",
+              "id": "build47-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -15434,7 +15434,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build148-b1",
+              "id": "build147-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -15463,7 +15463,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build148-b1",
+              "id": "build147-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -15548,7 +15548,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build150-b1",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -15577,7 +15577,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build150-b1",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -15681,7 +15681,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build150-b1",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -15710,7 +15710,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build150-b1",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -15738,7 +15738,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build151-b1",
+              "id": "build150-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -15767,7 +15767,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build151-b1",
+              "id": "build150-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -15852,7 +15852,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build153-b1",
+              "id": "build154-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -15881,7 +15881,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build153-b1",
+              "id": "build154-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -15909,7 +15909,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build143-b1",
+              "id": "build152-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -15938,7 +15938,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build143-b1",
+              "id": "build152-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -15966,7 +15966,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -15995,7 +15995,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -16080,7 +16080,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build154-b1",
+              "id": "build153-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -16109,7 +16109,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build154-b1",
+              "id": "build153-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -16251,7 +16251,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build155-b1",
+              "id": "build47-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -16280,7 +16280,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build155-b1",
+              "id": "build47-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -16365,7 +16365,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build154-b1",
+              "id": "build150-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -16394,7 +16394,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build154-b1",
+              "id": "build150-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -16479,7 +16479,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build144-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -16508,7 +16508,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build144-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -16707,7 +16707,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
+              "id": "build153-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -16736,7 +16736,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
+              "id": "build153-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -16764,7 +16764,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build154-b1",
+              "id": "build145-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -16793,7 +16793,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build154-b1",
+              "id": "build145-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -16821,7 +16821,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build155-b1",
+              "id": "build143-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -16850,7 +16850,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build155-b1",
+              "id": "build143-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -16878,7 +16878,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
+              "id": "build155-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -16907,7 +16907,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
+              "id": "build155-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -17106,7 +17106,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build150-b1",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -17135,7 +17135,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build150-b1",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -17277,7 +17277,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build141-b1",
+              "id": "build47-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -17306,7 +17306,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build141-b1",
+              "id": "build47-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -17334,7 +17334,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build140-b1",
+              "id": "build144-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -17363,7 +17363,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build140-b1",
+              "id": "build144-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -17391,7 +17391,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build140-b1",
+              "id": "build147-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -17420,7 +17420,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build140-b1",
+              "id": "build147-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -17676,7 +17676,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build146-b1",
+              "id": "build147-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -17705,7 +17705,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build146-b1",
+              "id": "build147-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -17847,7 +17847,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build149-b1",
+              "id": "build150-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -17876,7 +17876,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build149-b1",
+              "id": "build150-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -17904,7 +17904,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build142-b1",
+              "id": "build143-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -17933,7 +17933,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build142-b1",
+              "id": "build143-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -18018,7 +18018,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build155-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -18047,7 +18047,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build155-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -18075,7 +18075,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build140-b1",
+              "id": "build145-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -18104,7 +18104,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build140-b1",
+              "id": "build145-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -18189,7 +18189,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build146-b1",
+              "id": "build140-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -18218,7 +18218,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build146-b1",
+              "id": "build140-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -18303,7 +18303,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build154-b1",
+              "id": "build155-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -18332,7 +18332,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build154-b1",
+              "id": "build155-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -18360,7 +18360,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build151-b1",
+              "id": "build142-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -18389,7 +18389,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build151-b1",
+              "id": "build142-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -18417,7 +18417,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build147-b1",
+              "id": "build148-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -18446,7 +18446,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build147-b1",
+              "id": "build148-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -18474,7 +18474,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build144-b1",
+              "id": "build153-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -18503,7 +18503,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build144-b1",
+              "id": "build153-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -18588,7 +18588,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build153-b1",
+              "id": "build143-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -18674,7 +18674,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build153-b1",
+              "id": "build143-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -19044,7 +19044,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build154-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -19073,7 +19073,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build154-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -19101,7 +19101,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build145-b1",
+              "id": "build146-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -19130,7 +19130,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build145-b1",
+              "id": "build146-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -19215,7 +19215,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build155-b1",
+              "id": "build148-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -19244,7 +19244,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build155-b1",
+              "id": "build148-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -19272,7 +19272,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build153-b1",
+              "id": "build150-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -19301,7 +19301,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build153-b1",
+              "id": "build150-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -19329,7 +19329,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
+              "id": "build147-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -19358,7 +19358,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
+              "id": "build147-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -19728,7 +19728,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build145-b1",
+              "id": "build146-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -19757,7 +19757,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build145-b1",
+              "id": "build146-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -19785,7 +19785,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
+              "id": "build47-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -19814,7 +19814,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
+              "id": "build47-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -19842,7 +19842,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build48-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -19871,7 +19871,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build48-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -19899,7 +19899,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build143-b1",
+              "id": "build150-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -19928,7 +19928,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build143-b1",
+              "id": "build150-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -19956,7 +19956,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build145-b1",
+              "id": "build144-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -19985,7 +19985,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build145-b1",
+              "id": "build144-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -20127,7 +20127,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build143-b1",
+              "id": "build140-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -20156,7 +20156,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build143-b1",
+              "id": "build140-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -20526,7 +20526,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build148-b1",
+              "id": "build142-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -20555,7 +20555,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build148-b1",
+              "id": "build142-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -20583,7 +20583,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build155-b1",
+              "id": "build154-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -20612,7 +20612,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build155-b1",
+              "id": "build154-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -20640,7 +20640,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
+              "id": "build47-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -20669,7 +20669,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
+              "id": "build47-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -20697,7 +20697,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build155-b1",
+              "id": "build149-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -20726,7 +20726,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build155-b1",
+              "id": "build149-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -20773,7 +20773,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build153-b1",
+              "id": "build152-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -20802,7 +20802,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build153-b1",
+              "id": "build152-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -21172,7 +21172,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build147-b1",
+              "id": "build148-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -21201,7 +21201,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build147-b1",
+              "id": "build148-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -21685,7 +21685,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build149-b1",
+              "id": "build155-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -21771,7 +21771,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build149-b1",
+              "id": "build155-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -21799,7 +21799,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build155-b1",
+              "id": "build154-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -21828,7 +21828,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build155-b1",
+              "id": "build154-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -21856,7 +21856,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build147-b1",
+              "id": "build154-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -21885,7 +21885,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build147-b1",
+              "id": "build154-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -21913,7 +21913,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build144-b1",
+              "id": "build48-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -21942,7 +21942,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build144-b1",
+              "id": "build48-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -21970,7 +21970,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build142-b1",
+              "id": "build149-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -21999,7 +21999,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build142-b1",
+              "id": "build149-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -22145,7 +22145,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build213-b4",
+              "id": "build212-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -22174,64 +22174,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build213-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build210-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build210-b4",
+              "id": "build212-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -22316,7 +22259,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build218-b4",
+              "id": "build217-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -22345,7 +22288,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build218-b4",
+              "id": "build217-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -22430,7 +22373,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build210-b4",
+              "id": "build204-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -22459,7 +22402,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build210-b4",
+              "id": "build204-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -22544,7 +22487,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build213-b4",
+              "id": "build210-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -22573,7 +22516,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build213-b4",
+              "id": "build210-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -22601,7 +22544,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build212-b4",
+              "id": "build216-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -22630,7 +22573,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build212-b4",
+              "id": "build216-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -22658,7 +22601,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build208-b4",
+              "id": "build209-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -22687,7 +22630,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build208-b4",
+              "id": "build209-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -22715,7 +22658,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build208-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -22744,7 +22687,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build208-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -22772,7 +22715,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build215-b4",
+              "id": "build220-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -22801,7 +22744,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build215-b4",
+              "id": "build220-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -22886,7 +22829,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build217-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -22915,7 +22858,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build217-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -22943,7 +22886,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build209-b4",
+              "id": "build208-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -22972,7 +22915,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build209-b4",
+              "id": "build208-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23228,7 +23171,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build210-b4",
+              "id": "build211-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23257,7 +23200,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build210-b4",
+              "id": "build211-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23285,7 +23228,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build217-b4",
+              "id": "build207-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23314,7 +23257,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build217-b4",
+              "id": "build207-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23399,7 +23342,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build212-b4",
+              "id": "build208-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23428,7 +23371,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build212-b4",
+              "id": "build208-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23456,7 +23399,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build221-b4",
+              "id": "build216-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23485,7 +23428,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build221-b4",
+              "id": "build216-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23513,7 +23456,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build214-b4",
+              "id": "build218-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23542,7 +23485,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build214-b4",
+              "id": "build218-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23570,7 +23513,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build221-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23599,7 +23542,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build221-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23627,7 +23570,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build217-b4",
+              "id": "build210-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23656,7 +23599,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build217-b4",
+              "id": "build210-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23684,7 +23627,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build211-b4",
+              "id": "build213-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23713,7 +23656,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build211-b4",
+              "id": "build213-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23741,7 +23684,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build213-b4",
+              "id": "build206-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23770,7 +23713,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build213-b4",
+              "id": "build206-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23798,7 +23741,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build206-b4",
+              "id": "build211-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23827,7 +23770,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build206-b4",
+              "id": "build211-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23855,7 +23798,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build215-b4",
+              "id": "build205-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23884,7 +23827,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build215-b4",
+              "id": "build205-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23912,7 +23855,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
+              "id": "build207-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23941,7 +23884,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
+              "id": "build207-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23969,7 +23912,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build218-b4",
+              "id": "build219-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -23998,7 +23941,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build218-b4",
+              "id": "build219-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -24026,7 +23969,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build219-b4",
+              "id": "build209-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -24055,7 +23998,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build219-b4",
+              "id": "build209-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -24083,7 +24026,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build213-b4",
+              "id": "build212-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -24112,7 +24055,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build213-b4",
+              "id": "build212-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -24140,7 +24083,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build221-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -24169,7 +24112,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build221-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -24197,7 +24140,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build215-b4",
+              "id": "build205-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -24226,7 +24169,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build215-b4",
+              "id": "build205-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -24482,7 +24425,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build208-b4",
+              "id": "build221-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -24511,7 +24454,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build208-b4",
+              "id": "build221-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -24539,7 +24482,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build206-b4",
+              "id": "build205-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -24568,7 +24511,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build206-b4",
+              "id": "build205-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -24596,7 +24539,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build204-b4",
+              "id": "build218-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -24625,7 +24568,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build204-b4",
+              "id": "build218-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -24653,7 +24596,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build217-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -24682,7 +24625,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build217-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -24995,7 +24938,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build218-b4",
+              "id": "build214-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -25024,7 +24967,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build218-b4",
+              "id": "build214-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -25052,7 +24995,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build205-b4",
+              "id": "build220-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -25081,7 +25024,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build205-b4",
+              "id": "build220-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -25109,7 +25052,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build212-b4",
+              "id": "build213-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -25138,7 +25081,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build212-b4",
+              "id": "build213-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -25166,7 +25109,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build205-b4",
+              "id": "build210-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -25195,7 +25138,64 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build205-b4",
+              "id": "build210-b4",
+              "os": "Windows-10-10586",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=release_x64"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "1002:9874",
+              "id": "build220-b4",
+              "os": "Windows-10-10586",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=reference",
+          "--output-trace-tag=_ref"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2.reference",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "1002:9874",
+              "id": "build220-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -25451,7 +25451,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build214-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -25480,7 +25480,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build214-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -25508,7 +25508,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build207-b4",
+              "id": "build216-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -25537,7 +25537,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build207-b4",
+              "id": "build216-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -25679,7 +25679,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build207-b4",
+              "id": "build206-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -25708,7 +25708,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build207-b4",
+              "id": "build206-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -25907,7 +25907,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build214-b4",
+              "id": "build213-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -25936,7 +25936,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build214-b4",
+              "id": "build213-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -25964,7 +25964,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build221-b4",
+              "id": "build219-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -25993,7 +25993,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build221-b4",
+              "id": "build219-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -26021,7 +26021,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build215-b4",
+              "id": "build206-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -26050,7 +26050,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build215-b4",
+              "id": "build206-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -26078,7 +26078,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build215-b4",
+              "id": "build216-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -26107,7 +26107,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build215-b4",
+              "id": "build216-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -26135,7 +26135,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build211-b4",
+              "id": "build210-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -26164,7 +26164,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build211-b4",
+              "id": "build210-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -26420,7 +26420,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build221-b4",
+              "id": "build220-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -26449,7 +26449,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build221-b4",
+              "id": "build220-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -26477,7 +26477,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build212-b4",
+              "id": "build211-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -26506,7 +26506,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build212-b4",
+              "id": "build211-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -26591,7 +26591,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build214-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -26620,7 +26620,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build214-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -26705,7 +26705,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build214-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -26734,7 +26734,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build214-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -26762,7 +26762,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build215-b4",
+              "id": "build214-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -26791,7 +26791,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build215-b4",
+              "id": "build214-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -26876,7 +26876,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build217-b4",
+              "id": "build218-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -26905,7 +26905,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build217-b4",
+              "id": "build218-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -26933,7 +26933,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build207-b4",
+              "id": "build216-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -26962,7 +26962,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build207-b4",
+              "id": "build216-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -26990,7 +26990,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -27019,7 +27019,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -27104,7 +27104,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build218-b4",
+              "id": "build217-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -27133,7 +27133,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build218-b4",
+              "id": "build217-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -27275,7 +27275,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build219-b4",
+              "id": "build220-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -27304,7 +27304,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build219-b4",
+              "id": "build220-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -27389,7 +27389,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build218-b4",
+              "id": "build214-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -27418,7 +27418,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build218-b4",
+              "id": "build214-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -27503,7 +27503,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build208-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -27532,7 +27532,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build208-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -27731,7 +27731,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
+              "id": "build217-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -27760,7 +27760,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
+              "id": "build217-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -27788,7 +27788,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build218-b4",
+              "id": "build209-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -27817,7 +27817,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build218-b4",
+              "id": "build209-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -27845,7 +27845,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build219-b4",
+              "id": "build207-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -27874,7 +27874,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build219-b4",
+              "id": "build207-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -27902,7 +27902,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
+              "id": "build219-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -27931,7 +27931,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
+              "id": "build219-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -28130,7 +28130,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build214-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -28159,7 +28159,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build214-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -28301,7 +28301,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build205-b4",
+              "id": "build220-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -28330,7 +28330,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build205-b4",
+              "id": "build220-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -28358,7 +28358,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build204-b4",
+              "id": "build208-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -28387,7 +28387,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build204-b4",
+              "id": "build208-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -28415,7 +28415,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build204-b4",
+              "id": "build211-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -28444,7 +28444,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build204-b4",
+              "id": "build211-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -28700,7 +28700,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build210-b4",
+              "id": "build211-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -28729,7 +28729,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build210-b4",
+              "id": "build211-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -28871,7 +28871,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build213-b4",
+              "id": "build214-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -28900,7 +28900,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build213-b4",
+              "id": "build214-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -28928,7 +28928,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build206-b4",
+              "id": "build207-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -28957,7 +28957,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build206-b4",
+              "id": "build207-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -29042,7 +29042,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build219-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -29071,7 +29071,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build219-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -29099,7 +29099,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build204-b4",
+              "id": "build209-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -29128,7 +29128,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build204-b4",
+              "id": "build209-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -29213,7 +29213,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build210-b4",
+              "id": "build204-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -29242,7 +29242,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build210-b4",
+              "id": "build204-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -29327,7 +29327,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build218-b4",
+              "id": "build219-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -29356,7 +29356,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build218-b4",
+              "id": "build219-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -29384,7 +29384,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build215-b4",
+              "id": "build206-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -29413,7 +29413,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build215-b4",
+              "id": "build206-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -29441,7 +29441,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build211-b4",
+              "id": "build212-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -29470,7 +29470,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build211-b4",
+              "id": "build212-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -29498,7 +29498,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build208-b4",
+              "id": "build217-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -29527,7 +29527,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build208-b4",
+              "id": "build217-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -29612,7 +29612,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build217-b4",
+              "id": "build207-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -29698,7 +29698,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build217-b4",
+              "id": "build207-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -30068,7 +30068,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build218-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -30097,7 +30097,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build218-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -30125,7 +30125,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build209-b4",
+              "id": "build210-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -30154,7 +30154,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build209-b4",
+              "id": "build210-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -30239,7 +30239,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build219-b4",
+              "id": "build212-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -30268,7 +30268,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build219-b4",
+              "id": "build212-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -30296,7 +30296,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build217-b4",
+              "id": "build214-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -30325,7 +30325,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build217-b4",
+              "id": "build214-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -30353,7 +30353,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
+              "id": "build211-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -30382,7 +30382,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
+              "id": "build211-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -30752,7 +30752,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build209-b4",
+              "id": "build210-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -30781,7 +30781,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build209-b4",
+              "id": "build210-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -30809,7 +30809,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
+              "id": "build220-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -30838,7 +30838,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
+              "id": "build220-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -30866,7 +30866,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build221-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -30895,7 +30895,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build221-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -30923,7 +30923,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build207-b4",
+              "id": "build214-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -30952,7 +30952,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build207-b4",
+              "id": "build214-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -30980,7 +30980,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build209-b4",
+              "id": "build208-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -31009,7 +31009,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build209-b4",
+              "id": "build208-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -31151,7 +31151,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build207-b4",
+              "id": "build204-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -31180,7 +31180,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build207-b4",
+              "id": "build204-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -31550,7 +31550,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build212-b4",
+              "id": "build206-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -31579,7 +31579,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build212-b4",
+              "id": "build206-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -31607,7 +31607,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build219-b4",
+              "id": "build218-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -31636,7 +31636,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build219-b4",
+              "id": "build218-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -31664,7 +31664,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
+              "id": "build220-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -31693,7 +31693,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
+              "id": "build220-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -31721,7 +31721,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build219-b4",
+              "id": "build213-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -31750,7 +31750,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build219-b4",
+              "id": "build213-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -31778,7 +31778,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build217-b4",
+              "id": "build216-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -31807,7 +31807,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build217-b4",
+              "id": "build216-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -32177,7 +32177,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build211-b4",
+              "id": "build212-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -32206,7 +32206,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build211-b4",
+              "id": "build212-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -32690,7 +32690,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build213-b4",
+              "id": "build219-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -32776,7 +32776,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build213-b4",
+              "id": "build219-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -32804,7 +32804,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build219-b4",
+              "id": "build218-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -32833,7 +32833,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build219-b4",
+              "id": "build218-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -32861,7 +32861,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build211-b4",
+              "id": "build218-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -32890,7 +32890,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build211-b4",
+              "id": "build218-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -32918,7 +32918,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build208-b4",
+              "id": "build221-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -32947,7 +32947,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build208-b4",
+              "id": "build221-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -32975,7 +32975,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build206-b4",
+              "id": "build213-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
@@ -33004,7 +33004,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build206-b4",
+              "id": "build213-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf"
             }
diff --git a/testing/buildbot/chromium.perf.json b/testing/buildbot/chromium.perf.json
index 09f5873..3b63567 100644
--- a/testing/buildbot/chromium.perf.json
+++ b/testing/buildbot/chromium.perf.json
@@ -88,7 +88,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -117,64 +117,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -259,7 +202,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -288,7 +231,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -487,7 +430,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -516,7 +459,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -544,7 +487,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -573,7 +516,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -601,7 +544,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -630,7 +573,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -829,7 +772,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -858,7 +801,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -886,7 +829,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -915,7 +858,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1114,7 +1057,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1143,7 +1086,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1171,7 +1114,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1200,7 +1143,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1228,7 +1171,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1257,7 +1200,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1285,7 +1228,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1314,7 +1257,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1342,7 +1285,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1371,7 +1314,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1399,7 +1342,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1428,7 +1371,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1456,7 +1399,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1485,7 +1428,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1513,7 +1456,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1542,7 +1485,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1570,7 +1513,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1599,7 +1542,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1684,7 +1627,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1713,7 +1656,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1741,7 +1684,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1770,7 +1713,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1798,7 +1741,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1827,7 +1770,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1912,7 +1855,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1941,7 +1884,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -2026,7 +1969,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -2055,7 +1998,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -2083,7 +2026,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -2112,7 +2055,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -2140,7 +2083,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -2169,7 +2112,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -2425,7 +2368,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -2454,7 +2397,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -2482,7 +2425,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -2511,7 +2454,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -2539,7 +2482,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -2568,7 +2511,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -2596,7 +2539,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -2625,7 +2568,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -2957,7 +2900,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -2986,7 +2929,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -3071,7 +3014,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -3100,7 +3043,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -3168,6 +3111,63 @@
         }
       },
       {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=release"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "102b:0534",
+              "id": "build152-m1",
+              "os": "Ubuntu-14.04",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=reference",
+          "--output-trace-tag=_ref"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2.reference",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "102b:0534",
+              "id": "build152-m1",
+              "os": "Ubuntu-14.04",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
         "args": [],
         "isolate_name": "media_perftests",
         "name": "media_perftests",
@@ -3432,7 +3432,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -3461,7 +3461,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -3888,7 +3888,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -3917,7 +3917,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4002,7 +4002,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4031,7 +4031,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4059,7 +4059,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4088,7 +4088,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4116,7 +4116,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4145,7 +4145,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4401,7 +4401,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4430,7 +4430,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4458,7 +4458,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4487,7 +4487,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4572,7 +4572,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4601,7 +4601,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4686,7 +4686,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4715,7 +4715,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4857,7 +4857,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4886,7 +4886,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4914,7 +4914,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4943,7 +4943,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4971,7 +4971,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5000,7 +5000,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5085,7 +5085,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5114,7 +5114,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5370,7 +5370,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5399,7 +5399,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5484,7 +5484,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5513,7 +5513,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5712,7 +5712,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5741,7 +5741,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5826,7 +5826,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5855,7 +5855,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5883,7 +5883,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5912,7 +5912,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -6054,7 +6054,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -6083,7 +6083,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -6282,7 +6282,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -6311,7 +6311,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -6339,7 +6339,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -6368,7 +6368,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -6396,7 +6396,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -6425,7 +6425,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -6681,7 +6681,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -6710,7 +6710,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -6852,7 +6852,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -6881,7 +6881,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -6909,7 +6909,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -6938,7 +6938,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7023,7 +7023,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7052,7 +7052,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7080,7 +7080,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7109,7 +7109,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7137,7 +7137,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7166,7 +7166,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7194,7 +7194,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7223,7 +7223,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7308,7 +7308,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7337,7 +7337,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7365,7 +7365,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7394,7 +7394,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7422,7 +7422,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7451,7 +7451,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7479,7 +7479,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7508,7 +7508,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7593,7 +7593,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7679,7 +7679,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7935,7 +7935,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7964,7 +7964,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8049,7 +8049,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8078,7 +8078,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8106,7 +8106,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8135,7 +8135,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8220,7 +8220,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8249,7 +8249,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8277,7 +8277,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8306,7 +8306,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8334,7 +8334,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8363,7 +8363,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8733,7 +8733,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8762,7 +8762,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8790,7 +8790,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8819,7 +8819,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8847,7 +8847,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8876,7 +8876,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8961,7 +8961,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8990,7 +8990,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -9132,7 +9132,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -9161,7 +9161,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -9588,7 +9588,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -9617,7 +9617,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -9645,7 +9645,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -9674,7 +9674,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -9702,7 +9702,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -9731,7 +9731,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -9778,7 +9778,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -9807,7 +9807,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -10006,7 +10006,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -10035,7 +10035,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -10177,7 +10177,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -10206,7 +10206,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -10690,7 +10690,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -10776,7 +10776,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -10861,7 +10861,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -10890,7 +10890,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -10918,7 +10918,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -10947,7 +10947,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -10975,7 +10975,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -11004,7 +11004,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -11150,7 +11150,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -11179,64 +11179,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -11321,7 +11264,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -11350,7 +11293,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -11549,7 +11492,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -11578,7 +11521,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -11606,7 +11549,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -11635,7 +11578,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -11663,7 +11606,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -11692,7 +11635,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -11891,7 +11834,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -11920,7 +11863,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -11948,7 +11891,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -11977,7 +11920,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12176,7 +12119,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12205,7 +12148,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12233,7 +12176,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12262,7 +12205,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12290,7 +12233,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12319,7 +12262,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12347,7 +12290,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12376,7 +12319,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12404,7 +12347,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12433,7 +12376,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12461,7 +12404,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12490,7 +12433,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12518,7 +12461,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12547,7 +12490,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12575,7 +12518,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12604,7 +12547,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12632,7 +12575,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12661,7 +12604,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12746,7 +12689,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12775,7 +12718,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12803,7 +12746,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12832,7 +12775,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12860,7 +12803,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12889,7 +12832,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12974,7 +12917,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -13003,7 +12946,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -13088,7 +13031,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -13117,7 +13060,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -13145,7 +13088,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -13174,7 +13117,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -13202,7 +13145,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -13231,7 +13174,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -13487,7 +13430,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -13516,7 +13459,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -13544,7 +13487,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -13573,7 +13516,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -13601,7 +13544,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -13630,7 +13573,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -13658,7 +13601,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -13687,7 +13630,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -14000,7 +13943,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -14029,7 +13972,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -14114,7 +14057,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -14143,7 +14086,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -14211,6 +14154,63 @@
         }
       },
       {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=release"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0166",
+              "id": "build106-b1",
+              "os": "Mac-10.11",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=reference",
+          "--output-trace-tag=_ref"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2.reference",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0166",
+              "id": "build106-b1",
+              "os": "Mac-10.11",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
         "args": [],
         "isolate_name": "media_perftests",
         "name": "media_perftests",
@@ -14475,7 +14475,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -14504,7 +14504,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -14931,7 +14931,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -14960,7 +14960,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15045,7 +15045,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15074,7 +15074,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15102,7 +15102,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15131,7 +15131,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15159,7 +15159,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15188,7 +15188,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15444,7 +15444,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15473,7 +15473,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15501,7 +15501,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15530,7 +15530,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15615,7 +15615,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15644,7 +15644,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15729,7 +15729,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15758,7 +15758,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15900,7 +15900,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15929,7 +15929,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15957,7 +15957,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15986,7 +15986,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -16014,7 +16014,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -16043,7 +16043,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -16128,7 +16128,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -16157,7 +16157,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -16413,7 +16413,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -16442,7 +16442,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -16527,7 +16527,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -16556,7 +16556,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -16755,7 +16755,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -16784,7 +16784,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -16869,7 +16869,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -16898,7 +16898,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -16926,7 +16926,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -16955,7 +16955,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17097,7 +17097,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17126,7 +17126,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17325,7 +17325,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17354,7 +17354,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17382,7 +17382,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17411,7 +17411,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17439,7 +17439,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17468,7 +17468,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17724,7 +17724,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17753,7 +17753,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17895,7 +17895,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17924,7 +17924,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17952,7 +17952,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17981,7 +17981,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18066,7 +18066,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18095,7 +18095,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18123,7 +18123,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18152,7 +18152,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18180,7 +18180,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18209,7 +18209,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18237,7 +18237,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18266,7 +18266,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18351,7 +18351,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18380,7 +18380,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18408,7 +18408,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18437,7 +18437,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18465,7 +18465,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18494,7 +18494,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18522,7 +18522,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18551,7 +18551,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18636,7 +18636,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18722,7 +18722,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18978,7 +18978,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19007,7 +19007,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19092,7 +19092,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19121,7 +19121,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19149,7 +19149,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19178,7 +19178,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19263,7 +19263,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19292,7 +19292,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19320,7 +19320,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19349,7 +19349,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19377,7 +19377,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19406,7 +19406,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19776,7 +19776,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19805,7 +19805,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19833,7 +19833,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19862,7 +19862,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19890,7 +19890,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19919,7 +19919,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -20004,7 +20004,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -20033,7 +20033,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -20175,7 +20175,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -20204,7 +20204,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -20631,7 +20631,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -20660,7 +20660,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -20688,7 +20688,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -20717,7 +20717,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -20745,7 +20745,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -20774,7 +20774,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -20802,7 +20802,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -20831,7 +20831,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -21030,7 +21030,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -21059,7 +21059,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -21201,7 +21201,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -21230,7 +21230,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -21714,7 +21714,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -21800,7 +21800,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -21885,7 +21885,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -21914,7 +21914,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -21942,7 +21942,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -21971,7 +21971,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -21999,7 +21999,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -22028,7 +22028,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -22174,7 +22174,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -22203,64 +22203,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -22345,7 +22288,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -22374,7 +22317,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -22573,7 +22516,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -22602,7 +22545,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -22630,7 +22573,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -22659,7 +22602,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -22687,7 +22630,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -22716,7 +22659,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -22915,7 +22858,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -22944,7 +22887,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -22972,7 +22915,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23001,7 +22944,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23200,7 +23143,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23229,7 +23172,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23257,7 +23200,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23286,7 +23229,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23314,7 +23257,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23343,7 +23286,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23371,7 +23314,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23400,7 +23343,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23428,7 +23371,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23457,7 +23400,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23485,7 +23428,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23514,7 +23457,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23542,7 +23485,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23571,7 +23514,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23599,7 +23542,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23628,7 +23571,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23656,7 +23599,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23685,7 +23628,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23770,7 +23713,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23799,7 +23742,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23827,7 +23770,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23856,7 +23799,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23884,7 +23827,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23913,7 +23856,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23998,7 +23941,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -24027,7 +23970,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -24112,7 +24055,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -24141,7 +24084,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -24169,7 +24112,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -24198,7 +24141,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -24226,7 +24169,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -24255,7 +24198,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -24511,7 +24454,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -24540,7 +24483,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -24568,7 +24511,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -24597,7 +24540,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -24625,7 +24568,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -24654,7 +24597,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -24682,7 +24625,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -24711,7 +24654,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -25024,7 +24967,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -25053,7 +24996,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -25138,7 +25081,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -25167,7 +25110,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -25236,6 +25179,63 @@
       },
       {
         "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=release"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "id": "build162-m1",
+              "os": "Mac-10.12",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=reference",
+          "--output-trace-tag=_ref"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2.reference",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "id": "build162-m1",
+              "os": "Mac-10.12",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
           "memory.blink_memory_mobile",
           "-v",
           "--upload-results",
@@ -25480,7 +25480,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -25509,7 +25509,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -25936,7 +25936,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -25965,7 +25965,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26050,7 +26050,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26079,7 +26079,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26107,7 +26107,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26136,7 +26136,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26164,7 +26164,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26193,7 +26193,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26449,7 +26449,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26478,7 +26478,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26506,7 +26506,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26535,7 +26535,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26620,7 +26620,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26649,7 +26649,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26734,7 +26734,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26763,7 +26763,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26905,7 +26905,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26934,7 +26934,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26962,7 +26962,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26991,7 +26991,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -27019,7 +27019,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -27048,7 +27048,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -27133,7 +27133,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -27162,7 +27162,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -27418,7 +27418,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -27447,7 +27447,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -27532,7 +27532,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -27561,7 +27561,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -27760,7 +27760,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -27789,7 +27789,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -27874,7 +27874,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -27903,7 +27903,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -27931,7 +27931,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -27960,7 +27960,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28102,7 +28102,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28131,7 +28131,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28330,7 +28330,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28359,7 +28359,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28387,7 +28387,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28416,7 +28416,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28444,7 +28444,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28473,7 +28473,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28729,7 +28729,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28758,7 +28758,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28900,7 +28900,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28929,7 +28929,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28957,7 +28957,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28986,7 +28986,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29071,7 +29071,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29100,7 +29100,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29128,7 +29128,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29157,7 +29157,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29185,7 +29185,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29214,7 +29214,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29242,7 +29242,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29271,7 +29271,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29356,7 +29356,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29385,7 +29385,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29413,7 +29413,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29442,7 +29442,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29470,7 +29470,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29499,7 +29499,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29527,7 +29527,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29556,7 +29556,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29641,7 +29641,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29727,7 +29727,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29983,7 +29983,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30012,7 +30012,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30097,7 +30097,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30126,7 +30126,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30154,7 +30154,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30183,7 +30183,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30268,7 +30268,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30297,7 +30297,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30325,7 +30325,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30354,7 +30354,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30382,7 +30382,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30411,7 +30411,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30781,7 +30781,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30810,7 +30810,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30838,7 +30838,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30867,7 +30867,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30895,7 +30895,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30924,7 +30924,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -31009,7 +31009,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -31038,7 +31038,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -31180,7 +31180,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -31209,7 +31209,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -31636,7 +31636,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -31665,7 +31665,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -31693,7 +31693,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -31722,7 +31722,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -31750,7 +31750,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -31779,7 +31779,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -31807,7 +31807,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -31836,7 +31836,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -32035,7 +32035,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -32064,7 +32064,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -32206,7 +32206,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -32235,7 +32235,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -32719,7 +32719,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -32805,7 +32805,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -32890,7 +32890,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -32919,7 +32919,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -32947,7 +32947,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -32976,7 +32976,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -33004,7 +33004,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -33033,7 +33033,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -33179,7 +33179,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -33208,64 +33208,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -33350,7 +33293,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -33379,7 +33322,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -33578,7 +33521,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -33607,7 +33550,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -33635,7 +33578,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -33664,7 +33607,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -33692,7 +33635,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -33721,7 +33664,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -33920,7 +33863,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -33949,7 +33892,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -33977,7 +33920,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34006,7 +33949,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34205,7 +34148,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34234,7 +34177,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34262,7 +34205,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34291,7 +34234,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34319,7 +34262,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34348,7 +34291,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34376,7 +34319,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34405,7 +34348,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34433,7 +34376,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34462,7 +34405,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34490,7 +34433,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34519,7 +34462,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34547,7 +34490,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34576,7 +34519,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34604,7 +34547,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34633,7 +34576,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34661,7 +34604,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34690,7 +34633,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34775,7 +34718,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34804,7 +34747,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34832,7 +34775,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34861,7 +34804,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34889,7 +34832,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34918,7 +34861,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35003,7 +34946,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35032,7 +34975,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35117,7 +35060,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35146,7 +35089,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35174,7 +35117,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35203,7 +35146,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35231,7 +35174,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35260,7 +35203,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35516,7 +35459,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35545,7 +35488,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35573,7 +35516,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35602,7 +35545,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35630,7 +35573,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35659,7 +35602,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35687,7 +35630,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35716,7 +35659,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -36029,7 +35972,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -36058,7 +36001,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -36143,7 +36086,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -36172,7 +36115,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -36241,6 +36184,63 @@
       },
       {
         "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=release"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:1626",
+              "id": "build127-b1",
+              "os": "Mac-10.11",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=reference",
+          "--output-trace-tag=_ref"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2.reference",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:1626",
+              "id": "build127-b1",
+              "os": "Mac-10.11",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
           "memory.blink_memory_mobile",
           "-v",
           "--upload-results",
@@ -36485,7 +36485,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -36514,7 +36514,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -36941,7 +36941,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -36970,7 +36970,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37055,7 +37055,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37084,7 +37084,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37112,7 +37112,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37141,7 +37141,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37169,7 +37169,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37198,7 +37198,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37454,7 +37454,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37483,7 +37483,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37511,7 +37511,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37540,7 +37540,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37625,7 +37625,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37654,7 +37654,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37739,7 +37739,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37768,7 +37768,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37910,7 +37910,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37939,7 +37939,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37967,7 +37967,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37996,7 +37996,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -38024,7 +38024,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -38053,7 +38053,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -38138,7 +38138,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -38167,7 +38167,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -38423,7 +38423,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -38452,7 +38452,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -38537,7 +38537,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -38566,7 +38566,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -38765,7 +38765,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -38794,7 +38794,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -38879,7 +38879,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -38908,7 +38908,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -38936,7 +38936,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -38965,7 +38965,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39107,7 +39107,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39136,7 +39136,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39335,7 +39335,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39364,7 +39364,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39392,7 +39392,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39421,7 +39421,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39449,7 +39449,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39478,7 +39478,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39734,7 +39734,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39763,7 +39763,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39905,7 +39905,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39934,7 +39934,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39962,7 +39962,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39991,7 +39991,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40076,7 +40076,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40105,7 +40105,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40133,7 +40133,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40162,7 +40162,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40190,7 +40190,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40219,7 +40219,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40247,7 +40247,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40276,7 +40276,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40361,7 +40361,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40390,7 +40390,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40418,7 +40418,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40447,7 +40447,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40475,7 +40475,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40504,7 +40504,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40532,7 +40532,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40561,7 +40561,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40646,7 +40646,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40732,7 +40732,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40988,7 +40988,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41017,7 +41017,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41102,7 +41102,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41131,7 +41131,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41159,7 +41159,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41188,7 +41188,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41273,7 +41273,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41302,7 +41302,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41330,7 +41330,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41359,7 +41359,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41387,7 +41387,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41416,7 +41416,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41786,7 +41786,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41815,7 +41815,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41843,7 +41843,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41872,7 +41872,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41900,7 +41900,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41929,7 +41929,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -42014,7 +42014,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -42043,7 +42043,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -42185,7 +42185,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -42214,7 +42214,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -42641,7 +42641,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -42670,7 +42670,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -42698,7 +42698,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -42727,7 +42727,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -42755,7 +42755,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -42784,7 +42784,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -42812,7 +42812,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -42841,7 +42841,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -43040,7 +43040,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -43069,7 +43069,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -43211,7 +43211,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -43240,7 +43240,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -43724,7 +43724,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -43810,7 +43810,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -43895,7 +43895,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -43924,7 +43924,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -43952,7 +43952,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -43981,7 +43981,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -44009,7 +44009,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -44038,7 +44038,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -44184,7 +44184,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -44213,64 +44213,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -44355,7 +44298,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -44384,7 +44327,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -44583,7 +44526,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -44612,7 +44555,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -44640,7 +44583,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -44669,7 +44612,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -44697,7 +44640,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -44726,7 +44669,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -44925,7 +44868,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -44954,7 +44897,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -44982,7 +44925,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45011,7 +44954,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45210,7 +45153,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45239,7 +45182,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45267,7 +45210,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45296,7 +45239,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45324,7 +45267,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45353,7 +45296,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45381,7 +45324,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45410,7 +45353,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45438,7 +45381,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45467,7 +45410,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45495,7 +45438,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45524,7 +45467,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45552,7 +45495,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45581,7 +45524,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45609,7 +45552,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45638,7 +45581,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45666,7 +45609,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45695,7 +45638,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45780,7 +45723,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45809,7 +45752,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45837,7 +45780,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45866,7 +45809,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45894,7 +45837,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45923,7 +45866,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46008,7 +45951,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46037,7 +45980,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46122,7 +46065,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46151,7 +46094,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46179,7 +46122,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46208,7 +46151,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46236,7 +46179,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46265,7 +46208,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46521,7 +46464,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46550,7 +46493,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46578,7 +46521,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46607,7 +46550,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46635,7 +46578,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46664,7 +46607,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46692,7 +46635,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46721,7 +46664,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -47034,7 +46977,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -47063,7 +47006,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -47148,7 +47091,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -47177,7 +47120,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -47246,6 +47189,63 @@
       },
       {
         "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=release"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a26",
+              "id": "build28-b1",
+              "os": "Mac-10.12",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=reference",
+          "--output-trace-tag=_ref"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2.reference",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a26",
+              "id": "build28-b1",
+              "os": "Mac-10.12",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
           "memory.blink_memory_mobile",
           "-v",
           "--upload-results",
@@ -47490,7 +47490,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -47519,7 +47519,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -47946,7 +47946,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -47975,7 +47975,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48060,7 +48060,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48089,7 +48089,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48117,7 +48117,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48146,7 +48146,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48174,7 +48174,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48203,7 +48203,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48459,7 +48459,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48488,7 +48488,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48516,7 +48516,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48545,7 +48545,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48630,7 +48630,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48659,7 +48659,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48744,7 +48744,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48773,7 +48773,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48915,7 +48915,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48944,7 +48944,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48972,7 +48972,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -49001,7 +49001,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -49029,7 +49029,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -49058,7 +49058,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -49143,7 +49143,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -49172,7 +49172,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -49428,7 +49428,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -49457,7 +49457,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -49542,7 +49542,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -49571,7 +49571,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -49770,7 +49770,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -49799,7 +49799,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -49884,7 +49884,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -49913,7 +49913,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -49941,7 +49941,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -49970,7 +49970,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -50112,7 +50112,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -50141,7 +50141,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -50340,7 +50340,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -50369,7 +50369,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -50397,7 +50397,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -50426,7 +50426,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -50454,7 +50454,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -50483,7 +50483,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -50739,7 +50739,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -50768,7 +50768,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -50910,7 +50910,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -50939,7 +50939,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -50967,7 +50967,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -50996,7 +50996,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51081,7 +51081,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51110,7 +51110,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51138,7 +51138,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51167,7 +51167,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51195,7 +51195,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51224,7 +51224,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51252,7 +51252,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51281,7 +51281,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51366,7 +51366,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51395,7 +51395,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51423,7 +51423,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51452,7 +51452,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51480,7 +51480,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51509,7 +51509,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51537,7 +51537,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51566,7 +51566,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51651,7 +51651,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51737,7 +51737,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51993,7 +51993,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52022,7 +52022,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52107,7 +52107,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52136,7 +52136,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52164,7 +52164,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52193,7 +52193,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52278,7 +52278,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52307,7 +52307,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52335,7 +52335,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52364,7 +52364,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52392,7 +52392,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52421,7 +52421,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52791,7 +52791,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52820,7 +52820,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52848,7 +52848,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52877,7 +52877,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52905,7 +52905,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52934,7 +52934,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -53019,7 +53019,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -53048,7 +53048,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -53190,7 +53190,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -53219,7 +53219,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -53646,7 +53646,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -53675,7 +53675,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -53703,7 +53703,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -53732,7 +53732,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -53760,7 +53760,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -53789,7 +53789,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -53817,7 +53817,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -53846,7 +53846,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -54045,7 +54045,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -54074,7 +54074,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -54216,7 +54216,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -54245,7 +54245,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -54729,7 +54729,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -54815,7 +54815,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -54900,7 +54900,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -54929,7 +54929,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -54957,7 +54957,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -54986,7 +54986,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -55014,7 +55014,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -55043,7 +55043,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -55189,7 +55189,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -55218,64 +55218,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -55360,7 +55303,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -55389,7 +55332,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -55588,7 +55531,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -55617,7 +55560,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -55645,7 +55588,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -55674,7 +55617,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -55702,7 +55645,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -55731,7 +55674,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -55930,7 +55873,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -55959,7 +55902,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -55987,7 +55930,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -56016,7 +55959,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -56215,7 +56158,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -56244,7 +56187,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -56272,7 +56215,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -56301,7 +56244,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -56329,7 +56272,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -56358,7 +56301,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -56386,7 +56329,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -56415,7 +56358,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -56443,7 +56386,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -56472,7 +56415,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -56500,7 +56443,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -56529,7 +56472,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -56557,7 +56500,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -56586,7 +56529,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -56614,7 +56557,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -56643,7 +56586,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -56671,7 +56614,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -56700,7 +56643,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -56785,7 +56728,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -56814,7 +56757,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -56842,7 +56785,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -56871,7 +56814,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -56899,7 +56842,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -56928,7 +56871,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57013,7 +56956,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57042,7 +56985,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57127,7 +57070,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57156,7 +57099,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57184,7 +57127,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57213,7 +57156,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57241,7 +57184,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57270,7 +57213,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57526,7 +57469,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57555,7 +57498,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57583,7 +57526,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57612,7 +57555,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57640,7 +57583,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57669,7 +57612,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57697,7 +57640,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57726,7 +57669,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -58039,7 +57982,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -58068,7 +58011,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -58153,7 +58096,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -58182,7 +58125,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -58251,6 +58194,63 @@
       },
       {
         "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=release"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "1002:6821",
+              "id": "build132-b1",
+              "os": "Mac-10.11",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=reference",
+          "--output-trace-tag=_ref"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2.reference",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "1002:6821",
+              "id": "build132-b1",
+              "os": "Mac-10.11",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
           "memory.blink_memory_mobile",
           "-v",
           "--upload-results",
@@ -58495,7 +58495,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -58524,7 +58524,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -58951,7 +58951,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -58980,7 +58980,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59065,7 +59065,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59094,7 +59094,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59122,7 +59122,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59151,7 +59151,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59179,7 +59179,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59208,7 +59208,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59464,7 +59464,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59493,7 +59493,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59521,7 +59521,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59550,7 +59550,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59635,7 +59635,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59664,7 +59664,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59749,7 +59749,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59778,7 +59778,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59920,7 +59920,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59949,7 +59949,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59977,7 +59977,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60006,7 +60006,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60034,7 +60034,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60063,7 +60063,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60148,7 +60148,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60177,7 +60177,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60433,7 +60433,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60462,7 +60462,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60547,7 +60547,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60576,7 +60576,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60775,7 +60775,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60804,7 +60804,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60889,7 +60889,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60918,7 +60918,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60946,7 +60946,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60975,7 +60975,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -61117,7 +61117,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -61146,7 +61146,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -61345,7 +61345,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -61374,7 +61374,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -61402,7 +61402,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -61431,7 +61431,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -61459,7 +61459,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -61488,7 +61488,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -61744,7 +61744,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -61773,7 +61773,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -61915,7 +61915,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -61944,7 +61944,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -61972,7 +61972,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62001,7 +62001,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62086,7 +62086,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62115,7 +62115,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62143,7 +62143,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62172,7 +62172,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62200,7 +62200,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62229,7 +62229,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62257,7 +62257,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62286,7 +62286,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62371,7 +62371,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62400,7 +62400,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62428,7 +62428,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62457,7 +62457,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62485,7 +62485,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62514,7 +62514,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62542,7 +62542,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62571,7 +62571,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62656,7 +62656,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62742,7 +62742,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62998,7 +62998,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63027,7 +63027,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63112,7 +63112,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63141,7 +63141,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63169,7 +63169,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63198,7 +63198,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63283,7 +63283,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63312,7 +63312,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63340,7 +63340,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63369,7 +63369,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63397,7 +63397,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63426,7 +63426,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63796,7 +63796,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63825,7 +63825,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63853,7 +63853,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63882,7 +63882,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63910,7 +63910,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63939,7 +63939,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64024,7 +64024,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64053,7 +64053,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64195,7 +64195,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64224,7 +64224,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64651,7 +64651,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64680,7 +64680,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64708,7 +64708,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64737,7 +64737,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64765,7 +64765,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64794,7 +64794,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64822,7 +64822,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64851,7 +64851,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -65050,7 +65050,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -65079,7 +65079,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -65221,7 +65221,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -65250,7 +65250,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -65734,7 +65734,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -65820,7 +65820,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -65905,7 +65905,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -65934,7 +65934,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -65962,7 +65962,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -65991,7 +65991,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66019,7 +66019,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66048,7 +66048,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66194,7 +66194,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66223,64 +66223,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66365,7 +66308,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66394,7 +66337,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66593,7 +66536,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66622,7 +66565,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66650,7 +66593,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66679,7 +66622,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66707,7 +66650,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66736,7 +66679,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66935,7 +66878,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66964,7 +66907,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66992,7 +66935,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67021,7 +66964,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67220,7 +67163,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67249,7 +67192,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67277,7 +67220,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67306,7 +67249,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67334,7 +67277,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67363,7 +67306,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67391,7 +67334,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67420,7 +67363,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67448,7 +67391,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67477,7 +67420,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67505,7 +67448,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67534,7 +67477,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67562,7 +67505,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67591,7 +67534,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67619,7 +67562,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67648,7 +67591,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67676,7 +67619,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67705,7 +67648,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67790,7 +67733,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67819,7 +67762,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67847,7 +67790,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67876,7 +67819,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67904,7 +67847,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67933,7 +67876,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68018,7 +67961,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68047,7 +67990,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68132,7 +68075,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68161,7 +68104,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68189,7 +68132,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68218,7 +68161,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68246,7 +68189,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68275,7 +68218,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68531,7 +68474,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68560,7 +68503,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68588,7 +68531,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68617,7 +68560,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68645,7 +68588,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68674,7 +68617,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68702,7 +68645,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68731,7 +68674,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -69044,7 +68987,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -69073,7 +69016,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -69158,7 +69101,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -69187,7 +69130,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -69256,6 +69199,63 @@
       },
       {
         "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=release"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0d26",
+              "id": "build8-b1",
+              "os": "Mac-10.11",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=reference",
+          "--output-trace-tag=_ref"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2.reference",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0d26",
+              "id": "build8-b1",
+              "os": "Mac-10.11",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
           "memory.blink_memory_mobile",
           "-v",
           "--upload-results",
@@ -69500,7 +69500,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -69529,7 +69529,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -69956,7 +69956,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -69985,7 +69985,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70070,7 +70070,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70099,7 +70099,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70127,7 +70127,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70156,7 +70156,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70184,7 +70184,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70213,7 +70213,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70469,7 +70469,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70498,7 +70498,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70526,7 +70526,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70555,7 +70555,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70640,7 +70640,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70669,7 +70669,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70754,7 +70754,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70783,7 +70783,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70925,7 +70925,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70954,7 +70954,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70982,7 +70982,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -71011,7 +71011,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -71039,7 +71039,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -71068,7 +71068,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -71153,7 +71153,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -71182,7 +71182,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -71438,7 +71438,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -71467,7 +71467,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -71552,7 +71552,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -71581,7 +71581,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -71780,7 +71780,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -71809,7 +71809,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -71894,7 +71894,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -71923,7 +71923,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -71951,7 +71951,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -71980,7 +71980,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -72122,7 +72122,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -72151,7 +72151,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -72350,7 +72350,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -72379,7 +72379,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -72407,7 +72407,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -72436,7 +72436,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -72464,7 +72464,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -72493,7 +72493,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -72749,7 +72749,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -72778,7 +72778,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -72920,7 +72920,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -72949,7 +72949,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -72977,7 +72977,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73006,7 +73006,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73091,7 +73091,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73120,7 +73120,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73148,7 +73148,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73177,7 +73177,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73205,7 +73205,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73234,7 +73234,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73262,7 +73262,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73291,7 +73291,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73376,7 +73376,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73405,7 +73405,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73433,7 +73433,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73462,7 +73462,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73490,7 +73490,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73519,7 +73519,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73547,7 +73547,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73576,7 +73576,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73661,7 +73661,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73747,7 +73747,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74003,7 +74003,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74032,7 +74032,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74117,7 +74117,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74146,7 +74146,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74174,7 +74174,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74203,7 +74203,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74288,7 +74288,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74317,7 +74317,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74345,7 +74345,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74374,7 +74374,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74402,7 +74402,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74431,7 +74431,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74801,7 +74801,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74830,7 +74830,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74858,7 +74858,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74887,7 +74887,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74915,7 +74915,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74944,7 +74944,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75029,7 +75029,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75058,7 +75058,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75200,7 +75200,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75229,7 +75229,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75656,7 +75656,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75685,7 +75685,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75713,7 +75713,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75742,7 +75742,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75770,7 +75770,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75799,7 +75799,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75827,7 +75827,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75856,7 +75856,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -76055,7 +76055,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -76084,7 +76084,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -76226,7 +76226,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -76255,7 +76255,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -76739,7 +76739,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -76825,7 +76825,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -76910,7 +76910,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -76939,7 +76939,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -76967,7 +76967,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -76996,7 +76996,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -77024,7 +77024,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -77053,7 +77053,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -77240,63 +77240,6 @@
       },
       {
         "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build121-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build121-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "battor.trivial_pages",
           "-v",
           "--upload-results",
@@ -80261,6 +80204,63 @@
       },
       {
         "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=release_x64"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:1616",
+              "id": "build121-b1",
+              "os": "Windows-10-10240",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=reference",
+          "--output-trace-tag=_ref"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2.reference",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:1616",
+              "id": "build121-b1",
+              "os": "Windows-10-10240",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
           "memory.blink_memory_mobile",
           "-v",
           "--upload-results",
@@ -88204,7 +88204,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -88233,64 +88233,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -88375,7 +88318,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -88404,7 +88347,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -88603,7 +88546,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -88632,7 +88575,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -88660,7 +88603,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -88689,7 +88632,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -88717,7 +88660,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -88746,7 +88689,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -88945,7 +88888,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -88974,7 +88917,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89002,7 +88945,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89031,7 +88974,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89230,7 +89173,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89259,7 +89202,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89287,7 +89230,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89316,7 +89259,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89344,7 +89287,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89373,7 +89316,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89401,7 +89344,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89430,7 +89373,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89458,7 +89401,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89487,7 +89430,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89515,7 +89458,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89544,7 +89487,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89572,7 +89515,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89601,7 +89544,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89629,7 +89572,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89658,7 +89601,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89686,7 +89629,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89715,7 +89658,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89800,7 +89743,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89829,7 +89772,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89857,7 +89800,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89886,7 +89829,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89914,7 +89857,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89943,7 +89886,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90028,7 +89971,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90057,7 +90000,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90142,7 +90085,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90171,7 +90114,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90199,7 +90142,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90228,7 +90171,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90256,7 +90199,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90285,7 +90228,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90541,7 +90484,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90570,7 +90513,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90598,7 +90541,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90627,7 +90570,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90655,7 +90598,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90684,7 +90627,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90712,7 +90655,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90741,7 +90684,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -91054,7 +90997,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -91083,7 +91026,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -91168,7 +91111,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -91197,7 +91140,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -91265,6 +91208,63 @@
         }
       },
       {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=release_x64"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "102b:0534",
+              "id": "build136-m1",
+              "os": "Windows-10-10240",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=reference",
+          "--output-trace-tag=_ref"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2.reference",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "102b:0534",
+              "id": "build136-m1",
+              "os": "Windows-10-10240",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
         "args": [],
         "isolate_name": "media_perftests",
         "name": "media_perftests",
@@ -91529,7 +91529,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -91558,7 +91558,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -91985,7 +91985,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92014,7 +92014,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92099,7 +92099,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92128,7 +92128,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92156,7 +92156,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92185,7 +92185,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92213,7 +92213,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92242,7 +92242,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92498,7 +92498,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92527,7 +92527,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92555,7 +92555,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92584,7 +92584,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92669,7 +92669,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92698,7 +92698,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92783,7 +92783,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92812,7 +92812,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92954,7 +92954,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92983,7 +92983,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -93011,7 +93011,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -93040,7 +93040,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -93068,7 +93068,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -93097,7 +93097,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -93182,7 +93182,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -93211,7 +93211,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -93467,7 +93467,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -93496,7 +93496,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -93581,7 +93581,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -93610,7 +93610,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -93809,7 +93809,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -93838,7 +93838,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -93923,7 +93923,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -93952,7 +93952,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -93980,7 +93980,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -94009,7 +94009,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -94151,7 +94151,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -94180,7 +94180,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -94379,7 +94379,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -94408,7 +94408,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -94436,7 +94436,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -94465,7 +94465,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -94493,7 +94493,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -94522,7 +94522,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -94778,7 +94778,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -94807,7 +94807,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -94949,7 +94949,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -94978,7 +94978,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95006,7 +95006,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95035,7 +95035,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95120,7 +95120,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95149,7 +95149,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95177,7 +95177,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95206,7 +95206,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95234,7 +95234,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95263,7 +95263,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95291,7 +95291,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95320,7 +95320,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95405,7 +95405,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95434,7 +95434,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95462,7 +95462,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95491,7 +95491,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95519,7 +95519,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95548,7 +95548,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95576,7 +95576,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95605,7 +95605,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95690,7 +95690,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95776,7 +95776,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96032,7 +96032,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96061,7 +96061,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96146,7 +96146,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96175,7 +96175,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96203,7 +96203,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96232,7 +96232,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96317,7 +96317,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96346,7 +96346,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96374,7 +96374,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96403,7 +96403,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96431,7 +96431,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96460,7 +96460,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96830,7 +96830,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96859,7 +96859,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96887,7 +96887,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96916,7 +96916,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96944,7 +96944,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96973,7 +96973,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -97058,7 +97058,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -97087,7 +97087,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -97229,7 +97229,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -97258,7 +97258,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -97685,7 +97685,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -97714,7 +97714,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -97742,7 +97742,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -97771,7 +97771,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -97799,7 +97799,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -97828,7 +97828,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -97856,7 +97856,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -97885,7 +97885,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98084,7 +98084,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98113,7 +98113,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98255,7 +98255,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98284,7 +98284,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98768,7 +98768,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98854,7 +98854,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98939,7 +98939,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98968,7 +98968,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98996,7 +98996,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -99025,7 +99025,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -99053,7 +99053,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -99082,7 +99082,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -99247,7 +99247,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -99276,64 +99276,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -99418,7 +99361,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -99447,7 +99390,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -99646,7 +99589,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -99675,7 +99618,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -99703,7 +99646,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -99732,7 +99675,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -99760,7 +99703,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -99789,7 +99732,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -99988,7 +99931,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100017,7 +99960,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100045,7 +99988,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100074,7 +100017,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100273,7 +100216,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100302,7 +100245,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100330,7 +100273,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100359,7 +100302,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100387,7 +100330,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100416,7 +100359,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100444,7 +100387,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100473,7 +100416,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100501,7 +100444,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100530,7 +100473,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100558,7 +100501,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100587,7 +100530,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100615,7 +100558,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100644,7 +100587,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100672,7 +100615,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100701,7 +100644,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100729,7 +100672,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100758,7 +100701,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100843,7 +100786,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100872,7 +100815,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100900,7 +100843,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100929,7 +100872,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100957,7 +100900,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -100986,7 +100929,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -101071,7 +101014,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -101100,7 +101043,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -101185,7 +101128,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -101214,7 +101157,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -101242,7 +101185,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -101271,7 +101214,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -101299,7 +101242,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -101328,7 +101271,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -101584,7 +101527,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -101613,7 +101556,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -101641,7 +101584,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -101670,7 +101613,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -101698,7 +101641,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -101727,7 +101670,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -101755,7 +101698,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -101784,7 +101727,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -102116,7 +102059,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -102145,7 +102088,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -102230,7 +102173,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -102259,7 +102202,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -102327,6 +102270,63 @@
         }
       },
       {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=release_x64"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "1002:6613",
+              "id": "build105-m1",
+              "os": "Windows-2008ServerR2-SP1",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=reference",
+          "--output-trace-tag=_ref"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2.reference",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "1002:6613",
+              "id": "build105-m1",
+              "os": "Windows-2008ServerR2-SP1",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
         "args": [],
         "isolate_name": "media_perftests",
         "name": "media_perftests",
@@ -102591,7 +102591,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -102620,7 +102620,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103047,7 +103047,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103076,7 +103076,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103161,7 +103161,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103190,7 +103190,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103218,7 +103218,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103247,7 +103247,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103275,7 +103275,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103304,7 +103304,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103560,7 +103560,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103589,7 +103589,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103617,7 +103617,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103646,7 +103646,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103731,7 +103731,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103760,7 +103760,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103864,7 +103864,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103893,7 +103893,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -104035,7 +104035,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -104064,7 +104064,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -104092,7 +104092,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -104121,7 +104121,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -104149,7 +104149,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -104178,7 +104178,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -104263,7 +104263,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -104292,7 +104292,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -104548,7 +104548,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -104577,7 +104577,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -104662,7 +104662,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -104691,7 +104691,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -104890,7 +104890,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -104919,7 +104919,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -105004,7 +105004,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -105033,7 +105033,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -105061,7 +105061,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -105090,7 +105090,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -105232,7 +105232,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -105261,7 +105261,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -105460,7 +105460,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -105489,7 +105489,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -105517,7 +105517,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -105546,7 +105546,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -105574,7 +105574,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -105603,7 +105603,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -105859,7 +105859,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -105888,7 +105888,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106030,7 +106030,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106059,7 +106059,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106087,7 +106087,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106116,7 +106116,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106201,7 +106201,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106230,7 +106230,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106258,7 +106258,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106287,7 +106287,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106315,7 +106315,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106344,7 +106344,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106372,7 +106372,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106401,7 +106401,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106486,7 +106486,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106515,7 +106515,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106543,7 +106543,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106572,7 +106572,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106600,7 +106600,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106629,7 +106629,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106657,7 +106657,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106686,7 +106686,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106771,7 +106771,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106857,7 +106857,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107113,7 +107113,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107142,7 +107142,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107227,7 +107227,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107256,7 +107256,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107284,7 +107284,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107313,7 +107313,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107398,7 +107398,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107427,7 +107427,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107455,7 +107455,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107484,7 +107484,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107512,7 +107512,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107541,7 +107541,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107911,7 +107911,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107940,7 +107940,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107968,7 +107968,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107997,7 +107997,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108025,7 +108025,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108054,7 +108054,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108139,7 +108139,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108168,7 +108168,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108310,7 +108310,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108339,7 +108339,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108766,7 +108766,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108795,7 +108795,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108823,7 +108823,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108852,7 +108852,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108880,7 +108880,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108909,7 +108909,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108937,7 +108937,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108966,7 +108966,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -109165,7 +109165,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -109194,7 +109194,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -109336,7 +109336,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -109365,7 +109365,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -109849,7 +109849,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -109935,7 +109935,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -110020,7 +110020,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -110049,7 +110049,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -110077,7 +110077,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -110106,7 +110106,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -110134,7 +110134,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -110163,7 +110163,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -110328,7 +110328,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -110357,64 +110357,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -110499,7 +110442,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -110528,7 +110471,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -110727,7 +110670,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -110756,7 +110699,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -110784,7 +110727,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -110813,7 +110756,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -110841,7 +110784,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -110870,7 +110813,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111069,7 +111012,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111098,7 +111041,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111126,7 +111069,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111155,7 +111098,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111354,7 +111297,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111383,7 +111326,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111411,7 +111354,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111440,7 +111383,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111468,7 +111411,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111497,7 +111440,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111525,7 +111468,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111554,7 +111497,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111582,7 +111525,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111611,7 +111554,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111639,7 +111582,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111668,7 +111611,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111696,7 +111639,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111725,7 +111668,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111753,7 +111696,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111782,7 +111725,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111810,7 +111753,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111839,7 +111782,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111924,7 +111867,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111953,7 +111896,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111981,7 +111924,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112010,7 +111953,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112038,7 +111981,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112067,7 +112010,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112152,7 +112095,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112181,7 +112124,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112266,7 +112209,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112295,7 +112238,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112323,7 +112266,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112352,7 +112295,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112380,7 +112323,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112409,7 +112352,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112665,7 +112608,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112694,7 +112637,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112722,7 +112665,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112751,7 +112694,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112779,7 +112722,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112808,7 +112751,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112836,7 +112779,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112865,7 +112808,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -113197,7 +113140,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -113226,7 +113169,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -113311,7 +113254,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -113340,7 +113283,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -113409,6 +113352,63 @@
       },
       {
         "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=release_x64"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:041a",
+              "id": "build168-m1",
+              "os": "Windows-2008ServerR2-SP1",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=reference",
+          "--output-trace-tag=_ref"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2.reference",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:041a",
+              "id": "build168-m1",
+              "os": "Windows-2008ServerR2-SP1",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
           "memory.blink_memory_mobile",
           "-v",
           "--upload-results",
@@ -113653,7 +113653,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -113682,7 +113682,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114109,7 +114109,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114138,7 +114138,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114223,7 +114223,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114252,7 +114252,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114280,7 +114280,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114309,7 +114309,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114337,7 +114337,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114366,7 +114366,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114622,7 +114622,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114651,7 +114651,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114679,7 +114679,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114708,7 +114708,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114793,7 +114793,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114822,7 +114822,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114926,7 +114926,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114955,7 +114955,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -115097,7 +115097,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -115126,7 +115126,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -115154,7 +115154,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -115183,7 +115183,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -115211,7 +115211,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -115240,7 +115240,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -115325,7 +115325,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -115354,7 +115354,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -115610,7 +115610,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -115639,7 +115639,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -115724,7 +115724,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -115753,7 +115753,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -115952,7 +115952,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -115981,7 +115981,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -116066,7 +116066,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -116095,7 +116095,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -116123,7 +116123,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -116152,7 +116152,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -116294,7 +116294,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -116323,7 +116323,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -116522,7 +116522,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -116551,7 +116551,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -116579,7 +116579,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -116608,7 +116608,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -116636,7 +116636,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -116665,7 +116665,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -116921,7 +116921,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -116950,7 +116950,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117092,7 +117092,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117121,7 +117121,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117149,7 +117149,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117178,7 +117178,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117263,7 +117263,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117292,7 +117292,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117320,7 +117320,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117349,7 +117349,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117377,7 +117377,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117406,7 +117406,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117434,7 +117434,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117463,7 +117463,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117548,7 +117548,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117577,7 +117577,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117605,7 +117605,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117634,7 +117634,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117662,7 +117662,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117691,7 +117691,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117719,7 +117719,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117748,7 +117748,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117833,7 +117833,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117919,7 +117919,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -118175,7 +118175,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -118204,7 +118204,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -118289,7 +118289,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -118318,7 +118318,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -118346,7 +118346,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -118375,7 +118375,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -118460,7 +118460,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -118489,7 +118489,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -118517,7 +118517,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -118546,7 +118546,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -118574,7 +118574,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -118603,7 +118603,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -118973,7 +118973,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119002,7 +119002,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119030,7 +119030,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119059,7 +119059,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119087,7 +119087,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119116,7 +119116,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119201,7 +119201,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119230,7 +119230,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119372,7 +119372,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119401,7 +119401,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119828,7 +119828,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119857,7 +119857,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119885,7 +119885,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119914,7 +119914,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119942,7 +119942,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119971,7 +119971,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119999,7 +119999,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -120028,7 +120028,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -120227,7 +120227,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -120256,7 +120256,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -120398,7 +120398,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -120427,7 +120427,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -120911,7 +120911,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -120997,7 +120997,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121082,7 +121082,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121111,7 +121111,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121139,7 +121139,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121168,7 +121168,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121196,7 +121196,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121225,7 +121225,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121390,7 +121390,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121419,64 +121419,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121561,7 +121504,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121590,7 +121533,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121789,7 +121732,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121818,7 +121761,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121846,7 +121789,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121875,7 +121818,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121903,7 +121846,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121932,7 +121875,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122131,7 +122074,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122160,7 +122103,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122188,7 +122131,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122217,7 +122160,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122416,7 +122359,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122445,7 +122388,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122473,7 +122416,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122502,7 +122445,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122530,7 +122473,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122559,7 +122502,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122587,7 +122530,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122616,7 +122559,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122644,7 +122587,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122673,7 +122616,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122701,7 +122644,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122730,7 +122673,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122758,7 +122701,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122787,7 +122730,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122815,7 +122758,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122844,7 +122787,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122872,7 +122815,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122901,7 +122844,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122986,7 +122929,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123015,7 +122958,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123043,7 +122986,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123072,7 +123015,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123100,7 +123043,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123129,7 +123072,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123214,7 +123157,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123243,7 +123186,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123328,7 +123271,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123357,7 +123300,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123385,7 +123328,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123414,7 +123357,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123442,7 +123385,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123471,7 +123414,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123727,7 +123670,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123756,7 +123699,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123784,7 +123727,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123813,7 +123756,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123841,7 +123784,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123870,7 +123813,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123898,7 +123841,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123927,7 +123870,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -124259,7 +124202,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -124288,7 +124231,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -124373,7 +124316,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -124402,7 +124345,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -124470,6 +124413,63 @@
         }
       },
       {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=release_x64"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "10de:104a",
+              "id": "build96-m1",
+              "os": "Windows-2008ServerR2-SP1",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=reference",
+          "--output-trace-tag=_ref"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2.reference",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "10de:104a",
+              "id": "build96-m1",
+              "os": "Windows-2008ServerR2-SP1",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
         "args": [],
         "isolate_name": "media_perftests",
         "name": "media_perftests",
@@ -124734,7 +124734,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -124763,7 +124763,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125190,7 +125190,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125219,7 +125219,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125304,7 +125304,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125333,7 +125333,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125361,7 +125361,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125390,7 +125390,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125418,7 +125418,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125447,7 +125447,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125703,7 +125703,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125732,7 +125732,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125760,7 +125760,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125789,7 +125789,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125874,7 +125874,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125903,7 +125903,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126007,7 +126007,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126036,7 +126036,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126178,7 +126178,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126207,7 +126207,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126235,7 +126235,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126264,7 +126264,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126292,7 +126292,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126321,7 +126321,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126406,7 +126406,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126435,7 +126435,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126691,7 +126691,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126720,7 +126720,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126805,7 +126805,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126834,7 +126834,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -127033,7 +127033,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -127062,7 +127062,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -127147,7 +127147,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -127176,7 +127176,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -127204,7 +127204,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -127233,7 +127233,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -127375,7 +127375,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -127404,7 +127404,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -127603,7 +127603,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -127632,7 +127632,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -127660,7 +127660,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -127689,7 +127689,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -127717,7 +127717,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -127746,7 +127746,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128002,7 +128002,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128031,7 +128031,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128173,7 +128173,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128202,7 +128202,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128230,7 +128230,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128259,7 +128259,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128344,7 +128344,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128373,7 +128373,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128401,7 +128401,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128430,7 +128430,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128458,7 +128458,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128487,7 +128487,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128515,7 +128515,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128544,7 +128544,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128629,7 +128629,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128658,7 +128658,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128686,7 +128686,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128715,7 +128715,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128743,7 +128743,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128772,7 +128772,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128800,7 +128800,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128829,7 +128829,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128914,7 +128914,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -129000,7 +129000,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -129256,7 +129256,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -129285,7 +129285,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -129370,7 +129370,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -129399,7 +129399,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -129427,7 +129427,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -129456,7 +129456,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -129541,7 +129541,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -129570,7 +129570,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -129598,7 +129598,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -129627,7 +129627,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -129655,7 +129655,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -129684,7 +129684,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -130054,7 +130054,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -130083,7 +130083,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -130111,7 +130111,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -130140,7 +130140,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -130168,7 +130168,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -130197,7 +130197,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -130282,7 +130282,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -130311,7 +130311,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -130453,7 +130453,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -130482,7 +130482,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -130909,7 +130909,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -130938,7 +130938,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -130966,7 +130966,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -130995,7 +130995,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -131023,7 +131023,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -131052,7 +131052,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -131080,7 +131080,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -131109,7 +131109,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -131308,7 +131308,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -131337,7 +131337,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -131479,7 +131479,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -131508,7 +131508,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -131992,7 +131992,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132078,7 +132078,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132163,7 +132163,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132192,7 +132192,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132220,7 +132220,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132249,7 +132249,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132277,7 +132277,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132306,7 +132306,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132452,7 +132452,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132481,64 +132481,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132623,7 +132566,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132652,7 +132595,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132851,7 +132794,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132880,7 +132823,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132908,7 +132851,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132937,7 +132880,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132965,7 +132908,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132994,7 +132937,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133193,7 +133136,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133222,7 +133165,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133250,7 +133193,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133279,7 +133222,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133478,7 +133421,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133507,7 +133450,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133535,7 +133478,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133564,7 +133507,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133592,7 +133535,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133621,7 +133564,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133649,7 +133592,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133678,7 +133621,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133706,7 +133649,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133735,7 +133678,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133763,7 +133706,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133792,7 +133735,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133820,7 +133763,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133849,7 +133792,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133877,7 +133820,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133906,7 +133849,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133934,7 +133877,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133963,7 +133906,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134048,7 +133991,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134077,7 +134020,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134105,7 +134048,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134134,7 +134077,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134162,7 +134105,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134191,7 +134134,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134276,7 +134219,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134305,7 +134248,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134390,7 +134333,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134419,7 +134362,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134447,7 +134390,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134476,7 +134419,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134504,7 +134447,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134533,7 +134476,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134789,7 +134732,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134818,7 +134761,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134846,7 +134789,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134875,7 +134818,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134903,7 +134846,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134932,7 +134875,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134960,7 +134903,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134989,7 +134932,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -135321,7 +135264,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -135350,7 +135293,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -135435,7 +135378,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -135464,7 +135407,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -135532,6 +135475,63 @@
         }
       },
       {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=release"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "102b:0532",
+              "id": "build189-m1",
+              "os": "Windows-2008ServerR2-SP1",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=reference",
+          "--output-trace-tag=_ref"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2.reference",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "102b:0532",
+              "id": "build189-m1",
+              "os": "Windows-2008ServerR2-SP1",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
         "args": [],
         "isolate_name": "media_perftests",
         "name": "media_perftests",
@@ -135796,7 +135796,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -135825,7 +135825,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136252,7 +136252,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136281,7 +136281,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136366,7 +136366,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136395,7 +136395,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136423,7 +136423,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136452,7 +136452,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136480,7 +136480,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136509,7 +136509,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136765,7 +136765,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136794,7 +136794,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136822,7 +136822,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136851,7 +136851,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136936,7 +136936,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136965,7 +136965,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137069,7 +137069,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137098,7 +137098,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137240,7 +137240,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137269,7 +137269,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137297,7 +137297,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137326,7 +137326,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137354,7 +137354,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137383,7 +137383,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137468,7 +137468,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137497,7 +137497,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137753,7 +137753,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137782,7 +137782,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137867,7 +137867,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137896,7 +137896,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -138095,7 +138095,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -138124,7 +138124,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -138209,7 +138209,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -138238,7 +138238,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -138266,7 +138266,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -138295,7 +138295,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -138437,7 +138437,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -138466,7 +138466,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -138665,7 +138665,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -138694,7 +138694,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -138722,7 +138722,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -138751,7 +138751,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -138779,7 +138779,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -138808,7 +138808,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139064,7 +139064,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139093,7 +139093,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139235,7 +139235,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139264,7 +139264,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139292,7 +139292,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139321,7 +139321,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139406,7 +139406,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139435,7 +139435,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139463,7 +139463,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139492,7 +139492,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139520,7 +139520,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139549,7 +139549,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139577,7 +139577,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139606,7 +139606,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139691,7 +139691,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139720,7 +139720,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139748,7 +139748,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139777,7 +139777,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139805,7 +139805,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139834,7 +139834,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139862,7 +139862,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139891,7 +139891,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139976,7 +139976,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -140062,7 +140062,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -140318,7 +140318,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -140347,7 +140347,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -140432,7 +140432,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -140461,7 +140461,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -140489,7 +140489,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -140518,7 +140518,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -140603,7 +140603,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -140632,7 +140632,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -140660,7 +140660,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -140689,7 +140689,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -140717,7 +140717,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -140746,7 +140746,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -141116,7 +141116,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -141145,7 +141145,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -141173,7 +141173,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -141202,7 +141202,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -141230,7 +141230,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -141259,7 +141259,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -141344,7 +141344,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -141373,7 +141373,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -141515,7 +141515,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -141544,7 +141544,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -141971,7 +141971,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -142000,7 +142000,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -142028,7 +142028,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -142057,7 +142057,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -142085,7 +142085,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -142114,7 +142114,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -142142,7 +142142,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -142171,7 +142171,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -142370,7 +142370,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -142399,7 +142399,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -142541,7 +142541,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -142570,7 +142570,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143054,7 +143054,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143140,7 +143140,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143225,7 +143225,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143254,7 +143254,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143282,7 +143282,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143311,7 +143311,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143339,7 +143339,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143368,7 +143368,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143514,7 +143514,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143543,64 +143543,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143685,7 +143628,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143714,7 +143657,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143913,7 +143856,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143942,7 +143885,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143970,7 +143913,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143999,7 +143942,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144027,7 +143970,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144056,7 +143999,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144255,7 +144198,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144284,7 +144227,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144312,7 +144255,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144341,7 +144284,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144540,7 +144483,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144569,7 +144512,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144597,7 +144540,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144626,7 +144569,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144654,7 +144597,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144683,7 +144626,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144711,7 +144654,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144740,7 +144683,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144768,7 +144711,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144797,7 +144740,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144825,7 +144768,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144854,7 +144797,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144882,7 +144825,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144911,7 +144854,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144939,7 +144882,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144968,7 +144911,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144996,7 +144939,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145025,7 +144968,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145110,7 +145053,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145139,7 +145082,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145167,7 +145110,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145196,7 +145139,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145224,7 +145167,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145253,7 +145196,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145338,7 +145281,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145367,7 +145310,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145452,7 +145395,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145481,7 +145424,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145509,7 +145452,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145538,7 +145481,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145566,7 +145509,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145595,7 +145538,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145851,7 +145794,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145880,7 +145823,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145908,7 +145851,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145937,7 +145880,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145965,7 +145908,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145994,7 +145937,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -146022,7 +145965,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -146051,7 +145994,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -146383,7 +146326,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -146412,7 +146355,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -146497,7 +146440,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -146526,7 +146469,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -146595,6 +146538,63 @@
       },
       {
         "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=release_x64"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "102b:0532",
+              "id": "build142-m1",
+              "os": "Windows-2008ServerR2-SP1",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=reference",
+          "--output-trace-tag=_ref"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2.reference",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "102b:0532",
+              "id": "build142-m1",
+              "os": "Windows-2008ServerR2-SP1",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
           "memory.blink_memory_mobile",
           "-v",
           "--upload-results",
@@ -146839,7 +146839,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -146868,7 +146868,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -147295,7 +147295,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -147324,7 +147324,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -147409,7 +147409,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -147438,7 +147438,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -147466,7 +147466,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -147495,7 +147495,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -147523,7 +147523,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -147552,7 +147552,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -147808,7 +147808,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -147837,7 +147837,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -147865,7 +147865,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -147894,7 +147894,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -147979,7 +147979,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148008,7 +148008,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148112,7 +148112,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148141,7 +148141,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148283,7 +148283,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148312,7 +148312,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148340,7 +148340,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148369,7 +148369,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148397,7 +148397,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148426,7 +148426,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148511,7 +148511,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148540,7 +148540,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148796,7 +148796,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148825,7 +148825,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148910,7 +148910,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148939,7 +148939,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -149138,7 +149138,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -149167,7 +149167,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -149252,7 +149252,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -149281,7 +149281,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -149309,7 +149309,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -149338,7 +149338,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -149480,7 +149480,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -149509,7 +149509,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -149708,7 +149708,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -149737,7 +149737,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -149765,7 +149765,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -149794,7 +149794,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -149822,7 +149822,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -149851,7 +149851,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150107,7 +150107,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150136,7 +150136,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150278,7 +150278,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150307,7 +150307,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150335,7 +150335,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150364,7 +150364,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150449,7 +150449,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150478,7 +150478,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150506,7 +150506,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150535,7 +150535,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150563,7 +150563,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150592,7 +150592,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150620,7 +150620,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150649,7 +150649,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150734,7 +150734,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150763,7 +150763,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150791,7 +150791,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150820,7 +150820,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150848,7 +150848,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150877,7 +150877,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150905,7 +150905,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150934,7 +150934,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -151019,7 +151019,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -151105,7 +151105,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -151361,7 +151361,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -151390,7 +151390,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -151475,7 +151475,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -151504,7 +151504,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -151532,7 +151532,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -151561,7 +151561,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -151646,7 +151646,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -151675,7 +151675,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -151703,7 +151703,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -151732,7 +151732,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -151760,7 +151760,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -151789,7 +151789,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -152159,7 +152159,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -152188,7 +152188,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -152216,7 +152216,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -152245,7 +152245,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -152273,7 +152273,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -152302,7 +152302,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -152387,7 +152387,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -152416,7 +152416,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -152558,7 +152558,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -152587,7 +152587,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153014,7 +153014,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153043,7 +153043,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153071,7 +153071,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153100,7 +153100,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153128,7 +153128,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153157,7 +153157,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153185,7 +153185,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153214,7 +153214,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153413,7 +153413,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153442,7 +153442,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153584,7 +153584,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153613,7 +153613,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -154097,7 +154097,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -154183,7 +154183,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -154268,7 +154268,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -154297,7 +154297,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -154325,7 +154325,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -154354,7 +154354,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -154382,7 +154382,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -154411,7 +154411,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -154557,7 +154557,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -154586,64 +154586,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -154728,7 +154671,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -154757,7 +154700,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -154956,7 +154899,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -154985,7 +154928,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -155013,7 +154956,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -155042,7 +154985,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -155070,7 +155013,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -155099,7 +155042,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -155298,7 +155241,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -155327,7 +155270,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -155355,7 +155298,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -155384,7 +155327,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -155583,7 +155526,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -155612,7 +155555,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -155640,7 +155583,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -155669,7 +155612,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -155697,7 +155640,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -155726,7 +155669,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -155754,7 +155697,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -155783,7 +155726,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -155811,7 +155754,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -155840,7 +155783,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -155868,7 +155811,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -155897,7 +155840,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -155925,7 +155868,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -155954,7 +155897,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -155982,7 +155925,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -156011,7 +155954,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -156039,7 +155982,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -156068,7 +156011,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -156153,7 +156096,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -156182,7 +156125,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -156210,7 +156153,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -156239,7 +156182,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -156267,7 +156210,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -156296,7 +156239,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -156381,7 +156324,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -156410,7 +156353,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -156495,7 +156438,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -156524,7 +156467,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -156552,7 +156495,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -156581,7 +156524,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -156609,7 +156552,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -156638,7 +156581,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -156894,7 +156837,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -156923,7 +156866,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -156951,7 +156894,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -156980,7 +156923,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -157008,7 +156951,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -157037,7 +156980,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -157065,7 +157008,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -157094,7 +157037,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -157426,7 +157369,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -157455,7 +157398,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -157540,7 +157483,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -157569,7 +157512,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -157637,6 +157580,63 @@
         }
       },
       {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=release_x64"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "102b:0532",
+              "id": "build147-m1",
+              "os": "Windows-2012ServerR2-SP0",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=reference",
+          "--output-trace-tag=_ref"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2.reference",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "102b:0532",
+              "id": "build147-m1",
+              "os": "Windows-2012ServerR2-SP0",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
         "args": [],
         "isolate_name": "media_perftests",
         "name": "media_perftests",
@@ -157901,7 +157901,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -157930,7 +157930,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -158357,7 +158357,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -158386,7 +158386,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -158471,7 +158471,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -158500,7 +158500,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -158528,7 +158528,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -158557,7 +158557,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -158585,7 +158585,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -158614,7 +158614,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -158870,7 +158870,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -158899,7 +158899,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -158927,7 +158927,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -158956,7 +158956,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -159041,7 +159041,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -159070,7 +159070,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -159174,7 +159174,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -159203,7 +159203,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -159345,7 +159345,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -159374,7 +159374,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -159402,7 +159402,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -159431,7 +159431,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -159459,7 +159459,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -159488,7 +159488,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -159573,7 +159573,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -159602,7 +159602,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -159858,7 +159858,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -159887,7 +159887,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -159972,7 +159972,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160001,7 +160001,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160200,7 +160200,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160229,7 +160229,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160314,7 +160314,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160343,7 +160343,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160371,7 +160371,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160400,7 +160400,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160542,7 +160542,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160571,7 +160571,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160770,7 +160770,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160799,7 +160799,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160827,7 +160827,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160856,7 +160856,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160884,7 +160884,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160913,7 +160913,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161169,7 +161169,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161198,7 +161198,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161340,7 +161340,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161369,7 +161369,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161397,7 +161397,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161426,7 +161426,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161511,7 +161511,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161540,7 +161540,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161568,7 +161568,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161597,7 +161597,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161625,7 +161625,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161654,7 +161654,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161682,7 +161682,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161711,7 +161711,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161796,7 +161796,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161825,7 +161825,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161853,7 +161853,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161882,7 +161882,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161910,7 +161910,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161939,7 +161939,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161967,7 +161967,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161996,7 +161996,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -162081,7 +162081,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -162167,7 +162167,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -162423,7 +162423,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -162452,7 +162452,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -162537,7 +162537,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -162566,7 +162566,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -162594,7 +162594,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -162623,7 +162623,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -162708,7 +162708,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -162737,7 +162737,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -162765,7 +162765,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -162794,7 +162794,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -162822,7 +162822,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -162851,7 +162851,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -163221,7 +163221,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -163250,7 +163250,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -163278,7 +163278,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -163307,7 +163307,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -163335,7 +163335,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -163364,7 +163364,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -163449,7 +163449,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -163478,7 +163478,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -163620,7 +163620,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -163649,7 +163649,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -164076,7 +164076,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -164105,7 +164105,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -164133,7 +164133,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -164162,7 +164162,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -164190,7 +164190,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -164219,7 +164219,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -164247,7 +164247,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -164276,7 +164276,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -164475,7 +164475,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -164504,7 +164504,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -164646,7 +164646,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -164675,7 +164675,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165159,7 +165159,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165245,7 +165245,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165330,7 +165330,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165359,7 +165359,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165387,7 +165387,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165416,7 +165416,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165444,7 +165444,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165473,7 +165473,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165660,63 +165660,6 @@
       },
       {
         "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "battor.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "battor.tough_video_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 21600,
-          "hard_timeout": 7200,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "battor.trivial_pages",
           "-v",
           "--upload-results",
@@ -168681,6 +168624,63 @@
       },
       {
         "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=release_x64"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:161e",
+              "id": "build34-b1",
+              "os": "Windows-10-10240",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "media.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=reference",
+          "--output-trace-tag=_ref"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.tough_video_cases_tbmv2.reference",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:161e",
+              "id": "build34-b1",
+              "os": "Windows-10-10240",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 21600,
+          "hard_timeout": 7200,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
           "memory.blink_memory_mobile",
           "-v",
           "--upload-results",
diff --git a/testing/buildbot/chromium.swarm.json b/testing/buildbot/chromium.swarm.json
index 70f448cd..26fa624 100644
--- a/testing/buildbot/chromium.swarm.json
+++ b/testing/buildbot/chromium.swarm.json
@@ -13,7 +13,8 @@
               "device_os": "KTU84P",
               "device_type": "hammerhead"
             }
-          ]
+          ],
+          "shards": 7
         },
         "test": "android_webview_test_apk"
       },
@@ -42,7 +43,8 @@
               "device_os": "KTU84P",
               "device_type": "hammerhead"
             }
-          ]
+          ],
+          "shards": 14
         },
         "test": "chrome_public_test_apk"
       },
@@ -55,7 +57,8 @@
               "device_os": "KTU84P",
               "device_type": "hammerhead"
             }
-          ]
+          ],
+          "shards": 10
         },
         "test": "content_browsertests"
       },
@@ -68,7 +71,8 @@
               "device_os": "KTU84P",
               "device_type": "hammerhead"
             }
-          ]
+          ],
+          "shards": 3
         },
         "test": "content_unittests"
       },
@@ -81,7 +85,8 @@
               "device_os": "KTU84P",
               "device_type": "hammerhead"
             }
-          ]
+          ],
+          "shards": 4
         },
         "test": "net_unittests"
       },
@@ -94,7 +99,8 @@
               "device_os": "KTU84P",
               "device_type": "hammerhead"
             }
-          ]
+          ],
+          "shards": 5
         },
         "test": "unit_tests"
       }
@@ -114,7 +120,8 @@
               "device_os": "MMB29Q",
               "device_type": "bullhead"
             }
-          ]
+          ],
+          "shards": 7
         },
         "test": "android_webview_test_apk"
       },
@@ -143,7 +150,8 @@
               "device_os": "MMB29Q",
               "device_type": "bullhead"
             }
-          ]
+          ],
+          "shards": 15
         },
         "test": "chrome_public_test_apk"
       },
@@ -156,7 +164,8 @@
               "device_os": "MMB29Q",
               "device_type": "bullhead"
             }
-          ]
+          ],
+          "shards": 10
         },
         "test": "content_browsertests"
       },
@@ -169,7 +178,8 @@
               "device_os": "MMB29Q",
               "device_type": "bullhead"
             }
-          ]
+          ],
+          "shards": 4
         },
         "test": "content_unittests"
       },
@@ -182,7 +192,8 @@
               "device_os": "MMB29Q",
               "device_type": "bullhead"
             }
-          ]
+          ],
+          "shards": 4
         },
         "test": "net_unittests"
       },
@@ -195,7 +206,8 @@
               "device_os": "MMB29Q",
               "device_type": "bullhead"
             }
-          ]
+          ],
+          "shards": 8
         },
         "test": "unit_tests"
       }
diff --git a/testing/xvfb.py b/testing/xvfb.py
index a5620e7c..3ca9aa8 100755
--- a/testing/xvfb.py
+++ b/testing/xvfb.py
@@ -6,6 +6,7 @@
 """Runs tests with Xvfb and Openbox on Linux and normally on other platforms."""
 
 import os
+import os.path
 import platform
 import signal
 import subprocess
@@ -80,10 +81,19 @@
 
 
 def main():
+  USAGE = 'Usage: xvfb.py [command args...]'
   if len(sys.argv) < 2:
-    print >> sys.stderr, (
-        'Usage: xvfb.py [command args...]')
+    print >> sys.stderr, USAGE
     return 2
+
+  # If the user still thinks the first argument is the execution directory then
+  # print a friendly error message and quit.
+  if os.path.isdir(sys.argv[1]):
+    print >> sys.stderr, (
+        'Invalid command: \"%s\" is a directory' % sys.argv[1])
+    print >> sys.stderr, USAGE
+    return 3
+
   return run_executable(sys.argv[1:], os.environ.copy())
 
 
diff --git a/third_party/WebKit/LayoutTests/LeakExpectations b/third_party/WebKit/LayoutTests/LeakExpectations
index 3dc29fe0..5b775b2 100644
--- a/third_party/WebKit/LayoutTests/LeakExpectations
+++ b/third_party/WebKit/LayoutTests/LeakExpectations
@@ -25,6 +25,7 @@
 
 # FIXME: The below tests fails when the leak detector is disabled.
 crbug.com/366029 compositing/fixed-body-background-positioned.html [ Failure Pass ]
+crbug.com/366029 virtual/disable-spinvalidation/compositing/fixed-body-background-positioned.html [ Failure Pass ]
 
 # FIXME: The below tests crashes when the leak detector is run on debug builds
 crbug.com/366043 [ Debug ] fast/history/history-traversal-is-asynchronous.html [ Crash ]
diff --git a/third_party/WebKit/LayoutTests/SlowTests b/third_party/WebKit/LayoutTests/SlowTests
index 4485b557..a47077a1 100644
--- a/third_party/WebKit/LayoutTests/SlowTests
+++ b/third_party/WebKit/LayoutTests/SlowTests
@@ -14,6 +14,8 @@
 crbug.com/24182 editing/selection/modify_move/move-by-word-visually-multi-line.html [ Slow ]
 crbug.com/24182 compositing/culling/filter-occlusion-blur-large.html [ Slow ]
 crbug.com/24182 compositing/video-frame-size-change.html [ Slow ]
+crbug.com/24182 virtual/disable-spinvalidation/compositing/culling/filter-occlusion-blur-large.html [ Slow ]
+crbug.com/24182 virtual/disable-spinvalidation/compositing/video-frame-size-change.html [ Slow ]
 crbug.com/24182 css3/filters/effect-reference-hidpi-hw.html [ Slow ]
 crbug.com/24182 css3/filters/filter-change-repaint-composited.html [ Slow ]
 crbug.com/24182 editing/selection/caret-at-bidi-boundary.html [ Slow ]
@@ -302,6 +304,7 @@
 crbug.com/528419 inspector/elements/styles-2/pseudo-elements.html [ Slow ]
 
 crbug.com/529345 [ Win10 ] paint/masks/fieldset-mask.html [ Slow ]
+crbug.com/529345 [ Win10 ] virtual/disable-spinvalidation/paint/masks/fieldset-mask.html [ Slow ]
 crbug.com/552556 [ Win Linux ] virtual/threaded/fast/scroll-behavior/overflow-scroll-root-frame-animates.html [ Slow ]
 crbug.com/552556 [ Win Linux ] virtual/threaded/fast/scroll-behavior/overflow-scroll-animates.html [ Slow ]
 crbug.com/570656 [ Mac ] fast/writing-mode/Kusa-Makura-background-canvas.html [ Slow ]
@@ -354,6 +357,7 @@
 crbug.com/614910 virtual/gpu-rasterization/images/color-profile-filter.html [ Slow ]
 
 crbug.com/623798 paint/images/animated-gif-last-frame-crash.html [ Slow ]
+crbug.com/623798 virtual/disable-spinvalidation/paint/images/animated-gif-last-frame-crash.html [ Slow ]
 
 crbug.com/606649 fast/dom/gc-dom-tree-lifetime.html [ Slow ]
 
@@ -367,6 +371,8 @@
 # bots running tests on real hardware or maybe when using SwiftShader.
 crbug.com/646528 compositing/lots-of-img-layers.html [ Slow ]
 crbug.com/646528 compositing/lots-of-img-layers-with-opacity.html [ Slow ]
+crbug.com/646528 virtual/disable-spinvalidation/compositing/lots-of-img-layers.html [ Slow ]
+crbug.com/646528 virtual/disable-spinvalidation/compositing/lots-of-img-layers-with-opacity.html [ Slow ]
 
 # IDB Observer tests require multiple browsing contexts/workers interacting with
 # IndexedDB, which can be slow.
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index f8a69b1..378757b 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -50,6 +50,7 @@
 # --- End SPV2 Tests ---
 
 crbug.com/309675 compositing/gestures/gesture-tapHighlight-simple-longPress.html [ Failure ]
+crbug.com/309675 virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-simple-longPress.html [ Failure ]
 
 # TODO(schenney) For some reason these tests are failing to get correct baselines with rebaseline-cl.
 # They may be flaky or it may be something else. Investigate and rebaseline manually or with the bot.
@@ -69,6 +70,7 @@
 crbug.com/349985 [ Win ] fast/table/backgr_position-table-column-group-collapsed-border.html [ Failure ]
 
 crbug.com/504613 crbug.com/524248 paint/images/image-backgrounds-not-antialiased.html [ Skip ]
+crbug.com/504613 crbug.com/524248 virtual/disable-spinvalidation/paint/images/image-backgrounds-not-antialiased.html [ Skip ]
 
 crbug.com/517449 [ Android ] images/optimize-contrast-image.html [ Failure ]
 
@@ -81,6 +83,7 @@
 crbug.com/549742 [ Linux Mac Win ] virtual/gpu/fast/canvas/canvas-drawImage-video-imageSmoothingEnabled.html [ Failure ]
 
 crbug.com/591500 [ Win10 ] compositing/squashing/squashing-print.html [ Failure ]
+crbug.com/591500 [ Win10 ] virtual/disable-spinvalidation/compositing/squashing/squashing-print.html [ Failure ]
 
 crbug.com/602110 hittesting/border-hittest-with-image-fallback.html [ Failure ]
 
@@ -131,6 +134,7 @@
 crbug.com/683339 virtual/disable-spinvalidation/paint/invalidation/paged-with-overflowing-block-rl.html [ Failure ]
 
 crbug.com/646010 paint/selection/text-selection-newline-rtl-double-linebreak.html [ Failure ]
+crbug.com/646010 virtual/disable-spinvalidation/paint/selection/text-selection-newline-rtl-double-linebreak.html [ Failure ]
 crbug.com/646015 paint/invalidation/hover-invalidation-table.html [ Failure ]
 crbug.com/646015 virtual/disable-spinvalidation/paint/invalidation/hover-invalidation-table.html [ Failure ]
 crbug.com/646016 paint/invalidation/selected-replaced.html [ Failure ]
@@ -151,9 +155,11 @@
 
 # Added 2016-12-14
 crbug.com/674396 [ Win ] compositing/reflections/nested-reflection-transition.html [ Pass Failure ]
+crbug.com/674396 [ Win ] virtual/disable-spinvalidation/compositing/reflections/nested-reflection-transition.html [ Pass Failure ]
 
 # Added 2016-12-15
 crbug.com/674468 [ Trusty ] compositing/reflections/nested-reflection-transition.html [ Pass Failure ]
+crbug.com/674468 [ Trusty ] virtual/disable-spinvalidation/compositing/reflections/nested-reflection-transition.html [ Pass Failure ]
 
 # Added 2016-12-16
 crbug.com/674858 [ Linux ] virtual/threaded/printing/offscreencanvas-2d-printing.html [ Pass Failure Crash ]
@@ -162,6 +168,8 @@
 # Added 2017-02-20
 crbug.com/693510 compositing/reflections/nested-reflection-anchor-point.html [ Failure Pass ]
 crbug.com/693510 compositing/reflections/nested-reflection-animated.html [ Failure Pass ]
+crbug.com/693510 virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point.html [ Failure Pass ]
+crbug.com/693510 virtual/disable-spinvalidation/compositing/reflections/nested-reflection-animated.html [ Failure Pass ]
 
 crbug.com/667045 paint/invalidation/table/composited-cell-collapsed-border-add-anonymous.html [ Crash ]
 crbug.com/667045 virtual/disable-spinvalidation/paint/invalidation/table/composited-cell-collapsed-border-add-anonymous.html [ Crash ]
@@ -1801,6 +1809,7 @@
 crbug.com/487344 paint/invalidation/video-paint-invalidation.html [ Failure ]
 crbug.com/487344 virtual/disable-spinvalidation/paint/invalidation/video-paint-invalidation.html [ Failure ]
 crbug.com/487344 [ Win ] compositing/video/video-controls-layer-creation.html [ Pass Failure ]
+crbug.com/487344 [ Win ] virtual/disable-spinvalidation/compositing/video/video-controls-layer-creation.html [ Pass Failure ]
 crbug.com/487344 fast/hidpi/video-controls-in-hidpi.html [ Failure ]
 crbug.com/487344 fast/layers/video-layer.html [ Failure ]
 crbug.com/487344 media/audio-controls-rendering.html [ Failure ]
@@ -1890,7 +1899,6 @@
 crbug.com/679742 external/wpt/mixed-content/allowed/no-opt-in/same-host-wss/websocket-request/top-level/keep-scheme-redirect/websocket-allowed.https.html [ Failure ]
 crbug.com/679742 external/wpt/mixed-content/allowed/no-opt-in/same-host-wss/websocket-request/top-level/no-redirect/websocket-allowed.https.html [ Failure ]
 crbug.com/679742 external/wpt/mixed-content/allowed/http-csp/same-host-wss/websocket-request/top-level/no-redirect/websocket-allowed.https.html [ Failure ]
-crbug.com/679742 external/wpt/mixed-content/optionally-blockable/http-csp/cross-origin-http/link-prefetch-tag/top-level/swap-scheme-redirect/opt-in-blocks.https.html [ Failure ]
 
 # These wpt/mixed-content tests consistently time out.
 crbug.com/626703 external/wpt/mixed-content/blockable/http-csp/cross-origin-http/form-tag/top-level/keep-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
@@ -1932,6 +1940,30 @@
 crbug.com/626703 external/wpt/domxpath/001.html [ Failure ]
 
 # ====== New tests from w3c-test-autoroller added here ======
+crbug.com/626703 external/wpt/html/semantics/interactive-elements/context-menus/contextmenu-event-manual.htm [ Timeout ]
+crbug.com/626703 external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-manual.html [ Timeout ]
+crbug.com/626703 external/wpt/longtask-timing/longtask-in-childiframe-crossorigin.html [ Timeout ]
+crbug.com/626703 external/wpt/longtask-timing/longtask-in-sibling-iframe-crossorigin.html [ Timeout ]
+crbug.com/626703 external/wpt/orientation-event/deviceorientationabsoluteevent.html [ Timeout ]
+crbug.com/626703 external/wpt/orientation-event/free-fall-manual.html [ Timeout ]
+crbug.com/626703 external/wpt/orientation-event/screen-upmost-manual.html [ Timeout ]
+crbug.com/626703 external/wpt/orientation-event/screen-upright-manual.html [ Timeout ]
+crbug.com/626703 external/wpt/orientation-event/t001-manual.html [ Timeout ]
+crbug.com/626703 external/wpt/orientation-event/t002-manual.html [ Timeout ]
+crbug.com/626703 external/wpt/orientation-event/t003-manual.html [ Timeout ]
+crbug.com/626703 external/wpt/orientation-event/t006-manual.html [ Timeout ]
+crbug.com/626703 external/wpt/orientation-event/t009-manual.html [ Timeout ]
+crbug.com/626703 external/wpt/orientation-event/t010-manual.html [ Timeout ]
+crbug.com/626703 external/wpt/orientation-event/t012-manual.html [ Timeout ]
+crbug.com/626703 external/wpt/orientation-event/t021-manual.html [ Timeout ]
+crbug.com/626703 external/wpt/orientation-event/t022-manual.html [ Timeout ]
+crbug.com/626703 external/wpt/orientation-event/t023-manual.html [ Timeout ]
+crbug.com/626703 external/wpt/orientation-event/t025-manual.html [ Timeout ]
+crbug.com/626703 external/wpt/orientation-event/t028-manual.html [ Timeout ]
+crbug.com/626703 external/wpt/service-workers/service-worker/clients-matchall-include-uncontrolled.https.html [ Timeout ]
+crbug.com/626703 external/wpt/service-workers/service-worker/clients-matchall-order.https.html [ Failure Pass ]
+crbug.com/626703 external/wpt/uievents/interface/click-event-manual.htm [ Timeout ]
+crbug.com/626703 external/wpt/uievents/interface/dblclick-event-manual.htm [ Timeout ]
 crbug.com/626703 [ Android Win10 ] external/wpt/fullscreen/api/document-exit-fullscreen-nested-in-iframe-manual.html [ Timeout ]
 crbug.com/626703 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html [ Timeout ]
 crbug.com/626703 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html [ Timeout ]
@@ -2177,7 +2209,6 @@
 crbug.com/626703 external/wpt/streams/writable-streams/close.serviceworker.https.html [ Timeout ]
 crbug.com/626703 external/wpt/service-workers/service-worker/registration-useCache.https.html [ Timeout ]
 crbug.com/626703 external/wpt/streams/writable-streams/close.sharedworker.html [ Timeout ]
-crbug.com/626703 external/wpt/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-2.html [ Timeout ]
 crbug.com/626703 external/wpt/html/semantics/embedded-content/the-iframe-element/cross_origin_parentage.html [ Timeout ]
 crbug.com/626703 external/wpt/html/semantics/scripting-1/the-script-element/async_007.htm [ Timeout ]
 crbug.com/626703 external/wpt/html/semantics/scripting-1/the-script-element/async_010.htm [ Timeout ]
@@ -2227,7 +2258,6 @@
 crbug.com/626703 external/wpt/web-animations/animation-model/combining-effects/effect-composition.html [ Failure ]
 crbug.com/626703 external/wpt/web-animations/interfaces/KeyframeEffect/copy-contructor.html [ Failure ]
 crbug.com/626703 external/wpt/web-animations/animation-model/animation-types/spacing-keyframes-filters.html [ Failure ]
-crbug.com/626703 external/wpt/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/moving-documents.html [ Timeout ]
 crbug.com/626703 external/csswg-test/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-baseline-horiz-001a.xhtml [ Failure ]
 crbug.com/626703 external/csswg-test/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-baseline-horiz-001b.xhtml [ Failure ]
 crbug.com/626703 external/csswg-test/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-baseline-horiz-006.xhtml [ Failure ]
@@ -2240,9 +2270,7 @@
 crbug.com/626703 external/wpt/streams/count-queuing-strategy.html [ Failure Timeout ]
 crbug.com/626703 external/wpt/streams/readable-streams/bad-strategies.html [ Failure Timeout ]
 crbug.com/626703 external/wpt/streams/readable-streams/bad-underlying-sources.html [ Failure Timeout ]
-crbug.com/626703 external/wpt/streams/readable-streams/brand-checks.html [ Failure Timeout ]
 crbug.com/626703 external/wpt/streams/readable-streams/cancel.html [ Failure Timeout ]
-crbug.com/626703 external/wpt/streams/readable-streams/count-queuing-strategy-integration.html [ Failure Timeout ]
 crbug.com/626703 external/wpt/streams/readable-streams/garbage-collection.html [ Failure Timeout ]
 crbug.com/626703 external/wpt/streams/readable-streams/general.html [ Failure Timeout ]
 crbug.com/626703 external/wpt/streams/readable-streams/tee.html [ Failure Timeout ]
@@ -2264,6 +2292,8 @@
 
 # Crashes with DCHECK enabled, but not on normal Release builds.
 crbug.com/626703 external/wpt/workers/opaque-origin.html [ Failure Crash ]
+crbug.com/626703 external/wpt/html/rendering/non-replaced-elements/margin-collapsing-quirks/multicol-quirks-mode.html [ Pass Crash ]
+crbug.com/626703 external/wpt/html/rendering/non-replaced-elements/margin-collapsing-quirks/multicol-standards-mode.html [ Pass Crash ]
 
 # Manual tests that have not been automated.
 crbug.com/626703 external/wpt/fullscreen/api/element-request-fullscreen-two-iframes-manual.html [ Timeout ]
@@ -2377,7 +2407,6 @@
 crbug.com/697971 [ Mac10.12 ] external/wpt/editing/run/subscript.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] external/wpt/editing/run/superscript.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] external/wpt/editing/run/underline.html [ Failure ]
-crbug.com/697971 [ Mac10.12 ] external/wpt/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/dynamic-append.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] external/wpt/html/semantics/scripting-1/the-script-element/script-charset-01.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] external/wpt/html/semantics/scripting-1/the-script-element/script-charset-02.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] external/wpt/html/webappapis/scripting/events/messageevent-constructor.https.html [ Failure ]
@@ -2392,15 +2421,11 @@
 crbug.com/697971 [ Mac10.12 ] external/wpt/selection/addRange-32.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] external/wpt/selection/addRange-36.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] external/wpt/service-workers/service-worker/fetch-event-within-sw-manual.https.html [ Failure ]
-crbug.com/697971 [ Mac10.12 ] external/wpt/web-animations/interfaces/Animatable/animate.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] external/wpt/web-animations/interfaces/KeyframeEffect/constructor.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] external/wpt/web-animations/interfaces/KeyframeEffect/setKeyframes.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] external/wpt/webrtc/rtcpeerconnection/setRemoteDescription.html [ Failure ]
-crbug.com/697971 [ Mac10.12 ] external/wpt/webvtt/api/VTTCue/align.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] external/wpt/webvtt/api/VTTCue/lineAlign.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] external/wpt/webvtt/api/VTTCue/positionAlign.html [ Failure ]
-crbug.com/697971 [ Mac10.12 ] external/wpt/webvtt/api/VTTCue/text.html [ Failure ]
-crbug.com/697971 [ Mac10.12 ] external/wpt/webvtt/api/VTTCue/vertical.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] external/wpt/webvtt/parsing/cue-text-parsing/tests/entities.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] external/wpt/webvtt/parsing/cue-text-parsing/tests/tags.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] external/wpt/webvtt/parsing/cue-text-parsing/tests/timestamps.html [ Failure ]
@@ -2603,14 +2628,20 @@
 crbug.com/697971 [ Mac10.12 ] svg/zoom/page/zoom-background-images.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] transforms/2d/zoom-menulist.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] transforms/svg-vs-css.xhtml [ Failure ]
+crbug.com/697971 [ Mac10.12 ] virtual/disable-spinvalidation/compositing/overflow/border-radius-styles-with-composited-child.html [ Failure ]
+crbug.com/697971 [ Mac10.12 ] virtual/disable-spinvalidation/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents.html [ Failure ]
+crbug.com/697971 [ Mac10.12 ] virtual/disable-spinvalidation/compositing/overflow/theme-affects-visual-overflow.html [ Failure ]
+crbug.com/697971 [ Mac10.12 ] virtual/disable-spinvalidation/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] virtual/disable-spinvalidation/paint/invalidation/button-checkbox-click-method-repaint.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] virtual/disable-spinvalidation/paint/invalidation/resize-iframe-text.html [ Failure ]
-crbug.com/697971 [ Mac10.12 ] virtual/disable-spinvalidation/paint/invalidation/search-field-cancel.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] virtual/disable-spinvalidation/paint/invalidation/textarea-caret.html [ Failure ]
+crbug.com/697971 [ Mac10.12 ] virtual/disable-spinvalidation/paint/selection/text-selection-inline-block-rtl.html [ Failure ]
+crbug.com/697971 [ Mac10.12 ] virtual/disable-spinvalidation/paint/selection/text-selection-inline-block.html [ Failure ]
+crbug.com/697971 [ Mac10.12 ] virtual/disable-spinvalidation/paint/spellmarkers/document-markers-zoom-150.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] virtual/gpu-rasterization/images/12-55.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] virtual/gpu-rasterization/images/182.html [ Failure ]
 crbug.com/697971 [ Mac10.12 ] virtual/gpu-rasterization/images/2-dht.html [ Failure ]
@@ -2726,7 +2757,6 @@
 crbug.com/508730 crbug.com/472300 external/wpt/html/semantics/embedded-content/media-elements/interfaces/TextTrack/removeCue.html [ Failure ]
 crbug.com/508730 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/cloneNode.html [ Failure ]
 crbug.com/508730 external/wpt/html/browsers/browsing-the-web/read-media/pageload-image.html [ Failure ]
-crbug.com/508730 external/wpt/html/webappapis/scripting/processing-model-2/compile-error-data-url.html [ Failure ]
 
 # Fail when run with --enable-wptserve: (crbug.com/508734)
 crbug.com/508734 external/wpt/html/semantics/document-metadata/the-link-element/link-style-error-01.html [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/VirtualTestSuites b/third_party/WebKit/LayoutTests/VirtualTestSuites
index ee2cf64..bacc904 100644
--- a/third_party/WebKit/LayoutTests/VirtualTestSuites
+++ b/third_party/WebKit/LayoutTests/VirtualTestSuites
@@ -105,7 +105,12 @@
   },
   {
     "prefix": "disable-spinvalidation",
-    "base": "paint/invalidation",
+    "base": "compositing",
+    "args": ["--disable-slimming-paint-invalidation"]
+  },
+  {
+    "prefix": "disable-spinvalidation",
+    "base": "paint",
     "args": ["--disable-slimming-paint-invalidation"]
   },
   {
diff --git a/third_party/WebKit/LayoutTests/animations/custom-properties/angle-type-interpolation-expected.txt b/third_party/WebKit/LayoutTests/animations/custom-properties/angle-type-interpolation-expected.txt
deleted file mode 100644
index 186e589..0000000
--- a/third_party/WebKit/LayoutTests/animations/custom-properties/angle-type-interpolation-expected.txt
+++ /dev/null
@@ -1,109 +0,0 @@
-This is a testharness.js-based test.
-PASS This test uses interpolation-test.js. 
-FAIL CSS Transitions: property <--angle> from neutral to [20deg] at (-0.3) is [20deg] assert_equals: expected "7deg " but got "20deg "
-FAIL CSS Transitions: property <--angle> from neutral to [20deg] at (0) is [20deg] assert_equals: expected "10deg " but got "20deg "
-FAIL CSS Transitions: property <--angle> from neutral to [20deg] at (0.5) is [20deg] assert_equals: expected "15deg " but got "20deg "
-PASS CSS Transitions: property <--angle> from neutral to [20deg] at (1) is [20deg] 
-FAIL CSS Transitions: property <--angle> from neutral to [20deg] at (1.5) is [20deg] assert_equals: expected "25deg " but got "20deg "
-FAIL CSS Transitions: property <--angle> from [initial] to [20deg] at (-0.3) is [20deg] assert_equals: expected "46deg " but got "20deg "
-FAIL CSS Transitions: property <--angle> from [initial] to [20deg] at (0) is [20deg] assert_equals: expected "40deg " but got "20deg "
-FAIL CSS Transitions: property <--angle> from [initial] to [20deg] at (0.5) is [20deg] assert_equals: expected "30deg " but got "20deg "
-PASS CSS Transitions: property <--angle> from [initial] to [20deg] at (1) is [20deg] 
-FAIL CSS Transitions: property <--angle> from [initial] to [20deg] at (1.5) is [20deg] assert_equals: expected "10deg " but got "20deg "
-FAIL CSS Transitions: property <--angle> from [inherit] to [20deg] at (-0.3) is [20deg] assert_equals: expected "33deg " but got "20deg "
-FAIL CSS Transitions: property <--angle> from [inherit] to [20deg] at (0) is [20deg] assert_equals: expected "30deg " but got "20deg "
-FAIL CSS Transitions: property <--angle> from [inherit] to [20deg] at (0.5) is [20deg] assert_equals: expected "25deg " but got "20deg "
-PASS CSS Transitions: property <--angle> from [inherit] to [20deg] at (1) is [20deg] 
-FAIL CSS Transitions: property <--angle> from [inherit] to [20deg] at (1.5) is [20deg] assert_equals: expected "15deg " but got "20deg "
-FAIL CSS Transitions: property <--angle> from [unset] to [20deg] at (-0.3) is [20deg] assert_equals: expected "46deg " but got "20deg "
-FAIL CSS Transitions: property <--angle> from [unset] to [20deg] at (0) is [20deg] assert_equals: expected "40deg " but got "20deg "
-FAIL CSS Transitions: property <--angle> from [unset] to [20deg] at (0.5) is [20deg] assert_equals: expected "30deg " but got "20deg "
-PASS CSS Transitions: property <--angle> from [unset] to [20deg] at (1) is [20deg] 
-FAIL CSS Transitions: property <--angle> from [unset] to [20deg] at (1.5) is [20deg] assert_equals: expected "10deg " but got "20deg "
-FAIL CSS Transitions: property <--angle> from [-10deg] to [10deg] at (-0.3) is [10deg] assert_equals: expected "- 16deg " but got "10deg "
-FAIL CSS Transitions: property <--angle> from [-10deg] to [10deg] at (0) is [10deg] assert_equals: expected "- 10deg " but got "10deg "
-FAIL CSS Transitions: property <--angle> from [-10deg] to [10deg] at (0.5) is [10deg] assert_equals: expected "0deg " but got "10deg "
-PASS CSS Transitions: property <--angle> from [-10deg] to [10deg] at (1) is [10deg] 
-FAIL CSS Transitions: property <--angle> from [-10deg] to [10deg] at (1.5) is [10deg] assert_equals: expected "20deg " but got "10deg "
-FAIL CSS Transitions: property <--angle> from [10rad] to [20rad] at (-0.3) is [20rad] assert_equals: expected "401.07deg " but got "20rad "
-FAIL CSS Transitions: property <--angle> from [10rad] to [20rad] at (0) is [20rad] assert_equals: expected "572.96deg " but got "20rad "
-FAIL CSS Transitions: property <--angle> from [10rad] to [20rad] at (0.5) is [20rad] assert_equals: expected "859.44deg " but got "20rad "
-FAIL CSS Transitions: property <--angle> from [10rad] to [20rad] at (1) is [20rad] assert_equals: expected "1145.92deg " but got "20rad "
-FAIL CSS Transitions: property <--angle> from [10rad] to [20rad] at (1.5) is [20rad] assert_equals: expected "1432.39deg " but got "20rad "
-FAIL CSS Transitions: property <--angle> from [200grad] to [90deg] at (-0.3) is [90deg] assert_equals: expected "207deg " but got "90deg "
-FAIL CSS Transitions: property <--angle> from [200grad] to [90deg] at (0) is [90deg] assert_equals: expected "180deg " but got "90deg "
-FAIL CSS Transitions: property <--angle> from [200grad] to [90deg] at (0.5) is [90deg] assert_equals: expected "135deg " but got "90deg "
-PASS CSS Transitions: property <--angle> from [200grad] to [90deg] at (1) is [90deg] 
-FAIL CSS Transitions: property <--angle> from [200grad] to [90deg] at (1.5) is [90deg] assert_equals: expected "45deg " but got "90deg "
-PASS CSS Animations: property <--angle> from neutral to [20deg] at (-0.3) is [7deg] 
-PASS CSS Animations: property <--angle> from neutral to [20deg] at (0) is [10deg] 
-PASS CSS Animations: property <--angle> from neutral to [20deg] at (0.5) is [15deg] 
-PASS CSS Animations: property <--angle> from neutral to [20deg] at (1) is [20deg] 
-PASS CSS Animations: property <--angle> from neutral to [20deg] at (1.5) is [25deg] 
-PASS CSS Animations: property <--angle> from [initial] to [20deg] at (-0.3) is [46deg] 
-PASS CSS Animations: property <--angle> from [initial] to [20deg] at (0) is [40deg] 
-PASS CSS Animations: property <--angle> from [initial] to [20deg] at (0.5) is [30deg] 
-PASS CSS Animations: property <--angle> from [initial] to [20deg] at (1) is [20deg] 
-PASS CSS Animations: property <--angle> from [initial] to [20deg] at (1.5) is [10deg] 
-PASS CSS Animations: property <--angle> from [inherit] to [20deg] at (-0.3) is [33deg] 
-PASS CSS Animations: property <--angle> from [inherit] to [20deg] at (0) is [30deg] 
-PASS CSS Animations: property <--angle> from [inherit] to [20deg] at (0.5) is [25deg] 
-PASS CSS Animations: property <--angle> from [inherit] to [20deg] at (1) is [20deg] 
-PASS CSS Animations: property <--angle> from [inherit] to [20deg] at (1.5) is [15deg] 
-PASS CSS Animations: property <--angle> from [unset] to [20deg] at (-0.3) is [46deg] 
-PASS CSS Animations: property <--angle> from [unset] to [20deg] at (0) is [40deg] 
-PASS CSS Animations: property <--angle> from [unset] to [20deg] at (0.5) is [30deg] 
-PASS CSS Animations: property <--angle> from [unset] to [20deg] at (1) is [20deg] 
-PASS CSS Animations: property <--angle> from [unset] to [20deg] at (1.5) is [10deg] 
-PASS CSS Animations: property <--angle> from [-10deg] to [10deg] at (-0.3) is [-16deg] 
-PASS CSS Animations: property <--angle> from [-10deg] to [10deg] at (0) is [-10deg] 
-PASS CSS Animations: property <--angle> from [-10deg] to [10deg] at (0.5) is [0deg] 
-PASS CSS Animations: property <--angle> from [-10deg] to [10deg] at (1) is [10deg] 
-PASS CSS Animations: property <--angle> from [-10deg] to [10deg] at (1.5) is [20deg] 
-PASS CSS Animations: property <--angle> from [10rad] to [20rad] at (-0.3) is [401.07deg] 
-PASS CSS Animations: property <--angle> from [10rad] to [20rad] at (0) is [572.958deg] 
-PASS CSS Animations: property <--angle> from [10rad] to [20rad] at (0.5) is [859.437deg] 
-PASS CSS Animations: property <--angle> from [10rad] to [20rad] at (1) is [1145.92deg] 
-PASS CSS Animations: property <--angle> from [10rad] to [20rad] at (1.5) is [1432.39deg] 
-PASS CSS Animations: property <--angle> from [200grad] to [90deg] at (-0.3) is [207deg] 
-PASS CSS Animations: property <--angle> from [200grad] to [90deg] at (0) is [180deg] 
-PASS CSS Animations: property <--angle> from [200grad] to [90deg] at (0.5) is [135deg] 
-PASS CSS Animations: property <--angle> from [200grad] to [90deg] at (1) is [90deg] 
-PASS CSS Animations: property <--angle> from [200grad] to [90deg] at (1.5) is [45deg] 
-PASS Web Animations: property <--angle> from neutral to [20deg] at (-0.3) is [7deg] 
-PASS Web Animations: property <--angle> from neutral to [20deg] at (0) is [10deg] 
-PASS Web Animations: property <--angle> from neutral to [20deg] at (0.5) is [15deg] 
-PASS Web Animations: property <--angle> from neutral to [20deg] at (1) is [20deg] 
-PASS Web Animations: property <--angle> from neutral to [20deg] at (1.5) is [25deg] 
-PASS Web Animations: property <--angle> from [initial] to [20deg] at (-0.3) is [46deg] 
-PASS Web Animations: property <--angle> from [initial] to [20deg] at (0) is [40deg] 
-PASS Web Animations: property <--angle> from [initial] to [20deg] at (0.5) is [30deg] 
-PASS Web Animations: property <--angle> from [initial] to [20deg] at (1) is [20deg] 
-PASS Web Animations: property <--angle> from [initial] to [20deg] at (1.5) is [10deg] 
-PASS Web Animations: property <--angle> from [inherit] to [20deg] at (-0.3) is [33deg] 
-PASS Web Animations: property <--angle> from [inherit] to [20deg] at (0) is [30deg] 
-PASS Web Animations: property <--angle> from [inherit] to [20deg] at (0.5) is [25deg] 
-PASS Web Animations: property <--angle> from [inherit] to [20deg] at (1) is [20deg] 
-PASS Web Animations: property <--angle> from [inherit] to [20deg] at (1.5) is [15deg] 
-PASS Web Animations: property <--angle> from [unset] to [20deg] at (-0.3) is [46deg] 
-PASS Web Animations: property <--angle> from [unset] to [20deg] at (0) is [40deg] 
-PASS Web Animations: property <--angle> from [unset] to [20deg] at (0.5) is [30deg] 
-PASS Web Animations: property <--angle> from [unset] to [20deg] at (1) is [20deg] 
-PASS Web Animations: property <--angle> from [unset] to [20deg] at (1.5) is [10deg] 
-PASS Web Animations: property <--angle> from [-10deg] to [10deg] at (-0.3) is [-16deg] 
-PASS Web Animations: property <--angle> from [-10deg] to [10deg] at (0) is [-10deg] 
-PASS Web Animations: property <--angle> from [-10deg] to [10deg] at (0.5) is [0deg] 
-PASS Web Animations: property <--angle> from [-10deg] to [10deg] at (1) is [10deg] 
-PASS Web Animations: property <--angle> from [-10deg] to [10deg] at (1.5) is [20deg] 
-PASS Web Animations: property <--angle> from [10rad] to [20rad] at (-0.3) is [401.07deg] 
-PASS Web Animations: property <--angle> from [10rad] to [20rad] at (0) is [572.958deg] 
-PASS Web Animations: property <--angle> from [10rad] to [20rad] at (0.5) is [859.437deg] 
-PASS Web Animations: property <--angle> from [10rad] to [20rad] at (1) is [1145.92deg] 
-PASS Web Animations: property <--angle> from [10rad] to [20rad] at (1.5) is [1432.39deg] 
-PASS Web Animations: property <--angle> from [200grad] to [90deg] at (-0.3) is [207deg] 
-PASS Web Animations: property <--angle> from [200grad] to [90deg] at (0) is [180deg] 
-PASS Web Animations: property <--angle> from [200grad] to [90deg] at (0.5) is [135deg] 
-PASS Web Animations: property <--angle> from [200grad] to [90deg] at (1) is [90deg] 
-PASS Web Animations: property <--angle> from [200grad] to [90deg] at (1.5) is [45deg] 
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/animations/custom-properties/color-type-interpolation-expected.txt b/third_party/WebKit/LayoutTests/animations/custom-properties/color-type-interpolation-expected.txt
index 673a815..8289577b 100644
--- a/third_party/WebKit/LayoutTests/animations/custom-properties/color-type-interpolation-expected.txt
+++ b/third_party/WebKit/LayoutTests/animations/custom-properties/color-type-interpolation-expected.txt
@@ -1,53 +1,53 @@
 This is a testharness.js-based test.
 PASS This test uses interpolation-test.js. 
-FAIL CSS Transitions: property <--color> from neutral to [green] at (-0.3) is [green] assert_equals: expected "rgb ( 255 , 255 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from neutral to [green] at (0) is [green] assert_equals: expected "rgb ( 255 , 255 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from neutral to [green] at (0.3) is [green] assert_equals: expected "rgb ( 179 , 217 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from neutral to [green] at (0.6) is [green] assert_equals: expected "rgb ( 102 , 179 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from neutral to [green] at (1) is [green] assert_equals: expected "rgb ( 0 , 128 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from neutral to [green] at (1.5) is [green] assert_equals: expected "rgb ( 0 , 65 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [initial] to [green] at (-0.3) is [green] assert_equals: expected "rgb ( 0 , 0 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [initial] to [green] at (0) is [green] assert_equals: expected "rgb ( 0 , 0 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [initial] to [green] at (0.3) is [green] assert_equals: expected "rgb ( 0 , 38 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [initial] to [green] at (0.6) is [green] assert_equals: expected "rgb ( 0 , 77 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [initial] to [green] at (1) is [green] assert_equals: expected "rgb ( 0 , 128 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [initial] to [green] at (1.5) is [green] assert_equals: expected "rgb ( 0 , 192 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [inherit] to [green] at (-0.3) is [green] assert_equals: expected "rgb ( 0 , 0 , 255 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [inherit] to [green] at (0) is [green] assert_equals: expected "rgb ( 0 , 0 , 255 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [inherit] to [green] at (0.3) is [green] assert_equals: expected "rgb ( 0 , 38 , 179 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [inherit] to [green] at (0.6) is [green] assert_equals: expected "rgb ( 0 , 77 , 102 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [inherit] to [green] at (1) is [green] assert_equals: expected "rgb ( 0 , 128 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [inherit] to [green] at (1.5) is [green] assert_equals: expected "rgb ( 0 , 192 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [unset] to [green] at (-0.3) is [green] assert_equals: expected "rgb ( 0 , 0 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [unset] to [green] at (0) is [green] assert_equals: expected "rgb ( 0 , 0 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [unset] to [green] at (0.3) is [green] assert_equals: expected "rgb ( 0 , 38 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [unset] to [green] at (0.6) is [green] assert_equals: expected "rgb ( 0 , 77 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [unset] to [green] at (1) is [green] assert_equals: expected "rgb ( 0 , 128 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [unset] to [green] at (1.5) is [green] assert_equals: expected "rgb ( 0 , 192 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [black] to [orange] at (-0.3) is [orange] assert_equals: expected "rgb ( 0 , 0 , 0 ) " but got "orange "
-FAIL CSS Transitions: property <--color> from [black] to [orange] at (0) is [orange] assert_equals: expected "rgb ( 0 , 0 , 0 ) " but got "orange "
-FAIL CSS Transitions: property <--color> from [black] to [orange] at (0.3) is [orange] assert_equals: expected "rgb ( 77 , 50 , 0 ) " but got "orange "
-FAIL CSS Transitions: property <--color> from [black] to [orange] at (0.6) is [orange] assert_equals: expected "rgb ( 153 , 99 , 0 ) " but got "orange "
-FAIL CSS Transitions: property <--color> from [black] to [orange] at (1) is [orange] assert_equals: expected "rgb ( 255 , 165 , 0 ) " but got "orange "
-FAIL CSS Transitions: property <--color> from [black] to [orange] at (1.5) is [orange] assert_equals: expected "rgb ( 255 , 248 , 0 ) " but got "orange "
-FAIL CSS Transitions: property <--color> from [black] to [currentcolor] at (-0.3) is [currentcolor] assert_equals: expected "rgb ( 0 , 0 , 0 ) " but got "currentcolor "
-FAIL CSS Transitions: property <--color> from [black] to [currentcolor] at (0) is [currentcolor] assert_equals: expected "rgb ( 0 , 0 , 0 ) " but got "currentcolor "
-FAIL CSS Transitions: property <--color> from [black] to [currentcolor] at (0.3) is [currentcolor] assert_equals: expected "rgb ( 0 , 77 , 0 ) " but got "currentcolor "
-FAIL CSS Transitions: property <--color> from [black] to [currentcolor] at (0.6) is [currentcolor] assert_equals: expected "rgb ( 0 , 153 , 0 ) " but got "currentcolor "
-FAIL CSS Transitions: property <--color> from [black] to [currentcolor] at (1) is [currentcolor] assert_equals: expected "rgb ( 0 , 255 , 0 ) " but got "currentcolor "
-FAIL CSS Transitions: property <--color> from [black] to [currentcolor] at (1.5) is [currentcolor] assert_equals: expected "rgb ( 0 , 255 , 0 ) " but got "currentcolor "
-FAIL CSS Transitions: property <--color> from [-webkit-activelink] to [green] at (-0.3) is [green] assert_equals: expected "rgb ( 255 , 0 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [-webkit-activelink] to [green] at (0) is [green] assert_equals: expected "rgb ( 255 , 0 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [-webkit-activelink] to [green] at (0.3) is [green] assert_equals: expected "rgb ( 179 , 38 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [-webkit-activelink] to [green] at (0.6) is [green] assert_equals: expected "rgb ( 102 , 77 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [-webkit-activelink] to [green] at (1) is [green] assert_equals: expected "rgb ( 0 , 128 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [-webkit-activelink] to [green] at (1.5) is [green] assert_equals: expected "rgb ( 0 , 192 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [-webkit-link] to [green] at (-0.3) is [green] assert_equals: expected "rgb ( 0 , 0 , 255 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [-webkit-link] to [green] at (0) is [green] assert_equals: expected "rgb ( 0 , 0 , 255 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [-webkit-link] to [green] at (0.3) is [green] assert_equals: expected "rgb ( 0 , 38 , 179 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [-webkit-link] to [green] at (0.6) is [green] assert_equals: expected "rgb ( 0 , 77 , 102 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [-webkit-link] to [green] at (1) is [green] assert_equals: expected "rgb ( 0 , 128 , 0 ) " but got "green "
-FAIL CSS Transitions: property <--color> from [-webkit-link] to [green] at (1.5) is [green] assert_equals: expected "rgb ( 0 , 192 , 0 ) " but got "green "
+PASS CSS Transitions: property <--color> from neutral to [green] at (-0.3) is [rgb(255, 255, 0)] 
+PASS CSS Transitions: property <--color> from neutral to [green] at (0) is [rgb(255, 255, 0)] 
+PASS CSS Transitions: property <--color> from neutral to [green] at (0.3) is [rgb(179, 217, 0)] 
+PASS CSS Transitions: property <--color> from neutral to [green] at (0.6) is [rgb(102, 179, 0)] 
+PASS CSS Transitions: property <--color> from neutral to [green] at (1) is [rgb(0, 128, 0)] 
+PASS CSS Transitions: property <--color> from neutral to [green] at (1.5) is [rgb(0, 65, 0)] 
+PASS CSS Transitions: property <--color> from [initial] to [green] at (-0.3) is [rgb(0, 0, 0)] 
+PASS CSS Transitions: property <--color> from [initial] to [green] at (0) is [rgb(0, 0, 0)] 
+PASS CSS Transitions: property <--color> from [initial] to [green] at (0.3) is [rgb(0, 38, 0)] 
+PASS CSS Transitions: property <--color> from [initial] to [green] at (0.6) is [rgb(0, 77, 0)] 
+PASS CSS Transitions: property <--color> from [initial] to [green] at (1) is [rgb(0, 128, 0)] 
+PASS CSS Transitions: property <--color> from [initial] to [green] at (1.5) is [rgb(0, 192, 0)] 
+PASS CSS Transitions: property <--color> from [inherit] to [green] at (-0.3) is [rgb(0, 0, 255)] 
+PASS CSS Transitions: property <--color> from [inherit] to [green] at (0) is [rgb(0, 0, 255)] 
+PASS CSS Transitions: property <--color> from [inherit] to [green] at (0.3) is [rgb(0, 38, 179)] 
+PASS CSS Transitions: property <--color> from [inherit] to [green] at (0.6) is [rgb(0, 77, 102)] 
+PASS CSS Transitions: property <--color> from [inherit] to [green] at (1) is [rgb(0, 128, 0)] 
+PASS CSS Transitions: property <--color> from [inherit] to [green] at (1.5) is [rgb(0, 192, 0)] 
+PASS CSS Transitions: property <--color> from [unset] to [green] at (-0.3) is [rgb(0, 0, 0)] 
+PASS CSS Transitions: property <--color> from [unset] to [green] at (0) is [rgb(0, 0, 0)] 
+PASS CSS Transitions: property <--color> from [unset] to [green] at (0.3) is [rgb(0, 38, 0)] 
+PASS CSS Transitions: property <--color> from [unset] to [green] at (0.6) is [rgb(0, 77, 0)] 
+PASS CSS Transitions: property <--color> from [unset] to [green] at (1) is [rgb(0, 128, 0)] 
+PASS CSS Transitions: property <--color> from [unset] to [green] at (1.5) is [rgb(0, 192, 0)] 
+PASS CSS Transitions: property <--color> from [black] to [orange] at (-0.3) is [rgb(0, 0, 0)] 
+PASS CSS Transitions: property <--color> from [black] to [orange] at (0) is [rgb(0, 0, 0)] 
+PASS CSS Transitions: property <--color> from [black] to [orange] at (0.3) is [rgb(77, 50, 0)] 
+PASS CSS Transitions: property <--color> from [black] to [orange] at (0.6) is [rgb(153, 99, 0)] 
+PASS CSS Transitions: property <--color> from [black] to [orange] at (1) is [rgb(255, 165, 0)] 
+PASS CSS Transitions: property <--color> from [black] to [orange] at (1.5) is [rgb(255, 248, 0)] 
+PASS CSS Transitions: property <--color> from [black] to [currentcolor] at (-0.3) is [rgb(0, 0, 0)] 
+PASS CSS Transitions: property <--color> from [black] to [currentcolor] at (0) is [rgb(0, 0, 0)] 
+FAIL CSS Transitions: property <--color> from [black] to [currentcolor] at (0.3) is [rgb(0, 0, 0)] assert_equals: expected "rgb ( 0 , 77 , 0 ) " but got "rgb ( 0 , 0 , 0 ) "
+FAIL CSS Transitions: property <--color> from [black] to [currentcolor] at (0.6) is [rgb(0, 0, 0)] assert_equals: expected "rgb ( 0 , 153 , 0 ) " but got "rgb ( 0 , 0 , 0 ) "
+FAIL CSS Transitions: property <--color> from [black] to [currentcolor] at (1) is [rgb(0, 0, 0)] assert_equals: expected "rgb ( 0 , 255 , 0 ) " but got "rgb ( 0 , 0 , 0 ) "
+FAIL CSS Transitions: property <--color> from [black] to [currentcolor] at (1.5) is [rgb(0, 0, 0)] assert_equals: expected "rgb ( 0 , 255 , 0 ) " but got "rgb ( 0 , 0 , 0 ) "
+PASS CSS Transitions: property <--color> from [-webkit-activelink] to [green] at (-0.3) is [rgb(255, 0, 0)] 
+PASS CSS Transitions: property <--color> from [-webkit-activelink] to [green] at (0) is [rgb(255, 0, 0)] 
+PASS CSS Transitions: property <--color> from [-webkit-activelink] to [green] at (0.3) is [rgb(179, 38, 0)] 
+PASS CSS Transitions: property <--color> from [-webkit-activelink] to [green] at (0.6) is [rgb(102, 77, 0)] 
+PASS CSS Transitions: property <--color> from [-webkit-activelink] to [green] at (1) is [rgb(0, 128, 0)] 
+PASS CSS Transitions: property <--color> from [-webkit-activelink] to [green] at (1.5) is [rgb(0, 192, 0)] 
+PASS CSS Transitions: property <--color> from [-webkit-link] to [green] at (-0.3) is [rgb(0, 0, 255)] 
+PASS CSS Transitions: property <--color> from [-webkit-link] to [green] at (0) is [rgb(0, 0, 255)] 
+PASS CSS Transitions: property <--color> from [-webkit-link] to [green] at (0.3) is [rgb(0, 38, 179)] 
+PASS CSS Transitions: property <--color> from [-webkit-link] to [green] at (0.6) is [rgb(0, 77, 102)] 
+PASS CSS Transitions: property <--color> from [-webkit-link] to [green] at (1) is [rgb(0, 128, 0)] 
+PASS CSS Transitions: property <--color> from [-webkit-link] to [green] at (1.5) is [rgb(0, 192, 0)] 
 PASS CSS Animations: property <--color> from neutral to [green] at (-0.3) is [rgb(255, 255, 0)] 
 PASS CSS Animations: property <--color> from neutral to [green] at (0) is [rgb(255, 255, 0)] 
 PASS CSS Animations: property <--color> from neutral to [green] at (0.3) is [rgb(179, 217, 0)] 
diff --git a/third_party/WebKit/LayoutTests/animations/custom-properties/length-percentage-type-interpolation-expected.txt b/third_party/WebKit/LayoutTests/animations/custom-properties/length-percentage-type-interpolation-expected.txt
deleted file mode 100644
index 555c0a1..0000000
--- a/third_party/WebKit/LayoutTests/animations/custom-properties/length-percentage-type-interpolation-expected.txt
+++ /dev/null
@@ -1,124 +0,0 @@
-This is a testharness.js-based test.
-PASS This test uses interpolation-test.js. 
-FAIL CSS Transitions: property <--length-percentage> from neutral to [20px] at (-0.3) is [20px] assert_equals: expected "7px " but got "20px "
-FAIL CSS Transitions: property <--length-percentage> from neutral to [20px] at (0) is [20px] assert_equals: expected "10px " but got "20px "
-FAIL CSS Transitions: property <--length-percentage> from neutral to [20px] at (0.5) is [20px] assert_equals: expected "15px " but got "20px "
-PASS CSS Transitions: property <--length-percentage> from neutral to [20px] at (1) is [20px] 
-FAIL CSS Transitions: property <--length-percentage> from neutral to [20px] at (1.5) is [20px] assert_equals: expected "25px " but got "20px "
-FAIL CSS Transitions: property <--length-percentage> from [initial] to [40%] at (-0.3) is [40%] assert_equals: expected "calc ( 52px + 92 % ) " but got "40 % "
-FAIL CSS Transitions: property <--length-percentage> from [initial] to [40%] at (0) is [40%] assert_equals: expected "calc ( 40px + 80 % ) " but got "40 % "
-FAIL CSS Transitions: property <--length-percentage> from [initial] to [40%] at (0.5) is [40%] assert_equals: expected "calc ( 20px + 60 % ) " but got "40 % "
-PASS CSS Transitions: property <--length-percentage> from [initial] to [40%] at (1) is [40%] 
-FAIL CSS Transitions: property <--length-percentage> from [initial] to [40%] at (1.5) is [40%] assert_equals: expected "calc ( - 20px + 20 % ) " but got "40 % "
-FAIL CSS Transitions: property <--length-percentage> from [inherit] to [20px] at (-0.3) is [20px] assert_equals: expected "calc ( - 6px + 52 % ) " but got "20px "
-FAIL CSS Transitions: property <--length-percentage> from [inherit] to [20px] at (0) is [20px] assert_equals: expected "40 % " but got "20px "
-FAIL CSS Transitions: property <--length-percentage> from [inherit] to [20px] at (0.5) is [20px] assert_equals: expected "calc ( 10px + 20 % ) " but got "20px "
-PASS CSS Transitions: property <--length-percentage> from [inherit] to [20px] at (1) is [20px] 
-FAIL CSS Transitions: property <--length-percentage> from [inherit] to [20px] at (1.5) is [20px] assert_equals: expected "calc ( 30px + - 20 % ) " but got "20px "
-FAIL CSS Transitions: property <--length-percentage> from [unset] to [calc(20px + 40%)] at (-0.3) is [calc(20px + 40%)] assert_equals: expected "calc ( 46px + 92 % ) " but got "calc ( 20px + 40 % ) "
-FAIL CSS Transitions: property <--length-percentage> from [unset] to [calc(20px + 40%)] at (0) is [calc(20px + 40%)] assert_equals: expected "calc ( 40px + 80 % ) " but got "calc ( 20px + 40 % ) "
-FAIL CSS Transitions: property <--length-percentage> from [unset] to [calc(20px + 40%)] at (0.5) is [calc(20px + 40%)] assert_equals: expected "calc ( 30px + 60 % ) " but got "calc ( 20px + 40 % ) "
-PASS CSS Transitions: property <--length-percentage> from [unset] to [calc(20px + 40%)] at (1) is [calc(20px + 40%)] 
-FAIL CSS Transitions: property <--length-percentage> from [unset] to [calc(20px + 40%)] at (1.5) is [calc(20px + 40%)] assert_equals: expected "calc ( 10px + 20 % ) " but got "calc ( 20px + 40 % ) "
-FAIL CSS Transitions: property <--length-percentage> from [-10px] to [10px] at (-0.3) is [10px] assert_equals: expected "- 16px " but got "10px "
-FAIL CSS Transitions: property <--length-percentage> from [-10px] to [10px] at (0) is [10px] assert_equals: expected "- 10px " but got "10px "
-FAIL CSS Transitions: property <--length-percentage> from [-10px] to [10px] at (0.5) is [10px] assert_equals: expected "0px " but got "10px "
-PASS CSS Transitions: property <--length-percentage> from [-10px] to [10px] at (1) is [10px] 
-FAIL CSS Transitions: property <--length-percentage> from [-10px] to [10px] at (1.5) is [10px] assert_equals: expected "20px " but got "10px "
-FAIL CSS Transitions: property <--length-percentage> from [10em] to [20em] at (-0.3) is [400px] assert_equals: expected "140px " but got "400px "
-FAIL CSS Transitions: property <--length-percentage> from [10em] to [20em] at (0) is [400px] assert_equals: expected "200px " but got "400px "
-FAIL CSS Transitions: property <--length-percentage> from [10em] to [20em] at (0.5) is [400px] assert_equals: expected "300px " but got "400px "
-PASS CSS Transitions: property <--length-percentage> from [10em] to [20em] at (1) is [400px] 
-FAIL CSS Transitions: property <--length-percentage> from [10em] to [20em] at (1.5) is [400px] assert_equals: expected "500px " but got "400px "
-FAIL CSS Transitions: property <--length-percentage> from [10em] to [100px] at (-0.3) is [100px] assert_equals: expected "230px " but got "100px "
-FAIL CSS Transitions: property <--length-percentage> from [10em] to [100px] at (0) is [100px] assert_equals: expected "200px " but got "100px "
-FAIL CSS Transitions: property <--length-percentage> from [10em] to [100px] at (0.5) is [100px] assert_equals: expected "150px " but got "100px "
-PASS CSS Transitions: property <--length-percentage> from [10em] to [100px] at (1) is [100px] 
-FAIL CSS Transitions: property <--length-percentage> from [10em] to [100px] at (1.5) is [100px] assert_equals: expected "50px " but got "100px "
-FAIL CSS Transitions: property <--length-percentage> from [10em] to [100%] at (-0.3) is [100%] assert_equals: expected "calc ( 260px + - 30 % ) " but got "100 % "
-FAIL CSS Transitions: property <--length-percentage> from [10em] to [100%] at (0) is [100%] assert_equals: expected "200px " but got "100 % "
-FAIL CSS Transitions: property <--length-percentage> from [10em] to [100%] at (0.5) is [100%] assert_equals: expected "calc ( 100px + 50 % ) " but got "100 % "
-PASS CSS Transitions: property <--length-percentage> from [10em] to [100%] at (1) is [100%] 
-FAIL CSS Transitions: property <--length-percentage> from [10em] to [100%] at (1.5) is [100%] assert_equals: expected "calc ( - 100px + 150 % ) " but got "100 % "
-PASS CSS Animations: property <--length-percentage> from neutral to [20px] at (-0.3) is [7px] 
-PASS CSS Animations: property <--length-percentage> from neutral to [20px] at (0) is [10px] 
-PASS CSS Animations: property <--length-percentage> from neutral to [20px] at (0.5) is [15px] 
-PASS CSS Animations: property <--length-percentage> from neutral to [20px] at (1) is [20px] 
-PASS CSS Animations: property <--length-percentage> from neutral to [20px] at (1.5) is [25px] 
-PASS CSS Animations: property <--length-percentage> from [initial] to [40%] at (-0.3) is [calc(52px + 92%)] 
-PASS CSS Animations: property <--length-percentage> from [initial] to [40%] at (0) is [calc(40px + 80%)] 
-PASS CSS Animations: property <--length-percentage> from [initial] to [40%] at (0.5) is [calc(20px + 60%)] 
-PASS CSS Animations: property <--length-percentage> from [initial] to [40%] at (1) is [40%] 
-PASS CSS Animations: property <--length-percentage> from [initial] to [40%] at (1.5) is [calc(-20px + 20%)] 
-PASS CSS Animations: property <--length-percentage> from [inherit] to [20px] at (-0.3) is [calc(-6px + 52%)] 
-PASS CSS Animations: property <--length-percentage> from [inherit] to [20px] at (0) is [40%] 
-PASS CSS Animations: property <--length-percentage> from [inherit] to [20px] at (0.5) is [calc(10px + 20%)] 
-PASS CSS Animations: property <--length-percentage> from [inherit] to [20px] at (1) is [20px] 
-PASS CSS Animations: property <--length-percentage> from [inherit] to [20px] at (1.5) is [calc(30px + -20%)] 
-PASS CSS Animations: property <--length-percentage> from [unset] to [calc(20px + 40%)] at (-0.3) is [calc(46px + 92%)] 
-PASS CSS Animations: property <--length-percentage> from [unset] to [calc(20px + 40%)] at (0) is [calc(40px + 80%)] 
-PASS CSS Animations: property <--length-percentage> from [unset] to [calc(20px + 40%)] at (0.5) is [calc(30px + 60%)] 
-PASS CSS Animations: property <--length-percentage> from [unset] to [calc(20px + 40%)] at (1) is [calc(20px + 40%)] 
-PASS CSS Animations: property <--length-percentage> from [unset] to [calc(20px + 40%)] at (1.5) is [calc(10px + 20%)] 
-PASS CSS Animations: property <--length-percentage> from [-10px] to [10px] at (-0.3) is [-16px] 
-PASS CSS Animations: property <--length-percentage> from [-10px] to [10px] at (0) is [-10px] 
-PASS CSS Animations: property <--length-percentage> from [-10px] to [10px] at (0.5) is [0px] 
-PASS CSS Animations: property <--length-percentage> from [-10px] to [10px] at (1) is [10px] 
-PASS CSS Animations: property <--length-percentage> from [-10px] to [10px] at (1.5) is [20px] 
-PASS CSS Animations: property <--length-percentage> from [10em] to [20em] at (-0.3) is [140px] 
-PASS CSS Animations: property <--length-percentage> from [10em] to [20em] at (0) is [200px] 
-PASS CSS Animations: property <--length-percentage> from [10em] to [20em] at (0.5) is [300px] 
-PASS CSS Animations: property <--length-percentage> from [10em] to [20em] at (1) is [400px] 
-PASS CSS Animations: property <--length-percentage> from [10em] to [20em] at (1.5) is [500px] 
-PASS CSS Animations: property <--length-percentage> from [10em] to [100px] at (-0.3) is [230px] 
-PASS CSS Animations: property <--length-percentage> from [10em] to [100px] at (0) is [200px] 
-PASS CSS Animations: property <--length-percentage> from [10em] to [100px] at (0.5) is [150px] 
-PASS CSS Animations: property <--length-percentage> from [10em] to [100px] at (1) is [100px] 
-PASS CSS Animations: property <--length-percentage> from [10em] to [100px] at (1.5) is [50px] 
-PASS CSS Animations: property <--length-percentage> from [10em] to [100%] at (-0.3) is [calc(260px + -30%)] 
-PASS CSS Animations: property <--length-percentage> from [10em] to [100%] at (0) is [200px] 
-PASS CSS Animations: property <--length-percentage> from [10em] to [100%] at (0.5) is [calc(100px + 50%)] 
-PASS CSS Animations: property <--length-percentage> from [10em] to [100%] at (1) is [100%] 
-PASS CSS Animations: property <--length-percentage> from [10em] to [100%] at (1.5) is [calc(-100px + 150%)] 
-PASS Web Animations: property <--length-percentage> from neutral to [20px] at (-0.3) is [7px] 
-PASS Web Animations: property <--length-percentage> from neutral to [20px] at (0) is [10px] 
-PASS Web Animations: property <--length-percentage> from neutral to [20px] at (0.5) is [15px] 
-PASS Web Animations: property <--length-percentage> from neutral to [20px] at (1) is [20px] 
-PASS Web Animations: property <--length-percentage> from neutral to [20px] at (1.5) is [25px] 
-PASS Web Animations: property <--length-percentage> from [initial] to [40%] at (-0.3) is [calc(52px + 92%)] 
-PASS Web Animations: property <--length-percentage> from [initial] to [40%] at (0) is [calc(40px + 80%)] 
-PASS Web Animations: property <--length-percentage> from [initial] to [40%] at (0.5) is [calc(20px + 60%)] 
-PASS Web Animations: property <--length-percentage> from [initial] to [40%] at (1) is [40%] 
-PASS Web Animations: property <--length-percentage> from [initial] to [40%] at (1.5) is [calc(-20px + 20%)] 
-PASS Web Animations: property <--length-percentage> from [inherit] to [20px] at (-0.3) is [calc(-6px + 52%)] 
-PASS Web Animations: property <--length-percentage> from [inherit] to [20px] at (0) is [40%] 
-PASS Web Animations: property <--length-percentage> from [inherit] to [20px] at (0.5) is [calc(10px + 20%)] 
-PASS Web Animations: property <--length-percentage> from [inherit] to [20px] at (1) is [20px] 
-PASS Web Animations: property <--length-percentage> from [inherit] to [20px] at (1.5) is [calc(30px + -20%)] 
-PASS Web Animations: property <--length-percentage> from [unset] to [calc(20px + 40%)] at (-0.3) is [calc(46px + 92%)] 
-PASS Web Animations: property <--length-percentage> from [unset] to [calc(20px + 40%)] at (0) is [calc(40px + 80%)] 
-PASS Web Animations: property <--length-percentage> from [unset] to [calc(20px + 40%)] at (0.5) is [calc(30px + 60%)] 
-PASS Web Animations: property <--length-percentage> from [unset] to [calc(20px + 40%)] at (1) is [calc(20px + 40%)] 
-PASS Web Animations: property <--length-percentage> from [unset] to [calc(20px + 40%)] at (1.5) is [calc(10px + 20%)] 
-PASS Web Animations: property <--length-percentage> from [-10px] to [10px] at (-0.3) is [-16px] 
-PASS Web Animations: property <--length-percentage> from [-10px] to [10px] at (0) is [-10px] 
-PASS Web Animations: property <--length-percentage> from [-10px] to [10px] at (0.5) is [0px] 
-PASS Web Animations: property <--length-percentage> from [-10px] to [10px] at (1) is [10px] 
-PASS Web Animations: property <--length-percentage> from [-10px] to [10px] at (1.5) is [20px] 
-PASS Web Animations: property <--length-percentage> from [10em] to [20em] at (-0.3) is [140px] 
-PASS Web Animations: property <--length-percentage> from [10em] to [20em] at (0) is [200px] 
-PASS Web Animations: property <--length-percentage> from [10em] to [20em] at (0.5) is [300px] 
-PASS Web Animations: property <--length-percentage> from [10em] to [20em] at (1) is [400px] 
-PASS Web Animations: property <--length-percentage> from [10em] to [20em] at (1.5) is [500px] 
-PASS Web Animations: property <--length-percentage> from [10em] to [100px] at (-0.3) is [230px] 
-PASS Web Animations: property <--length-percentage> from [10em] to [100px] at (0) is [200px] 
-PASS Web Animations: property <--length-percentage> from [10em] to [100px] at (0.5) is [150px] 
-PASS Web Animations: property <--length-percentage> from [10em] to [100px] at (1) is [100px] 
-PASS Web Animations: property <--length-percentage> from [10em] to [100px] at (1.5) is [50px] 
-PASS Web Animations: property <--length-percentage> from [10em] to [100%] at (-0.3) is [calc(260px + -30%)] 
-PASS Web Animations: property <--length-percentage> from [10em] to [100%] at (0) is [200px] 
-PASS Web Animations: property <--length-percentage> from [10em] to [100%] at (0.5) is [calc(100px + 50%)] 
-PASS Web Animations: property <--length-percentage> from [10em] to [100%] at (1) is [100%] 
-PASS Web Animations: property <--length-percentage> from [10em] to [100%] at (1.5) is [calc(-100px + 150%)] 
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/animations/custom-properties/length-type-interpolation-expected.txt b/third_party/WebKit/LayoutTests/animations/custom-properties/length-type-interpolation-expected.txt
deleted file mode 100644
index 5a6378f..0000000
--- a/third_party/WebKit/LayoutTests/animations/custom-properties/length-type-interpolation-expected.txt
+++ /dev/null
@@ -1,109 +0,0 @@
-This is a testharness.js-based test.
-PASS This test uses interpolation-test.js. 
-FAIL CSS Transitions: property <--length> from neutral to [20px] at (-0.3) is [20px] assert_equals: expected "7px " but got "20px "
-FAIL CSS Transitions: property <--length> from neutral to [20px] at (0) is [20px] assert_equals: expected "10px " but got "20px "
-FAIL CSS Transitions: property <--length> from neutral to [20px] at (0.5) is [20px] assert_equals: expected "15px " but got "20px "
-PASS CSS Transitions: property <--length> from neutral to [20px] at (1) is [20px] 
-FAIL CSS Transitions: property <--length> from neutral to [20px] at (1.5) is [20px] assert_equals: expected "25px " but got "20px "
-FAIL CSS Transitions: property <--length> from [initial] to [20px] at (-0.3) is [20px] assert_equals: expected "46px " but got "20px "
-FAIL CSS Transitions: property <--length> from [initial] to [20px] at (0) is [20px] assert_equals: expected "40px " but got "20px "
-FAIL CSS Transitions: property <--length> from [initial] to [20px] at (0.5) is [20px] assert_equals: expected "30px " but got "20px "
-PASS CSS Transitions: property <--length> from [initial] to [20px] at (1) is [20px] 
-FAIL CSS Transitions: property <--length> from [initial] to [20px] at (1.5) is [20px] assert_equals: expected "10px " but got "20px "
-FAIL CSS Transitions: property <--length> from [inherit] to [20px] at (-0.3) is [20px] assert_equals: expected "33px " but got "20px "
-FAIL CSS Transitions: property <--length> from [inherit] to [20px] at (0) is [20px] assert_equals: expected "30px " but got "20px "
-FAIL CSS Transitions: property <--length> from [inherit] to [20px] at (0.5) is [20px] assert_equals: expected "25px " but got "20px "
-PASS CSS Transitions: property <--length> from [inherit] to [20px] at (1) is [20px] 
-FAIL CSS Transitions: property <--length> from [inherit] to [20px] at (1.5) is [20px] assert_equals: expected "15px " but got "20px "
-FAIL CSS Transitions: property <--length> from [unset] to [20px] at (-0.3) is [20px] assert_equals: expected "46px " but got "20px "
-FAIL CSS Transitions: property <--length> from [unset] to [20px] at (0) is [20px] assert_equals: expected "40px " but got "20px "
-FAIL CSS Transitions: property <--length> from [unset] to [20px] at (0.5) is [20px] assert_equals: expected "30px " but got "20px "
-PASS CSS Transitions: property <--length> from [unset] to [20px] at (1) is [20px] 
-FAIL CSS Transitions: property <--length> from [unset] to [20px] at (1.5) is [20px] assert_equals: expected "10px " but got "20px "
-FAIL CSS Transitions: property <--length> from [-10px] to [10px] at (-0.3) is [10px] assert_equals: expected "- 16px " but got "10px "
-FAIL CSS Transitions: property <--length> from [-10px] to [10px] at (0) is [10px] assert_equals: expected "- 10px " but got "10px "
-FAIL CSS Transitions: property <--length> from [-10px] to [10px] at (0.5) is [10px] assert_equals: expected "0px " but got "10px "
-PASS CSS Transitions: property <--length> from [-10px] to [10px] at (1) is [10px] 
-FAIL CSS Transitions: property <--length> from [-10px] to [10px] at (1.5) is [10px] assert_equals: expected "20px " but got "10px "
-FAIL CSS Transitions: property <--length> from [10em] to [20em] at (-0.3) is [400px] assert_equals: expected "140px " but got "400px "
-FAIL CSS Transitions: property <--length> from [10em] to [20em] at (0) is [400px] assert_equals: expected "200px " but got "400px "
-FAIL CSS Transitions: property <--length> from [10em] to [20em] at (0.5) is [400px] assert_equals: expected "300px " but got "400px "
-PASS CSS Transitions: property <--length> from [10em] to [20em] at (1) is [400px] 
-FAIL CSS Transitions: property <--length> from [10em] to [20em] at (1.5) is [400px] assert_equals: expected "500px " but got "400px "
-FAIL CSS Transitions: property <--length> from [10em] to [100px] at (-0.3) is [100px] assert_equals: expected "230px " but got "100px "
-FAIL CSS Transitions: property <--length> from [10em] to [100px] at (0) is [100px] assert_equals: expected "200px " but got "100px "
-FAIL CSS Transitions: property <--length> from [10em] to [100px] at (0.5) is [100px] assert_equals: expected "150px " but got "100px "
-PASS CSS Transitions: property <--length> from [10em] to [100px] at (1) is [100px] 
-FAIL CSS Transitions: property <--length> from [10em] to [100px] at (1.5) is [100px] assert_equals: expected "50px " but got "100px "
-PASS CSS Animations: property <--length> from neutral to [20px] at (-0.3) is [7px] 
-PASS CSS Animations: property <--length> from neutral to [20px] at (0) is [10px] 
-PASS CSS Animations: property <--length> from neutral to [20px] at (0.5) is [15px] 
-PASS CSS Animations: property <--length> from neutral to [20px] at (1) is [20px] 
-PASS CSS Animations: property <--length> from neutral to [20px] at (1.5) is [25px] 
-PASS CSS Animations: property <--length> from [initial] to [20px] at (-0.3) is [46px] 
-PASS CSS Animations: property <--length> from [initial] to [20px] at (0) is [40px] 
-PASS CSS Animations: property <--length> from [initial] to [20px] at (0.5) is [30px] 
-PASS CSS Animations: property <--length> from [initial] to [20px] at (1) is [20px] 
-PASS CSS Animations: property <--length> from [initial] to [20px] at (1.5) is [10px] 
-PASS CSS Animations: property <--length> from [inherit] to [20px] at (-0.3) is [33px] 
-PASS CSS Animations: property <--length> from [inherit] to [20px] at (0) is [30px] 
-PASS CSS Animations: property <--length> from [inherit] to [20px] at (0.5) is [25px] 
-PASS CSS Animations: property <--length> from [inherit] to [20px] at (1) is [20px] 
-PASS CSS Animations: property <--length> from [inherit] to [20px] at (1.5) is [15px] 
-PASS CSS Animations: property <--length> from [unset] to [20px] at (-0.3) is [46px] 
-PASS CSS Animations: property <--length> from [unset] to [20px] at (0) is [40px] 
-PASS CSS Animations: property <--length> from [unset] to [20px] at (0.5) is [30px] 
-PASS CSS Animations: property <--length> from [unset] to [20px] at (1) is [20px] 
-PASS CSS Animations: property <--length> from [unset] to [20px] at (1.5) is [10px] 
-PASS CSS Animations: property <--length> from [-10px] to [10px] at (-0.3) is [-16px] 
-PASS CSS Animations: property <--length> from [-10px] to [10px] at (0) is [-10px] 
-PASS CSS Animations: property <--length> from [-10px] to [10px] at (0.5) is [0px] 
-PASS CSS Animations: property <--length> from [-10px] to [10px] at (1) is [10px] 
-PASS CSS Animations: property <--length> from [-10px] to [10px] at (1.5) is [20px] 
-PASS CSS Animations: property <--length> from [10em] to [20em] at (-0.3) is [140px] 
-PASS CSS Animations: property <--length> from [10em] to [20em] at (0) is [200px] 
-PASS CSS Animations: property <--length> from [10em] to [20em] at (0.5) is [300px] 
-PASS CSS Animations: property <--length> from [10em] to [20em] at (1) is [400px] 
-PASS CSS Animations: property <--length> from [10em] to [20em] at (1.5) is [500px] 
-PASS CSS Animations: property <--length> from [10em] to [100px] at (-0.3) is [230px] 
-PASS CSS Animations: property <--length> from [10em] to [100px] at (0) is [200px] 
-PASS CSS Animations: property <--length> from [10em] to [100px] at (0.5) is [150px] 
-PASS CSS Animations: property <--length> from [10em] to [100px] at (1) is [100px] 
-PASS CSS Animations: property <--length> from [10em] to [100px] at (1.5) is [50px] 
-PASS Web Animations: property <--length> from neutral to [20px] at (-0.3) is [7px] 
-PASS Web Animations: property <--length> from neutral to [20px] at (0) is [10px] 
-PASS Web Animations: property <--length> from neutral to [20px] at (0.5) is [15px] 
-PASS Web Animations: property <--length> from neutral to [20px] at (1) is [20px] 
-PASS Web Animations: property <--length> from neutral to [20px] at (1.5) is [25px] 
-PASS Web Animations: property <--length> from [initial] to [20px] at (-0.3) is [46px] 
-PASS Web Animations: property <--length> from [initial] to [20px] at (0) is [40px] 
-PASS Web Animations: property <--length> from [initial] to [20px] at (0.5) is [30px] 
-PASS Web Animations: property <--length> from [initial] to [20px] at (1) is [20px] 
-PASS Web Animations: property <--length> from [initial] to [20px] at (1.5) is [10px] 
-PASS Web Animations: property <--length> from [inherit] to [20px] at (-0.3) is [33px] 
-PASS Web Animations: property <--length> from [inherit] to [20px] at (0) is [30px] 
-PASS Web Animations: property <--length> from [inherit] to [20px] at (0.5) is [25px] 
-PASS Web Animations: property <--length> from [inherit] to [20px] at (1) is [20px] 
-PASS Web Animations: property <--length> from [inherit] to [20px] at (1.5) is [15px] 
-PASS Web Animations: property <--length> from [unset] to [20px] at (-0.3) is [46px] 
-PASS Web Animations: property <--length> from [unset] to [20px] at (0) is [40px] 
-PASS Web Animations: property <--length> from [unset] to [20px] at (0.5) is [30px] 
-PASS Web Animations: property <--length> from [unset] to [20px] at (1) is [20px] 
-PASS Web Animations: property <--length> from [unset] to [20px] at (1.5) is [10px] 
-PASS Web Animations: property <--length> from [-10px] to [10px] at (-0.3) is [-16px] 
-PASS Web Animations: property <--length> from [-10px] to [10px] at (0) is [-10px] 
-PASS Web Animations: property <--length> from [-10px] to [10px] at (0.5) is [0px] 
-PASS Web Animations: property <--length> from [-10px] to [10px] at (1) is [10px] 
-PASS Web Animations: property <--length> from [-10px] to [10px] at (1.5) is [20px] 
-PASS Web Animations: property <--length> from [10em] to [20em] at (-0.3) is [140px] 
-PASS Web Animations: property <--length> from [10em] to [20em] at (0) is [200px] 
-PASS Web Animations: property <--length> from [10em] to [20em] at (0.5) is [300px] 
-PASS Web Animations: property <--length> from [10em] to [20em] at (1) is [400px] 
-PASS Web Animations: property <--length> from [10em] to [20em] at (1.5) is [500px] 
-PASS Web Animations: property <--length> from [10em] to [100px] at (-0.3) is [230px] 
-PASS Web Animations: property <--length> from [10em] to [100px] at (0) is [200px] 
-PASS Web Animations: property <--length> from [10em] to [100px] at (0.5) is [150px] 
-PASS Web Animations: property <--length> from [10em] to [100px] at (1) is [100px] 
-PASS Web Animations: property <--length> from [10em] to [100px] at (1.5) is [50px] 
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/animations/custom-properties/number-type-interpolation-expected.txt b/third_party/WebKit/LayoutTests/animations/custom-properties/number-type-interpolation-expected.txt
deleted file mode 100644
index 211c1c0..0000000
--- a/third_party/WebKit/LayoutTests/animations/custom-properties/number-type-interpolation-expected.txt
+++ /dev/null
@@ -1,79 +0,0 @@
-This is a testharness.js-based test.
-PASS This test uses interpolation-test.js. 
-FAIL CSS Transitions: property <--number> from neutral to [20] at (-0.3) is [20] assert_equals: expected "7 " but got "20 "
-FAIL CSS Transitions: property <--number> from neutral to [20] at (0) is [20] assert_equals: expected "10 " but got "20 "
-FAIL CSS Transitions: property <--number> from neutral to [20] at (0.5) is [20] assert_equals: expected "15 " but got "20 "
-PASS CSS Transitions: property <--number> from neutral to [20] at (1) is [20] 
-FAIL CSS Transitions: property <--number> from neutral to [20] at (1.5) is [20] assert_equals: expected "25 " but got "20 "
-FAIL CSS Transitions: property <--number> from [initial] to [20] at (-0.3) is [20] assert_equals: expected "46 " but got "20 "
-FAIL CSS Transitions: property <--number> from [initial] to [20] at (0) is [20] assert_equals: expected "40 " but got "20 "
-FAIL CSS Transitions: property <--number> from [initial] to [20] at (0.5) is [20] assert_equals: expected "30 " but got "20 "
-PASS CSS Transitions: property <--number> from [initial] to [20] at (1) is [20] 
-FAIL CSS Transitions: property <--number> from [initial] to [20] at (1.5) is [20] assert_equals: expected "10 " but got "20 "
-FAIL CSS Transitions: property <--number> from [inherit] to [20] at (-0.3) is [20] assert_equals: expected "33 " but got "20 "
-FAIL CSS Transitions: property <--number> from [inherit] to [20] at (0) is [20] assert_equals: expected "30 " but got "20 "
-FAIL CSS Transitions: property <--number> from [inherit] to [20] at (0.5) is [20] assert_equals: expected "25 " but got "20 "
-PASS CSS Transitions: property <--number> from [inherit] to [20] at (1) is [20] 
-FAIL CSS Transitions: property <--number> from [inherit] to [20] at (1.5) is [20] assert_equals: expected "15 " but got "20 "
-FAIL CSS Transitions: property <--number> from [unset] to [20] at (-0.3) is [20] assert_equals: expected "46 " but got "20 "
-FAIL CSS Transitions: property <--number> from [unset] to [20] at (0) is [20] assert_equals: expected "40 " but got "20 "
-FAIL CSS Transitions: property <--number> from [unset] to [20] at (0.5) is [20] assert_equals: expected "30 " but got "20 "
-PASS CSS Transitions: property <--number> from [unset] to [20] at (1) is [20] 
-FAIL CSS Transitions: property <--number> from [unset] to [20] at (1.5) is [20] assert_equals: expected "10 " but got "20 "
-FAIL CSS Transitions: property <--number> from [-10] to [10] at (-0.3) is [10] assert_equals: expected "- 16 " but got "10 "
-FAIL CSS Transitions: property <--number> from [-10] to [10] at (0) is [10] assert_equals: expected "- 10 " but got "10 "
-FAIL CSS Transitions: property <--number> from [-10] to [10] at (0.5) is [10] assert_equals: expected "0 " but got "10 "
-PASS CSS Transitions: property <--number> from [-10] to [10] at (1) is [10] 
-FAIL CSS Transitions: property <--number> from [-10] to [10] at (1.5) is [10] assert_equals: expected "20 " but got "10 "
-PASS CSS Animations: property <--number> from neutral to [20] at (-0.3) is [7] 
-PASS CSS Animations: property <--number> from neutral to [20] at (0) is [10] 
-PASS CSS Animations: property <--number> from neutral to [20] at (0.5) is [15] 
-PASS CSS Animations: property <--number> from neutral to [20] at (1) is [20] 
-PASS CSS Animations: property <--number> from neutral to [20] at (1.5) is [25] 
-PASS CSS Animations: property <--number> from [initial] to [20] at (-0.3) is [46] 
-PASS CSS Animations: property <--number> from [initial] to [20] at (0) is [40] 
-PASS CSS Animations: property <--number> from [initial] to [20] at (0.5) is [30] 
-PASS CSS Animations: property <--number> from [initial] to [20] at (1) is [20] 
-PASS CSS Animations: property <--number> from [initial] to [20] at (1.5) is [10] 
-PASS CSS Animations: property <--number> from [inherit] to [20] at (-0.3) is [33] 
-PASS CSS Animations: property <--number> from [inherit] to [20] at (0) is [30] 
-PASS CSS Animations: property <--number> from [inherit] to [20] at (0.5) is [25] 
-PASS CSS Animations: property <--number> from [inherit] to [20] at (1) is [20] 
-PASS CSS Animations: property <--number> from [inherit] to [20] at (1.5) is [15] 
-PASS CSS Animations: property <--number> from [unset] to [20] at (-0.3) is [46] 
-PASS CSS Animations: property <--number> from [unset] to [20] at (0) is [40] 
-PASS CSS Animations: property <--number> from [unset] to [20] at (0.5) is [30] 
-PASS CSS Animations: property <--number> from [unset] to [20] at (1) is [20] 
-PASS CSS Animations: property <--number> from [unset] to [20] at (1.5) is [10] 
-PASS CSS Animations: property <--number> from [-10] to [10] at (-0.3) is [-16] 
-PASS CSS Animations: property <--number> from [-10] to [10] at (0) is [-10] 
-PASS CSS Animations: property <--number> from [-10] to [10] at (0.5) is [0] 
-PASS CSS Animations: property <--number> from [-10] to [10] at (1) is [10] 
-PASS CSS Animations: property <--number> from [-10] to [10] at (1.5) is [20] 
-PASS Web Animations: property <--number> from neutral to [20] at (-0.3) is [7] 
-PASS Web Animations: property <--number> from neutral to [20] at (0) is [10] 
-PASS Web Animations: property <--number> from neutral to [20] at (0.5) is [15] 
-PASS Web Animations: property <--number> from neutral to [20] at (1) is [20] 
-PASS Web Animations: property <--number> from neutral to [20] at (1.5) is [25] 
-PASS Web Animations: property <--number> from [initial] to [20] at (-0.3) is [46] 
-PASS Web Animations: property <--number> from [initial] to [20] at (0) is [40] 
-PASS Web Animations: property <--number> from [initial] to [20] at (0.5) is [30] 
-PASS Web Animations: property <--number> from [initial] to [20] at (1) is [20] 
-PASS Web Animations: property <--number> from [initial] to [20] at (1.5) is [10] 
-PASS Web Animations: property <--number> from [inherit] to [20] at (-0.3) is [33] 
-PASS Web Animations: property <--number> from [inherit] to [20] at (0) is [30] 
-PASS Web Animations: property <--number> from [inherit] to [20] at (0.5) is [25] 
-PASS Web Animations: property <--number> from [inherit] to [20] at (1) is [20] 
-PASS Web Animations: property <--number> from [inherit] to [20] at (1.5) is [15] 
-PASS Web Animations: property <--number> from [unset] to [20] at (-0.3) is [46] 
-PASS Web Animations: property <--number> from [unset] to [20] at (0) is [40] 
-PASS Web Animations: property <--number> from [unset] to [20] at (0.5) is [30] 
-PASS Web Animations: property <--number> from [unset] to [20] at (1) is [20] 
-PASS Web Animations: property <--number> from [unset] to [20] at (1.5) is [10] 
-PASS Web Animations: property <--number> from [-10] to [10] at (-0.3) is [-16] 
-PASS Web Animations: property <--number> from [-10] to [10] at (0) is [-10] 
-PASS Web Animations: property <--number> from [-10] to [10] at (0.5) is [0] 
-PASS Web Animations: property <--number> from [-10] to [10] at (1) is [10] 
-PASS Web Animations: property <--number> from [-10] to [10] at (1.5) is [20] 
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/animations/custom-properties/percentage-type-interpolation-expected.txt b/third_party/WebKit/LayoutTests/animations/custom-properties/percentage-type-interpolation-expected.txt
deleted file mode 100644
index 589849f7..0000000
--- a/third_party/WebKit/LayoutTests/animations/custom-properties/percentage-type-interpolation-expected.txt
+++ /dev/null
@@ -1,79 +0,0 @@
-This is a testharness.js-based test.
-PASS This test uses interpolation-test.js. 
-FAIL CSS Transitions: property <--percentage> from neutral to [20%] at (-0.3) is [20%] assert_equals: expected "7 % " but got "20 % "
-FAIL CSS Transitions: property <--percentage> from neutral to [20%] at (0) is [20%] assert_equals: expected "10 % " but got "20 % "
-FAIL CSS Transitions: property <--percentage> from neutral to [20%] at (0.5) is [20%] assert_equals: expected "15 % " but got "20 % "
-PASS CSS Transitions: property <--percentage> from neutral to [20%] at (1) is [20%] 
-FAIL CSS Transitions: property <--percentage> from neutral to [20%] at (1.5) is [20%] assert_equals: expected "25 % " but got "20 % "
-FAIL CSS Transitions: property <--percentage> from [initial] to [20%] at (-0.3) is [20%] assert_equals: expected "46 % " but got "20 % "
-FAIL CSS Transitions: property <--percentage> from [initial] to [20%] at (0) is [20%] assert_equals: expected "40 % " but got "20 % "
-FAIL CSS Transitions: property <--percentage> from [initial] to [20%] at (0.5) is [20%] assert_equals: expected "30 % " but got "20 % "
-PASS CSS Transitions: property <--percentage> from [initial] to [20%] at (1) is [20%] 
-FAIL CSS Transitions: property <--percentage> from [initial] to [20%] at (1.5) is [20%] assert_equals: expected "10 % " but got "20 % "
-FAIL CSS Transitions: property <--percentage> from [inherit] to [20%] at (-0.3) is [20%] assert_equals: expected "33 % " but got "20 % "
-FAIL CSS Transitions: property <--percentage> from [inherit] to [20%] at (0) is [20%] assert_equals: expected "30 % " but got "20 % "
-FAIL CSS Transitions: property <--percentage> from [inherit] to [20%] at (0.5) is [20%] assert_equals: expected "25 % " but got "20 % "
-PASS CSS Transitions: property <--percentage> from [inherit] to [20%] at (1) is [20%] 
-FAIL CSS Transitions: property <--percentage> from [inherit] to [20%] at (1.5) is [20%] assert_equals: expected "15 % " but got "20 % "
-FAIL CSS Transitions: property <--percentage> from [unset] to [20%] at (-0.3) is [20%] assert_equals: expected "46 % " but got "20 % "
-FAIL CSS Transitions: property <--percentage> from [unset] to [20%] at (0) is [20%] assert_equals: expected "40 % " but got "20 % "
-FAIL CSS Transitions: property <--percentage> from [unset] to [20%] at (0.5) is [20%] assert_equals: expected "30 % " but got "20 % "
-PASS CSS Transitions: property <--percentage> from [unset] to [20%] at (1) is [20%] 
-FAIL CSS Transitions: property <--percentage> from [unset] to [20%] at (1.5) is [20%] assert_equals: expected "10 % " but got "20 % "
-FAIL CSS Transitions: property <--percentage> from [-10%] to [10%] at (-0.3) is [10%] assert_equals: expected "- 16 % " but got "10 % "
-FAIL CSS Transitions: property <--percentage> from [-10%] to [10%] at (0) is [10%] assert_equals: expected "- 10 % " but got "10 % "
-FAIL CSS Transitions: property <--percentage> from [-10%] to [10%] at (0.5) is [10%] assert_equals: expected "0 % " but got "10 % "
-PASS CSS Transitions: property <--percentage> from [-10%] to [10%] at (1) is [10%] 
-FAIL CSS Transitions: property <--percentage> from [-10%] to [10%] at (1.5) is [10%] assert_equals: expected "20 % " but got "10 % "
-PASS CSS Animations: property <--percentage> from neutral to [20%] at (-0.3) is [7%] 
-PASS CSS Animations: property <--percentage> from neutral to [20%] at (0) is [10%] 
-PASS CSS Animations: property <--percentage> from neutral to [20%] at (0.5) is [15%] 
-PASS CSS Animations: property <--percentage> from neutral to [20%] at (1) is [20%] 
-PASS CSS Animations: property <--percentage> from neutral to [20%] at (1.5) is [25%] 
-PASS CSS Animations: property <--percentage> from [initial] to [20%] at (-0.3) is [46%] 
-PASS CSS Animations: property <--percentage> from [initial] to [20%] at (0) is [40%] 
-PASS CSS Animations: property <--percentage> from [initial] to [20%] at (0.5) is [30%] 
-PASS CSS Animations: property <--percentage> from [initial] to [20%] at (1) is [20%] 
-PASS CSS Animations: property <--percentage> from [initial] to [20%] at (1.5) is [10%] 
-PASS CSS Animations: property <--percentage> from [inherit] to [20%] at (-0.3) is [33%] 
-PASS CSS Animations: property <--percentage> from [inherit] to [20%] at (0) is [30%] 
-PASS CSS Animations: property <--percentage> from [inherit] to [20%] at (0.5) is [25%] 
-PASS CSS Animations: property <--percentage> from [inherit] to [20%] at (1) is [20%] 
-PASS CSS Animations: property <--percentage> from [inherit] to [20%] at (1.5) is [15%] 
-PASS CSS Animations: property <--percentage> from [unset] to [20%] at (-0.3) is [46%] 
-PASS CSS Animations: property <--percentage> from [unset] to [20%] at (0) is [40%] 
-PASS CSS Animations: property <--percentage> from [unset] to [20%] at (0.5) is [30%] 
-PASS CSS Animations: property <--percentage> from [unset] to [20%] at (1) is [20%] 
-PASS CSS Animations: property <--percentage> from [unset] to [20%] at (1.5) is [10%] 
-PASS CSS Animations: property <--percentage> from [-10%] to [10%] at (-0.3) is [-16%] 
-PASS CSS Animations: property <--percentage> from [-10%] to [10%] at (0) is [-10%] 
-PASS CSS Animations: property <--percentage> from [-10%] to [10%] at (0.5) is [0%] 
-PASS CSS Animations: property <--percentage> from [-10%] to [10%] at (1) is [10%] 
-PASS CSS Animations: property <--percentage> from [-10%] to [10%] at (1.5) is [20%] 
-PASS Web Animations: property <--percentage> from neutral to [20%] at (-0.3) is [7%] 
-PASS Web Animations: property <--percentage> from neutral to [20%] at (0) is [10%] 
-PASS Web Animations: property <--percentage> from neutral to [20%] at (0.5) is [15%] 
-PASS Web Animations: property <--percentage> from neutral to [20%] at (1) is [20%] 
-PASS Web Animations: property <--percentage> from neutral to [20%] at (1.5) is [25%] 
-PASS Web Animations: property <--percentage> from [initial] to [20%] at (-0.3) is [46%] 
-PASS Web Animations: property <--percentage> from [initial] to [20%] at (0) is [40%] 
-PASS Web Animations: property <--percentage> from [initial] to [20%] at (0.5) is [30%] 
-PASS Web Animations: property <--percentage> from [initial] to [20%] at (1) is [20%] 
-PASS Web Animations: property <--percentage> from [initial] to [20%] at (1.5) is [10%] 
-PASS Web Animations: property <--percentage> from [inherit] to [20%] at (-0.3) is [33%] 
-PASS Web Animations: property <--percentage> from [inherit] to [20%] at (0) is [30%] 
-PASS Web Animations: property <--percentage> from [inherit] to [20%] at (0.5) is [25%] 
-PASS Web Animations: property <--percentage> from [inherit] to [20%] at (1) is [20%] 
-PASS Web Animations: property <--percentage> from [inherit] to [20%] at (1.5) is [15%] 
-PASS Web Animations: property <--percentage> from [unset] to [20%] at (-0.3) is [46%] 
-PASS Web Animations: property <--percentage> from [unset] to [20%] at (0) is [40%] 
-PASS Web Animations: property <--percentage> from [unset] to [20%] at (0.5) is [30%] 
-PASS Web Animations: property <--percentage> from [unset] to [20%] at (1) is [20%] 
-PASS Web Animations: property <--percentage> from [unset] to [20%] at (1.5) is [10%] 
-PASS Web Animations: property <--percentage> from [-10%] to [10%] at (-0.3) is [-16%] 
-PASS Web Animations: property <--percentage> from [-10%] to [10%] at (0) is [-10%] 
-PASS Web Animations: property <--percentage> from [-10%] to [10%] at (0.5) is [0%] 
-PASS Web Animations: property <--percentage> from [-10%] to [10%] at (1) is [10%] 
-PASS Web Animations: property <--percentage> from [-10%] to [10%] at (1.5) is [20%] 
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/animations/custom-properties/time-type-interpolation-expected.txt b/third_party/WebKit/LayoutTests/animations/custom-properties/time-type-interpolation-expected.txt
deleted file mode 100644
index 2f8b985..0000000
--- a/third_party/WebKit/LayoutTests/animations/custom-properties/time-type-interpolation-expected.txt
+++ /dev/null
@@ -1,109 +0,0 @@
-This is a testharness.js-based test.
-PASS This test uses interpolation-test.js. 
-FAIL CSS Transitions: property <--time> from neutral to [20s] at (-0.3) is [20s] assert_equals: expected "7s " but got "20s "
-FAIL CSS Transitions: property <--time> from neutral to [20s] at (0) is [20s] assert_equals: expected "10s " but got "20s "
-FAIL CSS Transitions: property <--time> from neutral to [20s] at (0.5) is [20s] assert_equals: expected "15s " but got "20s "
-PASS CSS Transitions: property <--time> from neutral to [20s] at (1) is [20s] 
-FAIL CSS Transitions: property <--time> from neutral to [20s] at (1.5) is [20s] assert_equals: expected "25s " but got "20s "
-FAIL CSS Transitions: property <--time> from [initial] to [20s] at (-0.3) is [20s] assert_equals: expected "46s " but got "20s "
-FAIL CSS Transitions: property <--time> from [initial] to [20s] at (0) is [20s] assert_equals: expected "40s " but got "20s "
-FAIL CSS Transitions: property <--time> from [initial] to [20s] at (0.5) is [20s] assert_equals: expected "30s " but got "20s "
-PASS CSS Transitions: property <--time> from [initial] to [20s] at (1) is [20s] 
-FAIL CSS Transitions: property <--time> from [initial] to [20s] at (1.5) is [20s] assert_equals: expected "10s " but got "20s "
-FAIL CSS Transitions: property <--time> from [inherit] to [20s] at (-0.3) is [20s] assert_equals: expected "33s " but got "20s "
-FAIL CSS Transitions: property <--time> from [inherit] to [20s] at (0) is [20s] assert_equals: expected "30s " but got "20s "
-FAIL CSS Transitions: property <--time> from [inherit] to [20s] at (0.5) is [20s] assert_equals: expected "25s " but got "20s "
-PASS CSS Transitions: property <--time> from [inherit] to [20s] at (1) is [20s] 
-FAIL CSS Transitions: property <--time> from [inherit] to [20s] at (1.5) is [20s] assert_equals: expected "15s " but got "20s "
-FAIL CSS Transitions: property <--time> from [unset] to [20s] at (-0.3) is [20s] assert_equals: expected "46s " but got "20s "
-FAIL CSS Transitions: property <--time> from [unset] to [20s] at (0) is [20s] assert_equals: expected "40s " but got "20s "
-FAIL CSS Transitions: property <--time> from [unset] to [20s] at (0.5) is [20s] assert_equals: expected "30s " but got "20s "
-PASS CSS Transitions: property <--time> from [unset] to [20s] at (1) is [20s] 
-FAIL CSS Transitions: property <--time> from [unset] to [20s] at (1.5) is [20s] assert_equals: expected "10s " but got "20s "
-FAIL CSS Transitions: property <--time> from [-10s] to [10s] at (-0.3) is [10s] assert_equals: expected "- 16s " but got "10s "
-FAIL CSS Transitions: property <--time> from [-10s] to [10s] at (0) is [10s] assert_equals: expected "- 10s " but got "10s "
-FAIL CSS Transitions: property <--time> from [-10s] to [10s] at (0.5) is [10s] assert_equals: expected "0s " but got "10s "
-PASS CSS Transitions: property <--time> from [-10s] to [10s] at (1) is [10s] 
-FAIL CSS Transitions: property <--time> from [-10s] to [10s] at (1.5) is [10s] assert_equals: expected "20s " but got "10s "
-FAIL CSS Transitions: property <--time> from [100ms] to [200ms] at (-0.3) is [200ms] assert_equals: expected "0.07s " but got "200ms "
-FAIL CSS Transitions: property <--time> from [100ms] to [200ms] at (0) is [200ms] assert_equals: expected "0.1s " but got "200ms "
-FAIL CSS Transitions: property <--time> from [100ms] to [200ms] at (0.5) is [200ms] assert_equals: expected "0.15s " but got "200ms "
-FAIL CSS Transitions: property <--time> from [100ms] to [200ms] at (1) is [200ms] assert_equals: expected "0.2s " but got "200ms "
-FAIL CSS Transitions: property <--time> from [100ms] to [200ms] at (1.5) is [200ms] assert_equals: expected "0.25s " but got "200ms "
-FAIL CSS Transitions: property <--time> from [1000ms] to [11s] at (-0.3) is [11s] assert_equals: expected "- 2s " but got "11s "
-FAIL CSS Transitions: property <--time> from [1000ms] to [11s] at (0) is [11s] assert_equals: expected "1s " but got "11s "
-FAIL CSS Transitions: property <--time> from [1000ms] to [11s] at (0.5) is [11s] assert_equals: expected "6s " but got "11s "
-PASS CSS Transitions: property <--time> from [1000ms] to [11s] at (1) is [11s] 
-FAIL CSS Transitions: property <--time> from [1000ms] to [11s] at (1.5) is [11s] assert_equals: expected "16s " but got "11s "
-PASS CSS Animations: property <--time> from neutral to [20s] at (-0.3) is [7s] 
-PASS CSS Animations: property <--time> from neutral to [20s] at (0) is [10s] 
-PASS CSS Animations: property <--time> from neutral to [20s] at (0.5) is [15s] 
-PASS CSS Animations: property <--time> from neutral to [20s] at (1) is [20s] 
-PASS CSS Animations: property <--time> from neutral to [20s] at (1.5) is [25s] 
-PASS CSS Animations: property <--time> from [initial] to [20s] at (-0.3) is [46s] 
-PASS CSS Animations: property <--time> from [initial] to [20s] at (0) is [40s] 
-PASS CSS Animations: property <--time> from [initial] to [20s] at (0.5) is [30s] 
-PASS CSS Animations: property <--time> from [initial] to [20s] at (1) is [20s] 
-PASS CSS Animations: property <--time> from [initial] to [20s] at (1.5) is [10s] 
-PASS CSS Animations: property <--time> from [inherit] to [20s] at (-0.3) is [33s] 
-PASS CSS Animations: property <--time> from [inherit] to [20s] at (0) is [30s] 
-PASS CSS Animations: property <--time> from [inherit] to [20s] at (0.5) is [25s] 
-PASS CSS Animations: property <--time> from [inherit] to [20s] at (1) is [20s] 
-PASS CSS Animations: property <--time> from [inherit] to [20s] at (1.5) is [15s] 
-PASS CSS Animations: property <--time> from [unset] to [20s] at (-0.3) is [46s] 
-PASS CSS Animations: property <--time> from [unset] to [20s] at (0) is [40s] 
-PASS CSS Animations: property <--time> from [unset] to [20s] at (0.5) is [30s] 
-PASS CSS Animations: property <--time> from [unset] to [20s] at (1) is [20s] 
-PASS CSS Animations: property <--time> from [unset] to [20s] at (1.5) is [10s] 
-PASS CSS Animations: property <--time> from [-10s] to [10s] at (-0.3) is [-16s] 
-PASS CSS Animations: property <--time> from [-10s] to [10s] at (0) is [-10s] 
-PASS CSS Animations: property <--time> from [-10s] to [10s] at (0.5) is [0s] 
-PASS CSS Animations: property <--time> from [-10s] to [10s] at (1) is [10s] 
-PASS CSS Animations: property <--time> from [-10s] to [10s] at (1.5) is [20s] 
-PASS CSS Animations: property <--time> from [100ms] to [200ms] at (-0.3) is [0.07s] 
-PASS CSS Animations: property <--time> from [100ms] to [200ms] at (0) is [0.1s] 
-PASS CSS Animations: property <--time> from [100ms] to [200ms] at (0.5) is [0.15s] 
-PASS CSS Animations: property <--time> from [100ms] to [200ms] at (1) is [0.2s] 
-PASS CSS Animations: property <--time> from [100ms] to [200ms] at (1.5) is [0.25s] 
-PASS CSS Animations: property <--time> from [1000ms] to [11s] at (-0.3) is [-2s] 
-PASS CSS Animations: property <--time> from [1000ms] to [11s] at (0) is [1s] 
-PASS CSS Animations: property <--time> from [1000ms] to [11s] at (0.5) is [6s] 
-PASS CSS Animations: property <--time> from [1000ms] to [11s] at (1) is [11s] 
-PASS CSS Animations: property <--time> from [1000ms] to [11s] at (1.5) is [16s] 
-PASS Web Animations: property <--time> from neutral to [20s] at (-0.3) is [7s] 
-PASS Web Animations: property <--time> from neutral to [20s] at (0) is [10s] 
-PASS Web Animations: property <--time> from neutral to [20s] at (0.5) is [15s] 
-PASS Web Animations: property <--time> from neutral to [20s] at (1) is [20s] 
-PASS Web Animations: property <--time> from neutral to [20s] at (1.5) is [25s] 
-PASS Web Animations: property <--time> from [initial] to [20s] at (-0.3) is [46s] 
-PASS Web Animations: property <--time> from [initial] to [20s] at (0) is [40s] 
-PASS Web Animations: property <--time> from [initial] to [20s] at (0.5) is [30s] 
-PASS Web Animations: property <--time> from [initial] to [20s] at (1) is [20s] 
-PASS Web Animations: property <--time> from [initial] to [20s] at (1.5) is [10s] 
-PASS Web Animations: property <--time> from [inherit] to [20s] at (-0.3) is [33s] 
-PASS Web Animations: property <--time> from [inherit] to [20s] at (0) is [30s] 
-PASS Web Animations: property <--time> from [inherit] to [20s] at (0.5) is [25s] 
-PASS Web Animations: property <--time> from [inherit] to [20s] at (1) is [20s] 
-PASS Web Animations: property <--time> from [inherit] to [20s] at (1.5) is [15s] 
-PASS Web Animations: property <--time> from [unset] to [20s] at (-0.3) is [46s] 
-PASS Web Animations: property <--time> from [unset] to [20s] at (0) is [40s] 
-PASS Web Animations: property <--time> from [unset] to [20s] at (0.5) is [30s] 
-PASS Web Animations: property <--time> from [unset] to [20s] at (1) is [20s] 
-PASS Web Animations: property <--time> from [unset] to [20s] at (1.5) is [10s] 
-PASS Web Animations: property <--time> from [-10s] to [10s] at (-0.3) is [-16s] 
-PASS Web Animations: property <--time> from [-10s] to [10s] at (0) is [-10s] 
-PASS Web Animations: property <--time> from [-10s] to [10s] at (0.5) is [0s] 
-PASS Web Animations: property <--time> from [-10s] to [10s] at (1) is [10s] 
-PASS Web Animations: property <--time> from [-10s] to [10s] at (1.5) is [20s] 
-PASS Web Animations: property <--time> from [100ms] to [200ms] at (-0.3) is [0.07s] 
-PASS Web Animations: property <--time> from [100ms] to [200ms] at (0) is [0.1s] 
-PASS Web Animations: property <--time> from [100ms] to [200ms] at (0.5) is [0.15s] 
-PASS Web Animations: property <--time> from [100ms] to [200ms] at (1) is [0.2s] 
-PASS Web Animations: property <--time> from [100ms] to [200ms] at (1.5) is [0.25s] 
-PASS Web Animations: property <--time> from [1000ms] to [11s] at (-0.3) is [-2s] 
-PASS Web Animations: property <--time> from [1000ms] to [11s] at (0) is [1s] 
-PASS Web Animations: property <--time> from [1000ms] to [11s] at (0.5) is [6s] 
-PASS Web Animations: property <--time> from [1000ms] to [11s] at (1) is [11s] 
-PASS Web Animations: property <--time> from [1000ms] to [11s] at (1.5) is [16s] 
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/dom/document/adoptNode-reparenting-crash.html b/third_party/WebKit/LayoutTests/dom/document/adoptNode-reparenting-crash.html
new file mode 100644
index 0000000..a8691dd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/dom/document/adoptNode-reparenting-crash.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<div id="test-container"><script>
+var sacrifice;
+test(() => {
+  let testContainer = document.getElementById('test-container');
+  let iframe = document.createElement('iframe');
+  testContainer.appendChild(iframe);
+  let doc = iframe.contentDocument;
+  let script = doc.createElementNS('http://www.w3.org/2000/svg', 'script');
+  script.type = 'invalid-type';
+  script.textContent = 'document.body.appendChild(parent.sacrifice)';
+  sacrifice = document.createElement('div');
+  script.appendChild(sacrifice);
+  doc.body.appendChild(script);
+  script.type = '';
+  // adoptNode() calls script.removeNode(sacrifice) internally, and this DOM
+  // mutation kicks the script.
+  document.adoptNode(sacrifice);
+}, 'Reparenting in removeNode() in adoptNode() should not crash.');
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
index c80f532..df0ae6e 100644
--- a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
+++ b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
@@ -313,6 +313,18 @@
      {}
     ]
    ],
+   "html/semantics/interactive-elements/context-menus/contextmenu-event-manual.htm": [
+    [
+     "/html/semantics/interactive-elements/context-menus/contextmenu-event-manual.htm",
+     {}
+    ]
+   ],
+   "html/webappapis/scripting/events/event-handler-processing-algorithm-manual.html": [
+    [
+     "/html/webappapis/scripting/events/event-handler-processing-algorithm-manual.html",
+     {}
+    ]
+   ],
    "html/webappapis/system-state-and-capabilities/the-navigator-object/get-navigatorlanguage-manual.html": [
     [
      "/html/webappapis/system-state-and-capabilities/the-navigator-object/get-navigatorlanguage-manual.html",
@@ -331,6 +343,102 @@
      {}
     ]
    ],
+   "orientation-event/free-fall-manual.html": [
+    [
+     "/orientation-event/free-fall-manual.html",
+     {}
+    ]
+   ],
+   "orientation-event/horizontal-surface-manual.html": [
+    [
+     "/orientation-event/horizontal-surface-manual.html",
+     {}
+    ]
+   ],
+   "orientation-event/screen-upmost-manual.html": [
+    [
+     "/orientation-event/screen-upmost-manual.html",
+     {}
+    ]
+   ],
+   "orientation-event/screen-upright-manual.html": [
+    [
+     "/orientation-event/screen-upright-manual.html",
+     {}
+    ]
+   ],
+   "orientation-event/t001-manual.html": [
+    [
+     "/orientation-event/t001-manual.html",
+     {}
+    ]
+   ],
+   "orientation-event/t002-manual.html": [
+    [
+     "/orientation-event/t002-manual.html",
+     {}
+    ]
+   ],
+   "orientation-event/t003-manual.html": [
+    [
+     "/orientation-event/t003-manual.html",
+     {}
+    ]
+   ],
+   "orientation-event/t006-manual.html": [
+    [
+     "/orientation-event/t006-manual.html",
+     {}
+    ]
+   ],
+   "orientation-event/t009-manual.html": [
+    [
+     "/orientation-event/t009-manual.html",
+     {}
+    ]
+   ],
+   "orientation-event/t010-manual.html": [
+    [
+     "/orientation-event/t010-manual.html",
+     {}
+    ]
+   ],
+   "orientation-event/t012-manual.html": [
+    [
+     "/orientation-event/t012-manual.html",
+     {}
+    ]
+   ],
+   "orientation-event/t021-manual.html": [
+    [
+     "/orientation-event/t021-manual.html",
+     {}
+    ]
+   ],
+   "orientation-event/t022-manual.html": [
+    [
+     "/orientation-event/t022-manual.html",
+     {}
+    ]
+   ],
+   "orientation-event/t023-manual.html": [
+    [
+     "/orientation-event/t023-manual.html",
+     {}
+    ]
+   ],
+   "orientation-event/t025-manual.html": [
+    [
+     "/orientation-event/t025-manual.html",
+     {}
+    ]
+   ],
+   "orientation-event/t028-manual.html": [
+    [
+     "/orientation-event/t028-manual.html",
+     {}
+    ]
+   ],
    "pointerevents/compat/pointerevent_touch-action_two-finger_interaction-manual.html": [
     [
      "/pointerevents/compat/pointerevent_touch-action_two-finger_interaction-manual.html",
@@ -703,6 +811,18 @@
      {}
     ]
    ],
+   "uievents/interface/click-event-manual.htm": [
+    [
+     "/uievents/interface/click-event-manual.htm",
+     {}
+    ]
+   ],
+   "uievents/interface/dblclick-event-manual.htm": [
+    [
+     "/uievents/interface/dblclick-event-manual.htm",
+     {}
+    ]
+   ],
    "uievents/keyboard/key-manual.css": [
     [
      "/uievents/keyboard/key-manual.css",
@@ -3381,6 +3501,18 @@
      {}
     ]
    ],
+   "infrastructure/reftest-wait.html": [
+    [
+     "/infrastructure/reftest-wait.html",
+     [
+      [
+       "/infrastructure/reftest-wait-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "quirks-mode/historical/list-item-bullet-size.html": [
     [
      "/quirks-mode/historical/list-item-bullet-size.html",
@@ -6623,11 +6755,6 @@
      {}
     ]
    ],
-   "FileAPI/blob/Blob-slice-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "FileAPI/file/File-constructor-expected.txt": [
     [
      {}
@@ -6893,6 +7020,11 @@
      {}
     ]
    ],
+   "content-security-policy/base-uri/base-uri_iframe_sandbox.sub.html.headers": [
+    [
+     {}
+    ]
+   ],
    "content-security-policy/blink-contrib-2/allowed.css": [
     [
      {}
@@ -8513,11 +8645,6 @@
      {}
     ]
    ],
-   "dom/events/EventTarget-dispatchEvent-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "dom/historical-expected.txt": [
     [
      {}
@@ -8658,6 +8785,11 @@
      {}
     ]
    ],
+   "dom/nodes/Document-createElement-namespace-tests/bare_mathml.svg": [
+    [
+     {}
+    ]
+   ],
    "dom/nodes/Document-createElement-namespace-tests/bare_mathml.xhtml": [
     [
      {}
@@ -8673,6 +8805,11 @@
      {}
     ]
    ],
+   "dom/nodes/Document-createElement-namespace-tests/bare_svg.svg": [
+    [
+     {}
+    ]
+   ],
    "dom/nodes/Document-createElement-namespace-tests/bare_svg.xhtml": [
     [
      {}
@@ -8688,6 +8825,11 @@
      {}
     ]
    ],
+   "dom/nodes/Document-createElement-namespace-tests/bare_xhtml.svg": [
+    [
+     {}
+    ]
+   ],
    "dom/nodes/Document-createElement-namespace-tests/bare_xhtml.xhtml": [
     [
      {}
@@ -8703,6 +8845,11 @@
      {}
     ]
    ],
+   "dom/nodes/Document-createElement-namespace-tests/empty.svg": [
+    [
+     {}
+    ]
+   ],
    "dom/nodes/Document-createElement-namespace-tests/empty.xhtml": [
     [
      {}
@@ -8723,6 +8870,11 @@
      {}
     ]
    ],
+   "dom/nodes/Document-createElement-namespace-tests/mathml.svg": [
+    [
+     {}
+    ]
+   ],
    "dom/nodes/Document-createElement-namespace-tests/mathml.xhtml": [
     [
      {}
@@ -8738,6 +8890,11 @@
      {}
     ]
    ],
+   "dom/nodes/Document-createElement-namespace-tests/minimal_html.svg": [
+    [
+     {}
+    ]
+   ],
    "dom/nodes/Document-createElement-namespace-tests/minimal_html.xhtml": [
     [
      {}
@@ -8753,6 +8910,11 @@
      {}
     ]
    ],
+   "dom/nodes/Document-createElement-namespace-tests/svg.svg": [
+    [
+     {}
+    ]
+   ],
    "dom/nodes/Document-createElement-namespace-tests/svg.xhtml": [
     [
      {}
@@ -8768,6 +8930,11 @@
      {}
     ]
    ],
+   "dom/nodes/Document-createElement-namespace-tests/xhtml.svg": [
+    [
+     {}
+    ]
+   ],
    "dom/nodes/Document-createElement-namespace-tests/xhtml.xhtml": [
     [
      {}
@@ -8783,6 +8950,11 @@
      {}
     ]
    ],
+   "dom/nodes/Document-createElement-namespace-tests/xhtml_ns_changed.svg": [
+    [
+     {}
+    ]
+   ],
    "dom/nodes/Document-createElement-namespace-tests/xhtml_ns_changed.xhtml": [
     [
      {}
@@ -8798,6 +8970,11 @@
      {}
     ]
    ],
+   "dom/nodes/Document-createElement-namespace-tests/xhtml_ns_removed.svg": [
+    [
+     {}
+    ]
+   ],
    "dom/nodes/Document-createElement-namespace-tests/xhtml_ns_removed.xhtml": [
     [
      {}
@@ -8938,11 +9115,6 @@
      {}
     ]
    ],
-   "dom/nodes/Node-lookupNamespaceURI-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "dom/nodes/Node-parentNode-iframe.html": [
     [
      {}
@@ -9038,11 +9210,6 @@
      {}
     ]
    ],
-   "dom/ranges/Range-mutations-dataChange-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "dom/ranges/Range-mutations-splitText-expected.txt": [
     [
      {}
@@ -9053,11 +9220,6 @@
      {}
     ]
    ],
-   "dom/ranges/Range-surroundContents-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "dom/ranges/Range-test-iframe.html": [
     [
      {}
@@ -9133,11 +9295,6 @@
      {}
     ]
    ],
-   "domparsing/DOMParser-parseFromString-html-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "domparsing/DOMParser-parseFromString-xml-expected.txt": [
     [
      {}
@@ -9163,6 +9320,11 @@
      {}
     ]
    ],
+   "domxpath/002-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "domxpath/interfaces-expected.txt": [
     [
      {}
@@ -10158,6 +10320,11 @@
      {}
     ]
    ],
+   "html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin-0.html": [
+    [
+     {}
+    ]
+   ],
    "html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin-expected.txt": [
     [
      {}
@@ -11368,11 +11535,6 @@
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-first-created-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "html/browsers/windows/browsing-context-names/001-1.html": [
     [
      {}
@@ -11418,52 +11580,57 @@
      {}
     ]
    ],
-   "html/browsers/windows/nested-browsing-contexts/test.html": [
+   "html/browsers/windows/nested-browsing-contexts/resources/frameElement-nested-frame.html": [
     [
      {}
     ]
    ],
-   "html/browsers/windows/nested-browsing-contexts/testcase3.html": [
+   "html/browsers/windows/nested-browsing-contexts/resources/frameElement-window-post.html": [
     [
      {}
     ]
    ],
-   "html/browsers/windows/noreferrer-cross-origin-window-name.sub.html": [
+   "html/browsers/windows/nested-browsing-contexts/resources/post-to-opener.html": [
     [
      {}
     ]
    ],
-   "html/browsers/windows/support-close.html": [
+   "html/browsers/windows/resources/browsing-context-window.html": [
     [
      {}
     ]
    ],
-   "html/browsers/windows/support-named-null-opener.html": [
+   "html/browsers/windows/resources/echo-window-name.html": [
     [
      {}
     ]
    ],
-   "html/browsers/windows/support-nested-browsing-contexts.html": [
+   "html/browsers/windows/resources/nested-post-to-opener.html": [
     [
      {}
     ]
    ],
-   "html/browsers/windows/support-open-cross-origin.sub.html": [
+   "html/browsers/windows/resources/noreferrer-window-name.html": [
     [
      {}
     ]
    ],
-   "html/browsers/windows/support-opener-null.html": [
+   "html/browsers/windows/resources/post-to-opener.html": [
     [
      {}
     ]
    ],
-   "html/browsers/windows/support-post-to-opener.html": [
+   "html/browsers/windows/resources/target-cross-origin.sub.html": [
     [
      {}
     ]
    ],
-   "html/browsers/windows/support-window-name-echo.html": [
+   "html/browsers/windows/resources/window-close-button.html": [
+    [
+     {}
+    ]
+   ],
+   "html/browsers/windows/resources/window-opener.html": [
     [
      {}
     ]
@@ -16373,6 +16540,11 @@
      {}
     ]
    ],
+   "html/rendering/non-replaced-elements/margin-collapsing-quirks/compare-computed-style.js": [
+    [
+     {}
+    ]
+   ],
    "html/rendering/non-replaced-elements/phrasing-content-0/font-element-text-decoration-color/001-ref.html": [
     [
      {}
@@ -16663,11 +16835,6 @@
      {}
     ]
    ],
-   "html/semantics/embedded-content/media-elements/interfaces/TextTrack/mode-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "html/semantics/embedded-content/media-elements/interfaces/TextTrackCue/onenter-expected.txt": [
     [
      {}
@@ -16738,11 +16905,6 @@
      {}
     ]
    ],
-   "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-networkState-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-control-expected.txt": [
     [
      {}
@@ -16968,11 +17130,6 @@
      {}
     ]
    ],
-   "html/semantics/embedded-content/the-img-element/Image-constructor-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "html/semantics/embedded-content/the-img-element/brokenimg.jpg": [
     [
      {}
@@ -17028,11 +17185,6 @@
      {}
     ]
    ],
-   "html/semantics/embedded-content/the-img-element/update-the-source-set-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "html/semantics/embedded-content/the-img-element/usemap-casing-expected.txt": [
     [
      {}
@@ -17153,11 +17305,6 @@
      {}
     ]
    ],
-   "html/semantics/forms/textfieldselection/select-event-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "html/semantics/forms/the-button-element/button-activate-frame.html": [
     [
      {}
@@ -17173,11 +17320,6 @@
      {}
     ]
    ],
-   "html/semantics/forms/the-datalist-element/datalistoptions-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "html/semantics/forms/the-form-element/form-autocomplete-expected.txt": [
     [
      {}
@@ -17213,11 +17355,6 @@
      {}
     ]
    ],
-   "html/semantics/forms/the-input-element/date-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "html/semantics/forms/the-input-element/datetime-local-expected.txt": [
     [
      {}
@@ -18433,6 +18570,16 @@
      {}
     ]
    ],
+   "html/webappapis/scripting/events/event-handler-processing-algorithm-error/resources/no-op-worker.js": [
+    [
+     {}
+    ]
+   ],
+   "html/webappapis/scripting/events/event-handler-processing-algorithm-error/resources/worker-with-syntax-error.js": [
+    [
+     {}
+    ]
+   ],
    "html/webappapis/scripting/events/event-handler-processing-algorithm-expected.txt": [
     [
      {}
@@ -18453,11 +18600,6 @@
      {}
     ]
    ],
-   "html/webappapis/scripting/events/invalid-uncompiled-raw-handler-compiled-once-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "html/webappapis/scripting/events/messageevent-constructor.https-expected.txt": [
     [
      {}
@@ -18483,11 +18625,6 @@
      {}
     ]
    ],
-   "html/webappapis/scripting/processing-model-2/addEventListener-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "html/webappapis/scripting/processing-model-2/body-onerror-compile-error-data-url-expected.txt": [
     [
      {}
@@ -18513,11 +18650,6 @@
      {}
     ]
    ],
-   "html/webappapis/scripting/processing-model-2/compile-error-in-body-onerror-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "html/webappapis/scripting/processing-model-2/compile-error-in-setInterval-expected.txt": [
     [
      {}
@@ -18808,6 +18940,16 @@
      {}
     ]
    ],
+   "images/pattern.ogv": [
+    [
+     {}
+    ]
+   ],
+   "images/pattern.png": [
+    [
+     {}
+    ]
+   ],
    "images/red-16x16.png": [
     [
      {}
@@ -18878,6 +19020,11 @@
      {}
     ]
    ],
+   "infrastructure/reftest-wait-ref.html": [
+    [
+     {}
+    ]
+   ],
    "innerText/getter-expected.txt": [
     [
      {}
@@ -18898,6 +19045,26 @@
      {}
     ]
    ],
+   "longtask-timing/resources/makelongtask.js": [
+    [
+     {}
+    ]
+   ],
+   "longtask-timing/resources/raflongtask.js": [
+    [
+     {}
+    ]
+   ],
+   "longtask-timing/resources/subframe-observing-longtask.html": [
+    [
+     {}
+    ]
+   ],
+   "longtask-timing/resources/subframe-with-longtask.html": [
+    [
+     {}
+    ]
+   ],
    "magnetometer/idlharness.https-expected.txt": [
     [
      {}
@@ -22563,11 +22730,6 @@
      {}
     ]
    ],
-   "selection/removeAllRanges-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "selection/setBaseAndExtent-expected.txt": [
     [
      {}
@@ -22723,6 +22885,11 @@
      {}
     ]
    ],
+   "service-workers/service-worker/ServiceWorkerGlobalScope/resources/close-worker.js": [
+    [
+     {}
+    ]
+   ],
    "service-workers/service-worker/ServiceWorkerGlobalScope/resources/registration-attribute-worker.js": [
     [
      {}
@@ -22763,11 +22930,6 @@
      {}
     ]
    ],
-   "service-workers/service-worker/fetch-request-fallback.https-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "service-workers/service-worker/fetch-request-redirect.https-expected.txt": [
     [
      {}
@@ -22778,16 +22940,6 @@
      {}
     ]
    ],
-   "service-workers/service-worker/foreign-fetch-cors.https-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "service-workers/service-worker/foreign-fetch-workers.https-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "service-workers/service-worker/multi-globals/current/current.https.html": [
     [
      {}
@@ -22968,6 +23120,11 @@
      {}
     ]
    ],
+   "service-workers/service-worker/resources/empty.html": [
+    [
+     {}
+    ]
+   ],
    "service-workers/service-worker/resources/empty.js": [
     [
      {}
@@ -23793,16 +23950,6 @@
      {}
     ]
    ],
-   "streams/piping/pipe-through-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/piping/pipe-through.dedicatedworker-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "streams/piping/pipe-through.js": [
     [
      {}
@@ -27670,7 +27817,9 @@
    "IndexedDB/idb-binary-key-roundtrip.htm": [
     [
      "/IndexedDB/idb-binary-key-roundtrip.htm",
-     {}
+     {
+      "timeout": "long"
+     }
     ]
    ],
    "IndexedDB/idb_binary_key_conversion.htm": [
@@ -28339,6 +28488,12 @@
      {}
     ]
    ],
+   "IndexedDB/idbfactory-open-error-properties.html": [
+    [
+     "/IndexedDB/idbfactory-open-error-properties.html",
+     {}
+    ]
+   ],
    "IndexedDB/idbfactory-open-opaque-origin.html": [
     [
      "/IndexedDB/idbfactory-open-opaque-origin.html",
@@ -29124,7 +29279,9 @@
    "IndexedDB/idbobjectstore_getKey.html": [
     [
      "/IndexedDB/idbobjectstore_getKey.html",
-     {}
+     {
+      "timeout": "long"
+     }
     ]
    ],
    "IndexedDB/idbobjectstore_index.htm": [
@@ -29322,7 +29479,9 @@
    "IndexedDB/key-conversion-exceptions.htm": [
     [
      "/IndexedDB/key-conversion-exceptions.htm",
-     {}
+     {
+      "timeout": "long"
+     }
     ]
    ],
    "IndexedDB/key_invalid.htm": [
@@ -29345,6 +29504,18 @@
      {}
     ]
    ],
+   "IndexedDB/keygenerator-explicit.html": [
+    [
+     "/IndexedDB/keygenerator-explicit.html",
+     {}
+    ]
+   ],
+   "IndexedDB/keygenerator-inject.html": [
+    [
+     "/IndexedDB/keygenerator-inject.html",
+     {}
+    ]
+   ],
    "IndexedDB/keygenerator-overflow.htm": [
     [
      "/IndexedDB/keygenerator-overflow.htm",
@@ -29455,6 +29626,12 @@
      {}
     ]
    ],
+   "IndexedDB/transaction-abort-request-error.html": [
+    [
+     "/IndexedDB/transaction-abort-request-error.html",
+     {}
+    ]
+   ],
    "IndexedDB/transaction-create_in_versionchange.htm": [
     [
      "/IndexedDB/transaction-create_in_versionchange.htm",
@@ -29607,6 +29784,12 @@
      {}
     ]
    ],
+   "content-security-policy/base-uri/base-uri_iframe_sandbox.sub.html": [
+    [
+     "/content-security-policy/base-uri/base-uri_iframe_sandbox.sub.html",
+     {}
+    ]
+   ],
    "content-security-policy/blink-contrib-2/base-uri-allow.sub.html": [
     [
      "/content-security-policy/blink-contrib-2/base-uri-allow.sub.html",
@@ -31987,6 +32170,12 @@
      {}
     ]
    ],
+   "dom/nodes/Element-childElement-null-svg.svg": [
+    [
+     "/dom/nodes/Element-childElement-null-svg.svg",
+     {}
+    ]
+   ],
    "dom/nodes/Element-childElement-null-xhtml.xhtml": [
     [
      "/dom/nodes/Element-childElement-null-xhtml.xhtml",
@@ -31999,6 +32188,12 @@
      {}
     ]
    ],
+   "dom/nodes/Element-childElementCount-dynamic-add-svg.svg": [
+    [
+     "/dom/nodes/Element-childElementCount-dynamic-add-svg.svg",
+     {}
+    ]
+   ],
    "dom/nodes/Element-childElementCount-dynamic-add-xhtml.xhtml": [
     [
      "/dom/nodes/Element-childElementCount-dynamic-add-xhtml.xhtml",
@@ -32011,6 +32206,12 @@
      {}
     ]
    ],
+   "dom/nodes/Element-childElementCount-dynamic-remove-svg.svg": [
+    [
+     "/dom/nodes/Element-childElementCount-dynamic-remove-svg.svg",
+     {}
+    ]
+   ],
    "dom/nodes/Element-childElementCount-dynamic-remove-xhtml.xhtml": [
     [
      "/dom/nodes/Element-childElementCount-dynamic-remove-xhtml.xhtml",
@@ -32023,6 +32224,12 @@
      {}
     ]
    ],
+   "dom/nodes/Element-childElementCount-nochild-svg.svg": [
+    [
+     "/dom/nodes/Element-childElementCount-nochild-svg.svg",
+     {}
+    ]
+   ],
    "dom/nodes/Element-childElementCount-nochild-xhtml.xhtml": [
     [
      "/dom/nodes/Element-childElementCount-nochild-xhtml.xhtml",
@@ -32035,6 +32242,12 @@
      {}
     ]
    ],
+   "dom/nodes/Element-childElementCount-svg.svg": [
+    [
+     "/dom/nodes/Element-childElementCount-svg.svg",
+     {}
+    ]
+   ],
    "dom/nodes/Element-childElementCount-xhtml.xhtml": [
     [
      "/dom/nodes/Element-childElementCount-xhtml.xhtml",
@@ -32071,6 +32284,18 @@
      {}
     ]
    ],
+   "dom/nodes/Element-firstElementChild-entity.svg": [
+    [
+     "/dom/nodes/Element-firstElementChild-entity.svg",
+     {}
+    ]
+   ],
+   "dom/nodes/Element-firstElementChild-namespace-svg.svg": [
+    [
+     "/dom/nodes/Element-firstElementChild-namespace-svg.svg",
+     {}
+    ]
+   ],
    "dom/nodes/Element-firstElementChild-namespace-xhtml.xhtml": [
     [
      "/dom/nodes/Element-firstElementChild-namespace-xhtml.xhtml",
@@ -32083,6 +32308,12 @@
      {}
     ]
    ],
+   "dom/nodes/Element-firstElementChild-svg.svg": [
+    [
+     "/dom/nodes/Element-firstElementChild-svg.svg",
+     {}
+    ]
+   ],
    "dom/nodes/Element-firstElementChild-xhtml.xhtml": [
     [
      "/dom/nodes/Element-firstElementChild-xhtml.xhtml",
@@ -32137,6 +32368,12 @@
      {}
     ]
    ],
+   "dom/nodes/Element-lastElementChild-svg.svg": [
+    [
+     "/dom/nodes/Element-lastElementChild-svg.svg",
+     {}
+    ]
+   ],
    "dom/nodes/Element-lastElementChild-xhtml.xhtml": [
     [
      "/dom/nodes/Element-lastElementChild-xhtml.xhtml",
@@ -32155,6 +32392,12 @@
      {}
     ]
    ],
+   "dom/nodes/Element-nextElementSibling-svg.svg": [
+    [
+     "/dom/nodes/Element-nextElementSibling-svg.svg",
+     {}
+    ]
+   ],
    "dom/nodes/Element-nextElementSibling-xhtml.xhtml": [
     [
      "/dom/nodes/Element-nextElementSibling-xhtml.xhtml",
@@ -32167,6 +32410,12 @@
      {}
     ]
    ],
+   "dom/nodes/Element-previousElementSibling-svg.svg": [
+    [
+     "/dom/nodes/Element-previousElementSibling-svg.svg",
+     {}
+    ]
+   ],
    "dom/nodes/Element-previousElementSibling-xhtml.xhtml": [
     [
      "/dom/nodes/Element-previousElementSibling-xhtml.xhtml",
@@ -32191,6 +32440,12 @@
      {}
     ]
    ],
+   "dom/nodes/Element-siblingElement-null-svg.svg": [
+    [
+     "/dom/nodes/Element-siblingElement-null-svg.svg",
+     {}
+    ]
+   ],
    "dom/nodes/Element-siblingElement-null-xhtml.xhtml": [
     [
      "/dom/nodes/Element-siblingElement-null-xhtml.xhtml",
@@ -33129,6 +33384,18 @@
      {}
     ]
    ],
+   "domxpath/001.html": [
+    [
+     "/domxpath/001.html",
+     {}
+    ]
+   ],
+   "domxpath/002.html": [
+    [
+     "/domxpath/002.html",
+     {}
+    ]
+   ],
    "domxpath/evaluator-constructor.html": [
     [
      "/domxpath/evaluator-constructor.html",
@@ -35477,12 +35744,6 @@
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-first-created.xhtml": [
-    [
-     "/html/browsers/windows/browsing-context-first-created.xhtml",
-     {}
-    ]
-   ],
    "html/browsers/windows/browsing-context-names/001.html": [
     [
      "/html/browsers/windows/browsing-context-names/001.html",
@@ -35519,15 +35780,51 @@
      {}
     ]
    ],
+   "html/browsers/windows/browsing-context-window.html": [
+    [
+     "/html/browsers/windows/browsing-context-window.html",
+     {}
+    ]
+   ],
+   "html/browsers/windows/browsing-context.html": [
+    [
+     "/html/browsers/windows/browsing-context.html",
+     {}
+    ]
+   ],
    "html/browsers/windows/nested-browsing-contexts/frameElement.html": [
     [
      "/html/browsers/windows/nested-browsing-contexts/frameElement.html",
      {}
     ]
    ],
-   "html/browsers/windows/nested-browsing-contexts/window-top-001.html": [
+   "html/browsers/windows/nested-browsing-contexts/window-parent-null.html": [
     [
-     "/html/browsers/windows/nested-browsing-contexts/window-top-001.html",
+     "/html/browsers/windows/nested-browsing-contexts/window-parent-null.html",
+     {}
+    ]
+   ],
+   "html/browsers/windows/nested-browsing-contexts/window-parent.html": [
+    [
+     "/html/browsers/windows/nested-browsing-contexts/window-parent.html",
+     {}
+    ]
+   ],
+   "html/browsers/windows/nested-browsing-contexts/window-top-null.html": [
+    [
+     "/html/browsers/windows/nested-browsing-contexts/window-top-null.html",
+     {}
+    ]
+   ],
+   "html/browsers/windows/nested-browsing-contexts/window-top.html": [
+    [
+     "/html/browsers/windows/nested-browsing-contexts/window-top.html",
+     {}
+    ]
+   ],
+   "html/browsers/windows/noreferrer-null-opener.html": [
+    [
+     "/html/browsers/windows/noreferrer-null-opener.html",
      {}
     ]
    ],
@@ -35537,12 +35834,6 @@
      {}
     ]
    ],
-   "html/browsers/windows/noreferrer.html": [
-    [
-     "/html/browsers/windows/noreferrer.html",
-     {}
-    ]
-   ],
    "html/browsers/windows/targeting-cross-origin-nested-browsing-contexts.html": [
     [
      "/html/browsers/windows/targeting-cross-origin-nested-browsing-contexts.html",
@@ -37009,6 +37300,18 @@
      {}
     ]
    ],
+   "html/rendering/non-replaced-elements/margin-collapsing-quirks/multicol-quirks-mode.html": [
+    [
+     "/html/rendering/non-replaced-elements/margin-collapsing-quirks/multicol-quirks-mode.html",
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/margin-collapsing-quirks/multicol-standards-mode.html": [
+    [
+     "/html/rendering/non-replaced-elements/margin-collapsing-quirks/multicol-standards-mode.html",
+     {}
+    ]
+   ],
    "html/rendering/non-replaced-elements/tables/table-vspace-hspace-s.html": [
     [
      "/html/rendering/non-replaced-elements/tables/table-vspace-hspace-s.html",
@@ -38216,7 +38519,9 @@
    "html/semantics/forms/textfieldselection/select-event.html": [
     [
      "/html/semantics/forms/textfieldselection/select-event.html",
-     {}
+     {
+      "timeout": "long"
+     }
     ]
    ],
    "html/semantics/forms/textfieldselection/selection-after-content-change.html": [
@@ -41055,6 +41360,66 @@
      {}
     ]
    ],
+   "html/webappapis/scripting/events/event-handler-processing-algorithm-error/document-synthetic-errorevent.html": [
+    [
+     "/html/webappapis/scripting/events/event-handler-processing-algorithm-error/document-synthetic-errorevent.html",
+     {}
+    ]
+   ],
+   "html/webappapis/scripting/events/event-handler-processing-algorithm-error/document-synthetic-event.html": [
+    [
+     "/html/webappapis/scripting/events/event-handler-processing-algorithm-error/document-synthetic-event.html",
+     {}
+    ]
+   ],
+   "html/webappapis/scripting/events/event-handler-processing-algorithm-error/script-element.html": [
+    [
+     "/html/webappapis/scripting/events/event-handler-processing-algorithm-error/script-element.html",
+     {}
+    ]
+   ],
+   "html/webappapis/scripting/events/event-handler-processing-algorithm-error/window-runtime-error.html": [
+    [
+     "/html/webappapis/scripting/events/event-handler-processing-algorithm-error/window-runtime-error.html",
+     {}
+    ]
+   ],
+   "html/webappapis/scripting/events/event-handler-processing-algorithm-error/window-synthetic-errorevent.html": [
+    [
+     "/html/webappapis/scripting/events/event-handler-processing-algorithm-error/window-synthetic-errorevent.html",
+     {}
+    ]
+   ],
+   "html/webappapis/scripting/events/event-handler-processing-algorithm-error/window-synthetic-event.html": [
+    [
+     "/html/webappapis/scripting/events/event-handler-processing-algorithm-error/window-synthetic-event.html",
+     {}
+    ]
+   ],
+   "html/webappapis/scripting/events/event-handler-processing-algorithm-error/worker.html": [
+    [
+     "/html/webappapis/scripting/events/event-handler-processing-algorithm-error/worker.html",
+     {}
+    ]
+   ],
+   "html/webappapis/scripting/events/event-handler-processing-algorithm-error/workerglobalscope-runtime-error.worker.js": [
+    [
+     "/html/webappapis/scripting/events/event-handler-processing-algorithm-error/workerglobalscope-runtime-error.worker.html",
+     {}
+    ]
+   ],
+   "html/webappapis/scripting/events/event-handler-processing-algorithm-error/workerglobalscope-synthetic-errorevent.worker.js": [
+    [
+     "/html/webappapis/scripting/events/event-handler-processing-algorithm-error/workerglobalscope-synthetic-errorevent.worker.html",
+     {}
+    ]
+   ],
+   "html/webappapis/scripting/events/event-handler-processing-algorithm-error/workerglobalscope-synthetic-event.worker.js": [
+    [
+     "/html/webappapis/scripting/events/event-handler-processing-algorithm-error/workerglobalscope-synthetic-event.worker.html",
+     {}
+    ]
+   ],
    "html/webappapis/scripting/events/event-handler-processing-algorithm.html": [
     [
      "/html/webappapis/scripting/events/event-handler-processing-algorithm.html",
@@ -41487,6 +41852,12 @@
      {}
     ]
    ],
+   "infrastructure/failing-test.html": [
+    [
+     "/infrastructure/failing-test.html",
+     {}
+    ]
+   ],
    "innerText/getter.html": [
     [
      "/innerText/getter.html",
@@ -41505,6 +41876,54 @@
      {}
     ]
    ],
+   "longtask-timing/longtask-attributes.html": [
+    [
+     "/longtask-timing/longtask-attributes.html",
+     {}
+    ]
+   ],
+   "longtask-timing/longtask-in-childiframe-crossorigin.html": [
+    [
+     "/longtask-timing/longtask-in-childiframe-crossorigin.html",
+     {}
+    ]
+   ],
+   "longtask-timing/longtask-in-childiframe.html": [
+    [
+     "/longtask-timing/longtask-in-childiframe.html",
+     {}
+    ]
+   ],
+   "longtask-timing/longtask-in-externalscript.html": [
+    [
+     "/longtask-timing/longtask-in-externalscript.html",
+     {}
+    ]
+   ],
+   "longtask-timing/longtask-in-parentiframe.html": [
+    [
+     "/longtask-timing/longtask-in-parentiframe.html",
+     {}
+    ]
+   ],
+   "longtask-timing/longtask-in-raf.html": [
+    [
+     "/longtask-timing/longtask-in-raf.html",
+     {}
+    ]
+   ],
+   "longtask-timing/longtask-in-sibling-iframe-crossorigin.html": [
+    [
+     "/longtask-timing/longtask-in-sibling-iframe-crossorigin.html",
+     {}
+    ]
+   ],
+   "longtask-timing/longtask-in-sibling-iframe.html": [
+    [
+     "/longtask-timing/longtask-in-sibling-iframe.html",
+     {}
+    ]
+   ],
    "magnetometer/idlharness.https.html": [
     [
      "/magnetometer/idlharness.https.html",
@@ -43521,6 +43940,30 @@
      {}
     ]
    ],
+   "orientation-event/devicemotionevent-init.html": [
+    [
+     "/orientation-event/devicemotionevent-init.html",
+     {}
+    ]
+   ],
+   "orientation-event/deviceorientationabsoluteevent.html": [
+    [
+     "/orientation-event/deviceorientationabsoluteevent.html",
+     {}
+    ]
+   ],
+   "orientation-event/deviceorientationevent-init.html": [
+    [
+     "/orientation-event/deviceorientationevent-init.html",
+     {}
+    ]
+   ],
+   "orientation-event/idlharness.html": [
+    [
+     "/orientation-event/idlharness.html",
+     {}
+    ]
+   ],
    "pointerevents/extension/idlharness.html": [
     [
      "/pointerevents/extension/idlharness.html",
@@ -52155,6 +52598,12 @@
      }
     ]
    ],
+   "service-workers/service-worker/ServiceWorkerGlobalScope/close.https.html": [
+    [
+     "/service-workers/service-worker/ServiceWorkerGlobalScope/close.https.html",
+     {}
+    ]
+   ],
    "service-workers/service-worker/ServiceWorkerGlobalScope/registration-attribute.https.html": [
     [
      "/service-workers/service-worker/ServiceWorkerGlobalScope/registration-attribute.https.html",
@@ -52203,6 +52652,18 @@
      {}
     ]
    ],
+   "service-workers/service-worker/claim-affect-other-registration.https.html": [
+    [
+     "/service-workers/service-worker/claim-affect-other-registration.https.html",
+     {}
+    ]
+   ],
+   "service-workers/service-worker/claim-fetch.https.html": [
+    [
+     "/service-workers/service-worker/claim-fetch.https.html",
+     {}
+    ]
+   ],
    "service-workers/service-worker/claim-not-using-registration.https.html": [
     [
      "/service-workers/service-worker/claim-not-using-registration.https.html",
@@ -52239,12 +52700,24 @@
      {}
     ]
    ],
+   "service-workers/service-worker/clients-matchall-exact-controller.https.html": [
+    [
+     "/service-workers/service-worker/clients-matchall-exact-controller.https.html",
+     {}
+    ]
+   ],
    "service-workers/service-worker/clients-matchall-include-uncontrolled.https.html": [
     [
      "/service-workers/service-worker/clients-matchall-include-uncontrolled.https.html",
      {}
     ]
    ],
+   "service-workers/service-worker/clients-matchall-order.https.html": [
+    [
+     "/service-workers/service-worker/clients-matchall-order.https.html",
+     {}
+    ]
+   ],
    "service-workers/service-worker/clients-matchall.https.html": [
     [
      "/service-workers/service-worker/clients-matchall.https.html",
@@ -54281,6 +54754,12 @@
      {}
     ]
    ],
+   "uievents/interface/click-event.htm": [
+    [
+     "/uievents/interface/click-event.htm",
+     {}
+    ]
+   ],
    "uievents/legacy-domevents-tests/approved/ProcessingInstruction.DOMCharacterDataModified.html": [
     [
      "/uievents/legacy-domevents-tests/approved/ProcessingInstruction.DOMCharacterDataModified.html",
@@ -55835,6 +56314,12 @@
      {}
     ]
    ],
+   "webvtt/api/interfaces.html": [
+    [
+     "/webvtt/api/interfaces.html",
+     {}
+    ]
+   ],
    "webvtt/interfaces.html": [
     [
      "/webvtt/interfaces.html",
@@ -57153,7 +57638,7 @@
  },
  "paths": {
   "./.gitignore": [
-   "bfa8422ef9849af857cdbddbe8044c2179953f6d",
+   "a74e35d1ce44dcca7ecb513a8cbd6194fe0f2c58",
    "support"
   ],
   "./CONTRIBUTING.md": [
@@ -57225,7 +57710,7 @@
    "testharness"
   ],
   "FileAPI/blob/Blob-constructor-expected.txt": [
-   "56291c1b3e1d7d435594e7c8daacfaf87a3b158a",
+   "458870f050a401d2be24aff18989d9ab68bb74fe",
    "support"
   ],
   "FileAPI/blob/Blob-constructor.html": [
@@ -57236,10 +57721,6 @@
    "44cf8b06af70ba951889f75c28221583be57dce0",
    "testharness"
   ],
-  "FileAPI/blob/Blob-slice-expected.txt": [
-   "88f986952e6348e4b612d0d825bc4cbc52813a53",
-   "support"
-  ],
   "FileAPI/blob/Blob-slice-overflow.html": [
    "4ad2acdfa2719862531e8219f0b6ce6a707c7a31",
    "testharness"
@@ -57249,7 +57730,7 @@
    "testharness"
   ],
   "FileAPI/file/File-constructor-expected.txt": [
-   "f3457720f65350962fd6255f22a6b9edf395af79",
+   "94fd9c8b5a0bffa2b4684d1155c2f985ecd39ae7",
    "support"
   ],
   "FileAPI/file/File-constructor.html": [
@@ -57285,7 +57766,7 @@
    "testharness"
   ],
   "FileAPI/idlharness-expected.txt": [
-   "abd8aefe1386609956bcdf08ab70700bebe8080f",
+   "3481a561989744ff3a461b1bc2f97bf22e9374f9",
    "support"
   ],
   "FileAPI/idlharness.html": [
@@ -57445,7 +57926,7 @@
    "testharness"
   ],
   "IndexedDB/idb-binary-key-roundtrip.htm": [
-   "ed1e8ae0ca73fdc6fd4d15fcd7623f8f15b7f296",
+   "587b7c783d77450a2c9c1cc09ccaf530e6e5d363",
    "testharness"
   ],
   "IndexedDB/idb_binary_key_conversion.htm": [
@@ -57497,7 +57978,7 @@
    "testharness"
   ],
   "IndexedDB/idbcursor-direction-index-keyrange.htm": [
-   "d87cc37174c74e57880f8883e75a9c033c021e74",
+   "3b7f8b093301e1eb89d4398c76bd36101490d5e6",
    "testharness"
   ],
   "IndexedDB/idbcursor-direction-index.htm": [
@@ -57505,7 +57986,7 @@
    "testharness"
   ],
   "IndexedDB/idbcursor-direction-objectstore-keyrange.htm": [
-   "58e7ff550e99abd610cd842e94ca2cfd20313766",
+   "7834cd03a20e4e52ce4b55b4966c9c73e0a00301",
    "testharness"
   ],
   "IndexedDB/idbcursor-direction-objectstore.htm": [
@@ -57888,6 +58369,10 @@
    "faebbda16f92e9d993086578e12fd5ccdb794749",
    "testharness"
   ],
+  "IndexedDB/idbfactory-open-error-properties.html": [
+   "bf539f5a577759908e5cc3ff1ab1c115dbed9df0",
+   "testharness"
+  ],
   "IndexedDB/idbfactory-open-opaque-origin.html": [
    "f29edb81b7c6cf534d48e1485f219d51c047c02e",
    "testharness"
@@ -58405,7 +58890,7 @@
    "testharness"
   ],
   "IndexedDB/idbobjectstore_getKey.html": [
-   "58272cd29a4137d30247cef03da5576bd5beddc2",
+   "76906dde291ad82b93070aef7b1fcecae80adfff",
    "testharness"
   ],
   "IndexedDB/idbobjectstore_index.htm": [
@@ -58549,7 +59034,7 @@
    "testharness"
   ],
   "IndexedDB/key-conversion-exceptions.htm": [
-   "66c9ee49f2689e8917e5206f1bd2b9759b755d53",
+   "aed58068ec48e3fd682a195bd5b0ea3f87c5a0e7",
    "testharness"
   ],
   "IndexedDB/key_invalid.htm": [
@@ -58564,6 +59049,14 @@
    "3bd30e912c27c5e93e28c6847ff726c8e6ffae90",
    "testharness"
   ],
+  "IndexedDB/keygenerator-explicit.html": [
+   "6415cf0734ab1ab94d6fac420a70f85046036bb1",
+   "testharness"
+  ],
+  "IndexedDB/keygenerator-inject.html": [
+   "1e8439807fd9be6cfdb01b3579017dd3a220478d",
+   "testharness"
+  ],
   "IndexedDB/keygenerator-overflow.htm": [
    "98147dd37c3d06db96a88f3c7c5751ac02908751",
    "testharness"
@@ -58644,6 +59137,10 @@
    "c0ee1602c5884af9fdf98d21a88721573257d0d2",
    "testharness"
   ],
+  "IndexedDB/transaction-abort-request-error.html": [
+   "7b0a8afb593f65826eab5f56d514f1739b9ef143",
+   "testharness"
+  ],
   "IndexedDB/transaction-create_in_versionchange.htm": [
    "a0237aa82de84dd351a4854a55075fbfbaba3c2e",
    "testharness"
@@ -58701,7 +59198,7 @@
    "testharness"
   ],
   "WebIDL/current-realm-expected.txt": [
-   "23353499a832baf71c265f1a991e3dae3c9932fe",
+   "fbd7d926601db88e491cb984373499945720782b",
    "support"
   ],
   "WebIDL/current-realm.html": [
@@ -58741,7 +59238,7 @@
    "support"
   ],
   "WebIDL/ecmascript-binding/es-exceptions/exceptions.html": [
-   "858edab3778d760d5ab6f942262c7cc43474c15f",
+   "15537c428eeb22a3addb13497ff02181666a1de1",
    "testharness"
   ],
   "WebIDL/ecmascript-binding/has-instance.html": [
@@ -58900,6 +59397,14 @@
    "9834273e9d9f9bf5ca645497955dc5375091938f",
    "support"
   ],
+  "content-security-policy/base-uri/base-uri_iframe_sandbox.sub.html": [
+   "0235470345c1f336bb6ace4cb747ffc1a334a5f6",
+   "testharness"
+  ],
+  "content-security-policy/base-uri/base-uri_iframe_sandbox.sub.html.headers": [
+   "ac57d9475710ee4ca0f979d3037264a405787c35",
+   "support"
+  ],
   "content-security-policy/blink-contrib-2/allowed.css": [
    "4477032f6a7347c932c71f9737f3f5e8d244c7d3",
    "support"
@@ -61512,10 +62017,6 @@
    "85dea0178b16b5c3e8ddbfa9a8b4bd8424bc0a3d",
    "testharness"
   ],
-  "dom/events/EventTarget-dispatchEvent-expected.txt": [
-   "103c88a2a76fba190a3ccefd0867698ee0af9c4a",
-   "support"
-  ],
   "dom/events/EventTarget-dispatchEvent-returnvalue.html": [
    "70fedeb118930fdc57292ce5f2bfe621f63c2563",
    "testharness"
@@ -61541,7 +62042,7 @@
    "testharness"
   ],
   "dom/interfaces-expected.txt": [
-   "96d8e6f7a745eeef3fbf7d3b5a73b1645ab6dd6a",
+   "6677b9fe8d71310625d7d0a52233d883bde3e58d",
    "support"
   ],
   "dom/interfaces.html": [
@@ -61821,13 +62322,17 @@
    "testharness"
   ],
   "dom/nodes/Document-createElement-namespace-expected.txt": [
-   "995a4c14a9eecbdff5730fac16fc8a5adb139ca0",
+   "e8445bd71bc05b8034f7fa8738e48c2419fbe93d",
    "support"
   ],
   "dom/nodes/Document-createElement-namespace-tests/bare_mathml.html": [
    "af7eaac588fa1a23884d30f93ed50c2f1779c2fa",
    "support"
   ],
+  "dom/nodes/Document-createElement-namespace-tests/bare_mathml.svg": [
+   "af7eaac588fa1a23884d30f93ed50c2f1779c2fa",
+   "support"
+  ],
   "dom/nodes/Document-createElement-namespace-tests/bare_mathml.xhtml": [
    "af7eaac588fa1a23884d30f93ed50c2f1779c2fa",
    "support"
@@ -61840,6 +62345,10 @@
    "9ed5d9c55c348ab8df6e84baeabeb87e729730ba",
    "support"
   ],
+  "dom/nodes/Document-createElement-namespace-tests/bare_svg.svg": [
+   "9ed5d9c55c348ab8df6e84baeabeb87e729730ba",
+   "support"
+  ],
   "dom/nodes/Document-createElement-namespace-tests/bare_svg.xhtml": [
    "9ed5d9c55c348ab8df6e84baeabeb87e729730ba",
    "support"
@@ -61852,6 +62361,10 @@
    "941efb7368e46b27b937d34b07fc4d41da01b002",
    "support"
   ],
+  "dom/nodes/Document-createElement-namespace-tests/bare_xhtml.svg": [
+   "941efb7368e46b27b937d34b07fc4d41da01b002",
+   "support"
+  ],
   "dom/nodes/Document-createElement-namespace-tests/bare_xhtml.xhtml": [
    "941efb7368e46b27b937d34b07fc4d41da01b002",
    "support"
@@ -61864,6 +62377,10 @@
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
+  "dom/nodes/Document-createElement-namespace-tests/empty.svg": [
+   "da39a3ee5e6b4b0d3255bfef95601890afd80709",
+   "support"
+  ],
   "dom/nodes/Document-createElement-namespace-tests/empty.xhtml": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
@@ -61880,6 +62397,10 @@
    "57ba88926297c314a5e33b511112afbe0ff00fef",
    "support"
   ],
+  "dom/nodes/Document-createElement-namespace-tests/mathml.svg": [
+   "57ba88926297c314a5e33b511112afbe0ff00fef",
+   "support"
+  ],
   "dom/nodes/Document-createElement-namespace-tests/mathml.xhtml": [
    "57ba88926297c314a5e33b511112afbe0ff00fef",
    "support"
@@ -61892,6 +62413,10 @@
    "d271a84df01afb5721f71e2295d8a8164df9038c",
    "support"
   ],
+  "dom/nodes/Document-createElement-namespace-tests/minimal_html.svg": [
+   "d271a84df01afb5721f71e2295d8a8164df9038c",
+   "support"
+  ],
   "dom/nodes/Document-createElement-namespace-tests/minimal_html.xhtml": [
    "d271a84df01afb5721f71e2295d8a8164df9038c",
    "support"
@@ -61904,6 +62429,10 @@
    "297b27cc9c3500b77e72320d73ad8252aede9bb8",
    "support"
   ],
+  "dom/nodes/Document-createElement-namespace-tests/svg.svg": [
+   "297b27cc9c3500b77e72320d73ad8252aede9bb8",
+   "support"
+  ],
   "dom/nodes/Document-createElement-namespace-tests/svg.xhtml": [
    "297b27cc9c3500b77e72320d73ad8252aede9bb8",
    "support"
@@ -61916,6 +62445,10 @@
    "94cbcdb63ad2dad3a0a4db055a04d9002cf2301d",
    "support"
   ],
+  "dom/nodes/Document-createElement-namespace-tests/xhtml.svg": [
+   "94cbcdb63ad2dad3a0a4db055a04d9002cf2301d",
+   "support"
+  ],
   "dom/nodes/Document-createElement-namespace-tests/xhtml.xhtml": [
    "94cbcdb63ad2dad3a0a4db055a04d9002cf2301d",
    "support"
@@ -61928,6 +62461,10 @@
    "a37fe2fd8537349b32dba5a246a22f9f1057f2e7",
    "support"
   ],
+  "dom/nodes/Document-createElement-namespace-tests/xhtml_ns_changed.svg": [
+   "a37fe2fd8537349b32dba5a246a22f9f1057f2e7",
+   "support"
+  ],
   "dom/nodes/Document-createElement-namespace-tests/xhtml_ns_changed.xhtml": [
    "a37fe2fd8537349b32dba5a246a22f9f1057f2e7",
    "support"
@@ -61940,6 +62477,10 @@
    "646a55ff6c8ac6787bb224bcea86da8b6c6cda67",
    "support"
   ],
+  "dom/nodes/Document-createElement-namespace-tests/xhtml_ns_removed.svg": [
+   "646a55ff6c8ac6787bb224bcea86da8b6c6cda67",
+   "support"
+  ],
   "dom/nodes/Document-createElement-namespace-tests/xhtml_ns_removed.xhtml": [
    "646a55ff6c8ac6787bb224bcea86da8b6c6cda67",
    "support"
@@ -62056,6 +62597,10 @@
    "4f739d2474f87a7b8950d6b7e19f19782b85785f",
    "testharness"
   ],
+  "dom/nodes/Element-childElement-null-svg.svg": [
+   "457b76464f33ea491da7508a1a0ffee9d2f0e4b7",
+   "testharness"
+  ],
   "dom/nodes/Element-childElement-null-xhtml.xhtml": [
    "8fcbbffbacf9e5b835847af510430afa88bfc356",
    "testharness"
@@ -62064,6 +62609,10 @@
    "652b8dd45d20e6b6689d234c8d036d7326449b1b",
    "testharness"
   ],
+  "dom/nodes/Element-childElementCount-dynamic-add-svg.svg": [
+   "efff73168dded644dafe721d6fef0b7cfa58bef8",
+   "testharness"
+  ],
   "dom/nodes/Element-childElementCount-dynamic-add-xhtml.xhtml": [
    "0ca487e653a7306236dfaa4ea33956b2855ed56a",
    "testharness"
@@ -62072,6 +62621,10 @@
    "f072539b9819d4d2bf2dba4ab1018b31dcc42843",
    "testharness"
   ],
+  "dom/nodes/Element-childElementCount-dynamic-remove-svg.svg": [
+   "82ce322279fe2b7c18a1147cb718b5eed8ac6523",
+   "testharness"
+  ],
   "dom/nodes/Element-childElementCount-dynamic-remove-xhtml.xhtml": [
    "dc65d6efb417323e73b413092bcca9ac363cf178",
    "testharness"
@@ -62080,6 +62633,10 @@
    "a5abad51fb3ba1202a0e7189b6e236df1a3b4d97",
    "testharness"
   ],
+  "dom/nodes/Element-childElementCount-nochild-svg.svg": [
+   "f790e573c17a57d19265ef28b97b8a648e927432",
+   "testharness"
+  ],
   "dom/nodes/Element-childElementCount-nochild-xhtml.xhtml": [
    "7faa83cb08282eed9af6f2a5c8ddb93dfe050646",
    "testharness"
@@ -62088,6 +62645,10 @@
    "bd6bd3eb4d99227841b5cb4927e91978ffaafb78",
    "testharness"
   ],
+  "dom/nodes/Element-childElementCount-svg.svg": [
+   "6e876f6ccc0ad2d0b57315580e7739da797fdd80",
+   "testharness"
+  ],
   "dom/nodes/Element-childElementCount-xhtml.xhtml": [
    "bdb436b37ea35ef3caf0681886e041182d0b6bd5",
    "testharness"
@@ -62124,6 +62685,14 @@
    "d8babfc580fb43cfec2a2600be979ae769087c05",
    "testharness"
   ],
+  "dom/nodes/Element-firstElementChild-entity.svg": [
+   "2e6c8ef31fb4fb37ff539285f62c18e834b97eb4",
+   "testharness"
+  ],
+  "dom/nodes/Element-firstElementChild-namespace-svg.svg": [
+   "7231112691293bb62dc9181449a00f04c1fb08c9",
+   "testharness"
+  ],
   "dom/nodes/Element-firstElementChild-namespace-xhtml.xhtml": [
    "000e02f0fced2ed583779bae8187f84c28700b85",
    "testharness"
@@ -62132,6 +62701,10 @@
    "88d1ed90e6d4bb749eb1d7397ca6f8108336a5d6",
    "testharness"
   ],
+  "dom/nodes/Element-firstElementChild-svg.svg": [
+   "d4c5df21ea3669909142992b2ba2a053dab45a96",
+   "testharness"
+  ],
   "dom/nodes/Element-firstElementChild-xhtml.xhtml": [
    "680e43edc4a8b5e598a21957d9b5d6da4b4b87ae",
    "testharness"
@@ -62184,6 +62757,10 @@
    "5d0017c68ce6a8c7f24cef6ed9fb574949dee820",
    "testharness"
   ],
+  "dom/nodes/Element-lastElementChild-svg.svg": [
+   "e5edc46fc586925693f8db822af5e80841597e5d",
+   "testharness"
+  ],
   "dom/nodes/Element-lastElementChild-xhtml.xhtml": [
    "84a00d0b0ed8eb8595093cdcf85ba2d2adb99373",
    "testharness"
@@ -62204,6 +62781,10 @@
    "9ce802ae7a010a1a8458f49f1fdc1db81dafb8c7",
    "support"
   ],
+  "dom/nodes/Element-nextElementSibling-svg.svg": [
+   "e66acecc9c4667b027c5e4c4eac60545cf90101e",
+   "testharness"
+  ],
   "dom/nodes/Element-nextElementSibling-xhtml.xhtml": [
    "74628551e42e6ba2208055aba40d339ed1b38518",
    "testharness"
@@ -62212,6 +62793,10 @@
    "520a06c0df8c268d35f9ebe068e19ff384106205",
    "testharness"
   ],
+  "dom/nodes/Element-previousElementSibling-svg.svg": [
+   "75a04a4f24311f09e8c13ccdbfa02335026c169e",
+   "testharness"
+  ],
   "dom/nodes/Element-previousElementSibling-xhtml.xhtml": [
    "9796b1391586de34313f76a86c1c9808c1081b80",
    "testharness"
@@ -62228,6 +62813,10 @@
    "ae9e9c7e0910a00f859c0d1ed6d5cbca2b372b69",
    "testharness"
   ],
+  "dom/nodes/Element-siblingElement-null-svg.svg": [
+   "0644ced1077aea85dcbb1d95e4dde84cdcbfb9eb",
+   "testharness"
+  ],
   "dom/nodes/Element-siblingElement-null-xhtml.xhtml": [
    "fc77f8e604bc5a74ebbb340a2e82e207751a30ba",
    "testharness"
@@ -62356,12 +62945,8 @@
    "4d2530ef5f322041d04b8d6ca91d873d24b768ef",
    "testharness"
   ],
-  "dom/nodes/Node-lookupNamespaceURI-expected.txt": [
-   "bb4bc0db4bd4a3ba44ff14fcd0a684f51bbbade6",
-   "support"
-  ],
   "dom/nodes/Node-lookupNamespaceURI.html": [
-   "a1ca60e17a13b72b9546e82ed9eb4ceb24060dff",
+   "fb00bd55b27f2993d1c1285f51916e00f2c0cf26",
    "testharness"
   ],
   "dom/nodes/Node-lookupPrefix.xhtml": [
@@ -62752,10 +63337,6 @@
    "1705d7c4257cfc73afaf8c0e7b1d8dd272a63ac5",
    "testharness"
   ],
-  "dom/ranges/Range-mutations-dataChange-expected.txt": [
-   "372d3f8bcd17916497417dcf9d1aa0ae5156cba7",
-   "support"
-  ],
   "dom/ranges/Range-mutations-dataChange.html": [
    "f69fc889a375d01a7ea4d0b56c9e27f440079219",
    "testharness"
@@ -62785,7 +63366,7 @@
    "testharness"
   ],
   "dom/ranges/Range-mutations-splitText-expected.txt": [
-   "9682f315a73c54f2239fd8e2d3d51ddd7d72a35b",
+   "6051705c2fe0845ba1bb93d348a20fcfa2d59fde",
    "support"
   ],
   "dom/ranges/Range-mutations-splitText.html": [
@@ -62808,10 +63389,6 @@
    "e899f6f79cf57b491260a967ad93ce0b9b32c6fa",
    "testharness"
   ],
-  "dom/ranges/Range-surroundContents-expected.txt": [
-   "fb60bcb3cf4831a114ec414832df915d387c61c1",
-   "support"
-  ],
   "dom/ranges/Range-surroundContents.html": [
    "fd7d4b14d495703004363b4309135fde94e82311",
    "testharness"
@@ -62928,10 +63505,6 @@
    "29f250eddff5e2145da8348ea586d4d35d910093",
    "support"
   ],
-  "domparsing/DOMParser-parseFromString-html-expected.txt": [
-   "32df6d5dfe5b64ecac68d64fbad2375ac3c3d2b6",
-   "support"
-  ],
   "domparsing/DOMParser-parseFromString-html.html": [
    "000f4669cf7f452fc2bf3f5c2b2eb279253d1f55",
    "testharness"
@@ -62941,7 +63514,7 @@
    "testharness"
   ],
   "domparsing/DOMParser-parseFromString-xml-expected.txt": [
-   "5626449d28d99d2b8e9e356ae237bedd3fa74144",
+   "23bba3f0f3342feefe7fd3447b55ca7150f50aef",
    "support"
   ],
   "domparsing/DOMParser-parseFromString-xml.html": [
@@ -62957,7 +63530,7 @@
    "testharness"
   ],
   "domparsing/innerhtml-01-expected.txt": [
-   "0dfdedb14f48470d547319a79633e40094e1a36f",
+   "3932429de1f3718737d3be52085a51050ef1584a",
    "support"
   ],
   "domparsing/innerhtml-01.xhtml": [
@@ -63024,6 +63597,18 @@
    "71944bd6e03639c4736db03b651e265d103cf5cf",
    "testharness"
   ],
+  "domxpath/001.html": [
+   "f7161655a8955dd5a028b2e7dd5ada945176a930",
+   "testharness"
+  ],
+  "domxpath/002-expected.txt": [
+   "aba3c2786237660cce6081d4b47efe007a670ea4",
+   "support"
+  ],
+  "domxpath/002.html": [
+   "44e057c92dd61fbc6ea081c5f328596736371e85",
+   "testharness"
+  ],
   "domxpath/evaluator-constructor.html": [
    "4842d40e22e25ee72536946d785a3cd03bc6a11d",
    "testharness"
@@ -63385,7 +63970,7 @@
    "testharness"
   ],
   "editing/run/inserttext-expected.txt": [
-   "a8daa42d55dde6130d824c336cdfdeca6cbdda28",
+   "5f197813f424bc1abb308ce6e8e2459de0f9d3df",
    "support"
   ],
   "editing/run/inserttext.html": [
@@ -64660,12 +65245,16 @@
    "87d7d141b05200ad3db0660d9d8d8bdf7876ee4b",
    "testharness"
   ],
+  "html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin-0.html": [
+   "a0512a75c277b22bbbcd37692580c779334ab74b",
+   "support"
+  ],
   "html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin-expected.txt": [
    "9762c240f4c9c44cdb9d71d2d9d07c9866b61af4",
    "support"
   ],
   "html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin.html": [
-   "7455a083f29518418a3508b8fd3ade74cb747666",
+   "80ddf5ab19d6698340820c2fa4145d4aa6960459",
    "testharness"
   ],
   "html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin_2-expected.txt": [
@@ -64841,7 +65430,7 @@
    "testharness"
   ],
   "html/browsers/browsing-the-web/navigating-across-documents/012-expected.txt": [
-   "0e2290652e397799ba09d893d7bfd301ba2a1db2",
+   "0f8a56e660ec489ff575347d46f44f3fbdb641d2",
    "support"
   ],
   "html/browsers/browsing-the-web/navigating-across-documents/012.html": [
@@ -65069,7 +65658,7 @@
    "testharness"
   ],
   "html/browsers/browsing-the-web/unloading-documents/001-expected.txt": [
-   "a4b27b97cddda7cef0ab6acdf8028f53f1820c0b",
+   "db9cd4d0327b6f6d7dac8d6e4312afb6b98c62a0",
    "support"
   ],
   "html/browsers/browsing-the-web/unloading-documents/001.html": [
@@ -66017,7 +66606,7 @@
    "testharness"
   ],
   "html/browsers/offline/application-cache-api/api_update-expected.txt": [
-   "e339d1b9d6ec3b58d4755403559229319aa7c490",
+   "d3ef10552fd83d25fb151b71fe6a2ca9c817f133",
    "support"
   ],
   "html/browsers/offline/application-cache-api/api_update.html": [
@@ -66448,14 +67037,6 @@
    "aecd2f28b5bd6301c51d535a4b1068a10b497899",
    "support"
   ],
-  "html/browsers/windows/browsing-context-first-created-expected.txt": [
-   "604d794fbda3f96189c7c35e30cb3f6bab7ab096",
-   "support"
-  ],
-  "html/browsers/windows/browsing-context-first-created.xhtml": [
-   "1393800854d0b2daa509eeec75e43fadc2be3a5c",
-   "testharness"
-  ],
   "html/browsers/windows/browsing-context-names/001-1.html": [
    "7f9396d2baeeafd98832c7fe5a0a1474fc358e98",
    "support"
@@ -66512,68 +67093,92 @@
    "174e949fcfb26b9c93463a4eeecb338115ed56b2",
    "support"
   ],
+  "html/browsers/windows/browsing-context-window.html": [
+   "8400240acf63f30ec67ecd003030e81201783d2b",
+   "testharness"
+  ],
+  "html/browsers/windows/browsing-context.html": [
+   "ad718fb943e000ad5d2f376ea5ac8a011661ab37",
+   "testharness"
+  ],
   "html/browsers/windows/nested-browsing-contexts/contains.json": [
    "0f2e164f656015ba43e2b3471af67a5d16fb97ea",
    "support"
   ],
   "html/browsers/windows/nested-browsing-contexts/frameElement.html": [
-   "bf11bfc2c614a24f099a002e04f528c8cd88bf65",
+   "9272ddfc9d2d7301e7adadc5ca06f03d9a224b1f",
    "testharness"
   ],
-  "html/browsers/windows/nested-browsing-contexts/test.html": [
+  "html/browsers/windows/nested-browsing-contexts/resources/frameElement-nested-frame.html": [
    "f9b0142274439bb5e64cd35758c2573b7ff4dfd8",
    "support"
   ],
-  "html/browsers/windows/nested-browsing-contexts/testcase3.html": [
+  "html/browsers/windows/nested-browsing-contexts/resources/frameElement-window-post.html": [
    "e18bdb8a34bcf88b92e9b73ce75ed3a412889b09",
    "support"
   ],
-  "html/browsers/windows/nested-browsing-contexts/window-top-001.html": [
-   "24855b6261867799f59c5aaedd014bb78c877233",
+  "html/browsers/windows/nested-browsing-contexts/resources/post-to-opener.html": [
+   "0b2be6b8955f7d8a5920d34965e2a3a47ee64daf",
+   "support"
+  ],
+  "html/browsers/windows/nested-browsing-contexts/window-parent-null.html": [
+   "cbf895a397edb704ffbca57f93f57e1bc6f82fd9",
    "testharness"
   ],
-  "html/browsers/windows/noreferrer-cross-origin-window-name.sub.html": [
-   "e7f97f2c9c76773719a53e0a16cad28942583efa",
-   "support"
+  "html/browsers/windows/nested-browsing-contexts/window-parent.html": [
+   "a59d0371de7859a84381b7fce04c0ebeeddb89b4",
+   "testharness"
+  ],
+  "html/browsers/windows/nested-browsing-contexts/window-top-null.html": [
+   "d13c025b053bad61013872bda2ce769d51daadaf",
+   "testharness"
+  ],
+  "html/browsers/windows/nested-browsing-contexts/window-top.html": [
+   "3fbe2a993024f1b148bae96f942aa287836e0710",
+   "testharness"
+  ],
+  "html/browsers/windows/noreferrer-null-opener.html": [
+   "cfced8fc2302ae4111c9c44976f36fe211ae379c",
+   "testharness"
   ],
   "html/browsers/windows/noreferrer-window-name.html": [
-   "50afeed23c4279ed044802c6b33c5b5ac9ad4d7a",
+   "163e478a1fb6bb341d10f2ac94f868207b71bbf1",
    "testharness"
   ],
-  "html/browsers/windows/noreferrer.html": [
-   "c59de38af4cf52877cf722bda7997b0dae8026d8",
-   "testharness"
-  ],
-  "html/browsers/windows/support-close.html": [
-   "83bc4461894fdfc0b708c5740a8f5361178cf870",
+  "html/browsers/windows/resources/browsing-context-window.html": [
+   "391d8d5a5d0d8d8cfb98e4938a5bc4a5946eb13e",
    "support"
   ],
-  "html/browsers/windows/support-named-null-opener.html": [
-   "0713aa5c65f801ba146994d504cb1ee4b3bb2599",
-   "support"
-  ],
-  "html/browsers/windows/support-nested-browsing-contexts.html": [
-   "605d0c4f4e80cccd58226d7ecf3bdab8788aa4c8",
-   "support"
-  ],
-  "html/browsers/windows/support-open-cross-origin.sub.html": [
-   "9c78af14dcc8056383dd428c45439a514fe2580c",
-   "support"
-  ],
-  "html/browsers/windows/support-opener-null.html": [
-   "3b7934e44c2b2cfbcc68a6f965a824ebef132baf",
-   "support"
-  ],
-  "html/browsers/windows/support-post-to-opener.html": [
-   "fb65db2b3dd74a04f29bdbd938d5a3b0fe189abb",
-   "support"
-  ],
-  "html/browsers/windows/support-window-name-echo.html": [
+  "html/browsers/windows/resources/echo-window-name.html": [
    "8921da98fd0c74e8fa3a500310d434419119714c",
    "support"
   ],
+  "html/browsers/windows/resources/nested-post-to-opener.html": [
+   "605d0c4f4e80cccd58226d7ecf3bdab8788aa4c8",
+   "support"
+  ],
+  "html/browsers/windows/resources/noreferrer-window-name.html": [
+   "0713aa5c65f801ba146994d504cb1ee4b3bb2599",
+   "support"
+  ],
+  "html/browsers/windows/resources/post-to-opener.html": [
+   "fb65db2b3dd74a04f29bdbd938d5a3b0fe189abb",
+   "support"
+  ],
+  "html/browsers/windows/resources/target-cross-origin.sub.html": [
+   "a2d5c6b8771f5394dd1c5aee41a0b0f63276bfaa",
+   "support"
+  ],
+  "html/browsers/windows/resources/window-close-button.html": [
+   "83bc4461894fdfc0b708c5740a8f5361178cf870",
+   "support"
+  ],
+  "html/browsers/windows/resources/window-opener.html": [
+   "3b7934e44c2b2cfbcc68a6f965a824ebef132baf",
+   "support"
+  ],
   "html/browsers/windows/targeting-cross-origin-nested-browsing-contexts.html": [
-   "f7873dc96cadadccf6097d387c94f8db60a54e69",
+   "81b59630c8973be637f2ef2f379e126ea6dca69d",
    "testharness"
   ],
   "html/dom/documents/dom-tree-accessors/Document.body.html": [
@@ -68157,7 +68762,7 @@
    "support"
   ],
   "html/dom/reflection-embedded-expected.txt": [
-   "b9c46fed5ba5e31ef958673fea6059153ab74969",
+   "41509378a039a34d065c48dd2cb6f57bfe6f43c6",
    "support"
   ],
   "html/dom/reflection-embedded.html": [
@@ -71952,6 +72557,18 @@
    "eafbd5d4f39a28fb5c2c4f3af8d176ea247e0efa",
    "reftest"
   ],
+  "html/rendering/non-replaced-elements/margin-collapsing-quirks/compare-computed-style.js": [
+   "8502d7384d4139d4911ac66cbe053cabc2b37a8b",
+   "support"
+  ],
+  "html/rendering/non-replaced-elements/margin-collapsing-quirks/multicol-quirks-mode.html": [
+   "c608d0b37218e0c39816926ed829396faccbe3cc",
+   "testharness"
+  ],
+  "html/rendering/non-replaced-elements/margin-collapsing-quirks/multicol-standards-mode.html": [
+   "ffc5c58fa1fa37be7e433285de870acac12b41a5",
+   "testharness"
+  ],
   "html/rendering/non-replaced-elements/phrasing-content-0/font-element-text-decoration-color/001-a.html": [
    "da59b8c71eb6abbcc4423b424f19c47d7fbd10b5",
    "reftest"
@@ -72333,7 +72950,7 @@
    "support"
   ],
   "html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-1-expected.txt": [
-   "67fd398f1d30d45b654691f3e23dad8f5accc101",
+   "38aeb360969e4a6b15145ef80c61734897f8d892",
    "support"
   ],
   "html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-1.html": [
@@ -72341,7 +72958,7 @@
    "testharness"
   ],
   "html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-2-expected.txt": [
-   "5b70855d27e3ab2b16b359e13bf3082e85c4a838",
+   "b93f0804cdd12762bb425e6f2f0cb97ac3cdcf1b",
    "support"
   ],
   "html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-2.html": [
@@ -72349,7 +72966,7 @@
    "testharness"
   ],
   "html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/dynamic-append-expected.txt": [
-   "3019cb4298d56821c32afc59e26d14db0a664004",
+   "d003e5c1a75169716e22dc82a2d8836d9ac27102",
    "support"
   ],
   "html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/dynamic-append.html": [
@@ -72357,7 +72974,7 @@
    "testharness"
   ],
   "html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/moving-documents-expected.txt": [
-   "1968dbb36dd2c0e74eeb3d1942eeebb3d22018c8",
+   "7b8abf8e25718bde349b3a5392a409e4b25f1533",
    "support"
   ],
   "html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/moving-documents.html": [
@@ -72516,10 +73133,6 @@
    "09b93e6a9bf7b27450635bc74bf436c312e01492",
    "testharness"
   ],
-  "html/semantics/embedded-content/media-elements/interfaces/TextTrack/mode-expected.txt": [
-   "18dff0e78d41b3d2bdb8b3bc8279f9796da8b488",
-   "support"
-  ],
   "html/semantics/embedded-content/media-elements/interfaces/TextTrack/mode.html": [
    "a60051c3d25a921841d79541f8ece401c3ceb665",
    "testharness"
@@ -72744,10 +73357,6 @@
    "db82f82f73fe633307e94df5582ef83448698c83",
    "testharness"
   ],
-  "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-networkState-expected.txt": [
-   "989cb63b58d092d0d1ce1bd25073dec3ef153abc",
-   "support"
-  ],
   "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-networkState.html": [
    "f45e4ebd634489d9187259ae64bad04d33d5e6a2",
    "testharness"
@@ -73164,12 +73773,8 @@
    "842453aa8de65e562f5925c3fac90431c186a7fa",
    "support"
   ],
-  "html/semantics/embedded-content/the-img-element/Image-constructor-expected.txt": [
-   "fa086718ad7d97a3f0002c668bcd46f472337ccb",
-   "support"
-  ],
   "html/semantics/embedded-content/the-img-element/Image-constructor.html": [
-   "8070de7ff74b04e6ac35cd514f9db75f5def1b4c",
+   "2047645c2bdecc90189878cc68e861087d7bd84b",
    "testharness"
   ],
   "html/semantics/embedded-content/the-img-element/brokenimg.jpg": [
@@ -73268,10 +73873,6 @@
    "a7d2a9af9048bb1e8c61b1a4669bb755201cc55e",
    "testharness"
   ],
-  "html/semantics/embedded-content/the-img-element/update-the-source-set-expected.txt": [
-   "08bef7197bea69a44aeb2273b1edd3820de3f3ec",
-   "support"
-  ],
   "html/semantics/embedded-content/the-img-element/update-the-source-set.html": [
    "8de24b6c632f61fac416ac5945eb67999ddf8ab3",
    "testharness"
@@ -73552,12 +74153,8 @@
    "14a6f0077d512837c24931a2a9723e11d1d7a1c7",
    "support"
   ],
-  "html/semantics/forms/textfieldselection/select-event-expected.txt": [
-   "2cdb4a00c85c2f68497c065ca53e40c1e573dd51",
-   "support"
-  ],
   "html/semantics/forms/textfieldselection/select-event.html": [
-   "90528b5c92d94342b3fe2ef248d90d6a4d397377",
+   "e4835db1c781cad4b259b782a57b452022a50d79",
    "testharness"
   ],
   "html/semantics/forms/textfieldselection/selection-after-content-change.html": [
@@ -73612,10 +74209,6 @@
    "a4bb6a1e45b5b92e170e87d153a44f2027ff3717",
    "testharness"
   ],
-  "html/semantics/forms/the-datalist-element/datalistoptions-expected.txt": [
-   "a69e71b9c30591a8de63c4160a496d0d2fef5c84",
-   "support"
-  ],
   "html/semantics/forms/the-datalist-element/datalistoptions.html": [
    "3a1cc7747218cffa1e7bd86a9c762339f9788ca9",
    "testharness"
@@ -73720,10 +74313,6 @@
    "799e0488b67e1d91e33cc2a9a834833b4c034838",
    "support"
   ],
-  "html/semantics/forms/the-input-element/date-expected.txt": [
-   "d867bda4f83fe88ccc672ebb053bf8b7a96bad28",
-   "support"
-  ],
   "html/semantics/forms/the-input-element/date.html": [
    "6f60577eb930ff28d0da0874bfc97bc0f40cf2e7",
    "testharness"
@@ -73809,7 +74398,7 @@
    "testharness"
   ],
   "html/semantics/forms/the-input-element/range-expected.txt": [
-   "41087e2783650709041989a1c283bf4a17591bbd",
+   "f61ea2bf823f760ea776be16347ae03cc0cd34df",
    "support"
   ],
   "html/semantics/forms/the-input-element/range.html": [
@@ -73853,7 +74442,7 @@
    "testharness"
   ],
   "html/semantics/forms/the-input-element/type-change-state-expected.txt": [
-   "6a55dbf28a8413c13490a29b0e96364d1919172f",
+   "993798cca042a75407b4e0ad6a8b4e80de018674",
    "support"
   ],
   "html/semantics/forms/the-input-element/type-change-state.html": [
@@ -73949,7 +74538,7 @@
    "testharness"
   ],
   "html/semantics/forms/the-select-element/common-HTMLOptionsCollection.html": [
-   "de186d5f39bf85cc073ad6262fa933f89a4500d5",
+   "b5a01e973e4d4c97c6fa06bd9fd1e535e8c622e8",
    "testharness"
   ],
   "html/semantics/forms/the-select-element/select-ask-for-reset.html": [
@@ -74256,6 +74845,10 @@
    "6737e2d1d4510e1d0fd105c5a45f0d67e1a7ea0a",
    "support"
   ],
+  "html/semantics/interactive-elements/context-menus/contextmenu-event-manual.htm": [
+   "da34a14c36842d855a3d73a171e3e5a03282360f",
+   "manual"
+  ],
   "html/semantics/interactive-elements/the-details-element/details.html": [
    "2095117d3b5d2a58dbfea27b5aec561a371efd83",
    "testharness"
@@ -74629,7 +75222,7 @@
    "support"
   ],
   "html/semantics/scripting-1/the-script-element/module/imports-expected.txt": [
-   "6e1f3f4de6fcaa07c06137a315bdaabc3e294afb",
+   "94b787a3a163472254223d43b00767d7d66a820c",
    "support"
   ],
   "html/semantics/scripting-1/the-script-element/module/imports-inc-a.js": [
@@ -74673,7 +75266,7 @@
    "testharness"
   ],
   "html/semantics/scripting-1/the-script-element/nomodule-set-on-external-module-script-expected.txt": [
-   "1951d35abe826966f14d5ac8306da6c04d9909e0",
+   "5ea8baf592face04b63a27fc4e84085677ba2080",
    "support"
   ],
   "html/semantics/scripting-1/the-script-element/nomodule-set-on-external-module-script.html": [
@@ -74689,7 +75282,7 @@
    "testharness"
   ],
   "html/semantics/scripting-1/the-script-element/nomodule-set-on-inline-module-script-expected.txt": [
-   "2fb7ccec5ac443854e7d0843b1b691811913eed2",
+   "3aba60ab688ea5589f542ffee28f7f6c766827fd",
    "support"
   ],
   "html/semantics/scripting-1/the-script-element/nomodule-set-on-inline-module-script.html": [
@@ -75209,7 +75802,7 @@
    "testharness"
   ],
   "html/semantics/tabular-data/the-table-element/tFoot.html": [
-   "8017cabc08b5c10566ce97dee0cecd73d7ee3bce",
+   "ec9513f8c78bed931ac9ea51910d314b46639317",
    "testharness"
   ],
   "html/semantics/tabular-data/the-table-element/tHead-expected.txt": [
@@ -75217,7 +75810,7 @@
    "support"
   ],
   "html/semantics/tabular-data/the-table-element/tHead.html": [
-   "45cd1c63c80dce76c5a51644fa17f8535846cb54",
+   "96c3470e247189297a84310173392007bad4977d",
    "testharness"
   ],
   "html/semantics/tabular-data/the-table-element/table-insertRow.html": [
@@ -75257,7 +75850,7 @@
    "testharness"
   ],
   "html/semantics/tabular-data/the-tr-element/insertCell.html": [
-   "d3e48e89cfc8a9f3478af5c922fea6a59e88135e",
+   "8161e1f20e42a9fe5270cc779dca71ada097cd75",
    "testharness"
   ],
   "html/semantics/tabular-data/the-tr-element/rowIndex.html": [
@@ -75689,7 +76282,7 @@
    "testharness"
   ],
   "html/syntax/parsing/html5lib_innerHTML_adoption01-expected.txt": [
-   "e20b5700663042e08dda128f81b1153af0313219",
+   "2c9fd3e91fb7fb396958e46b41e9da60ce17b686",
    "support"
   ],
   "html/syntax/parsing/html5lib_innerHTML_adoption01.html": [
@@ -75805,7 +76398,7 @@
    "testharness"
   ],
   "html/syntax/parsing/html5lib_tests11-expected.txt": [
-   "8c718f1cebf05be89d5f175a081df8463d92c9e5",
+   "c6d36593f970af1ce5f71bbee631f288ceda8c20",
    "support"
   ],
   "html/syntax/parsing/html5lib_tests11.html": [
@@ -76125,7 +76718,7 @@
    "testharness"
   ],
   "html/webappapis/idle-callbacks/callback-suspended-expected.txt": [
-   "d370f6b87d60ab1b859ec7fe84bba7449ed4a8e0",
+   "cc31200fbead20c404cf4a4eee28488be9c76e44",
    "support"
   ],
   "html/webappapis/idle-callbacks/callback-suspended.html": [
@@ -76216,12 +76809,64 @@
    "917a10cd8a60b916eb4e2ad7bb7cb1ae657335a8",
    "testharness"
   ],
+  "html/webappapis/scripting/events/event-handler-processing-algorithm-error/document-synthetic-errorevent.html": [
+   "7856a87c6f1735d10b1da16b763f6443d8864811",
+   "testharness"
+  ],
+  "html/webappapis/scripting/events/event-handler-processing-algorithm-error/document-synthetic-event.html": [
+   "2aa064b10fb2ad38cff90fb092d8445a8d1ef102",
+   "testharness"
+  ],
+  "html/webappapis/scripting/events/event-handler-processing-algorithm-error/resources/no-op-worker.js": [
+   "ab0b2e3846514bc4649834eb4252cd39e831572a",
+   "support"
+  ],
+  "html/webappapis/scripting/events/event-handler-processing-algorithm-error/resources/worker-with-syntax-error.js": [
+   "8225f1086abf81073b9fdce82540d8021b73bad7",
+   "support"
+  ],
+  "html/webappapis/scripting/events/event-handler-processing-algorithm-error/script-element.html": [
+   "ef22b322a16f835c562a0aa4575361f0fb53754a",
+   "testharness"
+  ],
+  "html/webappapis/scripting/events/event-handler-processing-algorithm-error/window-runtime-error.html": [
+   "e69a2ad6b52db467bab6baee7485809fec35893c",
+   "testharness"
+  ],
+  "html/webappapis/scripting/events/event-handler-processing-algorithm-error/window-synthetic-errorevent.html": [
+   "23db12066d01404453425499bbc1c85e293375cc",
+   "testharness"
+  ],
+  "html/webappapis/scripting/events/event-handler-processing-algorithm-error/window-synthetic-event.html": [
+   "a779db7beb4c5f52bde9131b7648b6efab2f8000",
+   "testharness"
+  ],
+  "html/webappapis/scripting/events/event-handler-processing-algorithm-error/worker.html": [
+   "659a209fce79b593fd665ea366a959d8095ab7a7",
+   "testharness"
+  ],
+  "html/webappapis/scripting/events/event-handler-processing-algorithm-error/workerglobalscope-runtime-error.worker.js": [
+   "7c0277fc2e4cbff0f4253f2dc65306892255303a",
+   "testharness"
+  ],
+  "html/webappapis/scripting/events/event-handler-processing-algorithm-error/workerglobalscope-synthetic-errorevent.worker.js": [
+   "ea70eb5fc402c513a3f8d81c637698ae62133a7a",
+   "testharness"
+  ],
+  "html/webappapis/scripting/events/event-handler-processing-algorithm-error/workerglobalscope-synthetic-event.worker.js": [
+   "cdc54d4667e9f7d0774fdf64050d561affb14480",
+   "testharness"
+  ],
   "html/webappapis/scripting/events/event-handler-processing-algorithm-expected.txt": [
    "10cb96228545b28542eb4cac2f7075feed63dfa5",
    "support"
   ],
+  "html/webappapis/scripting/events/event-handler-processing-algorithm-manual.html": [
+   "3ae38e063225a1e5c39c620f5499fb39843e0550",
+   "manual"
+  ],
   "html/webappapis/scripting/events/event-handler-processing-algorithm.html": [
-   "a7c163d53eb559ea710527cace404ed88e9c4d0a",
+   "9a1fa2065ba742d6ab945065d65bdc0f60783d94",
    "testharness"
   ],
   "html/webappapis/scripting/events/event-handler-spec-example-expected.txt": [
@@ -76237,7 +76882,7 @@
    "testharness"
   ],
   "html/webappapis/scripting/events/inline-event-handler-ordering-expected.txt": [
-   "cd0912b31fd49dd7dfc4fdab6b4da07b3b845c78",
+   "a6e8e25d5f456d8a5454a10d59b0ad10b4ff25a6",
    "support"
   ],
   "html/webappapis/scripting/events/inline-event-handler-ordering.html": [
@@ -76245,17 +76890,13 @@
    "testharness"
   ],
   "html/webappapis/scripting/events/invalid-uncompiled-raw-handler-compiled-late-expected.txt": [
-   "539ab18d050b7d4a9e9c8702a5381f505808be94",
+   "933ca052487bcc69c3efcb8783ae6fc6bc4671ea",
    "support"
   ],
   "html/webappapis/scripting/events/invalid-uncompiled-raw-handler-compiled-late.html": [
    "3a16be9d55c95a04eb426676ff89802974e88b95",
    "testharness"
   ],
-  "html/webappapis/scripting/events/invalid-uncompiled-raw-handler-compiled-once-expected.txt": [
-   "3d1fe1d4a525314f3140f8d6a7ad9a0e42b9ae73",
-   "support"
-  ],
   "html/webappapis/scripting/events/invalid-uncompiled-raw-handler-compiled-once.html": [
    "6f2c0cc97bdd385322e0a422e7ea5aa77c280536",
    "testharness"
@@ -76292,16 +76933,12 @@
    "875ab8aa7b99cec015d82bcfe9ef4133b7adf97f",
    "testharness"
   ],
-  "html/webappapis/scripting/processing-model-2/addEventListener-expected.txt": [
-   "f1d0360cc36096e12545b26cc2653de7bc4b5890",
-   "support"
-  ],
   "html/webappapis/scripting/processing-model-2/addEventListener.html": [
    "a2e5be7d9a2a50da12bd8145c34bf81e7116dbac",
    "testharness"
   ],
   "html/webappapis/scripting/processing-model-2/body-onerror-compile-error-data-url-expected.txt": [
-   "43c6b76df5e7339fb8fbc755b21c53021efcaa7e",
+   "450e671b42c0c0f7a58e8441a0bc54341f23a23f",
    "support"
   ],
   "html/webappapis/scripting/processing-model-2/body-onerror-compile-error-data-url.html": [
@@ -76309,7 +76946,7 @@
    "testharness"
   ],
   "html/webappapis/scripting/processing-model-2/body-onerror-compile-error-expected.txt": [
-   "bdf1635da62c3f23a5a75577ee7b96a6633ad193",
+   "76cb354f35ccc669c2bb0b84a6f54b51c26f0acf",
    "support"
   ],
   "html/webappapis/scripting/processing-model-2/body-onerror-compile-error.html": [
@@ -76317,7 +76954,7 @@
    "testharness"
   ],
   "html/webappapis/scripting/processing-model-2/body-onerror-runtime-error-expected.txt": [
-   "8f0c73b38b364209eb7853c0b72e938ca0d97107",
+   "9a2a7379bc6be1e5df2610b747975e2283ac2bb8",
    "support"
   ],
   "html/webappapis/scripting/processing-model-2/body-onerror-runtime-error.html": [
@@ -76325,7 +76962,7 @@
    "testharness"
   ],
   "html/webappapis/scripting/processing-model-2/compile-error-cross-origin-setInterval-expected.txt": [
-   "e4c799304ee036ec98f3da75e84100a4fa5f793b",
+   "5d14878304d2d9bb3fec867385762b123d58310e",
    "support"
   ],
   "html/webappapis/scripting/processing-model-2/compile-error-cross-origin-setInterval.html": [
@@ -76333,7 +76970,7 @@
    "testharness"
   ],
   "html/webappapis/scripting/processing-model-2/compile-error-cross-origin-setTimeout-expected.txt": [
-   "fe710cf81d022c93e0d64777238deb041be3afb1",
+   "e0d7524e8d27f6619398b7eda27811d52de0e94f",
    "support"
   ],
   "html/webappapis/scripting/processing-model-2/compile-error-cross-origin-setTimeout.html": [
@@ -76352,16 +76989,12 @@
    "60498eb91902b5f0afd53268433ecba2c256108a",
    "testharness"
   ],
-  "html/webappapis/scripting/processing-model-2/compile-error-in-body-onerror-expected.txt": [
-   "cc00714430e2d7f4a3035ac57e74b6521651ef0f",
-   "support"
-  ],
   "html/webappapis/scripting/processing-model-2/compile-error-in-body-onerror.html": [
    "7781dc14881c5377c0df772ab1271fe552493811",
    "testharness"
   ],
   "html/webappapis/scripting/processing-model-2/compile-error-in-setInterval-expected.txt": [
-   "fcdb55c9fd2f1240647c5f966f99956da32a52e4",
+   "0bd793a66719c6c3c288439a404b7580e192d32b",
    "support"
   ],
   "html/webappapis/scripting/processing-model-2/compile-error-in-setInterval.html": [
@@ -76369,7 +77002,7 @@
    "testharness"
   ],
   "html/webappapis/scripting/processing-model-2/compile-error-in-setTimeout-expected.txt": [
-   "9889b4d17074090be1be2ec9454a7c055865435b",
+   "2b0b12fd8674fde2a0f8f6bf6371cc19b670663b",
    "support"
   ],
   "html/webappapis/scripting/processing-model-2/compile-error-in-setTimeout.html": [
@@ -76377,7 +77010,7 @@
    "testharness"
   ],
   "html/webappapis/scripting/processing-model-2/compile-error-same-origin-with-hash-expected.txt": [
-   "9c038fa35d63491bd5bd2a15c7e1a82912f5de29",
+   "ec0b36e05bc82195598edfb479eb9bdb2468f0db",
    "support"
   ],
   "html/webappapis/scripting/processing-model-2/compile-error-same-origin-with-hash.html": [
@@ -76397,7 +77030,7 @@
    "support"
   ],
   "html/webappapis/scripting/processing-model-2/runtime-error-cross-origin-setInterval-expected.txt": [
-   "79b219522b502f1430c7b52a78c83572f7aebdf0",
+   "88ea880dc12cf373e596195ba2ec7f43f39965c1",
    "support"
   ],
   "html/webappapis/scripting/processing-model-2/runtime-error-cross-origin-setInterval.html": [
@@ -76405,7 +77038,7 @@
    "testharness"
   ],
   "html/webappapis/scripting/processing-model-2/runtime-error-cross-origin-setTimeout-expected.txt": [
-   "321a01a1e8c44cd29f59fc400174ba05e20344d2",
+   "6fafca5acb7fa2987e9056ed79e4be2103315f94",
    "support"
   ],
   "html/webappapis/scripting/processing-model-2/runtime-error-cross-origin-setTimeout.html": [
@@ -76429,7 +77062,7 @@
    "testharness"
   ],
   "html/webappapis/scripting/processing-model-2/runtime-error-in-setInterval-expected.txt": [
-   "9dacbf8a4cadf6ab31610fb9fd55cdc48335f501",
+   "1299074e49a8643dfcdf3c2e8b54c00045ae0a88",
    "support"
   ],
   "html/webappapis/scripting/processing-model-2/runtime-error-in-setInterval.html": [
@@ -76437,7 +77070,7 @@
    "testharness"
   ],
   "html/webappapis/scripting/processing-model-2/runtime-error-in-setTimeout-expected.txt": [
-   "cf7a510602a1f525b5125edb5be3268d8051f357",
+   "be303818b4c2e24b30fb023cdad1c7d0a3eb3591",
    "support"
   ],
   "html/webappapis/scripting/processing-model-2/runtime-error-in-setTimeout.html": [
@@ -76449,7 +77082,7 @@
    "testharness"
   ],
   "html/webappapis/scripting/processing-model-2/runtime-error-same-origin-with-hash-expected.txt": [
-   "334cb5bfcdce8bcc9a8185d6d6f8bbc0a5a298f1",
+   "66ef05eefeb5cb3facf4240a2342695ddfb27957",
    "support"
   ],
   "html/webappapis/scripting/processing-model-2/runtime-error-same-origin-with-hash.html": [
@@ -76545,7 +77178,7 @@
    "testharness"
   ],
   "html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-1-expected.txt": [
-   "80fcbed1d9fa080bbbf0bced25e10210a5639ed2",
+   "a54f8c539455a54dc10b28bfee52b03394a2e3f7",
    "support"
   ],
   "html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-1.html": [
@@ -76553,7 +77186,7 @@
    "testharness"
   ],
   "html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-2-expected.txt": [
-   "80fcbed1d9fa080bbbf0bced25e10210a5639ed2",
+   "a54f8c539455a54dc10b28bfee52b03394a2e3f7",
    "support"
   ],
   "html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-2.html": [
@@ -76808,6 +77441,14 @@
    "1f29964d20d88de0d659fd76b864b51681582870",
    "support"
   ],
+  "images/pattern.ogv": [
+   "340a255f9e8e06dad2a766f4b3e7bb5e15bf697e",
+   "support"
+  ],
+  "images/pattern.png": [
+   "c0edf6205f84cd5d03ef85ad6db7824d7f70b345",
+   "support"
+  ],
   "images/red-16x16.png": [
    "0d6c6847bafe93c1e1d617a64bd1b432700f7f3f",
    "support"
@@ -76864,12 +77505,24 @@
    "4e33f8928d27bd64a96d72c32de08ebd483ab888",
    "support"
   ],
+  "infrastructure/failing-test.html": [
+   "c832afb4826fd43d2fcc4f5e3fd6a773a6ee35f0",
+   "testharness"
+  ],
+  "infrastructure/reftest-wait-ref.html": [
+   "62552ac6981fc0c7aca84983569717eb2990a31e",
+   "support"
+  ],
+  "infrastructure/reftest-wait.html": [
+   "1a291b68cdf6edcfc28a2ff22e294e8e8ebc0c42",
+   "reftest"
+  ],
   "innerText/getter-expected.txt": [
    "11c121b0354c9017afdc58b1ad97134411142cbc",
    "support"
   ],
   "innerText/getter-tests.js": [
-   "3b33df08dce92cf6720bbbfa3881ccd04c9ab658",
+   "08171e0a781c05d91841e483d7e18c670c82c827",
    "support"
   ],
   "innerText/getter.html": [
@@ -76881,17 +77534,65 @@
    "support"
   ],
   "innerText/setter-tests.js": [
-   "8d59eda6625ecbc94de223ae03f09b3fdf1f4def",
+   "7793daf20cc41ec589b0c11ab26378ca34c44950",
    "support"
   ],
   "innerText/setter.html": [
-   "c7b9fa4c3e9b504ebd035c4b2fbe5d9e0f7616f7",
+   "edfd8fb32ffbc1c20fa0de6ce113fe6ea85635c9",
    "testharness"
   ],
   "input-events/idlharness.html": [
    "cd25518dd402033694667ccd1982fd3b85faa412",
    "testharness"
   ],
+  "longtask-timing/longtask-attributes.html": [
+   "a88bd658adcb9ef3dcbfa803397910e531bc864b",
+   "testharness"
+  ],
+  "longtask-timing/longtask-in-childiframe-crossorigin.html": [
+   "646324580798ab727e31db4c47b919bb9df6e6a9",
+   "testharness"
+  ],
+  "longtask-timing/longtask-in-childiframe.html": [
+   "74f235096580d329eb0cc2d2c682857c2b6f2c6d",
+   "testharness"
+  ],
+  "longtask-timing/longtask-in-externalscript.html": [
+   "74329829a0248b8e81443f78b998bf97ac60e965",
+   "testharness"
+  ],
+  "longtask-timing/longtask-in-parentiframe.html": [
+   "4732540c350dcfed013f07af0590c5de04aacc2a",
+   "testharness"
+  ],
+  "longtask-timing/longtask-in-raf.html": [
+   "e5a058a841e039e1d8f7b5f8b24d48937aad038b",
+   "testharness"
+  ],
+  "longtask-timing/longtask-in-sibling-iframe-crossorigin.html": [
+   "64085903b907b37077013d42747e3aaa8cf2b86e",
+   "testharness"
+  ],
+  "longtask-timing/longtask-in-sibling-iframe.html": [
+   "d08d6f2ddf39615cc3dad7c65a01a29c9411a2a9",
+   "testharness"
+  ],
+  "longtask-timing/resources/makelongtask.js": [
+   "42c70ac5f3c87499e43eb6200e8c8007d7d1ad9c",
+   "support"
+  ],
+  "longtask-timing/resources/raflongtask.js": [
+   "9fc7b7f0c5dd55de7e5de9258fa6e70c759aed06",
+   "support"
+  ],
+  "longtask-timing/resources/subframe-observing-longtask.html": [
+   "6a335da14401450f2da44c4d994c7c7b4102f57e",
+   "support"
+  ],
+  "longtask-timing/resources/subframe-with-longtask.html": [
+   "4acb6764c2fb60ad55733c420dfd7c1946542f17",
+   "support"
+  ],
   "magnetometer/idlharness.https-expected.txt": [
    "adc83b19e793491b1c6ea0fd8b46cd9f32e592fc",
    "support"
@@ -76905,7 +77606,7 @@
    "support"
   ],
   "media-capabilities/idlharness-expected.txt": [
-   "3ee114ccca363fd6cf18401641ed8df71ee39578",
+   "36a770de2f25ca3e03f92ff615db45b2b3edec59",
    "support"
   ],
   "media-capabilities/idlharness.html": [
@@ -77109,11 +77810,11 @@
    "testharness"
   ],
   "mediacapture-streams/MediaStreamTrack-init.https-expected.txt": [
-   "502d913f8ca1178e71eec066f3761a726607b93e",
+   "e06d937ccc5c05632bc1ce90cb8302d416be5480",
    "support"
   ],
   "mediacapture-streams/MediaStreamTrack-init.https.html": [
-   "5cbc929d8add4eea27950f9b193001566d838f9e",
+   "5dec952b5ea64b644a7fd90ef41d2da95388167b",
    "testharness"
   ],
   "mediacapture-streams/MediaStreamTrackEvent-constructor.https.html": [
@@ -77125,7 +77826,7 @@
    "support"
   ],
   "mediasession/idlharness-expected.txt": [
-   "9d213cce22b4300c0496ba5438bcc647e276688c",
+   "cc2ca247cfee9fd0be5cb80ac1e650d79341485e",
    "support"
   ],
   "mediasession/idlharness.html": [
@@ -78996,6 +79697,86 @@
    "c7d89bf7a3119dbfe9a581f82b5ac43ff6645a64",
    "testharness"
   ],
+  "orientation-event/devicemotionevent-init.html": [
+   "fab191bbebab21f696fefc0ad9e8110b99855eee",
+   "testharness"
+  ],
+  "orientation-event/deviceorientationabsoluteevent.html": [
+   "39b8076ee3dc20b085f06d52441766389155f04b",
+   "testharness"
+  ],
+  "orientation-event/deviceorientationevent-init.html": [
+   "ccd2db5f8266737e2eaf4aa8462b1a51201c42ab",
+   "testharness"
+  ],
+  "orientation-event/free-fall-manual.html": [
+   "e291465a89d97156f518e12e1bf65e6ab8091ce7",
+   "manual"
+  ],
+  "orientation-event/horizontal-surface-manual.html": [
+   "ef54a144013c5eb07a1c5742d8239e741a2a18dc",
+   "manual"
+  ],
+  "orientation-event/idlharness.html": [
+   "d23bfd2d59820008a8783e73e5e349a762dd8b64",
+   "testharness"
+  ],
+  "orientation-event/screen-upmost-manual.html": [
+   "2842c8cce38c52b44779debd172ec06acf1a6bed",
+   "manual"
+  ],
+  "orientation-event/screen-upright-manual.html": [
+   "6b5ad2a9357f9d2dcb320b8b20ae853aa5decbb1",
+   "manual"
+  ],
+  "orientation-event/t001-manual.html": [
+   "d8dc1eae6318e5ef713968ddd2066137178b6160",
+   "manual"
+  ],
+  "orientation-event/t002-manual.html": [
+   "85d511b9cf2a4467a2b066f96771c31919ee6cb2",
+   "manual"
+  ],
+  "orientation-event/t003-manual.html": [
+   "1890e3cef5b51c9322954186a46616524d1090e7",
+   "manual"
+  ],
+  "orientation-event/t006-manual.html": [
+   "445dee427dcf509941e1a340e2dcc010662a5696",
+   "manual"
+  ],
+  "orientation-event/t009-manual.html": [
+   "b6ee2d44a5821c0722c640a703c388a05b738dac",
+   "manual"
+  ],
+  "orientation-event/t010-manual.html": [
+   "66e4118c1084ea73e7ab97e0a2fb75c6d8baf145",
+   "manual"
+  ],
+  "orientation-event/t012-manual.html": [
+   "818ba14af7086635293c7f3d071cf8e482f762ed",
+   "manual"
+  ],
+  "orientation-event/t021-manual.html": [
+   "25d5ebcb60cd8ad8baeeb591a8ae47bd1b918289",
+   "manual"
+  ],
+  "orientation-event/t022-manual.html": [
+   "4cb600579d8f2776af34c2c384b357b615382a0a",
+   "manual"
+  ],
+  "orientation-event/t023-manual.html": [
+   "bf0788e0a38910362a49a9f27325a081ad0a9c9e",
+   "manual"
+  ],
+  "orientation-event/t025-manual.html": [
+   "c75b1abe106111ace7f213ee84087daf17f0f48d",
+   "manual"
+  ],
+  "orientation-event/t028-manual.html": [
+   "6948dbbdc88ffd9aa84ad5a6c822b354809561b2",
+   "manual"
+  ],
   "pointerevents/README.md": [
    "91a8bd86357b0d96ba3ab8f08f88c28436de484c",
    "support"
@@ -79017,7 +79798,7 @@
    "testharness"
   ],
   "pointerevents/idlharness-expected.txt": [
-   "4a3c8f5f9332c268d13f404a09c54e7812f30c0c",
+   "8db80f38011d2ae4ceacd2040db42d3edce9c787",
    "support"
   ],
   "pointerevents/idlharness.html": [
@@ -79305,7 +80086,7 @@
    "testharness"
   ],
   "preload/download-resources.html": [
-   "b59eac5b7ef9911f8f8f9c3583dc701fbd3966c7",
+   "f7e3c1ebfbb2b018dd0e5af4a81b0ab0eecac15c",
    "testharness"
   ],
   "preload/dynamic-adding-preload.html": [
@@ -79333,23 +80114,23 @@
    "support"
   ],
   "preload/onerror-event.html": [
-   "3c7ad9853f296438af51a48dbeb0d3554c7e69fc",
+   "aeb775170f956860edf37d492484531d1cd5aabc",
    "testharness"
   ],
   "preload/onload-event.html": [
-   "10727401482c9947a29d5073e50407f592538e98",
+   "a28bdbf41a8e74bee92ef00e77d283d198a77cfc",
    "testharness"
   ],
   "preload/preload-csp.sub.html": [
-   "171151dace92c82412d086bf3a3f93b90edd1744",
+   "fabb968b75579b301045ecb00380336815e36e86",
    "testharness"
   ],
   "preload/preload-default-csp.sub.html": [
-   "9a3eb4d9f73417bc57ca0128d97fe2c154f26204",
+   "4686e9047519b9a3e90ccda610442006c35cfc63",
    "testharness"
   ],
   "preload/preload-with-type.html": [
-   "e49e294f08b309b542fe97d40b246683f71714b5",
+   "dbae18f696990e4f5b76ca1324141df8ae190fb8",
    "testharness"
   ],
   "preload/resources/dummy.css": [
@@ -79385,7 +80166,7 @@
    "testharness"
   ],
   "preload/single-download-preload.html": [
-   "8d638e60e598d83aaf089a2e17e128cd6d0b3dee",
+   "e83015080694026c96466863c385e3425982479b",
    "testharness"
   ],
   "quirks-mode/blocks-ignore-line-height.html": [
@@ -86829,7 +87610,7 @@
    "testharness"
   ],
   "selection/addRange-00-expected.txt": [
-   "eedac4c59c749216666bcd60a08711810db36e73",
+   "0fa89f93e6b0810c97155a780f0287278aa817cb",
    "support"
   ],
   "selection/addRange-00.html": [
@@ -86837,7 +87618,7 @@
    "testharness"
   ],
   "selection/addRange-04-expected.txt": [
-   "cdd195d7aadd66603ca9c0f5bf2b52cf054b92f2",
+   "6fa9ec0fb9d56ba112ff4a52c61ec4dcdad1757d",
    "support"
   ],
   "selection/addRange-04.html": [
@@ -86849,7 +87630,7 @@
    "testharness"
   ],
   "selection/addRange-12-expected.txt": [
-   "c37408236a59467912d31966c48e105b372be787",
+   "8e6a7d5d1099b8165513cc8bfba2eb884ca3cb07",
    "support"
   ],
   "selection/addRange-12.html": [
@@ -86857,7 +87638,7 @@
    "testharness"
   ],
   "selection/addRange-16-expected.txt": [
-   "d8e9f67a786aea3ea8b94f942663ad69a419c52a",
+   "855ef76cb7d37772805a377eb03d0857f1dc3415",
    "support"
   ],
   "selection/addRange-16.html": [
@@ -86865,7 +87646,7 @@
    "testharness"
   ],
   "selection/addRange-20-expected.txt": [
-   "2bc82fd38cd3bd635d3bda05fe3d92bc99f5e98a",
+   "9fd5b1f712afbc0016ce10f97fa1cf2cabadf310",
    "support"
   ],
   "selection/addRange-20.html": [
@@ -86873,7 +87654,7 @@
    "testharness"
   ],
   "selection/addRange-24-expected.txt": [
-   "fd4aabd6d0ed1531e3adc99411095b501e2be0de",
+   "332f1cc45a9aacee7c157a762073509bd93ab3d5",
    "support"
   ],
   "selection/addRange-24.html": [
@@ -86881,7 +87662,7 @@
    "testharness"
   ],
   "selection/addRange-28-expected.txt": [
-   "a0eb6bab0cdc1093ccad3c96eef6e99895d1a537",
+   "75efb318748e3bc6653e0a798f8c4f7d5009dd9f",
    "support"
   ],
   "selection/addRange-28.html": [
@@ -86889,7 +87670,7 @@
    "testharness"
   ],
   "selection/addRange-32-expected.txt": [
-   "c5bc03594b1095dedab19073232291b45f73a31a",
+   "6cc3b0112a811f8ccc1e2c0f18f1b0622625a89b",
    "support"
   ],
   "selection/addRange-32.html": [
@@ -86897,7 +87678,7 @@
    "testharness"
   ],
   "selection/addRange-36-expected.txt": [
-   "fbed318b78eb54ba405d9b055d92f66bf899cf0a",
+   "5f74cc3bc9612cff536e53d3e124fd7317853f1f",
    "support"
   ],
   "selection/addRange-36.html": [
@@ -86992,10 +87773,6 @@
    "d1984a9359d880dfb81197e7ec31b2456833809d",
    "testharness"
   ],
-  "selection/removeAllRanges-expected.txt": [
-   "c163d9bfe29307dd686f48c49e632a85e2b4f567",
-   "support"
-  ],
   "selection/removeAllRanges.html": [
    "23385a72a586db288b282eb251f9384048532666",
    "testharness"
@@ -87141,7 +87918,7 @@
    "testharness"
   ],
   "service-workers/cache-storage/window/cache-add.https-expected.txt": [
-   "315e6cde8490f8821de90e690553912765865a20",
+   "6efe1ca94742b99558f3cce4157d98f34f41423b",
    "support"
   ],
   "service-workers/cache-storage/window/cache-add.https.html": [
@@ -87197,7 +87974,7 @@
    "testharness"
   ],
   "service-workers/cache-storage/worker/cache-add.https-expected.txt": [
-   "315e6cde8490f8821de90e690553912765865a20",
+   "6efe1ca94742b99558f3cce4157d98f34f41423b",
    "support"
   ],
   "service-workers/cache-storage/worker/cache-add.https.html": [
@@ -87244,10 +88021,18 @@
    "85ba3f00328e9c5a0e4c9935d10921ea1c1afe86",
    "testharness"
   ],
+  "service-workers/service-worker/ServiceWorkerGlobalScope/close.https.html": [
+   "5037b0f564f3d23c0733ae7b4d59b5353eca8d45",
+   "testharness"
+  ],
   "service-workers/service-worker/ServiceWorkerGlobalScope/registration-attribute.https.html": [
    "a6652870c60e93ff522ac107c1b69ec9c9fb2781",
    "testharness"
   ],
+  "service-workers/service-worker/ServiceWorkerGlobalScope/resources/close-worker.js": [
+   "559815205e99f825fdc0a0f2564e7e25586f3c05",
+   "support"
+  ],
   "service-workers/service-worker/ServiceWorkerGlobalScope/resources/registration-attribute-worker.js": [
    "eac69ddc3445a66abddd1494302bf9aac8c7104d",
    "support"
@@ -87296,6 +88081,14 @@
    "a71f51cde17f9d209750877dfbe1bacd26412ab3",
    "testharness"
   ],
+  "service-workers/service-worker/claim-affect-other-registration.https.html": [
+   "96ffb6f3376a5fa73abd405e123d019d8cac694d",
+   "testharness"
+  ],
+  "service-workers/service-worker/claim-fetch.https.html": [
+   "adec77bbeec2ec9ea7da3aba94375bc92e1b4f6f",
+   "testharness"
+  ],
   "service-workers/service-worker/claim-not-using-registration.https.html": [
    "72da19e038b6ab32ea04a0e91d117bc67d25a301",
    "testharness"
@@ -87317,15 +88110,23 @@
    "testharness"
   ],
   "service-workers/service-worker/clients-matchall-client-types.https.html": [
-   "576b4306b0976071ec1c7e085e016b99b5ab12cc",
+   "aaca38d0ad5e6a03775632fcef1657dd40753ae0",
+   "testharness"
+  ],
+  "service-workers/service-worker/clients-matchall-exact-controller.https.html": [
+   "231ce3ee744eeb670e00ee3a670ba361d5ca0707",
    "testharness"
   ],
   "service-workers/service-worker/clients-matchall-include-uncontrolled.https.html": [
-   "f3fbc439d4352a9c781290d80373fce8ff3e7c40",
+   "a4f4cb575ffea826c642aa3de424c0a0f986fdd0",
+   "testharness"
+  ],
+  "service-workers/service-worker/clients-matchall-order.https.html": [
+   "b2617b7dce0dce64c1a354a3dc07c67f1fa0adf2",
    "testharness"
   ],
   "service-workers/service-worker/clients-matchall.https.html": [
-   "91be48b6b8513197d131dc5f2ffbf43553cb89b3",
+   "ac873d343a0c9d0af058f84d7e8db2809825c64c",
    "testharness"
   ],
   "service-workers/service-worker/controller-on-disconnect.https-expected.txt": [
@@ -87385,7 +88186,7 @@
    "testharness"
   ],
   "service-workers/service-worker/fetch-event-redirect.https.html": [
-   "e322139b14149fe9b3f3aff76a9af8a58437e715",
+   "2a6f2d4f818ac325edd9c69c1b08801961728b20",
    "testharness"
   ],
   "service-workers/service-worker/fetch-event-respond-with-stops-propagation.https.html": [
@@ -87432,10 +88233,6 @@
    "ca776bff1f106f9a1e2dfe4d25ff3618d99758b7",
    "testharness"
   ],
-  "service-workers/service-worker/fetch-request-fallback.https-expected.txt": [
-   "2e185a05c4fb3b8510d3f77b9d7f65f07932628d",
-   "support"
-  ],
   "service-workers/service-worker/fetch-request-fallback.https.html": [
    "60dcb3a4c3b3ca2e79adfc7b779724cbe3ffa1c4",
    "testharness"
@@ -87445,7 +88242,7 @@
    "testharness"
   ],
   "service-workers/service-worker/fetch-request-redirect.https-expected.txt": [
-   "67e8b2fcbfc736ff595eab96902e0f9c589ae820",
+   "b7d53b1f7ee6f904294cd21e5142ff3339a0c55c",
    "support"
   ],
   "service-workers/service-worker/fetch-request-redirect.https.html": [
@@ -87453,7 +88250,7 @@
    "testharness"
   ],
   "service-workers/service-worker/fetch-request-resources.https-expected.txt": [
-   "16fede6024ebb098c774e6f80225dd8378b44492",
+   "fda03ac2ef5e2d49f28c7b1c3f1d283f0623aadb",
    "support"
   ],
   "service-workers/service-worker/fetch-request-resources.https.html": [
@@ -87476,10 +88273,6 @@
    "6600d201f205fe3586cbfab088cf9f2be7d96b87",
    "testharness"
   ],
-  "service-workers/service-worker/foreign-fetch-cors.https-expected.txt": [
-   "695cb32da1ec015990684439ae033d60a0ea0a4a",
-   "support"
-  ],
   "service-workers/service-worker/foreign-fetch-cors.https.html": [
    "aac5e2b6b096af5fb5edd9b8c5193774089afac2",
    "testharness"
@@ -87488,10 +88281,6 @@
    "8fbf910205f175a457846100deb34a01c02b00ab",
    "testharness"
   ],
-  "service-workers/service-worker/foreign-fetch-workers.https-expected.txt": [
-   "d3f1cd1321ee6461a0270b59290e61e745e2aafb",
-   "support"
-  ],
   "service-workers/service-worker/foreign-fetch-workers.https.html": [
    "4838204f935a89eccb333e347dd56f30846460fe",
    "testharness"
@@ -87721,7 +88510,7 @@
    "support"
   ],
   "service-workers/service-worker/resources/claim-worker.js": [
-   "2839599adca9049d31085e50504623576dc81643",
+   "e779a28c42928ff10219073171c1216c6623b4d4",
    "support"
   ],
   "service-workers/service-worker/resources/client-navigate-frame.html": [
@@ -87757,7 +88546,7 @@
    "support"
   ],
   "service-workers/service-worker/resources/clients-matchall-worker.js": [
-   "e204fdb53a9ae84f1b463f4655d62d1182d77cd5",
+   "88326b2119c68ba656c62a74b9c1af201bca1548",
    "support"
   ],
   "service-workers/service-worker/resources/dummy-shared-worker-interceptor.js": [
@@ -87788,6 +88577,10 @@
    "84b3339c3419e318803e51f46d7252d9e8ac183b",
    "support"
   ],
+  "service-workers/service-worker/resources/empty.html": [
+   "90aa64bd32d0dd20f0fda1783b0d9ec4a97b3430",
+   "support"
+  ],
   "service-workers/service-worker/resources/empty.js": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
@@ -87949,7 +88742,7 @@
    "support"
   ],
   "service-workers/service-worker/resources/foreign-fetch-cors-worker.js": [
-   "de8574422145b4c5385e34312b323201bbc35518",
+   "0bee2a7495fd8590c65fbdb10c02bb4024f729a9",
    "support"
   ],
   "service-workers/service-worker/resources/foreign-fetch-event-worker.js": [
@@ -87965,7 +88758,7 @@
    "support"
   ],
   "service-workers/service-worker/resources/foreign-fetch-helper-worker.js": [
-   "750ddd06ccb14b662e64be7faa54552bc04e9358",
+   "94061830f3d478ac53d9eeb03af662c3635f7860",
    "support"
   ],
   "service-workers/service-worker/resources/foreign-fetch-helpers.js": [
@@ -88397,7 +89190,7 @@
    "testharness"
   ],
   "service-workers/service-worker/websocket.https-expected.txt": [
-   "1fdf76c93fab7b19ef861df5aaada4ddce974f73",
+   "857a6466cae10de84c8de7295374710e83bdf281",
    "support"
   ],
   "service-workers/service-worker/websocket.https.html": [
@@ -89205,7 +89998,7 @@
    "testharness"
   ],
   "streams/piping/general.js": [
-   "cb4f7956b3973e318f6227122ab0df3c017414d5",
+   "3883820b3c21c05bedc258bae42731b42a42944b",
    "support"
   ],
   "streams/piping/general.serviceworker.https.html": [
@@ -89217,11 +90010,11 @@
    "testharness"
   ],
   "streams/piping/multiple-propagation-expected.txt": [
-   "ce9eac70da5aff617fcba34317a9357332ed5aa2",
+   "e1c701155da2752a69ab048a1d2b0d02ee9c23b0",
    "support"
   ],
   "streams/piping/multiple-propagation.dedicatedworker-expected.txt": [
-   "ce9eac70da5aff617fcba34317a9357332ed5aa2",
+   "e1c701155da2752a69ab048a1d2b0d02ee9c23b0",
    "support"
   ],
   "streams/piping/multiple-propagation.dedicatedworker.html": [
@@ -89252,14 +90045,6 @@
    "a2aaf43f0d2eb831bd9f8e379fbf0076eee76633",
    "testharness"
   ],
-  "streams/piping/pipe-through-expected.txt": [
-   "99727d10dfd517ff4345ffd7f781f2cef6363980",
-   "support"
-  ],
-  "streams/piping/pipe-through.dedicatedworker-expected.txt": [
-   "99727d10dfd517ff4345ffd7f781f2cef6363980",
-   "support"
-  ],
   "streams/piping/pipe-through.dedicatedworker.html": [
    "ed05dd7416cc07e178e481375c2372ce1094905e",
    "testharness"
@@ -89269,7 +90054,7 @@
    "testharness"
   ],
   "streams/piping/pipe-through.js": [
-   "7506ed68f5b64d7339af19cacd5d1d1201e1e5f7",
+   "08daa95df8e64c57f082b297ffd8bd11cda54d26",
    "support"
   ],
   "streams/piping/pipe-through.serviceworker.https-expected.txt": [
@@ -89341,7 +90126,7 @@
    "testharness"
   ],
   "streams/readable-byte-streams/general.js": [
-   "4a7d7a12437ad4c3ad39411c8fddffeca664dab7",
+   "944b6cec4ef71b243b97b69248fbd3d9af0fce43",
    "support"
   ],
   "streams/readable-byte-streams/general.serviceworker.https-expected.txt": [
@@ -89389,7 +90174,7 @@
    "testharness"
   ],
   "streams/readable-streams/bad-underlying-sources.js": [
-   "f980e8d1a99149a2292835eafb5484f8ee8da966",
+   "f6eeb95c1eb3cf9d60cb7e8f1b44a4c460c5bbaf",
    "support"
   ],
   "streams/readable-streams/bad-underlying-sources.serviceworker.https.html": [
@@ -89429,7 +90214,7 @@
    "testharness"
   ],
   "streams/readable-streams/cancel.js": [
-   "de3fc5a6a025a8ae42cb4870200af196d844e818",
+   "1874c77f2018facc15f233b30daa998f407841b2",
    "support"
   ],
   "streams/readable-streams/cancel.serviceworker.https.html": [
@@ -89469,7 +90254,7 @@
    "testharness"
   ],
   "streams/readable-streams/default-reader.js": [
-   "bf6b1859b76b4891b558da229e7a2e4d40eb3a1d",
+   "4bf42e5e2f45275c98122fd6e884d7af0dee1e77",
    "support"
   ],
   "streams/readable-streams/default-reader.serviceworker.https.html": [
@@ -89541,7 +90326,7 @@
    "testharness"
   ],
   "streams/readable-streams/general.js": [
-   "655cd8df67e0ef1c7f14e60bfb1584631e3291b5",
+   "81c44fb5c5c416d4882bf266319c384ced4a0ffe",
    "support"
   ],
   "streams/readable-streams/general.serviceworker.https-expected.txt": [
@@ -89569,7 +90354,7 @@
    "testharness"
   ],
   "streams/readable-streams/pipe-through.js": [
-   "1fdceec0fdec41293e411e7263fec1bf8f397853",
+   "df79dbb2844e85b65abc5ffb356aedc833b81b0a",
    "support"
   ],
   "streams/readable-streams/pipe-through.serviceworker.https.html": [
@@ -89653,7 +90438,7 @@
    "testharness"
   ],
   "streams/writable-streams/aborting.js": [
-   "744d55d9887783d92cdf81685358dab5a2016f84",
+   "f6edf8933a360f06d399bc17672a464e147310f6",
    "support"
   ],
   "streams/writable-streams/aborting.serviceworker.https-expected.txt": [
@@ -89777,7 +90562,7 @@
    "testharness"
   ],
   "streams/writable-streams/close.js": [
-   "ac7f1df6753c0d171d61a274a8ae7c6f5107857c",
+   "fae91aef3ae70841716304a91e603ed591e514ef",
    "support"
   ],
   "streams/writable-streams/close.serviceworker.https.html": [
@@ -89933,7 +90718,7 @@
    "testharness"
   ],
   "streams/writable-streams/write.js": [
-   "f956e42aa67abce9b3e11179c800a6f9c625d111",
+   "d3c5ce9a44188acb6def61118b2d1d3119fce1c4",
    "support"
   ],
   "streams/writable-streams/write.serviceworker.https-expected.txt": [
@@ -90029,7 +90814,7 @@
    "testharness"
   ],
   "svg/interfaces-expected.txt": [
-   "1985757d283da280151ab9f5c7e375265f486c3e",
+   "2ee30b154b64a6c0b9de9e9fd642e1e51a945762",
    "support"
   ],
   "svg/interfaces.html": [
@@ -90160,6 +90945,18 @@
    "6112502ca25230f30d0d87fc00cdb4d3dad64178",
    "support"
   ],
+  "uievents/interface/click-event-manual.htm": [
+   "2dc66486c4fedd5e7f0a60f1210cbfa5d4e9e3a0",
+   "manual"
+  ],
+  "uievents/interface/click-event.htm": [
+   "31beb4ca0d686fefa3eaa50360ad37c56e05655c",
+   "testharness"
+  ],
+  "uievents/interface/dblclick-event-manual.htm": [
+   "551486b9882d33a0ce31740809eaec0352403d69",
+   "manual"
+  ],
   "uievents/keyboard/README.md": [
    "ee83feb002acf1f134fecf618d985103c906472b",
    "support"
@@ -90637,11 +91434,11 @@
    "testharness"
   ],
   "web-animations/interfaces/Animatable/animate-expected.txt": [
-   "da37cabf824042a09bf1b974a48059afe95b827f",
+   "171f7cc3ce026fb9be6fc86cfca92a27387ceb00",
    "support"
   ],
   "web-animations/interfaces/Animatable/animate.html": [
-   "d076cdc3862c8a178d69d44cfe422f4e48b0649a",
+   "5f50ca1e8ab1fecdc6594310b4e386eec4738c6b",
    "testharness"
   ],
   "web-animations/interfaces/Animatable/getAnimations.html": [
@@ -90737,7 +91534,7 @@
    "testharness"
   ],
   "web-animations/interfaces/AnimationEffectTiming/easing.html": [
-   "3d0175c4879d60ee04442debf32b00ee8241bda5",
+   "a4b8b1c715795d5e66c0e32c2415a2e8fb587147",
    "testharness"
   ],
   "web-animations/interfaces/AnimationEffectTiming/endDelay.html": [
@@ -90805,7 +91602,7 @@
    "testharness"
   ],
   "web-animations/interfaces/KeyframeEffect/constructor-expected.txt": [
-   "78116feafa4663aeb21ebad7ed37d3c05b493319",
+   "8ae20367cc2abc594c7c46bea3809adc6f16ec8c",
    "support"
   ],
   "web-animations/interfaces/KeyframeEffect/constructor.html": [
@@ -90877,7 +91674,7 @@
    "testharness"
   ],
   "web-animations/resources/easing-tests.js": [
-   "190134380a0724f470a03ed0aa20c936bfed8d6c",
+   "2946cba8cbfa1216e5f1e941d92a1695473dc5f4",
    "support"
   ],
   "web-animations/resources/keyframe-utils.js": [
@@ -91417,7 +92214,7 @@
    "testharness"
   ],
   "webrtc/rtcpeerconnection/rtcpeerconnection-constructor-expected.txt": [
-   "b18ac0a88bcca09362db052949635a8aec707550",
+   "ae19b2abd560bd378b5a4dc0afde8763fd09cdc2",
    "support"
   ],
   "webrtc/rtcpeerconnection/rtcpeerconnection-constructor.html": [
@@ -91425,7 +92222,7 @@
    "testharness"
   ],
   "webrtc/rtcpeerconnection/rtcpeerconnection-idl-expected.txt": [
-   "35c0cae70e3415ca49b29d91ca7dad467d73221b",
+   "6775c653f14a91f38f03712eede88a15a0f07929",
    "support"
   ],
   "webrtc/rtcpeerconnection/rtcpeerconnection-idl.html": [
@@ -91437,7 +92234,7 @@
    "testharness"
   ],
   "webrtc/simplecall-expected.txt": [
-   "4588b7b96363cea683df9cb7ba59b92572da06f6",
+   "73c0717ad63503c6ea9c14c71a62a2984a46125b",
    "support"
   ],
   "webrtc/simplecall.html": [
@@ -91693,7 +92490,7 @@
    "testharness"
   ],
   "webstorage/storage_string_conversion.html": [
-   "3d8b227e0884935392f66d00c9d09e0f0d4aadc5",
+   "33c748773a518af29ea2ef8cbbc859fe988fb88a",
    "testharness"
   ],
   "webstorage/storage_supported_property_names.html": [
@@ -91701,15 +92498,15 @@
    "testharness"
   ],
   "webvr/idlharness-expected.txt": [
-   "4ec0d16ffbfb8d51f8ff2aeed3c509ede7b01022",
+   "7079dade4dae2bb7e2a669f1ac0c645eb0ac4e9a",
    "support"
   ],
   "webvr/idlharness.html": [
-   "ecfd51818c20d46b9983bb1d045a9308fc9a26b7",
+   "53ac12278e26e70cc0f6d6f31171fc4d2b6e6667",
    "testharness"
   ],
   "webvtt/api/VTTCue/align-expected.txt": [
-   "131f744febd82a1ec7672df3b3e0c2b050cabd60",
+   "0d037e134d1272ff24a2a8f852f309570d1e8843",
    "support"
   ],
   "webvtt/api/VTTCue/align.html": [
@@ -91729,11 +92526,11 @@
    "support"
   ],
   "webvtt/api/VTTCue/getCueAsHTML.html": [
-   "2c4a14607efdc17772f2878e9c0943300a2f8840",
+   "88e868bd5a243bfb24151028b6012914341e3742",
    "testharness"
   ],
   "webvtt/api/VTTCue/line-expected.txt": [
-   "3e11ceaab25e30c8c1aabed811b884bdccda9441",
+   "e674e063947619ae2c1172e69a29bdb13186ed7a",
    "support"
   ],
   "webvtt/api/VTTCue/line.html": [
@@ -91773,7 +92570,7 @@
    "testharness"
   ],
   "webvtt/api/VTTCue/snapToLines-expected.txt": [
-   "c456dfc5bb6f8a876ed57b51c7158f5e88e3fff3",
+   "962cf6527e05ca57d59d32c13edb4d41e3609ec0",
    "support"
   ],
   "webvtt/api/VTTCue/snapToLines.html": [
@@ -91781,15 +92578,15 @@
    "testharness"
   ],
   "webvtt/api/VTTCue/text-expected.txt": [
-   "c070481c2ea2189090684786662a3009d3ba544a",
+   "c7a2031b7986b74ae21e6c155178559d0a32cb2b",
    "support"
   ],
   "webvtt/api/VTTCue/text.html": [
-   "df27153660ab3df840d922803809a5b803027155",
+   "090ecc4c467c9bb2547c0906abfdb5b8572ecaf6",
    "testharness"
   ],
   "webvtt/api/VTTCue/vertical-expected.txt": [
-   "8db8dc0caa62b5aa1cad3ef4d283cecddd4f44ce",
+   "3fe06a9af105216c817946abd52276778aa43a34",
    "support"
   ],
   "webvtt/api/VTTCue/vertical.html": [
@@ -91828,6 +92625,10 @@
    "103a481c365bea3c1d6494f9fc3f3b6bf70ed580",
    "testharness"
   ],
+  "webvtt/api/interfaces.html": [
+   "dbff06876d1a0db46505423b9c1d919c2188b7a9",
+   "testharness"
+  ],
   "webvtt/interfaces-expected.txt": [
    "8dd4d09321332d620e50160d2f7f60ea4a2d2bd6",
    "support"
@@ -91953,7 +92754,7 @@
    "support"
   ],
   "webvtt/parsing/file-parsing/support/settings-line.test": [
-   "c199f5bf8d95a1b932d72991f59ec0501679c01e",
+   "1aa0776cf32d9ef64564e566a04effd40c1e55ae",
    "support"
   ],
   "webvtt/parsing/file-parsing/support/settings-multiple.test": [
@@ -92081,119 +92882,119 @@
    "support"
   ],
   "webvtt/parsing/file-parsing/tests/arrows.html": [
-   "55d90be35579cf64a966eb12c593ed3792b4b1c1",
+   "89e6f67e075cad269095e8ad02e2b3b18364de55",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/header-garbage.html": [
-   "f0478b342977b4b1986b6ea02474f28fe654cc87",
+   "c6384692eb912f3364c5f9b977934c953bc59c3d",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/header-space.html": [
-   "693f0bbebe9e6d92e73edb41d94d4f7c9023d33a",
+   "da29d0b7044604aa2bb2447a2174e26332958349",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/header-tab.html": [
-   "5183feaeab6476b98a26ed7d897d46a095177d09",
+   "a860aa6b10e1e9fea5bca2c791a523e32644b50a",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/header-timings.html": [
-   "b4aac06a6fef4ac548091db5d3ad6609a8fc935e",
+   "a04c70b0d66d93950968c94720acc05f513b6c61",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/ids.html": [
-   "c61a87e0623a77150e25b647690fc0b30555cbb3",
+   "a90c0f6a13ba32ebf47c33afb9ba7b3c3809728c",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/newlines.html": [
-   "0f58395ed99a61da5f6ec2490402e93bd3f892f2",
+   "b3c553a83a4fe2172e9c317817c772e7036a1a70",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/nulls.html": [
-   "9da3e5bf2d7cfa65109c196d88c44c37887296d0",
+   "527b1f144e3af92dddb0746afff4cffc6004a08d",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/regions-id.html": [
-   "a460719d2dbcd8a83ecb0b66e242c7690085b5b2",
+   "b795ab2a5e12895569d24c2828b265d6f9d296fb",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/regions-lines.html": [
-   "f3dbc54ce3b9ff4a8483a26d8772b4e0c9147135",
+   "3c232948d1a38e8e81e2f29846aff912b3934cb5",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/regions-old.html": [
-   "4ab58e6adde68b318d1efea94bdbc68b5d0d7f80",
+   "e61b584d8c6618749a861f47e5144a70334964cf",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/regions-regionanchor.html": [
-   "4b2a99d7e1ead80e60eb0b51176da10a2af9608e",
+   "cdd801c8ab4f1976ccbe242d09bb4d1cbb08049f",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/regions-scroll.html": [
-   "15dd9378d09fbebfba8a7dbcaa4b3ffb63d41ee6",
+   "485cb47d08a5b54fa94136f6ee3b1367df5cb8cd",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/regions-viewportanchor.html": [
-   "3409a66aea03f9ba1a7f5d0b18b8ee6fe191763a",
+   "82d8106c43a13ed2f673b919ed0e52e01aabdfcd",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/settings-align.html": [
-   "df4874a3bbf689758ad2074b3d2e39c71866470f",
+   "600c8c0861b9da63a15df4c88f9b8082213c4e5a",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/settings-line.html": [
-   "e4ec4556da5f46b5c683e73dd136114572bbbbe0",
+   "f9ba37c2f420d3c181a5a81ad34cdf9b113fce76",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/settings-multiple.html": [
-   "84fd3e8d7e038d6a4eed22b09a27278814da309a",
+   "0f35b3c2dbe4074b95201353eb5f318cf8e9a36c",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/settings-position.html": [
-   "6e2ecca129e46a6e32db1c325bfee986f02f7be1",
+   "37814e276567b552b4f2a28bb6e06fffcf4b594b",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/settings-region.html": [
-   "1584b357a5c3177bdaea1a2393af7d816161ea2a",
+   "04ef1c8cac52193d6a6e686ea0cce8116e7c5bd6",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/settings-size.html": [
-   "78fac093a4186eedfd90177a4e7335861fea917c",
+   "e4160327a73c66ab3c2c5ec89cce9ee404ec3d19",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/settings-vertical.html": [
-   "17c413b330c8a65d772f6fd748e40d1040d4ef0a",
+   "9a8e64eb358f1f90a0eebcaba2647cd652620986",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/signature-bom.html": [
-   "d76f904ba7a64fff02cc733f66c62238d84758f5",
+   "06475a73a9344680ed20f574d177671e64d95106",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/signature-no-newline.html": [
-   "5c5b716d1ea6acf700aadff6ee54fc33c14b02d5",
+   "0b0b3d11b4737df33192f1255db6e8b5aff579b8",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/signature-space-no-newline.html": [
-   "985f4fb440b5dea3b0b153b16868e7276ba5017f",
+   "0321e973b4ec3683c0427acc975ad7bea6b9ce8d",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/signature-space.html": [
-   "8ea054d2c663e1b16a040585b6240d39fd5438c6",
+   "df02016a3767c7f11cd4589f674b94ffbeb7cf67",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/signature-tab-no-newline.html": [
-   "c2b0a3c180eea3d833a7ac392ff74ad1eb6d8f2c",
+   "a2e7c2f08eed4b1b61f03488c88c3dcb8ceedf0d",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/signature-tab.html": [
-   "6835dfa0e62f3bf04244faaf7be5e92cc56d3e5c",
+   "b26a09a12cdf7ae322f3157ebba2883b2ed31f92",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/signature-timings.html": [
-   "3e1818c2597d16ad68dd1c46bf5bdeb7d7d9ce77",
+   "3c5a7f5f5f5bbc167a82eb627240bb4f2e3f5698",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/stylesheets.html": [
-   "4065f4d9ce0844d9b83ebce09a0f990d769dae32",
+   "75e78cf3294b42e26c49a2b2c8252354a17969c5",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/support/arrows.vtt": [
@@ -92257,7 +93058,7 @@
    "support"
   ],
   "webvtt/parsing/file-parsing/tests/support/settings-line.vtt": [
-   "fd81aff88127d2ea398523197dc8255ac21eda95",
+   "2c51c8c55a3c963ffdbbc9d1a3e569a0c89499d3",
    "support"
   ],
   "webvtt/parsing/file-parsing/tests/support/settings-multiple.vtt": [
@@ -92345,35 +93146,35 @@
    "support"
   ],
   "webvtt/parsing/file-parsing/tests/timings-60.html": [
-   "19356a2f5e1db8174ecf83d0174b3f9384c2e987",
+   "f53c6baa4033d8faf37afc87ca8c6d48fc77f927",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/timings-eof.html": [
-   "7990f06dd0f370dd5f96a106104a302da2c6e019",
+   "ee5110219a5c828429cb0904f08da6dd788e620f",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/timings-garbage.html": [
-   "7e07298edb4302b733e2574df252895ecae0e604",
+   "be70a34b16bd68952ad556035b037900a66268f3",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/timings-negative.html": [
-   "e5a061ba0a1778b25ad4e6d46d20004a106adb30",
+   "2f4fe6d1827cc7187c566953dbdd4a1fc0e4f46b",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/timings-omitted-hours.html": [
-   "091b8695747d264d59a6b58a23e0154fdf87ee6e",
+   "22c0baf7140207a8222f9408df616efe253a1f82",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/timings-too-long.html": [
-   "63368b894412e15c7f40846cfb900a933cfa2412",
+   "20fe59dba355b3aeb04a6dab985a4fa67ae062b1",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/timings-too-short.html": [
-   "3ee4574905ed255ea35318aa3b08dca1f47feb10",
+   "d61f03f4b14c76622f18ba218d998638756f2db1",
    "testharness"
   ],
   "webvtt/parsing/file-parsing/tests/whitespace-chars.html": [
-   "6c519d036e82076a2039eaf63b644e0cab5d19fe",
+   "ba2fd1a6cb63cdf9887ed9936dfdc1f5a6766057",
    "testharness"
   ],
   "webvtt/rendering/cues-with-video/processing-model/2_cues_overlapping_completely_move_up-ref.html": [
@@ -94877,7 +95678,7 @@
    "testharness"
   ],
   "workers/data-url-shared.html": [
-   "50debec2192e5a6b0b18ce53942fc08ff0f2df11",
+   "0fee4678c53e3f30e0f6090b5b9fc51b7bb74806",
    "testharness"
   ],
   "workers/data-url.html": [
diff --git a/third_party/WebKit/LayoutTests/external/wpt/.gitignore b/third_party/WebKit/LayoutTests/external/wpt/.gitignore
index 162fd51..2ae64ff 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/.gitignore
+++ b/third_party/WebKit/LayoutTests/external/wpt/.gitignore
@@ -13,3 +13,4 @@
 webdriver/.idea
 .vscode/
 .DS_Store
+*.rej
diff --git a/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/idb-binary-key-roundtrip.htm b/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/idb-binary-key-roundtrip.htm
index b1148d6..36b7863fe 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/idb-binary-key-roundtrip.htm
+++ b/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/idb-binary-key-roundtrip.htm
@@ -1,6 +1,7 @@
 <!doctype html>
 <meta charset=utf-8>
 <title>IndexedDB: Binary keys written to a database and read back</title>
+<meta name=timeout content=long>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/idbcursor-direction-index-keyrange.htm b/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/idbcursor-direction-index-keyrange.htm
index c3f9340..e0f0c6d0 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/idbcursor-direction-index-keyrange.htm
+++ b/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/idbcursor-direction-index-keyrange.htm
@@ -1,4 +1,5 @@
 <!DOCTYPE html>
+<meta charset=utf-8>
 <title>IDBCursor direction - index with keyrange</title>
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <link rel=help href="http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#cursor-iteration-operation">
diff --git a/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/idbcursor-direction-objectstore-keyrange.htm b/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/idbcursor-direction-objectstore-keyrange.htm
index 2b2bf04..7bcb971 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/idbcursor-direction-objectstore-keyrange.htm
+++ b/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/idbcursor-direction-objectstore-keyrange.htm
@@ -1,4 +1,5 @@
 <!DOCTYPE html>
+<meta charset=utf-8>
 <title>IDBCursor direction - object store with keyrange</title>
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <link rel=help href="http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#cursor-iteration-operation">
diff --git a/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/idbfactory-open-error-properties.html b/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/idbfactory-open-error-properties.html
new file mode 100644
index 0000000..92e772e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/idbfactory-open-error-properties.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>IndexedDB: Test IDBFactory open() error event properties</title>
+<meta name=help href="https://w3c.github.io/IndexedDB/#dom-idbfactory-open">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="support.js"></script>
+<script>
+
+async_test(t => {
+  const dbname = document.location + '-' + t.name;
+  indexedDB.deleteDatabase(dbname);
+  const open = indexedDB.open(dbname);
+  open.onsuccess = t.unreached_func('open should not succeed');
+  open.onupgradeneeded = t.step_func(() => {
+    const tx = open.transaction;
+    tx.abort();
+  });
+  open.onerror = t.step_func(e => {
+    assert_equals(e.target, open, 'event target should be request');
+    assert_equals(e.type, 'error', 'Event type should be error');
+    assert_true(e.bubbles, 'Event should bubble');
+    assert_true(e.cancelable, 'Event should be cancelable');
+    t.done();
+  });
+}, 'Properties of error event from failed open()');
+
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/idbobjectstore_getKey.html b/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/idbobjectstore_getKey.html
index ab631857..19229456 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/idbobjectstore_getKey.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/idbobjectstore_getKey.html
@@ -1,6 +1,7 @@
 <!doctype html>
 <meta charset=utf-8>
 <title>IndexedDB: Test IDBObjectStore.getKey()</title>
+<meta name=timeout content=long>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/key-conversion-exceptions.htm b/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/key-conversion-exceptions.htm
index 608d0f9a..4dd5d90 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/key-conversion-exceptions.htm
+++ b/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/key-conversion-exceptions.htm
@@ -1,6 +1,7 @@
 <!doctype html>
 <meta charset=utf-8>
 <title>IndexedDB: Exceptions thrown during key conversion</title>
+<meta name=timeout content=long>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/transaction-abort-request-error.html b/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/transaction-abort-request-error.html
new file mode 100644
index 0000000..ef3c097
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/transaction-abort-request-error.html
@@ -0,0 +1,68 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>IndexedDB: Test error events fired at requests from aborted transaction</title>
+<meta name=help href="https://w3c.github.io/IndexedDB/#abort-a-transaction">
+<meta name=help href="https://w3c.github.io/IndexedDB/#request-construct">
+<meta name=help href="https://w3c.github.io/IndexedDB/#transaction-construct">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="support.js"></script>
+<script>
+
+indexeddb_test(
+  (t, db) => {
+    db.createObjectStore('store');
+  },
+  (t, db) => {
+    const tx = db.transaction('store');
+    const request = tx.objectStore('store').get(0);
+    tx.abort();
+    request.onsuccess = t.unreached_func('request should not succeed');
+
+    let connection_saw_error = false;
+    let transaction_saw_error = false;
+
+    request.onerror = t.step_func(e => {
+      assert_equals(request.readyState, 'done',
+                    'Request\'s done flag should be set');
+      assert_equals(request.result, undefined,
+                    'Request\'s result should be undefined');
+      assert_equals(request.error.name, 'AbortError',
+                    'Request\'s error should be AbortError');
+
+      assert_equals(e.target, request, 'event target should be request');
+      assert_equals(e.type, 'error', 'Event type should be error');
+      assert_true(e.bubbles, 'Event should bubble');
+      assert_true(e.cancelable, 'Event should cancelable');
+
+      assert_true(connection_saw_error,
+                  'Event propagated through connection');
+      assert_true(transaction_saw_error,
+                  'Event propagated through transaction');
+      t.done();
+    });
+
+    // Event propagates via "get the parent" on request and transaction.
+
+    db.addEventListener('error', t.step_func(e => {
+      connection_saw_error = true;
+      assert_equals(e.target, request, 'event target should be request');
+      assert_equals(e.type, 'error', 'Event type should be error');
+      assert_true(e.bubbles, 'Event should bubble');
+      assert_true(e.cancelable, 'Event should cancelable');
+    }), true);
+
+    tx.addEventListener('error', t.step_func(e => {
+      transaction_saw_error = true;
+      assert_equals(e.target, request, 'event target should be request');
+      assert_equals(e.type, 'error', 'Event type should be error');
+      assert_true(e.bubbles, 'Event should bubble');
+      assert_true(e.cancelable, 'Event should cancelable');
+
+      assert_true(connection_saw_error,
+                  'Event propagated through connection');
+    }), true);
+  },
+  'Properties of error events fired at requests when aborting a transaction');
+
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/exceptions.html b/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/exceptions.html
index bc1d7fe6..06c196e 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/exceptions.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/es-exceptions/exceptions.html
@@ -1,4 +1,5 @@
 <!doctype html>
+<meta charset=utf-8>
 <title>DOMException-throwing tests</title>
 <link rel=author title="Aryeh Gregor" href=ayg@aryeh.name>
 <div id=log></div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/base-uri/base-uri_iframe_sandbox.sub.html b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/base-uri/base-uri_iframe_sandbox.sub.html
new file mode 100644
index 0000000..dfb4fd19
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/base-uri/base-uri_iframe_sandbox.sub.html
@@ -0,0 +1,80 @@
+<!DOCTYPE HTML>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <title>base-uri works correctly inside a sandboxed iframe.</title>
+    <script src='/resources/testharness.js'></script>
+    <script src='/resources/testharnessreport.js'></script>
+
+    <!-- CSP served: base-uri 'self' -->
+</head>
+
+<body>
+    <h1>base-uri works correctly inside a sandboxed iframe.</h1>
+    <div id='log'></div>
+
+    <script>
+        window.addEventListener('securitypolicyviolation', function(e) {
+            assert_unreached('No CSP violation report has fired.');
+        });
+
+        async_test(function(t) {
+            var i = document.createElement('iframe');
+            i.sandbox = 'allow-scripts';
+            i.style.display = 'none';
+            i.srcdoc = `
+            <script>
+              window.addEventListener('securitypolicyviolation', function() {
+                top.postMessage('FAIL', '*');
+              });
+            </sc` + `ript>
+            <base href="{{location[scheme]}}://{{domains[]}}:{{ports[http][0]}}/base/">
+            <script>
+              top.postMessage(document.baseURI, '*');
+            </sc` + `ript>`;
+
+            window.addEventListener('message', t.step_func(function(e) {
+                if (e.source === i.contentWindow) {
+                    assert_equals(e.data, location.origin + '/base/');
+                    t.done();
+                }
+            }));
+
+            document.body.appendChild(i);
+        }, 'base-uri \'self\' works with same-origin sandboxed iframes.');
+
+        async_test(function(t) {
+            var i = document.createElement('iframe');
+            i.sandbox = 'allow-scripts';
+            i.style.display = 'none';
+            i.srcdoc = `
+            <script>
+              window.addEventListener('securitypolicyviolation',
+                function(violation) {
+                  if (violation.blockedURI !== '{{location[scheme]}}://{{domains[www2]}}:{{ports[http][0]}}/base/' || violation.effectiveDirective !== 'base-uri') {
+                      top.postMessage('FAIL');
+                      return;
+                  }
+                  top.postMessage(document.baseURI, '*');
+              });
+            </sc` + `ript>
+            <base href="{{location[scheme]}}://{{domains[www2]}}:{{ports[http][0]}}/base/">
+            <script>
+              top.postMessage(document.baseURI, '*');
+            </sc` + `ript>`;
+
+            window.addEventListener('message', t.step_func(function(e) {
+                if (e.source === i.contentWindow) {
+                    assert_equals(e.data, location.href);
+                    t.done();
+                }
+            }));
+
+            document.body.appendChild(i);
+        }, 'base-uri \'self\' blocks foreign-origin sandboxed iframes.');
+    </script>
+
+</body>
+
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/base-uri/base-uri_iframe_sandbox.sub.html.headers b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/base-uri/base-uri_iframe_sandbox.sub.html.headers
new file mode 100644
index 0000000..7b4795e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/base-uri/base-uri_iframe_sandbox.sub.html.headers
@@ -0,0 +1,5 @@
+Expires: Mon, 26 Jul 1997 05:00:00 GMT
+Cache-Control: no-store, no-cache, must-revalidate
+Cache-Control: post-check=0, pre-check=0, false
+Pragma: no-cache
+Content-Security-Policy: base-uri 'self'
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-expected.txt
index 29502b5..bc19685e 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 51 tests; 38 PASS, 13 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 51 tests; 48 PASS, 3 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS Created element's namespace in current document 
 PASS Created element's namespace in created HTML document 
 PASS Created element's namespace in created XML document 
@@ -14,42 +14,42 @@
 PASS Created element's namespace in empty.html 
 PASS Created element's namespace in empty.xhtml 
 PASS Created element's namespace in empty.xml 
-FAIL Created element's namespace in empty.svg assert_equals: Wrong MIME type returned from doc.contentType expected "image/svg+xml" but got "application/json"
+PASS Created element's namespace in empty.svg 
 PASS Created element's namespace in minimal_html.html 
 PASS Created element's namespace in minimal_html.xhtml 
 PASS Created element's namespace in minimal_html.xml 
-FAIL Created element's namespace in minimal_html.svg assert_equals: Wrong MIME type returned from doc.contentType expected "image/svg+xml" but got "application/json"
+PASS Created element's namespace in minimal_html.svg 
 PASS Created element's namespace in xhtml.html 
 PASS Created element's namespace in xhtml.xhtml 
 FAIL Created element's namespace in xhtml.xml assert_equals: Wrong MIME type returned from doc.contentType expected "application/xml" but got "application/xhtml+xml"
-FAIL Created element's namespace in xhtml.svg assert_equals: Wrong MIME type returned from doc.contentType expected "image/svg+xml" but got "application/json"
+PASS Created element's namespace in xhtml.svg 
 PASS Created element's namespace in svg.html 
 PASS Created element's namespace in svg.xhtml 
 PASS Created element's namespace in svg.xml 
-FAIL Created element's namespace in svg.svg assert_equals: Wrong MIME type returned from doc.contentType expected "image/svg+xml" but got "application/json"
+PASS Created element's namespace in svg.svg 
 PASS Created element's namespace in mathml.html 
 PASS Created element's namespace in mathml.xhtml 
 PASS Created element's namespace in mathml.xml 
-FAIL Created element's namespace in mathml.svg assert_equals: Wrong MIME type returned from doc.contentType expected "image/svg+xml" but got "application/json"
+PASS Created element's namespace in mathml.svg 
 PASS Created element's namespace in bare_xhtml.html 
 PASS Created element's namespace in bare_xhtml.xhtml 
 PASS Created element's namespace in bare_xhtml.xml 
-FAIL Created element's namespace in bare_xhtml.svg assert_equals: Wrong MIME type returned from doc.contentType expected "image/svg+xml" but got "application/json"
+PASS Created element's namespace in bare_xhtml.svg 
 PASS Created element's namespace in bare_svg.html 
 PASS Created element's namespace in bare_svg.xhtml 
 PASS Created element's namespace in bare_svg.xml 
-FAIL Created element's namespace in bare_svg.svg assert_equals: Wrong MIME type returned from doc.contentType expected "image/svg+xml" but got "application/json"
+PASS Created element's namespace in bare_svg.svg 
 PASS Created element's namespace in bare_mathml.html 
 PASS Created element's namespace in bare_mathml.xhtml 
 PASS Created element's namespace in bare_mathml.xml 
-FAIL Created element's namespace in bare_mathml.svg assert_equals: Wrong MIME type returned from doc.contentType expected "image/svg+xml" but got "application/json"
+PASS Created element's namespace in bare_mathml.svg 
 PASS Created element's namespace in xhtml_ns_removed.html 
 PASS Created element's namespace in xhtml_ns_removed.xhtml 
 FAIL Created element's namespace in xhtml_ns_removed.xml assert_equals: Wrong MIME type returned from doc.contentType expected "application/xml" but got "application/xhtml+xml"
-FAIL Created element's namespace in xhtml_ns_removed.svg assert_equals: Wrong MIME type returned from doc.contentType expected "image/svg+xml" but got "application/json"
+PASS Created element's namespace in xhtml_ns_removed.svg 
 PASS Created element's namespace in xhtml_ns_changed.html 
 PASS Created element's namespace in xhtml_ns_changed.xhtml 
 FAIL Created element's namespace in xhtml_ns_changed.xml assert_equals: Wrong MIME type returned from doc.contentType expected "application/xml" but got "application/xhtml+xml"
-FAIL Created element's namespace in xhtml_ns_changed.svg assert_equals: Wrong MIME type returned from doc.contentType expected "image/svg+xml" but got "application/json"
+PASS Created element's namespace in xhtml_ns_changed.svg 
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/bare_mathml.svg b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/bare_mathml.svg
new file mode 100644
index 0000000..b80a99a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/bare_mathml.svg
@@ -0,0 +1 @@
+<math></math>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/bare_svg.svg b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/bare_svg.svg
new file mode 100644
index 0000000..dc1ced5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/bare_svg.svg
@@ -0,0 +1 @@
+<svg></svg>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/bare_xhtml.svg b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/bare_xhtml.svg
new file mode 100644
index 0000000..6c70bcf
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/bare_xhtml.svg
@@ -0,0 +1 @@
+<html></html>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/empty.svg b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/empty.svg
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/empty.svg
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/mathml.svg b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/mathml.svg
new file mode 100644
index 0000000..0bec8e99
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/mathml.svg
@@ -0,0 +1 @@
+<mathml xmlns="http://www.w3.org/1998/Math/MathML"></mathml>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/minimal_html.svg b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/minimal_html.svg
new file mode 100644
index 0000000..a33d985
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/minimal_html.svg
@@ -0,0 +1 @@
+<!doctype html><title></title>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/svg.svg b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/svg.svg
new file mode 100644
index 0000000..64def4a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/svg.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg"></svg>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/xhtml.svg b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/xhtml.svg
new file mode 100644
index 0000000..1cba998
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/xhtml.svg
@@ -0,0 +1 @@
+<html xmlns="http://www.w3.org/1999/xhtml"></html>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/xhtml_ns_changed.svg b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/xhtml_ns_changed.svg
new file mode 100644
index 0000000..b228c7f7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/xhtml_ns_changed.svg
@@ -0,0 +1,7 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head><script>
+    var newRoot = document.createElementNS("http://www.w3.org/2000/svg", "abc");
+    document.removeChild(document.documentElement);
+    document.appendChild(newRoot);
+  </script></head>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/xhtml_ns_removed.svg b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/xhtml_ns_removed.svg
new file mode 100644
index 0000000..dba395fe
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement-namespace-tests/xhtml_ns_removed.svg
@@ -0,0 +1,7 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head><script>
+    var newRoot = document.createElementNS(null, "html");
+    document.removeChild(document.documentElement);
+    document.appendChild(newRoot);
+  </script></head>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-childElement-null-svg.svg b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-childElement-null-svg.svg
new file mode 100644
index 0000000..3884828
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-childElement-null-svg.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"
+     xmlns:h="http://www.w3.org/1999/xhtml"
+     version="1.1"
+     width="100%" height="100%" viewBox="0 0 400 400">
+<title>Null test</title>
+<h:script src="/resources/testharness.js"/>
+<h:script src="/resources/testharnessreport.js"/>
+
+<text x="200" y="40" font-size="25" fill="black" text-anchor="middle">Test of firstElementChild and lastChildElement returning null</text>
+<text id="parentEl" x="200" y="70" font-size="20" fill="black" text-anchor="middle" font-weight="bold">Test</text>
+
+<h:script><![CDATA[
+test(function() {
+  var parentEl = document.getElementById("parentEl")
+  assert_equals(parentEl.firstElementChild, null)
+  assert_equals(parentEl.lastElementChild, null)
+})
+]]></h:script>
+</svg>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-childElementCount-dynamic-add-svg.svg b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-childElementCount-dynamic-add-svg.svg
new file mode 100644
index 0000000..d149f1e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-childElementCount-dynamic-add-svg.svg
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"
+     xmlns:h="http://www.w3.org/1999/xhtml"
+     version="1.1"
+     width="100%" height="100%" viewBox="0 0 400 400">
+<title>Dynamic Adding of Elements</title>
+<h:script src="/resources/testharness.js"/>
+<h:script src="/resources/testharnessreport.js"/>
+
+<text x="200" y="40" font-size="25" fill="black" text-anchor="middle">Test of Dynamic Adding of Elements</text>
+<text id="parentEl" x="200" y="70" font-size="20" fill="black" text-anchor="middle">The result of this test is
+<tspan id="first_element_child" font-weight="bold">unknown.</tspan></text>
+
+<h:script><![CDATA[
+test(function() {
+  var parentEl = document.getElementById("parentEl");
+  var newChild = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
+  parentEl.appendChild(newChild);
+  assert_equals(parentEl.childElementCount, 2)
+})
+]]></h:script>
+</svg>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-childElementCount-dynamic-remove-svg.svg b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-childElementCount-dynamic-remove-svg.svg
new file mode 100644
index 0000000..bf99de6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-childElementCount-dynamic-remove-svg.svg
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"
+     xmlns:h="http://www.w3.org/1999/xhtml"
+     version="1.1"
+     width="100%" height="100%" viewBox="0 0 400 400">
+<title>Dynamic Removal of Elements</title>
+<h:script src="/resources/testharness.js"/>
+<h:script src="/resources/testharnessreport.js"/>
+
+<text x="200" y="40" font-size="25" fill="black" text-anchor="middle">Test of Dynamic Removal of Elements</text>
+<text id="parentEl" x="200" y="70" font-size="20" fill="black" text-anchor="middle">The result of this test is
+<tspan id="first_element_child" font-weight="bold">unknown.</tspan><tspan id="last_element_child"> </tspan></text>
+
+<h:script><![CDATA[
+test(function() {
+  var parentEl = document.getElementById("parentEl");
+  var lec = parentEl.lastElementChild;
+  parentEl.removeChild(lec);
+  assert_equals(parentEl.childElementCount, 1)
+})
+]]></h:script>
+</svg>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-childElementCount-nochild-svg.svg b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-childElementCount-nochild-svg.svg
new file mode 100644
index 0000000..8ba57436
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-childElementCount-nochild-svg.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"
+     xmlns:h="http://www.w3.org/1999/xhtml"
+     version="1.1"
+     width="100%" height="100%" viewBox="0 0 400 400">
+<title>childElementCount</title>
+<h:script src="/resources/testharness.js"/>
+<h:script src="/resources/testharnessreport.js"/>
+
+<text x="200" y="40" font-size="25" fill="black" text-anchor="middle">Test of childElementCount with No Child Element Nodes</text>
+<text id="parentEl" x="200" y="70" font-size="20" fill="black" text-anchor="middle" font-weight="bold">Test</text>
+
+<h:script><![CDATA[
+test(function() {
+  var parentEl = document.getElementById("parentEl")
+  assert_equals(parentEl.childElementCount, 0)
+})
+]]></h:script>
+</svg>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-childElementCount-svg.svg b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-childElementCount-svg.svg
new file mode 100644
index 0000000..ff93eff
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-childElementCount-svg.svg
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"
+     xmlns:h="http://www.w3.org/1999/xhtml"
+     version="1.1"
+     width="100%" height="100%" viewBox="0 0 400 400">
+<title>childElementCount</title>
+<h:script src="/resources/testharness.js"/>
+<h:script src="/resources/testharnessreport.js"/>
+
+<text x="200" y="40" font-size="25" fill="black" text-anchor="middle">Test of childElementCount</text>
+<text id="parentEl" x="200" y="70" font-size="20" fill="black" text-anchor="middle">The result of <tspan id="first_element_child"><tspan>this</tspan> <tspan>test</tspan></tspan> is
+<tspan id="middle_element_child" font-weight="bold">unknown.</tspan>
+
+
+
+<tspan id="last_element_child" style="display:none;">fnord</tspan> </text>
+
+<h:script><![CDATA[
+test(function() {
+  var parentEl = document.getElementById("parentEl")
+  assert_true("childElementCount" in parentEl)
+  assert_equals(parentEl.childElementCount, 3)
+})
+]]></h:script>
+</svg>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-firstElementChild-entity.svg b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-firstElementChild-entity.svg
new file mode 100644
index 0000000..3a20ea79a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-firstElementChild-entity.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"
+[
+<!ENTITY tree "<tspan id='first_element_child' font-weight='bold'>unknown.</tspan>">
+]>
+<svg xmlns="http://www.w3.org/2000/svg"
+     xmlns:h="http://www.w3.org/1999/xhtml"
+     version="1.1"
+     width="100%" height="100%" viewBox="0 0 400 400">
+<title>Entity References</title>
+<h:script src="/resources/testharness.js"/>
+<h:script src="/resources/testharnessreport.js"/>
+
+<text x="200" y="40" font-size="25" fill="black" text-anchor="middle">Test of Entity References</text>
+<text id="parentEl" x="200" y="70" font-size="20" fill="black" text-anchor="middle">The result of this test is &tree;</text>
+
+<h:script><![CDATA[
+test(function() {
+  var parentEl = document.getElementById("parentEl")
+  var fec = parentEl.firstElementChild;
+  assert_true(!!fec)
+  assert_equals(fec.nodeType, 1)
+  assert_equals(fec.getAttribute("id"), "first_element_child")
+})
+]]></h:script>
+</svg>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-firstElementChild-namespace-svg.svg b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-firstElementChild-namespace-svg.svg
new file mode 100644
index 0000000..d42c087
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-firstElementChild-namespace-svg.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"
+     xmlns:h="http://www.w3.org/1999/xhtml"
+     xmlns:pickle="http://ns.example.org/pickle"
+     version="1.1"
+     width="100%" height="100%" viewBox="0 0 400 400">
+<title>firstElementChild with namespaces</title>
+<h:script src="/resources/testharness.js"/>
+<h:script src="/resources/testharnessreport.js"/>
+
+<text x="200" y="40" font-size="25" fill="black" text-anchor="middle">Test of firstElementChild with namespaces</text>
+<g id="parentEl">
+  <pickle:dill id="first_element_child"/>
+</g>
+
+<h:script><![CDATA[
+test(function() {
+  var parentEl = document.getElementById("parentEl");
+  var fec = parentEl.firstElementChild;
+  assert_true(!!fec)
+  assert_equals(fec.nodeType, 1)
+  assert_equals(fec.getAttribute("id"), "first_element_child")
+  assert_equals(fec.localName, "dill")
+})
+]]></h:script>
+</svg>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-firstElementChild-svg.svg b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-firstElementChild-svg.svg
new file mode 100644
index 0000000..359c5b8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-firstElementChild-svg.svg
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"
+     xmlns:h="http://www.w3.org/1999/xhtml"
+     version="1.1"
+     width="100%" height="100%" viewBox="0 0 400 400">
+<title>firstElementChild</title>
+<h:script src="/resources/testharness.js"/>
+<h:script src="/resources/testharnessreport.js"/>
+
+<text x="200" y="40" font-size="25" fill="black" text-anchor="middle">Test of firstElementChild</text>
+<text id="parentEl" x="200" y="70" font-size="20" fill="black" text-anchor="middle">The result of this test is
+<tspan id="first_element_child" font-weight="bold">unknown.</tspan></text>
+
+<h:script><![CDATA[
+test(function() {
+  var parentEl = document.getElementById("parentEl");
+  var fec = parentEl.firstElementChild;
+  assert_true(!!fec)
+  assert_equals(fec.nodeType, 1)
+  assert_equals(fec.getAttribute("id"), "first_element_child")
+})
+]]></h:script>
+</svg>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-lastElementChild-svg.svg b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-lastElementChild-svg.svg
new file mode 100644
index 0000000..1cec4a13
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-lastElementChild-svg.svg
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"
+     xmlns:h="http://www.w3.org/1999/xhtml"
+     version="1.1"
+     width="100%" height="100%" viewBox="0 0 400 400">
+<title>lastElementChild</title>
+<h:script src="/resources/testharness.js"/>
+<h:script src="/resources/testharnessreport.js"/>
+
+<text x="200" y="40" font-size="25" fill="black" text-anchor="middle">Test of lastElementChild</text>
+<text id="parentEl" x="200" y="70" font-size="20" fill="black" text-anchor="middle">The result of <tspan id="first_element_child">this test</tspan> is <tspan id="last_element_child" font-weight="bold">not</tspan> known.</text>
+
+<h:script><![CDATA[
+test(function() {
+  var parentEl = document.getElementById("parentEl");
+  var lec = parentEl.lastElementChild;
+  assert_true(!!lec)
+  assert_equals(lec.nodeType, 1)
+  assert_equals(lec.getAttribute("id"), "last_element_child")
+})
+]]></h:script>
+</svg>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-nextElementSibling-svg.svg b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-nextElementSibling-svg.svg
new file mode 100644
index 0000000..3e17cad
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-nextElementSibling-svg.svg
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"
+     xmlns:h="http://www.w3.org/1999/xhtml"
+     version="1.1"
+     width="100%" height="100%" viewBox="0 0 400 400">
+<title>nextElementSibling</title>
+<h:script src="/resources/testharness.js"/>
+<h:script src="/resources/testharnessreport.js"/>
+
+<text x="200" y="40" font-size="25" fill="black" text-anchor="middle">Test of nextElementSibling</text>
+<text id="parentEl" x="200" y="70" font-size="20" fill="black" text-anchor="middle">The result of <tspan id="first_element_child">this test</tspan> is <tspan id="last_element_child" font-weight="bold">unknown.</tspan></text>
+
+<h:script><![CDATA[
+test(function() {
+  var parentEl = document.getElementById("parentEl");
+  var fec = document.getElementById("first_element_child");
+  var nes = fec.nextElementSibling;
+  assert_true(!!nes)
+  assert_equals(nes.nodeType, 1)
+  assert_equals(nes.getAttribute("id"), "last_element_child")
+})
+]]></h:script>
+</svg>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-previousElementSibling-svg.svg b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-previousElementSibling-svg.svg
new file mode 100644
index 0000000..671d2c8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-previousElementSibling-svg.svg
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"
+     xmlns:h="http://www.w3.org/1999/xhtml"
+     version="1.1"
+     width="100%" height="100%" viewBox="0 0 400 400">
+<title>previousElementSibling</title>
+<h:script src="/resources/testharness.js"/>
+<h:script src="/resources/testharnessreport.js"/>
+
+<text x="200" y="40" font-size="25" fill="black" text-anchor="middle">Test of previousElementSibling</text>
+<text id="parentEl" x="200" y="70" font-size="20" fill="black" text-anchor="middle">The result of <tspan id="first_element_child">this test</tspan> is
+<tspan id="middle_element_child" font-weight="bold">unknown.</tspan>
+
+
+
+<tspan id="last_element_child" display="none">fnord</tspan> </text>
+
+<h:script><![CDATA[
+test(function() {
+  var parentEl = document.getElementById("parentEl");
+  var lec = document.getElementById("last_element_child");
+  var pes = lec.previousElementSibling;
+  assert_true(!!pes)
+  assert_equals(pes.nodeType, 1)
+  assert_equals(pes.getAttribute("id"), "middle_element_child")
+})
+]]></h:script>
+</svg>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-siblingElement-null-svg.svg b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-siblingElement-null-svg.svg
new file mode 100644
index 0000000..48c981b8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Element-siblingElement-null-svg.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"
+     xmlns:h="http://www.w3.org/1999/xhtml"
+     version="1.1"
+     width="100%" height="100%" viewBox="0 0 400 400">
+<title>Null test</title>
+<h:script src="/resources/testharness.js"/>
+<h:script src="/resources/testharnessreport.js"/>
+
+<text x="200" y="40" font-size="25" fill="black" text-anchor="middle">Test of previousElementSibling and nextElementSibling returning null</text>
+<text id="parentEl" x="200" y="70" font-size="20" fill="black" text-anchor="middle">The result of this test is <tspan id="first_element_child" font-weight="bold">unknown.</tspan></text>
+
+<h:script><![CDATA[
+test(function() {
+  var fec = document.getElementById("first_element_child");
+  assert_equals(fec.previousElementSibling, null)
+  assert_equals(fec.nextElementSibling, null)
+})
+]]></h:script>
+</svg>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin-0.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin-0.html
new file mode 100644
index 0000000..9e91722
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin-0.html
@@ -0,0 +1,34 @@
+<iframe id="test"></iframe>
+<script>
+var t = opener.t;
+var f = document.getElementById("test");
+var l = opener.document.getElementById("step_log");
+
+var log = function(t) {l.textContent += ("\n" + t)}
+var navigated = false;
+var steps = [
+  () => f.src = "browsing_context_name-1.html",
+  () => {
+    navigated = true;
+    opener.assert_equals(f.contentWindow.name, "test", "Initial load");
+    f.src = f.src.replace("http://", "http://www.").replace("browsing_context_name-1", "browsing_context_name-2");
+  },
+  () => {
+    // Can't test .name easily here because it's cross-origin
+    opener.assert_equals(history.length, 2);
+    history.back()
+  },
+  () => {
+    opener.assert_equals(f.contentWindow.name, "test", "After navigation");
+    t.done();
+  }
+].map((x, i) => t.step_func(() => {log("Step " + (i+1)); x()}));
+
+next = () => steps.shift()();
+
+onload = () => {
+  log("page load");
+  f.onload = () => {log("iframe onload"); next()};
+  setTimeout(next, 0);
+};
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin-expected.txt
index 0e98f21c..45b0cad 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin-expected.txt
@@ -1,4 +1,4 @@
 This is a testharness.js-based test.
-FAIL Restoring window.name on cross-origin history traversal assert_equals: After navigation expected "test" but got "test1"
+FAIL Restoring window.name on cross-origin history traversal assert_equals: expected 2 but got 1
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin.html
index 8ce8b11..caa0bce 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin.html
@@ -2,40 +2,12 @@
 <title>Restoring window.name on cross-origin history traversal</title>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
-<div id="log"></div>
 <pre id="step_log"></pre>
-<iframe id="test"></iframe>
+
 <script>
-
-var t = async_test(undefined, {timeout:10000});
-var f = document.getElementById("test");
-var l = document.getElementById("step_log");
-var navigated = false;
-
-log = function(t) {l.textContent += ("\n" + t)}
-
-var steps = [
-  function() {f.src = "browsing_context_name-1.html"},
-  function() {
-                navigated = true;
-                assert_equals(f.contentWindow.name, "test", "Initial load");
-                setTimeout(next, 0);
-              },
-  function() {f.src = f.src.replace("http://", "http://www.").replace("browsing_context_name-1", "browsing_context_name-2");},
-  function() {
-               setTimeout(next, 0);
-             },
-  function() {history.back(); setTimeout(next, 500)},
-  function() {
-               assert_equals(f.contentWindow.name, "test", "After navigation");
-               t.done();
-             }
-].map(function(x) {return t.step_func(function() {log("Step " + step); x()})});
-
-var step = 0;
-next = t.step_func(function() {steps[step++]()});
-
-f.onload=next;
-
-onload = function() { setTimeout(next, 0); };
+var t = async_test();
+t.step(() => {
+  var win = window.open("browsing_context_name_cross_origin-0.html");
+  t.add_cleanup(() => win.close());
+});
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-expected.txt
new file mode 100644
index 0000000..dded865
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+FAIL Check that browsing context has new, ready HTML document assert_equals: The document's encoding should be 'UTF-8'. expected "UTF-8" but got "windows-1252"
+PASS Check that new document nodes extant, empty 
+PASS Check the document properties corresponding to the creator browsing context 
+PASS Check the history.length of the created browsing context 
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-first-created-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-first-created-expected.txt
deleted file mode 100644
index d277316e..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-first-created-expected.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-This is a testharness.js-based test.
-PASS Check the history.length of the first created browsing context 
-FAIL Check the document's meta data assert_equals: The document's encoding should be 'UTF-8'. expected "UTF-8" but got "windows-1252"
-PASS Check the document's status 
-PASS Check the document's content 
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-window.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-window.html
new file mode 100644
index 0000000..f4f3c71
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-window.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<html>
+  <head>
+    <title>HTML Test: Newly-Created browsing context Window and `this`</title>
+    <link rel="author" title="Intel" href="http://www.intel.com/" />
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script src="/common/get-host-info.sub.js"></script>
+  </head>
+  <body>
+    <div id="log"></div>
+    <script>
+
+    /**
+     * Test for creating a new browsing context, [Browsing Contexts](#windows).
+     * This test is separate from the rest of the browsing-content-creation tests
+     * because the `iframe` has a src and thus its document won't be `about:blank`.
+     */
+    var doc, iframe;
+
+    setup(function () {
+      iframe = document.createElement("iframe");
+      iframe.src = get_host_info().HTTP_REMOTE_ORIGIN + "/html/browsers/windows/resources/browsing-context-window.html";
+      document.body.appendChild(iframe);
+      doc = iframe.contentDocument;
+    });
+
+    async_test(function (t) {
+      window.onmessage = t.step_func(function (e) {
+        assert_equals(e.data.thisWindowEquivalency, true, "The global `this` for the created browsing context should be a reference to Window through WindowProxy");
+        t.done();
+      });
+    });
+
+    </script>
+  </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-first-created.xhtml b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context.html
similarity index 81%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-first-created.xhtml
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context.html
index a059eec..ad3a01f 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-first-created.xhtml
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context.html
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<html xmlns="http://www.w3.org/1999/xhtml">
+<!doctype html>
+<html>
   <head>
     <title>HTML Test: Browsing context is first created</title>
     <link rel="author" title="Intel" href="http://www.intel.com/" />
@@ -9,34 +9,25 @@
   <body>
     <div id="log"></div>
     <script>
-    <![CDATA[
-
     var doc, iframe;
 
     setup(function () {
+      // Create new browsing context via iframe
       iframe = document.createElement("iframe");
       document.body.appendChild(iframe);
       doc = iframe.contentDocument;
     });
 
     test(function () {
-      assert_equals(iframe.contentWindow.history.length, 1, "The history.length should be 1.");
-    }, "Check the history.length of the first created browsing context");
-
-    test(function () {
+      assert_equals(doc.compatMode, "BackCompat", "The compatMode of a document without a document type declaration should be 'BackCompat'."); // Quirksmode
+      assert_equals(doc.contentType, "text/html", "The document should be an HTML document.");
+      assert_equals(doc.readyState, "complete", "The readyState attribute should be 'complete'.");
+      // Document metadata...
       assert_equals(doc.documentURI, "about:blank", "The document's address should be 'about:blank'.");
       assert_equals(doc.URL, "about:blank", "The document's address should be 'about:blank'.");
-      assert_equals(doc.contentType, "text/html", "The document should be an HTML document.");
       assert_equals(doc.doctype, null, "The docType of a document without a document type declaration should be null.");
-      assert_equals(doc.compatMode, "BackCompat", "The compatMode of a document without a document type declaration should be 'BackCompat'.");
       assert_equals(doc.characterSet, "UTF-8", "The document's encoding should be 'UTF-8'.");
-      assert_equals(iframe.contentWindow.parent.document, document);
-      assert_equals(doc.referrer, document.URL, "The document's referrer should be its creator document's address.");
-    }, "Check the document's meta data");
-
-    test(function () {
-      assert_equals(doc.readyState, "complete", "The readyState attribute should be 'complete'.");
-    }, "Check the document's status");
+    }, "Check that browsing context has new, ready HTML document");
 
     test(function () {
       assert_equals(doc.childNodes.length, 1, "The document must have only one child.");
@@ -46,9 +37,18 @@
       assert_false(doc.documentElement.childNodes[0].hasChildNodes(), "The HEAD element should not have children.");
       assert_equals(doc.documentElement.childNodes[1].tagName, "BODY", "The second child of HTML element should be a BODY element.");
       assert_false(doc.documentElement.childNodes[1].hasChildNodes(), "The BODY element should not have children.");
-    }, "Check the document's content");
+    }, "Check that new document nodes extant, empty");
 
-    ]]>
+    test(function () {
+      assert_equals(doc.origin, document.origin, "The document's origin should be its creator document's origin");
+      assert_equals(doc.referrer, document.URL, "The document's referrer should be its creator document's address.");
+      assert_equals(iframe.contentWindow.parent.document, document);
+    }, "Check the document properties corresponding to the creator browsing context");
+
+    test(function () {
+      assert_equals(iframe.contentWindow.history.length, 1, "The history.length should be 1.");
+    }, "Check the history.length of the created browsing context");
+
     </script>
   </body>
 </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/frameElement.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/frameElement.html
index f1d5581..04365e0 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/frameElement.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/frameElement.html
@@ -21,7 +21,7 @@
                   "The frameElement attribute should be the embed element.");
     assert_equals(document.getElementById("fr4").contentWindow[0].frameElement,
                   document.getElementById("fr4").contentDocument.getElementById("f1"),
-                  "The frameElement attribute should be the frame element in 'test.html'.");
+                  "The frameElement attribute should be the frame element in 'resources/frameElement-nested-frame.html'.");
   });
   t1.done();
 
@@ -50,19 +50,19 @@
 <body onload="on_load()">
   <div id="log"></div>
   <iframe id="fr1"></iframe>
-  <iframe id="fr2" src="test.html"></iframe> <!-- cross origin -->
+  <iframe id="fr2" src="resources/frameElement-nested-frame.html"></iframe> <!-- cross origin -->
   <iframe id="fr3" src="" style="display:none"></iframe>
   <object id="obj" name="win2" type="text/html" data="about:blank"></object>
   <embed id="emb" name="win3" type="image/svg+xml" src="/images/green.svg" />
-  <iframe id="fr4" src="test.html"></iframe> <!-- same origin -->
-  <iframe id="fr5" src="testcase3.html"></iframe> <!-- cross origin -->
+  <iframe id="fr4" src="resources/frameElement-nested-frame.html"></iframe> <!-- same origin -->
+  <iframe id="fr5" src="resources/frameElement-window-post.html"></iframe> <!-- cross origin -->
   <script>
 
   setup(function () {
     var src_base = get_host_info().HTTP_REMOTE_ORIGIN;
     src_base += document.location.pathname.substring(0, document.location.pathname.lastIndexOf("/") + 1);
-    document.getElementById("fr2").src = src_base + "test.html";
-    document.getElementById("fr5").src = src_base + "testcase3.html";
+    document.getElementById("fr2").src = src_base + "/resources/frameElement-nested-frame.html";
+    document.getElementById("fr5").src = src_base + "/resources/frameElement-window-post.html";
   });
 
   test(function () {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/test.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/resources/frameElement-nested-frame.html
similarity index 100%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/test.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/resources/frameElement-nested-frame.html
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/testcase3.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/resources/frameElement-window-post.html
similarity index 100%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/testcase3.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/resources/frameElement-window-post.html
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/resources/post-to-opener.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/resources/post-to-opener.html
new file mode 100644
index 0000000..65a825f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/resources/post-to-opener.html
@@ -0,0 +1,7 @@
+<script>
+  if (window.opener) {
+    window.opener.postMessage({
+      "parent_isTop": (window.parent === window)
+    }, "*");
+  }
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/window-parent-null.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/window-parent-null.html
new file mode 100644
index 0000000..42831208
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/window-parent-null.html
@@ -0,0 +1,66 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>window.parent: `null`</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(t => {
+  var iframe = document.createElement('iframe');
+  iframe.onload  = t.step_func_done(() => {
+    var iWindow = iframe.contentWindow;
+    assert_equals(iWindow.parent, window);
+    document.body.removeChild(iframe);
+    assert_equals(iWindow.parent, null);
+  });
+
+  document.body.appendChild(iframe);
+}, '`window.parent` is null when browsing context container element removed');
+
+async_test(t => {
+  var iframe = document.createElement('iframe');
+  var iframe2, removedEl;
+
+  var testFunc = t.step_func(() => {
+    var frameWindow = iframe.contentWindow;
+    var frame2Window = iframe2.contentWindow;
+
+    assert_equals(frameWindow.parent, window);
+    assert_equals(frame2Window.parent, frameWindow);
+
+    iframe.removeEventListener('load', nestFrame);
+    iframe2.removeEventListener('load', testFunc);
+    removedEl = document.body.removeChild(iframe);
+
+    assert_equals(frameWindow.parent, null);
+    assert_equals(frame2Window.parent, null);
+
+    removedEl.addEventListener('load', t.step_func_done(() => {
+      // reattached iframe's browsing context will report window.parent again
+      assert_equals(removedEl.contentWindow.parent, window);
+      // The following window s are no longer referenced by active browsing contexts
+      assert_equals(frameWindow.parent, null);
+      assert_equals(frame2Window.parent, null);
+      // Per #the-iframe-element, reattaching a removed iframe will result in the
+      // browser creating a new browsing context once again, with a fresh
+      // document in our case, so the second iframe or any other elements
+      // previously added to iframe.contentDocument will be gone
+      assert_equals(removedEl.contentDocument.querySelector('iframe'), null);
+      assert_equals(removedEl.contentDocument.querySelector('hr'), null);
+    }));
+    document.body.appendChild(removedEl);
+  });
+
+  var nestFrame = function () {
+    iframe.contentDocument.body.appendChild(document.createElement('hr'));
+    iframe2 = iframe.contentDocument.createElement('iframe');
+    // Workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=1229707
+    iframe2.src = '/common/blank.html';
+    iframe2.addEventListener('load', testFunc);
+    iframe.contentDocument.body.appendChild(iframe2);
+  };
+
+  iframe.addEventListener('load', nestFrame);
+  document.body.appendChild(iframe);
+}, '`window.parent` null when parent browsing context container removed');
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/window-parent.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/window-parent.html
new file mode 100644
index 0000000..a25c9f20
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/window-parent.html
@@ -0,0 +1,44 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>window.parent</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+ test(function() {
+   assert_equals(window, parent)
+ }, '`window.parent` for top-level browsing context');
+
+async_test(t => {
+  var iframe = document.createElement('iframe');
+  iframe.onload  = t.step_func_done(function () {
+    var iWindow = iframe.contentWindow;
+    assert_equals(iWindow.parent, window);
+  });
+  document.body.appendChild(iframe);
+}, '`window.parent` on single nested browsing context');
+
+async_test(t => {
+  var iframe = document.createElement('iframe');
+  var iframe2;
+
+  var testFunc = t.step_func_done(function () {
+    var frameWindow = iframe.contentWindow;
+    var frame2Window = iframe2.contentWindow;
+    assert_equals(frameWindow.parent, window);
+    assert_equals(frame2Window.parent, frameWindow);
+    assert_false(frame2Window.parent === window);
+  });
+
+  var nestFrame = function () {
+    iframe2 = iframe.contentDocument.createElement('iframe');
+    // Workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=1229707
+    iframe2.src = '/common/blank.html';
+    iframe2.addEventListener('load', testFunc);
+    iframe.contentDocument.body.appendChild(iframe2);
+  };
+
+  iframe.addEventListener('load', nestFrame);
+  document.body.appendChild(iframe);
+}, '`window.parent` for multiple nested browsing contexts');
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/window-top-null.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/window-top-null.html
new file mode 100644
index 0000000..cf7fcf2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/window-top-null.html
@@ -0,0 +1,66 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>window.top: `null`</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function (t) {
+  var iframe = document.createElement('iframe');
+  iframe.onload  = t.step_func_done(() => {
+    var iWindow = iframe.contentWindow;
+    /**
+     * `top` should return the top-level browsing context but will return
+     * `null` if none exists, such as when any of the BC's ancestor browsing
+     *  context container's document elements are disconnected/removed.
+     */
+    assert_equals(iWindow.top, window);
+    document.body.removeChild(iframe);
+    assert_equals(iWindow.top, null);
+  });
+
+  document.body.appendChild(iframe);
+}, '`window.top` is null when browsing context container element removed');
+
+async_test(t => {
+  var iframe = document.createElement('iframe');
+  var iframe2, removedEl;
+
+  var testFunc = t.step_func(() => {
+    var frameWindow = iframe.contentWindow;
+    var frame2Window = iframe2.contentWindow;
+
+    assert_equals(frameWindow.top, window);
+    assert_equals(frame2Window.top, window);
+
+    iframe.removeEventListener('load', nestFrame);
+    iframe2.removeEventListener('load', testFunc);
+
+    removedEl = document.body.removeChild(iframe);
+
+    assert_equals(frameWindow.top, null);
+    assert_equals(frame2Window.top, null);
+
+    removedEl.addEventListener('load', t.step_func_done(() => {
+      // reattached iframe's browsing context will report window.top
+      assert_equals(removedEl.contentWindow.top, window);
+      // removed/re-added iframes will have new browsing context / window
+      assert_equals(frameWindow.top, null);
+      assert_equals(frame2Window.top, null);
+    }));
+
+    document.body.appendChild(removedEl);
+  });
+
+  var nestFrame = function () {
+    iframe2 = iframe.contentDocument.createElement('iframe');
+    // Workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=1229707
+    iframe2.src = '/common/blank.html';
+    iframe2.addEventListener('load', testFunc);
+    iframe.contentDocument.body.appendChild(iframe2);
+  };
+
+  iframe.addEventListener('load', nestFrame);
+  document.body.appendChild(iframe);
+}, '`window.top`null when any ancestor browsing context container removed');
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/window-top-001.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/window-top.html
similarity index 92%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/window-top-001.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/window-top.html
index 9dbccfc..e5590ad 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/window-top-001.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/nested-browsing-contexts/window-top.html
@@ -43,6 +43,8 @@
       var doc = iframe.contentDocument;
       iframe2 = document.createElement("iframe");
       //iframe2.src = "data:text/html,"
+      // Workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=1229707
+      iframe2.src = '/common/blank.html';
 
       iframe2.onload = t2.step_func(
         function() {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/noreferrer-cross-origin-window-name.sub.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/noreferrer-cross-origin-window-name.sub.html
deleted file mode 100644
index 790c221..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/noreferrer-cross-origin-window-name.sub.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<meta charset=utf-8>
-<p>Follow this link to open a new browsing context and then confirm it says "idonteven":
-<a rel=noreferrer target=idonteven href="//天気の良い日.{{location[host]}}/html/browsers/windows/support-window-name-echo.html">link</a>.
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/noreferrer.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/noreferrer-null-opener.html
similarity index 92%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/noreferrer.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/noreferrer-null-opener.html
index c072486..f308abc0 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/noreferrer.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/noreferrer-null-opener.html
@@ -10,7 +10,7 @@
     var hyperlink = document.body.appendChild(document.createElement("a"))
     hyperlink.rel = "noreferrer"
     hyperlink.target = "_blank"
-    hyperlink.href = "support-opener-null.html"
+    hyperlink.href = "resources/window-opener.html"
     hyperlink.click()
     document.body.removeChild(hyperlink)
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/noreferrer-window-name.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/noreferrer-window-name.html
index 37aea98f..c13bae9d 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/noreferrer-window-name.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/noreferrer-window-name.html
@@ -11,7 +11,7 @@
       var hyperlink = document.body.appendChild(document.createElement("a"))
       hyperlink.rel = "noreferrer"
       hyperlink.target = "sufficientlyrandomwindownameamiright"
-      hyperlink.href = "support-named-null-opener.html#" + n
+      hyperlink.href = "resources/noreferrer-window-name.html#" + n
       return hyperlink
     }
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/resources/browsing-context-window.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/resources/browsing-context-window.html
new file mode 100644
index 0000000..c1594f63
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/resources/browsing-context-window.html
@@ -0,0 +1,7 @@
+<script>
+if (window.parent) {
+  window.parent.postMessage({
+    "thisWindowEquivalency": (window === this)
+  }, "*");
+}
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/support-window-name-echo.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/resources/echo-window-name.html
similarity index 100%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/support-window-name-echo.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/resources/echo-window-name.html
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/support-nested-browsing-contexts.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/resources/nested-post-to-opener.html
similarity index 100%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/support-nested-browsing-contexts.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/resources/nested-post-to-opener.html
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/support-named-null-opener.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/resources/noreferrer-window-name.html
similarity index 100%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/support-named-null-opener.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/resources/noreferrer-window-name.html
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/support-post-to-opener.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/resources/post-to-opener.html
similarity index 100%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/support-post-to-opener.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/resources/post-to-opener.html
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/support-open-cross-origin.sub.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/resources/target-cross-origin.sub.html
similarity index 63%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/support-open-cross-origin.sub.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/resources/target-cross-origin.sub.html
index 06137ef..8472f96 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/support-open-cross-origin.sub.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/resources/target-cross-origin.sub.html
@@ -1,3 +1,3 @@
 <meta charset=utf-8>
 <p>Follow this link to open a new browsing context in a separate origin.
-<a target=second href="{{location[scheme]}}://{{domains[www2]}}:{{location[port]}}/html/browsers/windows/support-open-cross-origin.sub.html">link</a>.
+<a target=second href="{{location[scheme]}}://{{domains[www2]}}:{{location[port]}}/html/browsers/windows/resources/target-cross-origin.sub.html">link</a>.
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/support-close.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/resources/window-close-button.html
similarity index 100%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/support-close.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/resources/window-close-button.html
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/support-opener-null.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/resources/window-opener.html
similarity index 100%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/support-opener-null.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/resources/window-opener.html
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/targeting-cross-origin-nested-browsing-contexts.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/targeting-cross-origin-nested-browsing-contexts.html
index e37a595..44d4fbad 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/targeting-cross-origin-nested-browsing-contexts.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/targeting-cross-origin-nested-browsing-contexts.html
@@ -15,7 +15,7 @@
         if (e.data.name == "openee") {
           var a = document.body.appendChild(document.createElement('a'));
           a.target = "nested1";
-          a.href = "support-post-to-opener.html";
+          a.href = "resources/post-to-opener.html";
           a.click();
           windowsToClose.push(e.source);
         } else {
@@ -31,7 +31,7 @@
 
       var a = document.body.appendChild(document.createElement('a'));
       a.target = "openee";
-      a.href = get_host_info().HTTP_REMOTE_ORIGIN + "/html/browsers/windows/support-nested-browsing-contexts.html";
+      a.href = get_host_info().HTTP_REMOTE_ORIGIN + "/html/browsers/windows/resources/nested-post-to-opener.html";
       a.click();
     });
   </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/margin-collapsing-quirks/compare-computed-style.js b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/margin-collapsing-quirks/compare-computed-style.js
new file mode 100644
index 0000000..b25993fb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/margin-collapsing-quirks/compare-computed-style.js
@@ -0,0 +1,6 @@
+var testStyle = getComputedStyle(document.getElementById('test'));
+var refStyle = getComputedStyle(document.getElementById('ref'));
+for (var prop in testStyle) {
+  assert_equals(testStyle[prop], refStyle[prop], prop);
+}
+done();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/margin-collapsing-quirks/multicol-quirks-mode.html b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/margin-collapsing-quirks/multicol-quirks-mode.html
new file mode 100644
index 0000000..905d7bc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/margin-collapsing-quirks/multicol-quirks-mode.html
@@ -0,0 +1,7 @@
+<title>multicol default styles (quirks mode)</title>
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#multicol">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<multicol id=test></multicol>
+<asdfasdf id=ref></asdfasdf>
+<script src="compare-computed-style.js"></script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/margin-collapsing-quirks/multicol-standards-mode.html b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/margin-collapsing-quirks/multicol-standards-mode.html
new file mode 100644
index 0000000..999cf42
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/margin-collapsing-quirks/multicol-standards-mode.html
@@ -0,0 +1,8 @@
+<!DOCTYPE html>
+<title>multicol default styles (standards mode)</title>
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#multicol">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<multicol id=test></multicol>
+<asdfasdf id=ref></asdfasdf>
+<script src="compare-computed-style.js"></script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/forms/textfieldselection/select-event.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/forms/textfieldselection/select-event.html
index b658bd4..6cfe52e8 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/forms/textfieldselection/select-event.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/forms/textfieldselection/select-event.html
@@ -76,7 +76,7 @@
         t.step_timeout(() => {
           el.onselect = null;
           resolve();
-        }, 100);
+        }, 200);
       });
     }, `${elLabel}: ${action.label} a second time (must not fire select)`);
   }
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/forms/the-select-element/common-HTMLOptionsCollection.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/forms/the-select-element/common-HTMLOptionsCollection.html
index 307b73f8..737e9be 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/forms/the-select-element/common-HTMLOptionsCollection.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/forms/the-select-element/common-HTMLOptionsCollection.html
@@ -96,4 +96,22 @@
 
 }, "Setting element by index should correctly append and replace elements");
 
+test(function () {
+    var selection = document.createElementNS("http://www.w3.org/1999/xhtml", "foo:select");
+
+    selection.length = 5;
+    assert_equals(selection.length, 5,
+                  "Number of nodes in collection should have changed");
+    for (var i = 0; i < 5; ++i) {
+        var child = selection.children[i];
+        assert_equals(child.localName, "option",
+                      "new child should be an option");
+        assert_equals(child.namespaceURI, "http://www.w3.org/1999/xhtml",
+                      "new child should be an HTML element");
+        assert_equals(child.prefix, null,
+                      "new child should not copy select's prefix");
+    }
+
+}, "Changing the length adds new nodes; The new nodes will not copy select's prefix");
+
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/interactive-elements/context-menus/contextmenu-event-manual.htm b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/interactive-elements/context-menus/contextmenu-event-manual.htm
new file mode 100644
index 0000000..2331fa1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/interactive-elements/context-menus/contextmenu-event-manual.htm
@@ -0,0 +1,21 @@
+<!doctype html>
+<html>
+  <head>
+    <title>HTML contextmenu event is a MouseEvent</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <style>#contextmenutarget { width: 100px; height: 100px; background-color: red; }</style>
+  </head>
+  <body>
+    <div id='contextmenutarget'>Trigger context menu in this box.</div>
+    <div id="log"></div>
+    <script type="text/javascript">
+var t = async_test('contextmenu event generated from user action is MouseEvent');
+document.querySelector("#contextmenutarget").addEventListener('contextmenu', t.step_func(function (e) {
+    assert_equals(e.constructor, window.MouseEvent);
+    document.querySelector("#contextmenutarget").style.backgroundColor = "green";
+    t.done();
+}));
+    </script>
+  </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/tabular-data/the-table-element/tFoot.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/tabular-data/the-table-element/tFoot.html
index d06e16f..e83d193 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/tabular-data/the-table-element/tFoot.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/tabular-data/the-table-element/tFoot.html
@@ -54,4 +54,12 @@
         t.tFoot = document.createElement("thead");
     });
 })
+
+test(function () {
+    var table = document.createElementNS("http://www.w3.org/1999/xhtml", "foo:table")
+    var tfoot = table.createTFoot();
+
+    assert_equals(table.tFoot, tfoot);
+    assert_equals(tfoot.prefix, null);
+});
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/tabular-data/the-table-element/tHead-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/tabular-data/the-table-element/tHead-expected.txt
index 1681200e3..f25d16f 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/tabular-data/the-table-element/tHead-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/tabular-data/the-table-element/tHead-expected.txt
@@ -1,5 +1,6 @@
 This is a testharness.js-based test.
 FAIL tHead tests Failed to set the 'tHead' property on 'HTMLTableElement': The new child element is null.
 PASS tHead tests 1 
+PASS tHead tests 2 
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/tabular-data/the-table-element/tHead.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/tabular-data/the-table-element/tHead.html
index ea2ebf12..78a8748 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/tabular-data/the-table-element/tHead.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/tabular-data/the-table-element/tHead.html
@@ -63,4 +63,12 @@
         t2.tHead = t2thead;
     });
 });
+
+test(function () {
+    var table = document.createElementNS("http://www.w3.org/1999/xhtml", "foo:table")
+    var thead = table.createTHead();
+
+    assert_equals(table.tHead, thead);
+    assert_equals(thead.prefix, null);
+});
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/tabular-data/the-tr-element/insertCell.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/tabular-data/the-tr-element/insertCell.html
index 07eac1e..7c2edc4a 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/tabular-data/the-tr-element/insertCell.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/tabular-data/the-tr-element/insertCell.html
@@ -52,4 +52,13 @@
   });
 }, "HTMLTableRowElement insertCell(cells.length + 1)");
 
+test(function () {
+  var table = document.createElementNS("http://www.w3.org/1999/xhtml", "foo:table")
+  var row = table.insertRow(0);
+  var cell = row.insertCell(0);
+
+  assert_equals(row.cells[0], cell);
+  assert_equals(cell.prefix, null);
+}, "HTMLTableRowElement insertCell will not copy table's prefix");
+
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/document-synthetic-errorevent.html b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/document-synthetic-errorevent.html
new file mode 100644
index 0000000..8b1b3cf
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/document-synthetic-errorevent.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Event handlers processing algorithm: error events</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-event-handler-processing-algorithm">
+<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
+
+<div id="log"></div>
+
+<script>
+"use strict";
+setup({ allow_uncaught_exception: true });
+
+promise_test(t => {
+  document.onerror = t.step_func((...args) => {
+    assert_equals(args.length, 1);
+    return true;
+  });
+
+  const eventWatcher = new EventWatcher(t, document, "error");
+  const promise = eventWatcher.wait_for("error").then(e => {
+    assert_equals(e.defaultPrevented, false);
+  });
+
+  document.dispatchEvent(new ErrorEvent("error", { cancelable: true }));
+
+  return promise;
+}, "error event is normal (return true does not cancel; one arg) on Document, with a synthetic ErrorEvent");
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/document-synthetic-event.html b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/document-synthetic-event.html
new file mode 100644
index 0000000..6cf44e9d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/document-synthetic-event.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Event handlers processing algorithm: error events</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-event-handler-processing-algorithm">
+<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
+
+<div id="log"></div>
+
+<script>
+"use strict";
+setup({ allow_uncaught_exception: true });
+
+promise_test(t => {
+  document.onerror = t.step_func((...args) => {
+    assert_equals(args.length, 1);
+    return true;
+  });
+
+  const eventWatcher = new EventWatcher(t, document, "error");
+  const promise = eventWatcher.wait_for("error").then(e => {
+    assert_equals(e.defaultPrevented, false);
+  });
+
+  document.dispatchEvent(new Event("error", { cancelable: true }));
+
+  return promise;
+}, "error event is normal (return true does not cancel; one arg) on Document, with a synthetic Event");
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/resources/no-op-worker.js b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/resources/no-op-worker.js
new file mode 100644
index 0000000..3918c74
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/resources/no-op-worker.js
@@ -0,0 +1 @@
+"use strict";
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/resources/worker-with-syntax-error.js b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/resources/worker-with-syntax-error.js
new file mode 100644
index 0000000..dc9a0db
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/resources/worker-with-syntax-error.js
@@ -0,0 +1 @@
+< 3;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/script-element.html b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/script-element.html
new file mode 100644
index 0000000..f3ef116
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/script-element.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Event handlers processing algorithm: error events</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-event-handler-processing-algorithm">
+<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
+
+<div id="log"></div>
+
+<script>
+"use strict";
+
+promise_test(t => {
+  const script = document.createElement("script");
+  script.onerror = t.step_func((...args) => {
+    assert_equals(args.length, 1);
+    return true;
+  });
+
+  const eventWatcher = new EventWatcher(t, script, "error");
+  const promise = eventWatcher.wait_for("error").then(e => {
+    assert_equals(e.constructor, Event); // not ErrorEvent
+    assert_equals(e.defaultPrevented, false);
+  });
+
+  script.src = "404.js";
+  document.body.appendChild(script);
+
+  return promise;
+}, "error event behaves normally (return true does not cancel; one arg) on a script element, with a 404 error");
+
+promise_test(t => {
+  const script = document.createElement("script");
+  script.onerror = t.step_func((...args) => {
+    assert_equals(args.length, 1);
+    return true;
+  });
+
+  const eventWatcher = new EventWatcher(t, script, "error");
+  const promise = eventWatcher.wait_for("error").then(e => {
+    assert_equals(e.defaultPrevented, false);
+  });
+
+  script.dispatchEvent(new Event("error", { cancelable: true }));
+
+  return promise;
+}, "error event behaves normally (return true does not cancel; one arg) on a script element, with a synthetic Event");
+
+promise_test(t => {
+  const script = document.createElement("script");
+  script.onerror = t.step_func((...args) => {
+    assert_equals(args.length, 1);
+    return true;
+  });
+
+  const eventWatcher = new EventWatcher(t, script, "error");
+  const promise = eventWatcher.wait_for("error").then(e => {
+    assert_equals(e.defaultPrevented, false);
+  });
+
+  script.dispatchEvent(new ErrorEvent("error", { cancelable: true }));
+
+  return promise;
+}, "error event behaves normally (return true does not cancel; one arg) on a script element, with a synthetic ErrorEvent");
+
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/window-runtime-error.html b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/window-runtime-error.html
new file mode 100644
index 0000000..1b387ca
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/window-runtime-error.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Event handlers processing algorithm: error events</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-event-handler-processing-algorithm">
+<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
+
+<div id="log"></div>
+
+<script>
+"use strict";
+setup({ allow_uncaught_exception: true });
+
+promise_test(t => {
+  window.onerror = t.step_func((...args) => {
+    assert_greater_than(args.length, 1);
+    return true;
+  });
+
+  const eventWatcher = new EventWatcher(t, window, "error");
+  const promise = eventWatcher.wait_for("error").then(e => {
+    assert_equals(e.defaultPrevented, true);
+  });
+
+  setTimeout(() => thisFunctionDoesNotExist(), 0);
+
+  return promise;
+}, "error event is weird (return true cancels; many args) on Window, with a runtime error");
+
+promise_test(t => {
+  window.onerror = t.step_func(function (message, filename, lineno, colno, error) {
+    assert_equals(arguments.length, 5, "There must be exactly 5 arguments");
+    assert_equals(typeof message, "string", "message argument must be a string");
+    assert_equals(typeof filename, "string", "filename argument must be a string");
+    assert_equals(typeof lineno, "number", "lineno argument must be a number");
+    assert_equals(typeof colno, "number", "colno argument must be a number");
+    assert_equals(typeof error, "object", "error argument must be an object");
+    assert_equals(error.constructor, ReferenceError, "error argument must be a ReferenceError");
+    return true;
+  });
+
+  setTimeout(() => thisFunctionDoesNotExist(), 0);
+
+  const eventWatcher = new EventWatcher(t, window, "error");
+  return eventWatcher.wait_for("error");
+}, "error event has the right 5 args on Window, with a runtime error");
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/window-synthetic-errorevent.html b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/window-synthetic-errorevent.html
new file mode 100644
index 0000000..2d62d8a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/window-synthetic-errorevent.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Event handlers processing algorithm: error events</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-event-handler-processing-algorithm">
+<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
+
+<div id="log"></div>
+
+<script>
+"use strict";
+setup({ allow_uncaught_exception: true });
+
+promise_test(t => {
+  window.onerror = t.step_func((...args) => {
+    assert_greater_than(args.length, 1);
+    return true;
+  });
+
+  const eventWatcher = new EventWatcher(t, window, "error");
+  const promise = eventWatcher.wait_for("error").then(e => {
+    assert_equals(e.defaultPrevented, true);
+  });
+
+  window.dispatchEvent(new ErrorEvent("error", { cancelable: true }));
+
+  return promise;
+}, "error event is weird (return true cancels; many args) on Window, with a synthetic ErrorEvent");
+
+promise_test(t => {
+  const theError = { the: "error object" };
+
+  window.onerror = t.step_func(function (message, filename, lineno, colno, error) {
+    assert_equals(arguments.length, 5, "There must be exactly 5 arguments");
+    assert_equals(message, "message");
+    assert_equals(filename, "filename");
+    assert_equals(lineno, 1);
+    assert_equals(colno, 2);
+    assert_equals(error, theError);
+    return true;
+  });
+
+  const eventWatcher = new EventWatcher(t, window, "error");
+  const promise = eventWatcher.wait_for("error");
+
+  window.dispatchEvent(new ErrorEvent("error", {
+    message: "message",
+    filename: "filename",
+    lineno: 1,
+    colno: 2,
+    error: theError
+  }));
+
+  return promise;
+}, "error event has the right 5 args on Window, with a synthetic ErrorEvent");
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/window-synthetic-event-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/window-synthetic-event-expected.txt
new file mode 100644
index 0000000..907dafe
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/window-synthetic-event-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL error event is normal (return true does not cancel; one arg) on Window, with a synthetic Event assert_equals: expected false but got true
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/window-synthetic-event.html b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/window-synthetic-event.html
new file mode 100644
index 0000000..0bcc7def
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/window-synthetic-event.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Event handlers processing algorithm: error events</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-event-handler-processing-algorithm">
+<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
+
+<div id="log"></div>
+
+<script>
+"use strict";
+setup({ allow_uncaught_exception: true });
+
+promise_test(t => {
+  window.onerror = t.step_func((...args) => {
+    assert_equals(args.length, 1);
+    return true;
+  });
+
+  const eventWatcher = new EventWatcher(t, window, "error");
+  const promise = eventWatcher.wait_for("error").then(e => {
+    assert_equals(e.defaultPrevented, false);
+  });
+
+  window.dispatchEvent(new Event("error", { cancelable: true }));
+
+  return promise;
+}, "error event is normal (return true does not cancel; one arg) on Window, with a synthetic Event");
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/worker.html b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/worker.html
new file mode 100644
index 0000000..a8c0d97c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/worker.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Event handlers processing algorithm: error events</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-event-handler-processing-algorithm">
+<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
+
+<div id="log"></div>
+
+<script>
+"use strict";
+setup({ allow_uncaught_exception: true });
+
+promise_test(t => {
+  const worker = new Worker("resources/worker-with-syntax-error.js");
+  worker.onerror = t.step_func((...args) => {
+    assert_equals(args.length, 1);
+    return true;
+  });
+
+  const eventWatcher = new EventWatcher(t, worker, "error");
+  const promise = eventWatcher.wait_for("error").then(e => {
+    assert_equals(e.defaultPrevented, false);
+  });
+
+  return promise;
+}, "error event is normal (return true does not cancel; one arg) on Worker, with a syntax error in the worker code");
+
+promise_test(t => {
+  const worker = new Worker("resources/no-op-worker.js");
+  worker.onerror = t.step_func((...args) => {
+    assert_equals(args.length, 1);
+    return true;
+  });
+
+  const eventWatcher = new EventWatcher(t, worker, "error");
+  const promise = eventWatcher.wait_for("error").then(e => {
+    assert_equals(e.defaultPrevented, false);
+  });
+
+  worker.dispatchEvent(new Event("error", { cancelable: true }));
+
+  return promise;
+}, "error event is normal (return true does not cancel; one arg) on Worker, with a synthetic Event");
+
+promise_test(t => {
+  const worker = new Worker("resources/no-op-worker.js");
+  worker.onerror = t.step_func((...args) => {
+    assert_equals(args.length, 1);
+    return true;
+  });
+
+  const eventWatcher = new EventWatcher(t, worker, "error");
+  const promise = eventWatcher.wait_for("error").then(e => {
+    assert_equals(e.defaultPrevented, false);
+  });
+
+  worker.dispatchEvent(new ErrorEvent("error", { cancelable: true }));
+
+  return promise;
+}, "error event is normal (return true does not cancel; one arg) on Worker, with a synthetic ErrorEvent");
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/workerglobalscope-runtime-error.worker.js b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/workerglobalscope-runtime-error.worker.js
new file mode 100644
index 0000000..264fef81
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/workerglobalscope-runtime-error.worker.js
@@ -0,0 +1,40 @@
+"use strict";
+importScripts("/resources/testharness.js");
+
+setup({ allow_uncaught_exception: true });
+
+promise_test(t => {
+  self.onerror = t.step_func((...args) => {
+    assert_greater_than(args.length, 1);
+    return true;
+  });
+
+  const eventWatcher = new EventWatcher(t, self, "error");
+  const promise = eventWatcher.wait_for("error").then(e => {
+    assert_equals(e.defaultPrevented, true);
+  });
+
+  setTimeout(() => thisFunctionDoesNotExist(), 0);
+
+  return promise;
+}, "error event is weird (return true cancels; many args) on WorkerGlobalScope, with a runtime error");
+
+promise_test(t => {
+  self.onerror = t.step_func(function (message, filename, lineno, colno, error) {
+    assert_equals(arguments.length, 5, "There must be exactly 5 arguments");
+    assert_equals(typeof message, "string", "message argument must be a string");
+    assert_equals(typeof filename, "string", "filename argument must be a string");
+    assert_equals(typeof lineno, "number", "lineno argument must be a number");
+    assert_equals(typeof colno, "number", "colno argument must be a number");
+    assert_equals(typeof error, "object", "error argument must be an object");
+    assert_equals(error.constructor, ReferenceError, "error argument must be a ReferenceError");
+    return true;
+  });
+
+  setTimeout(() => thisFunctionDoesNotExist(), 0);
+
+  const eventWatcher = new EventWatcher(t, self, "error");
+  return eventWatcher.wait_for("error");
+}, "error event has the right 5 args on WorkerGlobalScope, with a runtime error");
+
+done();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/workerglobalscope-synthetic-errorevent.worker.js b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/workerglobalscope-synthetic-errorevent.worker.js
new file mode 100644
index 0000000..a14f6e0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/workerglobalscope-synthetic-errorevent.worker.js
@@ -0,0 +1,49 @@
+"use strict";
+importScripts("/resources/testharness.js");
+
+setup({ allow_uncaught_exception: true });
+
+promise_test(t => {
+  self.onerror = t.step_func((...args) => {
+    assert_greater_than(args.length, 1);
+    return true;
+  });
+
+  const eventWatcher = new EventWatcher(t, self, "error");
+  const promise = eventWatcher.wait_for("error").then(e => {
+    assert_equals(e.defaultPrevented, true);
+  });
+
+  self.dispatchEvent(new ErrorEvent("error", { cancelable: true }));
+
+  return promise;
+}, "error event is weird (return true cancels; many args) on WorkerGlobalScope, with a synthetic ErrorEvent");
+
+promise_test(t => {
+  const theError = { the: "error object" };
+
+  self.onerror = t.step_func(function (message, filename, lineno, colno, error) {
+    assert_equals(arguments.length, 5, "There must be exactly 5 arguments");
+    assert_equals(message, "message");
+    assert_equals(filename, "filename");
+    assert_equals(lineno, 1);
+    assert_equals(colno, 2);
+    assert_equals(error, theError);
+    return true;
+  });
+
+  const eventWatcher = new EventWatcher(t, self, "error");
+  const promise = eventWatcher.wait_for("error");
+
+  self.dispatchEvent(new ErrorEvent("error", {
+    message: "message",
+    filename: "filename",
+    lineno: 1,
+    colno: 2,
+    error: theError
+  }));
+
+  return promise;
+}, "error event has the right 5 args on WorkerGlobalScope, with a synthetic ErrorEvent");
+
+done();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/workerglobalscope-synthetic-event.worker.js b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/workerglobalscope-synthetic-event.worker.js
new file mode 100644
index 0000000..a3e16de
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/workerglobalscope-synthetic-event.worker.js
@@ -0,0 +1,22 @@
+"use strict";
+importScripts("/resources/testharness.js");
+
+setup({ allow_uncaught_exception: true });
+
+promise_test(t => {
+  self.onerror = t.step_func((...args) => {
+    assert_equals(args.length, 1);
+    return true;
+  });
+
+  const eventWatcher = new EventWatcher(t, self, "error");
+  const promise = eventWatcher.wait_for("error").then(e => {
+    assert_equals(e.defaultPrevented, false);
+  });
+
+  self.dispatchEvent(new Event("error", { cancelable: true }));
+
+  return promise;
+}, "error event is normal (return true does not cancel; one arg) on WorkerGlobalScope, with a synthetic Event");
+
+done();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-expected.txt
deleted file mode 100644
index 98d71d5..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-expected.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-This is a testharness.js-based test.
-FAIL mouseover listener returning true cancels event assert_equals: expected true but got false
-FAIL mouseover listener returning false doesn't cancel event assert_equals: expected false but got true
-PASS click listener returning false cancels event 
-PASS blur listener returning false cancels event 
-PASS dblclick listener returning false cancels event 
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-manual.html b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-manual.html
new file mode 100644
index 0000000..205e876
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-manual.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Event handlers processing algorithm: manual tests</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-event-handler-processing-algorithm">
+<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
+
+<style>
+  div[id^="d"] {
+    width: 100px;
+    height: 100px;
+    background-color: blue;
+  }
+</style>
+
+<div id="log"></div>
+
+<p>Mouseover these four divs</p>
+
+<div id="d1"></div>
+<div id="d2"></div>
+
+<div id="d3" onmouseover="return false"></div>
+<div id="d4" onmouseover="return true"></div>
+
+<script>
+"use strict";
+async_test(t => {
+  const div = document.querySelector("#d1");
+
+  div.onmouseover = t.step_func(() => false);
+  div.addEventListener("mouseover", t.step_func_done(e => {
+    assert_equals(e.defaultPrevented, true);
+  }));
+}, "Listener added via JavaScript, returns false: cancels the event");
+
+async_test(t => {
+  const div = document.querySelector("#d2");
+
+  div.onmouseover = t.step_func(() => true);
+  div.addEventListener("mouseover", t.step_func_done(e => {
+    assert_equals(e.defaultPrevented, false);
+  }));
+}, "Listener added via JavaScript, returns true: does not cancel the event");
+
+async_test(t => {
+  const div = document.querySelector("#d3");
+
+  div.addEventListener("mouseover", t.step_func_done(e => {
+    assert_equals(e.defaultPrevented, true);
+  }));
+}, "Listener added via markup, returns false: cancels the event");
+
+async_test(t => {
+  const div = document.querySelector("#d4");
+
+  div.addEventListener("mouseover", t.step_func_done(e => {
+    assert_equals(e.defaultPrevented, false);
+  }));
+}, "Listener added via markup, returns true: does not cancel the event");
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm.html b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm.html
index 0a9403e..f5423d7e 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm.html
@@ -5,45 +5,56 @@
  <body>
  <div id="foo" style="width: 100px; height: 100px; background-color: black"></div>
  <script>
- async_test(function(t) {
+
+ // Historically mouseover was special in the spec, but now it is not. See https://github.com/whatwg/html/pull/2398.
+ test(function(t) {
+     var ev = new Event('mouseover', {cancelable: true});
+     document.getElementById("foo").onmouseover = t.step_func(function() { return false });
+     document.getElementById("foo").dispatchEvent(ev);
+     assert_equals(ev.defaultPrevented, true)
+ }, "mouseover listener returning false cancels event (using Event)");
+
+ test(function(t) {
+     var ev = new MouseEvent('mouseover', {cancelable: true});
+     document.getElementById("foo").onmouseover = t.step_func(function() { return false });
+     document.getElementById("foo").dispatchEvent(ev);
+     assert_equals(ev.defaultPrevented, true)
+ }, "mouseover listener returning false cancels event (using MouseEvent)");
+
+ test(function(t) {
      var ev = new Event('mouseover', {cancelable: true});
      document.getElementById("foo").onmouseover = t.step_func(function() { return true });
      document.getElementById("foo").dispatchEvent(ev);
-     assert_equals(ev.defaultPrevented, true)
-     t.done();
- }, "mouseover listener returning true cancels event");
+     assert_equals(ev.defaultPrevented, false)
+ }, "mouseover listener returning true doesn't cancel event (using Event)");
 
- async_test(function(t) {
-     var ev = new Event('mouseover', {cancelable: true});
-     document.getElementById("foo").onmouseover = t.step_func(function() { return false; });
+ test(function(t) {
+     var ev = new MouseEvent('mouseover', {cancelable: true});
+     document.getElementById("foo").onmouseover = t.step_func(function() { return true });
      document.getElementById("foo").dispatchEvent(ev);
-     assert_equals(ev.defaultPrevented, false);
-     t.done();
- }, "mouseover listener returning false doesn't cancel event");
+     assert_equals(ev.defaultPrevented, false)
+ }, "mouseover listener returning true doesn't cancel event (using MouseEvent)");
 
  // beforeunload is tested in html/browsers/browsing-the-web/unloading-documents/beforeunload-canceling.html
 
- async_test(function(t) {
+ test(function(t) {
      var ev = new Event("click", {cancelable: true});
      document.getElementById("foo").onclick = t.step_func(function() { return false; });
      document.getElementById("foo").dispatchEvent(ev);
      assert_equals(ev.defaultPrevented, true);
-     t.done();
  }, "click listener returning false cancels event");
 
- async_test(function(t) {
+ test(function(t) {
      var ev = new Event("blur", {cancelable: true});
      document.getElementById("foo").onblur = t.step_func(function() { return false; });
      document.getElementById("foo").dispatchEvent(ev);
      assert_equals(ev.defaultPrevented, true);
-     t.done();
  }, "blur listener returning false cancels event");
 
- async_test(function(t) {
+ test(function(t) {
      var ev = new Event("dblclick", {cancelable: true});
      document.getElementById("foo").ondblclick = t.step_func(function() { return false; });
      document.getElementById("foo").dispatchEvent(ev);
      assert_equals(ev.defaultPrevented, true);
-     t.done();
  }, "dblclick listener returning false cancels event");
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/images/pattern.ogv b/third_party/WebKit/LayoutTests/external/wpt/images/pattern.ogv
new file mode 100644
index 0000000..8e3a7598
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/images/pattern.ogv
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/external/wpt/images/pattern.png b/third_party/WebKit/LayoutTests/external/wpt/images/pattern.png
new file mode 100644
index 0000000..65ce5b4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/images/pattern.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/failing-test-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/failing-test-expected.txt
new file mode 100644
index 0000000..d9c0c0b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/failing-test-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Failing test assert_unreached: Expected failure Reached unreachable code
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/failing-test.html b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/failing-test.html
new file mode 100644
index 0000000..249099c0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/failing-test.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Failing test</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+test(function() {
+  assert_unreached("Expected failure");
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest-wait-ref.html b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest-wait-ref.html
new file mode 100644
index 0000000..6772c2c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest-wait-ref.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<title>Reference for Test infrastructure should support 'reftest-wait'</title>
+<style>
+.marker {
+    margin-bottom: 10px;
+    background: green;
+    height: 50px;
+    width: 50px;
+}
+</style>
+
+<div class="marker"></div>
+<div>The box above should be green.</div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest-wait.html b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest-wait.html
new file mode 100644
index 0000000..c2e9986
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest-wait.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<title>Test infrastructure should support 'reftest-wait'</title>
+<link rel="match" href="reftest-wait-ref.html">
+<style>
+.marker {
+    margin-bottom: 10px;
+    background: red;
+    height: 50px;
+    width: 50px;
+}
+</style>
+<script>
+setTimeout(function() {
+    document.querySelector(".marker").style.background = 'green';
+    document.documentElement.classList.remove("reftest-wait");
+}, 1000);
+</script>
+<div class="marker"></div>
+<div>The box above should be green.</div>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/innerText/getter-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/innerText/getter-expected.txt
index e03d7224..3859073f 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/innerText/getter-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/innerText/getter-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 205 tests; 125 PASS, 80 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 206 tests; 125 PASS, 81 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS Simplest possible test ("<div>abc") 
 PASS Leading whitespace removed ("<div> abc") 
 PASS Trailing whitespace removed ("<div>abc ") 
@@ -14,6 +14,7 @@
 PASS \n preserved ("<pre>abc\ndef") 
 PASS \r converted to newline ("<pre>abc\rdef") 
 PASS \t preserved ("<pre>abc\tdef") 
+FAIL Two <pre> siblings ("<div><pre>abc</pre><pre>def</pre>") assert_equals: expected "abc\ndef" but got "abc\ndef\n"
 PASS Leading whitespace preserved ("<div style='white-space:pre'> abc") 
 PASS Trailing whitespace preserved ("<div style='white-space:pre'>abc ") 
 PASS Internal whitespace preserved ("<div style='white-space:pre'>abc  def") 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/innerText/getter-tests.js b/third_party/WebKit/LayoutTests/external/wpt/innerText/getter-tests.js
index 1e190c09..7882be4 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/innerText/getter-tests.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/innerText/getter-tests.js
@@ -18,6 +18,7 @@
 testText("<pre>abc\ndef", "abc\ndef", "\\n preserved");
 testText("<pre>abc\rdef", "abc\ndef", "\\r converted to newline");
 testText("<pre>abc\tdef", "abc\tdef", "\\t preserved");
+testText("<div><pre>abc</pre><pre>def</pre>", "abc\ndef", "Two <pre> siblings");
 
 /**** <div style="white-space:pre"> ****/
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/innerText/setter-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/innerText/setter-expected.txt
index 2b43c657..1790f07 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/innerText/setter-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/innerText/setter-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 56 tests; 55 PASS, 1 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 62 tests; 56 PASS, 6 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS Simplest possible test 
 PASS Newlines convert to <br> in non-white-space:pre elements 
 PASS Newlines convert to <br> in <pre> element 
@@ -7,8 +7,8 @@
 PASS CRs convert to <br> in non-white-space:pre elements 
 PASS CRs convert to <br> in <pre> element 
 PASS Newline/CR pair converts to <br> in non-white-space:pre element 
-PASS Newline/newline pair converts to two <br>s in non-white-space:pre element 
-PASS CR/CR pair converts to two <br>s in non-white-space:pre element 
+FAIL Newline/newline pair converts to two <br>s in non-white-space:pre element assert_not_equals: Should not have empty text nodes got disallowed value ""
+FAIL CR/CR pair converts to two <br>s in non-white-space:pre element assert_not_equals: Should not have empty text nodes got disallowed value ""
 PASS CRs convert to <br> in white-space:pre element 
 PASS < preserved 
 PASS > preserved 
@@ -27,6 +27,12 @@
 PASS Assigning the empty string 
 PASS Assigning null 
 PASS Assigning undefined 
+FAIL Start with CR assert_not_equals: Should not have empty text nodes got disallowed value ""
+FAIL Start with LF assert_not_equals: Should not have empty text nodes got disallowed value ""
+FAIL Start with CRLF assert_not_equals: Should not have empty text nodes got disallowed value ""
+PASS End with CR 
+PASS End with LF 
+PASS End with CRLF 
 PASS innerText on <area> element 
 PASS innerText on <base> element 
 PASS innerText on <basefont> element 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/innerText/setter-tests.js b/third_party/WebKit/LayoutTests/external/wpt/innerText/setter-tests.js
index 7042f05f..9671b23c 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/innerText/setter-tests.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/innerText/setter-tests.js
@@ -25,6 +25,12 @@
 testHTML("<div>", "", "", "Assigning the empty string");
 testHTML("<div>", null, "", "Assigning null");
 testHTML("<div>", undefined, "undefined", "Assigning undefined");
+testHTML("<div>", "\rabc", "<br>abc", "Start with CR");
+testHTML("<div>", "\nabc", "<br>abc", "Start with LF");
+testHTML("<div>", "\r\nabc", "<br>abc", "Start with CRLF");
+testHTML("<div>", "abc\r", "abc<br>", "End with CR");
+testHTML("<div>", "abc\n", "abc<br>", "End with LF");
+testHTML("<div>", "abc\r\n", "abc<br>", "End with CRLF");
 
 // Setting innerText on these should not throw
 ["area", "base", "basefont", "bgsound", "br", "col", "embed", "frame", "hr",
diff --git a/third_party/WebKit/LayoutTests/external/wpt/innerText/setter.html b/third_party/WebKit/LayoutTests/external/wpt/innerText/setter.html
index c2ffb37..b8ff0c9 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/innerText/setter.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/innerText/setter.html
@@ -36,6 +36,13 @@
   test(function(){
     var e = setupTest(context, plain)[0];
     assert_equals(e.innerHTML, expectedHTML);
+    var child = e.firstChild;
+    while (child) {
+      if (child.nodeType === Node.TEXT_NODE) {
+        assert_not_equals(child.data, "", "Should not have empty text nodes");
+      }
+      child = child.nextSibling;
+    }
   }, msg);
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-attributes-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-attributes-expected.txt
new file mode 100644
index 0000000..f34fa8d2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-attributes-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Performance longtask entries are observable assert_equals: expected "same-origin-self" but got "self"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-attributes.html b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-attributes.html
new file mode 100644
index 0000000..5f4d89d5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-attributes.html
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>LongTask Timing: validate long task attributes</title>
+<body>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<h1>Long Task Attributes</h1>
+<div id="log"></div>
+<script>
+  async_test(function (t) {
+    var observer = new PerformanceObserver(
+        t.step_func(function (entryList) {
+            var entries = entryList.getEntries();
+            assert_equals(entries.length, 1,
+                "Exactly one entry is expected.");
+            var longtask = entries[0];
+            assert_equals(longtask.entryType, "longtask");
+            assert_equals(longtask.name, "same-origin-self");
+            assert_greater_than(longtask.duration, 50);
+            assert_equals(longtask.startTime, Math.floor(longtask.startTime),
+                "startTime expected to have 1 millisecond granularity");
+
+            // Assert the TaskAttributionTiming entry in attribution.
+            assert_equals(longtask.attribution.length, 1,
+                "Exactly one attribution entry is expected");
+            var attribution = longtask.attribution[0];
+            assert_equals(attribution.entryType, "taskattribution");
+            assert_equals(attribution.name, "frame");
+            assert_equals(attribution.duration, 0);
+            assert_equals(attribution.startTime, 0);
+            assert_equals(attribution.frameId, "");
+            assert_equals(attribution.frameName, "");
+            assert_equals(attribution.frameSrc, "");
+            observer.disconnect();
+            t.done();
+        })
+    );
+    observer.observe({entryTypes: ["longtask"]});
+
+    /* Generate a slow task */
+    var begin = window.performance.now();
+    while (window.performance.now() < begin + 51);
+
+}, "Performance longtask entries are observable");
+</script>
+
+</body>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-childiframe-crossorigin.html b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-childiframe-crossorigin.html
new file mode 100644
index 0000000..7a627c6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-childiframe-crossorigin.html
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>LongTask Timing: long task in nested child iframe</title>
+<body>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<h1>Long Task in Nested Cross-Origin Child Iframe</h1>
+<div id="log"></div>
+<script>
+  async_test(function (t) {
+    var observer = new PerformanceObserver(
+        t.step_func(function (entryList) {
+            var entries = entryList.getEntries();
+            assert_equals(entries.length, 1,
+                "Exactly one entry is expected.");
+            var longtask = entries[0];
+            assert_equals(longtask.entryType, "longtask");
+            assert_equals(longtask.name, "cross-origin-descendant");
+            assert_greater_than(longtask.duration, 50);
+            assert_equals(longtask.startTime, Math.floor(longtask.startTime),
+                "startTime expected to have 1 millisecond granularity");
+
+            // Assert the TaskAttributionTiming entry in attribution.
+            assert_equals(longtask.attribution.length, 1,
+                "Exactly one attribution entry is expected");
+            var attribution = longtask.attribution[0];
+            assert_equals(attribution.entryType, "taskattribution");
+            assert_equals(attribution.name, "frame");
+            assert_equals(attribution.duration, 0);
+            assert_equals(attribution.startTime, 0);
+            assert_equals(attribution.frameId, "child-iframe-id");
+            assert_equals(attribution.frameName, "child-iframe-name");
+            assert_equals(attribution.frameSrc, "http://www1.web-platform.test:8000/longtask-timing/resources/subframe-with-longtask.html");
+            observer.disconnect();
+            t.done();
+        })
+    );
+    observer.observe({entryTypes: ["longtask"]});
+
+}, "Performance longtask entries in child iframe are observable in parent");
+</script>
+
+<!--TODO(panicker): simulate cross-origin instead -->
+<iframe src="http://www1.web-platform.test:8000/longtask-timing/resources/subframe-with-longtask.html" id="child-iframe-id" name="child-iframe-name"></iframe>
+
+</body>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-childiframe-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-childiframe-expected.txt
new file mode 100644
index 0000000..8157a5a9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-childiframe-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Performance longtask entries in child iframe are observable in parent assert_equals: expected "same-origin-descendant" but got "multiple-contexts"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-childiframe.html b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-childiframe.html
new file mode 100644
index 0000000..53c27c3b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-childiframe.html
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>LongTask Timing: long task in nested child iframe</title>
+<body>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<h1>Long Task in Nested Child Iframe</h1>
+<div id="log"></div>
+<script>
+  async_test(function (t) {
+    var observer = new PerformanceObserver(
+        t.step_func(function (entryList) {
+            var entries = entryList.getEntries();
+            assert_equals(entries.length, 1,
+                "Exactly one entry is expected.");
+            var longtask = entries[0];
+            assert_equals(longtask.entryType, "longtask");
+            assert_equals(longtask.name, "same-origin-descendant");
+            assert_greater_than(longtask.duration, 50);
+            assert_equals(longtask.startTime, Math.floor(longtask.startTime),
+                "startTime expected to have 1 millisecond granularity");
+
+            // Assert the TaskAttributionTiming entry in attribution.
+            assert_equals(longtask.attribution.length, 1,
+                "Exactly one attribution entry is expected");
+            var attribution = longtask.attribution[0];
+            assert_equals(attribution.entryType, "taskattribution");
+            assert_equals(attribution.name, "frame");
+            assert_equals(attribution.duration, 0);
+            assert_equals(attribution.startTime, 0);
+            assert_equals(attribution.frameId, "child-iframe-id");
+            assert_equals(attribution.frameName, "child-iframe-name");
+            assert_equals(attribution.frameSrc, "resources/subframe-with-longtask.html");
+            observer.disconnect();
+            t.done();
+        })
+    );
+    observer.observe({entryTypes: ["longtask"]});
+
+}, "Performance longtask entries in child iframe are observable in parent");
+
+</script>
+
+<iframe src="resources/subframe-with-longtask.html" id="child-iframe-id" name="child-iframe-name"></iframe>
+
+</body>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-externalscript-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-externalscript-expected.txt
new file mode 100644
index 0000000..f34fa8d2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-externalscript-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Performance longtask entries are observable assert_equals: expected "same-origin-self" but got "self"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-externalscript.html b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-externalscript.html
new file mode 100644
index 0000000..91d74b9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-externalscript.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>LongTask Timing: long task in external script</title>
+<body>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/makelongtask.js"></script>
+
+<h1>Long Task: External Script</h1>
+<div id="log"></div>
+<script>
+  async_test(function (t) {
+    var observer = new PerformanceObserver(
+        t.step_func(function (entryList) {
+            var entries = entryList.getEntries();
+            assert_equals(entries.length, 1,
+                "Exactly one entry is expected.");
+            var longtask = entries[0];
+            assert_equals(longtask.entryType, "longtask");
+            assert_equals(longtask.name, "same-origin-self");
+            assert_greater_than(longtask.duration, 50);
+            assert_equals(longtask.startTime, Math.floor(longtask.startTime),
+                "startTime expected to have 1 millisecond granularity");
+
+            // Assert the TaskAttributionTiming entry in attribution.
+            assert_equals(longtask.attribution.length, 1,
+                "Exactly one attribution entry is expected");
+            var attribution = longtask.attribution[0];
+            assert_equals(attribution.entryType, "taskattribution");
+            assert_equals(attribution.name, "frame");
+            assert_equals(attribution.duration, 0);
+            assert_equals(attribution.startTime, 0);
+            assert_equals(attribution.frameId, "");
+            assert_equals(attribution.frameName, "");
+            assert_equals(attribution.frameSrc, "");
+            observer.disconnect();
+            t.done();
+        })
+    );
+    observer.observe({entryTypes: ["longtask"]});
+
+}, "Performance longtask entries are observable");
+</script>
+
+</body>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-parentiframe-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-parentiframe-expected.txt
new file mode 100644
index 0000000..7a9aad07
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-parentiframe-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Performance longtask entries in parent are observable in child iframe assert_equals: expected "longtask+same-origin-ancestor+frame" but got "longtask+same-origin-ancestor+script"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-parentiframe.html b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-parentiframe.html
new file mode 100644
index 0000000..356e785
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-parentiframe.html
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>LongTask Timing: long task in nested child iframe</title>
+<body>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+  async_test(t => {
+    window.addEventListener("message", t.step_func(e => {
+      assert_equals(e.data, "longtask+same-origin-ancestor+frame");
+      t.done();
+    }));
+}, "Performance longtask entries in parent are observable in child iframe");
+</script>
+
+<iframe src="resources/subframe-observing-longtask.html" id="child-iframe-id" name="child-iframe-name"></iframe>
+
+<script>
+  setTimeout(function(){
+    var begin = window.performance.now();
+    while (window.performance.now() < begin + 51);
+  }, 50);
+</script>
+
+</body>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-raf-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-raf-expected.txt
new file mode 100644
index 0000000..f34fa8d2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-raf-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Performance longtask entries are observable assert_equals: expected "same-origin-self" but got "self"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-raf.html b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-raf.html
new file mode 100644
index 0000000..850dff98
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-raf.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>LongTask Timing: long task in rAF</title>
+<body>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/raflongtask.js"></script>
+
+<h1>Long Task: requestAnimationFrame</h1>
+<div id="log"></div>
+<script>
+  async_test(function (t) {
+    var observer = new PerformanceObserver(
+        t.step_func(function (entryList) {
+            var entries = entryList.getEntries();
+            assert_equals(entries.length, 1,
+                "Exactly one entry is expected.");
+            var longtask = entries[0];
+            assert_equals(longtask.entryType, "longtask");
+            assert_equals(longtask.name, "same-origin-self");
+            assert_greater_than(longtask.duration, 50);
+            assert_equals(longtask.startTime, Math.floor(longtask.startTime),
+                "startTime expected to have 1 millisecond granularity");
+
+            // Assert the TaskAttributionTiming entry in attribution.
+            assert_equals(longtask.attribution.length, 1,
+                "Exactly one attribution entry is expected");
+            var attribution = longtask.attribution[0];
+            assert_equals(attribution.entryType, "taskattribution");
+            assert_equals(attribution.name, "frame");
+            assert_equals(attribution.duration, 0);
+            assert_equals(attribution.startTime, 0);
+            assert_equals(attribution.frameId, "");
+            assert_equals(attribution.frameName, "");
+            assert_equals(attribution.frameSrc, "");
+            observer.disconnect();
+            t.done();
+        })
+    );
+    observer.observe({entryTypes: ["longtask"]});
+
+}, "Performance longtask entries are observable");
+</script>
+
+</body>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-sibling-iframe-crossorigin.html b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-sibling-iframe-crossorigin.html
new file mode 100644
index 0000000..f4633f5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-sibling-iframe-crossorigin.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>LongTask Timing: long task in cross-origin sibling iframe</title>
+<body>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+  async_test(t => {
+    window.addEventListener("message", t.step_func(e => {
+      assert_equals(e.data, "longtask+cross-origin-unreachable+frame");
+      t.done();
+    }));
+}, "Performance longtask entries in parent are observable in child iframe");
+</script>
+
+<iframe src="resources/subframe-observing-longtask.html"></iframe>
+
+<script>
+  /* Create a cross-origin iframe that generates a long task. */
+  var iframe = document.createElement('iframe');
+  iframe.id = 'child-iframe-id';
+  iframe.name = 'child-iframe-name';
+  document.body.appendChild(iframe);
+  iframe.src = 'http://www1.web-platform.test:8000/longtask-timing/resources/subframe-with-longtask.html'
+</script>
+
+</body>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-sibling-iframe-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-sibling-iframe-expected.txt
new file mode 100644
index 0000000..c40d96d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-sibling-iframe-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Performance longtask entries in parent are observable in child iframe assert_equals: expected "longtask+same-origin+frame" but got "longtask+multiple-contexts+script"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-sibling-iframe.html b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-sibling-iframe.html
new file mode 100644
index 0000000..40a91139
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-sibling-iframe.html
@@ -0,0 +1,28 @@
+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>LongTask Timing: long task in sibling iframe</title>
+<body>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+  async_test(t => {
+    window.addEventListener("message", t.step_func(e => {
+      assert_equals(e.data, "longtask+same-origin+frame");
+      t.done();
+    }));
+}, "Performance longtask entries in parent are observable in child iframe");
+</script>
+
+<iframe src="resources/subframe-observing-longtask.html"></iframe>
+
+<script>
+  /* Create an iframe that generates a long task. */
+  var iframe = document.createElement('iframe');
+  iframe.id = 'child-iframe-id';
+  iframe.name = 'child-iframe-name';
+  document.body.appendChild(iframe);
+  iframe.src = 'resources/subframe-with-longtask.html'
+</script>
+</body>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/resources/makelongtask.js b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/resources/makelongtask.js
new file mode 100644
index 0000000..2401f0a7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/resources/makelongtask.js
@@ -0,0 +1,3 @@
+/* Generate a slow task. */
+var begin = window.performance.now();
+while (window.performance.now() < begin + 51);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/resources/raflongtask.js b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/resources/raflongtask.js
new file mode 100644
index 0000000..a874e79
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/resources/raflongtask.js
@@ -0,0 +1,5 @@
+window.requestAnimationFrame(function() {
+  /* Generate a slow task. */
+  var begin = window.performance.now();
+  while (window.performance.now() < begin + 51);
+});
diff --git a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/resources/subframe-observing-longtask.html b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/resources/subframe-observing-longtask.html
new file mode 100644
index 0000000..3f4fc71
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/resources/subframe-observing-longtask.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<meta name="viewport" content="width=device-width">
+<title>Child Iframe</title>
+<h1>Child Iframe observing long tasks</h1>
+
+<script>
+    var observer = new PerformanceObserver(function(entryList) {
+      for (i = 0; i < entryList.getEntries().length; i++) {
+      	var longtask = entryList.getEntries()[i];
+      	 // Ignore long task generated within here, as part of making this iframe.
+      	if (longtask.name == "same-origin-self")
+      	  return;
+      	// TODO(panicker): include frameId etc.
+        var entryContents = longtask.entryType + '+' + longtask.name + '+' + longtask.attribution[0].name;
+        top.postMessage(entryContents, '*');
+      }
+    });
+    observer.observe({entryTypes: ["longtask"]});
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/resources/subframe-with-longtask.html b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/resources/subframe-with-longtask.html
new file mode 100644
index 0000000..eaa12e48
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/resources/subframe-with-longtask.html
@@ -0,0 +1,11 @@
+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<meta name="viewport" content="width=device-width">
+
+<title>Long Task Iframe</title>
+<h1>Long Task in Inline Script</h1>
+
+<script>
+    var begin = window.performance.now();
+    while (window.performance.now() < begin + 51);
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/orientation-event/devicemotionevent-init-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/devicemotionevent-init-expected.txt
new file mode 100644
index 0000000..e24a01d7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/devicemotionevent-init-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL User created event is initialized properly with default values assert_equals: interval must be initialized to 0 expected (number) 0 but got (object) null
+PASS User created event is initialized properly using dictionary 
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/orientation-event/devicemotionevent-init.html b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/devicemotionevent-init.html
new file mode 100644
index 0000000..90563d8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/devicemotionevent-init.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>DeviceMotionEvent attributes must be initialized properly</title>
+    <meta charset='utf-8'>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+  </head>
+  <body>
+    <p>DeviceOrientationEvent attributes must be initialized properly.</p>
+    <div id="log"></div>
+    <script>
+      test(function() {
+        var evt = new DeviceMotionEvent("foo");
+        assert_equals(evt.type, "foo", "type is set to \"foo\"");
+        assert_equals(evt.acceleration, null,
+          "acceleration must be initialized to null");
+        assert_equals(evt.accelerationIncludingGravity, null,
+          "accelerationIncludingGravity must be initialized to null");
+        assert_equals(evt.rotationRate, null,
+          "rotationRate must be initialized to null");
+        assert_equals(evt.interval, 0, "interval must be initialized to 0");
+      }, "User created event is initialized properly with default values");
+
+      test(function() {
+        var evt = new DeviceMotionEvent("foo", {
+          acceleration: { x: 56, y: -56, z: 64 },
+          accelerationIncludingGravity: { x: 56, y: -56, z: 64 },
+          rotationRate: { alpha: 56, beta: -56, gamma: 64 },
+          interval: 3
+        });
+        assert_equals(evt.type, "foo", "type is set to \"foo\"");
+        assert_equals(typeof evt.acceleration, "object", "acceleration is an object");
+        assert_equals(evt.acceleration.x, 56, "acceleration.x is set to 56");
+        assert_equals(evt.acceleration.y, -56, "acceleration.y is set to -56");
+        assert_equals(evt.acceleration.z, 64, "acceleration.z is set to 64");
+        assert_equals(typeof evt.accelerationIncludingGravity, "object", "accelerationIncludingGravity is an object");
+        assert_equals(evt.accelerationIncludingGravity.x, 56, "accelerationIncludingGravity.x is set to 56");
+        assert_equals(evt.accelerationIncludingGravity.y, -56, "accelerationIncludingGravity.y is set to -56");
+        assert_equals(evt.accelerationIncludingGravity.z, 64, "accelerationIncludingGravity.z is set to 64");
+        assert_equals(typeof evt.rotationRate, "object", "rotationRate is an object");
+        assert_equals(evt.rotationRate.alpha, 56, "rotationRate.alpha is set to 56");
+        assert_equals(evt.rotationRate.beta, -56, "rotationRate.beta is set to -56");
+        assert_equals(evt.rotationRate.gamma, 64, "rotationRate.gamma is set to 64");
+        assert_equals(evt.interval, 3, "interval is set to 3");
+      }, "User created event is initialized properly using dictionary");
+    </script>
+  </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/orientation-event/deviceorientationabsoluteevent.html b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/deviceorientationabsoluteevent.html
new file mode 100644
index 0000000..6ec4927
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/deviceorientationabsoluteevent.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>DeviceOrientationEvent attributes should be fired properly</title>
+    <meta charset='utf-8'>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+  </head>
+  <body>
+    <p>If an implementation can never provide absolute orientation information, the event should be fired with the alpha, beta and gamma attributes set to null.</p>
+    <div id="log"></div>
+    <script>
+      var t = async_test("deviceorientationabsolute event fires");
+      var run = false;
+      window.addEventListener("deviceorientationabsolute", function(e) {
+        if (!run) {
+          run = true;
+          t.step(function () {
+            assert_equals(e.type, "deviceorientationabsolute", "type is set to \"deviceorientationabsolute\"");
+            assert_equals(e.alpha, null, "alpha is set to null");
+            assert_equals(e.beta, null, "beta is set to null");
+            assert_equals(e.gamma, null, "gamma is set to null");
+            assert_false(e.absolute, "absolute is set to false");
+          });
+          t.done();
+        }
+      }, false);
+    </script>
+  </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/orientation-event/deviceorientationevent-init.html b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/deviceorientationevent-init.html
new file mode 100644
index 0000000..b6485f69
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/deviceorientationevent-init.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>DeviceOrientationEvent attributes must be initialized properly</title>
+    <meta charset='utf-8'>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+  </head>
+  <body>
+    <p>DeviceOrientationEvent attributes must be initialized properly.</p>
+    <div id="log"></div>
+    <script>
+      test(function() {
+        var evt = new DeviceOrientationEvent("foo");
+        assert_equals(evt.type, "foo", "type is set to \"foo\"");
+        assert_equals(evt.alpha, null, "alpha is set to null");
+        assert_equals(evt.beta, null, "beta is set to null");
+        assert_equals(evt.gamma, null, "gamma is set to null");
+        assert_false(evt.absolute, "absolute is set to false");
+      }, "User created event is initialized properly with default values");
+
+      test(function() {
+        var evt = new DeviceOrientationEvent("foo", {
+          alpha: 56,
+          beta: -56,
+          gamma: 64,
+          absolute: true
+        });
+        assert_equals(evt.type, "foo", "type is set to \"foo\"");
+        assert_equals(evt.alpha, 56, "alpha is set to 56");
+        assert_equals(evt.beta, -56, "beta is set to -56");
+        assert_equals(evt.gamma, 64, "gamma is set to 64");
+        assert_true(evt.absolute, "absolute is set to true");
+      }, "User created event is initialized properly using a dictionary");
+    </script>
+  </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/orientation-event/free-fall-manual.html b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/free-fall-manual.html
new file mode 100644
index 0000000..eaec7eb0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/free-fall-manual.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>DeviceMotionEvent: A device in free-fall, with the screen horizontal and upmost</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <link rel="author' title='Mosquito FP7">
+    <link rel="reviewer author" title="Zhiqiang Zhang" href="mailto:zhiqiang.zhang@intel.com"> <!-- 2013-10-14 -->
+  </head>
+  <body>
+    <p>Free fall the device to run the test, with the screen horizontal and upmost.</p>
+    <div id="log"></div>
+    <script>
+      var t = async_test(document.title);
+      var run = false;
+
+      /*
+       * A device in free-fall, with the screen horizontal and upmost,
+       * has an accelerationIncludingGravity of zero and
+       * the following value for acceleration:
+       * {
+       *   x: 0,
+       *   y: 0,
+       *   z: -9.81
+       * };
+       */
+      window.addEventListener("devicemotion", function(e) {
+        if (!run) {
+          run = true;
+          t.step(function() {
+            var gvt = e.accelerationIncludingGravity;
+            var acc = e.acceleration;
+
+            assert_approx_equals(gvt.x, 0, 1);
+            assert_approx_equals(gvt.y, 0, 1);
+            assert_approx_equals(gvt.z, 0, 1);
+
+            assert_approx_equals(acc.x, 0, 1);
+            assert_approx_equals(acc.y, 0, 1);
+            assert_approx_equals(acc.z, -9.81, 1.5);
+          });
+          t.done();
+        }
+      }, false);
+    </script>
+  </body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/orientation-event/horizontal-surface-manual-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/horizontal-surface-manual-expected.txt
new file mode 100644
index 0000000..55c8f99
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/horizontal-surface-manual-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL X angle assert_approx_equals: expected a number but got a "undefined"
+FAIL Y angle assert_approx_equals: expected a number but got a "undefined"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/orientation-event/horizontal-surface-manual.html b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/horizontal-surface-manual.html
new file mode 100644
index 0000000..0b7302e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/horizontal-surface-manual.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>DeviceOrientationEvent: A device lying flat on a horizontal surface</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <link rel="author' title='Mosquito FP7">
+    <link rel="reviewer author" title="Zhiqiang Zhang" href="mailto:zhiqiang.zhang@intel.com"> <!-- 2013-10-12 -->
+  </head>
+  <body>
+    <p>Put the device on a horizontal surface to run the test.</p>
+    <div id="log"></div>
+    <script>
+      var gamma, beta;
+      var run = false;
+      window.addEventListener("deviceorientation", function(e) {
+        if (!run) {
+          run = true;
+          gamma = e.gamma; // Gamma : angle par rapport a x
+          beta  = e.beta;  // Beta : angle par rapport a y
+        }
+      }, false);
+
+      test(function() {
+        assert_approx_equals(gamma, 0, 2);
+      }, "X angle");
+
+      test(function() {
+        assert_approx_equals(beta, 0, 2);
+      }, "Y angle");
+    </script>
+  </body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/orientation-event/idlharness-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/idlharness-expected.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/idlharness-expected.txt
@@ -0,0 +1 @@
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/orientation-event/idlharness.html b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/idlharness.html
new file mode 100644
index 0000000..248e028
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/idlharness.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>DeviceOrientation Event IDL tests</title>
+<link rel="author" title="Intel" href="http://www.intel.com">
+<link rel="help" href="http://dev.w3.org/geo/api/spec-source-orientation.html">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/WebIDLParser.js"></script>
+<script src="/resources/idlharness.js"></script>
+<style>
+  pre {
+    display: none;
+  }
+</style>
+<div id="log"></div>
+
+<pre id="untested_idl">
+interface Event {
+};
+
+interface EventHandler {
+};
+
+dictionary EventInit {
+};
+
+interface Window {
+};
+</pre>
+
+<pre id='idl'>
+partial interface Window {
+    attribute EventHandler ondeviceorientation;
+    attribute EventHandler ondevicemotion;
+};
+
+[Constructor(DOMString type, optional DeviceOrientationEventInit eventInitDict)]
+interface DeviceOrientationEvent : Event {
+  readonly attribute double? alpha;
+  readonly attribute double? beta;
+  readonly attribute double? gamma;
+  readonly attribute boolean absolute;
+};
+
+dictionary DeviceOrientationEventInit : EventInit {
+      double? alpha = null;
+      double? beta = null;
+      double? gamma = null;
+      boolean absolute = false;
+};
+
+[NoInterfaceObject]
+interface DeviceAcceleration {
+  readonly attribute double? x;
+  readonly attribute double? y;
+  readonly attribute double? z;
+};
+
+[NoInterfaceObject]
+interface DeviceRotationRate {
+  readonly attribute double? alpha;
+  readonly attribute double? beta;
+  readonly attribute double? gamma;
+};
+
+[Constructor(DOMString type, optional DeviceMotionEventInit eventInitDict)]
+interface DeviceMotionEvent : Event {
+  readonly attribute DeviceAcceleration? acceleration;
+  readonly attribute DeviceAcceleration? accelerationIncludingGravity;
+  readonly attribute DeviceRotationRate? rotationRate;
+  readonly attribute double? interval;
+};
+
+dictionary DeviceAccelerationInit {
+  double? x = null;
+  double? y = null;
+  double? z = null;
+};
+
+dictionary DeviceRotationRateInit {
+  double? alpha = null;
+  double? beta  = null;
+  double? gamma = null;
+};
+
+dictionary DeviceMotionEventInit : EventInit {
+  DeviceAcceleration? acceleration;
+  DeviceAcceleration? accelerationIncludingGravity;
+  DeviceRotationRate? rotationRate;
+  double? interval = null;
+};
+</pre>
+
+<script>
+"use strict";
+var idl_array = new IdlArray();
+
+idl_array.add_untested_idls(document.getElementById("untested_idl").textContent);
+idl_array.add_idls(document.getElementById("idl").textContent);
+
+idl_array.add_objects({
+  DeviceOrientationEvent: ['new DeviceOrientationEvent("foo")'],
+  DeviceMotionEvent: ['new DeviceMotionEvent("foo")'],
+});
+
+idl_array.test();
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/orientation-event/screen-upmost-manual.html b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/screen-upmost-manual.html
new file mode 100644
index 0000000..87ad62c5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/screen-upmost-manual.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>DeviceMotionEvent: A device lying flat on a horizontal surface with the screen upmost</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <link rel="author' title='Mosquito FP7">
+    <link rel="reviewer author" title="Zhiqiang Zhang" href="mailto:zhiqiang.zhang@intel.com"> <!-- 2013-10-14 -->
+  </head>
+  <body>
+    <p>Put the device on a horizontal surface with the screen upmost.</p>
+    <div id="log"></div>
+    <script>
+      var t = async_test(document.title);
+      var run = false;
+
+      /*
+       * A device lying flat on a horizontal surface with the screen upmost
+       * has an acceleration of zero and the following value for
+       * accelerationIncludingGravity:
+       * {
+       *   x: 0,
+       *   y: 0,
+       *   z: 9.81
+       * };
+       */
+      window.addEventListener("devicemotion", function(e) {
+        if (!run) {
+          run = true;
+          t.step(function() {
+            var gvt = e.accelerationIncludingGravity;
+            var acc = e.acceleration;
+            var rot = e.rotationRate;
+
+            assert_approx_equals(gvt.x, 0, 1);
+            assert_approx_equals(gvt.y, 0, 1);
+            assert_approx_equals(gvt.z, 9.81, 1.5);
+
+            assert_approx_equals(acc.x, 0, 1);
+            assert_approx_equals(acc.y, 0, 1);
+            assert_approx_equals(acc.z, 0, 1);
+
+            assert_equals(rot, null);
+          });
+          t.done();
+        }
+      }, false);
+    </script>
+  </body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/orientation-event/screen-upright-manual.html b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/screen-upright-manual.html
new file mode 100644
index 0000000..0896a38
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/screen-upright-manual.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>DeviceMotionEvent: A device with the screen upright</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <link rel="author' title='Mosquito FP7">
+    <link rel="reviewer author" title="Zhiqiang Zhang" href="mailto:zhiqiang.zhang@intel.com"> <!-- 2013-10-14 -->
+  </head>
+  <body>
+    <p>Put the device with the screen upright.</p>
+    <div id="log"></div>
+    <script>
+      var t = async_test(document.title);
+      var run = false;
+
+      /*
+       * A device with the screen upright has an acceleration of zero
+       * and the following value for accelerationIncludingGravity:
+       * {
+       *   x: 0,
+       *   y: -9.81,
+       *   z: 0
+       * };
+       */
+      window.addEventListener("devicemotion", function(e) {
+        if (!run) {
+          run = true;
+          t.step(function() {
+            var gvt = e.accelerationIncludingGravity;
+            var acc = e.acceleration;
+            var rot = e.rotationRate;
+
+            assert_approx_equals(gvt.x, 0, 1);
+            assert_approx_equals(gvt.y, -9.81, 1.5);
+            assert_approx_equals(gvt.z, 0, 1);
+
+            assert_approx_equals(acc.x, 0, 1);
+            assert_approx_equals(acc.y, 0, 1);
+            assert_approx_equals(acc.z, 0, 1);
+
+            assert_equals(rot, null);
+          });
+          t.done();
+        }
+      }, false);
+    </script>
+  </body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t001-manual.html b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t001-manual.html
new file mode 100644
index 0000000..a38d3fd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t001-manual.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>User agents implementing this specification must provide a new DOM event, named deviceorientation</title>
+    <meta name=viewport content="width=device-width, maximum-scale=1.0">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <link rel="author" title="Mosquito FP7">
+    <link rel="reviewer author" title="Zhiqiang Zhang" href="mailto:zhiqiang.zhang@intel.com"> <!-- 2013-10-12 -->
+  </head>
+  <body>
+    <p>Rotate the device to run the test.</p>
+    <div id="log"></div>
+    <script>
+      var t = async_test("deviceorientation event fires");
+      var run = false;
+      window.addEventListener("deviceorientation", function(e) {
+        if (!run) {
+          run = true;
+          t.done();
+        }
+      }, false);
+    </script>
+  </body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t002-manual.html b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t002-manual.html
new file mode 100644
index 0000000..13acb468
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t002-manual.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>The corresponding event must be of type DeviceOrientationEvent and must fire on the window object.</title>
+    <meta name=viewport content="width=device-width, maximum-scale=1.0">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <link rel="author" title="Mosquito FP7">
+    <link rel="reviewer author" title="Zhiqiang Zhang" href="mailto:zhiqiang.zhang@intel.com"> <!-- 2013-10-12 -->
+  </head>
+  <body>
+    <p>Rotate the device to run the tests.</p>
+    <div id="log"></div>
+    <script>
+      var t1 = async_test("The corresponding event must be of type DeviceOrientationEvent");
+      var t2 = async_test("The corresponding event must fire on the window object");
+      var run = false;
+      window.addEventListener("deviceorientation", function(e) {
+        if (!run) {
+          run = true;
+          var _this = this;
+          t1.step(function() {
+            assert_equals(e.type, "deviceorientation");
+          });
+          t1.done();
+          t2.step(function() {
+            assert_equals(_this, window);
+          });
+          t2.done();
+        }
+      }, false);
+    </script>
+  </body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t003-manual.html b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t003-manual.html
new file mode 100644
index 0000000..328132d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t003-manual.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>User agents must also provide an event handler IDL attribute [HTML5] named ondeviceorientation on the window object</title>
+    <meta name=viewport content="width=device-width, maximum-scale=1.0">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <link rel="author" title="Mosquito FP7">
+    <link rel="reviewer author" title="Zhiqiang Zhang" href="mailto:zhiqiang.zhang@intel.com"> <!-- 2013-10-12 -->
+  </head>
+  <body>
+    <p>Rotate the device to run the tests.</p>
+    <div id="log"></div>
+    <script>
+      var t1 = async_test("Provide an event handler IDL attribute [HTML5] named ondeviceorientation");
+      var t2 = async_test("The type of this event handler must be 'DeviceOrientationEvent'");
+      var run = false;
+      window.ondeviceorientation = function(e) {
+        if (!run) {
+          run = true;
+          t1.step(function() {
+            assert_equals(e.type, "deviceorientation");
+          });
+          t1.done();
+          t2.step(function() {
+            assert_true(e instanceof "DeviceOrientationEvent");
+          });
+          t2.done();
+        }
+      };
+    </script>
+  </body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t006-manual.html b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t006-manual.html
new file mode 100644
index 0000000..e41f4634
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t006-manual.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Rotate the device frame around its z axis</title>
+    <meta name=viewport content="width=device-width, maximum-scale=1.0">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <link rel="author" title="Mosquito FP7">
+    <link rel="reviewer author" title="Zhiqiang Zhang" href="mailto:zhiqiang.zhang@intel.com"> <!-- 2013-10-12 -->
+  </head>
+  <body>
+    <p>Rotate the device frame around its z axis to run the test.</p>
+    <div id="log"></div>
+    <script>
+      var t1 = async_test("Alpha is in [0, 360)");
+      var run = false;
+      window.addEventListener("deviceorientation", function(e) {
+        if (!run && e.alpha !== null) {
+          run = true;
+          t1.step(function() {
+            assert_greater_than_equal(e.alpha, 0);
+            assert_less_than(e.alpha, 360);
+          });
+          t1.done();
+        }
+      }, false);
+    </script>
+  </body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t009-manual.html b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t009-manual.html
new file mode 100644
index 0000000..d00f7e7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t009-manual.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Rotate the device frame around its x axis</title>
+    <meta name=viewport content="width=device-width, maximum-scale=1.0">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <link rel="author" title="Mosquito FP7">
+    <link rel="reviewer author" title="Zhiqiang Zhang" href="mailto:zhiqiang.zhang@intel.com"> <!-- 2013-10-12 -->
+  </head>
+  <body>
+    <p>Rotate the device frame around its x axis to run the test.</p>
+    <div id="log"></div>
+    <script>
+      var t1 = async_test("Beta is in [-180, 180)");
+      var run = false;
+      window.addEventListener("deviceorientation", function(e) {
+        if (!run && e.beta !== null) {
+          run = true;
+          t1.step(function() {
+            assert_greater_than_equal(e.beta, -180);
+            assert_less_than(e.beta, 180);
+          });
+          t1.done();
+        }
+      }, false);
+    </script>
+  </body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t010-manual.html b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t010-manual.html
new file mode 100644
index 0000000..9a6e00e1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t010-manual.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Rotate the device frame around its y axis</title>
+    <meta name=viewport content="width=device-width, maximum-scale=1.0">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <link rel="author" title="Mosquito FP7">
+    <link rel="reviewer author" title="Zhiqiang Zhang" href="mailto:zhiqiang.zhang@intel.com"> <!-- 2013-10-12 -->
+  </head>
+  <body>
+    <p>Rotate the device frame around its y axis to run the test.</p>
+    <div id="log"></div>
+    <script>
+      var t1 = async_test("Gamma is in [-90, 90)");
+      var run = false;
+      window.addEventListener("deviceorientation", function(e) {
+        if (!run && e.gamma !== null) {
+          run = true;
+          t1.step(function() {
+            assert_greater_than_equal(e.gamma, -90);
+            assert_less_than(e.gamma, 90);
+          });
+          t1.done();
+        }
+      }, false);
+    </script>
+  </body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t012-manual.html b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t012-manual.html
new file mode 100644
index 0000000..e5ac1c9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t012-manual.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Implementations that are unable to provide all three angles must set the values of the unknown angles to null</title>
+    <meta name=viewport content="width=device-width, maximum-scale=1.0">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <link rel="author" title="Mosquito FP7">
+    <link rel="reviewer author" title="Zhiqiang Zhang" href="mailto:zhiqiang.zhang@intel.com"> <!-- 2013-10-12 -->
+  </head>
+  <body>
+    <p>Precondition: implementation is unable to provide all three angles</p>
+    <p>Rotate the device to run the test.</p>
+    <div id="log"></div>
+    <script>
+      var t1 = async_test("Alpha, Beta and Gamma are null. absolute is false.");
+      var run = false;
+      window.addEventListener("deviceorientation", function(e) {
+        if (!run) {
+          run = true;
+          t1.step(function() {
+            assert_equals(e.alpha, null, "alpha is set to null");
+            assert_equals(e.beta, null, "beta is set to null");
+            assert_equals(e.gamma, null, "gamma is set to null");
+            assert_false(e.absolute, "absolute is set to false");
+          });
+          t1.done();
+        }
+      }, false);
+
+      test(function() {
+        var evt = new DeviceOrientationEvent("foo");
+        assert_equals(evt.alpha, null, "alpha is set to null");
+        assert_equals(evt.beta, null, "beta is set to null");
+        assert_equals(evt.gamma, null, "gamma is set to null");
+        assert_false(evt.absolute, "absolute is set to false");
+      }, "User created event is initialized properly");
+    </script>
+  </body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t021-manual.html b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t021-manual.html
new file mode 100644
index 0000000..449d6100
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t021-manual.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>User agents implementing this specification must provide a new DOM event, named devicemotion</title>
+    <meta name=viewport content="width=device-width, maximum-scale=1.0">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <link rel="author" title="Mosquito FP7">
+    <link rel="reviewer author" title="Zhiqiang Zhang" href="mailto:zhiqiang.zhang@intel.com"> <!-- 2013-10-14 -->
+  </head>
+  <body>
+    <p>Move the device to run the test.</p>
+    <div id="log"></div>
+    <script>
+      var t = async_test("devicemotion event exists");
+      var run = false;
+      window.addEventListener("devicemotion", function(e) {
+        if (!run) {
+          run = true;
+          t.done();
+        }
+      }, false);
+    </script>
+  </body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t022-manual.html b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t022-manual.html
new file mode 100644
index 0000000..45e9e7e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t022-manual.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>The corresponding event must be of type DeviceOrientationEvent and must fire on the window object</title>
+    <meta name=viewport content="width=device-width, maximum-scale=1.0">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <link rel="author" title="Mosquito FP7">
+    <link rel="reviewer author" title="Zhiqiang Zhang" href="mailto:zhiqiang.zhang@intel.com"> <!-- 2013-10-14 -->
+  </head>
+  <body>
+    <p>Move the device to run the test.</p>
+    <div id="log"></div>
+    <script>
+      var t1 = async_test("The corresponding event must be of type DeviceMotionEvent");
+      var t2 = async_test("The corresponding event must fire on the window object");
+      var run = false;
+      window.addEventListener("devicemotion", function(e) {
+        if (!run) {
+          run = true;
+          t1.step(function() {
+            assert_equals(e.type, "devicemotion");
+          });
+          t1.done();
+          t2.step(function() {
+            assert_true(e.target instanceof Window);
+          });
+          t2.done();
+        }
+      }, false);
+    </script>
+  </body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t023-manual.html b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t023-manual.html
new file mode 100644
index 0000000..7606e523
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t023-manual.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>User agents must also provide an event handler IDL attribute HTML5 named ondevicemotion on the window object</title>
+    <meta name=viewport content="width=device-width, maximum-scale=1.0">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <link rel="author" title="Mosquito FP7">
+    <link rel="reviewer author" title="Zhiqiang Zhang" href="mailto:zhiqiang.zhang@intel.com"> <!-- 2013-10-14 -->
+  </head>
+  <body>
+    <p>Move the device to run the test.</p>
+    <div id="log"></div>
+    <script>
+      var t1 = async_test("User agents provide an event handler IDL attribute HTML5 named ondevicemotion");
+      var t2 = async_test("The type of this event handler must be 'DeviceMotionEvent'");
+      var run = false;
+      window.ondevicemotion = function(e) {
+        if (!run) {
+          run = true;
+          t1.step(function() {
+            assert_equals(e.type, "devicemotion");
+          });
+          t1.done();
+          t2.step(function() {
+            assert_true(e instanceof "DeviceMotionEvent");
+          });
+          t2.done();
+        }
+      };
+    </script>
+  </body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t025-manual.html b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t025-manual.html
new file mode 100644
index 0000000..9489855
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t025-manual.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Implementations that are unable to provide acceleration data without the effect of gravity may instead supply the acceleration including the effect of gravity</title>
+    <meta name=viewport content="width=device-width, maximum-scale=1.0">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <link rel="author" title="Mosquito FP7">
+    <link rel="reviewer author" title="Zhiqiang Zhang" href="mailto:zhiqiang.zhang@intel.com"> <!-- 2013-10-14 -->
+  </head>
+  <body>
+    <p>Move the device to run the test.</p>
+    <div id="log"></div>
+    <script>
+      var t1 = async_test("Implementation is unable to provide 'acceleration' property");
+      var t2 = async_test("Implementation is able to provide 'acceleration IncludingGravity' property");
+      var run = false;
+      window.ondevicemotion = function(e) {
+        if (!run) {
+          run = true;
+          t1.step(function() {
+            assert_equals(e.acceleration, null);
+          });
+          t1.done();
+          t2.step(function() {
+            var eaccgvt = e.accelerationIncludingGravity;
+            assert_equals(typeof eaccgvt, "object");
+            assert_not_equals(eaccgvt.x, 0);
+            assert_not_equals(eaccgvt.y, 0);
+            assert_not_equals(eaccgvt.z, 0);
+          });
+          t2.done();
+        }
+      };
+    </script>
+  </body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t028-manual.html b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t028-manual.html
new file mode 100644
index 0000000..669c4e4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/orientation-event/t028-manual.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>The interval property must be expressed in milliseconds. It must be a constant, to simplify filtering of the data by the Web application</title>
+    <meta name=viewport content="width=device-width, maximum-scale=1.0">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <link rel="author" title="Mosquito FP7">
+    <link rel="reviewer author" title="Zhiqiang Zhang" href="mailto:zhiqiang.zhang@intel.com"> <!-- 2013-10-14 -->
+  </head>
+  <body>
+    <p>Move the device to run the test.</p>
+    <div id="log"></div>
+    <script>
+      var t = async_test("The interval property must be different to zero and must be a constant");
+      var inter1 = 0;
+      var inter2 = 0;
+      var run = false;
+      window.addEventListener("devicemotion", function(e) {
+        if (!run) {
+          run = true;
+          t.step(function() {
+            if (inter1 == 0) {
+              inter2 = e.interval;
+            }
+            inter1 = e.interval;
+            assert_not_equals(inter1, 0);
+            assert_not_equals(inter1, inter2);
+          });
+          t.done();
+        }
+      }, false);
+  </script>
+  </body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/close.https.html b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/close.https.html
new file mode 100644
index 0000000..3e3cc8b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/close.https.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<title>ServiceWorkerGlobalScope: close operation</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../resources/test-helpers.sub.js"></script>
+<script>
+
+service_worker_test(
+  'resources/close-worker.js', 'ServiceWorkerGlobalScope: close operation');
+
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/resources/close-worker.js b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/resources/close-worker.js
new file mode 100644
index 0000000..32ad203
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/resources/close-worker.js
@@ -0,0 +1,6 @@
+importScripts('../../resources/interfaces.js');
+importScripts('../../resources/worker-testharness.js');
+
+test(function() {
+  assert_false('close' in self);
+}, 'ServiceWorkerGlobalScope close operation');
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/claim-affect-other-registration.https.html b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/claim-affect-other-registration.https.html
new file mode 100644
index 0000000..52555ac2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/claim-affect-other-registration.https.html
@@ -0,0 +1,136 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Service Worker: claim() should affect other registration</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/test-helpers.sub.js"></script>
+<script>
+
+promise_test(function(t) {
+  var frame;
+
+  var init_scope = 'resources/blank.html?affect-other';
+  var init_worker_url = 'resources/empty.js';
+  var init_registration;
+  var init_workers = [undefined, undefined];
+
+  var claim_scope = 'resources/blank.html?affect-other-registration';
+  var claim_worker_url = 'resources/claim-worker.js';
+  var claim_registration;
+  var claim_worker;
+
+  return Promise.resolve()
+    // Register the first service worker to init_scope.
+    .then(() => navigator.serviceWorker.register(init_worker_url + '?v1',
+                                                 {scope: init_scope}))
+    .then(r => {
+      init_registration = r;
+      init_workers[0] = r.installing;
+      return Promise.resolve()
+        .then(() => wait_for_state(t, init_workers[0], 'activated'))
+        .then(() => assert_array_equals([init_registration.active,
+                                         init_registration.waiting,
+                                         init_registration.installing],
+                                        [init_workers[0],
+                                         null,
+                                         null],
+                                        'Wrong workers.'));
+    })
+
+    // Create an iframe as the client of the first service worker of init_scope.
+    .then(() => with_iframe(claim_scope))
+    .then(f => frame = f)
+
+    // Check the controller.
+    .then(() => frame.contentWindow.navigator.serviceWorker.getRegistration(
+                  normalizeURL(init_scope)))
+    .then(r => assert_equals(frame.contentWindow.navigator.serviceWorker.controller,
+                             r.active,
+                             '.controller should belong to init_scope.'))
+
+    // Register the second service worker to init_scope.
+    .then(() => navigator.serviceWorker.register(init_worker_url + '?v2',
+                                                 {scope: init_scope}))
+    .then(r => {
+      assert_equals(r, init_registration, 'Should be the same registration');
+      init_workers[1] = r.installing;
+      return Promise.resolve()
+        .then(() => wait_for_state(t, init_workers[1], 'installed'))
+        .then(() => assert_array_equals([init_registration.active,
+                                         init_registration.waiting,
+                                         init_registration.installing],
+                                        [init_workers[0],
+                                         init_workers[1],
+                                         null],
+                                        'Wrong workers.'));
+    })
+
+    // Register a service worker to claim_scope.
+    .then(() => navigator.serviceWorker.register(claim_worker_url,
+                                                 {scope: claim_scope}))
+    .then(r => {
+      claim_registration = r;
+      claim_worker = r.installing;
+      return wait_for_state(t, claim_worker, 'activated')
+    })
+
+    // Let claim_worker claim the created iframe.
+    .then(function() {
+      var channel = new MessageChannel();
+      var saw_message = new Promise(function(resolve) {
+        channel.port1.onmessage = t.step_func(function(e) {
+          assert_equals(e.data, 'PASS',
+                        'Worker call to claim() should fulfill.');
+          resolve();
+        });
+      });
+
+      claim_worker.postMessage({port: channel.port2}, [channel.port2]);
+      return saw_message;
+    })
+
+    // Check the controller.
+    .then(() => frame.contentWindow.navigator.serviceWorker.getRegistration(
+                  normalizeURL(claim_scope)))
+    .then(r => assert_equals(frame.contentWindow.navigator.serviceWorker.controller,
+                             r.active,
+                             '.controller should belong to claim_scope.'))
+
+    // Check the status of created registrations and service workers.
+    .then(() => wait_for_state(t, init_workers[1], 'activated'))
+    .then(() => {
+      assert_array_equals([claim_registration.active,
+                           claim_registration.waiting,
+                           claim_registration.installing],
+                          [claim_worker,
+                           null,
+                           null],
+                          'claim_worker should be the only worker.')
+
+      assert_array_equals([init_registration.active,
+                           init_registration.waiting,
+                           init_registration.installing],
+                          [init_workers[1],
+                           null,
+                           null],
+                          'The waiting sw should become the active worker.')
+
+      assert_array_equals([init_workers[0].state,
+                           init_workers[1].state,
+                           claim_worker.state],
+                          ['redundant',
+                           'activated',
+                           'activated'],
+                          'Wrong worker states.');
+    })
+
+    // Cleanup and finish testing.
+    .then(() => frame.remove())
+    .then(() => Promise.all([
+      init_registration.unregister(),
+      claim_registration.unregister()
+    ]))
+    .then(() => t.done());
+}, 'claim() should affect the originally controlling registration.');
+
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/claim-fetch.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/claim-fetch.https-expected.txt
new file mode 100644
index 0000000..f6a2141
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/claim-fetch.https-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL fetch() should be intercepted after the client is claimed. promise_test: Unhandled rejection with value: object "TypeError: Cannot read property 'appendChild' of null"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/claim-fetch.https.html b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/claim-fetch.https.html
new file mode 100644
index 0000000..ddb7428
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/claim-fetch.https.html
@@ -0,0 +1,67 @@
+<!doctype html>
+<meta charset=utf-8>
+<title></title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/test-helpers.sub.js"></script>
+<script>
+
+promise_test(function(t) {
+  var frame;
+  var resource = 'resources/simple.txt';
+
+  var worker;
+  var scope = 'resources/';
+  var script = 'resources/claim-worker.js';
+
+  return Promise.resolve()
+    // Create the test iframe.
+    .then(() => with_iframe('resources/blank.html'))
+    .then(f => frame = f)
+
+    // Check the controller and test with fetch.
+    .then(() => assert_equals(frame.contentWindow.navigator.controller,
+                              undefined,
+                              'Should have no controller.'))
+    .then(() => frame.contentWindow.fetch(resource))
+    .then(response => response.text())
+    .then(response_text => assert_equals(response_text,
+                                         'a simple text file\n',
+                                         'fetch() should not be intercepted.'))
+
+    // Register a service worker.
+    .then(() => service_worker_unregister_and_register(t, script, scope))
+    .then(r => worker = r.installing)
+    .then(() => wait_for_state(t, worker, 'activated'))
+
+    // Let the service worker claim the iframe.
+    .then(() => {
+      var channel = new MessageChannel();
+      var saw_message = new Promise(function(resolve) {
+        channel.port1.onmessage = t.step_func(function(e) {
+          assert_equals(e.data, 'PASS',
+                        'Worker call to claim() should fulfill.');
+          resolve();
+        });
+      });
+      worker.postMessage({port: channel.port2}, [channel.port2]);
+      return saw_message;
+    })
+
+    // Check the controller and test with fetch.
+    .then(() => frame.contentWindow.navigator.serviceWorker.getRegistration(scope))
+    .then(r => assert_equals(frame.contentWindow.navigator.serviceWorker.controller,
+                             r.active,
+                             'Test iframe should be claimed.'))
+    .then(() => frame.contentWindow.fetch(resource))
+    .then(response => response.text())
+    .then(response_text => assert_equals(response_text,
+                                         'Intercepted!',
+                                         'fetch() should be intercepted.'))
+
+    // Cleanup this testcase.
+    .then(() => frame.remove())
+    .then(() => service_worker_unregister_and_done(t, scope));
+}, 'fetch() should be intercepted after the client is claimed.')
+
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/clients-matchall-client-types.https.html b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/clients-matchall-client-types.https.html
index 3645e86..3be0fe2 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/clients-matchall-client-types.https.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/clients-matchall-client-types.https.html
@@ -9,18 +9,15 @@
 var shared_worker_url = scope + '-shared-worker.js';
 
 /* visibilityState, focused, url, frameType */
-var expected_without_type = [
-    ['visible', true, new URL(iframe_url, location).href, 'nested']
+var expected_only_window = [
+    ['visible', true, new URL(iframe_url, location).href, 'window', 'nested']
 ];
-var expected_with_window = [
-    ['visible', true, new URL(iframe_url, location).href, 'nested']
+var expected_only_shared_worker = [
+    [,,new URL(shared_worker_url, location).href, 'sharedworker', 'none']
 ];
-var expected_with_shared_worker = [
-    [,,new URL(shared_worker_url, location).href, 'none']
-];
-var expected_with_all = [
-    ['visible', true, new URL(iframe_url, location).href, 'nested'],
-    [,,new URL(shared_worker_url, location).href, 'none']
+var expected_window_and_shared_worker = [
+    ['visible', true, new URL(iframe_url, location).href, 'window', 'nested'],
+    [,,new URL(shared_worker_url, location).href, 'sharedworker', 'none']
 ];
 
 function test_matchall(frame, expected, query_options) {
@@ -30,6 +27,9 @@
   return new Promise(function(resolve, reject) {
     var channel = new MessageChannel();
     channel.port1.onmessage = function(e) {
+      if (typeof e.data === 'string') {
+        return reject(e.data);
+      }
       assert_equals(e.data.length, expected.length);
       for (var i = 0; i < e.data.length; i++)
         assert_array_equals(e.data[i], expected[i]);
@@ -51,28 +51,50 @@
       .then(function() { return with_iframe(iframe_url); })
       .then(function(f) {
           frame = f;
+          return test_matchall(frame, expected_only_window, {});
+        })
+      .then(function() {
+          return test_matchall(frame, expected_only_window, {type:'window'});
+        })
+      .then(function() {
+          frame.remove();
+          return service_worker_unregister_and_done(t, scope);
+        })
+      .catch(unreached_rejection(t));
+  }, 'Verify matchAll() with window client type');
+
+promise_test(function(t) {
+    var frame;
+    return service_worker_unregister_and_register(
+        t, 'resources/clients-matchall-worker.js', scope)
+      .then(function(registration) {
+          return wait_for_state(t, registration.installing, 'activated');
+        })
+      .then(function() { return with_iframe(iframe_url); })
+      .then(function(f) {
+          frame = f;
           return new Promise(function(resolve, reject) {
               var w = new SharedWorker(shared_worker_url);
               w.port.onmessage = resolve;
             });
         })
       .then(function() {
-          return test_matchall(frame, expected_without_type, {});
+          return test_matchall(frame, expected_only_window, {});
         })
       .then(function() {
-          return test_matchall(frame, expected_with_window, {type:'window'});
+          return test_matchall(frame, expected_only_window, {type:'window'});
         })
-      //.then(function() {
-      //    return test_matchall(frame, expected_with_shared_worker,
-      //                         {type:'sharedworker'});
-      //  })
-      //.then(function() {
-      //    return test_matchall(frame, expected_with_all, {type:'all'});
-      //  })
+      .then(function() {
+          return test_matchall(frame, expected_only_shared_worker,
+                               {type:'sharedworker'});
+        })
+      .then(function() {
+          return test_matchall(frame, expected_window_and_shared_worker, {type:'all'});
+        })
       .then(function() {
           frame.remove();
           return service_worker_unregister_and_done(t, scope);
         });
-  }, 'Verify matchAll() with various client types');
+  }, 'Verify matchAll() with window and sharedworker client types');
 
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/clients-matchall-exact-controller.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/clients-matchall-exact-controller.https-expected.txt
new file mode 100644
index 0000000..7ba6eeb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/clients-matchall-exact-controller.https-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Test Clients.matchAll() with exact controller assert_unreached: unexpected rejection: assert_array_equals: property 3, expected "window" but got undefined Reached unreachable code
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/clients-matchall-exact-controller.https.html b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/clients-matchall-exact-controller.https.html
new file mode 100644
index 0000000..3fc2dd5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/clients-matchall-exact-controller.https.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<title>Service Worker: Clients.matchAll with exact controller</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/test-helpers.sub.js"></script>
+<script>
+const scope = 'resources/blank.html?clients-matchAll';
+const t = async_test('Test Clients.matchAll() with exact controller');
+let frames = [];
+
+function checkWorkerClients(worker, expected) {
+  return new Promise((resolve, reject) => {
+    let channel = new MessageChannel();
+    channel.port1.onmessage = evt => {
+      try {
+        assert_equals(evt.data.length, expected.length);
+        for (let i = 0; i < expected.length; ++i) {
+          assert_array_equals(evt.data[i], expected[i]);
+        }
+        resolve();
+      } catch (e) {
+        reject(e);
+      }
+    };
+
+    worker.postMessage({port:channel.port2}, [channel.port2]);
+  });
+}
+
+let expected = [
+    /* visibilityState, focused, url, frameType */
+    ['visible', true, new URL(scope + '#1', location).toString(), 'window', 'nested'],
+    ['visible', false, new URL(scope + '#2', location).toString(), 'window', 'nested']
+];
+
+t.step(_ => {
+    let script = 'resources/clients-matchall-worker.js';
+    service_worker_unregister_and_register(t, script, scope)
+      .then(registration => {
+          return wait_for_state(t, registration.installing, 'activated');
+        })
+      .then(_ => with_iframe(scope + '#1') )
+      .then(frame1 => {
+          frames.push(frame1);
+          frame1.focus();
+          return with_iframe(scope + '#2');
+        })
+      .then(frame2 => {
+          frames.push(frame2);
+          return navigator.serviceWorker.register(script + '?updated', { scope: scope });
+        })
+      .then(registration => {
+          return wait_for_state(t, registration.installing, 'installed')
+            .then(_ => registration);
+        })
+      .then(registration => {
+          return Promise.all([
+            checkWorkerClients(registration.waiting, []),
+            checkWorkerClients(registration.active, expected),
+          ]);
+        })
+      .then(_ => {
+          frames.forEach(f => f.remove() );
+          service_worker_unregister_and_done(t, scope);
+        })
+      .catch(unreached_rejection(t));
+  });
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/clients-matchall-include-uncontrolled.https.html b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/clients-matchall-include-uncontrolled.https.html
index 9285aef9..affd4c6 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/clients-matchall-include-uncontrolled.https.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/clients-matchall-include-uncontrolled.https.html
@@ -28,16 +28,16 @@
 
 var expected_without_include_uncontrolled = [
     /* visibilityState, focused, url, frameType */
-    ['visible', false, new URL(scope + '#1', location).toString(), 'nested'],
-    ['visible', true, new URL(scope + '#2', location).toString(), 'nested']
+    ['visible', false, new URL(scope + '#1', location).toString(), 'window', 'nested'],
+    ['visible', true, new URL(scope + '#2', location).toString(), 'window', 'nested']
 ];
 
 var expected_with_include_uncontrolled = [
     /* visibilityState, focused, url, frameType */
-    ['visible', true, location.href, 'top-level'],
-    ['visible', false, new URL(scope + '#1', location).toString(), 'nested'],
-    ['visible', true, new URL(scope + '#2', location).toString(), 'nested'],
-    ['visible', false, new URL(base_url, location).toString(), 'nested']
+    ['visible', true, location.href, 'window', 'top-level'],
+    ['visible', false, new URL(scope + '#1', location).toString(), 'window', 'nested'],
+    ['visible', true, new URL(scope + '#2', location).toString(), 'window', 'nested'],
+    ['visible', false, new URL(base_url, location).toString(), 'window', 'nested']
 ];
 
 function test_matchall(frame, expected, query_options) {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/clients-matchall-order.https.html b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/clients-matchall-order.https.html
new file mode 100644
index 0000000..2c1e956d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/clients-matchall-order.https.html
@@ -0,0 +1,426 @@
+<!DOCTYPE html>
+<title>Service Worker: Clients.matchAll ordering</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/test-helpers.sub.js"></script>
+<script>
+
+// Utility function for URLs this test will open.
+function makeURL(name, num, type) {
+  let u = new URL('resources/empty.html', location);
+  u.searchParams.set('name', name);
+  if (num !== undefined) {
+    u.searchParams.set('q', num);
+  }
+  if (type === 'nested') {
+    u.searchParams.set('nested', true);
+  }
+  return u.href;
+}
+
+// Non-test URLs that will be open during each test.  The harness URLs
+// are from the WPT harness.  The "extra" URL is a final window opened
+// by the test.
+const EXTRA_URL = makeURL('extra');
+const TEST_HARNESS_URL = location.href;
+const TOP_HARNESS_URL = new URL('/testharness_runner.html', location).href;
+
+// Utility function to open an iframe in the target parent window.  We
+// can't just use with_iframe() because it does not support a configurable
+// parent window.
+function openFrame(parentWindow, url) {
+  return new Promise(resolve => {
+    let frame = parentWindow.document.createElement('iframe');
+    frame.src = url;
+    parentWindow.document.body.appendChild(frame);
+
+    frame.contentWindow.addEventListener('load', evt => {
+      resolve(frame);
+    }, { once: true });
+  });
+}
+
+// Utility function to open a window and wait for it to load.  The
+// window may optionally have a nested iframe as well.  Returns
+// a result like `{ top: <frame ref> nested: <nested frame ref if present> }`.
+function openFrameConfig(opts) {
+  let url = new URL(opts.url, location.href);
+  return openFrame(window, url.href).then(top => {
+    if (!opts.withNested) {
+      return { top: top };
+    }
+
+    url.searchParams.set('nested', true);
+    return openFrame(top.contentWindow, url.href).then(nested => {
+      return { top: top, nested: nested };
+    });
+  });
+}
+
+// Utility function that takes a list of configurations and opens the
+// corresponding windows in sequence.  An array of results is returned.
+function openFrameConfigList(optList) {
+  let resultList = [];
+  function openNextWindow(optList, nextWindow) {
+    if (nextWindow >= optList.length) {
+      return resultList;
+    }
+    return openFrameConfig(optList[nextWindow]).then(result => {
+      resultList.push(result);
+      return openNextWindow(optList, nextWindow + 1);
+    });
+  }
+  return openNextWindow(optList, 0);
+}
+
+// Utility function that focuses the given entry in window result list.
+function executeFocus(frameResultList, opts) {
+  return new Promise(resolve => {
+    let w = frameResultList[opts.index][opts.type];
+    let target = w.contentWindow ? w.contentWindow : w;
+    target.addEventListener('focus', evt => {
+      resolve();
+    }, { once: true });
+    target.focus();
+  });
+}
+
+// Utility function that performs a list of focus commands in sequence
+// based on the window result list.
+function executeFocusList(frameResultList, optList) {
+  function executeNextCommand(frameResultList, optList, nextCommand) {
+    if (nextCommand >= optList.length) {
+      return;
+    }
+    return executeFocus(frameResultList, optList[nextCommand]).then(_ => {
+      return executeNextCommand(frameResultList, optList, nextCommand + 1);
+    });
+  }
+  return executeNextCommand(frameResultList, optList, 0);
+}
+
+// Perform a `clients.matchAll()` in the service worker with the given
+// options dictionary.
+function doMatchAll(worker, options) {
+  return new Promise(resolve => {
+    let channel = new MessageChannel();
+    channel.port1.onmessage = evt => {
+      resolve(evt.data);
+    };
+    worker.postMessage({ port: channel.port2, options: options, disableSort: true },
+                       [channel.port2]);
+  });
+}
+
+// Function that performs a single test case.  It takes a configuration object
+// describing the windows to open, how to focus them, the matchAll options,
+// and the resulting expectations.  See the test cases for examples of how to
+// use this.
+function matchAllOrderTest(t, opts) {
+  let script = 'resources/clients-matchall-worker.js';
+  let worker;
+  let frameResultList;
+  let extraWindowResult;
+  return service_worker_unregister_and_register(t, script, opts.scope).then(swr => {
+    worker = swr.installing;
+    return wait_for_state(t, worker, 'activated');
+  }).then(_ => {
+    return openFrameConfigList(opts.frameConfigList);
+  }).then(results => {
+    frameResultList = results;
+    return openFrameConfig({ url: EXTRA_URL });
+  }).then(result => {
+    extraWindowResult = result;
+    return executeFocusList(frameResultList, opts.focusConfigList);
+  }).then(_ => {
+    return doMatchAll(worker, opts.matchAllOptions);
+  }).then(data => {
+    assert_equals(data.length, opts.expected.length);
+    for (let i = 0; i < data.length; ++i) {
+      assert_equals(data[i][2], opts.expected[i], 'expected URL index ' + i);
+    }
+  }).then(_ => {
+    frameResultList.forEach(result => result.top.remove());
+    extraWindowResult.top.remove();
+  }).then(_ => {
+    return service_worker_unregister_and_done(t, opts.scope);
+  }).catch(e => {
+    if (frameResultList) {
+      frameResultList.forEach(result => result.top.remove());
+    }
+    if (extraWindowResult) {
+      extraWindowResult.top.remove();
+    }
+    throw(e);
+  });
+}
+
+// ----------
+// Test cases
+// ----------
+
+promise_test(t => {
+  let name = 'no-focus-controlled-windows';
+  let opts = {
+    scope: makeURL(name),
+
+    frameConfigList: [
+      { url: makeURL(name, 0), withNested: false },
+      { url: makeURL(name, 1), withNested: false },
+      { url: makeURL(name, 2), withNested: false },
+    ],
+
+    focusConfigList: [
+      // no focus commands
+    ],
+
+    matchAllOptions: {
+      includeUncontrolled: false
+    },
+
+    expected: [
+      makeURL(name, 0),
+      makeURL(name, 1),
+      makeURL(name, 2),
+    ],
+  };
+
+  return matchAllOrderTest(t, opts);
+}, 'Clients.matchAll() returns non-focused controlled windows in creation order.');
+
+promise_test(t => {
+  let name = 'focus-controlled-windows-1';
+  let opts = {
+    scope: makeURL(name),
+
+    frameConfigList: [
+      { url: makeURL(name, 0), withNested: false },
+      { url: makeURL(name, 1), withNested: false },
+      { url: makeURL(name, 2), withNested: false },
+    ],
+
+    focusConfigList: [
+      { index: 0, type: 'top' },
+      { index: 1, type: 'top' },
+      { index: 2, type: 'top' },
+    ],
+
+    matchAllOptions: {
+      includeUncontrolled: false
+    },
+
+    expected: [
+      makeURL(name, 2),
+      makeURL(name, 1),
+      makeURL(name, 0),
+    ],
+  };
+
+  return matchAllOrderTest(t, opts);
+}, 'Clients.matchAll() returns controlled windows in focus order.  Case 1.');
+
+promise_test(t => {
+  let name = 'focus-controlled-windows-2';
+  let opts = {
+    scope: makeURL(name),
+
+    frameConfigList: [
+      { url: makeURL(name, 0), withNested: false },
+      { url: makeURL(name, 1), withNested: false },
+      { url: makeURL(name, 2), withNested: false },
+    ],
+
+    focusConfigList: [
+      { index: 2, type: 'top' },
+      { index: 1, type: 'top' },
+      { index: 0, type: 'top' },
+    ],
+
+    matchAllOptions: {
+      includeUncontrolled: false
+    },
+
+    expected: [
+      makeURL(name, 0),
+      makeURL(name, 1),
+      makeURL(name, 2),
+    ],
+  };
+
+  return matchAllOrderTest(t, opts);
+}, 'Clients.matchAll() returns controlled windows in focus order.  Case 2.');
+
+promise_test(t => {
+  let name = 'no-focus-uncontrolled-windows';
+  let opts = {
+    scope: makeURL(name + '-outofscope'),
+
+    frameConfigList: [
+      { url: makeURL(name, 0), withNested: false },
+      { url: makeURL(name, 1), withNested: false },
+      { url: makeURL(name, 2), withNested: false },
+    ],
+
+    focusConfigList: [
+      // no focus commands
+    ],
+
+    matchAllOptions: {
+      includeUncontrolled: true
+    },
+
+    expected: [
+      // The harness windows have been focused, so appear first
+      TEST_HARNESS_URL,
+      TOP_HARNESS_URL,
+
+      // Test frames have not been focused, so appear in creation order
+      makeURL(name, 0),
+      makeURL(name, 1),
+      makeURL(name, 2),
+      EXTRA_URL,
+    ],
+  };
+
+  return matchAllOrderTest(t, opts);
+}, 'Clients.matchAll() returns non-focused uncontrolled windows in creation order.');
+
+promise_test(t => {
+  let name = 'focus-uncontrolled-windows-1';
+  let opts = {
+    scope: makeURL(name + '-outofscope'),
+
+    frameConfigList: [
+      { url: makeURL(name, 0), withNested: false },
+      { url: makeURL(name, 1), withNested: false },
+      { url: makeURL(name, 2), withNested: false },
+    ],
+
+    focusConfigList: [
+      { index: 0, type: 'top' },
+      { index: 1, type: 'top' },
+      { index: 2, type: 'top' },
+    ],
+
+    matchAllOptions: {
+      includeUncontrolled: true
+    },
+
+    expected: [
+      // The test harness window is a parent of all test frames.  It will
+      // always have the same focus time or later as its frames.  So it
+      // appears first.
+      TEST_HARNESS_URL,
+
+      makeURL(name, 2),
+      makeURL(name, 1),
+      makeURL(name, 0),
+
+      // The overall harness has been focused
+      TOP_HARNESS_URL,
+
+      // The extra frame was never focused
+      EXTRA_URL,
+    ],
+  };
+
+  return matchAllOrderTest(t, opts);
+}, 'Clients.matchAll() returns uncontrolled windows in focus order.  Case 1.');
+
+promise_test(t => {
+  let name = 'focus-uncontrolled-windows-2';
+  let opts = {
+    scope: makeURL(name + '-outofscope'),
+
+    frameConfigList: [
+      { url: makeURL(name, 0), withNested: false },
+      { url: makeURL(name, 1), withNested: false },
+      { url: makeURL(name, 2), withNested: false },
+    ],
+
+    focusConfigList: [
+      { index: 2, type: 'top' },
+      { index: 1, type: 'top' },
+      { index: 0, type: 'top' },
+    ],
+
+    matchAllOptions: {
+      includeUncontrolled: true
+    },
+
+    expected: [
+      // The test harness window is a parent of all test frames.  It will
+      // always have the same focus time or later as its frames.  So it
+      // appears first.
+      TEST_HARNESS_URL,
+
+      makeURL(name, 0),
+      makeURL(name, 1),
+      makeURL(name, 2),
+
+      // The overall harness has been focused
+      TOP_HARNESS_URL,
+
+      // The extra frame was never focused
+      EXTRA_URL,
+    ],
+  };
+
+  return matchAllOrderTest(t, opts);
+}, 'Clients.matchAll() returns uncontrolled windows in focus order.  Case 2.');
+
+promise_test(t => {
+  let name = 'focus-controlled-nested-windows';
+  let opts = {
+    scope: makeURL(name),
+
+    frameConfigList: [
+      { url: makeURL(name, 0), withNested: true },
+      { url: makeURL(name, 1), withNested: true },
+      { url: makeURL(name, 2), withNested: true },
+    ],
+
+    focusConfigList: [
+      { index: 0, type: 'top' },
+
+      // Note, some browsers don't let programmatic focus of a frame unless
+      // an ancestor window is already focused.  So focus the window and
+      // then the frame.
+      { index: 1, type: 'top' },
+      { index: 1, type: 'nested' },
+
+      { index: 2, type: 'top' },
+    ],
+
+    matchAllOptions: {
+      includeUncontrolled: false
+    },
+
+    expected: [
+      // Focus order for window 2, but not its frame.  We only focused
+      // the window.
+      makeURL(name, 2),
+
+      // Window 1 is next via focus order, but the window is always
+      // shown first here.  The window gets its last focus time updated
+      // when the frame is focused.  Since the times match between the
+      // two it falls back to creation order.  The window was created
+      // before the frame.  This behavior is being discussed in:
+      // https://github.com/w3c/ServiceWorker/issues/1080
+      makeURL(name, 1),
+      makeURL(name, 1, 'nested'),
+
+      // Focus order for window 0, but not its frame.  We only focused
+      // the window.
+      makeURL(name, 0),
+
+      // Creation order of the frames since they are not focused by
+      // default when they are created.
+      makeURL(name, 0, 'nested'),
+      makeURL(name, 2, 'nested'),
+    ],
+  };
+
+  return matchAllOrderTest(t, opts);
+}, 'Clients.matchAll() returns controlled windows and frames in focus order.');
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/clients-matchall.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/clients-matchall.https-expected.txt
new file mode 100644
index 0000000..c50d3848
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/clients-matchall.https-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Test Clients.matchAll() assert_array_equals: property 3, expected "window" but got undefined
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/clients-matchall.https.html b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/clients-matchall.https.html
index 12e3da4e..28348e2e 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/clients-matchall.https.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/clients-matchall.https.html
@@ -31,8 +31,8 @@
 
 var expected = [
     /* visibilityState, focused, url, frameType */
-    ['visible', true, new URL(scope + '#1', location).toString(), 'nested'],
-    ['visible', false, new URL(scope + '#2', location).toString(), 'nested']
+    ['visible', true, new URL(scope + '#1', location).toString(), 'window', 'nested'],
+    ['visible', false, new URL(scope + '#2', location).toString(), 'window', 'nested']
 ];
 
 function onMessage(e) {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/claim-worker.js b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/claim-worker.js
index 317feb1..53f210c 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/claim-worker.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/claim-worker.js
@@ -12,3 +12,7 @@
           event.data.port.postMessage('FAIL: exception: ' + error.name);
         });
   });
+
+self.addEventListener('fetch', function(event) {
+    event.respondWith(new Response('Intercepted!'));
+});
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/clients-matchall-worker.js b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/clients-matchall-worker.js
index f0ae90d..8849b2c 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/clients-matchall-worker.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/clients-matchall-worker.js
@@ -15,10 +15,16 @@
           message.push([client.visibilityState,
                         client.focused,
                         client.url,
+                        client.type,
                         frame_type]);
         });
       // Sort by url
-      message.sort(function(a, b) { return a[2] > b[2] ? 1 : -1; });
+      if (!e.data.disableSort) {
+        message.sort(function(a, b) { return a[2] > b[2] ? 1 : -1; });
+      }
       port.postMessage(message);
-    });
+    })
+  .catch(e => {
+      port.postMessage('clients.matchAll() rejected: ' + e);
+    })
 };
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/empty.html b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/empty.html
new file mode 100644
index 0000000..6feb119
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/empty.html
@@ -0,0 +1,6 @@
+<!doctype html>
+<html>
+<body>
+hello world
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/streams/piping/general.js b/third_party/WebKit/LayoutTests/external/wpt/streams/piping/general.js
index 42367a8e..6bc6e9b 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/streams/piping/general.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/streams/piping/general.js
@@ -155,7 +155,7 @@
 }, 'Piping from a ReadableStream for which a chunk becomes asynchronously readable after the pipeTo');
 
 for (const preventAbort of [true, false]) {
-  promise_test(t => {
+  promise_test(() => {
 
     const rs = new ReadableStream({
       pull() {
@@ -171,7 +171,7 @@
 }
 
 for (const preventCancel of [true, false]) {
-  promise_test(t => {
+  promise_test(() => {
 
     const rs = new ReadableStream({
       pull(controller) {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/streams/piping/pipe-through.js b/third_party/WebKit/LayoutTests/external/wpt/streams/piping/pipe-through.js
index 90fc1d0..57277cf 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/streams/piping/pipe-through.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/streams/piping/pipe-through.js
@@ -37,7 +37,7 @@
     assert_array_equals(chunks, [1, 2, 3, 4, 5]), 'chunks should match');
 }, 'Piping through a duck-typed pass-through transform stream should work');
 
-promise_test(t => {
+promise_test(() => {
   const transform = {
     writable: new WritableStream({
       start(c) {
@@ -77,7 +77,7 @@
 
 test(() => {
   const dummy = {
-    pipeTo(args) {
+    pipeTo() {
       return { not: 'a promise' };
     }
   };
@@ -90,7 +90,7 @@
 
 test(() => {
   const dummy = {
-    pipeTo(args) {
+    pipeTo() {
       return {
         then() {},
         this: 'is not a real promise'
diff --git a/third_party/WebKit/LayoutTests/external/wpt/streams/readable-byte-streams/general.js b/third_party/WebKit/LayoutTests/external/wpt/streams/readable-byte-streams/general.js
index ef74ae1b..672598f 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/streams/readable-byte-streams/general.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/streams/readable-byte-streams/general.js
@@ -101,7 +101,7 @@
 }, 'ReadableStream with byte source: Construct with highWaterMark of 0');
 
 test(() => {
-  const rs = new ReadableStream({
+  new ReadableStream({
     start(c) {
       assert_equals(c.desiredSize, 10, 'desiredSize must start at the highWaterMark');
       c.close();
@@ -114,7 +114,7 @@
 }, 'ReadableStream with byte source: desiredSize when closed');
 
 test(() => {
-  const rs = new ReadableStream({
+  new ReadableStream({
     start(c) {
       assert_equals(c.desiredSize, 10, 'desiredSize must start at the highWaterMark');
       c.error();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/streams/readable-streams/bad-underlying-sources.js b/third_party/WebKit/LayoutTests/external/wpt/streams/readable-streams/bad-underlying-sources.js
index 0d5b817c..2f2dec4 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/streams/readable-streams/bad-underlying-sources.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/streams/readable-streams/bad-underlying-sources.js
@@ -153,7 +153,7 @@
   });
 
   rs.cancel();
-  assert_throws(new TypeError, () => controller.enqueue('a'), 'Calling enqueue after canceling should throw');
+  assert_throws(new TypeError(), () => controller.enqueue('a'), 'Calling enqueue after canceling should throw');
 
   return rs.getReader().closed;
 
@@ -171,7 +171,7 @@
   });
 
   rs.cancel();
-  assert_throws(new TypeError, () => controller.enqueue('c'), 'Calling enqueue after canceling should throw');
+  assert_throws(new TypeError(), () => controller.enqueue('c'), 'Calling enqueue after canceling should throw');
 
   return rs.getReader().closed;
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/streams/readable-streams/cancel.js b/third_party/WebKit/LayoutTests/external/wpt/streams/readable-streams/cancel.js
index 3857c8e..f8f7eec7 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/streams/readable-streams/cancel.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/streams/readable-streams/cancel.js
@@ -39,10 +39,10 @@
   // We call delay multiple times to avoid cancelling too early for the
   // source to enqueue at least one chunk.
   const cancel = delay(5).then(() => delay(5)).then(() => delay(5)).then(() => {
-    let cancelPromise = reader.cancel();
+    const cancelPromise = reader.cancel();
     assert_false(cancellationFinished, 'cancellation in source should happen later');
     return cancelPromise;
-  })
+  });
 
   return readableStreamToArray(rs, reader).then(chunks => {
     assert_greater_than(chunks.length, 0, 'at least one chunk should be read');
diff --git a/third_party/WebKit/LayoutTests/external/wpt/streams/readable-streams/default-reader.js b/third_party/WebKit/LayoutTests/external/wpt/streams/readable-streams/default-reader.js
index dbe8d95..1a5d3a4 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/streams/readable-streams/default-reader.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/streams/readable-streams/default-reader.js
@@ -350,8 +350,8 @@
     }
   );
 
-}, 'ReadableStreamDefaultReader: if start rejects with no parameter, it should error the stream with an undefined '
-    + 'error');
+}, 'ReadableStreamDefaultReader: if start rejects with no parameter, it should error the stream with an undefined ' +
+    'error');
 
 promise_test(t => {
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/streams/readable-streams/general.js b/third_party/WebKit/LayoutTests/external/wpt/streams/readable-streams/general.js
index edb49f4..95921cb 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/streams/readable-streams/general.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/streams/readable-streams/general.js
@@ -195,7 +195,9 @@
   const theError = new Error('rejected!');
   const rs = new ReadableStream({
     start() {
-      return delay(1).then(() => { throw theError; });
+      return delay(1).then(() => {
+        throw theError;
+      });
     }
   });
 
@@ -733,7 +735,7 @@
 }, 'ReadableStream: should call underlying source methods as methods');
 
 test(() => {
-  const rs = new ReadableStream({
+  new ReadableStream({
     start(c) {
       assert_equals(c.desiredSize, 10, 'desiredSize must start at highWaterMark');
       c.close();
@@ -745,7 +747,7 @@
 }, 'ReadableStream: desiredSize when closed');
 
 test(() => {
-  const rs = new ReadableStream({
+  new ReadableStream({
     start(c) {
       assert_equals(c.desiredSize, 10, 'desiredSize must start at highWaterMark');
       c.error();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/streams/readable-streams/pipe-through.js b/third_party/WebKit/LayoutTests/external/wpt/streams/readable-streams/pipe-through.js
index 4988928e..7878334 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/streams/readable-streams/pipe-through.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/streams/readable-streams/pipe-through.js
@@ -9,8 +9,8 @@
 
   let pipeToArguments;
   const thisValue = {
-    pipeTo() {
-      pipeToArguments = arguments;
+    pipeTo(...args) {
+      pipeToArguments = args;
     }
   };
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/aborting-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/aborting-expected.txt
index a879df2..fd1b4a7 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/aborting-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/aborting-expected.txt
@@ -25,11 +25,12 @@
 PASS underlying abort() should not be called if underlying close() has started 
 PASS if underlying close() has started and then rejects, the abort() and close() promises should reject with the underlying close rejection reason 
 PASS underlying abort() should be called while closing if underlying close() has not started yet 
+FAIL if a writer is created for a stream with a pending abort, its ready should be rejected with a TypeError assert_unreached: Should have rejected: ready of the second writer should be rejected with a TypeError Reached unreachable code
 PASS writer close() promise should resolve before abort() promise 
 PASS writer.ready should reject on controller error without waiting for underlying write 
-FAIL writer.abort() while there is a pending write, and then finish the write with rejection assert_array_equals: writePromise, abortPromise and writer.closed must reject property 1, expected "abortPromise" but got "closed"
-FAIL writer.abort(), controller.error() while there is a pending write, and then finish the write promise_test: Unhandled rejection with value: object "TypeError: Cannot error a errored writable stream"
-PASS controller.error(), writer.abort() while there is a pending write, and then finish the write 
+FAIL writer.abort() while there is an in-flight write, and then finish the write with rejection assert_array_equals: writePromise, abortPromise and writer.closed must reject property 1, expected "abortPromise" but got "closed"
+FAIL writer.abort(), controller.error() while there is an in-flight write, and then finish the write promise_test: Unhandled rejection with value: object "TypeError: Cannot error a errored writable stream"
+PASS controller.error(), writer.abort() while there is an in-flight write, and then finish the write 
 PASS releaseLock() while aborting should reject the original closed promise 
 PASS releaseLock() during delayed async abort() should create a new rejected closed promise 
 Harness: the test ran to completion.
diff --git a/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/aborting.dedicatedworker-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/aborting.dedicatedworker-expected.txt
index a879df2..fd1b4a7 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/aborting.dedicatedworker-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/aborting.dedicatedworker-expected.txt
@@ -25,11 +25,12 @@
 PASS underlying abort() should not be called if underlying close() has started 
 PASS if underlying close() has started and then rejects, the abort() and close() promises should reject with the underlying close rejection reason 
 PASS underlying abort() should be called while closing if underlying close() has not started yet 
+FAIL if a writer is created for a stream with a pending abort, its ready should be rejected with a TypeError assert_unreached: Should have rejected: ready of the second writer should be rejected with a TypeError Reached unreachable code
 PASS writer close() promise should resolve before abort() promise 
 PASS writer.ready should reject on controller error without waiting for underlying write 
-FAIL writer.abort() while there is a pending write, and then finish the write with rejection assert_array_equals: writePromise, abortPromise and writer.closed must reject property 1, expected "abortPromise" but got "closed"
-FAIL writer.abort(), controller.error() while there is a pending write, and then finish the write promise_test: Unhandled rejection with value: object "TypeError: Cannot error a errored writable stream"
-PASS controller.error(), writer.abort() while there is a pending write, and then finish the write 
+FAIL writer.abort() while there is an in-flight write, and then finish the write with rejection assert_array_equals: writePromise, abortPromise and writer.closed must reject property 1, expected "abortPromise" but got "closed"
+FAIL writer.abort(), controller.error() while there is an in-flight write, and then finish the write promise_test: Unhandled rejection with value: object "TypeError: Cannot error a errored writable stream"
+PASS controller.error(), writer.abort() while there is an in-flight write, and then finish the write 
 PASS releaseLock() while aborting should reject the original closed promise 
 PASS releaseLock() during delayed async abort() should create a new rejected closed promise 
 Harness: the test ran to completion.
diff --git a/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/aborting.js b/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/aborting.js
index 6f4e06c..6b2f86e 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/aborting.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/aborting.js
@@ -370,7 +370,7 @@
   return writer.ready.then(() => {
     const settlementOrder = [];
     return Promise.all([
-      promise_rejects(t, error1, writer.write('1'), 'pending write should be rejected')
+      promise_rejects(t, error1, writer.write('1'), 'in-flight write should be rejected')
           .then(() => settlementOrder.push(1)),
       promise_rejects(t, error1, writer.write('2'), 'first queued write should be rejected')
           .then(() => settlementOrder.push(2)),
@@ -416,7 +416,7 @@
     writer.write('a');
     const abortPromise = writer.abort();
     return flushAsyncEvents().then(() => {
-      assert_false(abortCalled, 'abort should not be called while write is pending');
+      assert_false(abortCalled, 'abort should not be called while write is in-flight');
       resolveWrite();
       return abortPromise.then(() => assert_true(abortCalled, 'abort should be called'));
     });
@@ -442,7 +442,7 @@
     writer.close();
     const abortPromise = writer.abort();
     return flushAsyncEvents().then(() => {
-      assert_false(abortCalled, 'underlying abort should not be called while close is pending');
+      assert_false(abortCalled, 'underlying abort should not be called while close is in-flight');
       resolveClose();
       return abortPromise.then(() => {
         assert_false(abortCalled, 'underlying abort should not be called after close completes');
@@ -470,7 +470,7 @@
     const closePromise = writer.close();
     const abortPromise = writer.abort();
     return flushAsyncEvents().then(() => {
-      assert_false(abortCalled, 'underlying abort should not be called while close is pending');
+      assert_false(abortCalled, 'underlying abort should not be called while close is in-flight');
       rejectClose(error1);
       return promise_rejects(t, error1, abortPromise, 'abort should reject with the same reason').then(() => {
         return promise_rejects(t, error1, closePromise, 'close should reject with the same reason');
@@ -502,7 +502,7 @@
     const closePromise = writer.close();
     const abortPromise = writer.abort();
     return flushAsyncEvents().then(() => {
-      assert_false(abortCalled, 'abort should not be called while write is pending');
+      assert_false(abortCalled, 'abort should not be called while write is in-flight');
       resolveWrite();
       return abortPromise.then(() => {
         assert_true(abortCalled, 'abort should be called after write completes');
@@ -512,6 +512,24 @@
   });
 }, 'underlying abort() should be called while closing if underlying close() has not started yet');
 
+promise_test(t => {
+  const ws = new WritableStream({
+    write() {
+      return new Promise(() => {});
+    }
+  });
+
+  const writer = ws.getWriter();
+  return writer.ready.then(() => {
+    writer.write('a');
+    writer.abort();
+    writer.releaseLock();
+    const writer2 = ws.getWriter();
+    return promise_rejects(t, new TypeError(), writer2.ready,
+                           'ready of the second writer should be rejected with a TypeError');
+  });
+}, 'if a writer is created for a stream with a pending abort, its ready should be rejected with a TypeError');
+
 promise_test(() => {
   const ws = new WritableStream();
   const writer = ws.getWriter();
@@ -616,7 +634,7 @@
                       'writer.closed must be rejected with an error indicating release')
     ]);
   });
-}, 'writer.abort() while there is a pending write, and then finish the write with rejection');
+}, 'writer.abort() while there is an in-flight write, and then finish the write with rejection');
 
 promise_test(t => {
   let resolveWrite;
@@ -677,8 +695,8 @@
   }).then(() => {
     assert_array_equals(
         events, [],
-        'writePromise, abortPromise and writer.closed must not be fulfilled/rejected yet even after '
-            + 'controller.error() call');
+        'writePromise, abortPromise and writer.closed must not be fulfilled/rejected yet even after ' +
+            'controller.error() call');
 
     resolveWrite();
 
@@ -713,7 +731,7 @@
                       'writer.closed must be rejected with an error indicating release')
     ]);
   });
-}, 'writer.abort(), controller.error() while there is a pending write, and then finish the write');
+}, 'writer.abort(), controller.error() while there is an in-flight write, and then finish the write');
 
 promise_test(t => {
   let resolveWrite;
@@ -808,7 +826,7 @@
                       'writer.closed must be rejected with an error indicating release')
     ]);
   });
-}, 'controller.error(), writer.abort() while there is a pending write, and then finish the write');
+}, 'controller.error(), writer.abort() while there is an in-flight write, and then finish the write');
 
 promise_test(t => {
   let resolveWrite;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/aborting.serviceworker.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/aborting.serviceworker.https-expected.txt
index a37d430..ad1c7fb1 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/aborting.serviceworker.https-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/aborting.serviceworker.https-expected.txt
@@ -26,11 +26,12 @@
 PASS underlying abort() should not be called if underlying close() has started 
 PASS if underlying close() has started and then rejects, the abort() and close() promises should reject with the underlying close rejection reason 
 PASS underlying abort() should be called while closing if underlying close() has not started yet 
+FAIL if a writer is created for a stream with a pending abort, its ready should be rejected with a TypeError assert_unreached: Should have rejected: ready of the second writer should be rejected with a TypeError Reached unreachable code
 PASS writer close() promise should resolve before abort() promise 
 PASS writer.ready should reject on controller error without waiting for underlying write 
-FAIL writer.abort() while there is a pending write, and then finish the write with rejection assert_array_equals: writePromise, abortPromise and writer.closed must reject property 1, expected "abortPromise" but got "closed"
-FAIL writer.abort(), controller.error() while there is a pending write, and then finish the write promise_test: Unhandled rejection with value: object "TypeError: Cannot error a errored writable stream"
-PASS controller.error(), writer.abort() while there is a pending write, and then finish the write 
+FAIL writer.abort() while there is an in-flight write, and then finish the write with rejection assert_array_equals: writePromise, abortPromise and writer.closed must reject property 1, expected "abortPromise" but got "closed"
+FAIL writer.abort(), controller.error() while there is an in-flight write, and then finish the write promise_test: Unhandled rejection with value: object "TypeError: Cannot error a errored writable stream"
+PASS controller.error(), writer.abort() while there is an in-flight write, and then finish the write 
 PASS releaseLock() while aborting should reject the original closed promise 
 PASS releaseLock() during delayed async abort() should create a new rejected closed promise 
 Harness: the test ran to completion.
diff --git a/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/aborting.sharedworker-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/aborting.sharedworker-expected.txt
index a879df2..fd1b4a7 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/aborting.sharedworker-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/aborting.sharedworker-expected.txt
@@ -25,11 +25,12 @@
 PASS underlying abort() should not be called if underlying close() has started 
 PASS if underlying close() has started and then rejects, the abort() and close() promises should reject with the underlying close rejection reason 
 PASS underlying abort() should be called while closing if underlying close() has not started yet 
+FAIL if a writer is created for a stream with a pending abort, its ready should be rejected with a TypeError assert_unreached: Should have rejected: ready of the second writer should be rejected with a TypeError Reached unreachable code
 PASS writer close() promise should resolve before abort() promise 
 PASS writer.ready should reject on controller error without waiting for underlying write 
-FAIL writer.abort() while there is a pending write, and then finish the write with rejection assert_array_equals: writePromise, abortPromise and writer.closed must reject property 1, expected "abortPromise" but got "closed"
-FAIL writer.abort(), controller.error() while there is a pending write, and then finish the write promise_test: Unhandled rejection with value: object "TypeError: Cannot error a errored writable stream"
-PASS controller.error(), writer.abort() while there is a pending write, and then finish the write 
+FAIL writer.abort() while there is an in-flight write, and then finish the write with rejection assert_array_equals: writePromise, abortPromise and writer.closed must reject property 1, expected "abortPromise" but got "closed"
+FAIL writer.abort(), controller.error() while there is an in-flight write, and then finish the write promise_test: Unhandled rejection with value: object "TypeError: Cannot error a errored writable stream"
+PASS controller.error(), writer.abort() while there is an in-flight write, and then finish the write 
 PASS releaseLock() while aborting should reject the original closed promise 
 PASS releaseLock() during delayed async abort() should create a new rejected closed promise 
 Harness: the test ran to completion.
diff --git a/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/close.js b/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/close.js
index 5844f367..80c9db5 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/close.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/close.js
@@ -60,7 +60,7 @@
   return writer.close().then(() => promise_rejects(t, passedError, writer.closed, 'closed should stay rejected'));
 }, 'when sink calls error synchronously while closing, the stream should become errored');
 
-promise_test(t => {
+promise_test(() => {
   const ws = new WritableStream({
     write(chunk, controller) {
       controller.error(error1);
@@ -76,7 +76,7 @@
   });
 }, 'releaseLock on a stream with a pending write in which the stream has been errored');
 
-promise_test(t => {
+promise_test(() => {
   const ws = new WritableStream({
     close(controller) {
       controller.error(error1);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/write.js b/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/write.js
index 8b86f0d..7d040f8 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/write.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/streams/writable-streams/write.js
@@ -191,8 +191,8 @@
                       'writer.closed must reject with the error passed to the controller')
     ]);
   });
-}, 'writer.write(), ready and closed reject with the error passed to controller.error() made before sink.write'
-    + ' rejection');
+}, 'writer.write(), ready and closed reject with the error passed to controller.error() made before sink.write' +
+    ' rejection');
 
 promise_test(() => {
   const numberOfWrites = 1000;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/uievents/interface/click-event-manual.htm b/third_party/WebKit/LayoutTests/external/wpt/uievents/interface/click-event-manual.htm
new file mode 100644
index 0000000..88db98d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/uievents/interface/click-event-manual.htm
@@ -0,0 +1,21 @@
+<!doctype html>
+<html>
+  <head>
+    <title>Click event is a MouseEvent</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <style>#clicktarget { width: 100px; height: 100px; background-color: red; }</style>
+  </head>
+  <body>
+    <div id='clicktarget'>Click in this box.</div>
+    <div id="log"></div>
+    <script type="text/javascript">
+var t = async_test('click event generated from user action "click" is a MouseEvent');
+document.querySelector("#clicktarget").addEventListener('click', t.step_func(function (e) {
+    assert_equals(e.constructor, window.MouseEvent);
+    document.querySelector("#clicktarget").style.backgroundColor = "green";
+    t.done();
+}));
+    </script>
+  </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/uievents/interface/click-event.htm b/third_party/WebKit/LayoutTests/external/wpt/uievents/interface/click-event.htm
new file mode 100644
index 0000000..2f9b483
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/uievents/interface/click-event.htm
@@ -0,0 +1,22 @@
+<!doctype html>
+<html>
+  <head>
+    <title>Click event is a MouseEvent</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+  </head>
+  <body>
+    <div id='clicktarget'></div>
+    <div id="log"></div>
+    <script type="text/javascript">
+    var clicktarget = document.querySelector("#clicktarget");
+    var t = async_test("synthetic click event is a MouseEvent");
+    clicktarget.addEventListener('click', t.step_func(function (e) {
+      assert_equals(e.constructor, window.MouseEvent);
+      assert_true(e instanceof window.MouseEvent);
+      t.done();
+    }));
+    document.querySelector('#clicktarget').click();
+    </script>
+  </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/uievents/interface/dblclick-event-manual.htm b/third_party/WebKit/LayoutTests/external/wpt/uievents/interface/dblclick-event-manual.htm
new file mode 100644
index 0000000..7ea0bdbf
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/uievents/interface/dblclick-event-manual.htm
@@ -0,0 +1,21 @@
+<!doctype html>
+<html>
+  <head>
+    <title>Double click (dblclick) event is a MouseEvent</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <style>#clicktarget { width: 100px; height: 100px; background-color: red; }</style>
+  </head>
+  <body>
+    <div id='clicktarget'>Double Click in this box.</div>
+    <div id="log"></div>
+    <script type="text/javascript">
+var t = async_test('click event generated from user action "click" is a MouseEvent');
+document.querySelector("#clicktarget").addEventListener('dblclick', t.step_func(function (e) {
+    assert_equals(e.constructor, window.MouseEvent);
+    document.querySelector("#clicktarget").style.backgroundColor = "green";
+    t.done();
+}));
+    </script>
+  </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-animations/interfaces/Animatable/animate-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/web-animations/interfaces/Animatable/animate-expected.txt
index a67c88a..d99f559 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/web-animations/interfaces/Animatable/animate-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/web-animations/interfaces/Animatable/animate-expected.txt
@@ -1,10 +1,13 @@
 This is a testharness.js-based test.
-Found 67 tests; 25 PASS, 42 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 82 tests; 38 PASS, 44 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS Element.animate() creates an Animation object 
 FAIL Element.animate() creates an Animation object in the relevant realm of the target element Cannot read property 'prototype' of undefined
 PASS Element.animate() creates an Animation object with a KeyframeEffect 
 PASS Element.animate() creates an Animation object with a KeyframeEffect that is created in the relevant realm of the target element 
 PASS Element.animate() creates an Animation object with a KeyframeEffect whose AnimationEffectTiming object is created in the relevant realm of the target element 
+PASS Element.animate() accepts empty keyframe lists (input: []) 
+PASS Element.animate() accepts empty keyframe lists (input: null) 
+PASS Element.animate() accepts empty keyframe lists (input: undefined) 
 FAIL Element.animate() accepts a one property two value property-indexed keyframes specification anim.effect.getKeyframes is not a function
 FAIL Element.animate() accepts a one shorthand property two value property-indexed keyframes specification anim.effect.getKeyframes is not a function
 FAIL Element.animate() accepts a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification anim.effect.getKeyframes is not a function
@@ -26,9 +29,11 @@
 FAIL Element.animate() accepts a keyframe sequence with duplicate values for a given interior offset anim.effect.getKeyframes is not a function
 FAIL Element.animate() accepts a keyframe sequence with duplicate values for offsets 0 and 1 anim.effect.getKeyframes is not a function
 FAIL Element.animate() accepts a two property four keyframe sequence anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a single keyframe sequence with omitted offsets anim.effect.getKeyframes is not a function
+FAIL Element.animate() accepts a single keyframe sequence with omitted offset anim.effect.getKeyframes is not a function
+FAIL Element.animate() accepts a single keyframe sequence with null offset anim.effect.getKeyframes is not a function
 FAIL Element.animate() accepts a single keyframe sequence with string offset anim.effect.getKeyframes is not a function
 FAIL Element.animate() accepts a one property keyframe sequence with some omitted offsets anim.effect.getKeyframes is not a function
+FAIL Element.animate() accepts a one property keyframe sequence with some null offsets anim.effect.getKeyframes is not a function
 FAIL Element.animate() accepts a two property keyframe sequence with some omitted offsets anim.effect.getKeyframes is not a function
 FAIL Element.animate() accepts a one property keyframe sequence with all omitted offsets anim.effect.getKeyframes is not a function
 FAIL Element.animate() accepts a keyframe sequence with different easing values, but the same easing value for a given offset anim.effect.getKeyframes is not a function
@@ -52,13 +57,23 @@
       div.animate(subtest.input, 2000);
     }" did not throw
 PASS Element.animate() does not accept invalid easing: '' 
+PASS Element.animate() does not accept invalid easing: '7' 
 PASS Element.animate() does not accept invalid easing: 'test' 
+PASS Element.animate() does not accept invalid easing: 'initial' 
+PASS Element.animate() does not accept invalid easing: 'inherit' 
+PASS Element.animate() does not accept invalid easing: 'unset' 
 PASS Element.animate() does not accept invalid easing: 'cubic-bezier(1.1, 0, 1, 1)' 
 PASS Element.animate() does not accept invalid easing: 'cubic-bezier(0, 0, 1.1, 1)' 
 PASS Element.animate() does not accept invalid easing: 'cubic-bezier(-0.1, 0, 1, 1)' 
 PASS Element.animate() does not accept invalid easing: 'cubic-bezier(0, 0, -0.1, 1)' 
+PASS Element.animate() does not accept invalid easing: 'cubic-bezier(0.1, 0, 4, 0.4)' 
 PASS Element.animate() does not accept invalid easing: 'steps(-1, start)' 
 PASS Element.animate() does not accept invalid easing: 'steps(0.1, start)' 
+PASS Element.animate() does not accept invalid easing: 'steps(3, nowhere)' 
+PASS Element.animate() does not accept invalid easing: 'steps(-3, end)' 
+PASS Element.animate() does not accept invalid easing: 'function (a){return a}' 
+PASS Element.animate() does not accept invalid easing: 'function (x){return x}' 
+PASS Element.animate() does not accept invalid easing: 'function(x, y){return 0.3}' 
 PASS Element.animate() accepts a double as an options argument 
 PASS Element.animate() accepts a KeyframeAnimationOptions argument 
 PASS Element.animate() accepts an absent options argument 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-animations/interfaces/Animatable/animate.html b/third_party/WebKit/LayoutTests/external/wpt/web-animations/interfaces/Animatable/animate.html
index 6c5dae0..4257033 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/web-animations/interfaces/Animatable/animate.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/web-animations/interfaces/Animatable/animate.html
@@ -72,6 +72,15 @@
    + ' whose AnimationEffectTiming object is created in the relevant realm'
    + ' of the target element');
 
+gEmptyKeyframeListTests.forEach(function(subTest) {
+  test(function(t) {
+    var div = createDiv(t);
+    var anim = div.animate(subTest, 2000);
+    assert_not_equals(anim, null);
+  }, 'Element.animate() accepts empty keyframe lists ' +
+     `(input: ${JSON.stringify(subTest)})`);
+});
+
 gPropertyIndexedKeyframesTests.forEach(function(subtest) {
   test(function(t) {
     var div = createDiv(t);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-animations/interfaces/AnimationEffectTiming/easing-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/web-animations/interfaces/AnimationEffectTiming/easing-expected.txt
new file mode 100644
index 0000000..40d75ee6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/web-animations/interfaces/AnimationEffectTiming/easing-expected.txt
@@ -0,0 +1,46 @@
+This is a testharness.js-based test.
+PASS Test default value 
+PASS step-start function 
+PASS steps(1, start) function 
+PASS steps(2, start) function 
+PASS step-end function 
+PASS steps(1) function 
+PASS steps(1, end) function 
+PASS steps(2, end) function 
+PASS linear function 
+PASS ease function 
+PASS ease-in function 
+PASS ease-in-out function 
+PASS ease-out function 
+PASS easing function which produces values greater than 1 
+PASS easing function which produces values less than 1 
+PASS Invalid effect easing value test: '' 
+PASS Invalid effect easing value test: '7' 
+PASS Invalid effect easing value test: 'test' 
+PASS Invalid effect easing value test: 'initial' 
+PASS Invalid effect easing value test: 'inherit' 
+PASS Invalid effect easing value test: 'unset' 
+PASS Invalid effect easing value test: 'cubic-bezier(1.1, 0, 1, 1)' 
+PASS Invalid effect easing value test: 'cubic-bezier(0, 0, 1.1, 1)' 
+PASS Invalid effect easing value test: 'cubic-bezier(-0.1, 0, 1, 1)' 
+PASS Invalid effect easing value test: 'cubic-bezier(0, 0, -0.1, 1)' 
+PASS Invalid effect easing value test: 'cubic-bezier(0.1, 0, 4, 0.4)' 
+PASS Invalid effect easing value test: 'steps(-1, start)' 
+PASS Invalid effect easing value test: 'steps(0.1, start)' 
+PASS Invalid effect easing value test: 'steps(3, nowhere)' 
+PASS Invalid effect easing value test: 'steps(-3, end)' 
+PASS Invalid effect easing value test: 'function (a){return a}' 
+PASS Invalid effect easing value test: 'function (x){return x}' 
+PASS Invalid effect easing value test: 'function(x, y){return 0.3}' 
+PASS Canonical easing 'ease' is returned as set 
+PASS Canonical easing 'linear' is returned as set 
+PASS Canonical easing 'ease-in' is returned as set 
+PASS Canonical easing 'ease-out' is returned as set 
+PASS Canonical easing 'ease-in-out' is returned as set 
+PASS Canonical easing 'cubic-bezier(0.1, 5, 0.23, 0)' is returned as set 
+PASS Canonical easing 'steps(3, start)' is returned as set 
+PASS Canonical easing 'steps(3)' is returned as set 
+FAIL Canonical easing 'frames(3)' is returned as set Failed to set the 'easing' property on 'AnimationEffectTiming': 'frames(3)' is not a valid value for easing
+PASS Change the easing while the animation is running 
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-animations/interfaces/AnimationEffectTiming/easing.html b/third_party/WebKit/LayoutTests/external/wpt/web-animations/interfaces/AnimationEffectTiming/easing.html
index 73cdf66..11173fc 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/web-animations/interfaces/AnimationEffectTiming/easing.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/web-animations/interfaces/AnimationEffectTiming/easing.html
@@ -56,6 +56,14 @@
   }, 'Invalid effect easing value test: \'' + invalidEasing + '\'');
 });
 
+gRoundtripEasings.forEach(easing => {
+  test(function(t) {
+    const anim = createDiv(t).animate(null);
+    anim.effect.timing.easing = easing;
+    assert_equals(anim.effect.timing.easing, easing);
+  }, `Canonical easing '${easing}' is returned as set`);
+});
+
 test(function(t) {
   var delay = 1000 * MS_PER_SEC;
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-animations/resources/easing-tests.js b/third_party/WebKit/LayoutTests/external/wpt/web-animations/resources/easing-tests.js
index b983eae..7efaa9b 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/web-animations/resources/easing-tests.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/web-animations/resources/easing-tests.js
@@ -75,13 +75,36 @@
   }
 ];
 
-var gInvalidEasings = [
+const gInvalidEasings = [
   '',
+  '7',
   'test',
+  'initial',
+  'inherit',
+  'unset',
   'cubic-bezier(1.1, 0, 1, 1)',
   'cubic-bezier(0, 0, 1.1, 1)',
   'cubic-bezier(-0.1, 0, 1, 1)',
   'cubic-bezier(0, 0, -0.1, 1)',
+  'cubic-bezier(0.1, 0, 4, 0.4)',
   'steps(-1, start)',
-  'steps(0.1, start)'
+  'steps(0.1, start)',
+  'steps(3, nowhere)',
+  'steps(-3, end)',
+  'function (a){return a}',
+  'function (x){return x}',
+  'function(x, y){return 0.3}',
+];
+
+// Easings that should serialize to the same string
+const gRoundtripEasings = [
+  'ease',
+  'linear',
+  'ease-in',
+  'ease-out',
+  'ease-in-out',
+  'cubic-bezier(0.1, 5, 0.23, 0)',
+  'steps(3, start)',
+  'steps(3)',
+  'frames(3)',
 ];
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webrtc/rtcpeerconnection/rtcpeerconnection-constructor-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/webrtc/rtcpeerconnection/rtcpeerconnection-constructor-expected.txt
index 1a4e415..3abfcc7 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webrtc/rtcpeerconnection/rtcpeerconnection-constructor-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/webrtc/rtcpeerconnection/rtcpeerconnection-constructor-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 73 tests; 61 PASS, 12 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 73 tests; 62 PASS, 11 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS RTCPeerConnection.length 
 PASS new RTCPeerConnection() 
 PASS new RTCPeerConnection(null) 
@@ -67,9 +67,7 @@
 PASS new RTCPeerConnection({ certificates: [] }) 
 PASS new RTCPeerConnection({ certificates: [null] }) 
 PASS new RTCPeerConnection({ certificates: [undefined] }) 
-FAIL new RTCPeerConnection({ iceCandidatePoolSize: toNumberThrows }) assert_throws: function "function () {
-        eval(expr);
-      }" did not throw
+PASS new RTCPeerConnection({ iceCandidatePoolSize: toNumberThrows }) 
 PASS new RTCPeerConnection({ certificates: [certificate] }) 
 PASS new RTCPeerConnection({ certificates: [expiredCertificate] }) 
 PASS localDescription initial value 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webstorage/storage_string_conversion-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/webstorage/storage_string_conversion-expected.txt
new file mode 100644
index 0000000..d4dae598
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/webstorage/storage_string_conversion-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL localStorage only stores strings assert_equals: expected "function(){}" but got "function (){}"
+FAIL sessionStorage only stores strings assert_equals: expected "function(){}" but got "function (){}"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webstorage/storage_string_conversion.html b/third_party/WebKit/LayoutTests/external/wpt/webstorage/storage_string_conversion.html
index 518b275..c76eddf 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webstorage/storage_string_conversion.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webstorage/storage_string_conversion.html
@@ -22,21 +22,21 @@
         storage.b = 0;
         assert_equals(storage.b, "0");
         storage.c = function(){};
-        assert_equals(storage.c, "function (){}");
+        assert_equals(storage.c, "function(){}");
 
         storage.setItem('d', null);
         assert_equals(storage.d, "null");
         storage.setItem('e', 0);
         assert_equals(storage.e, "0");
         storage.setItem('f', function(){});
-        assert_equals(storage.f, "function (){}");
+        assert_equals(storage.f, "function(){}");
 
         storage['g'] = null;
         assert_equals(storage.g, "null");
         storage['h'] = 0;
         assert_equals(storage.h, "0");
         storage['i'] = function(){};
-        assert_equals(storage.f, "function (){}");
+        assert_equals(storage.f, "function(){}");
 
     }, name + " only stores strings");
 });
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/api/VTTCue/getCueAsHTML-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/webvtt/api/VTTCue/getCueAsHTML-expected.txt
index 8b033086f4..3cf8846 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/api/VTTCue/getCueAsHTML-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/api/VTTCue/getCueAsHTML-expected.txt
@@ -9,7 +9,7 @@
 PASS VTTCue.getCueAsHTML(), <rt> 
 PASS VTTCue.getCueAsHTML(), <v> 
 PASS VTTCue.getCueAsHTML(), <v a b> 
-PASS VTTCue.getCueAsHTML(), <00:00:00.500> 
+FAIL VTTCue.getCueAsHTML(), <1:00:00.500> assert_equals: data expected "01:00:00.500" but got "1:00:00.500"
 FAIL VTTCue.getCueAsHTML(), x\0 assert_equals: data expected "x\0" but got "x"
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/api/VTTCue/getCueAsHTML.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/api/VTTCue/getCueAsHTML.html
index 5c96644..2f07d3a 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/api/VTTCue/getCueAsHTML.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/api/VTTCue/getCueAsHTML.html
@@ -9,7 +9,7 @@
     var video = document.createElement('video');
     var t1 = video.addTextTrack('subtitles');
     document.body.appendChild(video);
-    var c1 = new VTTCue(0, 1, '<c></c><c.a.b></c><i></i><b></b><u></u><ruby><rt></rt></ruby><v></v><v a b></v><00:00:00.500>x\0');
+    var c1 = new VTTCue(0, 1, '<c></c><c.a.b></c><i></i><b></b><u></u><ruby><rt></rt></ruby><v></v><v a b></v><1:00:00.500>x\0');
     t1.addCue(c1);
     window.frag = c1.getCueAsHTML();
     assert_equals(frag.childNodes.length, 10, 'childNodes.length');
@@ -83,9 +83,9 @@
 }, document.title+', <v a b>');
 test(function(){
     assert_equals(frag.childNodes[8].target, 'timestamp', 'target');
-    assert_equals(frag.childNodes[8].data, '00:00:00.500', 'data');
+    assert_equals(frag.childNodes[8].data, '01:00:00.500', 'data');
     assert_true(frag.childNodes[8] instanceof ProcessingInstruction, 'instanceof');
-}, document.title+', <00:00:00.500>');
+}, document.title+', <1:00:00.500>');
 test(function(){
     assert_equals(frag.childNodes[9].data, 'x\0', 'data');
     assert_true(frag.childNodes[9] instanceof Text, 'instanceof');
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/api/VTTCue/text.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/api/VTTCue/text.html
index 54a0890..8ceb3a6 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/api/VTTCue/text.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/api/VTTCue/text.html
@@ -12,7 +12,7 @@
 });
 test(function(){
     var c1 = new VTTCue(0, 1, 'text1\r\n\n\u0000');
-    assert_true('text' in cue, 'text is not supported');
+    assert_true('text' in c1, 'text is not supported');
     assert_equals(c1.text, 'text1\r\n\n\u0000');
     c1.text = c1.text;
     assert_equals(c1.text, 'text1\r\n\n\u0000');
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/api/interfaces-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/webvtt/api/interfaces-expected.txt
new file mode 100644
index 0000000..702181706
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/api/interfaces-expected.txt
@@ -0,0 +1,67 @@
+This is a testharness.js-based test.
+Found 63 tests; 57 PASS, 6 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS VTTCue interface: existence and properties of interface object 
+PASS VTTCue interface object length 
+PASS VTTCue interface object name 
+FAIL VTTCue interface: existence and properties of interface prototype object assert_equals: class string of VTTCue.prototype expected "[object VTTCuePrototype]" but got "[object VTTCue]"
+PASS VTTCue interface: existence and properties of interface prototype object's "constructor" property 
+PASS VTTCue interface: attribute region 
+PASS VTTCue interface: attribute vertical 
+PASS VTTCue interface: attribute snapToLines 
+PASS VTTCue interface: attribute line 
+FAIL VTTCue interface: attribute lineAlign assert_true: The prototype object must have a property "lineAlign" expected true got false
+PASS VTTCue interface: attribute position 
+FAIL VTTCue interface: attribute positionAlign assert_true: The prototype object must have a property "positionAlign" expected true got false
+PASS VTTCue interface: attribute size 
+PASS VTTCue interface: attribute align 
+PASS VTTCue interface: attribute text 
+PASS VTTCue interface: operation getCueAsHTML() 
+PASS VTTCue must be primary interface of new VTTCue(0, 0, "") 
+PASS Stringification of new VTTCue(0, 0, "") 
+PASS VTTCue interface: new VTTCue(0, 0, "") must inherit property "region" with the proper type (0) 
+PASS VTTCue interface: new VTTCue(0, 0, "") must inherit property "vertical" with the proper type (1) 
+PASS VTTCue interface: new VTTCue(0, 0, "") must inherit property "snapToLines" with the proper type (2) 
+PASS VTTCue interface: new VTTCue(0, 0, "") must inherit property "line" with the proper type (3) 
+FAIL VTTCue interface: new VTTCue(0, 0, "") must inherit property "lineAlign" with the proper type (4) assert_inherits: property "lineAlign" not found in prototype chain
+PASS VTTCue interface: new VTTCue(0, 0, "") must inherit property "position" with the proper type (5) 
+FAIL VTTCue interface: new VTTCue(0, 0, "") must inherit property "positionAlign" with the proper type (6) assert_inherits: property "positionAlign" not found in prototype chain
+PASS VTTCue interface: new VTTCue(0, 0, "") must inherit property "size" with the proper type (7) 
+PASS VTTCue interface: new VTTCue(0, 0, "") must inherit property "align" with the proper type (8) 
+PASS VTTCue interface: new VTTCue(0, 0, "") must inherit property "text" with the proper type (9) 
+PASS VTTCue interface: new VTTCue(0, 0, "") must inherit property "getCueAsHTML" with the proper type (10) 
+PASS TextTrackCue interface: new VTTCue(0, 0, "") must inherit property "track" with the proper type (0) 
+PASS TextTrackCue interface: new VTTCue(0, 0, "") must inherit property "id" with the proper type (1) 
+PASS TextTrackCue interface: new VTTCue(0, 0, "") must inherit property "startTime" with the proper type (2) 
+PASS TextTrackCue interface: new VTTCue(0, 0, "") must inherit property "endTime" with the proper type (3) 
+PASS TextTrackCue interface: new VTTCue(0, 0, "") must inherit property "pauseOnExit" with the proper type (4) 
+PASS TextTrackCue interface: new VTTCue(0, 0, "") must inherit property "onenter" with the proper type (5) 
+PASS TextTrackCue interface: new VTTCue(0, 0, "") must inherit property "onexit" with the proper type (6) 
+PASS EventTarget interface: new VTTCue(0, 0, "") must inherit property "addEventListener" with the proper type (0) 
+PASS EventTarget interface: calling addEventListener(DOMString,EventListener,[object Object],[object Object]) on new VTTCue(0, 0, "") with too few arguments must throw TypeError 
+PASS EventTarget interface: new VTTCue(0, 0, "") must inherit property "removeEventListener" with the proper type (1) 
+PASS EventTarget interface: calling removeEventListener(DOMString,EventListener,[object Object],[object Object]) on new VTTCue(0, 0, "") with too few arguments must throw TypeError 
+PASS EventTarget interface: new VTTCue(0, 0, "") must inherit property "dispatchEvent" with the proper type (2) 
+PASS EventTarget interface: calling dispatchEvent(Event) on new VTTCue(0, 0, "") with too few arguments must throw TypeError 
+PASS VTTRegion interface: existence and properties of interface object 
+PASS VTTRegion interface object length 
+PASS VTTRegion interface object name 
+FAIL VTTRegion interface: existence and properties of interface prototype object assert_equals: class string of VTTRegion.prototype expected "[object VTTRegionPrototype]" but got "[object VTTRegion]"
+PASS VTTRegion interface: existence and properties of interface prototype object's "constructor" property 
+PASS VTTRegion interface: attribute width 
+PASS VTTRegion interface: attribute lines 
+PASS VTTRegion interface: attribute regionAnchorX 
+PASS VTTRegion interface: attribute regionAnchorY 
+PASS VTTRegion interface: attribute viewportAnchorX 
+PASS VTTRegion interface: attribute viewportAnchorY 
+PASS VTTRegion interface: attribute scroll 
+PASS VTTRegion must be primary interface of new VTTRegion() 
+PASS Stringification of new VTTRegion() 
+PASS VTTRegion interface: new VTTRegion() must inherit property "width" with the proper type (0) 
+PASS VTTRegion interface: new VTTRegion() must inherit property "lines" with the proper type (1) 
+PASS VTTRegion interface: new VTTRegion() must inherit property "regionAnchorX" with the proper type (2) 
+PASS VTTRegion interface: new VTTRegion() must inherit property "regionAnchorY" with the proper type (3) 
+PASS VTTRegion interface: new VTTRegion() must inherit property "viewportAnchorX" with the proper type (4) 
+PASS VTTRegion interface: new VTTRegion() must inherit property "viewportAnchorY" with the proper type (5) 
+PASS VTTRegion interface: new VTTRegion() must inherit property "scroll" with the proper type (6) 
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/api/interfaces.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/api/interfaces.html
new file mode 100644
index 0000000..d4565bb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/api/interfaces.html
@@ -0,0 +1,165 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>WebVTT IDL tests</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/resources/WebIDLParser.js></script>
+<script src=/resources/idlharness.js></script>
+
+<h1>WebVTT IDL tests</h1>
+<div id=log></div>
+
+<script type=text/plain id=untested>
+// HTML
+interface TextTrackCue : EventTarget {
+  readonly attribute TextTrack? track;
+
+  attribute DOMString id;
+  attribute double startTime;
+  attribute double endTime;
+  attribute boolean pauseOnExit;
+
+  attribute EventHandler onenter;
+  attribute EventHandler onexit;
+};
+
+[TreatNonObjectAsNull]
+callback EventHandlerNonNull = any (Event event);
+typedef EventHandlerNonNull? EventHandler;
+
+// DOM
+[Exposed=(Window,Worker)]
+interface EventTarget {
+  void addEventListener(DOMString type, EventListener? callback, optional (AddEventListenerOptions or boolean) options);
+  void removeEventListener(DOMString type, EventListener? callback, optional (EventListenerOptions or boolean) options);
+  boolean dispatchEvent(Event event);
+};
+
+callback interface EventListener {
+  void handleEvent(Event event);
+};
+
+dictionary EventListenerOptions {
+  boolean capture = false;
+};
+
+dictionary AddEventListenerOptions : EventListenerOptions {
+  boolean passive = false;
+  boolean once = false;
+};
+
+[Constructor,
+ Exposed=Window]
+interface DocumentFragment : Node {
+};
+
+[Exposed=Window]
+interface Node : EventTarget {
+  const unsigned short ELEMENT_NODE = 1;
+  const unsigned short ATTRIBUTE_NODE = 2;
+  const unsigned short TEXT_NODE = 3;
+  const unsigned short CDATA_SECTION_NODE = 4;
+  const unsigned short ENTITY_REFERENCE_NODE = 5; // historical
+  const unsigned short ENTITY_NODE = 6; // historical
+  const unsigned short PROCESSING_INSTRUCTION_NODE = 7;
+  const unsigned short COMMENT_NODE = 8;
+  const unsigned short DOCUMENT_NODE = 9;
+  const unsigned short DOCUMENT_TYPE_NODE = 10;
+  const unsigned short DOCUMENT_FRAGMENT_NODE = 11;
+  const unsigned short NOTATION_NODE = 12; // historical
+  readonly attribute unsigned short nodeType;
+  readonly attribute DOMString nodeName;
+
+  readonly attribute USVString baseURI;
+
+  readonly attribute boolean isConnected;
+  readonly attribute Document? ownerDocument;
+  Node getRootNode(optional GetRootNodeOptions options);
+  readonly attribute Node? parentNode;
+  readonly attribute Element? parentElement;
+  boolean hasChildNodes();
+  [SameObject] readonly attribute NodeList childNodes;
+  readonly attribute Node? firstChild;
+  readonly attribute Node? lastChild;
+  readonly attribute Node? previousSibling;
+  readonly attribute Node? nextSibling;
+
+  [CEReactions] attribute DOMString? nodeValue;
+  [CEReactions] attribute DOMString? textContent;
+  [CEReactions] void normalize();
+
+  [CEReactions, NewObject] Node cloneNode(optional boolean deep = false);
+  boolean isEqualNode(Node? otherNode);
+  boolean isSameNode(Node? otherNode); // historical alias of ===
+
+  const unsigned short DOCUMENT_POSITION_DISCONNECTED = 0x01;
+  const unsigned short DOCUMENT_POSITION_PRECEDING = 0x02;
+  const unsigned short DOCUMENT_POSITION_FOLLOWING = 0x04;
+  const unsigned short DOCUMENT_POSITION_CONTAINS = 0x08;
+  const unsigned short DOCUMENT_POSITION_CONTAINED_BY = 0x10;
+  const unsigned short DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20;
+  unsigned short compareDocumentPosition(Node other);
+  boolean contains(Node? other);
+
+  DOMString? lookupPrefix(DOMString? namespace);
+  DOMString? lookupNamespaceURI(DOMString? prefix);
+  boolean isDefaultNamespace(DOMString? namespace);
+
+  [CEReactions] Node insertBefore(Node node, Node? child);
+  [CEReactions] Node appendChild(Node node);
+  [CEReactions] Node replaceChild(Node node, Node child);
+  [CEReactions] Node removeChild(Node child);
+};
+
+dictionary GetRootNodeOptions {
+  boolean composed = false;
+};
+</script>
+
+<script type=text/plain id=tested>
+enum AutoKeyword { "auto" };
+typedef (double or AutoKeyword) LineAndPositionSetting;
+enum DirectionSetting { "" /* horizontal */, "rl", "lr" };
+enum LineAlignSetting { "start", "center", "end" };
+enum PositionAlignSetting { "line-left", "center", "line-right", "auto" };
+enum AlignSetting { "start", "center", "end", "left", "right" };
+[Constructor(double startTime, double endTime, DOMString text)]
+interface VTTCue : TextTrackCue {
+  attribute VTTRegion? region;
+  attribute DirectionSetting vertical;
+  attribute boolean snapToLines;
+  attribute LineAndPositionSetting line;
+  attribute LineAlignSetting lineAlign;
+  attribute LineAndPositionSetting position;
+  attribute PositionAlignSetting positionAlign;
+  attribute double size;
+  attribute AlignSetting align;
+  attribute DOMString text;
+  DocumentFragment getCueAsHTML();
+};
+
+enum ScrollSetting { "" /* none */, "up" };
+[Constructor]
+interface VTTRegion {
+  attribute double width;
+  attribute long lines;
+  attribute double regionAnchorX;
+  attribute double regionAnchorY;
+  attribute double viewportAnchorX;
+  attribute double viewportAnchorY;
+  attribute ScrollSetting scroll;
+};
+</script>
+<script>
+"use strict";
+setup(function() {
+  var idlArray = new IdlArray();
+  idlArray.add_untested_idls(document.getElementById("untested").textContent);
+  idlArray.add_idls(document.getElementById("tested").textContent);
+  idlArray.add_objects({
+    VTTCue: ['new VTTCue(0, 0, "")'],
+    VTTRegion: ['new VTTRegion()'],
+  });
+  idlArray.test();
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/support/settings-line.test b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/support/settings-line.test
index cfa79806..4cec33a 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/support/settings-line.test
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/support/settings-line.test
@@ -1,7 +1,7 @@
 settings, line
 <link rel="help" href="https://w3c.github.io/webvtt/#collect-webvtt-cue-timings-and-settings">
 
-assert_equals(cues.length, 36);
+assert_equals(cues.length, 45);
 
 // Test starts with simple valid values
 var valid_values = [
@@ -16,6 +16,10 @@
     18446744073709552000,
     10000000000000000000000000000000000,
     1.5,
+    Number.MAX_VALUE,
+    -1 * Number.MAX_VALUE,
+    Number.MIN_VALUE,
+    0, // Less than Number.MIN_VALUE
 ];
 valid_values.forEach(function(valid, index) {
     assert_equals(cues[index].line, valid, 'Failed with cue ' + index);
@@ -23,7 +27,7 @@
 });
 
 // Then a set of invalid ones
-var invalid_length = 18;
+var invalid_length = 21;
 for (var i = 0; i < invalid_length; i++) {
     var index = valid_values.length + i;
 
@@ -60,6 +64,12 @@
 assert_false(cues[index + 6].snapToLines);
 assert_equals(cues[index + 6].lineAlign, 'start');
 
+assert_equals(cues[index + 7].line, Number.MIN_VALUE);
+assert_false(cues[index + 7].snapToLines);
+
+assert_equals(cues[index + 8].line, 0);
+assert_false(cues[index + 8].snapToLines);
+
 ===
 WEBVTT
 
@@ -98,81 +108,117 @@
 00:00:00.000 --> 00:00:01.000 line:1.5
 valid10
 
+Number.MAX_VALUE
+00:00:00.000 --> 00:00:01.000 line:179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+valid11
+
+-1 * Number.MAX_VALUE
+00:00:00.000 --> 00:00:01.000 line:-179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+valid12
+
+Number.MIN_VALUE
+00:00:00.000 --> 00:00:01.000 line:0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005
+valid13
+
+Less than Number.MIN_VALUE
+00:00:00.000 --> 00:00:01.000 line:0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002
+valid14
+
 NOTE invalid
 
 00:00:00.000 --> 00:00:01.000 line:65536%
-invalid11
-
-00:00:00.000 --> 00:00:01.000 line:4294967296%
-invalid12
-
-00:00:00.000 --> 00:00:01.000 line:18446744073709552000%
-invalid13
-
-00:00:00.000 --> 00:00:01.000 line:10000000000000000000000000000000000%
-invalid14
-
-00:00:00.000 --> 00:00:01.000 line:-0%
 invalid15
 
-00:00:00.000 --> 00:00:01.000 line:101%
+00:00:00.000 --> 00:00:01.000 line:4294967296%
 invalid16
 
-00:00:00.000 --> 00:00:01.000 line:1%-
+00:00:00.000 --> 00:00:01.000 line:18446744073709552000%
 invalid17
 
-00:00:00.000 --> 00:00:01.000 line:1-
+00:00:00.000 --> 00:00:01.000 line:10000000000000000000000000000000000%
 invalid18
 
-00:00:00.000 --> 00:00:01.000 line:%1
+00:00:00.000 --> 00:00:01.000 line:-0%
 invalid19
 
-00:00:00.000 --> 00:00:01.000 line:1%%
+00:00:00.000 --> 00:00:01.000 line:101%
 invalid20
 
-00:00:00.000 --> 00:00:01.000 line:0%0
+00:00:00.000 --> 00:00:01.000 line:1%-
 invalid21
 
-00:00:00.000 --> 00:00:01.000 line: 0%
+00:00:00.000 --> 00:00:01.000 line:1-
 invalid22
 
-00:00:00.000 --> 00:00:01.000 line:0%x
+00:00:00.000 --> 00:00:01.000 line:%1
 invalid23
 
-00:00:00.000 --> 00:00:01.000 line:-
+00:00:00.000 --> 00:00:01.000 line:1%%
 invalid24
 
-00:00:00.000 --> 00:00:01.000 line:%
+00:00:00.000 --> 00:00:01.000 line:0%0
 invalid25
 
-00:00:00.000 --> 00:00:01.000 line:1..5
+00:00:00.000 --> 00:00:01.000 line: 0%
 invalid26
 
-00:00:00.000 --> 00:00:01.000 line:.5
+00:00:00.000 --> 00:00:01.000 line:0%x
 invalid27
 
-00:00:00.000 --> 00:00:01.000 line:5.
+00:00:00.000 --> 00:00:01.000 line:-
 invalid28
 
+00:00:00.000 --> 00:00:01.000 line:%
+invalid29
+
+00:00:00.000 --> 00:00:01.000 line:1..5
+invalid30
+
+00:00:00.000 --> 00:00:01.000 line:.5
+invalid31
+
+00:00:00.000 --> 00:00:01.000 line:5.
+invalid32
+
+Greater than Number.MAX_VALUE
+00:00:00.000 --> 00:00:01.000 line:179769313486231590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+invalid33
+
+Less than -1 * Number.MAX_VALUE
+00:00:00.000 --> 00:00:01.000 line:-179769313486231590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+invalid34
+
+exponential notation
+00:00:00.000 --> 00:00:01.000 line:1e2
+invalid35
+
 NOTE extra
 
 00:00:00.000 --> 00:00:01.000 line:0%
-text29
+text36
 
 00:00:00.000 --> 00:00:01.000 line:00%
-text30
+text37
 
 00:00:00.000 --> 00:00:01.000 line:100%
-text31
+text38
 
 00:00:00.000 --> 00:00:01.000 line:100%,start
-text32
+text39
 
 00:00:00.000 --> 00:00:01.000 line:100%,center
-text33
+text40
 
 00:00:00.000 --> 00:00:01.000 line:100%,end
-text34
+text41
 
 00:00:00.000 --> 00:00:01.000 line:100%,middle
-text35
+text42
+
+Number.MIN_VALUE %
+00:00:00.000 --> 00:00:01.000 line:0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005%
+text43
+
+Less than Number.MIN_VALUE %
+00:00:00.000 --> 00:00:01.000 line:0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002%
+text44
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/arrows.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/arrows.html
index 66c5764..7eefc79 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/arrows.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/arrows.html
@@ -39,6 +39,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/header-garbage.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/header-garbage.html
index 0e859e8..4ebace2 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/header-garbage.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/header-garbage.html
@@ -38,6 +38,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/header-space.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/header-space.html
index 9179a1c..c679d69 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/header-space.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/header-space.html
@@ -38,6 +38,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/header-tab.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/header-tab.html
index 0f6709c..540bad54 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/header-tab.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/header-tab.html
@@ -38,6 +38,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/header-timings.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/header-timings.html
index f699908f..adff8579 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/header-timings.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/header-timings.html
@@ -38,6 +38,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/ids.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/ids.html
index 0f35427..73763836 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/ids.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/ids.html
@@ -39,6 +39,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/newlines.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/newlines.html
index f6b3b92b..6afab360 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/newlines.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/newlines.html
@@ -46,6 +46,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/nulls.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/nulls.html
index 19a4eff..d3a97ea 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/nulls.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/nulls.html
@@ -55,6 +55,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/regions-id.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/regions-id.html
index e478d12..3a6e3fe 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/regions-id.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/regions-id.html
@@ -46,6 +46,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/regions-lines.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/regions-lines.html
index b9ae840..8e9b979 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/regions-lines.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/regions-lines.html
@@ -59,6 +59,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/regions-old.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/regions-old.html
index 2d1b957..ea687575 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/regions-old.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/regions-old.html
@@ -37,6 +37,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/regions-regionanchor.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/regions-regionanchor.html
index b3e8627..1cccfe9 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/regions-regionanchor.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/regions-regionanchor.html
@@ -61,6 +61,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/regions-scroll.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/regions-scroll.html
index 6e9b9400..698af98f 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/regions-scroll.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/regions-scroll.html
@@ -49,6 +49,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/regions-viewportanchor.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/regions-viewportanchor.html
index c0a047e..b4c905f 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/regions-viewportanchor.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/regions-viewportanchor.html
@@ -61,6 +61,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-align.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-align.html
index c86ad42..06ea26f 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-align.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-align.html
@@ -52,6 +52,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-line.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-line.html
index a8c2f64..3607863 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-line.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-line.html
@@ -27,7 +27,7 @@
     var video = track.parentNode;
     var cues = video.textTracks[0].cues;
     {
-assert_equals(cues.length, 36);
+assert_equals(cues.length, 45);
 
 // Test starts with simple valid values
 var valid_values = [
@@ -42,6 +42,10 @@
     18446744073709552000,
     10000000000000000000000000000000000,
     1.5,
+    Number.MAX_VALUE,
+    -1 * Number.MAX_VALUE,
+    Number.MIN_VALUE,
+    0, // Less than Number.MIN_VALUE
 ];
 valid_values.forEach(function(valid, index) {
     assert_equals(cues[index].line, valid, 'Failed with cue ' + index);
@@ -49,7 +53,7 @@
 });
 
 // Then a set of invalid ones
-var invalid_length = 18;
+var invalid_length = 21;
 for (var i = 0; i < invalid_length; i++) {
     var index = valid_values.length + i;
 
@@ -86,11 +90,17 @@
 assert_false(cues[index + 6].snapToLines);
 assert_equals(cues[index + 6].lineAlign, 'start');
 
+assert_equals(cues[index + 7].line, Number.MIN_VALUE);
+assert_false(cues[index + 7].snapToLines);
+
+assert_equals(cues[index + 8].line, 0);
+assert_false(cues[index + 8].snapToLines);
+
     }
     this.done();
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-multiple.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-multiple.html
index 230d030..982a36a 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-multiple.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-multiple.html
@@ -53,6 +53,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-position.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-position.html
index 991818cb..8814194 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-position.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-position.html
@@ -61,6 +61,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-region.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-region.html
index fb857fd..150f2fee 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-region.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-region.html
@@ -59,6 +59,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-size.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-size.html
index b56e3c9..be0ee561 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-size.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-size.html
@@ -53,6 +53,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-vertical.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-vertical.html
index d98ab6b..70af765 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-vertical.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/settings-vertical.html
@@ -50,6 +50,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-bom.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-bom.html
index c2e083c..6addc7b 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-bom.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-bom.html
@@ -34,6 +34,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-no-newline.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-no-newline.html
index 17e567d..e96915d3 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-no-newline.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-no-newline.html
@@ -34,6 +34,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-space-no-newline.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-space-no-newline.html
index 60132e2..28a55f8f 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-space-no-newline.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-space-no-newline.html
@@ -34,6 +34,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-space.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-space.html
index 25fe0873..cfc1540 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-space.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-space.html
@@ -34,6 +34,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-tab-no-newline.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-tab-no-newline.html
index 71caad6..f4fd270d 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-tab-no-newline.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-tab-no-newline.html
@@ -34,6 +34,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-tab.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-tab.html
index d3e04d8..cd5df4c 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-tab.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-tab.html
@@ -34,6 +34,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-timings.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-timings.html
index 58e5548..6394c898 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-timings.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/signature-timings.html
@@ -34,6 +34,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/stylesheets.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/stylesheets.html
index d0f53f4..48cd920 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/stylesheets.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/stylesheets.html
@@ -35,6 +35,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/support/settings-line.vtt b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/support/settings-line.vtt
index ab5510b..ac08b03 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/support/settings-line.vtt
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/support/settings-line.vtt
@@ -35,81 +35,117 @@
 00:00:00.000 --> 00:00:01.000 line:1.5
 valid10
 
+Number.MAX_VALUE
+00:00:00.000 --> 00:00:01.000 line:179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+valid11
+
+-1 * Number.MAX_VALUE
+00:00:00.000 --> 00:00:01.000 line:-179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+valid12
+
+Number.MIN_VALUE
+00:00:00.000 --> 00:00:01.000 line:0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005
+valid13
+
+Less than Number.MIN_VALUE
+00:00:00.000 --> 00:00:01.000 line:0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002
+valid14
+
 NOTE invalid
 
 00:00:00.000 --> 00:00:01.000 line:65536%
-invalid11
-
-00:00:00.000 --> 00:00:01.000 line:4294967296%
-invalid12
-
-00:00:00.000 --> 00:00:01.000 line:18446744073709552000%
-invalid13
-
-00:00:00.000 --> 00:00:01.000 line:10000000000000000000000000000000000%
-invalid14
-
-00:00:00.000 --> 00:00:01.000 line:-0%
 invalid15
 
-00:00:00.000 --> 00:00:01.000 line:101%
+00:00:00.000 --> 00:00:01.000 line:4294967296%
 invalid16
 
-00:00:00.000 --> 00:00:01.000 line:1%-
+00:00:00.000 --> 00:00:01.000 line:18446744073709552000%
 invalid17
 
-00:00:00.000 --> 00:00:01.000 line:1-
+00:00:00.000 --> 00:00:01.000 line:10000000000000000000000000000000000%
 invalid18
 
-00:00:00.000 --> 00:00:01.000 line:%1
+00:00:00.000 --> 00:00:01.000 line:-0%
 invalid19
 
-00:00:00.000 --> 00:00:01.000 line:1%%
+00:00:00.000 --> 00:00:01.000 line:101%
 invalid20
 
-00:00:00.000 --> 00:00:01.000 line:0%0
+00:00:00.000 --> 00:00:01.000 line:1%-
 invalid21
 
-00:00:00.000 --> 00:00:01.000 line: 0%
+00:00:00.000 --> 00:00:01.000 line:1-
 invalid22
 
-00:00:00.000 --> 00:00:01.000 line:0%x
+00:00:00.000 --> 00:00:01.000 line:%1
 invalid23
 
-00:00:00.000 --> 00:00:01.000 line:-
+00:00:00.000 --> 00:00:01.000 line:1%%
 invalid24
 
-00:00:00.000 --> 00:00:01.000 line:%
+00:00:00.000 --> 00:00:01.000 line:0%0
 invalid25
 
-00:00:00.000 --> 00:00:01.000 line:1..5
+00:00:00.000 --> 00:00:01.000 line: 0%
 invalid26
 
-00:00:00.000 --> 00:00:01.000 line:.5
+00:00:00.000 --> 00:00:01.000 line:0%x
 invalid27
 
-00:00:00.000 --> 00:00:01.000 line:5.
+00:00:00.000 --> 00:00:01.000 line:-
 invalid28
 
+00:00:00.000 --> 00:00:01.000 line:%
+invalid29
+
+00:00:00.000 --> 00:00:01.000 line:1..5
+invalid30
+
+00:00:00.000 --> 00:00:01.000 line:.5
+invalid31
+
+00:00:00.000 --> 00:00:01.000 line:5.
+invalid32
+
+Greater than Number.MAX_VALUE
+00:00:00.000 --> 00:00:01.000 line:179769313486231590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+invalid33
+
+Less than -1 * Number.MAX_VALUE
+00:00:00.000 --> 00:00:01.000 line:-179769313486231590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+invalid34
+
+exponential notation
+00:00:00.000 --> 00:00:01.000 line:1e2
+invalid35
+
 NOTE extra
 
 00:00:00.000 --> 00:00:01.000 line:0%
-text29
+text36
 
 00:00:00.000 --> 00:00:01.000 line:00%
-text30
+text37
 
 00:00:00.000 --> 00:00:01.000 line:100%
-text31
+text38
 
 00:00:00.000 --> 00:00:01.000 line:100%,start
-text32
+text39
 
 00:00:00.000 --> 00:00:01.000 line:100%,center
-text33
+text40
 
 00:00:00.000 --> 00:00:01.000 line:100%,end
-text34
+text41
 
 00:00:00.000 --> 00:00:01.000 line:100%,middle
-text35
+text42
+
+Number.MIN_VALUE %
+00:00:00.000 --> 00:00:01.000 line:0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005%
+text43
+
+Less than Number.MIN_VALUE %
+00:00:00.000 --> 00:00:01.000 line:0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002%
+text44
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-60.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-60.html
index 4514d0b..ddc21a0 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-60.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-60.html
@@ -42,6 +42,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-eof.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-eof.html
index 6d50cdf8e..3750cfb7 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-eof.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-eof.html
@@ -34,6 +34,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-garbage.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-garbage.html
index 54bb82e0..4af3ca4 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-garbage.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-garbage.html
@@ -35,6 +35,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-negative.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-negative.html
index e55d0f3..5645de6e 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-negative.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-negative.html
@@ -48,6 +48,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-omitted-hours.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-omitted-hours.html
index 713ce04..89c6f67 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-omitted-hours.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-omitted-hours.html
@@ -40,6 +40,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-too-long.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-too-long.html
index f134c43..5270c62 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-too-long.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-too-long.html
@@ -42,6 +42,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-too-short.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-too-short.html
index 377400e..3295260 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-too-short.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/timings-too-short.html
@@ -42,6 +42,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/whitespace-chars.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/whitespace-chars.html
index 15c6f26d..92ecf7e 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/whitespace-chars.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/parsing/file-parsing/tests/whitespace-chars.html
@@ -43,6 +43,6 @@
 }
 
 function trackError(e) {
-    assert_unreached('got unexpected error event: ' + JSON.stringify(e));
+    assert_unreached('got unexpected error event');
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/workers/data-url-shared.html b/third_party/WebKit/LayoutTests/external/wpt/workers/data-url-shared.html
index 3950584..d95e639 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/workers/data-url-shared.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/workers/data-url-shared.html
@@ -34,5 +34,5 @@
 // 'data:' workers are cross-origin
 assert_worker_sends_pass('cross-origin worker', '', 'fetch("/").then(() => port.postMessage("FAIL"), () => port.postMessage("PASS"))');
 // 'data:' workers have opaque origin
-assert_worker_sends_pass('worker has opaque origin', 'application/javascript', 'if (self.location.origin == "null") port.postMessage("PASS"); else port.postMessage("FAIL");');
+assert_worker_sends_pass('worker has opaque origin', 'application/javascript', 'if (self.location.origin == "null") port.postMessage("PASS"); else { port.postMessage("FAIL"); }');
 </script>
diff --git a/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection-expected.txt b/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection-expected.txt
index fdd8eb0..c2d3e6f96 100644
--- a/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection-expected.txt
@@ -38,6 +38,13 @@
 PASS new RTCPeerConnection({iceServers:[], rtcpMuxPolicy:'negotiate'}); did not throw exception.
 PASS new RTCPeerConnection({iceServers:[], rtcpMuxPolicy:'require'}); did not throw exception.
 PASS new RTCPeerConnection({iceServers:[], rtcpMuxPolicy:'foo'}); threw exception TypeError: Failed to construct 'RTCPeerConnection': The provided value 'foo' is not a valid enum value of type RTCRtcpMuxPolicy..
+PASS new RTCPeerConnection({iceCandidatePoolSize:0}); did not throw exception.
+PASS new RTCPeerConnection({iceCandidatePoolSize:1}); did not throw exception.
+PASS new RTCPeerConnection({iceCandidatePoolSize:255}); did not throw exception.
+PASS new RTCPeerConnection({iceCandidatePoolSize:-1}); threw exception TypeError: Failed to construct 'RTCPeerConnection': Value is outside the 'octet' value range..
+PASS new RTCPeerConnection({iceCandidatePoolSize:99999999}); threw exception TypeError: Failed to construct 'RTCPeerConnection': Value is outside the 'octet' value range..
+PASS new RTCPeerConnection({iceCandidatePoolSize:256}); threw exception TypeError: Failed to construct 'RTCPeerConnection': Value is outside the 'octet' value range..
+PASS new RTCPeerConnection({iceCandidatePoolSize:'foo'}); threw exception TypeError: Failed to construct 'RTCPeerConnection': Value is not of type 'octet'..
 PASS new RTCPeerConnection(null, {mandatory:{valid_and_supported_1:1}}); did not throw exception.
 PASS new RTCPeerConnection(null, {mandatory:{valid_and_supported_1:1, valid_and_supported_2:1}}); did not throw exception.
 PASS new RTCPeerConnection(null, {optional:[{valid_and_supported_1:0}]}); did not throw exception.
diff --git a/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection.html b/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection.html
index 8fca4d0..ca6e7808 100644
--- a/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection.html
+++ b/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection.html
@@ -45,6 +45,14 @@
 shouldNotThrow("new RTCPeerConnection({iceServers:[], rtcpMuxPolicy:'require'});");
 shouldThrow("new RTCPeerConnection({iceServers:[], rtcpMuxPolicy:'foo'});");
 
+shouldNotThrow("new RTCPeerConnection({iceCandidatePoolSize:0});");
+shouldNotThrow("new RTCPeerConnection({iceCandidatePoolSize:1});");
+shouldNotThrow("new RTCPeerConnection({iceCandidatePoolSize:255});");
+shouldThrow("new RTCPeerConnection({iceCandidatePoolSize:-1});");
+shouldThrow("new RTCPeerConnection({iceCandidatePoolSize:99999999});");
+shouldThrow("new RTCPeerConnection({iceCandidatePoolSize:256});");
+shouldThrow("new RTCPeerConnection({iceCandidatePoolSize:'foo'});");
+
 // Deprecated.
 shouldNotThrow("new RTCPeerConnection(null, {mandatory:{valid_and_supported_1:1}});");
 shouldNotThrow("new RTCPeerConnection(null, {mandatory:{valid_and_supported_1:1, valid_and_supported_2:1}});");
diff --git a/third_party/WebKit/LayoutTests/inspector/initial-modules-load-expected.txt b/third_party/WebKit/LayoutTests/inspector/initial-modules-load-expected.txt
index f87ed71..f8f32be0 100644
--- a/third_party/WebKit/LayoutTests/inspector/initial-modules-load-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/initial-modules-load-expected.txt
@@ -80,6 +80,7 @@
     text_editor
     ui
     workspace
+    workspace_diff
 
 Running: testShowSourcesPanel
 Loaded modules:
@@ -117,6 +118,7 @@
     text_editor
     ui
     workspace
+    workspace_diff
 
 Running: testOpenUISourceCode
 Loaded modules:
@@ -154,4 +156,5 @@
     text_editor
     ui
     workspace
+    workspace_diff
 
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-breakpoints/breakpoint-manager.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-breakpoints/breakpoint-manager.html
index bccc01d..c896fa09 100644
--- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-breakpoints/breakpoint-manager.html
+++ b/third_party/WebKit/LayoutTests/inspector/sources/debugger-breakpoints/breakpoint-manager.html
@@ -36,8 +36,8 @@
 
     function createBreakpointManager(serializedBreakpoints)
     {
-        InspectorTest.createWorkspace(true);
-        mockTarget = InspectorTest.createMockTarget(++lastTargetId, InspectorTest.DebuggerModelMock);
+        InspectorTest.createWorkspace();
+        mockTarget = InspectorTest.createMockTarget(++lastTargetId);
         return InspectorTest.createBreakpointManager(InspectorTest.testTargetManager, InspectorTest.testDebuggerWorkspaceBinding, serializedBreakpoints);
     }
 
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-breakpoints/breakpoint-manager.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger-breakpoints/breakpoint-manager.js
index 5d5b11d..0209cb1 100644
--- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-breakpoints/breakpoint-manager.js
+++ b/third_party/WebKit/LayoutTests/inspector/sources/debugger-breakpoints/breakpoint-manager.js
@@ -1,76 +1,30 @@
 var initialize_BreakpointManagerTest = function() {
 
-InspectorTest.createWorkspace = function(ignoreEvents)
+InspectorTest.createWorkspace = function()
 {
-    if (InspectorTest.testFileSystemWorkspaceBinding)
-        InspectorTest.testFileSystemWorkspaceBinding.dispose();
-    Workspace.fileSystemMapping.resetForTesting();
-
     InspectorTest.testTargetManager = new SDK.TargetManager();
     InspectorTest.testWorkspace = new Workspace.Workspace();
-    InspectorTest.testFileSystemWorkspaceBinding = new Persistence.FileSystemWorkspaceBinding(Workspace.isolatedFileSystemManager, InspectorTest.testWorkspace);
     InspectorTest.testNetworkProjectManager = new Bindings.NetworkProjectManager(InspectorTest.testTargetManager, InspectorTest.testWorkspace);
     InspectorTest.testDebuggerWorkspaceBinding = new Bindings.DebuggerWorkspaceBinding(InspectorTest.testTargetManager, InspectorTest.testWorkspace);
-    InspectorTest.testCSSWorkspaceBinding = new Bindings.CSSWorkspaceBinding(InspectorTest.testTargetManager, InspectorTest.testWorkspace);
-
-    InspectorTest.testTargetManager.observeTargets({
-        targetAdded: function(target)
-        {
-            InspectorTest.testNetworkProject = Bindings.NetworkProject.forTarget(target);
-        },
-
-        targetRemoved: function(target)
-        {
-        }
-    });
-
-    if (ignoreEvents)
-        return;
-    InspectorTest.testWorkspace.addEventListener(Workspace.Workspace.Events.UISourceCodeAdded, InspectorTest._defaultWorkspaceEventHandler);
-    InspectorTest.testWorkspace.addEventListener(Workspace.Workspace.Events.UISourceCodeRemoved, InspectorTest._defaultWorkspaceEventHandler);
 }
 
-InspectorTest._mockTargetId = 1;
-InspectorTest._pageCapabilities =
-    SDK.Target.Capability.Browser | SDK.Target.Capability.DOM |
-    SDK.Target.Capability.JS | SDK.Target.Capability.Log |
-    SDK.Target.Capability.Network | SDK.Target.Capability.Worker;
-
-InspectorTest.createMockTarget = function(id, debuggerModelConstructor, capabilities)
+InspectorTest.createMockTarget = function(id)
 {
-    capabilities = capabilities || InspectorTest._pageCapabilities;
-    var target = InspectorTest.testTargetManager.createTarget("mock-target-" + id, "mock-target-" + id, capabilities & (~SDK.Target.Capability.JS), (params) => new SDK.StubConnection(params), null);
+    var capabilities = SDK.Target.Capability.AllForTests;
+    var target = InspectorTest.testTargetManager.createTarget("mock-target-id-" + id, "mock-target-" + id, capabilities & (~SDK.Target.Capability.JS), (params) => new SDK.StubConnection(params), null);
+    InspectorTest.testNetworkProject = Bindings.NetworkProject.forTarget(target);
     target._capabilitiesMask = capabilities;
     target._inspectedURL = InspectorTest.mainTarget.inspectedURL();
     target.resourceTreeModel = target.model(SDK.ResourceTreeModel);
     target.resourceTreeModel._cachedResourcesProcessed = true;
     target.resourceTreeModel._frameAttached("42", 0);
     target.runtimeModel = /** @type {!SDK.RuntimeModel} */ (target.model(SDK.RuntimeModel));
-    if (debuggerModelConstructor) {
-        target.debuggerModel = new debuggerModelConstructor(target);
-        target._modelByConstructor.set(SDK.DebuggerModel, target.debuggerModel);
-        InspectorTest.testTargetManager.modelAdded(target, SDK.DebuggerModel, target.debuggerModel);
-    } else {
-        target.debuggerModel = target.model(SDK.DebuggerModel);
-    }
+    target.debuggerModel = new InspectorTest.DebuggerModelMock(target);
+    target._modelByConstructor.set(SDK.DebuggerModel, target.debuggerModel);
+    InspectorTest.testTargetManager.modelAdded(target, SDK.DebuggerModel, target.debuggerModel);
     return target;
 }
 
-InspectorTest.createWorkspaceWithTarget = function(ignoreEvents)
-{
-    InspectorTest.createWorkspace(ignoreEvents);
-    var target = InspectorTest.createMockTarget(InspectorTest._mockTargetId++);
-    return target;
-}
-
-InspectorTest._defaultWorkspaceEventHandler = function(event)
-{
-    var uiSourceCode = event.data;
-    if (uiSourceCode.project().type() === Workspace.projectTypes.Service)
-        return;
-    InspectorTest.addResult(`Workspace event: ${event.type.toString()}: ${uiSourceCode.url()}.`);
-}
-
 InspectorTest.uiSourceCodes = {};
 
 InspectorTest.initializeDefaultMappingOnTarget = function(target)
@@ -114,8 +68,6 @@
 
     setBeforePausedCallback(callback) { }
 
-    _targetDisposed() { }
-
     debuggerEnabled()
     {
         return true;
@@ -134,12 +86,6 @@
         this._debuggerWorkspaceBinding._debuggerModelToData.get(this)._parsedScriptSource({data: script});
     }
 
-    _registerScript(script)
-    {
-        this._scripts[script.scriptId] = script;
-        this._debuggerWorkspaceBinding._debuggerModelToData.get(this)._parsedScriptSource({data: script});
-    }
-
     _scriptForURL(url)
     {
         for (var scriptId in this._scripts) {
@@ -285,7 +231,6 @@
         InspectorTest.addScript(target, breakpointManager, url);
     InspectorTest.addResult("  Adding UISourceCode: " + url);
     var contentProvider = Common.StaticContentProvider.fromString(url, Common.resourceTypes.Script, "");
-    var binding = breakpointManager._debuggerWorkspaceBinding;
     var uiSourceCode = InspectorTest.testNetworkProject.addFile(contentProvider, null);
     InspectorTest.uiSourceCodes[url] = uiSourceCode;
     if (!doNotSetSourceMapping) {
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/source-code-diff.html b/third_party/WebKit/LayoutTests/inspector/sources/source-code-diff.html
index 51fb1e6b..f099dce 100644
--- a/third_party/WebKit/LayoutTests/inspector/sources/source-code-diff.html
+++ b/third_party/WebKit/LayoutTests/inspector/sources/source-code-diff.html
@@ -8,22 +8,23 @@
 <script src="../../http/tests/inspector/debugger-test.js"></script>
 <script src="../../http/tests/inspector/sources-test.js"></script>
 <script>
+
 function test()
 {
     Runtime.experiments.enableForTest("sourceDiff");
     var textAfter;
-    InspectorTest.showScriptSource("diff-after.css", onAfter);
+    InspectorTest.waitForScriptSource("diff-after.css", uiSourceCode => uiSourceCode.requestContent().then(onAfterContent));
 
-    function onAfter(afterFrame)
+    function onAfterContent(content)
     {
-        textAfter = afterFrame.textEditor.text();
-        InspectorTest.showScriptSource("diff-before.css", onBefore);
+        textAfter = content;
+        InspectorTest.waitForScriptSource("diff-before.css", onBeforeUISourceCode);
     }
 
-    function onBefore(beforeFrame)
-    {
+    function onBeforeUISourceCode(uiSourceCode){
+        uiSourceCode.setWorkingCopy(textAfter);
         InspectorTest.addSniffer(SourceFrame.SourceCodeDiff.prototype, "_decorationsSetForTest", decorationsSet);
-        beforeFrame.setContent(textAfter);
+        InspectorTest.showUISourceCodePromise(uiSourceCode);
     }
 
     function decorationsSet(decorations)
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.png
new file mode 100644
index 0000000..5060e32
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.txt
new file mode 100644
index 0000000..b0717317
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.txt
@@ -0,0 +1,17 @@
+layer at (0,0) size 800x600
+  LayoutView at (0,0) size 800x600
+layer at (0,0) size 800x136
+  LayoutBlockFlow {HTML} at (0,0) size 800x136
+    LayoutBlockFlow {BODY} at (8,16) size 784x112
+      LayoutBlockFlow {P} at (0,0) size 784x20
+        LayoutText {#text} at (0,0) size 339x19
+          text run at (0,0) width 339: "Passes if there are no overpainted selection highlights."
+      LayoutBlockFlow (anonymous) at (0,36) size 784x76
+        LayoutInline {SPAN} at (0,0) size 189x73
+          LayoutText {#text} at (0,1) size 189x73
+            text run at (0,1) width 96: "text"
+            text run at (96,1) width 93 RTL: "\x{645}\x{62A}\x{646}:"
+        LayoutText {#text} at (0,0) size 0x0
+        LayoutText {#text} at (0,0) size 0x0
+selection start: position 5 of child 0 {#text} of child 2 {SPAN} of body
+selection end:   position 13 of child 0 {#text} of child 2 {SPAN} of body
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/external/wpt/service-workers/service-worker/clients-matchall-order.https-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/external/wpt/service-workers/service-worker/clients-matchall-order.https-expected.txt
new file mode 100644
index 0000000..591c3e9d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/external/wpt/service-workers/service-worker/clients-matchall-order.https-expected.txt
@@ -0,0 +1,10 @@
+This is a testharness.js-based test.
+PASS Clients.matchAll() returns non-focused controlled windows in creation order. 
+PASS Clients.matchAll() returns controlled windows in focus order.  Case 1. 
+PASS Clients.matchAll() returns controlled windows in focus order.  Case 2. 
+FAIL Clients.matchAll() returns non-focused uncontrolled windows in creation order. assert_equals: expected 6 but got 5
+FAIL Clients.matchAll() returns uncontrolled windows in focus order.  Case 1. assert_equals: expected 6 but got 5
+FAIL Clients.matchAll() returns uncontrolled windows in focus order.  Case 2. assert_equals: expected 6 but got 5
+FAIL Clients.matchAll() returns controlled windows and frames in focus order. assert_equals: expected URL index 1 expected "https://web-platform.test:8444/service-workers/service-worker/resources/empty.html?name=focus-controlled-nested-windows&q=1" but got "https://web-platform.test:8444/service-workers/service-worker/resources/empty.html?name=focus-controlled-nested-windows&q=1&nested=true"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-div-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-div-expected.png
new file mode 100644
index 0000000..94fef2a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-div-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png
new file mode 100644
index 0000000..7e37300
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-transparent-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-transparent-expected.png
new file mode 100644
index 0000000..0cea47d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-transparent-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/external/wpt/web-animations/interfaces/Animatable/animate-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/external/wpt/web-animations/interfaces/Animatable/animate-expected.txt
deleted file mode 100644
index 830dcaf..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/external/wpt/web-animations/interfaces/Animatable/animate-expected.txt
+++ /dev/null
@@ -1,75 +0,0 @@
-This is a testharness.js-based test.
-Found 69 tests; 25 PASS, 44 FAIL, 0 TIMEOUT, 0 NOTRUN.
-PASS Element.animate() creates an Animation object 
-FAIL Element.animate() creates an Animation object in the relevant realm of the target element Cannot read property 'prototype' of undefined
-PASS Element.animate() creates an Animation object with a KeyframeEffect 
-PASS Element.animate() creates an Animation object with a KeyframeEffect that is created in the relevant realm of the target element 
-PASS Element.animate() creates an Animation object with a KeyframeEffect whose AnimationEffectTiming object is created in the relevant realm of the target element 
-FAIL Element.animate() accepts a one property two value property-indexed keyframes specification anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one shorthand property two value property-indexed keyframes specification anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property two value property-indexed keyframes specification anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property property-indexed keyframes specification with different numbers of values anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a property-indexed keyframes specification with an invalid value anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property two value property-indexed keyframes specification that needs to stringify its values anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a property-indexed keyframes specification with a CSS variable reference anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a property-indexed keyframes specification with a CSS variable reference in a shorthand property anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property one value property-indexed keyframes specification anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property one non-array value property-indexed keyframes specification anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property two value property-indexed keyframes specification where the first value is invalid anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property two value property-indexed keyframes specification where the second value is invalid anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property one keyframe sequence anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property two keyframe sequence anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property two keyframe sequence anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one shorthand property two keyframe sequence anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property (a shorthand and one of its component longhands) two keyframe sequence anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence with duplicate values for a given interior offset anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence with duplicate values for offsets 0 and 1 anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property four keyframe sequence anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a single keyframe sequence with omitted offset anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a single keyframe sequence with null offset anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a single keyframe sequence with string offset anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property keyframe sequence with some omitted offsets anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property keyframe sequence with some null offsets anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property keyframe sequence with some omitted offsets anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property keyframe sequence with all omitted offsets anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence with different easing values, but the same easing value for a given offset anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence with different composite values, but the same composite value for a given offset anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property two keyframe sequence that needs to stringify its values anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence with a CSS variable reference anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence with a CSS variable reference in a shorthand property anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence where shorthand precedes longhand anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence where longhand precedes shorthand anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence where lesser shorthand precedes greater shorthand anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence where greater shorthand precedes lesser shorthand anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property keyframe sequence where one property is missing from the first keyframe anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property keyframe sequence where one property is missing from the last keyframe anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence with repeated values at offset 1 with different easings anim.effect.getKeyframes is not a function
-PASS Element.animate() does not accept keyframes with an out-of-bounded positive offset 
-PASS Element.animate() does not accept keyframes with an out-of-bounded negative offset 
-PASS Element.animate() does not accept keyframes not loosely sorted by offset 
-PASS Element.animate() does not accept property-indexed keyframes with an invalid easing value 
-PASS Element.animate() does not accept a keyframe sequence with an invalid easing value 
-FAIL Element.animate() does not accept keyframes with an invalid composite value assert_throws: function "function () {
-      div.animate(subtest.input, 2000);
-    }" did not throw
-PASS Element.animate() does not accept invalid easing: '' 
-PASS Element.animate() does not accept invalid easing: 'test' 
-PASS Element.animate() does not accept invalid easing: 'cubic-bezier(1.1, 0, 1, 1)' 
-PASS Element.animate() does not accept invalid easing: 'cubic-bezier(0, 0, 1.1, 1)' 
-PASS Element.animate() does not accept invalid easing: 'cubic-bezier(-0.1, 0, 1, 1)' 
-PASS Element.animate() does not accept invalid easing: 'cubic-bezier(0, 0, -0.1, 1)' 
-PASS Element.animate() does not accept invalid easing: 'steps(-1, start)' 
-PASS Element.animate() does not accept invalid easing: 'steps(0.1, start)' 
-PASS Element.animate() accepts a double as an options argument 
-PASS Element.animate() accepts a KeyframeAnimationOptions argument 
-PASS Element.animate() accepts an absent options argument 
-PASS Element.animate() correctly sets the id attribute when no id is specified 
-PASS Element.animate() correctly sets the id attribute 
-PASS Element.animate() correctly sets the Animation's timeline 
-PASS Element.animate() correctly sets the Animation's timeline when triggered on an element in a different document 
-PASS Element.animate() calls play on the Animation 
-FAIL CSSPseudoElement.animate() creates an Animation object document.getAnimations is not a function
-FAIL CSSPseudoElement.animate() creates an Animation object targeting to the correct CSSPseudoElement object document.getAnimations is not a function
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/external/wpt/webvtt/api/VTTCue/text-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/external/wpt/webvtt/api/VTTCue/text-expected.txt
deleted file mode 100644
index 641f9eb..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/external/wpt/webvtt/api/VTTCue/text-expected.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-This is a testharness.js-based test.
-FAIL VTTCue.text, script-created cue cue is not defined
-FAIL VTTCue.text, parsed cue assert_unreached: got error event Reached unreachable code
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt
new file mode 100644
index 0000000..8c243ca
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt
@@ -0,0 +1,41 @@
+{
+  "layers": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutBlockFlow DIV id='inner-editor'",
+          "rect": [12, 45, 113, 13],
+          "reason": "forced by layout"
+        },
+        {
+          "object": "LayoutText #text",
+          "rect": [12, 45, 51, 13],
+          "reason": "layoutObject insertion"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'some text'",
+      "reason": "layoutObject insertion"
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/external/wpt/service-workers/service-worker/clients-matchall-order.https-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/external/wpt/service-workers/service-worker/clients-matchall-order.https-expected.txt
new file mode 100644
index 0000000..fe985d5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-retina/external/wpt/service-workers/service-worker/clients-matchall-order.https-expected.txt
@@ -0,0 +1,10 @@
+This is a testharness.js-based test.
+FAIL Clients.matchAll() returns non-focused controlled windows in creation order. assert_equals: expected URL index 0 expected "https://web-platform.test:8444/service-workers/service-worker/resources/empty.html?name=no-focus-controlled-windows&q=0" but got "https://web-platform.test:8444/service-workers/service-worker/resources/empty.html?name=no-focus-controlled-windows&q=2"
+PASS Clients.matchAll() returns controlled windows in focus order.  Case 1. 
+PASS Clients.matchAll() returns controlled windows in focus order.  Case 2. 
+FAIL Clients.matchAll() returns non-focused uncontrolled windows in creation order. assert_equals: expected 6 but got 5
+FAIL Clients.matchAll() returns uncontrolled windows in focus order.  Case 1. assert_equals: expected 6 but got 5
+FAIL Clients.matchAll() returns uncontrolled windows in focus order.  Case 2. assert_equals: expected 6 but got 5
+FAIL Clients.matchAll() returns controlled windows and frames in focus order. assert_equals: expected URL index 1 expected "https://web-platform.test:8444/service-workers/service-worker/resources/empty.html?name=focus-controlled-nested-windows&q=1" but got "https://web-platform.test:8444/service-workers/service-worker/resources/empty.html?name=focus-controlled-nested-windows&q=1&nested=true"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/external/wpt/web-animations/interfaces/Animatable/animate-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/external/wpt/web-animations/interfaces/Animatable/animate-expected.txt
deleted file mode 100644
index 830dcaf..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-retina/external/wpt/web-animations/interfaces/Animatable/animate-expected.txt
+++ /dev/null
@@ -1,75 +0,0 @@
-This is a testharness.js-based test.
-Found 69 tests; 25 PASS, 44 FAIL, 0 TIMEOUT, 0 NOTRUN.
-PASS Element.animate() creates an Animation object 
-FAIL Element.animate() creates an Animation object in the relevant realm of the target element Cannot read property 'prototype' of undefined
-PASS Element.animate() creates an Animation object with a KeyframeEffect 
-PASS Element.animate() creates an Animation object with a KeyframeEffect that is created in the relevant realm of the target element 
-PASS Element.animate() creates an Animation object with a KeyframeEffect whose AnimationEffectTiming object is created in the relevant realm of the target element 
-FAIL Element.animate() accepts a one property two value property-indexed keyframes specification anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one shorthand property two value property-indexed keyframes specification anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property two value property-indexed keyframes specification anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property property-indexed keyframes specification with different numbers of values anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a property-indexed keyframes specification with an invalid value anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property two value property-indexed keyframes specification that needs to stringify its values anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a property-indexed keyframes specification with a CSS variable reference anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a property-indexed keyframes specification with a CSS variable reference in a shorthand property anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property one value property-indexed keyframes specification anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property one non-array value property-indexed keyframes specification anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property two value property-indexed keyframes specification where the first value is invalid anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property two value property-indexed keyframes specification where the second value is invalid anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property one keyframe sequence anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property two keyframe sequence anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property two keyframe sequence anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one shorthand property two keyframe sequence anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property (a shorthand and one of its component longhands) two keyframe sequence anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence with duplicate values for a given interior offset anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence with duplicate values for offsets 0 and 1 anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property four keyframe sequence anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a single keyframe sequence with omitted offset anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a single keyframe sequence with null offset anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a single keyframe sequence with string offset anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property keyframe sequence with some omitted offsets anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property keyframe sequence with some null offsets anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property keyframe sequence with some omitted offsets anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property keyframe sequence with all omitted offsets anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence with different easing values, but the same easing value for a given offset anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence with different composite values, but the same composite value for a given offset anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property two keyframe sequence that needs to stringify its values anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence with a CSS variable reference anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence with a CSS variable reference in a shorthand property anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence where shorthand precedes longhand anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence where longhand precedes shorthand anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence where lesser shorthand precedes greater shorthand anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence where greater shorthand precedes lesser shorthand anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property keyframe sequence where one property is missing from the first keyframe anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property keyframe sequence where one property is missing from the last keyframe anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence with repeated values at offset 1 with different easings anim.effect.getKeyframes is not a function
-PASS Element.animate() does not accept keyframes with an out-of-bounded positive offset 
-PASS Element.animate() does not accept keyframes with an out-of-bounded negative offset 
-PASS Element.animate() does not accept keyframes not loosely sorted by offset 
-PASS Element.animate() does not accept property-indexed keyframes with an invalid easing value 
-PASS Element.animate() does not accept a keyframe sequence with an invalid easing value 
-FAIL Element.animate() does not accept keyframes with an invalid composite value assert_throws: function "function () {
-      div.animate(subtest.input, 2000);
-    }" did not throw
-PASS Element.animate() does not accept invalid easing: '' 
-PASS Element.animate() does not accept invalid easing: 'test' 
-PASS Element.animate() does not accept invalid easing: 'cubic-bezier(1.1, 0, 1, 1)' 
-PASS Element.animate() does not accept invalid easing: 'cubic-bezier(0, 0, 1.1, 1)' 
-PASS Element.animate() does not accept invalid easing: 'cubic-bezier(-0.1, 0, 1, 1)' 
-PASS Element.animate() does not accept invalid easing: 'cubic-bezier(0, 0, -0.1, 1)' 
-PASS Element.animate() does not accept invalid easing: 'steps(-1, start)' 
-PASS Element.animate() does not accept invalid easing: 'steps(0.1, start)' 
-PASS Element.animate() accepts a double as an options argument 
-PASS Element.animate() accepts a KeyframeAnimationOptions argument 
-PASS Element.animate() accepts an absent options argument 
-PASS Element.animate() correctly sets the id attribute when no id is specified 
-PASS Element.animate() correctly sets the id attribute 
-PASS Element.animate() correctly sets the Animation's timeline 
-PASS Element.animate() correctly sets the Animation's timeline when triggered on an element in a different document 
-PASS Element.animate() calls play on the Animation 
-FAIL CSSPseudoElement.animate() creates an Animation object document.getAnimations is not a function
-FAIL CSSPseudoElement.animate() creates an Animation object targeting to the correct CSSPseudoElement object document.getAnimations is not a function
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/external/wpt/webvtt/api/VTTCue/text-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/external/wpt/webvtt/api/VTTCue/text-expected.txt
deleted file mode 100644
index 641f9eb..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-retina/external/wpt/webvtt/api/VTTCue/text-expected.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-This is a testharness.js-based test.
-FAIL VTTCue.text, script-created cue cue is not defined
-FAIL VTTCue.text, parsed cue assert_unreached: got error event Reached unreachable code
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt
new file mode 100644
index 0000000..8c243ca
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt
@@ -0,0 +1,41 @@
+{
+  "layers": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutBlockFlow DIV id='inner-editor'",
+          "rect": [12, 45, 113, 13],
+          "reason": "forced by layout"
+        },
+        {
+          "object": "LayoutText #text",
+          "rect": [12, 45, 51, 13],
+          "reason": "layoutObject insertion"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'some text'",
+      "reason": "layoutObject insertion"
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/mac/external/wpt/service-workers/service-worker/clients-matchall-order.https-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/external/wpt/service-workers/service-worker/clients-matchall-order.https-expected.txt
new file mode 100644
index 0000000..3a94ff4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac/external/wpt/service-workers/service-worker/clients-matchall-order.https-expected.txt
@@ -0,0 +1,10 @@
+This is a testharness.js-based test.
+FAIL Clients.matchAll() returns non-focused controlled windows in creation order. assert_equals: expected URL index 0 expected "https://web-platform.test:8444/service-workers/service-worker/resources/empty.html?name=no-focus-controlled-windows&q=0" but got "https://web-platform.test:8444/service-workers/service-worker/resources/empty.html?name=no-focus-controlled-windows&q=1"
+PASS Clients.matchAll() returns controlled windows in focus order.  Case 1. 
+PASS Clients.matchAll() returns controlled windows in focus order.  Case 2. 
+FAIL Clients.matchAll() returns non-focused uncontrolled windows in creation order. assert_equals: expected 6 but got 5
+FAIL Clients.matchAll() returns uncontrolled windows in focus order.  Case 1. assert_equals: expected 6 but got 5
+FAIL Clients.matchAll() returns uncontrolled windows in focus order.  Case 2. assert_equals: expected 6 but got 5
+FAIL Clients.matchAll() returns controlled windows and frames in focus order. assert_equals: expected URL index 1 expected "https://web-platform.test:8444/service-workers/service-worker/resources/empty.html?name=focus-controlled-nested-windows&q=1" but got "https://web-platform.test:8444/service-workers/service-worker/resources/empty.html?name=focus-controlled-nested-windows&q=1&nested=true"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-div-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-div-expected.png
new file mode 100644
index 0000000..75f290f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-div-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png
new file mode 100644
index 0000000..46bb1ca1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-transparent-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-transparent-expected.png
new file mode 100644
index 0000000..a7f6587d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-transparent-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-skew-matrix-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-skew-matrix-expected.png
new file mode 100644
index 0000000..8a9e6c7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-skew-matrix-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-with-box-shadow-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-with-box-shadow-expected.png
new file mode 100644
index 0000000..e2a4f44
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-with-box-shadow-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-with-squashing-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-with-squashing-expected.png
new file mode 100644
index 0000000..b8c2c24
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-with-squashing-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt
index 8c243ca..49e1ed89 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt
@@ -13,7 +13,7 @@
         },
         {
           "object": "LayoutText #text",
-          "rect": [12, 45, 51, 13],
+          "rect": [12, 45, 52, 13],
           "reason": "layoutObject insertion"
         }
       ]
diff --git a/third_party/WebKit/LayoutTests/platform/win/external/wpt/service-workers/service-worker/clients-matchall-order.https-expected.txt b/third_party/WebKit/LayoutTests/platform/win/external/wpt/service-workers/service-worker/clients-matchall-order.https-expected.txt
new file mode 100644
index 0000000..fe985d5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/external/wpt/service-workers/service-worker/clients-matchall-order.https-expected.txt
@@ -0,0 +1,10 @@
+This is a testharness.js-based test.
+FAIL Clients.matchAll() returns non-focused controlled windows in creation order. assert_equals: expected URL index 0 expected "https://web-platform.test:8444/service-workers/service-worker/resources/empty.html?name=no-focus-controlled-windows&q=0" but got "https://web-platform.test:8444/service-workers/service-worker/resources/empty.html?name=no-focus-controlled-windows&q=2"
+PASS Clients.matchAll() returns controlled windows in focus order.  Case 1. 
+PASS Clients.matchAll() returns controlled windows in focus order.  Case 2. 
+FAIL Clients.matchAll() returns non-focused uncontrolled windows in creation order. assert_equals: expected 6 but got 5
+FAIL Clients.matchAll() returns uncontrolled windows in focus order.  Case 1. assert_equals: expected 6 but got 5
+FAIL Clients.matchAll() returns uncontrolled windows in focus order.  Case 2. assert_equals: expected 6 but got 5
+FAIL Clients.matchAll() returns controlled windows and frames in focus order. assert_equals: expected URL index 1 expected "https://web-platform.test:8444/service-workers/service-worker/resources/empty.html?name=focus-controlled-nested-windows&q=1" but got "https://web-platform.test:8444/service-workers/service-worker/resources/empty.html?name=focus-controlled-nested-windows&q=1&nested=true"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/platform/win/external/wpt/web-animations/interfaces/Animatable/animate-expected.txt b/third_party/WebKit/LayoutTests/platform/win/external/wpt/web-animations/interfaces/Animatable/animate-expected.txt
deleted file mode 100644
index 830dcaf..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/external/wpt/web-animations/interfaces/Animatable/animate-expected.txt
+++ /dev/null
@@ -1,75 +0,0 @@
-This is a testharness.js-based test.
-Found 69 tests; 25 PASS, 44 FAIL, 0 TIMEOUT, 0 NOTRUN.
-PASS Element.animate() creates an Animation object 
-FAIL Element.animate() creates an Animation object in the relevant realm of the target element Cannot read property 'prototype' of undefined
-PASS Element.animate() creates an Animation object with a KeyframeEffect 
-PASS Element.animate() creates an Animation object with a KeyframeEffect that is created in the relevant realm of the target element 
-PASS Element.animate() creates an Animation object with a KeyframeEffect whose AnimationEffectTiming object is created in the relevant realm of the target element 
-FAIL Element.animate() accepts a one property two value property-indexed keyframes specification anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one shorthand property two value property-indexed keyframes specification anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property two value property-indexed keyframes specification anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property property-indexed keyframes specification with different numbers of values anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a property-indexed keyframes specification with an invalid value anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property two value property-indexed keyframes specification that needs to stringify its values anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a property-indexed keyframes specification with a CSS variable reference anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a property-indexed keyframes specification with a CSS variable reference in a shorthand property anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property one value property-indexed keyframes specification anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property one non-array value property-indexed keyframes specification anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property two value property-indexed keyframes specification where the first value is invalid anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property two value property-indexed keyframes specification where the second value is invalid anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property one keyframe sequence anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property two keyframe sequence anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property two keyframe sequence anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one shorthand property two keyframe sequence anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property (a shorthand and one of its component longhands) two keyframe sequence anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence with duplicate values for a given interior offset anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence with duplicate values for offsets 0 and 1 anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property four keyframe sequence anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a single keyframe sequence with omitted offset anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a single keyframe sequence with null offset anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a single keyframe sequence with string offset anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property keyframe sequence with some omitted offsets anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property keyframe sequence with some null offsets anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property keyframe sequence with some omitted offsets anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property keyframe sequence with all omitted offsets anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence with different easing values, but the same easing value for a given offset anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence with different composite values, but the same composite value for a given offset anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a one property two keyframe sequence that needs to stringify its values anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence with a CSS variable reference anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence with a CSS variable reference in a shorthand property anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence where shorthand precedes longhand anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence where longhand precedes shorthand anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence where lesser shorthand precedes greater shorthand anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence where greater shorthand precedes lesser shorthand anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property keyframe sequence where one property is missing from the first keyframe anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a two property keyframe sequence where one property is missing from the last keyframe anim.effect.getKeyframes is not a function
-FAIL Element.animate() accepts a keyframe sequence with repeated values at offset 1 with different easings anim.effect.getKeyframes is not a function
-PASS Element.animate() does not accept keyframes with an out-of-bounded positive offset 
-PASS Element.animate() does not accept keyframes with an out-of-bounded negative offset 
-PASS Element.animate() does not accept keyframes not loosely sorted by offset 
-PASS Element.animate() does not accept property-indexed keyframes with an invalid easing value 
-PASS Element.animate() does not accept a keyframe sequence with an invalid easing value 
-FAIL Element.animate() does not accept keyframes with an invalid composite value assert_throws: function "function () {
-      div.animate(subtest.input, 2000);
-    }" did not throw
-PASS Element.animate() does not accept invalid easing: '' 
-PASS Element.animate() does not accept invalid easing: 'test' 
-PASS Element.animate() does not accept invalid easing: 'cubic-bezier(1.1, 0, 1, 1)' 
-PASS Element.animate() does not accept invalid easing: 'cubic-bezier(0, 0, 1.1, 1)' 
-PASS Element.animate() does not accept invalid easing: 'cubic-bezier(-0.1, 0, 1, 1)' 
-PASS Element.animate() does not accept invalid easing: 'cubic-bezier(0, 0, -0.1, 1)' 
-PASS Element.animate() does not accept invalid easing: 'steps(-1, start)' 
-PASS Element.animate() does not accept invalid easing: 'steps(0.1, start)' 
-PASS Element.animate() accepts a double as an options argument 
-PASS Element.animate() accepts a KeyframeAnimationOptions argument 
-PASS Element.animate() accepts an absent options argument 
-PASS Element.animate() correctly sets the id attribute when no id is specified 
-PASS Element.animate() correctly sets the id attribute 
-PASS Element.animate() correctly sets the Animation's timeline 
-PASS Element.animate() correctly sets the Animation's timeline when triggered on an element in a different document 
-PASS Element.animate() calls play on the Animation 
-FAIL CSSPseudoElement.animate() creates an Animation object document.getAnimations is not a function
-FAIL CSSPseudoElement.animate() creates an Animation object targeting to the correct CSSPseudoElement object document.getAnimations is not a function
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/external/wpt/webvtt/api/VTTCue/text-expected.txt b/third_party/WebKit/LayoutTests/platform/win/external/wpt/webvtt/api/VTTCue/text-expected.txt
deleted file mode 100644
index 641f9eb..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/external/wpt/webvtt/api/VTTCue/text-expected.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-This is a testharness.js-based test.
-FAIL VTTCue.text, script-created cue cue is not defined
-FAIL VTTCue.text, parsed cue assert_unreached: got error event Reached unreachable code
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/scrollbars/custom-composited-different-track-parts-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/scrollbars/custom-composited-different-track-parts-expected.png
new file mode 100644
index 0000000..2c7f7e5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/scrollbars/custom-composited-different-track-parts-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/external/wpt/service-workers/service-worker/clients-matchall-order.https-expected.txt b/third_party/WebKit/LayoutTests/platform/win7/external/wpt/service-workers/service-worker/clients-matchall-order.https-expected.txt
new file mode 100644
index 0000000..300139a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win7/external/wpt/service-workers/service-worker/clients-matchall-order.https-expected.txt
@@ -0,0 +1,10 @@
+This is a testharness.js-based test.
+FAIL Clients.matchAll() returns non-focused controlled windows in creation order. assert_equals: expected URL index 1 expected "https://web-platform.test:8444/service-workers/service-worker/resources/empty.html?name=no-focus-controlled-windows&q=1" but got "https://web-platform.test:8444/service-workers/service-worker/resources/empty.html?name=no-focus-controlled-windows&q=2"
+PASS Clients.matchAll() returns controlled windows in focus order.  Case 1. 
+PASS Clients.matchAll() returns controlled windows in focus order.  Case 2. 
+FAIL Clients.matchAll() returns non-focused uncontrolled windows in creation order. assert_equals: expected 6 but got 5
+FAIL Clients.matchAll() returns uncontrolled windows in focus order.  Case 1. assert_equals: expected 6 but got 5
+FAIL Clients.matchAll() returns uncontrolled windows in focus order.  Case 2. assert_equals: expected 6 but got 5
+FAIL Clients.matchAll() returns controlled windows and frames in focus order. assert_equals: expected URL index 1 expected "https://web-platform.test:8444/service-workers/service-worker/resources/empty.html?name=focus-controlled-nested-windows&q=1" but got "https://web-platform.test:8444/service-workers/service-worker/resources/empty.html?name=focus-controlled-nested-windows&q=1&nested=true"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/compositing/README.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/compositing/README.txt
new file mode 100644
index 0000000..edc3930e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/compositing/README.txt
@@ -0,0 +1 @@
+# This suite runs the tests in compositing/ with --disable-slimming-paint-invalidation.
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/compositing/squashing/squash-transform-repainting-child-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/compositing/squashing/squash-transform-repainting-child-expected.txt
new file mode 100644
index 0000000..a5e7976c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/compositing/squashing/squash-transform-repainting-child-expected.txt
@@ -0,0 +1,165 @@
+CASE 1, original layer tree
+{
+  "layers": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    },
+    {
+      "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
+      "position": [100, 100],
+      "bounds": [100, 100],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "backgroundColor": "#0000FF"
+    },
+    {
+      "name": "Squashing Containment Layer",
+      "shouldFlattenTransform": false
+    },
+    {
+      "name": "LayoutBlockFlow (positioned) DIV class='box middle'",
+      "position": [20, 20],
+      "bounds": [100, 100],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "backgroundColor": "#00FF00",
+      "transform": [
+        [0.707106781186548, 0.707106781186548, 0, 0],
+        [-0.707106781186548, 0.707106781186548, 0, 0],
+        [0, 0, 1, 0],
+        [0, 0, 0, 1]
+      ]
+    },
+    {
+      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')",
+      "position": [180, 180],
+      "bounds": [100, 100],
+      "drawsContent": true
+    }
+  ]
+}
+CASE 2, hovering over the outer div
+{
+  "layers": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    },
+    {
+      "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
+      "position": [100, 100],
+      "bounds": [100, 100],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "backgroundColor": "#0000FF"
+    },
+    {
+      "name": "Squashing Containment Layer",
+      "shouldFlattenTransform": false
+    },
+    {
+      "name": "LayoutBlockFlow (positioned) DIV class='box middle'",
+      "position": [20, 20],
+      "bounds": [100, 100],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "backgroundColor": "#008000",
+      "transform": [
+        [0.707106781186548, 0.707106781186548, 0, 0],
+        [-0.707106781186548, 0.707106781186548, 0, 0],
+        [0, 0, 1, 0],
+        [0, 0, 0, 1]
+      ],
+      "paintInvalidations": [
+        {
+          "object": "LayoutBlockFlow (positioned) DIV class='box middle'",
+          "rect": [0, 0, 100, 100],
+          "reason": "style change"
+        }
+      ]
+    },
+    {
+      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')",
+      "position": [180, 180],
+      "bounds": [100, 100],
+      "drawsContent": true
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='box middle'",
+      "reason": "style change"
+    }
+  ]
+}
+CASE 3, hovering over the inner div
+{
+  "layers": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    },
+    {
+      "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
+      "position": [100, 100],
+      "bounds": [100, 100],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "backgroundColor": "#0000FF"
+    },
+    {
+      "name": "Squashing Containment Layer",
+      "shouldFlattenTransform": false
+    },
+    {
+      "name": "LayoutBlockFlow (positioned) DIV class='box middle'",
+      "position": [20, 20],
+      "bounds": [100, 100],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "backgroundColor": "#008000",
+      "transform": [
+        [0.707106781186548, 0.707106781186548, 0, 0],
+        [-0.707106781186548, 0.707106781186548, 0, 0],
+        [0, 0, 1, 0],
+        [0, 0, 0, 1]
+      ],
+      "paintInvalidations": [
+        {
+          "object": "LayoutBlockFlow (positioned) DIV class='box middle'",
+          "rect": [0, 0, 100, 100],
+          "reason": "style change"
+        },
+        {
+          "object": "LayoutBlockFlow (positioned) DIV class='smallbox'",
+          "rect": [20, 25, 50, 50],
+          "reason": "style change"
+        }
+      ]
+    },
+    {
+      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')",
+      "position": [180, 180],
+      "bounds": [100, 100],
+      "drawsContent": true
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='box middle'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='smallbox'",
+      "reason": "style change"
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt
new file mode 100644
index 0000000..d2a68910
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt
@@ -0,0 +1,165 @@
+CASE 1, original layer tree
+{
+  "layers": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    },
+    {
+      "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
+      "position": [100, 100],
+      "bounds": [100, 100],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "backgroundColor": "#0000FF"
+    },
+    {
+      "name": "Squashing Containment Layer",
+      "shouldFlattenTransform": false
+    },
+    {
+      "name": "LayoutBlockFlow (positioned) DIV class='box middle'",
+      "position": [20, 20],
+      "bounds": [100, 100],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "backgroundColor": "#00FF00",
+      "transform": [
+        [0.927183854566787, 0.374606593415912, 0, 0],
+        [-0.374606593415912, 0.927183854566787, 0, 0],
+        [0, 0, 1, 0],
+        [0, 0, 0, 1]
+      ]
+    },
+    {
+      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')",
+      "position": [180, 180],
+      "bounds": [100, 100],
+      "drawsContent": true
+    }
+  ]
+}
+CASE 2, hovering over the outer div
+{
+  "layers": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    },
+    {
+      "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
+      "position": [100, 100],
+      "bounds": [100, 100],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "backgroundColor": "#0000FF"
+    },
+    {
+      "name": "Squashing Containment Layer",
+      "shouldFlattenTransform": false
+    },
+    {
+      "name": "LayoutBlockFlow (positioned) DIV class='box middle'",
+      "position": [20, 20],
+      "bounds": [100, 100],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "backgroundColor": "#008000",
+      "transform": [
+        [0.927183854566787, 0.374606593415912, 0, 0],
+        [-0.374606593415912, 0.927183854566787, 0, 0],
+        [0, 0, 1, 0],
+        [0, 0, 0, 1]
+      ],
+      "paintInvalidations": [
+        {
+          "object": "LayoutBlockFlow (positioned) DIV class='box middle'",
+          "rect": [0, 0, 100, 100],
+          "reason": "style change"
+        }
+      ]
+    },
+    {
+      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')",
+      "position": [180, 180],
+      "bounds": [100, 100],
+      "drawsContent": true
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='box middle'",
+      "reason": "style change"
+    }
+  ]
+}
+CASE 3, hovering over the inner div
+{
+  "layers": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    },
+    {
+      "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
+      "position": [100, 100],
+      "bounds": [100, 100],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "backgroundColor": "#0000FF"
+    },
+    {
+      "name": "Squashing Containment Layer",
+      "shouldFlattenTransform": false
+    },
+    {
+      "name": "LayoutBlockFlow (positioned) DIV class='box middle'",
+      "position": [20, 20],
+      "bounds": [100, 100],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "backgroundColor": "#008000",
+      "transform": [
+        [0.927183854566787, 0.374606593415912, 0, 0],
+        [-0.374606593415912, 0.927183854566787, 0, 0],
+        [0, 0, 1, 0],
+        [0, 0, 0, 1]
+      ],
+      "paintInvalidations": [
+        {
+          "object": "LayoutBlockFlow (positioned) DIV class='box middle'",
+          "rect": [0, 0, 100, 100],
+          "reason": "style change"
+        },
+        {
+          "object": "LayoutBlockFlow (positioned) DIV class='smallbox'",
+          "rect": [12, 17, 66, 66],
+          "reason": "style change"
+        }
+      ]
+    },
+    {
+      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')",
+      "position": [180, 180],
+      "bounds": [100, 100],
+      "drawsContent": true
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='box middle'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='smallbox'",
+      "reason": "style change"
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/README.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/README.txt
new file mode 100644
index 0000000..4304347b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/README.txt
@@ -0,0 +1 @@
+# This suite runs the tests in paint/ with --disable-slimming-paint-invalidation.
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/README.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/README.txt
deleted file mode 100644
index fb466fe..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/README.txt
+++ /dev/null
@@ -1 +0,0 @@
-# This suite runs the tests in paint/invalidation with experimental features disabled.
diff --git a/third_party/WebKit/Source/build/scripts/make_computed_style_base.py b/third_party/WebKit/Source/build/scripts/make_computed_style_base.py
index 8d6ee0e8..8043f4ee 100755
--- a/third_party/WebKit/Source/build/scripts/make_computed_style_base.py
+++ b/third_party/WebKit/Source/build/scripts/make_computed_style_base.py
@@ -16,6 +16,7 @@
 # Temporary hard-coded list of fields that are not CSS properties.
 # Ideally these would be specified in a .in or .json5 file.
 NONPROPERTY_FIELDS = set([
+    'isLink',
     # Style can not be shared.
     'unique',
     # Whether this style is affected by these pseudo-classes.
diff --git a/third_party/WebKit/Source/build/scripts/templates/ComputedStyleBase.h.tmpl b/third_party/WebKit/Source/build/scripts/templates/ComputedStyleBase.h.tmpl
index 34c45b7..7aab85d7 100644
--- a/third_party/WebKit/Source/build/scripts/templates/ComputedStyleBase.h.tmpl
+++ b/third_party/WebKit/Source/build/scripts/templates/ComputedStyleBase.h.tmpl
@@ -37,14 +37,6 @@
   {% endfor %}
   {}
 
-  inline bool inheritedEqual(const ComputedStyleBase& o) const {
-    return (
-    {% for field in fields if field.is_property and field.is_inherited %}
-        {{field.name}} == o.{{field.name}}{{print_if(not loop.last, ' &&')}}
-    {% endfor %}
-    );
-  }
-
   inline bool independentInheritedEqual(const ComputedStyleBase& o) const {
     return (
     {% for field in fields if field.is_property and field.is_inherited and field.is_independent %}
@@ -61,6 +53,10 @@
     );
   }
 
+  inline bool inheritedEqual(const ComputedStyleBase& o) const {
+    return independentInheritedEqual(o) && nonIndependentInheritedEqual(o);
+  }
+
   inline bool nonInheritedEqual(const ComputedStyleBase& o) const {
     return (
     {% for field in fields if field.is_property and not field.is_inherited %}
diff --git a/third_party/WebKit/Source/core/animation/css/CSSAnimations.cpp b/third_party/WebKit/Source/core/animation/css/CSSAnimations.cpp
index 88b04900..3a22738 100644
--- a/third_party/WebKit/Source/core/animation/css/CSSAnimations.cpp
+++ b/third_party/WebKit/Source/core/animation/css/CSSAnimations.cpp
@@ -50,6 +50,8 @@
 #include "core/css/CSSPropertyEquality.h"
 #include "core/css/CSSPropertyMetadata.h"
 #include "core/css/CSSValueList.h"
+#include "core/css/PropertyRegistry.h"
+#include "core/css/parser/CSSVariableParser.h"
 #include "core/css/resolver/CSSToStyleMap.h"
 #include "core/css/resolver/StyleResolver.h"
 #include "core/dom/Element.h"
@@ -621,7 +623,7 @@
     TransitionUpdateState& state,
     const PropertyHandle& property,
     size_t transitionIndex) {
-  state.listedProperties.set(property.cssProperty() - firstCSSProperty);
+  state.listedProperties.insert(property);
 
   // FIXME: We should transition if an !important property changes even when an
   // animation is running, but this is a bit hard to do with the current
@@ -656,8 +658,17 @@
     }
   }
 
-  if (CSSPropertyEquality::propertiesEqual(property.cssProperty(),
-                                           state.oldStyle, state.style)) {
+  const PropertyRegistry* registry =
+      state.animatingElement->document().propertyRegistry();
+
+  if (property.isCSSCustomProperty()) {
+    if (!registry || !registry->registration(property.customPropertyName()) ||
+        CSSPropertyEquality::registeredCustomPropertiesEqual(
+            property.customPropertyName(), state.oldStyle, state.style)) {
+      return;
+    }
+  } else if (CSSPropertyEquality::propertiesEqual(
+                 property.cssProperty(), state.oldStyle, state.style)) {
     return;
   }
 
@@ -666,9 +677,7 @@
   RefPtr<AnimatableValue> from =
       CSSAnimatableValueFactory::create(property, state.oldStyle);
 
-  // TODO(alancutter): Support transitions on registered custom properties and
-  // give the map a PropertyRegistry.
-  CSSInterpolationTypesMap map(nullptr);
+  CSSInterpolationTypesMap map(registry);
   InterpolationEnvironment oldEnvironment(map, state.oldStyle);
   InterpolationEnvironment newEnvironment(map, state.style);
   InterpolationValue start = nullptr;
@@ -779,6 +788,23 @@
       !state.animatingElement->elementAnimations()->isAnimationStyleChange());
 }
 
+void CSSAnimations::calculateTransitionUpdateForCustomProperty(
+    TransitionUpdateState& state,
+    const CSSTransitionData::TransitionProperty& transitionProperty,
+    size_t transitionIndex) {
+  if (transitionProperty.propertyType !=
+      CSSTransitionData::TransitionUnknownProperty) {
+    return;
+  }
+  if (!CSSVariableParser::isValidVariableName(
+          transitionProperty.propertyString)) {
+    return;
+  }
+  calculateTransitionUpdateForProperty(
+      state, PropertyHandle(transitionProperty.propertyString),
+      transitionIndex);
+}
+
 void CSSAnimations::calculateTransitionUpdateForStandardProperty(
     TransitionUpdateState& state,
     const CSSTransitionData::TransitionProperty& transitionProperty,
@@ -812,6 +838,7 @@
 }
 
 void CSSAnimations::calculateTransitionUpdate(CSSAnimationUpdate& update,
+                                              PropertyPass propertyPass,
                                               const Element* animatingElement,
                                               const ComputedStyle& style) {
   if (!animatingElement)
@@ -829,7 +856,7 @@
   const bool animationStyleRecalc =
       elementAnimations && elementAnimations->isAnimationStyleChange();
 
-  std::bitset<numCSSProperties> listedProperties;
+  HashSet<PropertyHandle> listedProperties;
   bool anyTransitionHadTransitionAll = false;
   const LayoutObject* layoutObject = animatingElement->layoutObject();
   if (!animationStyleRecalc && style.display() != EDisplay::None &&
@@ -847,26 +874,35 @@
       if (transitionProperty.unresolvedProperty == CSSPropertyAll) {
         anyTransitionHadTransitionAll = true;
       }
-      calculateTransitionUpdateForStandardProperty(state, transitionProperty,
+      if (propertyPass == PropertyPass::Custom) {
+        calculateTransitionUpdateForCustomProperty(state, transitionProperty,
                                                    transitionIndex);
+      } else {
+        DCHECK_EQ(propertyPass, PropertyPass::Standard);
+        calculateTransitionUpdateForStandardProperty(state, transitionProperty,
+                                                     transitionIndex);
+      }
     }
   }
 
   if (activeTransitions) {
     for (const auto& entry : *activeTransitions) {
       const PropertyHandle& property = entry.key;
-      // TODO(alancutter): Handle transitions on custom properties.
-      DCHECK(!property.isCSSCustomProperty());
-      CSSPropertyID id = property.cssProperty();
+      if (property.isCSSCustomProperty() !=
+          (propertyPass == PropertyPass::Custom)) {
+        continue;
+      }
       if (!anyTransitionHadTransitionAll && !animationStyleRecalc &&
-          !listedProperties.test(id - firstCSSProperty)) {
+          !listedProperties.contains(property)) {
         update.cancelTransition(property);
       } else if (entry.value.animation->finishedInternal()) {
         update.finishTransition(property);
       }
     }
   }
-  calculateTransitionActiveInterpolations(update, animatingElement);
+
+  calculateTransitionActiveInterpolations(update, propertyPass,
+                                          animatingElement);
 }
 
 void CSSAnimations::cancel() {
@@ -932,8 +968,26 @@
       activeInterpolationsForAnimations);
 }
 
+static bool isCustomStylePropertyHandle(const PropertyHandle& property) {
+  return property.isCSSCustomProperty();
+}
+
+static bool isStandardStylePropertyHandle(const PropertyHandle& property) {
+  return isStylePropertyHandle(property) && !property.isCSSCustomProperty();
+}
+
+static EffectStack::PropertyHandleFilter stylePropertyFilter(
+    CSSAnimations::PropertyPass propertyPass) {
+  if (propertyPass == CSSAnimations::PropertyPass::Custom) {
+    return isCustomStylePropertyHandle;
+  }
+  DCHECK_EQ(propertyPass, CSSAnimations::PropertyPass::Standard);
+  return isStandardStylePropertyHandle;
+}
+
 void CSSAnimations::calculateTransitionActiveInterpolations(
     CSSAnimationUpdate& update,
+    PropertyPass propertyPass,
     const Element* animatingElement) {
   ElementAnimations* elementAnimations =
       animatingElement ? animatingElement->elementAnimations() : nullptr;
@@ -945,7 +999,8 @@
       update.cancelledTransitions().isEmpty()) {
     activeInterpolationsForTransitions = EffectStack::activeInterpolations(
         effectStack, nullptr, nullptr,
-        KeyframeEffectReadOnly::TransitionPriority, isStylePropertyHandle);
+        KeyframeEffectReadOnly::TransitionPriority,
+        stylePropertyFilter(propertyPass));
   } else {
     HeapVector<Member<const InertEffect>> newTransitions;
     for (const auto& entry : update.newTransitions())
@@ -964,7 +1019,8 @@
 
     activeInterpolationsForTransitions = EffectStack::activeInterpolations(
         effectStack, &newTransitions, &cancelledAnimations,
-        KeyframeEffectReadOnly::TransitionPriority, isStylePropertyHandle);
+        KeyframeEffectReadOnly::TransitionPriority,
+        stylePropertyFilter(propertyPass));
   }
 
   // Properties being animated by animations don't get values from transitions
@@ -974,8 +1030,15 @@
     for (const auto& entry : update.activeInterpolationsForAnimations())
       activeInterpolationsForTransitions.erase(entry.key);
   }
-  update.adoptActiveInterpolationsForStandardTransitions(
-      activeInterpolationsForTransitions);
+
+  if (propertyPass == PropertyPass::Custom) {
+    update.adoptActiveInterpolationsForCustomTransitions(
+        activeInterpolationsForTransitions);
+  } else {
+    DCHECK_EQ(propertyPass, PropertyPass::Standard);
+    update.adoptActiveInterpolationsForStandardTransitions(
+        activeInterpolationsForTransitions);
+  }
 }
 
 EventTarget* CSSAnimations::AnimationEventDelegate::eventTarget() const {
diff --git a/third_party/WebKit/Source/core/animation/css/CSSAnimations.h b/third_party/WebKit/Source/core/animation/css/CSSAnimations.h
index 54715ef..23a1e06 100644
--- a/third_party/WebKit/Source/core/animation/css/CSSAnimations.h
+++ b/third_party/WebKit/Source/core/animation/css/CSSAnimations.h
@@ -78,9 +78,14 @@
       const ComputedStyle&,
       const ComputedStyle* parentStyle,
       bool wasViewportChanged);
+
+  // Specifies whether to process custom or standard CSS properties.
+  enum class PropertyPass { Custom, Standard };
   static void calculateTransitionUpdate(CSSAnimationUpdate&,
+                                        PropertyPass,
                                         const Element* animatingElement,
                                         const ComputedStyle&);
+
   static void snapshotCompositorKeyframes(Element&,
                                           CSSAnimationUpdate&,
                                           const ComputedStyle&,
@@ -161,10 +166,15 @@
     const ComputedStyle& oldStyle;
     const ComputedStyle& style;
     const TransitionMap* activeTransitions;
-    std::bitset<numCSSProperties>& listedProperties;
+    HashSet<PropertyHandle>& listedProperties;
     const CSSTransitionData& transitionData;
   };
 
+  static void calculateTransitionUpdateForCustomProperty(
+      TransitionUpdateState&,
+      const CSSTransitionData::TransitionProperty&,
+      size_t transitionIndex);
+
   static void calculateTransitionUpdateForStandardProperty(
       TransitionUpdateState&,
       const CSSTransitionData::TransitionProperty&,
@@ -179,6 +189,7 @@
       const Element* animatingElement);
   static void calculateTransitionActiveInterpolations(
       CSSAnimationUpdate&,
+      PropertyPass,
       const Element* animatingElement);
 
   class AnimationEventDelegate final
diff --git a/third_party/WebKit/Source/core/css/CSSPropertyEquality.cpp b/third_party/WebKit/Source/core/css/CSSPropertyEquality.cpp
index 8c69d8ac..faab853 100644
--- a/third_party/WebKit/Source/core/css/CSSPropertyEquality.cpp
+++ b/third_party/WebKit/Source/core/css/CSSPropertyEquality.cpp
@@ -4,6 +4,7 @@
 
 #include "core/css/CSSPropertyEquality.h"
 
+#include "core/css/CSSValue.h"
 #include "core/style/ComputedStyle.h"
 #include "core/style/DataEquivalency.h"
 #include "core/style/ShadowList.h"
@@ -375,4 +376,12 @@
   }
 }
 
+bool CSSPropertyEquality::registeredCustomPropertiesEqual(
+    const AtomicString& propertyName,
+    const ComputedStyle& a,
+    const ComputedStyle& b) {
+  return dataEquivalent(a.getRegisteredVariable(propertyName),
+                        b.getRegisteredVariable(propertyName));
+}
+
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/css/CSSPropertyEquality.h b/third_party/WebKit/Source/core/css/CSSPropertyEquality.h
index d70e8cf..bf75be33 100644
--- a/third_party/WebKit/Source/core/css/CSSPropertyEquality.h
+++ b/third_party/WebKit/Source/core/css/CSSPropertyEquality.h
@@ -7,6 +7,7 @@
 
 #include "core/CSSPropertyNames.h"
 #include "wtf/Allocator.h"
+#include "wtf/text/AtomicString.h"
 
 namespace blink {
 
@@ -19,6 +20,11 @@
   static bool propertiesEqual(CSSPropertyID,
                               const ComputedStyle&,
                               const ComputedStyle&);
+
+  static bool registeredCustomPropertiesEqual(
+      const WTF::AtomicString& propertyName,
+      const ComputedStyle&,
+      const ComputedStyle&);
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/css/SelectorChecker.cpp b/third_party/WebKit/Source/core/css/SelectorChecker.cpp
index 61b2bed..f15b9d5 100644
--- a/third_party/WebKit/Source/core/css/SelectorChecker.cpp
+++ b/third_party/WebKit/Source/core/css/SelectorChecker.cpp
@@ -388,7 +388,7 @@
       return SelectorFailsAllSiblings;
 
     case CSSSelector::ShadowPseudo: {
-      if (!m_isUARule && !m_isQuerySelector &&
+      if (!m_isUARule && m_mode != QueryingRules &&
           context.selector->getPseudoType() == CSSSelector::PseudoShadow)
         Deprecation::countDeprecation(context.element->document(),
                                       UseCounter::CSSSelectorPseudoShadow);
@@ -407,7 +407,7 @@
     }
 
     case CSSSelector::ShadowDeep: {
-      if (!m_isUARule && !m_isQuerySelector)
+      if (!m_isUARule && m_mode != QueryingRules)
         Deprecation::countDeprecation(context.element->document(),
                                       UseCounter::CSSDeepCombinator);
       if (ShadowRoot* root = context.element->containingShadowRoot()) {
@@ -448,7 +448,7 @@
     }
 
     case CSSSelector::ShadowPiercingDescendant: {
-      DCHECK(m_isQuerySelector);
+      DCHECK_EQ(m_mode, QueryingRules);
       UseCounter::count(context.element->document(),
                         UseCounter::CSSShadowPiercingDescendantCombinator);
       // TODO(kochi): parentOrOpenShadowHostElement() is necessary because
@@ -783,7 +783,8 @@
           parent->setChildrenAffectedByLastChildRules();
         element.setAffectedByLastChildRules();
       }
-      if (!m_isQuerySelector && parent && !parent->isFinishedParsingChildren())
+      if (m_mode != QueryingRules && parent &&
+          !parent->isFinishedParsingChildren())
         return false;
       return isLastChild(element);
     }
@@ -793,7 +794,8 @@
         if (parent)
           parent->setChildrenAffectedByBackwardPositionalRules();
       }
-      if (!m_isQuerySelector && parent && !parent->isFinishedParsingChildren())
+      if (m_mode != QueryingRules && parent &&
+          !parent->isFinishedParsingChildren())
         return false;
       return isLastOfType(element, element.tagQName());
     }
@@ -807,7 +809,8 @@
         element.setAffectedByFirstChildRules();
         element.setAffectedByLastChildRules();
       }
-      if (!m_isQuerySelector && parent && !parent->isFinishedParsingChildren())
+      if (m_mode != QueryingRules && parent &&
+          !parent->isFinishedParsingChildren())
         return false;
       return isFirstChild(element) && isLastChild(element);
     }
@@ -818,7 +821,8 @@
         parent->setChildrenAffectedByForwardPositionalRules();
         parent->setChildrenAffectedByBackwardPositionalRules();
       }
-      if (!m_isQuerySelector && parent && !parent->isFinishedParsingChildren())
+      if (m_mode != QueryingRules && parent &&
+          !parent->isFinishedParsingChildren())
         return false;
       return isFirstOfType(element, element.tagQName()) &&
              isLastOfType(element, element.tagQName());
@@ -843,7 +847,8 @@
       ContainerNode* parent = element.parentElementOrDocumentFragment();
       if (m_mode == ResolvingStyle && parent)
         parent->setChildrenAffectedByBackwardPositionalRules();
-      if (!m_isQuerySelector && parent && !parent->isFinishedParsingChildren())
+      if (m_mode != QueryingRules && parent &&
+          !parent->isFinishedParsingChildren())
         return false;
       return selector.matchNth(NthIndexCache::nthLastChildIndex(element));
     }
@@ -851,7 +856,8 @@
       ContainerNode* parent = element.parentElementOrDocumentFragment();
       if (m_mode == ResolvingStyle && parent)
         parent->setChildrenAffectedByBackwardPositionalRules();
-      if (!m_isQuerySelector && parent && !parent->isFinishedParsingChildren())
+      if (m_mode != QueryingRules && parent &&
+          !parent->isFinishedParsingChildren())
         return false;
       return selector.matchNth(NthIndexCache::nthLastOfTypeIndex(element));
     }
diff --git a/third_party/WebKit/Source/core/css/SelectorChecker.h b/third_party/WebKit/Source/core/css/SelectorChecker.h
index a188b23..915c6e2 100644
--- a/third_party/WebKit/Source/core/css/SelectorChecker.h
+++ b/third_party/WebKit/Source/core/css/SelectorChecker.h
@@ -48,11 +48,36 @@
 
  public:
   enum VisitedMatchType { VisitedMatchDisabled, VisitedMatchEnabled };
+
   enum Mode {
+    // Used when matching selectors inside style recalc. This mode will set
+    // restyle flags across the tree during matching which impact how style
+    // sharing and invalidation work later.
     ResolvingStyle,
+
+    // Used when collecting which rules match into a StyleRuleList, the engine
+    // internal represention.
+    //
+    // TODO(esprehn): This doesn't change the behavior of the SelectorChecker
+    // we should merge it with a generic CollectingRules mode.
     CollectingStyleRules,
+
+    // Used when collecting which rules match into a CSSRuleList, the CSSOM api
+    // represention.
+    //
+    // TODO(esprehn): This doesn't change the behavior of the SelectorChecker
+    // we should merge it with a generic CollectingRules mode.
     CollectingCSSRules,
+
+    // Used when matching rules for querySelector and <content select>. This
+    // disables the special handling for positional selectors during parsing
+    // and also enables static profile only selectors like >>>.
     QueryingRules,
+
+    // Used when matching selectors for style sharing inside SharedStyleFinder.
+    // During style sharing we match selectors from a global list without having
+    // the correct owning scope for the rules. In this mode we'll consider
+    // selectors which require scope matching (ex. :host) as always matching.
     SharingRules
   };
 
@@ -62,7 +87,6 @@
    public:
     Mode mode = ResolvingStyle;
     bool isUARule = false;
-    bool isQuerySelector = false;
     ComputedStyle* elementStyle = nullptr;
     Member<LayoutScrollbar> scrollbar = nullptr;
     ScrollbarPart scrollbarPart = NoPart;
@@ -71,7 +95,6 @@
   explicit SelectorChecker(const Init& init)
       : m_mode(init.mode),
         m_isUARule(init.isUARule),
-        m_isQuerySelector(init.isQuerySelector),
         m_elementStyle(init.elementStyle),
         m_scrollbar(init.scrollbar),
         m_scrollbarPart(init.scrollbarPart) {}
@@ -158,7 +181,6 @@
 
   Mode m_mode;
   bool m_isUARule;
-  bool m_isQuerySelector;
   ComputedStyle* m_elementStyle;
   Member<LayoutScrollbar> m_scrollbar;
   ScrollbarPart m_scrollbarPart;
diff --git a/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp b/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp
index e24d082b..55ae9c2 100644
--- a/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp
+++ b/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp
@@ -1115,8 +1115,9 @@
   CSSAnimations::calculateCompositorAnimationUpdate(
       state.animationUpdate(), animatingElement, *element, *state.style(),
       state.parentStyle(), wasViewportResized());
-  CSSAnimations::calculateTransitionUpdate(state.animationUpdate(),
-                                           animatingElement, *state.style());
+  CSSAnimations::calculateTransitionUpdate(
+      state.animationUpdate(), CSSAnimations::PropertyPass::Standard,
+      animatingElement, *state.style());
 
   CSSAnimations::snapshotCompositorKeyframes(
       *element, state.animationUpdate(), *state.style(), state.parentStyle());
@@ -1612,7 +1613,7 @@
     applyMatchedAnimationProperties(state, matchResult, cacheSuccess,
                                     needsApplyPass);
   }
-  if (state.style()->animations() ||
+  if (state.style()->animations() || state.style()->transitions() ||
       (animatingElement && animatingElement->hasAnimations())) {
     calculateAnimationUpdate(state, animatingElement);
     if (state.isAnimatingCustomProperties()) {
@@ -1704,6 +1705,9 @@
   if (applyAnimations == IncludeAnimations) {
     applyAnimatedProperties<ResolveVariables>(
         state, state.animationUpdate().activeInterpolationsForAnimations());
+    applyAnimatedProperties<ResolveVariables>(
+        state,
+        state.animationUpdate().activeInterpolationsForCustomTransitions());
   }
   // TODO(leviw): stop recalculating every time
   CSSVariableResolver::resolveVariableDefinitions(state);
@@ -1720,6 +1724,9 @@
       if (applyAnimations == IncludeAnimations) {
         applyAnimatedProperties<ResolveVariables>(
             state, state.animationUpdate().activeInterpolationsForAnimations());
+        applyAnimatedProperties<ResolveVariables>(
+            state,
+            state.animationUpdate().activeInterpolationsForCustomTransitions());
       }
       CSSVariableResolver::resolveVariableDefinitions(state);
     }
@@ -1742,18 +1749,28 @@
 
 void StyleResolver::calculateAnimationUpdate(StyleResolverState& state,
                                              const Element* animatingElement) {
-  DCHECK(state.style()->animations() ||
+  DCHECK(state.style()->animations() || state.style()->transitions() ||
          (animatingElement && animatingElement->hasAnimations()));
   DCHECK(!state.isAnimationInterpolationMapReady());
 
   CSSAnimations::calculateAnimationUpdate(
       state.animationUpdate(), animatingElement, *state.element(),
       *state.style(), state.parentStyle(), this);
+  CSSAnimations::calculateTransitionUpdate(state.animationUpdate(),
+                                           CSSAnimations::PropertyPass::Custom,
+                                           animatingElement, *state.style());
 
   state.setIsAnimationInterpolationMapReady();
 
-  if (state.isAnimatingCustomProperties())
+  if (state.isAnimatingCustomProperties()) {
     return;
+  }
+  if (!state.animationUpdate()
+           .activeInterpolationsForCustomTransitions()
+           .isEmpty()) {
+    state.setIsAnimatingCustomProperties(true);
+    return;
+  }
   for (const auto& propertyHandle :
        state.animationUpdate().activeInterpolationsForAnimations().keys()) {
     if (CSSAnimations::isCustomPropertyHandle(propertyHandle)) {
diff --git a/third_party/WebKit/Source/core/dom/Document.cpp b/third_party/WebKit/Source/core/dom/Document.cpp
index e184fe3..274b2f79 100644
--- a/third_party/WebKit/Source/core/dom/Document.cpp
+++ b/third_party/WebKit/Source/core/dom/Document.cpp
@@ -368,7 +368,7 @@
   return true;
 }
 
-static FrameViewBase* widgetForElement(const Element& focusedElement) {
+static FrameViewBase* frameViewBaseForElement(const Element& focusedElement) {
   LayoutObject* layoutObject = focusedElement.layoutObject();
   if (!layoutObject || !layoutObject->isLayoutPart())
     return 0;
@@ -1182,7 +1182,16 @@
         source->parentNode()->removeChild(source, exceptionState);
         if (exceptionState.hadException())
           return nullptr;
-        CHECK(!source->parentNode());
+        // The above removeChild() can execute arbitrary JavaScript code.
+        if (source->parentNode()) {
+          addConsoleMessage(ConsoleMessage::create(
+              JSMessageSource, WarningMessageLevel,
+              ExceptionMessages::failedToExecute("adoptNode", "Document",
+                                                 "Unable to remove the "
+                                                 "specified node from the "
+                                                 "original parent.")));
+          return nullptr;
+        }
       }
   }
 
@@ -4040,7 +4049,8 @@
     }
 
     if (view()) {
-      FrameViewBase* oldFrameViewBase = widgetForElement(*oldFocusedElement);
+      FrameViewBase* oldFrameViewBase =
+          frameViewBaseForElement(*oldFocusedElement);
       if (oldFrameViewBase)
         oldFrameViewBase->setFocused(false, params.type);
       else
@@ -4114,14 +4124,15 @@
     // eww, I suck. set the qt focus correctly
     // ### find a better place in the code for this
     if (view()) {
-      FrameViewBase* focusFrameViewBase = widgetForElement(*m_focusedElement);
+      FrameViewBase* focusFrameViewBase =
+          frameViewBaseForElement(*m_focusedElement);
       if (focusFrameViewBase) {
         // Make sure a FrameViewBase has the right size before giving it focus.
         // Otherwise, we are testing edge cases of the FrameViewBase code.
         // Specifically, in WebCore this does not work well for text fields.
         updateStyleAndLayout();
         // Re-get the FrameViewBase in case updating the layout changed things.
-        focusFrameViewBase = widgetForElement(*m_focusedElement);
+        focusFrameViewBase = frameViewBaseForElement(*m_focusedElement);
       }
       if (focusFrameViewBase)
         focusFrameViewBase->setFocused(true, params.type);
diff --git a/third_party/WebKit/Source/core/dom/Element.h b/third_party/WebKit/Source/core/dom/Element.h
index 2e8ae00..d1d35e8 100644
--- a/third_party/WebKit/Source/core/dom/Element.h
+++ b/third_party/WebKit/Source/core/dom/Element.h
@@ -939,10 +939,6 @@
   void detachAttrNodeFromElementWithValue(Attr*, const AtomicString& value);
   void detachAttrNodeAtIndex(Attr*, size_t index);
 
-  v8::Local<v8::Object> wrapCustomElement(
-      v8::Isolate*,
-      v8::Local<v8::Object> creationContext);
-
   Member<ElementData> m_elementData;
 };
 
diff --git a/third_party/WebKit/Source/core/dom/SelectorQuery.cpp b/third_party/WebKit/Source/core/dom/SelectorQuery.cpp
index a2d571b..a43f8a6 100644
--- a/third_party/WebKit/Source/core/dom/SelectorQuery.cpp
+++ b/third_party/WebKit/Source/core/dom/SelectorQuery.cpp
@@ -132,7 +132,6 @@
     const ContainerNode& rootNode) const {
   SelectorChecker::Init init;
   init.mode = SelectorChecker::QueryingRules;
-  init.isQuerySelector = true;
   SelectorChecker checker(init);
   SelectorChecker::SelectorCheckingContext context(
       &element, SelectorChecker::VisitedMatchDisabled);
diff --git a/third_party/WebKit/Source/core/editing/spellcheck/SpellCheckRequester.cpp b/third_party/WebKit/Source/core/editing/spellcheck/SpellCheckRequester.cpp
index 49aabba..0876b64 100644
--- a/third_party/WebKit/Source/core/editing/spellcheck/SpellCheckRequester.cpp
+++ b/third_party/WebKit/Source/core/editing/spellcheck/SpellCheckRequester.cpp
@@ -207,7 +207,7 @@
   DCHECK(request);
   bool continuation = false;
   if (!m_requestQueue.isEmpty()) {
-    SpellCheckRequest* lastRequest = m_requestQueue.last();
+    SpellCheckRequest* lastRequest = m_requestQueue.back();
     // It's a continuation if the number of the last request got incremented in
     // the new one and both apply to the same editable.
     continuation =
diff --git a/third_party/WebKit/Source/core/frame/FrameHost.cpp b/third_party/WebKit/Source/core/frame/FrameHost.cpp
index 46029a6..079454a 100644
--- a/third_party/WebKit/Source/core/frame/FrameHost.cpp
+++ b/third_party/WebKit/Source/core/frame/FrameHost.cpp
@@ -31,7 +31,6 @@
 #include "core/frame/FrameHost.h"
 
 #include "core/frame/FrameView.h"
-#include "core/inspector/ConsoleMessageStorage.h"
 #include "core/page/Page.h"
 #include "core/page/scrolling/OverscrollController.h"
 #include "public/platform/Platform.h"
@@ -48,7 +47,6 @@
       m_overscrollController(
           OverscrollController::create(m_page->visualViewport(),
                                        m_page->chromeClient())),
-      m_consoleMessageStorage(new ConsoleMessageStorage()),
       m_subframeCount(0) {}
 
 // Explicitly in the .cpp to avoid default constructor in .h
@@ -79,17 +77,16 @@
 }
 
 ConsoleMessageStorage& FrameHost::consoleMessageStorage() {
-  return *m_consoleMessageStorage;
+  return page().consoleMessageStorage();
 }
 
 const ConsoleMessageStorage& FrameHost::consoleMessageStorage() const {
-  return *m_consoleMessageStorage;
+  return page().consoleMessageStorage();
 }
 
 DEFINE_TRACE(FrameHost) {
   visitor->trace(m_page);
   visitor->trace(m_overscrollController);
-  visitor->trace(m_consoleMessageStorage);
 }
 
 #if DCHECK_IS_ON()
diff --git a/third_party/WebKit/Source/core/frame/FrameHost.h b/third_party/WebKit/Source/core/frame/FrameHost.h
index 7be48180..24a1bb8 100644
--- a/third_party/WebKit/Source/core/frame/FrameHost.h
+++ b/third_party/WebKit/Source/core/frame/FrameHost.h
@@ -94,7 +94,6 @@
 
   const Member<Page> m_page;
   const Member<OverscrollController> m_overscrollController;
-  const Member<ConsoleMessageStorage> m_consoleMessageStorage;
 
   int m_subframeCount;
 };
diff --git a/third_party/WebKit/Source/core/frame/UseCounter.h b/third_party/WebKit/Source/core/frame/UseCounter.h
index 4262987..ed7341c 100644
--- a/third_party/WebKit/Source/core/frame/UseCounter.h
+++ b/third_party/WebKit/Source/core/frame/UseCounter.h
@@ -1477,6 +1477,7 @@
     HTMLMediaElementControlsListNoDownload = 1854,
     HTMLMediaElementControlsListNoFullscreen = 1855,
     HTMLMediaElementControlsListNoRemotePlayback = 1856,
+    PointerEventClickRetargetCausedByCapture = 1857,
 
     // Add new features immediately above this line. Don't change assigned
     // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/WebKit/Source/core/html/HTMLInputElement.h b/third_party/WebKit/Source/core/html/HTMLInputElement.h
index 77045bb..c181b0e 100644
--- a/third_party/WebKit/Source/core/html/HTMLInputElement.h
+++ b/third_party/WebKit/Source/core/html/HTMLInputElement.h
@@ -25,6 +25,7 @@
 #ifndef HTMLInputElement_h
 #define HTMLInputElement_h
 
+#include "base/gtest_prod_util.h"
 #include "core/CoreExport.h"
 #include "core/html/TextControlElement.h"
 #include "core/html/forms/StepRange.h"
@@ -429,6 +430,8 @@
   // element lives on.
   Member<HTMLImageLoader> m_imageLoader;
   Member<ListAttributeTargetObserver> m_listAttributeTargetObserver;
+
+  FRIEND_TEST_ALL_PREFIXES(HTMLInputElementTest, RadioKeyDownDCHECKFailure);
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/html/HTMLInputElementTest.cpp b/third_party/WebKit/Source/core/html/HTMLInputElementTest.cpp
index e6e8ffd..14e6031 100644
--- a/third_party/WebKit/Source/core/html/HTMLInputElementTest.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLInputElementTest.cpp
@@ -4,7 +4,10 @@
 
 #include "core/html/HTMLInputElement.h"
 
+#include <memory>
 #include "core/dom/Document.h"
+#include "core/events/KeyboardEvent.h"
+#include "core/events/KeyboardEventInit.h"
 #include "core/frame/FrameHost.h"
 #include "core/frame/FrameView.h"
 #include "core/frame/VisualViewport.h"
@@ -15,7 +18,6 @@
 #include "core/html/forms/DateTimeChooser.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include <memory>
 
 namespace blink {
 
@@ -148,6 +150,22 @@
   input->setAttribute(HTMLNames::valueAttr, "aaa");
 }
 
+TEST_F(HTMLInputElementTest, RadioKeyDownDCHECKFailure) {
+  // crbug.com/697286
+  document().body()->setInnerHTML(
+      "<input type=radio name=g><input type=radio name=g>");
+  HTMLInputElement& radio1 =
+      toHTMLInputElement(*document().body()->firstChild());
+  HTMLInputElement& radio2 = toHTMLInputElement(*radio1.nextSibling());
+  radio1.focus();
+  // Make layout-dirty.
+  radio2.setAttribute(HTMLNames::styleAttr, "position:fixed");
+  KeyboardEventInit init;
+  init.setKey("ArrowRight");
+  radio1.defaultEventHandler(new KeyboardEvent("keydown", init));
+  EXPECT_EQ(document().activeElement(), &radio2);
+}
+
 TEST_F(HTMLInputElementTest, DateTimeChooserSizeParamRespectsScale) {
   document().view()->frame().page()->visualViewport().setScale(2.f);
   document().body()->setInnerHTML(
@@ -162,4 +180,14 @@
   EXPECT_EQ(IntRect(16, 16, 400, 100), params.anchorRectInScreen);
 }
 
+TEST_F(HTMLInputElementTest, StepDownOverflow) {
+  HTMLInputElement* input = HTMLInputElement::create(document(), false);
+  input->setAttribute(HTMLNames::typeAttr, "date");
+  input->setAttribute(HTMLNames::minAttr, "2010-02-10");
+  input->setAttribute(HTMLNames::stepAttr, "9223372036854775556");
+  // InputType::applyStep() should not pass an out-of-range value to
+  // setValueAsDecimal, and WTF::msToYear() should not cause a DCHECK failure.
+  input->stepDown(1, ASSERT_NO_EXCEPTION);
+}
+
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/html/forms/InputType.cpp b/third_party/WebKit/Source/core/html/forms/InputType.cpp
index fd8731f..8aa3a4a 100644
--- a/third_party/WebKit/Source/core/html/forms/InputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/InputType.cpp
@@ -738,19 +738,20 @@
   // then set value to the smallest value that, when subtracted from the step
   // base, is an integral multiple of the allowed value step, and that is more
   // than or equal to minimum.
-  // 8. If the element has a maximum, and value is greater than that maximum,
-  // then set value to the largest value that, when subtracted from the step
-  // base, is an integral multiple of the allowed value step, and that is less
-  // than or equal to maximum.
-  if (newValue > stepRange.maximum()) {
-    newValue = alignedMaximum;
-  } else if (newValue < stepRange.minimum()) {
+  if (newValue < stepRange.minimum()) {
     const Decimal alignedMinimum =
         base + ((stepRange.minimum() - base) / step).ceil() * step;
     DCHECK_GE(alignedMinimum, stepRange.minimum());
     newValue = alignedMinimum;
   }
 
+  // 8. If the element has a maximum, and value is greater than that maximum,
+  // then set value to the largest value that, when subtracted from the step
+  // base, is an integral multiple of the allowed value step, and that is less
+  // than or equal to maximum.
+  if (newValue > stepRange.maximum())
+    newValue = alignedMaximum;
+
   // 9. Let value as string be the result of running the algorithm to convert
   // a number to a string, as defined for the input element's type attribute's
   // current state, on value.
diff --git a/third_party/WebKit/Source/core/html/forms/RadioInputType.cpp b/third_party/WebKit/Source/core/html/forms/RadioInputType.cpp
index 24c798e..89da99e 100644
--- a/third_party/WebKit/Source/core/html/forms/RadioInputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/RadioInputType.cpp
@@ -110,6 +110,9 @@
                      ? (key == "ArrowDown" || key == "ArrowLeft")
                      : (key == "ArrowDown" || key == "ArrowRight");
 
+  // Force layout for isFocusable() in findNextFocusableRadioButtonInGroup().
+  document.updateStyleAndLayoutIgnorePendingStylesheets();
+
   // We can only stay within the form's children if the form hasn't been demoted
   // to a leaf because of malformed HTML.
   HTMLInputElement* inputElement =
diff --git a/third_party/WebKit/Source/core/html/shadow/MediaControlElements.cpp b/third_party/WebKit/Source/core/html/shadow/MediaControlElements.cpp
index 778de8c3..56f2ac3 100644
--- a/third_party/WebKit/Source/core/html/shadow/MediaControlElements.cpp
+++ b/third_party/WebKit/Source/core/html/shadow/MediaControlElements.cpp
@@ -991,6 +991,9 @@
   MediaControlCastButtonElement* button =
       new MediaControlCastButtonElement(mediaControls, isOverlayButton);
   button->ensureUserAgentShadowRoot();
+  button->setShadowPseudoId(isOverlayButton
+                                ? "-internal-media-controls-overlay-cast-button"
+                                : "-internal-media-controls-cast-button");
   button->setType(InputTypeNames::button);
   return button;
 }
@@ -1017,14 +1020,6 @@
   MediaControlInputElement::defaultEventHandler(event);
 }
 
-const AtomicString& MediaControlCastButtonElement::shadowPseudoId() const {
-  DEFINE_STATIC_LOCAL(AtomicString, id_nonOverlay,
-                      ("-internal-media-controls-cast-button"));
-  DEFINE_STATIC_LOCAL(AtomicString, id_overlay,
-                      ("-internal-media-controls-overlay-cast-button"));
-  return m_isOverlayButton ? id_overlay : id_nonOverlay;
-}
-
 void MediaControlCastButtonElement::setIsPlayingRemotely(
     bool isPlayingRemotely) {
   if (isPlayingRemotely) {
diff --git a/third_party/WebKit/Source/core/html/shadow/MediaControlElements.h b/third_party/WebKit/Source/core/html/shadow/MediaControlElements.h
index bf2133f..df272a9 100644
--- a/third_party/WebKit/Source/core/html/shadow/MediaControlElements.h
+++ b/third_party/WebKit/Source/core/html/shadow/MediaControlElements.h
@@ -323,7 +323,6 @@
  private:
   explicit MediaControlCastButtonElement(MediaControls&, bool isOverlayButton);
 
-  const AtomicString& shadowPseudoId() const override;
   void defaultEventHandler(Event*) override;
   bool keepEventInNode(Event*) override;
 
diff --git a/third_party/WebKit/Source/core/input/MouseEventManager.cpp b/third_party/WebKit/Source/core/input/MouseEventManager.cpp
index 3672b0f..8649084 100644
--- a/third_party/WebKit/Source/core/input/MouseEventManager.cpp
+++ b/third_party/WebKit/Source/core/input/MouseEventManager.cpp
@@ -233,7 +233,8 @@
 WebInputEventResult MouseEventManager::dispatchMouseClickIfNeeded(
     Node* target,
     const WebMouseEvent& mouseEvent,
-    const String& canvasRegionId) {
+    const String& canvasRegionId,
+    Node* targetWithoutCapture) {
   // We only prevent click event when the click may cause contextmenu to popup.
   // However, we always send auxclick.
   bool contextMenuEvent =
@@ -267,6 +268,23 @@
       clickTargetNode = target->commonAncestor(
           *m_clickNode, EventHandlingUtil::parentForClickEvent);
     }
+
+    // This block is only for the purpose of gathering the metric and can be
+    // removed as soon as we don't need the metric.
+    if (targetWithoutCapture != target) {
+      Node* alternativeClickTargetNode = nullptr;
+      if (m_clickNode == targetWithoutCapture) {
+        alternativeClickTargetNode = m_clickNode;
+      } else if (m_clickNode->document() == targetWithoutCapture->document()) {
+        alternativeClickTargetNode = targetWithoutCapture->commonAncestor(
+            *m_clickNode, EventHandlingUtil::parentForClickEvent);
+      }
+      if (alternativeClickTargetNode != clickTargetNode) {
+        UseCounter::count(m_frame,
+                          UseCounter::PointerEventClickRetargetCausedByCapture);
+      }
+    }
+
     if (clickTargetNode) {
       clickEventResult = dispatchMouseEvent(
           clickTargetNode,
diff --git a/third_party/WebKit/Source/core/input/MouseEventManager.h b/third_party/WebKit/Source/core/input/MouseEventManager.h
index 87dfb19..64946a1 100644
--- a/third_party/WebKit/Source/core/input/MouseEventManager.h
+++ b/third_party/WebKit/Source/core/input/MouseEventManager.h
@@ -58,7 +58,8 @@
 
   WebInputEventResult dispatchMouseClickIfNeeded(Node* target,
                                                  const WebMouseEvent&,
-                                                 const String& canvasRegionId);
+                                                 const String& canvasRegionId,
+                                                 Node* targetWithoutCapture);
 
   WebInputEventResult dispatchDragSrcEvent(const AtomicString& eventType,
                                            const WebMouseEvent&);
diff --git a/third_party/WebKit/Source/core/input/PointerEventManager.cpp b/third_party/WebKit/Source/core/input/PointerEventManager.cpp
index 61a5f01..9f87727 100644
--- a/third_party/WebKit/Source/core/input/PointerEventManager.cpp
+++ b/third_party/WebKit/Source/core/input/PointerEventManager.cpp
@@ -169,6 +169,7 @@
     DCHECK(!m_dispatchingPointerId);
     AutoReset<int> dispatchHolder(&m_dispatchingPointerId, pointerId);
     DispatchEventResult dispatchResult = target->dispatchEvent(pointerEvent);
+
     return EventHandlingUtil::toWebInputEventResult(dispatchResult);
   }
   return WebInputEventResult::NotHandled;
@@ -506,7 +507,7 @@
         mouseEventType == EventTypeNames::mouseup) {
       WebInputEventResult clickEventResult =
           m_mouseEventManager->dispatchMouseClickIfNeeded(
-              mouseTarget->toNode(), mouseEvent, canvasRegionId);
+              mouseTarget->toNode(), mouseEvent, canvasRegionId, target);
       result = EventHandlingUtil::mergeEventResult(clickEventResult, result);
     }
   }
diff --git a/third_party/WebKit/Source/core/layout/TextAutosizer.cpp b/third_party/WebKit/Source/core/layout/TextAutosizer.cpp
index 692930e..878db4d9 100644
--- a/third_party/WebKit/Source/core/layout/TextAutosizer.cpp
+++ b/third_party/WebKit/Source/core/layout/TextAutosizer.cpp
@@ -51,80 +51,8 @@
 #include "core/page/Page.h"
 #include "wtf/PtrUtil.h"
 
-#ifdef AUTOSIZING_DOM_DEBUG_INFO
-#include "core/dom/ExecutionContextTask.h"
-#endif
-
 namespace blink {
 
-#ifdef AUTOSIZING_DOM_DEBUG_INFO
-class WriteDebugInfoTask : public ExecutionContextTask {
- public:
-  WriteDebugInfoTask(Element* element, AtomicString value)
-      : m_element(element), m_value(value) {}
-
-  virtual void performTask(ExecutionContext*) {
-    m_element->setAttribute("data-autosizing", m_value, ASSERT_NO_EXCEPTION);
-  }
-
- private:
-  Persistent<Element> m_element;
-  AtomicString m_value;
-};
-
-static void writeDebugInfo(LayoutObject* layoutObject,
-                           const AtomicString& output) {
-  Node* node = layoutObject->node();
-  if (!node)
-    return;
-  if (node->isDocumentNode())
-    node = toDocument(node)->documentElement();
-  if (!node->isElementNode())
-    return;
-  node->document().postTask(
-      BLINK_FROM_HERE,
-      WTF::wrapUnique(new WriteDebugInfoTask(toElement(node), output)));
-}
-
-void TextAutosizer::writeClusterDebugInfo(Cluster* cluster) {
-  String explanation = "";
-  if (cluster->m_flags & SUPPRESSING) {
-    explanation = "[suppressed]";
-  } else if (!(cluster->m_flags & (INDEPENDENT | WIDER_OR_NARROWER))) {
-    explanation = "[inherited]";
-  } else if (cluster->m_supercluster) {
-    explanation = "[supercluster]";
-  } else if (!clusterHasEnoughTextToAutosize(cluster)) {
-    explanation = "[insufficient-text]";
-  } else {
-    const LayoutBlock* widthProvider = clusterWidthProvider(cluster->m_root);
-    if (cluster->m_hasTableAncestor &&
-        cluster->m_multiplier < multiplierFromBlock(widthProvider)) {
-      explanation = "[table-ancestor-limited]";
-    } else {
-      explanation =
-          String::format("[from width %d of %s]",
-                         static_cast<int>(widthFromBlock(widthProvider)),
-                         widthProvider->debugName().utf8().data());
-    }
-  }
-  String pageInfo = "";
-  if (cluster->m_root->isLayoutView()) {
-    pageInfo =
-        String::format("; pageinfo: afsf %f * dsa %f * (lw %d / fw %d)",
-                       m_pageInfo.m_accessibilityFontScaleFactor,
-                       m_pageInfo.m_deviceScaleAdjustment,
-                       m_pageInfo.m_layoutWidth, m_pageInfo.m_frameWidth);
-  }
-  float multiplier =
-      cluster->m_flags & SUPPRESSING ? 1.0 : cluster->m_multiplier;
-  writeDebugInfo(const_cast<LayoutBlock*>(cluster->m_root),
-                 AtomicString(String::format("cluster: %f %s%s", multiplier,
-                                             explanation.utf8().data(),
-                                             pageInfo.utf8().data())));
-}
-#endif
-
 static LayoutObject* parentElementLayoutObject(
     const LayoutObject* layoutObject) {
   // At style recalc, the layoutObject's parent may not be attached,
@@ -886,11 +814,6 @@
   Cluster* cluster = new Cluster(
       block, flags, parentCluster,
       m_fingerprintMapper.createSuperclusterIfNeeded(block, isNewEntry));
-#ifdef AUTOSIZING_DOM_DEBUG_INFO
-  // Non-SUPPRESSING clusters are annotated in clusterMultiplier.
-  if (flags & SUPPRESSING)
-    writeClusterDebugInfo(cluster);
-#endif
   return cluster;
 }
 
@@ -941,10 +864,6 @@
       cluster->m_supercluster->m_inheritParentMultiplier = InheritMultiplier;
   }
 
-#ifdef AUTOSIZING_DOM_DEBUG_INFO
-  writeClusterDebugInfo(cluster);
-#endif
-
   ASSERT(cluster->m_multiplier);
   return cluster->m_multiplier;
 }
diff --git a/third_party/WebKit/Source/core/layout/TextAutosizer.h b/third_party/WebKit/Source/core/layout/TextAutosizer.h
index 0c59502..6d7d883 100644
--- a/third_party/WebKit/Source/core/layout/TextAutosizer.h
+++ b/third_party/WebKit/Source/core/layout/TextAutosizer.h
@@ -337,9 +337,6 @@
                                    TextLeafSearch) const;
   BlockFlags classifyBlock(const LayoutObject*,
                            BlockFlags mask = UINT_MAX) const;
-#ifdef AUTOSIZING_DOM_DEBUG_INFO
-  void writeClusterDebugInfo(Cluster*);
-#endif
   // Must be called at the start of layout.
   void checkSuperclusterConsistency();
   // Mark the nearest non-inheritance supercluser
diff --git a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp
index e0838dd6..0e2bee4 100644
--- a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp
+++ b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp
@@ -83,7 +83,8 @@
   Element* element = document().getElementById("target");
   PaintLayer* paintLayer =
       toLayoutBoxModelObject(element->layoutObject())->layer();
-  ASSERT_TRUE(!!paintLayer->graphicsLayerBacking());
+  ASSERT_TRUE(paintLayer->graphicsLayerBacking());
+  ASSERT_TRUE(paintLayer->compositedLayerMapping());
   EXPECT_RECT_EQ(IntRect(0, 0, 200, 200),
                  recomputeInterestRect(paintLayer->graphicsLayerBacking()));
 }
diff --git a/third_party/WebKit/Source/core/page/Page.cpp b/third_party/WebKit/Source/core/page/Page.cpp
index 89aec89..77ab44c 100644
--- a/third_party/WebKit/Source/core/page/Page.cpp
+++ b/third_party/WebKit/Source/core/page/Page.cpp
@@ -107,6 +107,7 @@
       m_pageScaleConstraintsSet(PageScaleConstraintsSet::create()),
       m_pointerLockController(PointerLockController::create(this)),
       m_browserControls(BrowserControls::create(*this)),
+      m_consoleMessageStorage(new ConsoleMessageStorage()),
       m_eventHandlerRegistry(new EventHandlerRegistry(*this)),
       m_globalRootScrollerController(
           TopDocumentRootScrollerController::create(*this)),
@@ -177,6 +178,14 @@
   return *m_browserControls;
 }
 
+ConsoleMessageStorage& Page::consoleMessageStorage() {
+  return *m_consoleMessageStorage;
+}
+
+const ConsoleMessageStorage& Page::consoleMessageStorage() const {
+  return *m_consoleMessageStorage;
+}
+
 EventHandlerRegistry& Page::eventHandlerRegistry() {
   return *m_eventHandlerRegistry;
 }
@@ -575,6 +584,7 @@
   visitor->trace(m_pointerLockController);
   visitor->trace(m_scrollingCoordinator);
   visitor->trace(m_browserControls);
+  visitor->trace(m_consoleMessageStorage);
   visitor->trace(m_eventHandlerRegistry);
   visitor->trace(m_globalRootScrollerController);
   visitor->trace(m_visualViewport);
diff --git a/third_party/WebKit/Source/core/page/Page.h b/third_party/WebKit/Source/core/page/Page.h
index 0f319db..97a9f8c 100644
--- a/third_party/WebKit/Source/core/page/Page.h
+++ b/third_party/WebKit/Source/core/page/Page.h
@@ -67,6 +67,7 @@
 class ScopedPageSuspender;
 class ScrollingCoordinator;
 class Settings;
+class ConsoleMessageStorage;
 class SpellCheckerClient;
 class TopDocumentRootScrollerController;
 class ValidationMessageClient;
@@ -192,6 +193,9 @@
   BrowserControls& browserControls();
   const BrowserControls& browserControls() const;
 
+  ConsoleMessageStorage& consoleMessageStorage();
+  const ConsoleMessageStorage& consoleMessageStorage() const;
+
   EventHandlerRegistry& eventHandlerRegistry();
   const EventHandlerRegistry& eventHandlerRegistry() const;
 
@@ -286,6 +290,7 @@
   const Member<PointerLockController> m_pointerLockController;
   Member<ScrollingCoordinator> m_scrollingCoordinator;
   const Member<BrowserControls> m_browserControls;
+  const Member<ConsoleMessageStorage> m_consoleMessageStorage;
   const Member<EventHandlerRegistry> m_eventHandlerRegistry;
   const Member<TopDocumentRootScrollerController>
       m_globalRootScrollerController;
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerTest.cpp b/third_party/WebKit/Source/core/paint/PaintLayerTest.cpp
index 4bd7a6d..d5b41edc 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayerTest.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintLayerTest.cpp
@@ -34,6 +34,19 @@
 
 INSTANTIATE_TEST_CASE_P(All, PaintLayerTest, ::testing::ValuesIn(foo));
 
+TEST_P(PaintLayerTest, ChildWithoutPaintLayer) {
+  setBodyInnerHTML(
+      "<div id='target' style='width: 200px; height: 200px;'></div>");
+
+  Element* element = document().getElementById("target");
+  PaintLayer* paintLayer =
+      toLayoutBoxModelObject(element->layoutObject())->layer();
+  PaintLayer* rootLayer = layoutView().layer();
+
+  EXPECT_EQ(nullptr, paintLayer);
+  EXPECT_NE(nullptr, rootLayer);
+}
+
 TEST_P(PaintLayerTest, CompositedBoundsAbsPosGrandchild) {
   setBodyInnerHTML(
       " <div id='parent'><div id='absposparent'><div id='absposchild'>"
diff --git a/third_party/WebKit/Source/core/style/ComputedStyle.h b/third_party/WebKit/Source/core/style/ComputedStyle.h
index 7cec815..aedafd4 100644
--- a/third_party/WebKit/Source/core/style/ComputedStyle.h
+++ b/third_party/WebKit/Source/core/style/ComputedStyle.h
@@ -270,8 +270,6 @@
 
     // 64 bits
 
-    unsigned m_isLink : 1;
-
     mutable unsigned m_hasRemUnits : 1;
 
     // If you add more style bits here, you will also need to update
@@ -297,7 +295,6 @@
     m_nonInheritedData.m_pseudoBits = 0;
     m_nonInheritedData.m_emptyState = false;
     m_nonInheritedData.m_hasViewportUnits = false;
-    m_nonInheritedData.m_isLink = false;
     m_nonInheritedData.m_hasRemUnits = false;
   }
 
@@ -2451,9 +2448,6 @@
     SET_VAR(m_rareNonInheritedData, m_hasCompositorProxy, b);
   }
 
-  bool isLink() const { return m_nonInheritedData.m_isLink; }
-  void setIsLink() { m_nonInheritedData.m_isLink = true; }
-
   EInsideLink insideLink() const {
     return static_cast<EInsideLink>(m_inheritedData.m_insideLink);
   }
diff --git a/third_party/WebKit/Source/core/svg/SVGAngle.cpp b/third_party/WebKit/Source/core/svg/SVGAngle.cpp
index 7418a5e..13ebbcbb 100644
--- a/third_party/WebKit/Source/core/svg/SVGAngle.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGAngle.cpp
@@ -58,7 +58,7 @@
 }
 
 void SVGMarkerOrientEnumeration::notifyChange() {
-  ASSERT(m_angle);
+  DCHECK(m_angle);
   m_angle->orientTypeChanged();
 }
 
@@ -391,7 +391,7 @@
                                       SVGPropertyBase* to,
                                       SVGPropertyBase* toAtEndOfDuration,
                                       SVGElement*) {
-  ASSERT(animationElement);
+  DCHECK(animationElement);
   bool isToAnimation = animationElement->getAnimationMode() == ToAnimation;
 
   SVGAngle* fromAngle = isToAnimation ? this : toSVGAngle(from);
diff --git a/third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.cpp b/third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.cpp
index 5b83ba0c..c6afff43 100644
--- a/third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.cpp
@@ -227,7 +227,7 @@
     return;
   }
 
-  ASSERT(!m_animationPath.isEmpty());
+  DCHECK(!m_animationPath.isEmpty());
 
   float positionOnPath = m_animationPath.length() * percentage;
   FloatPoint position;
@@ -266,7 +266,7 @@
   const HeapHashSet<WeakMember<SVGElement>>& instances =
       targetElement->instancesForElement();
   for (SVGElement* shadowTreeElement : instances) {
-    ASSERT(shadowTreeElement);
+    DCHECK(shadowTreeElement);
     AffineTransform* transform = shadowTreeElement->animateMotionTransform();
     if (!transform)
       continue;
diff --git a/third_party/WebKit/Source/core/svg/SVGAnimatedColor.cpp b/third_party/WebKit/Source/core/svg/SVGAnimatedColor.cpp
index a9bee91..797ec23 100644
--- a/third_party/WebKit/Source/core/svg/SVGAnimatedColor.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGAnimatedColor.cpp
@@ -46,14 +46,14 @@
 }
 
 static inline Color fallbackColorForCurrentColor(SVGElement* targetElement) {
-  ASSERT(targetElement);
+  DCHECK(targetElement);
   if (LayoutObject* targetLayoutObject = targetElement->layoutObject())
     return targetLayoutObject->resolveColor(CSSPropertyColor);
   return Color::transparent;
 }
 
 void SVGColorProperty::add(SVGPropertyBase* other, SVGElement* contextElement) {
-  ASSERT(contextElement);
+  DCHECK(contextElement);
 
   Color fallbackColor = fallbackColorForCurrentColor(contextElement);
   Color fromColor =
@@ -76,7 +76,7 @@
       toSVGColorProperty(toAtEndOfDurationValue)->m_styleColor;
 
   // Apply currentColor rules.
-  ASSERT(contextElement);
+  DCHECK(contextElement);
   Color fallbackColor = fallbackColorForCurrentColor(contextElement);
   Color fromColor = fromStyleColor.resolve(fallbackColor);
   Color toColor = toStyleColor.resolve(fallbackColor);
@@ -84,7 +84,7 @@
       toAtEndOfDurationStyleColor.resolve(fallbackColor);
   Color animatedColor = m_styleColor.resolve(fallbackColor);
 
-  ASSERT(animationElement);
+  DCHECK(animationElement);
   float animatedRed = animatedColor.red();
   animationElement->animateAdditiveNumber(
       percentage, repeatCount, fromColor.red(), toColor.red(),
@@ -112,7 +112,7 @@
 
 float SVGColorProperty::calculateDistance(SVGPropertyBase* toValue,
                                           SVGElement* contextElement) {
-  ASSERT(contextElement);
+  DCHECK(contextElement);
   Color fallbackColor = fallbackColorForCurrentColor(contextElement);
 
   Color fromColor = m_styleColor.resolve(fallbackColor);
diff --git a/third_party/WebKit/Source/core/svg/SVGAnimationElement.cpp b/third_party/WebKit/Source/core/svg/SVGAnimationElement.cpp
index 3f48d92..ab7dbcc 100644
--- a/third_party/WebKit/Source/core/svg/SVGAnimationElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGAnimationElement.cpp
@@ -39,7 +39,7 @@
       m_animationValid(false),
       m_calcMode(CalcModeLinear),
       m_animationMode(NoAnimation) {
-  ASSERT(RuntimeEnabledFeatures::smilEnabled());
+  DCHECK(RuntimeEnabledFeatures::smilEnabled());
   UseCounter::count(document, UseCounter::SVGAnimationElement);
 }
 
@@ -326,11 +326,11 @@
 }
 
 void SVGAnimationElement::calculateKeyTimesForCalcModePaced() {
-  ASSERT(getCalcMode() == CalcModePaced);
-  ASSERT(getAnimationMode() == ValuesAnimation);
+  DCHECK_EQ(getCalcMode(), CalcModePaced);
+  DCHECK_EQ(getAnimationMode(), ValuesAnimation);
 
   unsigned valuesCount = m_values.size();
-  ASSERT(valuesCount >= 1);
+  DCHECK_GE(valuesCount, 1u);
   if (valuesCount == 1)
     return;
 
@@ -384,7 +384,7 @@
 float SVGAnimationElement::calculatePercentForSpline(
     float percent,
     unsigned splineIndex) const {
-  ASSERT(getCalcMode() == CalcModeSpline);
+  DCHECK_EQ(getCalcMode(), CalcModeSpline);
   SECURITY_DCHECK(splineIndex < m_keySplines.size());
   gfx::CubicBezier bezier = m_keySplines[splineIndex];
   SMILTime duration = simpleDuration();
@@ -395,10 +395,10 @@
 }
 
 float SVGAnimationElement::calculatePercentFromKeyPoints(float percent) const {
-  ASSERT(!m_keyPoints.isEmpty());
-  ASSERT(getCalcMode() != CalcModePaced);
-  ASSERT(m_keyTimes.size() > 1);
-  ASSERT(m_keyPoints.size() == m_keyTimes.size());
+  DCHECK(!m_keyPoints.isEmpty());
+  DCHECK_NE(getCalcMode(), CalcModePaced);
+  DCHECK_GT(m_keyTimes.size(), 1u);
+  DCHECK_EQ(m_keyPoints.size(), m_keyTimes.size());
 
   if (percent == 1)
     return m_keyPoints[m_keyPoints.size() - 1];
@@ -409,14 +409,14 @@
   if (getCalcMode() == CalcModeDiscrete)
     return fromKeyPoint;
 
-  ASSERT(index + 1 < m_keyTimes.size());
+  DCHECK_LT(index + 1, m_keyTimes.size());
   float fromPercent = m_keyTimes[index];
   float toPercent = m_keyTimes[index + 1];
   float toKeyPoint = m_keyPoints[index + 1];
   float keyPointPercent = (percent - fromPercent) / (toPercent - fromPercent);
 
   if (getCalcMode() == CalcModeSpline) {
-    ASSERT(m_keySplines.size() == m_keyPoints.size() - 1);
+    DCHECK_EQ(m_keySplines.size(), m_keyPoints.size() - 1);
     keyPointPercent = calculatePercentForSpline(keyPointPercent, index);
   }
   return (toKeyPoint - fromKeyPoint) * keyPointPercent + fromKeyPoint;
@@ -433,9 +433,9 @@
                                                      float& effectivePercent,
                                                      String& from,
                                                      String& to) const {
-  ASSERT(!m_keyPoints.isEmpty());
-  ASSERT(m_keyPoints.size() == m_keyTimes.size());
-  ASSERT(getCalcMode() != CalcModePaced);
+  DCHECK(!m_keyPoints.isEmpty());
+  DCHECK_EQ(m_keyPoints.size(), m_keyTimes.size());
+  DCHECK_NE(getCalcMode(), CalcModePaced);
   effectivePercent = calculatePercentFromKeyPoints(percent);
   unsigned index =
       effectivePercent == 1
@@ -451,8 +451,8 @@
     String& from,
     String& to) {
   unsigned valuesCount = m_values.size();
-  ASSERT(m_animationValid);
-  ASSERT(valuesCount >= 1);
+  DCHECK(m_animationValid);
+  DCHECK_GE(valuesCount, 1u);
 
   if (percent == 1 || valuesCount == 1) {
     from = m_values[valuesCount - 1];
@@ -471,8 +471,8 @@
     return currentValuesFromKeyPoints(percent, effectivePercent, from, to);
 
   unsigned keyTimesCount = m_keyTimes.size();
-  ASSERT(!keyTimesCount || valuesCount == keyTimesCount);
-  ASSERT(!keyTimesCount || (keyTimesCount > 1 && !m_keyTimes[0]));
+  DCHECK(!keyTimesCount || valuesCount == keyTimesCount);
+  DCHECK(!keyTimesCount || (keyTimesCount > 1 && !m_keyTimes[0]));
 
   unsigned index = calculateKeyTimesIndex(percent);
   if (calcMode == CalcModeDiscrete) {
@@ -499,11 +499,11 @@
     --index;
   from = m_values[index];
   to = m_values[index + 1];
-  ASSERT(toPercent > fromPercent);
+  DCHECK_GT(toPercent, fromPercent);
   effectivePercent = (percent - fromPercent) / (toPercent - fromPercent);
 
   if (calcMode == CalcModeSpline) {
-    ASSERT(m_keySplines.size() == m_values.size() - 1);
+    DCHECK_EQ(m_keySplines.size(), m_values.size() - 1);
     effectivePercent = calculatePercentForSpline(effectivePercent, index);
   }
 }
diff --git a/third_party/WebKit/Source/core/svg/SVGBoolean.cpp b/third_party/WebKit/Source/core/svg/SVGBoolean.cpp
index 9c7dc4c..63bd0bad 100644
--- a/third_party/WebKit/Source/core/svg/SVGBoolean.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGBoolean.cpp
@@ -61,7 +61,7 @@
                                         SVGPropertyBase* to,
                                         SVGPropertyBase*,
                                         SVGElement*) {
-  ASSERT(animationElement);
+  DCHECK(animationElement);
   bool fromBoolean = animationElement->getAnimationMode() == ToAnimation
                          ? m_value
                          : toSVGBoolean(from)->value();
diff --git a/third_party/WebKit/Source/core/svg/SVGCircleElement.cpp b/third_party/WebKit/Source/core/svg/SVGCircleElement.cpp
index 162c2431..71cdb5a 100644
--- a/third_party/WebKit/Source/core/svg/SVGCircleElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGCircleElement.cpp
@@ -58,7 +58,7 @@
   Path path;
 
   SVGLengthContext lengthContext(this);
-  ASSERT(layoutObject());
+  DCHECK(layoutObject());
   const ComputedStyle& style = layoutObject()->styleRef();
   const SVGComputedStyle& svgStyle = style.svgStyle();
 
diff --git a/third_party/WebKit/Source/core/svg/SVGDiscardElement.cpp b/third_party/WebKit/Source/core/svg/SVGDiscardElement.cpp
index 30a152d..2f4a0011 100644
--- a/third_party/WebKit/Source/core/svg/SVGDiscardElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGDiscardElement.cpp
@@ -36,7 +36,7 @@
 
 inline SVGDiscardElement::SVGDiscardElement(Document& document)
     : SVGSMILElement(SVGNames::discardTag, document) {
-  ASSERT(RuntimeEnabledFeatures::smilEnabled());
+  DCHECK(RuntimeEnabledFeatures::smilEnabled());
 }
 
 DEFINE_NODE_FACTORY(SVGDiscardElement)
diff --git a/third_party/WebKit/Source/core/svg/SVGDocumentExtensions.cpp b/third_party/WebKit/Source/core/svg/SVGDocumentExtensions.cpp
index b859e892e..2cbe543 100644
--- a/third_party/WebKit/Source/core/svg/SVGDocumentExtensions.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGDocumentExtensions.cpp
@@ -45,7 +45,7 @@
 
 void SVGDocumentExtensions::addWebAnimationsPendingSVGElement(
     SVGElement& element) {
-  ASSERT(RuntimeEnabledFeatures::webAnimationsSVGEnabled());
+  DCHECK(RuntimeEnabledFeatures::webAnimationsSVGEnabled());
   m_webAnimationsPendingSVGElements.insert(&element);
 }
 
@@ -72,7 +72,7 @@
   for (auto& svgElement : webAnimationsPendingSVGElements)
     svgElement->applyActiveWebAnimations();
 
-  ASSERT(m_webAnimationsPendingSVGElements.isEmpty());
+  DCHECK(m_webAnimationsPendingSVGElements.isEmpty());
 }
 
 void SVGDocumentExtensions::startAnimations() {
@@ -114,13 +114,17 @@
 
 void SVGDocumentExtensions::addSVGRootWithRelativeLengthDescendents(
     SVGSVGElement* svgRoot) {
-  ASSERT(!m_inRelativeLengthSVGRootsInvalidation);
+#if DCHECK_IS_ON()
+  DCHECK(!m_inRelativeLengthSVGRootsInvalidation);
+#endif
   m_relativeLengthSVGRoots.insert(svgRoot);
 }
 
 void SVGDocumentExtensions::removeSVGRootWithRelativeLengthDescendents(
     SVGSVGElement* svgRoot) {
-  ASSERT(!m_inRelativeLengthSVGRootsInvalidation);
+#if DCHECK_IS_ON()
+  DCHECK(!m_inRelativeLengthSVGRootsInvalidation);
+#endif
   m_relativeLengthSVGRoots.erase(svgRoot);
 }
 
@@ -131,8 +135,8 @@
 
 void SVGDocumentExtensions::invalidateSVGRootsWithRelativeLengthDescendents(
     SubtreeLayoutScope* scope) {
-  ASSERT(!m_inRelativeLengthSVGRootsInvalidation);
 #if DCHECK_IS_ON()
+  DCHECK(!m_inRelativeLengthSVGRootsInvalidation);
   AutoReset<bool> inRelativeLengthSVGRootsChange(
       &m_inRelativeLengthSVGRootsInvalidation, true);
 #endif
@@ -165,7 +169,7 @@
 }
 
 SVGSVGElement* SVGDocumentExtensions::rootElement() const {
-  ASSERT(m_document);
+  DCHECK(m_document);
   return rootElement(*m_document);
 }
 
diff --git a/third_party/WebKit/Source/core/svg/SVGElement.cpp b/third_party/WebKit/Source/core/svg/SVGElement.cpp
index dd0aac5f..313e7bb 100644
--- a/third_party/WebKit/Source/core/svg/SVGElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGElement.cpp
@@ -71,7 +71,7 @@
 }
 
 SVGElement::~SVGElement() {
-  ASSERT(isConnected() || !hasRelativeLengths());
+  DCHECK(isConnected() || !hasRelativeLengths());
 }
 
 void SVGElement::detachLayoutTree(const AttachContext& context) {
@@ -394,7 +394,7 @@
     // need to do anything: they will get their own removedFrom() notification
     // and just clear their sets.
     if (rootParent->isSVGElement() && !parentNode()) {
-      ASSERT(toSVGElement(rootParent)
+      DCHECK(toSVGElement(rootParent)
                  ->m_elementsWithRelativeLengths.contains(this));
       toSVGElement(rootParent)->updateRelativeLengthsInformation(false, this);
     }
@@ -496,7 +496,7 @@
     };
     for (size_t i = 0; i < WTF_ARRAY_LENGTH(attrNames); i++) {
       CSSPropertyID propertyId = cssPropertyID(attrNames[i]->localName());
-      ASSERT(propertyId > 0);
+      DCHECK_GT(propertyId, 0);
       propertyNameToIdMap->set(attrNames[i]->localName().impl(), propertyId);
     }
   }
@@ -506,7 +506,7 @@
 
 void SVGElement::updateRelativeLengthsInformation(bool clientHasRelativeLengths,
                                                   SVGElement* clientElement) {
-  ASSERT(clientElement);
+  DCHECK(clientElement);
 
   // If we're not yet in a document, this function will be called again from
   // insertedInto(). Do nothing now.
@@ -521,7 +521,9 @@
     if (!currentNode.isSVGElement())
       break;
     SVGElement& currentElement = toSVGElement(currentNode);
-    ASSERT(!currentElement.m_inRelativeLengthClientsInvalidation);
+#if DCHECK_IS_ON()
+    DCHECK(!currentElement.m_inRelativeLengthClientsInvalidation);
+#endif
 
     bool hadRelativeLengths = currentElement.hasRelativeLengths();
     if (clientHasRelativeLengths)
@@ -555,8 +557,8 @@
   if (!isConnected())
     return;
 
-  ASSERT(!m_inRelativeLengthClientsInvalidation);
 #if DCHECK_IS_ON()
+  DCHECK(!m_inRelativeLengthClientsInvalidation);
   AutoReset<bool> inRelativeLengthClientsInvalidationChange(
       &m_inRelativeLengthClientsInvalidation, true);
 #endif
@@ -604,19 +606,19 @@
 }
 
 void SVGElement::mapInstanceToElement(SVGElement* instance) {
-  ASSERT(instance);
-  ASSERT(instance->inUseShadowTree());
+  DCHECK(instance);
+  DCHECK(instance->inUseShadowTree());
 
   HeapHashSet<WeakMember<SVGElement>>& instances =
       ensureSVGRareData()->elementInstances();
-  ASSERT(!instances.contains(instance));
+  DCHECK(!instances.contains(instance));
 
   instances.insert(instance);
 }
 
 void SVGElement::removeInstanceMapping(SVGElement* instance) {
-  ASSERT(instance);
-  ASSERT(instance->inUseShadowTree());
+  DCHECK(instance);
+  DCHECK(instance->inUseShadowTree());
 
   if (!hasSVGRareData())
     return;
@@ -641,7 +643,7 @@
 }
 
 SVGElement* SVGElement::correspondingElement() const {
-  ASSERT(!hasSVGRareData() || !svgRareData()->correspondingElement() ||
+  DCHECK(!hasSVGRareData() || !svgRareData()->correspondingElement() ||
          containingShadowRoot());
   return hasSVGRareData() ? svgRareData()->correspondingElement() : 0;
 }
@@ -822,11 +824,11 @@
 static inline void collectInstancesForSVGElement(
     SVGElement* element,
     HeapHashSet<WeakMember<SVGElement>>& instances) {
-  ASSERT(element);
+  DCHECK(element);
   if (element->containingShadowRoot())
     return;
 
-  ASSERT(!element->instanceUpdatesBlocked());
+  DCHECK(!element->instanceUpdatesBlocked());
 
   instances = element->instancesForElement();
 }
@@ -860,7 +862,7 @@
   EventListenerOptions options = registeredListener.options();
   const EventListener* listener = registeredListener.listener();
   for (SVGElement* shadowTreeElement : instances) {
-    ASSERT(shadowTreeElement);
+    DCHECK(shadowTreeElement);
 
     shadowTreeElement->Node::removeEventListenerInternal(eventType, listener,
                                                          options);
@@ -1074,7 +1076,7 @@
 
 void SVGElement::markForLayoutAndParentResourceInvalidation(
     LayoutObject* layoutObject) {
-  ASSERT(layoutObject);
+  DCHECK(layoutObject);
   LayoutSVGResourceContainer::markForLayoutAndParentResourceInvalidation(
       layoutObject, true);
 }
@@ -1243,7 +1245,7 @@
 }
 
 void SVGElement::addReferenceTo(SVGElement* targetElement) {
-  ASSERT(targetElement);
+  DCHECK(targetElement);
 
   ensureSVGRareData()->outgoingReferences().insert(targetElement);
   targetElement->ensureSVGRareData()->incomingReferences().insert(this);
@@ -1274,7 +1276,7 @@
 
   SVGElementSet& incomingReferences = svgRareData()->incomingReferences();
   for (SVGElement* sourceElement : incomingReferences) {
-    ASSERT(sourceElement->hasSVGRareData());
+    DCHECK(sourceElement->hasSVGRareData());
     sourceElement->ensureSVGRareData()->outgoingReferences().erase(this);
   }
   incomingReferences.clear();
@@ -1286,7 +1288,7 @@
 
   SVGElementSet& outgoingReferences = svgRareData()->outgoingReferences();
   for (SVGElement* targetElement : outgoingReferences) {
-    ASSERT(targetElement->hasSVGRareData());
+    DCHECK(targetElement->hasSVGRareData());
     targetElement->ensureSVGRareData()->incomingReferences().erase(this);
   }
   outgoingReferences.clear();
diff --git a/third_party/WebKit/Source/core/svg/SVGElement.h b/third_party/WebKit/Source/core/svg/SVGElement.h
index e8bf299..82504636 100644
--- a/third_party/WebKit/Source/core/svg/SVGElement.h
+++ b/third_party/WebKit/Source/core/svg/SVGElement.h
@@ -240,7 +240,7 @@
   SVGElementRareData* ensureSVGRareData();
   inline bool hasSVGRareData() const { return m_SVGRareData; }
   inline SVGElementRareData* svgRareData() const {
-    ASSERT(m_SVGRareData);
+    DCHECK(m_SVGRareData);
     return m_SVGRareData.get();
   }
 
diff --git a/third_party/WebKit/Source/core/svg/SVGElementRareData.cpp b/third_party/WebKit/Source/core/svg/SVGElementRareData.cpp
index d384200..89d47596 100644
--- a/third_party/WebKit/Source/core/svg/SVGElementRareData.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGElementRareData.cpp
@@ -21,7 +21,7 @@
 ComputedStyle* SVGElementRareData::overrideComputedStyle(
     Element* element,
     const ComputedStyle* parentStyle) {
-  ASSERT(element);
+  DCHECK(element);
   if (!m_useOverrideComputedStyle)
     return nullptr;
   if (!m_overrideComputedStyle || m_needsOverrideComputedStyleUpdate) {
@@ -34,7 +34,7 @@
             MatchAllRulesExcludingSMIL);
     m_needsOverrideComputedStyleUpdate = false;
   }
-  ASSERT(m_overrideComputedStyle);
+  DCHECK(m_overrideComputedStyle);
   return m_overrideComputedStyle.get();
 }
 
diff --git a/third_party/WebKit/Source/core/svg/SVGEllipseElement.cpp b/third_party/WebKit/Source/core/svg/SVGEllipseElement.cpp
index e3c75954..a31629c1 100644
--- a/third_party/WebKit/Source/core/svg/SVGEllipseElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGEllipseElement.cpp
@@ -64,7 +64,7 @@
   Path path;
 
   SVGLengthContext lengthContext(this);
-  ASSERT(layoutObject());
+  DCHECK(layoutObject());
   const ComputedStyle& style = layoutObject()->styleRef();
   const SVGComputedStyle& svgStyle = style.svgStyle();
 
diff --git a/third_party/WebKit/Source/core/svg/SVGEnumeration.cpp b/third_party/WebKit/Source/core/svg/SVGEnumeration.cpp
index ab977855..0bf9367 100644
--- a/third_party/WebKit/Source/core/svg/SVGEnumeration.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGEnumeration.cpp
@@ -51,7 +51,7 @@
       return entry.second;
   }
 
-  ASSERT(m_value < maxInternalEnumValue());
+  DCHECK_LT(m_value, maxInternalEnumValue());
   return emptyString;
 }
 
@@ -65,7 +65,7 @@
     if (string == entry.second) {
       // 0 corresponds to _UNKNOWN enumeration values, and should not be
       // settable.
-      ASSERT(entry.first);
+      DCHECK(entry.first);
       m_value = entry.first;
       notifyChange();
       return SVGParseStatus::NoError;
@@ -88,7 +88,7 @@
     SVGPropertyBase* to,
     SVGPropertyBase*,
     SVGElement*) {
-  ASSERT(animationElement);
+  DCHECK(animationElement);
   unsigned short fromEnumeration =
       animationElement->getAnimationMode() == ToAnimation
           ? m_value
diff --git a/third_party/WebKit/Source/core/svg/SVGEnumeration.h b/third_party/WebKit/Source/core/svg/SVGEnumeration.h
index ab7b580..52837b8 100644
--- a/third_party/WebKit/Source/core/svg/SVGEnumeration.h
+++ b/third_party/WebKit/Source/core/svg/SVGEnumeration.h
@@ -120,7 +120,7 @@
   SVGEnumerationBase* clone() const override { return create(enumValue()); }
 
   Enum enumValue() const {
-    ASSERT(m_value <= maxInternalEnumValue());
+    DCHECK_LE(m_value, maxInternalEnumValue());
     return static_cast<Enum>(m_value);
   }
 
diff --git a/third_party/WebKit/Source/core/svg/SVGFEBlendElement.cpp b/third_party/WebKit/Source/core/svg/SVGFEBlendElement.cpp
index 98214ca..5cce950 100644
--- a/third_party/WebKit/Source/core/svg/SVGFEBlendElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGFEBlendElement.cpp
@@ -152,7 +152,8 @@
       AtomicString(m_in1->currentValue()->value()));
   FilterEffect* input2 = filterBuilder->getEffectById(
       AtomicString(m_in2->currentValue()->value()));
-  ASSERT(input1 && input2);
+  DCHECK(input1);
+  DCHECK(input2);
 
   FilterEffect* effect = FEBlend::create(
       filter, toWebBlendMode(m_mode->currentValue()->enumValue()));
diff --git a/third_party/WebKit/Source/core/svg/SVGFEColorMatrixElement.cpp b/third_party/WebKit/Source/core/svg/SVGFEColorMatrixElement.cpp
index 05eeb530..771130c76d 100644
--- a/third_party/WebKit/Source/core/svg/SVGFEColorMatrixElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGFEColorMatrixElement.cpp
@@ -96,7 +96,7 @@
                                              Filter* filter) {
   FilterEffect* input1 = filterBuilder->getEffectById(
       AtomicString(m_in1->currentValue()->value()));
-  ASSERT(input1);
+  DCHECK(input1);
 
   ColorMatrixType filterType = m_type->currentValue()->enumValue();
   Vector<float> filterValues = m_values->currentValue()->toFloatVector();
diff --git a/third_party/WebKit/Source/core/svg/SVGFEComponentTransferElement.cpp b/third_party/WebKit/Source/core/svg/SVGFEComponentTransferElement.cpp
index bbd0ac8..20eec4f 100644
--- a/third_party/WebKit/Source/core/svg/SVGFEComponentTransferElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGFEComponentTransferElement.cpp
@@ -62,7 +62,7 @@
     Filter* filter) {
   FilterEffect* input1 = filterBuilder->getEffectById(
       AtomicString(m_in1->currentValue()->value()));
-  ASSERT(input1);
+  DCHECK(input1);
 
   ComponentTransferFunction red;
   ComponentTransferFunction green;
diff --git a/third_party/WebKit/Source/core/svg/SVGFECompositeElement.cpp b/third_party/WebKit/Source/core/svg/SVGFECompositeElement.cpp
index 619a7b5..c88f215 100644
--- a/third_party/WebKit/Source/core/svg/SVGFECompositeElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGFECompositeElement.cpp
@@ -132,7 +132,8 @@
       AtomicString(m_in1->currentValue()->value()));
   FilterEffect* input2 = filterBuilder->getEffectById(
       AtomicString(m_in2->currentValue()->value()));
-  ASSERT(input1 && input2);
+  DCHECK(input1);
+  DCHECK(input2);
 
   FilterEffect* effect = FEComposite::create(
       filter, m_svgOperator->currentValue()->enumValue(),
diff --git a/third_party/WebKit/Source/core/svg/SVGFEConvolveMatrixElement.cpp b/third_party/WebKit/Source/core/svg/SVGFEConvolveMatrixElement.cpp
index 276a47a..03a5e13 100644
--- a/third_party/WebKit/Source/core/svg/SVGFEConvolveMatrixElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGFEConvolveMatrixElement.cpp
@@ -194,7 +194,7 @@
                                                 Filter* filter) {
   FilterEffect* input1 = filterBuilder->getEffectById(
       AtomicString(m_in1->currentValue()->value()));
-  ASSERT(input1);
+  DCHECK(input1);
 
   float divisorValue = m_divisor->currentValue()->value();
   if (!m_divisor->isSpecified()) {
diff --git a/third_party/WebKit/Source/core/svg/SVGFEDiffuseLightingElement.cpp b/third_party/WebKit/Source/core/svg/SVGFEDiffuseLightingElement.cpp
index 1ccd419b..c40de28 100644
--- a/third_party/WebKit/Source/core/svg/SVGFEDiffuseLightingElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGFEDiffuseLightingElement.cpp
@@ -64,8 +64,8 @@
 
   if (attrName == SVGNames::lighting_colorAttr) {
     LayoutObject* layoutObject = this->layoutObject();
-    ASSERT(layoutObject);
-    ASSERT(layoutObject->style());
+    DCHECK(layoutObject);
+    DCHECK(layoutObject->style());
     return diffuseLighting->setLightingColor(
         layoutObject->style()->svgStyle().lightingColor());
   }
@@ -80,9 +80,9 @@
       const_cast<LightSource*>(diffuseLighting->lightSource());
   const SVGFELightElement* lightElement =
       SVGFELightElement::findLightElement(*this);
-  ASSERT(lightSource);
-  ASSERT(lightElement);
-  ASSERT(effect->getFilter());
+  DCHECK(lightSource);
+  DCHECK(lightElement);
+  DCHECK(effect->getFilter());
 
   if (attrName == SVGNames::azimuthAttr)
     return lightSource->setAzimuth(
@@ -144,13 +144,13 @@
     Filter* filter) {
   FilterEffect* input1 = filterBuilder->getEffectById(
       AtomicString(m_in1->currentValue()->value()));
-  ASSERT(input1);
+  DCHECK(input1);
 
   LayoutObject* layoutObject = this->layoutObject();
   if (!layoutObject)
     return nullptr;
 
-  ASSERT(layoutObject->style());
+  DCHECK(layoutObject->style());
   Color color = layoutObject->style()->svgStyle().lightingColor();
 
   const SVGFELightElement* lightNode =
diff --git a/third_party/WebKit/Source/core/svg/SVGFEDisplacementMapElement.cpp b/third_party/WebKit/Source/core/svg/SVGFEDisplacementMapElement.cpp
index adc9664..d7be1f90 100644
--- a/third_party/WebKit/Source/core/svg/SVGFEDisplacementMapElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGFEDisplacementMapElement.cpp
@@ -115,7 +115,8 @@
       AtomicString(m_in1->currentValue()->value()));
   FilterEffect* input2 = filterBuilder->getEffectById(
       AtomicString(m_in2->currentValue()->value()));
-  ASSERT(input1 && input2);
+  DCHECK(input1);
+  DCHECK(input2);
 
   FilterEffect* effect = FEDisplacementMap::create(
       filter, m_xChannelSelector->currentValue()->enumValue(),
diff --git a/third_party/WebKit/Source/core/svg/SVGFEDropShadowElement.cpp b/third_party/WebKit/Source/core/svg/SVGFEDropShadowElement.cpp
index e191ded4..10c5026d 100644
--- a/third_party/WebKit/Source/core/svg/SVGFEDropShadowElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGFEDropShadowElement.cpp
@@ -101,7 +101,7 @@
   if (!layoutObject)
     return nullptr;
 
-  ASSERT(layoutObject->style());
+  DCHECK(layoutObject->style());
   const SVGComputedStyle& svgStyle = layoutObject->style()->svgStyle();
 
   Color color = svgStyle.floodColor();
@@ -109,7 +109,7 @@
 
   FilterEffect* input1 = filterBuilder->getEffectById(
       AtomicString(m_in1->currentValue()->value()));
-  ASSERT(input1);
+  DCHECK(input1);
 
   // Clamp std.dev. to non-negative. (See SVGFEGaussianBlurElement::build)
   float stdDevX = std::max(0.0f, stdDeviationX()->currentValue()->value());
diff --git a/third_party/WebKit/Source/core/svg/SVGFEFloodElement.cpp b/third_party/WebKit/Source/core/svg/SVGFEFloodElement.cpp
index 46ae01a..a31ff67 100644
--- a/third_party/WebKit/Source/core/svg/SVGFEFloodElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGFEFloodElement.cpp
@@ -37,7 +37,7 @@
     FilterEffect* effect,
     const QualifiedName& attrName) {
   LayoutObject* layoutObject = this->layoutObject();
-  ASSERT(layoutObject);
+  DCHECK(layoutObject);
   const ComputedStyle& style = layoutObject->styleRef();
   FEFlood* flood = static_cast<FEFlood*>(effect);
 
@@ -55,7 +55,7 @@
   if (!layoutObject)
     return nullptr;
 
-  ASSERT(layoutObject->style());
+  DCHECK(layoutObject->style());
   const SVGComputedStyle& svgStyle = layoutObject->style()->svgStyle();
 
   Color color = svgStyle.floodColor();
diff --git a/third_party/WebKit/Source/core/svg/SVGFEGaussianBlurElement.cpp b/third_party/WebKit/Source/core/svg/SVGFEGaussianBlurElement.cpp
index eec9e73..d6c4054 100644
--- a/third_party/WebKit/Source/core/svg/SVGFEGaussianBlurElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGFEGaussianBlurElement.cpp
@@ -68,7 +68,7 @@
                                               Filter* filter) {
   FilterEffect* input1 = filterBuilder->getEffectById(
       AtomicString(m_in1->currentValue()->value()));
-  ASSERT(input1);
+  DCHECK(input1);
 
   // "A negative value or a value of zero disables the effect of the given
   // filter primitive (i.e., the result is the filter input image)."
diff --git a/third_party/WebKit/Source/core/svg/SVGFEMergeElement.cpp b/third_party/WebKit/Source/core/svg/SVGFEMergeElement.cpp
index 3d6c13d..af2e526 100644
--- a/third_party/WebKit/Source/core/svg/SVGFEMergeElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGFEMergeElement.cpp
@@ -41,7 +41,7 @@
        Traversal<SVGFEMergeNodeElement>::childrenOf(*this)) {
     FilterEffect* mergeEffect = filterBuilder->getEffectById(
         AtomicString(mergeNode.in1()->currentValue()->value()));
-    ASSERT(mergeEffect);
+    DCHECK(mergeEffect);
     mergeInputs.push_back(mergeEffect);
   }
   return effect;
diff --git a/third_party/WebKit/Source/core/svg/SVGFEOffsetElement.cpp b/third_party/WebKit/Source/core/svg/SVGFEOffsetElement.cpp
index 5f0e11c..a1ddf700 100644
--- a/third_party/WebKit/Source/core/svg/SVGFEOffsetElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGFEOffsetElement.cpp
@@ -64,7 +64,7 @@
                                         Filter* filter) {
   FilterEffect* input1 = filterBuilder->getEffectById(
       AtomicString(m_in1->currentValue()->value()));
-  ASSERT(input1);
+  DCHECK(input1);
 
   FilterEffect* effect = FEOffset::create(filter, m_dx->currentValue()->value(),
                                           m_dy->currentValue()->value());
diff --git a/third_party/WebKit/Source/core/svg/SVGFESpecularLightingElement.cpp b/third_party/WebKit/Source/core/svg/SVGFESpecularLightingElement.cpp
index 34897d2..02e7cd8d 100644
--- a/third_party/WebKit/Source/core/svg/SVGFESpecularLightingElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGFESpecularLightingElement.cpp
@@ -74,8 +74,8 @@
 
   if (attrName == SVGNames::lighting_colorAttr) {
     LayoutObject* layoutObject = this->layoutObject();
-    ASSERT(layoutObject);
-    ASSERT(layoutObject->style());
+    DCHECK(layoutObject);
+    DCHECK(layoutObject->style());
     return specularLighting->setLightingColor(
         layoutObject->style()->svgStyle().lightingColor());
   }
@@ -92,9 +92,9 @@
   LightSource* lightSource =
       const_cast<LightSource*>(specularLighting->lightSource());
   SVGFELightElement* lightElement = SVGFELightElement::findLightElement(*this);
-  ASSERT(lightSource);
-  ASSERT(lightElement);
-  ASSERT(effect->getFilter());
+  DCHECK(lightSource);
+  DCHECK(lightElement);
+  DCHECK(effect->getFilter());
 
   if (attrName == SVGNames::azimuthAttr)
     return lightSource->setAzimuth(
@@ -157,13 +157,13 @@
     Filter* filter) {
   FilterEffect* input1 = filterBuilder->getEffectById(
       AtomicString(m_in1->currentValue()->value()));
-  ASSERT(input1);
+  DCHECK(input1);
 
   LayoutObject* layoutObject = this->layoutObject();
   if (!layoutObject)
     return nullptr;
 
-  ASSERT(layoutObject->style());
+  DCHECK(layoutObject->style());
   Color color = layoutObject->style()->svgStyle().lightingColor();
 
   const SVGFELightElement* lightNode =
diff --git a/third_party/WebKit/Source/core/svg/SVGFETileElement.cpp b/third_party/WebKit/Source/core/svg/SVGFETileElement.cpp
index 71d8ae0..d279d20 100644
--- a/third_party/WebKit/Source/core/svg/SVGFETileElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGFETileElement.cpp
@@ -53,7 +53,7 @@
                                       Filter* filter) {
   FilterEffect* input1 = filterBuilder->getEffectById(
       AtomicString(m_in1->currentValue()->value()));
-  ASSERT(input1);
+  DCHECK(input1);
 
   FilterEffect* effect = FETile::create(filter);
   effect->inputEffects().push_back(input1);
diff --git a/third_party/WebKit/Source/core/svg/SVGGeometryElement.cpp b/third_party/WebKit/Source/core/svg/SVGGeometryElement.cpp
index bc36c715..3b700e8 100644
--- a/third_party/WebKit/Source/core/svg/SVGGeometryElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGGeometryElement.cpp
@@ -111,8 +111,8 @@
   path = asPath();
   path.transform(calculateTransform(SVGElement::IncludeMotionTransform));
 
-  ASSERT(layoutObject());
-  ASSERT(layoutObject()->style());
+  DCHECK(layoutObject());
+  DCHECK(layoutObject()->style());
   path.setWindRule(layoutObject()->style()->svgStyle().clipRule());
 }
 
diff --git a/third_party/WebKit/Source/core/svg/SVGInteger.cpp b/third_party/WebKit/Source/core/svg/SVGInteger.cpp
index f52a479..9198392 100644
--- a/third_party/WebKit/Source/core/svg/SVGInteger.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGInteger.cpp
@@ -68,7 +68,7 @@
                                         SVGPropertyBase* to,
                                         SVGPropertyBase* toAtEndOfDuration,
                                         SVGElement*) {
-  ASSERT(animationElement);
+  DCHECK(animationElement);
 
   SVGInteger* fromInteger = toSVGInteger(from);
   SVGInteger* toInteger = toSVGInteger(to);
diff --git a/third_party/WebKit/Source/core/svg/SVGIntegerOptionalInteger.cpp b/third_party/WebKit/Source/core/svg/SVGIntegerOptionalInteger.cpp
index 85ccecc00..f8f7480 100644
--- a/third_party/WebKit/Source/core/svg/SVGIntegerOptionalInteger.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGIntegerOptionalInteger.cpp
@@ -101,7 +101,7 @@
     SVGPropertyBase* to,
     SVGPropertyBase* toAtEndOfDuration,
     SVGElement*) {
-  ASSERT(animationElement);
+  DCHECK(animationElement);
 
   SVGIntegerOptionalInteger* fromInteger = toSVGIntegerOptionalInteger(from);
   SVGIntegerOptionalInteger* toInteger = toSVGIntegerOptionalInteger(to);
diff --git a/third_party/WebKit/Source/core/svg/SVGLength.cpp b/third_party/WebKit/Source/core/svg/SVGLength.cpp
index 17e20c7..35b7843d 100644
--- a/third_party/WebKit/Source/core/svg/SVGLength.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGLength.cpp
@@ -35,7 +35,7 @@
     : m_value(
           CSSPrimitiveValue::create(0, CSSPrimitiveValue::UnitType::UserUnits)),
       m_unitMode(static_cast<unsigned>(mode)) {
-  ASSERT(unitMode() == mode);
+  DCHECK_EQ(unitMode(), mode);
 }
 
 SVGLength::SVGLength(const SVGLength& o)
@@ -99,7 +99,7 @@
 }
 
 void SVGLength::setUnitType(CSSPrimitiveValue::UnitType type) {
-  ASSERT(isSupportedCSSUnitType(type));
+  DCHECK(isSupportedCSSUnitType(type));
   m_value = CSSPrimitiveValue::create(m_value->getFloatValue(), type);
 }
 
@@ -166,7 +166,7 @@
 
 void SVGLength::convertToSpecifiedUnits(CSSPrimitiveValue::UnitType type,
                                         const SVGLengthContext& context) {
-  ASSERT(isSupportedCSSUnitType(type));
+  DCHECK(isSupportedCSSUnitType(type));
 
   float valueInUserUnits = value(context);
   m_value = CSSPrimitiveValue::create(
@@ -248,8 +248,8 @@
       toLength->value(lengthContext),
       toAtEndOfDurationLength->value(lengthContext), animatedNumber);
 
-  ASSERT(unitMode() == lengthModeForAnimatedLengthAttribute(
-                           animationElement->attributeName()));
+  DCHECK_EQ(unitMode(), lengthModeForAnimatedLengthAttribute(
+                            animationElement->attributeName()));
 
   // TODO(shanmuga.m): Construct a calc() expression if the units fall in
   // different categories.
diff --git a/third_party/WebKit/Source/core/svg/SVGLengthContext.cpp b/third_party/WebKit/Source/core/svg/SVGLengthContext.cpp
index 717604b..351b429 100644
--- a/third_party/WebKit/Source/core/svg/SVGLengthContext.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGLengthContext.cpp
@@ -245,7 +245,7 @@
 float SVGLengthContext::valueForLength(const Length& length,
                                        float zoom,
                                        float dimension) {
-  ASSERT(zoom != 0);
+  DCHECK_NE(zoom, 0);
   // isIntrinsic can occur for 'width' and 'height', but has no
   // real meaning for svg.
   if (length.isIntrinsic())
diff --git a/third_party/WebKit/Source/core/svg/SVGLengthList.cpp b/third_party/WebKit/Source/core/svg/SVGLengthList.cpp
index 238b63c1..d0f9759 100644
--- a/third_party/WebKit/Source/core/svg/SVGLengthList.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGLengthList.cpp
@@ -132,8 +132,8 @@
       toSVGLengthList(toAtEndOfDurationValue);
 
   SVGLengthContext lengthContext(contextElement);
-  ASSERT(m_mode == SVGLength::lengthModeForAnimatedLengthAttribute(
-                       animationElement->attributeName()));
+  DCHECK_EQ(m_mode, SVGLength::lengthModeForAnimatedLengthAttribute(
+                        animationElement->attributeName()));
 
   size_t fromLengthListSize = fromList->length();
   size_t toLengthListSize = toList->length();
diff --git a/third_party/WebKit/Source/core/svg/SVGLengthTearOff.cpp b/third_party/WebKit/Source/core/svg/SVGLengthTearOff.cpp
index 1072cfac..d2aa191f 100644
--- a/third_party/WebKit/Source/core/svg/SVGLengthTearOff.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGLengthTearOff.cpp
@@ -60,7 +60,7 @@
 }
 
 inline CSSPrimitiveValue::UnitType toCSSUnitType(unsigned short type) {
-  ASSERT(isValidLengthUnit(type));
+  DCHECK(isValidLengthUnit(type));
   if (type == SVGLengthTearOff::kSvgLengthtypeNumber)
     return CSSPrimitiveValue::UnitType::UserUnits;
   return static_cast<CSSPrimitiveValue::UnitType>(type);
diff --git a/third_party/WebKit/Source/core/svg/SVGMPathElement.cpp b/third_party/WebKit/Source/core/svg/SVGMPathElement.cpp
index 7de98e4f..4ac8a987 100644
--- a/third_party/WebKit/Source/core/svg/SVGMPathElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGMPathElement.cpp
@@ -29,7 +29,7 @@
 
 inline SVGMPathElement::SVGMPathElement(Document& document)
     : SVGElement(SVGNames::mpathTag, document), SVGURIReference(this) {
-  ASSERT(RuntimeEnabledFeatures::smilEnabled());
+  DCHECK(RuntimeEnabledFeatures::smilEnabled());
 }
 
 DEFINE_TRACE(SVGMPathElement) {
diff --git a/third_party/WebKit/Source/core/svg/SVGMarkerElement.cpp b/third_party/WebKit/Source/core/svg/SVGMarkerElement.cpp
index 1925c5d..72aaaaad 100644
--- a/third_party/WebKit/Source/core/svg/SVGMarkerElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGMarkerElement.cpp
@@ -142,7 +142,7 @@
 }
 
 void SVGMarkerElement::setOrientToAngle(SVGAngleTearOff* angle) {
-  ASSERT(angle);
+  DCHECK(angle);
   SVGAngle* target = angle->target();
   setAttribute(SVGNames::orientAttr, AtomicString(target->valueAsString()));
 }
diff --git a/third_party/WebKit/Source/core/svg/SVGMatrixTearOff.cpp b/third_party/WebKit/Source/core/svg/SVGMatrixTearOff.cpp
index 781a02e..cf64bcba 100644
--- a/third_party/WebKit/Source/core/svg/SVGMatrixTearOff.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGMatrixTearOff.cpp
@@ -42,7 +42,7 @@
 
 SVGMatrixTearOff::SVGMatrixTearOff(SVGTransformTearOff* transform)
     : m_contextTransform(this, transform) {
-  ASSERT(transform);
+  DCHECK(transform);
 }
 
 DEFINE_TRACE(SVGMatrixTearOff) {
diff --git a/third_party/WebKit/Source/core/svg/SVGNumber.cpp b/third_party/WebKit/Source/core/svg/SVGNumber.cpp
index 49a165cb..18b0fbdb 100644
--- a/third_party/WebKit/Source/core/svg/SVGNumber.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGNumber.cpp
@@ -84,7 +84,7 @@
                                        SVGPropertyBase* to,
                                        SVGPropertyBase* toAtEndOfDuration,
                                        SVGElement*) {
-  ASSERT(animationElement);
+  DCHECK(animationElement);
 
   SVGNumber* fromNumber = toSVGNumber(from);
   SVGNumber* toNumber = toSVGNumber(to);
diff --git a/third_party/WebKit/Source/core/svg/SVGNumberOptionalNumber.cpp b/third_party/WebKit/Source/core/svg/SVGNumberOptionalNumber.cpp
index 71072d7..7b2e5113 100644
--- a/third_party/WebKit/Source/core/svg/SVGNumberOptionalNumber.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGNumberOptionalNumber.cpp
@@ -101,7 +101,7 @@
     SVGPropertyBase* to,
     SVGPropertyBase* toAtEndOfDuration,
     SVGElement*) {
-  ASSERT(animationElement);
+  DCHECK(animationElement);
 
   SVGNumberOptionalNumber* fromNumber = toSVGNumberOptionalNumber(from);
   SVGNumberOptionalNumber* toNumber = toSVGNumberOptionalNumber(to);
diff --git a/third_party/WebKit/Source/core/svg/SVGParsingError.cpp b/third_party/WebKit/Source/core/svg/SVGParsingError.cpp
index 2ef3c5b..f62e7fd 100644
--- a/third_party/WebKit/Source/core/svg/SVGParsingError.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGParsingError.cpp
@@ -83,15 +83,15 @@
   } else {
     // Emit a string on the form: '"[...]<before><after>[...]"'
     unsigned locus = error.locus();
-    ASSERT(locus <= value.length());
+    DCHECK_LE(locus, value.length());
 
     // Amount of context to show before/after the error.
     const unsigned kContext = 16;
 
     unsigned contextStart = std::max(locus, kContext) - kContext;
     unsigned contextEnd = std::min(locus + kContext, value.length());
-    ASSERT(contextStart <= contextEnd);
-    ASSERT(contextEnd <= value.length());
+    DCHECK_LE(contextStart, contextEnd);
+    DCHECK_LE(contextEnd, value.length());
     if (contextStart != 0)
       builder.append(horizontalEllipsisCharacter);
     escapeStringForJSON(
diff --git a/third_party/WebKit/Source/core/svg/SVGParsingError.h b/third_party/WebKit/Source/core/svg/SVGParsingError.h
index b0f4a35..4777d02 100644
--- a/third_party/WebKit/Source/core/svg/SVGParsingError.h
+++ b/third_party/WebKit/Source/core/svg/SVGParsingError.h
@@ -68,7 +68,7 @@
   SVGParsingError(SVGParseStatus status = SVGParseStatus::NoError,
                   size_t locus = 0)
       : m_status(static_cast<unsigned>(status)), m_locus(checkLocus(locus)) {
-    ASSERT(this->status() == status);
+    DCHECK_EQ(this->status(), status);
   }
 
   SVGParseStatus status() const {
diff --git a/third_party/WebKit/Source/core/svg/SVGPath.cpp b/third_party/WebKit/Source/core/svg/SVGPath.cpp
index 187fc29..0c8288c 100644
--- a/third_party/WebKit/Source/core/svg/SVGPath.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGPath.cpp
@@ -77,7 +77,7 @@
 SVGPath::SVGPath() : m_pathValue(CSSPathValue::emptyPathValue()) {}
 
 SVGPath::SVGPath(CSSPathValue* pathValue) : m_pathValue(pathValue) {
-  ASSERT(m_pathValue);
+  DCHECK(m_pathValue);
 }
 
 SVGPath::~SVGPath() {}
@@ -120,7 +120,7 @@
                                      SVGPropertyBase* toValue,
                                      SVGPropertyBase* toAtEndOfDurationValue,
                                      SVGElement*) {
-  ASSERT(animationElement);
+  DCHECK(animationElement);
   bool isToAnimation = animationElement->getAnimationMode() == ToAnimation;
 
   const SVGPath& to = toSVGPath(*toValue);
diff --git a/third_party/WebKit/Source/core/svg/SVGPathBlender.cpp b/third_party/WebKit/Source/core/svg/SVGPathBlender.cpp
index 673ece2..f6994e9 100644
--- a/third_party/WebKit/Source/core/svg/SVGPathBlender.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGPathBlender.cpp
@@ -76,7 +76,7 @@
     float to,
     FloatBlendMode blendMode) {
   if (m_addTypesCount) {
-    ASSERT(m_typesAreEqual);
+    DCHECK(m_typesAreEqual);
     return from + to * m_addTypesCount;
   }
 
@@ -290,9 +290,9 @@
                                SVGPathByteStreamSource* toSource,
                                SVGPathConsumer* consumer)
     : m_fromSource(fromSource), m_toSource(toSource), m_consumer(consumer) {
-  ASSERT(m_fromSource);
-  ASSERT(m_toSource);
-  ASSERT(m_consumer);
+  DCHECK(m_fromSource);
+  DCHECK(m_toSource);
+  DCHECK(m_consumer);
 }
 
 bool SVGPathBlender::addAnimatedPath(unsigned repeatCount) {
diff --git a/third_party/WebKit/Source/core/svg/SVGPathByteStreamBuilder.cpp b/third_party/WebKit/Source/core/svg/SVGPathByteStreamBuilder.cpp
index 9d7f4724..c5cb968 100644
--- a/third_party/WebKit/Source/core/svg/SVGPathByteStreamBuilder.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGPathByteStreamBuilder.cpp
@@ -37,7 +37,7 @@
     ByteType<DataType> data;
     data.value = value;
     size_t typeSize = sizeof(ByteType<DataType>);
-    ASSERT(m_currentOffset + typeSize <= sizeof(m_bytes));
+    DCHECK_LE(m_currentOffset + typeSize, sizeof(m_bytes));
     memcpy(m_bytes + m_currentOffset, data.bytes, typeSize);
     m_currentOffset += typeSize;
   }
diff --git a/third_party/WebKit/Source/core/svg/SVGPathByteStreamSource.cpp b/third_party/WebKit/Source/core/svg/SVGPathByteStreamSource.cpp
index 56b63168..c7b14715 100644
--- a/third_party/WebKit/Source/core/svg/SVGPathByteStreamSource.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGPathByteStreamSource.cpp
@@ -22,7 +22,7 @@
 namespace blink {
 
 PathSegmentData SVGPathByteStreamSource::parseSegment() {
-  ASSERT(hasMoreData());
+  DCHECK(hasMoreData());
   PathSegmentData segment;
   segment.command = static_cast<SVGPathSegType>(readSVGSegmentType());
 
diff --git a/third_party/WebKit/Source/core/svg/SVGPathByteStreamSource.h b/third_party/WebKit/Source/core/svg/SVGPathByteStreamSource.h
index 315e7de..2ca8b29f 100644
--- a/third_party/WebKit/Source/core/svg/SVGPathByteStreamSource.h
+++ b/third_party/WebKit/Source/core/svg/SVGPathByteStreamSource.h
@@ -45,7 +45,7 @@
   DataType readType() {
     ByteType<DataType> data;
     size_t typeSize = sizeof(ByteType<DataType>);
-    ASSERT(m_streamCurrent + typeSize <= m_streamEnd);
+    DCHECK_LE(m_streamCurrent + typeSize, m_streamEnd);
     memcpy(data.bytes, m_streamCurrent, typeSize);
     m_streamCurrent += typeSize;
     return data.value;
diff --git a/third_party/WebKit/Source/core/svg/SVGPathParser.h b/third_party/WebKit/Source/core/svg/SVGPathParser.h
index 7d312e6..ea403e67 100644
--- a/third_party/WebKit/Source/core/svg/SVGPathParser.h
+++ b/third_party/WebKit/Source/core/svg/SVGPathParser.h
@@ -54,7 +54,7 @@
  public:
   SVGPathNormalizer(SVGPathConsumer* consumer)
       : m_consumer(consumer), m_lastCommand(PathSegUnknown) {
-    ASSERT(m_consumer);
+    DCHECK(m_consumer);
   }
 
   void emitSegment(const PathSegmentData&);
diff --git a/third_party/WebKit/Source/core/svg/SVGPathQuery.cpp b/third_party/WebKit/Source/core/svg/SVGPathQuery.cpp
index 17da979..722ad6d 100644
--- a/third_party/WebKit/Source/core/svg/SVGPathQuery.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGPathQuery.cpp
@@ -91,7 +91,7 @@
   bool hasMoreData = source.hasMoreData();
   while (hasMoreData) {
     PathSegmentData segment = source.parseSegment();
-    ASSERT(segment.command != PathSegUnknown);
+    DCHECK_NE(segment.command, PathSegUnknown);
 
     normalizer.emitSegment(segment);
 
diff --git a/third_party/WebKit/Source/core/svg/SVGPathStringBuilder.cpp b/third_party/WebKit/Source/core/svg/SVGPathStringBuilder.cpp
index 488ba6df..2a91b25 100644
--- a/third_party/WebKit/Source/core/svg/SVGPathStringBuilder.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGPathStringBuilder.cpp
@@ -74,8 +74,8 @@
 };
 
 void SVGPathStringBuilder::emitSegment(const PathSegmentData& segment) {
-  ASSERT(segment.command > PathSegUnknown &&
-         segment.command <= PathSegCurveToQuadraticSmoothRel);
+  DCHECK_GT(segment.command, PathSegUnknown);
+  DCHECK_LE(segment.command, PathSegCurveToQuadraticSmoothRel);
   m_stringBuilder.append(pathSegmentCharacter[segment.command]);
 
   switch (segment.command) {
diff --git a/third_party/WebKit/Source/core/svg/SVGPathStringSource.cpp b/third_party/WebKit/Source/core/svg/SVGPathStringSource.cpp
index 3359100..52baadc 100644
--- a/third_party/WebKit/Source/core/svg/SVGPathStringSource.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGPathStringSource.cpp
@@ -29,7 +29,7 @@
     : m_is8BitSource(string.is8Bit()),
       m_previousCommand(PathSegUnknown),
       m_string(string) {
-  ASSERT(!string.isNull());
+  DCHECK(!string.isNull());
 
   if (m_is8BitSource) {
     m_current.m_character8 = string.characters8();
@@ -159,7 +159,7 @@
 }
 
 PathSegmentData SVGPathStringSource::parseSegment() {
-  ASSERT(hasMoreData());
+  DCHECK(hasMoreData());
   PathSegmentData segment;
   unsigned lookahead =
       m_is8BitSource ? *m_current.m_character8 : *m_current.m_character16;
@@ -177,7 +177,7 @@
       m_current.m_character16++;
   } else if (command == PathSegUnknown) {
     // Possibly an implicit command.
-    ASSERT(m_previousCommand != PathSegUnknown);
+    DCHECK_NE(m_previousCommand, PathSegUnknown);
     if (!maybeImplicitCommand(lookahead, m_previousCommand, command)) {
       setErrorMark(SVGParseStatus::ExpectedPathCommand);
       return segment;
@@ -192,7 +192,7 @@
 
   segment.command = m_previousCommand = command;
 
-  ASSERT(m_error.status() == SVGParseStatus::NoError);
+  DCHECK_EQ(m_error.status(), SVGParseStatus::NoError);
 
   switch (segment.command) {
     case PathSegCurveToCubicRel:
diff --git a/third_party/WebKit/Source/core/svg/SVGPolyElement.cpp b/third_party/WebKit/Source/core/svg/SVGPolyElement.cpp
index 1e36c59..2c03dfd 100644
--- a/third_party/WebKit/Source/core/svg/SVGPolyElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGPolyElement.cpp
@@ -48,7 +48,7 @@
 
   SVGPointList::ConstIterator it = pointsValue->begin();
   SVGPointList::ConstIterator itEnd = pointsValue->end();
-  ASSERT(it != itEnd);
+  DCHECK(it != itEnd);
   path.moveTo(it->value());
   ++it;
 
diff --git a/third_party/WebKit/Source/core/svg/SVGPreserveAspectRatio.cpp b/third_party/WebKit/Source/core/svg/SVGPreserveAspectRatio.cpp
index 9ee12c9..c9bf31d 100644
--- a/third_party/WebKit/Source/core/svg/SVGPreserveAspectRatio.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGPreserveAspectRatio.cpp
@@ -291,10 +291,10 @@
                                                float logicalHeight,
                                                float physicalWidth,
                                                float physicalHeight) const {
-  ASSERT(logicalWidth);
-  ASSERT(logicalHeight);
-  ASSERT(physicalWidth);
-  ASSERT(physicalHeight);
+  DCHECK(logicalWidth);
+  DCHECK(logicalHeight);
+  DCHECK(physicalWidth);
+  DCHECK(physicalHeight);
 
   AffineTransform transform;
   if (m_align == kSvgPreserveaspectratioUnknown)
@@ -441,7 +441,7 @@
     SVGPropertyBase* toValue,
     SVGPropertyBase*,
     SVGElement*) {
-  ASSERT(animationElement);
+  DCHECK(animationElement);
 
   bool useToValue;
   animationElement->animateDiscreteType(percentage, false, true, useToValue);
diff --git a/third_party/WebKit/Source/core/svg/SVGRect.cpp b/third_party/WebKit/Source/core/svg/SVGRect.cpp
index 3bec3fdf..4e559309 100644
--- a/third_party/WebKit/Source/core/svg/SVGRect.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGRect.cpp
@@ -100,7 +100,7 @@
                                      SVGPropertyBase* toValue,
                                      SVGPropertyBase* toAtEndOfDurationValue,
                                      SVGElement*) {
-  ASSERT(animationElement);
+  DCHECK(animationElement);
   SVGRect* fromRect = animationElement->getAnimationMode() == ToAnimation
                           ? this
                           : toSVGRect(fromValue);
diff --git a/third_party/WebKit/Source/core/svg/SVGRectElement.cpp b/third_party/WebKit/Source/core/svg/SVGRectElement.cpp
index 0d7360d..9d8f9b83 100644
--- a/third_party/WebKit/Source/core/svg/SVGRectElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGRectElement.cpp
@@ -77,7 +77,7 @@
   Path path;
 
   SVGLengthContext lengthContext(this);
-  ASSERT(layoutObject());
+  DCHECK(layoutObject());
   const ComputedStyle& style = layoutObject()->styleRef();
   const SVGComputedStyle& svgStyle = style.svgStyle();
 
diff --git a/third_party/WebKit/Source/core/svg/SVGSVGElement.cpp b/third_party/WebKit/Source/core/svg/SVGSVGElement.cpp
index 0e57182..b1c0f78 100644
--- a/third_party/WebKit/Source/core/svg/SVGSVGElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGSVGElement.cpp
@@ -107,7 +107,7 @@
 }
 
 void SVGSVGElement::setCurrentScale(float scale) {
-  ASSERT(std::isfinite(scale));
+  DCHECK(std::isfinite(scale));
   if (!isConnected() || !isOutermostSVGSVGElement())
     return;
 
@@ -122,7 +122,7 @@
   }
 
   void commitChange() override {
-    ASSERT(contextElement());
+    DCHECK(contextElement());
     toSVGSVGElement(contextElement())->updateUserTransform();
   }
 
@@ -322,7 +322,7 @@
     const FloatRect& rect,
     GeometryMatchingMode mode) const {
   LayoutObject* layoutObject = element.layoutObject();
-  ASSERT(!layoutObject || layoutObject->style());
+  DCHECK(!layoutObject || layoutObject->style());
   if (!layoutObject ||
       layoutObject->style()->pointerEvents() == EPointerEvents::kNone)
     return false;
@@ -397,7 +397,7 @@
 
 bool SVGSVGElement::checkIntersection(SVGElement* element,
                                       SVGRectTearOff* rect) const {
-  ASSERT(element);
+  DCHECK(element);
   document().updateStyleAndLayoutIgnorePendingStylesheets();
 
   return checkIntersectionOrEnclosure(*element, rect->target()->value(),
@@ -406,7 +406,7 @@
 
 bool SVGSVGElement::checkEnclosure(SVGElement* element,
                                    SVGRectTearOff* rect) const {
-  ASSERT(element);
+  DCHECK(element);
   document().updateStyleAndLayoutIgnorePendingStylesheets();
 
   return checkIntersectionOrEnclosure(*element, rect->target()->value(),
@@ -538,7 +538,7 @@
 }
 
 void SVGSVGElement::setCurrentTime(float seconds) {
-  ASSERT(std::isfinite(seconds));
+  DCHECK(std::isfinite(seconds));
   seconds = max(seconds, 0.0f);
   m_timeContainer->setElapsed(seconds);
 }
diff --git a/third_party/WebKit/Source/core/svg/SVGStaticStringList.cpp b/third_party/WebKit/Source/core/svg/SVGStaticStringList.cpp
index 8cbf62e..6848a1ed 100644
--- a/third_party/WebKit/Source/core/svg/SVGStaticStringList.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGStaticStringList.cpp
@@ -39,7 +39,7 @@
                                          const QualifiedName& attributeName)
     : SVGAnimatedPropertyBase(AnimatedUnknown, contextElement, attributeName),
       m_value(SVGStringList::create()) {
-  ASSERT(contextElement);
+  DCHECK(contextElement);
 }
 
 SVGStaticStringList::~SVGStaticStringList() {}
diff --git a/third_party/WebKit/Source/core/svg/SVGString.cpp b/third_party/WebKit/Source/core/svg/SVGString.cpp
index 0370d90..a134ea83 100644
--- a/third_party/WebKit/Source/core/svg/SVGString.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGString.cpp
@@ -34,7 +34,7 @@
                                        SVGPropertyBase* to,
                                        SVGPropertyBase*,
                                        SVGElement*) {
-  ASSERT(animationElement);
+  DCHECK(animationElement);
 
   String fromString = toSVGString(from)->m_value;
   String toString = toSVGString(to)->m_value;
diff --git a/third_party/WebKit/Source/core/svg/SVGTests.cpp b/third_party/WebKit/Source/core/svg/SVGTests.cpp
index 77b882b..92ff15e0 100644
--- a/third_party/WebKit/Source/core/svg/SVGTests.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGTests.cpp
@@ -37,7 +37,7 @@
       m_systemLanguage(
           SVGStaticStringList::create(contextElement,
                                       SVGNames::systemLanguageAttr)) {
-  ASSERT(contextElement);
+  DCHECK(contextElement);
 
   contextElement->addToPropertyMap(m_requiredFeatures);
   contextElement->addToPropertyMap(m_requiredExtensions);
diff --git a/third_party/WebKit/Source/core/svg/SVGTextContentElement.cpp b/third_party/WebKit/Source/core/svg/SVGTextContentElement.cpp
index aca2e19..a34a32e6 100644
--- a/third_party/WebKit/Source/core/svg/SVGTextContentElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGTextContentElement.cpp
@@ -212,7 +212,7 @@
   if (nchars > numberOfChars - charnum)
     nchars = numberOfChars - charnum;
 
-  ASSERT(document().frame());
+  DCHECK(document().frame());
 
   // Find selection start
   VisiblePosition start = VisiblePosition::firstPositionInNode(
@@ -296,7 +296,7 @@
     return nullptr;
 
   SVGElement* element = toSVGElement(lineLayoutItem.node());
-  ASSERT(element);
+  DCHECK(element);
   return isSVGTextContentElement(*element) ? toSVGTextContentElement(element)
                                            : 0;
 }
diff --git a/third_party/WebKit/Source/core/svg/SVGTransform.cpp b/third_party/WebKit/Source/core/svg/SVGTransform.cpp
index c0feae20..6d44f64 100644
--- a/third_party/WebKit/Source/core/svg/SVGTransform.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGTransform.cpp
@@ -201,7 +201,7 @@
       arguments[argumentCount++] = m_angle;
       break;
   }
-  ASSERT(argumentCount <= WTF_ARRAY_LENGTH(arguments));
+  DCHECK_LE(argumentCount, WTF_ARRAY_LENGTH(arguments));
 
   StringBuilder builder;
   builder.append(transformTypePrefixForParsing(m_transformType));
diff --git a/third_party/WebKit/Source/core/svg/SVGTransformDistance.cpp b/third_party/WebKit/Source/core/svg/SVGTransformDistance.cpp
index b76ca94..c78ccfd 100644
--- a/third_party/WebKit/Source/core/svg/SVGTransformDistance.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGTransformDistance.cpp
@@ -43,7 +43,7 @@
                                            SVGTransform* toSVGTransform)
     : m_angle(0), m_cx(0), m_cy(0) {
   m_transformType = fromSVGTransform->transformType();
-  ASSERT(m_transformType == toSVGTransform->transformType());
+  DCHECK_EQ(m_transformType, toSVGTransform->transformType());
 
   switch (m_transformType) {
     case kSvgTransformMatrix:
@@ -115,7 +115,7 @@
 SVGTransform* SVGTransformDistance::addSVGTransforms(SVGTransform* first,
                                                      SVGTransform* second,
                                                      unsigned repeatCount) {
-  ASSERT(first->transformType() == second->transformType());
+  DCHECK_EQ(first->transformType(), second->transformType());
 
   SVGTransform* transform = SVGTransform::create();
 
diff --git a/third_party/WebKit/Source/core/svg/SVGTransformList.cpp b/third_party/WebKit/Source/core/svg/SVGTransformList.cpp
index 95b16887..c374c7c4 100644
--- a/third_party/WebKit/Source/core/svg/SVGTransformList.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGTransformList.cpp
@@ -222,8 +222,8 @@
   const size_t required = requiredValuesForType[type];
   const size_t optional = optionalValuesForType[type];
   const size_t requiredWithOptional = required + optional;
-  ASSERT(requiredWithOptional <= kMaxTransformArguments);
-  ASSERT(arguments.isEmpty());
+  DCHECK_LE(requiredWithOptional, kMaxTransformArguments);
+  DCHECK(arguments.isEmpty());
 
   bool trailingDelimiter = false;
 
@@ -321,7 +321,7 @@
         parseTransformArgumentsForType(transformType, ptr, end, arguments);
     if (status != SVGParseStatus::NoError)
       return SVGParsingError(status, ptr - start);
-    ASSERT(arguments.size() >= requiredValuesForType[transformType]);
+    DCHECK_GE(arguments.size(), requiredValuesForType[transformType]);
 
     if (!skipOptionalSVGSpaces(ptr, end) || *ptr != ')')
       return SVGParsingError(SVGParseStatus::ExpectedEndOfArguments,
@@ -401,7 +401,7 @@
 
 SVGPropertyBase* SVGTransformList::cloneForAnimation(
     const String& value) const {
-  ASSERT(RuntimeEnabledFeatures::webAnimationsSVGEnabled());
+  DCHECK(RuntimeEnabledFeatures::webAnimationsSVGEnabled());
   return SVGListPropertyHelper::cloneForAnimation(value);
 }
 
@@ -438,11 +438,11 @@
   if (length() != otherList->length())
     return;
 
-  ASSERT(length() == 1);
+  DCHECK_EQ(length(), 1u);
   SVGTransform* fromTransform = at(0);
   SVGTransform* toTransform = otherList->at(0);
 
-  ASSERT(fromTransform->transformType() == toTransform->transformType());
+  DCHECK_EQ(fromTransform->transformType(), toTransform->transformType());
   initialize(
       SVGTransformDistance::addSVGTransforms(fromTransform, toTransform));
 }
@@ -455,7 +455,7 @@
     SVGPropertyBase* toValue,
     SVGPropertyBase* toAtEndOfDurationValue,
     SVGElement* contextElement) {
-  ASSERT(animationElement);
+  DCHECK(animationElement);
   bool isToAnimation = animationElement->getAnimationMode() == ToAnimation;
 
   // Spec: To animations provide specific functionality to get a smooth change
@@ -519,7 +519,7 @@
   if (isEmpty() || length() != toList->length())
     return -1;
 
-  ASSERT(length() == 1);
+  DCHECK_EQ(length(), 1u);
   if (at(0)->transformType() == toList->at(0)->transformType())
     return -1;
 
diff --git a/third_party/WebKit/Source/core/svg/SVGURIReference.cpp b/third_party/WebKit/Source/core/svg/SVGURIReference.cpp
index 2e30061..eba5d3b 100644
--- a/third_party/WebKit/Source/core/svg/SVGURIReference.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGURIReference.cpp
@@ -47,7 +47,7 @@
 
 SVGURIReference::SVGURIReference(SVGElement* element)
     : m_href(SVGAnimatedHref::create(element)) {
-  ASSERT(element);
+  DCHECK(element);
   m_href->addToPropertyMap(element);
 }
 
diff --git a/third_party/WebKit/Source/core/svg/SVGUseElement.cpp b/third_party/WebKit/Source/core/svg/SVGUseElement.cpp
index a4ff25cb..95b2c3f 100644
--- a/third_party/WebKit/Source/core/svg/SVGUseElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGUseElement.cpp
@@ -69,7 +69,7 @@
       m_elementIdentifierIsLocal(true),
       m_haveFiredLoadEvent(false),
       m_needsShadowTreeRecreation(false) {
-  ASSERT(hasCustomStyleCallbacks());
+  DCHECK(hasCustomStyleCallbacks());
 
   addToPropertyMap(m_x);
   addToPropertyMap(m_y);
@@ -118,8 +118,10 @@
   SVGGraphicsElement::insertedInto(rootParent);
   if (!rootParent->isConnected())
     return InsertionDone;
-  ASSERT(!m_targetElementInstance || !isWellFormedDocument(&document()));
-  ASSERT(!hasPendingResources() || !isWellFormedDocument(&document()));
+#if DCHECK_IS_ON()
+  DCHECK(!m_targetElementInstance || !isWellFormedDocument(&document()));
+  DCHECK(!hasPendingResources() || !isWellFormedDocument(&document()));
+#endif
   invalidateShadowTree();
   return InsertionDone;
 }
@@ -225,7 +227,7 @@
 
     updateRelativeLengthsInformation();
     if (m_targetElementInstance) {
-      ASSERT(m_targetElementInstance->correspondingElement());
+      DCHECK(m_targetElementInstance->correspondingElement());
       transferUseWidthAndHeightIfNeeded(
           *this, *m_targetElementInstance,
           *m_targetElementInstance->correspondingElement());
@@ -323,7 +325,7 @@
     invalidateDependentShadowTrees();
   }
 
-  ASSERT(!m_needsShadowTreeRecreation);
+  DCHECK(!m_needsShadowTreeRecreation);
 }
 
 String SVGUseElement::title() const {
@@ -348,11 +350,11 @@
   auto targetIterator = targetRange.begin();
   for (SVGElement& instance :
        Traversal<SVGElement>::inclusiveDescendantsOf(instanceRoot)) {
-    ASSERT(!instance.correspondingElement());
+    DCHECK(!instance.correspondingElement());
     instance.setCorrespondingElement(&*targetIterator);
     ++targetIterator;
   }
-  ASSERT(!(targetIterator != targetRange.end()));
+  DCHECK(!(targetIterator != targetRange.end()));
 }
 
 // We don't walk the target tree element-by-element, and clone each element,
@@ -362,7 +364,7 @@
 // them.  For instance: <use> on <g> containing <foreignObject> (indirect
 // case).
 static inline void removeDisallowedElementsFromSubtree(SVGElement& subtree) {
-  ASSERT(!subtree.isConnected());
+  DCHECK(!subtree.isConnected());
   Element* element = ElementTraversal::firstWithin(subtree);
   while (element) {
     if (isDisallowedElement(*element)) {
@@ -389,7 +391,7 @@
 
 Element* SVGUseElement::createInstanceTree(SVGElement& targetRoot) const {
   Element* instanceRoot = targetRoot.cloneElementWithChildren();
-  ASSERT(instanceRoot->isSVGElement());
+  DCHECK(instanceRoot->isSVGElement());
   if (isSVGSymbolElement(targetRoot)) {
     // Spec: The referenced 'symbol' and its contents are deep-cloned into
     // the generated tree, with the exception that the 'symbol' is replaced
@@ -415,8 +417,8 @@
 }
 
 void SVGUseElement::buildShadowAndInstanceTree(SVGElement& target) {
-  ASSERT(!m_targetElementInstance);
-  ASSERT(!m_needsShadowTreeRecreation);
+  DCHECK(!m_targetElementInstance);
+  DCHECK(!m_needsShadowTreeRecreation);
 
   // <use> creates a "user agent" shadow root. Do not build the shadow/instance
   // tree for <use> elements living in a user agent shadow tree because they
@@ -442,9 +444,9 @@
     return;
 
   // Assure shadow tree building was successful.
-  ASSERT(m_targetElementInstance);
-  ASSERT(m_targetElementInstance->correspondingUseElement() == this);
-  ASSERT(m_targetElementInstance->correspondingElement() == &target);
+  DCHECK(m_targetElementInstance);
+  DCHECK_EQ(m_targetElementInstance->correspondingUseElement(), this);
+  DCHECK_EQ(m_targetElementInstance->correspondingElement(), &target);
 
   // Expand all <use> elements in the shadow tree.
   // Expand means: replace the actual <use> element by what it references.
@@ -458,7 +460,7 @@
   // reset |m_targetElementInstance|.
   m_targetElementInstance =
       toSVGElementOrDie(shadowTreeRootElement->firstChild());
-  ASSERT(m_targetElementInstance->parentNode() == shadowTreeRootElement);
+  DCHECK_EQ(m_targetElementInstance->parentNode(), shadowTreeRootElement);
 
   // Update relative length information.
   updateRelativeLengthsInformation();
@@ -476,7 +478,7 @@
 }
 
 void SVGUseElement::toClipPath(Path& path) const {
-  ASSERT(path.isEmpty());
+  DCHECK(path.isEmpty());
 
   const SVGGraphicsElement* element = visibleTargetGraphicsElementForClipping();
 
@@ -586,7 +588,7 @@
   ShadowRoot* shadowRoot = userAgentShadowRoot();
   for (SVGUseElement* use = Traversal<SVGUseElement>::firstWithin(*shadowRoot);
        use;) {
-    ASSERT(!use->resourceIsStillLoading());
+    DCHECK(!use->resourceIsStillLoading());
 
     SVGUseElement& originalUse = toSVGUseElement(*use->correspondingElement());
     SVGElement* target = nullptr;
@@ -595,7 +597,7 @@
 
     if (target && isDisallowedElement(*target))
       return false;
-    // Don't ASSERT(target) here, it may be "pending", too.
+    // Don't DCHECK(target) here, it may be "pending", too.
     // Setup sub-shadow tree root node
     SVGGElement* cloneParent = SVGGElement::create(originalUse.document());
     // Transfer all data (attributes, etc.) from <use> to the new <g> element.
@@ -636,7 +638,7 @@
   instances.appendRange(rawInstances.begin(), rawInstances.end());
   for (auto& instance : instances) {
     if (SVGUseElement* element = instance->correspondingUseElement()) {
-      ASSERT(element->isConnected());
+      DCHECK(element->isConnected());
       element->invalidateShadowTree();
     }
   }
@@ -678,12 +680,13 @@
 }
 
 void SVGUseElement::dispatchPendingEvent() {
-  ASSERT(isStructurallyExternal() && m_haveFiredLoadEvent);
+  DCHECK(isStructurallyExternal());
+  DCHECK(m_haveFiredLoadEvent);
   dispatchEvent(Event::create(EventTypeNames::load));
 }
 
 void SVGUseElement::notifyFinished(Resource* resource) {
-  ASSERT(m_resource == resource);
+  DCHECK_EQ(m_resource, resource);
   if (!isConnected())
     return;
 
@@ -695,7 +698,7 @@
       return;
     if (!isStructurallyExternal())
       return;
-    ASSERT(!m_haveFiredLoadEvent);
+    DCHECK(!m_haveFiredLoadEvent);
     m_haveFiredLoadEvent = true;
     TaskRunnerHelper::get(TaskType::DOMManipulation, &document())
         ->postTask(BLINK_FROM_HERE,
diff --git a/third_party/WebKit/Source/core/svg/animation/SMILTimeContainer.cpp b/third_party/WebKit/Source/core/svg/animation/SMILTimeContainer.cpp
index ca9f7001..020c2f26 100644
--- a/third_party/WebKit/Source/core/svg/animation/SMILTimeContainer.cpp
+++ b/third_party/WebKit/Source/core/svg/animation/SMILTimeContainer.cpp
@@ -61,9 +61,9 @@
 SMILTimeContainer::~SMILTimeContainer() {
   cancelAnimationFrame();
   cancelAnimationPolicyTimer();
-  ASSERT(!m_wakeupTimer.isActive());
+  DCHECK(!m_wakeupTimer.isActive());
 #if DCHECK_IS_ON()
-  ASSERT(!m_preventScheduledAnimationsChanges);
+  DCHECK(!m_preventScheduledAnimationsChanges);
 #endif
 }
 
@@ -75,7 +75,7 @@
   DCHECK(animation->hasValidTarget());
 
 #if DCHECK_IS_ON()
-  ASSERT(!m_preventScheduledAnimationsChanges);
+  DCHECK(!m_preventScheduledAnimationsChanges);
 #endif
 
   ElementAttributePair key(target, attributeName);
@@ -83,7 +83,7 @@
       m_scheduledAnimations.insert(key, nullptr).storedValue->value;
   if (!scheduled)
     scheduled = new AnimationsLinkedHashSet;
-  ASSERT(!scheduled->contains(animation));
+  DCHECK(!scheduled->contains(animation));
   scheduled->insert(animation);
 
   SMILTime nextFireTime = animation->nextProgressTime();
@@ -94,19 +94,19 @@
 void SMILTimeContainer::unschedule(SVGSMILElement* animation,
                                    SVGElement* target,
                                    const QualifiedName& attributeName) {
-  ASSERT(animation->timeContainer() == this);
+  DCHECK_EQ(animation->timeContainer(), this);
 
 #if DCHECK_IS_ON()
-  ASSERT(!m_preventScheduledAnimationsChanges);
+  DCHECK(!m_preventScheduledAnimationsChanges);
 #endif
 
   ElementAttributePair key(target, attributeName);
   GroupedAnimationsMap::iterator it = m_scheduledAnimations.find(key);
-  ASSERT(it != m_scheduledAnimations.end());
+  DCHECK_NE(it, m_scheduledAnimations.end());
   AnimationsLinkedHashSet* scheduled = it->value.get();
-  ASSERT(scheduled);
+  DCHECK(scheduled);
   AnimationsLinkedHashSet::iterator itAnimation = scheduled->find(animation);
-  ASSERT(itAnimation != scheduled->end());
+  DCHECK(itAnimation != scheduled->end());
   scheduled->erase(itAnimation);
 
   if (scheduled->isEmpty())
@@ -162,7 +162,7 @@
 }
 
 void SMILTimeContainer::start() {
-  RELEASE_ASSERT(!isStarted());
+  CHECK(!isStarted());
 
   if (!document().isActive())
     return;
@@ -271,17 +271,17 @@
 void SMILTimeContainer::scheduleWakeUp(
     double delayTime,
     FrameSchedulingState frameSchedulingState) {
-  ASSERT(frameSchedulingState == SynchronizeAnimations ||
+  DCHECK(frameSchedulingState == SynchronizeAnimations ||
          frameSchedulingState == FutureAnimationFrame);
   m_wakeupTimer.startOneShot(delayTime, BLINK_FROM_HERE);
   m_frameSchedulingState = frameSchedulingState;
 }
 
 void SMILTimeContainer::wakeupTimerFired(TimerBase*) {
-  ASSERT(m_frameSchedulingState == SynchronizeAnimations ||
+  DCHECK(m_frameSchedulingState == SynchronizeAnimations ||
          m_frameSchedulingState == FutureAnimationFrame);
   if (m_frameSchedulingState == FutureAnimationFrame) {
-    ASSERT(isTimelineRunning());
+    DCHECK(isTimelineRunning());
     m_frameSchedulingState = Idle;
     serviceOnNextFrame();
   } else {
@@ -419,7 +419,7 @@
 }
 
 SMILTime SMILTimeContainer::updateAnimations(double elapsed, bool seekToTime) {
-  ASSERT(document().isActive());
+  DCHECK(document().isActive());
   SMILTime earliestFireTime = SMILTime::unresolved();
 
 #if DCHECK_IS_ON()
diff --git a/third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp b/third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp
index 4c001e3a..b9109126a 100644
--- a/third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp
+++ b/third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp
@@ -313,7 +313,7 @@
     return InsertionDone;
 
   m_timeContainer = owner->timeContainer();
-  ASSERT(m_timeContainer);
+  DCHECK(m_timeContainer);
   m_timeContainer->setDocumentOrderIndexesDirty();
 
   // "If no attribute is present, the default begin value (an offset-value of 0)
@@ -755,7 +755,7 @@
   if (currentTime > minimumTime)
     return currentTime;
 
-  ASSERT(currentTime == minimumTime);
+  DCHECK(currentTime == minimumTime);
   if (equalsMinimumOK)
     return currentTime;
 
@@ -850,7 +850,7 @@
 
 void SVGSMILElement::resolveFirstInterval() {
   SMILInterval firstInterval = resolveInterval(FirstInterval);
-  ASSERT(!firstInterval.begin.isIndefinite());
+  DCHECK(!firstInterval.begin.isIndefinite());
 
   if (!firstInterval.begin.isUnresolved() && firstInterval != m_interval) {
     m_interval = firstInterval;
@@ -866,7 +866,7 @@
 
 bool SVGSMILElement::resolveNextInterval() {
   SMILInterval nextInterval = resolveInterval(NextInterval);
-  ASSERT(!nextInterval.begin.isIndefinite());
+  DCHECK(!nextInterval.begin.isIndefinite());
 
   if (!nextInterval.begin.isUnresolved() &&
       nextInterval.begin != m_interval.begin) {
@@ -896,7 +896,7 @@
       SMILTime oldBegin = m_interval.begin;
       m_interval.end = eventTime;
       m_interval = resolveInterval(NextInterval);
-      ASSERT(!m_interval.begin.isUnresolved());
+      DCHECK(!m_interval.begin.isUnresolved());
       if (m_interval.begin != oldBegin) {
         if (m_activeState == Active && m_interval.begin > eventTime) {
           m_activeState = determineActiveState(eventTime);
@@ -1075,20 +1075,20 @@
 }
 
 bool SVGSMILElement::progress(double elapsed, bool seekToTime) {
-  ASSERT(m_timeContainer);
-  ASSERT(m_isWaitingForFirstInterval || m_interval.begin.isFinite());
+  DCHECK(m_timeContainer);
+  DCHECK(m_isWaitingForFirstInterval || m_interval.begin.isFinite());
 
   if (!m_syncBaseConditionsConnected)
     connectSyncBaseConditions();
 
   if (!m_interval.begin.isFinite()) {
-    ASSERT(m_activeState == Inactive);
+    DCHECK_EQ(m_activeState, Inactive);
     m_nextProgressTime = SMILTime::unresolved();
     return false;
   }
 
   if (elapsed < m_interval.begin) {
-    ASSERT(m_activeState != Active);
+    DCHECK_NE(m_activeState, Active);
     m_nextProgressTime = m_interval.begin;
     // If the animation is frozen, it's still contributing.
     return m_activeState == Frozen;
@@ -1161,7 +1161,7 @@
 }
 
 void SVGSMILElement::notifyDependentsIntervalChanged() {
-  ASSERT(m_interval.begin.isFinite());
+  DCHECK(m_interval.begin.isFinite());
   // |loopBreaker| is used to avoid infinite recursions which may be caused by:
   // |notifyDependentsIntervalChanged| -> |createInstanceTimesFromSyncbase| ->
   // |add{Begin,End}Time| -> |{begin,end}TimeChanged| ->
@@ -1186,7 +1186,7 @@
   for (Condition* condition : m_conditions) {
     if (condition->getType() == Condition::Syncbase &&
         condition->syncBaseEquals(syncBase)) {
-      ASSERT(condition->name() == "begin" || condition->name() == "end");
+      DCHECK(condition->name() == "begin" || condition->name() == "end");
       // No nested time containers in SVG, no need for crazy time space
       // conversions. Phew!
       SMILTime time = 0;
diff --git a/third_party/WebKit/Source/core/svg/graphics/SVGImage.cpp b/third_party/WebKit/Source/core/svg/graphics/SVGImage.cpp
index e1e46b6..ab03d70d 100644
--- a/third_party/WebKit/Source/core/svg/graphics/SVGImage.cpp
+++ b/third_party/WebKit/Source/core/svg/graphics/SVGImage.cpp
@@ -79,11 +79,11 @@
   }
 
   // Verify that page teardown destroyed the Chrome
-  ASSERT(!m_chromeClient || !m_chromeClient->image());
+  DCHECK(!m_chromeClient || !m_chromeClient->image());
 }
 
 bool SVGImage::isInSVGImage(const Node* node) {
-  ASSERT(node);
+  DCHECK(node);
 
   Page* page = node->document().page();
   if (!page)
@@ -98,7 +98,7 @@
 
   LocalFrame* frame = toLocalFrame(m_page->mainFrame());
 
-  RELEASE_ASSERT(frame->document()->loadEventFinished());
+  CHECK(frame->document()->loadEventFinished());
 
   SVGSVGElement* rootElement =
       frame->document()->accessSVGExtensions().rootElement();
@@ -146,7 +146,7 @@
     return containerSize;
 
   // Assure that a container size is always given for a non-identity zoom level.
-  ASSERT(layoutObject->style()->effectiveZoom() == 1);
+  DCHECK_EQ(layoutObject->style()->effectiveZoom(), 1);
 
   // No set container size; use concrete object size.
   return m_intrinsicSize;
@@ -421,7 +421,7 @@
 
     view->updateAllLifecyclePhasesExceptPaint();
     view->paint(builder.context(), CullRect(enclosingIntRect(srcRect)));
-    ASSERT(!view->needsLayout());
+    DCHECK(!view->needsLayout());
   }
 
   {
diff --git a/third_party/WebKit/Source/core/svg/graphics/filters/SVGFilterBuilder.cpp b/third_party/WebKit/Source/core/svg/graphics/filters/SVGFilterBuilder.cpp
index b5fbe55..8a60cddb 100644
--- a/third_party/WebKit/Source/core/svg/graphics/filters/SVGFilterBuilder.cpp
+++ b/third_party/WebKit/Source/core/svg/graphics/filters/SVGFilterBuilder.cpp
@@ -70,8 +70,8 @@
 void SVGFilterGraphNodeMap::addPrimitive(LayoutObject* object,
                                          FilterEffect* effect) {
   // The effect must be a newly created filter effect.
-  ASSERT(!m_effectReferences.contains(effect));
-  ASSERT(!object || !m_effectRenderer.contains(object));
+  DCHECK(!m_effectReferences.contains(effect));
+  DCHECK(!object || !m_effectRenderer.contains(object));
   m_effectReferences.insert(effect, FilterEffectSet());
 
   unsigned numberOfInputEffects = effect->inputEffects().size();
diff --git a/third_party/WebKit/Source/core/svg/graphics/filters/SVGFilterBuilder.h b/third_party/WebKit/Source/core/svg/graphics/filters/SVGFilterBuilder.h
index 62c36fa..09bdd31f 100644
--- a/third_party/WebKit/Source/core/svg/graphics/filters/SVGFilterBuilder.h
+++ b/third_party/WebKit/Source/core/svg/graphics/filters/SVGFilterBuilder.h
@@ -51,7 +51,7 @@
 
   inline FilterEffectSet& effectReferences(FilterEffect* effect) {
     // Only allowed for effects belongs to this builder.
-    ASSERT(m_effectReferences.contains(effect));
+    DCHECK(m_effectReferences.contains(effect));
     return m_effectReferences.find(effect)->value;
   }
 
diff --git a/third_party/WebKit/Source/core/svg/properties/SVGAnimatedProperty.h b/third_party/WebKit/Source/core/svg/properties/SVGAnimatedProperty.h
index 35e6ac1..c67a4cb7 100644
--- a/third_party/WebKit/Source/core/svg/properties/SVGAnimatedProperty.h
+++ b/third_party/WebKit/Source/core/svg/properties/SVGAnimatedProperty.h
@@ -133,7 +133,7 @@
   }
 
   void setAnimatedValue(SVGPropertyBase* value) override {
-    ASSERT(value->type() == Property::classType());
+    DCHECK_EQ(value->type(), Property::classType());
     m_currentValue = static_cast<Property*>(value);
   }
 
@@ -195,7 +195,7 @@
     this->baseValue()->setValue(value);
     m_baseValueUpdated = true;
 
-    ASSERT(this->attributeName() != QualifiedName::null());
+    DCHECK(this->attributeName() != QualifiedName::null());
     this->contextElement()->invalidateSVGAttributes();
     this->contextElement()->svgAttributeBaseValChanged(this->attributeName());
   }
diff --git a/third_party/WebKit/Source/core/svg/properties/SVGListPropertyHelper.h b/third_party/WebKit/Source/core/svg/properties/SVGListPropertyHelper.h
index 2bea7c4b67..19f8ac51 100644
--- a/third_party/WebKit/Source/core/svg/properties/SVGListPropertyHelper.h
+++ b/third_party/WebKit/Source/core/svg/properties/SVGListPropertyHelper.h
@@ -55,8 +55,8 @@
   // used from Blink C++ code:
 
   ItemPropertyType* at(size_t index) {
-    ASSERT(index < m_values.size());
-    ASSERT(m_values.at(index)->ownerList() == this);
+    DCHECK_LT(index, m_values.size());
+    DCHECK_EQ(m_values.at(index)->ownerList(), this);
     return m_values.at(index).get();
   }
 
@@ -99,7 +99,7 @@
   ConstIterator end() const { return ConstIterator(m_values.end()); }
 
   void append(ItemPropertyType* newItem) {
-    ASSERT(newItem);
+    DCHECK(newItem);
     m_values.push_back(newItem);
     newItem->setOwnerList(this);
   }
@@ -175,7 +175,7 @@
   typename HeapVector<Member<ItemPropertyType>>::const_iterator itEnd =
       m_values.end();
   for (; it != itEnd; ++it) {
-    ASSERT((*it)->ownerList() == this);
+    DCHECK_EQ((*it)->ownerList(), this);
     (*it)->setOwnerList(nullptr);
   }
 
@@ -199,8 +199,8 @@
   if (!checkIndexBound(index, exceptionState))
     return nullptr;
 
-  ASSERT(index < m_values.size());
-  ASSERT(m_values.at(index)->ownerList() == this);
+  DCHECK_LT(index, m_values.size());
+  DCHECK_EQ(m_values.at(index)->ownerList(), this);
   return m_values.at(index);
 }
 
@@ -233,7 +233,7 @@
                             "index", index, m_values.size()));
     return nullptr;
   }
-  ASSERT(m_values.at(index)->ownerList() == this);
+  DCHECK_EQ(m_values.at(index)->ownerList(), this);
   ItemPropertyType* oldItem = m_values.at(index);
   m_values.remove(index);
   oldItem->setOwnerList(0);
@@ -269,7 +269,7 @@
 
   // Update the value at the desired position 'index'.
   Member<ItemPropertyType>& position = m_values[index];
-  ASSERT(position->ownerList() == this);
+  DCHECK_EQ(position->ownerList(), this);
   position->setOwnerList(0);
   position = newItem;
   newItem->setOwnerList(this);
@@ -334,7 +334,7 @@
     return false;
   }
 
-  ASSERT(!fromListSize || fromListSize == toListSize);
+  DCHECK(!fromListSize || fromListSize == toListSize);
   if (length() < toListSize) {
     size_t paddingCount = toListSize - length();
     for (size_t i = 0; i < paddingCount; ++i)
diff --git a/third_party/WebKit/Source/core/svg/properties/SVGProperty.h b/third_party/WebKit/Source/core/svg/properties/SVGProperty.h
index 2538e50..948c03c 100644
--- a/third_party/WebKit/Source/core/svg/properties/SVGProperty.h
+++ b/third_party/WebKit/Source/core/svg/properties/SVGProperty.h
@@ -75,7 +75,7 @@
 
   void setOwnerList(SVGPropertyBase* ownerList) {
     // Previous owner list must be cleared before setting new owner list.
-    ASSERT((!ownerList && m_ownerList) || (ownerList && !m_ownerList));
+    DCHECK((!ownerList && m_ownerList) || (ownerList && !m_ownerList));
 
     m_ownerList = ownerList;
   }
diff --git a/third_party/WebKit/Source/core/svg/properties/SVGPropertyTearOff.h b/third_party/WebKit/Source/core/svg/properties/SVGPropertyTearOff.h
index ff916e3..dd552da 100644
--- a/third_party/WebKit/Source/core/svg/properties/SVGPropertyTearOff.h
+++ b/third_party/WebKit/Source/core/svg/properties/SVGPropertyTearOff.h
@@ -62,9 +62,9 @@
 
   void attachToSVGElementAttribute(SVGElement* contextElement,
                                    const QualifiedName& attributeName) {
-    ASSERT(!isImmutable());
-    ASSERT(contextElement);
-    ASSERT(attributeName != QualifiedName::null());
+    DCHECK(!isImmutable());
+    DCHECK(contextElement);
+    DCHECK(attributeName != QualifiedName::null());
     m_contextElement = contextElement;
     m_attributeName = attributeName;
   }
@@ -122,7 +122,7 @@
                                propertyIsAnimVal,
                                attributeName),
         m_target(target) {
-    ASSERT(m_target);
+    DCHECK(m_target);
   }
 
  private:
diff --git a/third_party/WebKit/Source/devtools/BUILD.gn b/third_party/WebKit/Source/devtools/BUILD.gn
index d01a5dc..ea25b99 100644
--- a/third_party/WebKit/Source/devtools/BUILD.gn
+++ b/third_party/WebKit/Source/devtools/BUILD.gn
@@ -456,6 +456,7 @@
   "front_end/sdk/HAREntry.js",
   "front_end/sdk/HeapProfilerModel.js",
   "front_end/sdk/LayerTreeBase.js",
+  "front_end/sdk/LogModel.js",
   "front_end/sdk/module.json",
   "front_end/sdk/NetworkLog.js",
   "front_end/sdk/NetworkManager.js",
@@ -695,6 +696,8 @@
   "front_end/workspace/SearchConfig.js",
   "front_end/workspace/UISourceCode.js",
   "front_end/workspace/Workspace.js",
+  "front_end/workspace_diff/WorkspaceDiff.js",
+  "front_end/workspace_diff/module.json",
 ]
 
 devtools_embedder_scripts = [
@@ -857,6 +860,7 @@
   "$resources_out_dir/text_editor/text_editor_module.js",
   "$resources_out_dir/timeline_model/timeline_model_module.js",
   "$resources_out_dir/timeline/timeline_module.js",
+  "$resources_out_dir/workspace_diff/workspace_diff_module.js",
 ]
 
 generated_remote_modules = [
diff --git a/third_party/WebKit/Source/devtools/front_end/common/CharacterIdMap.js b/third_party/WebKit/Source/devtools/front_end/common/CharacterIdMap.js
index dedb0b05..794218d 100644
--- a/third_party/WebKit/Source/devtools/front_end/common/CharacterIdMap.js
+++ b/third_party/WebKit/Source/devtools/front_end/common/CharacterIdMap.js
@@ -35,6 +35,9 @@
    * @return {?T}
    */
   fromChar(character) {
-    return this._characterToElement.get(character) || null;
+    var object = this._characterToElement.get(character);
+    if (object === undefined)
+      return null;
+    return object;
   }
 };
diff --git a/third_party/WebKit/Source/devtools/front_end/data_grid/ViewportDataGrid.js b/third_party/WebKit/Source/devtools/front_end/data_grid/ViewportDataGrid.js
index 80c6238..e9b5f7b1 100644
--- a/third_party/WebKit/Source/devtools/front_end/data_grid/ViewportDataGrid.js
+++ b/third_party/WebKit/Source/devtools/front_end/data_grid/ViewportDataGrid.js
@@ -19,20 +19,10 @@
     this._onScrollBound = this._onScroll.bind(this);
     this._scrollContainer.addEventListener('scroll', this._onScrollBound, true);
 
-    // This is not in setScrollContainer because mouse wheel needs to detect events on the content not the scrollbar itself.
-    this._scrollContainer.addEventListener('mousewheel', this._onWheel.bind(this), true);
     /** @type {!Array.<!DataGrid.ViewportDataGridNode>} */
     this._visibleNodes = [];
     this._inline = false;
 
-    // Wheel target shouldn't be removed from DOM to preserve native kinetic scrolling.
-    /** @type {?Node} */
-    this._wheelTarget = null;
-
-    // Element that was hidden earlier, but hasn't been removed yet.
-    /** @type {?Node} */
-    this._hiddenWheelTarget = null;
-
     this._stickToBottom = false;
     this._updateIsFromUser = false;
     this._atBottom = true;
@@ -71,13 +61,6 @@
   /**
    * @param {?Event} event
    */
-  _onWheel(event) {
-    this._wheelTarget = event.target ? event.target.enclosingNodeOrSelfWithNodeName('tr') : null;
-  }
-
-  /**
-   * @param {?Event} event
-   */
   _onScroll(event) {
     this._atBottom = this._scrollContainer.isScrolledToBottom();
     if (this._lastScrollTop !== this._scrollContainer.scrollTop)
@@ -184,26 +167,16 @@
     var visibleNodes = viewportState.visibleNodes;
     var visibleNodesSet = new Set(visibleNodes);
 
-    if (this._hiddenWheelTarget && this._hiddenWheelTarget !== this._wheelTarget) {
-      this._hiddenWheelTarget.remove();
-      this._hiddenWheelTarget = null;
-    }
-
     for (var i = 0; i < this._visibleNodes.length; ++i) {
       var oldNode = this._visibleNodes[i];
       if (!visibleNodesSet.has(oldNode) && oldNode.attached()) {
         var element = oldNode.existingElement();
-        if (element === this._wheelTarget)
-          this._hiddenWheelTarget = oldNode.abandonElement();
-        else
-          element.remove();
+        element.remove();
         oldNode.wasDetached();
       }
     }
 
     var previousElement = this.topFillerRowElement();
-    if (previousElement.nextSibling === this._hiddenWheelTarget)
-      previousElement = this._hiddenWheelTarget;
     var tBody = this.dataTableBody;
     var offset = viewportState.offset;
 
@@ -484,17 +457,6 @@
   }
 
   /**
-   * @return {?Element}
-   */
-  abandonElement() {
-    var result = this.existingElement();
-    if (result)
-      result.style.display = 'none';
-    this.resetElement();
-    return result;
-  }
-
-  /**
    * @override
    */
   reveal() {
diff --git a/third_party/WebKit/Source/devtools/front_end/diff/Diff.js b/third_party/WebKit/Source/devtools/front_end/diff/Diff.js
index 16ca602..5f5a3ce1 100644
--- a/third_party/WebKit/Source/devtools/front_end/diff/Diff.js
+++ b/third_party/WebKit/Source/devtools/front_end/diff/Diff.js
@@ -19,7 +19,7 @@
   /**
    * @param {!Array.<string>} lines1
    * @param {!Array.<string>} lines2
-   * @return {!Array.<!{0: number, 1: !Array.<string>}>}
+   * @return {!Diff.Diff.DiffArray}
    */
   lineDiff: function(lines1, lines2) {
     /** @type {!Common.CharacterIdMap<string>} */
@@ -40,7 +40,7 @@
   },
 
   /**
-   * @param {!Array.<!{0: number, 1: !Array.<string>}>} diff
+   * @param {!Diff.Diff.DiffArray} diff
    * @return {!Array<!Array<number>>}
    */
   convertToEditDiff: function(diff) {
@@ -80,9 +80,13 @@
 
 };
 
+/** @enum {number} */
 Diff.Diff.Operation = {
   Equal: 0,
   Insert: 1,
   Delete: -1,
   Edit: 2
 };
+
+/** @typedef {!Array<!{0: !Diff.Diff.Operation, 1: !Array<string>}>} */
+Diff.Diff.DiffArray;
\ No newline at end of file
diff --git a/third_party/WebKit/Source/devtools/front_end/inspector.json b/third_party/WebKit/Source/devtools/front_end/inspector.json
index ffca469..efcabc79 100644
--- a/third_party/WebKit/Source/devtools/front_end/inspector.json
+++ b/third_party/WebKit/Source/devtools/front_end/inspector.json
@@ -55,7 +55,8 @@
         { "name": "network_conditions", "type": "autostart"},
         { "name": "event_listeners" },
         { "name": "object_ui", "type": "autostart"},
-        { "name": "help", "type": "autostart"}
+        { "name": "help", "type": "autostart"},
+        { "name": "workspace_diff" }
     ],
 
     "has_html": true
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/ConsoleModel.js b/third_party/WebKit/Source/devtools/front_end/sdk/ConsoleModel.js
index bb46b94..167cb26 100644
--- a/third_party/WebKit/Source/devtools/front_end/sdk/ConsoleModel.js
+++ b/third_party/WebKit/Source/devtools/front_end/sdk/ConsoleModel.js
@@ -44,20 +44,10 @@
     this._messageByExceptionId = new Map();
     this._warnings = 0;
     this._errors = 0;
-    /** @type {?Protocol.LogAgent} */
-    this._logAgent = target.hasLogCapability() ? target.logAgent() : null;
-    if (this._logAgent) {
-      target.registerLogDispatcher(new SDK.LogDispatcher(this));
-      this._logAgent.enable();
-      if (!Host.isUnderTest()) {
-        this._logAgent.startViolationsReport([
-          {name: 'longTask', threshold: 200}, {name: 'longLayout', threshold: 30},
-          {name: 'blockedEvent', threshold: 100}, {name: 'blockedParser', threshold: -1},
-          {name: 'handler', threshold: 150}, {name: 'recurringHandler', threshold: 50},
-          {name: 'discouragedAPIUse', threshold: -1}
-        ]);
-      }
-    }
+
+    var logModel = target.model(SDK.LogModel);
+    if (logModel)
+      logModel.on(SDK.LogModel.EntryAddedEvent, this._logEntryAdded, this);
 
     var cpuProfilerModel = target.model(SDK.CPUProfilerModel);
     if (cpuProfilerModel) {
@@ -165,6 +155,17 @@
   }
 
   /**
+   * @param {!SDK.LogModel.EntryAddedEvent} event
+   */
+  _logEntryAdded(event) {
+    var consoleMessage = new SDK.ConsoleMessage(
+        this.target(), event.entry.source, event.entry.level, event.entry.text, undefined, event.entry.url,
+        event.entry.lineNumber, undefined, event.entry.networkRequestId, undefined, event.entry.stackTrace,
+        event.entry.timestamp, undefined, undefined, event.entry.workerId);
+    this.addMessage(consoleMessage);
+  }
+
+  /**
    * @param {!Common.Event} event
    */
   _exceptionThrown(event) {
@@ -304,7 +305,9 @@
   }
 
   requestClearMessages() {
-    this._logAgent && this._logAgent.clear();
+    var logModel = this.target().model(SDK.LogModel);
+    if (logModel)
+      logModel.requestClear();
     this.clear();
     this.target().runtimeModel.discardConsoleEntries();
   }
@@ -425,21 +428,6 @@
   }
 
   /**
-   * @param {!Protocol.Runtime.ExceptionDetails} exceptionDetails
-   * @return {string}
-   */
-  static simpleTextFromException(exceptionDetails) {
-    var text = exceptionDetails.text;
-    if (exceptionDetails.exception && exceptionDetails.exception.description) {
-      var description = exceptionDetails.exception.description;
-      if (description.indexOf('\n') !== -1)
-        description = description.substring(0, description.indexOf('\n'));
-      text += ' ' + description;
-    }
-    return text;
-  }
-
-  /**
    * @param {!SDK.Target} target
    * @param {!Protocol.Runtime.ExceptionDetails} exceptionDetails
    * @param {string=} messageType
@@ -450,8 +438,9 @@
   static fromException(target, exceptionDetails, messageType, timestamp, forceUrl) {
     return new SDK.ConsoleMessage(
         target, SDK.ConsoleMessage.MessageSource.JS, SDK.ConsoleMessage.MessageLevel.Error,
-        SDK.ConsoleMessage.simpleTextFromException(exceptionDetails), messageType, forceUrl || exceptionDetails.url,
-        exceptionDetails.lineNumber, exceptionDetails.columnNumber, undefined, exceptionDetails.exception ?
+        SDK.RuntimeModel.simpleTextFromException(exceptionDetails), messageType, forceUrl || exceptionDetails.url,
+        exceptionDetails.lineNumber, exceptionDetails.columnNumber, undefined,
+        exceptionDetails.exception ?
             [SDK.RemoteObject.fromLocalObject(exceptionDetails.text), exceptionDetails.exception] :
             undefined,
         exceptionDetails.stackTrace, timestamp, exceptionDetails.executionContextId, exceptionDetails.scriptId);
@@ -644,31 +633,6 @@
 };
 
 /**
- * @implements {Protocol.LogDispatcher}
- * @unrestricted
- */
-SDK.LogDispatcher = class {
-  /**
-   * @param {!SDK.ConsoleModel} console
-   */
-  constructor(console) {
-    this._console = console;
-  }
-
-  /**
-   * @override
-   * @param {!Protocol.Log.LogEntry} payload
-   */
-  entryAdded(payload) {
-    var consoleMessage = new SDK.ConsoleMessage(
-        this._console.target(), payload.source, payload.level, payload.text, undefined, payload.url, payload.lineNumber,
-        undefined, payload.networkRequestId, undefined, payload.stackTrace, payload.timestamp, undefined, undefined,
-        payload.workerId);
-    this._console.addMessage(consoleMessage);
-  }
-};
-
-/**
  * @implements {SDK.TargetManager.Observer}
  * @unrestricted
  */
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/LogModel.js b/third_party/WebKit/Source/devtools/front_end/sdk/LogModel.js
new file mode 100644
index 0000000..57b1bdd
--- /dev/null
+++ b/third_party/WebKit/Source/devtools/front_end/sdk/LogModel.js
@@ -0,0 +1,49 @@
+// 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.
+
+/**
+ * @implements {Protocol.LogDispatcher}
+ */
+SDK.LogModel = class extends SDK.SDKModel {
+  /**
+   * @param {!SDK.Target} target
+   */
+  constructor(target) {
+    super(target);
+    target.registerLogDispatcher(this);
+    this._logAgent = target.logAgent();
+    this._logAgent.enable();
+    if (!Host.isUnderTest()) {
+      this._logAgent.startViolationsReport([
+        {name: 'longTask', threshold: 200}, {name: 'longLayout', threshold: 30}, {name: 'blockedEvent', threshold: 100},
+        {name: 'blockedParser', threshold: -1}, {name: 'handler', threshold: 150},
+        {name: 'recurringHandler', threshold: 50}, {name: 'discouragedAPIUse', threshold: -1}
+      ]);
+    }
+  }
+
+  /**
+   * @override
+   * @param {!Protocol.Log.LogEntry} payload
+   */
+  entryAdded(payload) {
+    this.emit(new SDK.LogModel.EntryAddedEvent(payload));
+  }
+
+  requestClear() {
+    this._logAgent.clear();
+  }
+};
+
+SDK.SDKModel.register(SDK.LogModel, SDK.Target.Capability.Log);
+
+/** @implements {Common.Emittable} */
+SDK.LogModel.EntryAddedEvent = class {
+  /**
+   * @param {!Protocol.Log.LogEntry} entry
+   */
+  constructor(entry) {
+    this.entry = entry;
+  }
+};
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/RuntimeModel.js b/third_party/WebKit/Source/devtools/front_end/sdk/RuntimeModel.js
index ec71844..17a15a5 100644
--- a/third_party/WebKit/Source/devtools/front_end/sdk/RuntimeModel.js
+++ b/third_party/WebKit/Source/devtools/front_end/sdk/RuntimeModel.js
@@ -334,6 +334,21 @@
   }
 
   /**
+   * @param {!Protocol.Runtime.ExceptionDetails} exceptionDetails
+   * @return {string}
+   */
+  static simpleTextFromException(exceptionDetails) {
+    var text = exceptionDetails.text;
+    if (exceptionDetails.exception && exceptionDetails.exception.description) {
+      var description = exceptionDetails.exception.description;
+      if (description.indexOf('\n') !== -1)
+        description = description.substring(0, description.indexOf('\n'));
+      text += ' ' + description;
+    }
+    return text;
+  }
+
+  /**
    * @param {number} timestamp
    * @param {!Protocol.Runtime.ExceptionDetails} exceptionDetails
    */
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/TargetManager.js b/third_party/WebKit/Source/devtools/front_end/sdk/TargetManager.js
index 47a3b32..c40b739e 100644
--- a/third_party/WebKit/Source/devtools/front_end/sdk/TargetManager.js
+++ b/third_party/WebKit/Source/devtools/front_end/sdk/TargetManager.js
@@ -252,6 +252,7 @@
     /** @type {!SDK.RuntimeModel} */
     target.runtimeModel = /** @type {!SDK.RuntimeModel} */ (target.model(SDK.RuntimeModel));
     target.model(SDK.DebuggerModel);
+    target.model(SDK.LogModel);
     /** @type {!SDK.ConsoleModel} */
     target.consoleModel = /** @type {!SDK.ConsoleModel} */ (target.model(SDK.ConsoleModel));
     target.model(SDK.DOMModel);
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/module.json b/third_party/WebKit/Source/devtools/front_end/sdk/module.json
index e68cdd97..8c1721dd 100644
--- a/third_party/WebKit/Source/devtools/front_end/sdk/module.json
+++ b/third_party/WebKit/Source/devtools/front_end/sdk/module.json
@@ -140,6 +140,7 @@
         "DebuggerModel.js",
         "HAREntry.js",
         "LayerTreeBase.js",
+        "LogModel.js",
         "NetworkLog.js",
         "ServiceWorkerManager.js",
         "TracingManager.js",
diff --git a/third_party/WebKit/Source/devtools/front_end/source_frame/SourceCodeDiff.js b/third_party/WebKit/Source/devtools/front_end/source_frame/SourceCodeDiff.js
index 78843689..1bf2445 100644
--- a/third_party/WebKit/Source/devtools/front_end/source_frame/SourceCodeDiff.js
+++ b/third_party/WebKit/Source/devtools/front_end/source_frame/SourceCodeDiff.js
@@ -6,30 +6,21 @@
  */
 SourceFrame.SourceCodeDiff = class {
   /**
-   * @param {!Promise<?string>} diffBaseline
+   * @param {!WorkspaceDiff.WorkspaceDiff} workspaceDiff
+   * @param {!Workspace.UISourceCode} uiSourceCode
    * @param {!TextEditor.CodeMirrorTextEditor} textEditor
    */
-  constructor(diffBaseline, textEditor) {
+  constructor(workspaceDiff, uiSourceCode, textEditor) {
     this._textEditor = textEditor;
     this._decorations = [];
     this._textEditor.installGutter(SourceFrame.SourceCodeDiff.DiffGutterType, true);
-    this._diffBaseline = diffBaseline;
+    this._uiSourceCode = uiSourceCode;
+    this._workspaceDiff = workspaceDiff;
     /** @type {!Array<!TextEditor.TextEditorPositionHandle>}*/
     this._animatedLines = [];
-  }
 
-  updateDiffMarkersWhenPossible() {
-    if (this._updateTimeout)
-      clearTimeout(this._updateTimeout);
-    this._updateTimeout =
-        setTimeout(this.updateDiffMarkersImmediately.bind(this), SourceFrame.SourceCodeDiff.UpdateTimeout);
-  }
-
-  updateDiffMarkersImmediately() {
-    if (this._updateTimeout)
-      clearTimeout(this._updateTimeout);
-    this._updateTimeout = null;
-    this._diffBaseline.then(this._innerUpdate.bind(this));
+    this._workspaceDiff.subscribeToDiffChange(this._uiSourceCode, this._update, this);
+    this._update();
   }
 
   /**
@@ -40,7 +31,7 @@
     if (typeof oldContent !== 'string' || typeof newContent !== 'string')
       return;
 
-    var diff = this._computeDiff(oldContent, newContent);
+    var diff = this._computeDiff(Diff.Diff.lineDiff(oldContent.split('\n'), newContent.split('\n')));
     var changedLines = [];
     for (var i = 0; i < diff.length; ++i) {
       var diffEntry = diff[i];
@@ -104,12 +95,10 @@
   }
 
   /**
-   * @param {string} baseline
-   * @param {string} current
+   * @param {!Diff.Diff.DiffArray} diff
    * @return {!Array<!{type: !SourceFrame.SourceCodeDiff.GutterDecorationType, from: number, to: number}>}
    */
-  _computeDiff(baseline, current) {
-    var diff = Diff.Diff.lineDiff(baseline.split('\n'), current.split('\n'));
+  _computeDiff(diff) {
     var result = [];
     var hasAdded = false;
     var hasRemoved = false;
@@ -165,18 +154,16 @@
     }
   }
 
-  /**
-   * @param {?string} baseline
-   */
-  _innerUpdate(baseline) {
-    var current = this._textEditor.text();
-    if (typeof baseline !== 'string') {
-      this._updateDecorations(this._decorations, [] /* added */);
-      this._decorations = [];
-      return;
-    }
+  _update() {
+    this._workspaceDiff.requestDiff(this._uiSourceCode).then(this._innerUpdate.bind(this));
+  }
 
-    var diff = this._computeDiff(baseline, current);
+  /**
+   * @param {?Diff.Diff.DiffArray} lineDiff
+   */
+  _innerUpdate(lineDiff) {
+    if (!lineDiff)
+      return;
 
     /** @type {!Map<number, !SourceFrame.SourceCodeDiff.GutterDecoration>} */
     var oldDecorations = new Map();
@@ -188,6 +175,8 @@
       oldDecorations.set(lineNumber, decoration);
     }
 
+    var diff = this._computeDiff(lineDiff);
+
     /** @type {!Map<number, !{lineNumber: number, type: !SourceFrame.SourceCodeDiff.GutterDecorationType}>} */
     var newDecorations = new Map();
     for (var i = 0; i < diff.length; ++i) {
@@ -210,10 +199,11 @@
    */
   _decorationsSetForTest(decorations) {
   }
-};
 
-/** @type {number} */
-SourceFrame.SourceCodeDiff.UpdateTimeout = 200;
+  dispose() {
+    WorkspaceDiff.workspaceDiff().unsubscribeFromDiffChange(this._uiSourceCode, this._update, this);
+  }
+};
 
 /** @type {string} */
 SourceFrame.SourceCodeDiff.DiffGutterType = 'CodeMirror-gutter-diff';
diff --git a/third_party/WebKit/Source/devtools/front_end/source_frame/UISourceCodeFrame.js b/third_party/WebKit/Source/devtools/front_end/source_frame/UISourceCodeFrame.js
index 89fc281..48354f7 100644
--- a/third_party/WebKit/Source/devtools/front_end/source_frame/UISourceCodeFrame.js
+++ b/third_party/WebKit/Source/devtools/front_end/source_frame/UISourceCodeFrame.js
@@ -39,7 +39,8 @@
     this.setEditable(this._canEditSource());
 
     if (Runtime.experiments.isEnabled('sourceDiff'))
-      this._diff = new SourceFrame.SourceCodeDiff(uiSourceCode.requestOriginalContent(), this.textEditor);
+      this._diff = new SourceFrame.SourceCodeDiff(WorkspaceDiff.workspaceDiff(), uiSourceCode, this.textEditor);
+
 
     /** @type {?UI.AutocompleteConfig} */
     this._autocompleteConfig = {isWordChar: Common.TextUtils.isWordChar};
@@ -167,8 +168,6 @@
    * @override
    */
   onTextEditorContentSet() {
-    if (this._diff)
-      this._diff.updateDiffMarkersImmediately();
     super.onTextEditorContentSet();
     for (var message of this._allMessages())
       this._addMessageToSource(message);
@@ -190,8 +189,6 @@
    * @param {!Common.TextRange} newRange
    */
   onTextChanged(oldRange, newRange) {
-    if (this._diff)
-      this._diff.updateDiffMarkersWhenPossible();
     super.onTextChanged(oldRange, newRange);
     this._errorPopoverHelper.hidePopover();
     if (this._isSettingContent)
@@ -321,6 +318,8 @@
   }
 
   dispose() {
+    if (this._diff)
+      this._diff.dispose();
     this.textEditor.dispose();
     Common.moduleSetting('textEditorAutocompletion').removeChangeListener(this._updateAutocomplete, this);
     this.detach();
diff --git a/third_party/WebKit/Source/devtools/front_end/source_frame/module.json b/third_party/WebKit/Source/devtools/front_end/source_frame/module.json
index 9d5e607a..4b34a1f 100644
--- a/third_party/WebKit/Source/devtools/front_end/source_frame/module.json
+++ b/third_party/WebKit/Source/devtools/front_end/source_frame/module.json
@@ -36,7 +36,7 @@
         "ui",
         "platform",
         "persistence",
-        "diff"
+        "workspace_diff"
     ],
     "scripts": [
         "SourcesTextEditor.js",
diff --git a/third_party/WebKit/Source/devtools/front_end/sources/JavaScriptCompiler.js b/third_party/WebKit/Source/devtools/front_end/sources/JavaScriptCompiler.js
index 2444ac3..f651ae9 100644
--- a/third_party/WebKit/Source/devtools/front_end/sources/JavaScriptCompiler.js
+++ b/third_party/WebKit/Source/devtools/front_end/sources/JavaScriptCompiler.js
@@ -63,7 +63,7 @@
       }
       if (!exceptionDetails)
         return;
-      var text = SDK.ConsoleMessage.simpleTextFromException(exceptionDetails);
+      var text = SDK.RuntimeModel.simpleTextFromException(exceptionDetails);
       this._sourceFrame.uiSourceCode().addLineMessage(
           Workspace.UISourceCode.Message.Level.Error, text, exceptionDetails.lineNumber, exceptionDetails.columnNumber);
       this._compilationFinishedForTest();
diff --git a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineFlameChart.js b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineFlameChart.js
index ceb1b1e..093d87e 100644
--- a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineFlameChart.js
+++ b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineFlameChart.js
@@ -769,6 +769,7 @@
         this._flowEventIndexById.set(event.id, pushStartFlow(event));
         break;
       case SDK.TracingModel.Phase.FlowEnd:
+        pushEndFlow(event, this._flowEventIndexById.get(event.id));
         this._flowEventIndexById.delete(event.id);
         break;
     }
diff --git a/third_party/WebKit/Source/devtools/front_end/workspace_diff/WorkspaceDiff.js b/third_party/WebKit/Source/devtools/front_end/workspace_diff/WorkspaceDiff.js
new file mode 100644
index 0000000..d062c3a3
--- /dev/null
+++ b/third_party/WebKit/Source/devtools/front_end/workspace_diff/WorkspaceDiff.js
@@ -0,0 +1,119 @@
+// 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.
+
+
+WorkspaceDiff.WorkspaceDiff = class {
+  constructor() {
+    /** @type {!WeakMap<!Workspace.UISourceCode, !WorkspaceDiff.WorkspaceDiff.UISourceCodeDiff>} */
+    this._uiSourceCodeDiffs = new WeakMap();
+  }
+
+  /**
+   * @param {!Workspace.UISourceCode} uiSourceCode
+   * @return {!Promise<?Diff.Diff.DiffArray>}
+   */
+  requestDiff(uiSourceCode) {
+    return this._uiSourceCodeDiff(uiSourceCode).requestDiff();
+  }
+
+  /**
+   * @param {!Workspace.UISourceCode} uiSourceCode
+   * @param {function(!WorkspaceDiff.DiffChangedEvent)} callback
+   * @param {!Object=} thisObj
+   */
+  subscribeToDiffChange(uiSourceCode, callback, thisObj) {
+    this._uiSourceCodeDiff(uiSourceCode).on(WorkspaceDiff.DiffChangedEvent, callback, thisObj);
+  }
+
+  /**
+   * @param {!Workspace.UISourceCode} uiSourceCode
+   * @param {function(!WorkspaceDiff.DiffChangedEvent)} callback
+   * @param {!Object=} thisObj
+   */
+  unsubscribeFromDiffChange(uiSourceCode, callback, thisObj) {
+    this._uiSourceCodeDiff(uiSourceCode).off(WorkspaceDiff.DiffChangedEvent, callback, thisObj);
+  }
+
+  /**
+   * @param {!Workspace.UISourceCode} uiSourceCode
+   * @return {!WorkspaceDiff.WorkspaceDiff.UISourceCodeDiff}
+   */
+  _uiSourceCodeDiff(uiSourceCode) {
+    if (!this._uiSourceCodeDiffs.has(uiSourceCode))
+      this._uiSourceCodeDiffs.set(uiSourceCode, new WorkspaceDiff.WorkspaceDiff.UISourceCodeDiff(uiSourceCode));
+    return this._uiSourceCodeDiffs.get(uiSourceCode);
+  }
+};
+
+WorkspaceDiff.WorkspaceDiff.UISourceCodeDiff = class extends Common.Object {
+  /**
+   * @param {!Workspace.UISourceCode} uiSourceCode
+   */
+  constructor(uiSourceCode) {
+    super();
+    this._uiSourceCode = uiSourceCode;
+    uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyChanged, this._uiSourceCodeChanged, this);
+    uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyCommitted, this._uiSourceCodeChanged, this);
+    this._requestDiffPromise = null;
+    this._pendingChanges = null;
+  }
+
+  _uiSourceCodeChanged() {
+    if (this._pendingChanges) {
+      clearTimeout(this._pendingChanges);
+      this._pendingChanges = null;
+    }
+    this._requestDiffPromise = null;
+
+    var content = this._uiSourceCode.content();
+    var delay = (!content || content.length < 65536) ? 0 : WorkspaceDiff.WorkspaceDiff.UpdateTimeout;
+    this._pendingChanges = setTimeout(emitDiffChanged.bind(this), delay);
+
+    /**
+     * @this {WorkspaceDiff.WorkspaceDiff.UISourceCodeDiff}
+     */
+    function emitDiffChanged() {
+      this.emit(new WorkspaceDiff.DiffChangedEvent());
+      this._pendingChanges = null;
+    }
+  }
+
+  /**
+   * @return {!Promise<?Diff.Diff.DiffArray>}
+   */
+  requestDiff() {
+    if (!this._requestDiffPromise)
+      this._requestDiffPromise = this._innerRequestDiff();
+    return this._requestDiffPromise;
+  }
+
+  /**
+   * @return {!Promise<?Diff.Diff.DiffArray>}
+   */
+  async _innerRequestDiff() {
+    var current = this._uiSourceCode.workingCopy();
+    if (!current && !this._uiSourceCode.contentLoaded())
+      current = await this._uiSourceCode.requestContent();
+    var baseline = await this._uiSourceCode.requestOriginalContent();
+    if (current === null || baseline === null)
+      return null;
+    return Diff.Diff.lineDiff(baseline.split('\n'), current.split('\n'));
+  }
+};
+
+/**
+ * @implements {Common.Emittable}
+ */
+WorkspaceDiff.DiffChangedEvent = class {};
+
+/**
+ * @return {!WorkspaceDiff.WorkspaceDiff}
+ */
+WorkspaceDiff.workspaceDiff = function() {
+  if (!WorkspaceDiff.WorkspaceDiff._instance)
+    WorkspaceDiff.WorkspaceDiff._instance = new WorkspaceDiff.WorkspaceDiff();
+  return WorkspaceDiff.WorkspaceDiff._instance;
+};
+
+WorkspaceDiff.WorkspaceDiff.UpdateTimeout = 200;
\ No newline at end of file
diff --git a/third_party/WebKit/Source/devtools/front_end/workspace_diff/module.json b/third_party/WebKit/Source/devtools/front_end/workspace_diff/module.json
new file mode 100644
index 0000000..3887247
--- /dev/null
+++ b/third_party/WebKit/Source/devtools/front_end/workspace_diff/module.json
@@ -0,0 +1,9 @@
+{
+  "dependencies": [
+      "workspace",
+      "diff"
+  ],
+  "scripts": [
+      "WorkspaceDiff.js"
+  ]
+}
\ No newline at end of file
diff --git a/third_party/WebKit/Source/modules/bluetooth/Bluetooth.cpp b/third_party/WebKit/Source/modules/bluetooth/Bluetooth.cpp
index 4cd27f84..42e7fe1 100644
--- a/third_party/WebKit/Source/modules/bluetooth/Bluetooth.cpp
+++ b/third_party/WebKit/Source/modules/bluetooth/Bluetooth.cpp
@@ -34,7 +34,7 @@
     "A device name can't be longer than 248 bytes.";
 }  // namespace
 
-static void canonicalizeFilter(
+static void CanonicalizeFilter(
     const BluetoothScanFilterInit& filter,
     mojom::blink::WebBluetoothScanFilterPtr& canonicalizedFilter,
     ExceptionState& exceptionState) {
@@ -84,7 +84,7 @@
   }
 }
 
-static void convertRequestDeviceOptions(
+static void ConvertRequestDeviceOptions(
     const RequestDeviceOptions& options,
     mojom::blink::WebBluetoothRequestDeviceOptionsPtr& result,
     ExceptionState& exceptionState) {
@@ -109,7 +109,7 @@
     for (const BluetoothScanFilterInit& filter : options.filters()) {
       auto canonicalizedFilter = mojom::blink::WebBluetoothScanFilter::New();
 
-      canonicalizeFilter(filter, canonicalizedFilter, exceptionState);
+      CanonicalizeFilter(filter, canonicalizedFilter, exceptionState);
 
       if (exceptionState.hadException())
         return;
@@ -130,7 +130,7 @@
   }
 }
 
-void Bluetooth::dispose() {
+void Bluetooth::Dispose() {
   // The pipe to this object must be closed when is marked unreachable to
   // prevent messages from being dispatched before lazy sweeping.
   if (m_clientBinding.is_bound())
@@ -147,10 +147,10 @@
 
   if (result == mojom::blink::WebBluetoothResult::SUCCESS) {
     BluetoothDevice* bluetoothDevice =
-        getBluetoothDeviceRepresentingDevice(std::move(device), resolver);
+        GetBluetoothDeviceRepresentingDevice(std::move(device), resolver);
     resolver->resolve(bluetoothDevice);
   } else {
-    resolver->reject(BluetoothError::createDOMException(result));
+    resolver->reject(BluetoothError::CreateDOMException(result));
   }
 }
 
@@ -207,7 +207,7 @@
   // In order to convert the arguments from service names and aliases to just
   // UUIDs, do the following substeps:
   auto deviceOptions = mojom::blink::WebBluetoothRequestDeviceOptions::New();
-  convertRequestDeviceOptions(options, deviceOptions, exceptionState);
+  ConvertRequestDeviceOptions(options, deviceOptions, exceptionState);
 
   if (exceptionState.hadException())
     return exceptionState.reject(scriptState);
@@ -221,7 +221,7 @@
   ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
   ScriptPromise promise = resolver->promise();
 
-  service()->RequestDevice(
+  m_service->RequestDevice(
       std::move(deviceOptions),
       convertToBaseCallback(WTF::bind(&Bluetooth::RequestDeviceCallback,
                                       wrapPersistent(this),
@@ -229,22 +229,22 @@
   return promise;
 }
 
-void Bluetooth::addToConnectedDevicesMap(const String& deviceId,
+void Bluetooth::AddToConnectedDevicesMap(const String& deviceId,
                                          BluetoothDevice* device) {
   m_connectedDevices.insert(deviceId, device);
 }
 
-void Bluetooth::removeFromConnectedDevicesMap(const String& deviceId) {
+void Bluetooth::RemoveFromConnectedDevicesMap(const String& deviceId) {
   m_connectedDevices.remove(deviceId);
 }
 
-void Bluetooth::registerCharacteristicObject(
+void Bluetooth::RegisterCharacteristicObject(
     const String& characteristicInstanceId,
     BluetoothRemoteGATTCharacteristic* characteristic) {
   m_activeCharacteristics.insert(characteristicInstanceId, characteristic);
 }
 
-void Bluetooth::characteristicObjectRemoved(
+void Bluetooth::CharacteristicObjectRemoved(
     const String& characteristicInstanceId) {
   m_activeCharacteristics.remove(characteristicInstanceId);
 }
@@ -263,7 +263,7 @@
   BluetoothRemoteGATTCharacteristic* characteristic =
       m_activeCharacteristics.at(characteristicInstanceId);
   if (characteristic)
-    characteristic->dispatchCharacteristicValueChanged(value);
+    characteristic->DispatchCharacteristicValueChanged(value);
 }
 
 void Bluetooth::GattServerDisconnected(const WTF::String& deviceId) {
@@ -273,11 +273,11 @@
     // to avoid removing a device the gattserverdisconnected event handler might
     // have re-connected.
     m_connectedDevices.remove(deviceId);
-    device->dispatchGattServerDisconnected();
+    device->DispatchGattServerDisconnected();
   }
 }
 
-BluetoothDevice* Bluetooth::getBluetoothDeviceRepresentingDevice(
+BluetoothDevice* Bluetooth::GetBluetoothDeviceRepresentingDevice(
     mojom::blink::WebBluetoothDevicePtr devicePtr,
     ScriptPromiseResolver* resolver) {
   WTF::String id = devicePtr->id;
diff --git a/third_party/WebKit/Source/modules/bluetooth/Bluetooth.h b/third_party/WebKit/Source/modules/bluetooth/Bluetooth.h
index 9b39b7a..699bfecd 100644
--- a/third_party/WebKit/Source/modules/bluetooth/Bluetooth.h
+++ b/third_party/WebKit/Source/modules/bluetooth/Bluetooth.h
@@ -24,27 +24,27 @@
                   public ScriptWrappable,
                   public mojom::blink::WebBluetoothServiceClient {
   DEFINE_WRAPPERTYPEINFO();
-  USING_PRE_FINALIZER(Bluetooth, dispose);
+  USING_PRE_FINALIZER(Bluetooth, Dispose);
 
  public:
-  static Bluetooth* create() { return new Bluetooth(); }
+  static Bluetooth* Create() { return new Bluetooth(); }
 
-  void dispose();
+  void Dispose();
 
-  // BluetoothDiscovery interface
+  // IDL exposed interface:
   ScriptPromise requestDevice(ScriptState*,
                               const RequestDeviceOptions&,
                               ExceptionState&);
 
-  mojom::blink::WebBluetoothService* service() { return m_service.get(); }
+  mojom::blink::WebBluetoothService* Service() { return m_service.get(); }
 
-  void addToConnectedDevicesMap(const String& deviceId, BluetoothDevice*);
+  void AddToConnectedDevicesMap(const String& deviceId, BluetoothDevice*);
 
-  void removeFromConnectedDevicesMap(const String& deviceId);
+  void RemoveFromConnectedDevicesMap(const String& deviceId);
 
-  void registerCharacteristicObject(const String& characteristicInstanceId,
+  void RegisterCharacteristicObject(const String& characteristicInstanceId,
                                     BluetoothRemoteGATTCharacteristic*);
-  void characteristicObjectRemoved(const String& characteristicInstanceId);
+  void CharacteristicObjectRemoved(const String& characteristicInstanceId);
 
   // Interface required by Garbage Collection:
   DECLARE_VIRTUAL_TRACE();
@@ -58,7 +58,7 @@
       const WTF::Vector<uint8_t>& value) override;
   void GattServerDisconnected(const WTF::String& deviceId) override;
 
-  BluetoothDevice* getBluetoothDeviceRepresentingDevice(
+  BluetoothDevice* GetBluetoothDeviceRepresentingDevice(
       mojom::blink::WebBluetoothDevicePtr,
       ScriptPromiseResolver*);
 
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothAttributeInstanceMap.cpp b/third_party/WebKit/Source/modules/bluetooth/BluetoothAttributeInstanceMap.cpp
index 6102873..46d0215 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothAttributeInstanceMap.cpp
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothAttributeInstanceMap.cpp
@@ -16,7 +16,7 @@
     : m_device(device) {}
 
 BluetoothRemoteGATTService*
-BluetoothAttributeInstanceMap::getOrCreateRemoteGATTService(
+BluetoothAttributeInstanceMap::GetOrCreateRemoteGATTService(
     mojom::blink::WebBluetoothRemoteGATTServicePtr remoteGATTService,
     bool isPrimary,
     const String& deviceInstanceId) {
@@ -33,13 +33,13 @@
   return service;
 }
 
-bool BluetoothAttributeInstanceMap::containsService(
+bool BluetoothAttributeInstanceMap::ContainsService(
     const String& serviceInstanceId) {
   return m_serviceIdToObject.contains(serviceInstanceId);
 }
 
 BluetoothRemoteGATTCharacteristic*
-BluetoothAttributeInstanceMap::getOrCreateRemoteGATTCharacteristic(
+BluetoothAttributeInstanceMap::GetOrCreateRemoteGATTCharacteristic(
     ExecutionContext* context,
     mojom::blink::WebBluetoothRemoteGATTCharacteristicPtr
         remoteGATTCharacteristic,
@@ -49,7 +49,7 @@
       m_characteristicIdToObject.at(instanceId);
 
   if (!characteristic) {
-    characteristic = BluetoothRemoteGATTCharacteristic::create(
+    characteristic = BluetoothRemoteGATTCharacteristic::Create(
         context, std::move(remoteGATTCharacteristic), service, m_device);
     m_characteristicIdToObject.insert(instanceId, characteristic);
   }
@@ -57,13 +57,13 @@
   return characteristic;
 }
 
-bool BluetoothAttributeInstanceMap::containsCharacteristic(
+bool BluetoothAttributeInstanceMap::ContainsCharacteristic(
     const String& characteristicInstanceId) {
   return m_characteristicIdToObject.contains(characteristicInstanceId);
 }
 
 BluetoothRemoteGATTDescriptor*
-BluetoothAttributeInstanceMap::getOrCreateBluetoothRemoteGATTDescriptor(
+BluetoothAttributeInstanceMap::GetOrCreateBluetoothRemoteGATTDescriptor(
     mojom::blink::WebBluetoothRemoteGATTDescriptorPtr descriptor,
     BluetoothRemoteGATTCharacteristic* characteristic) {
   String instanceId = descriptor->instance_id;
@@ -78,7 +78,7 @@
   return result;
 }
 
-bool BluetoothAttributeInstanceMap::containsDescriptor(
+bool BluetoothAttributeInstanceMap::ContainsDescriptor(
     const String& descriptorInstanceId) {
   return m_descriptorIdToObject.contains(descriptorInstanceId);
 }
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothAttributeInstanceMap.h b/third_party/WebKit/Source/modules/bluetooth/BluetoothAttributeInstanceMap.h
index d8a3b46..6cba2c9 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothAttributeInstanceMap.h
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothAttributeInstanceMap.h
@@ -30,39 +30,39 @@
   // no service with the same instance id and adds it to the map.
   // Otherwise returns the BluetoothRemoteGATTService object already
   // in the map.
-  BluetoothRemoteGATTService* getOrCreateRemoteGATTService(
+  BluetoothRemoteGATTService* GetOrCreateRemoteGATTService(
       mojom::blink::WebBluetoothRemoteGATTServicePtr,
       bool isPrimary,
       const String& deviceInstanceId);
 
   // Returns true if a BluetoothRemoteGATTService with |serviceInstanceId|
   // is in the map.
-  bool containsService(const String& serviceInstanceId);
+  bool ContainsService(const String& serviceInstanceId);
 
   // Constructs a new BluetoothRemoteGATTCharacteristic object if there was no
   // characteristic with the same instance id and adds it to the map.
   // Otherwise returns the BluetoothRemoteGATTCharacteristic object already in
   // the map.
-  BluetoothRemoteGATTCharacteristic* getOrCreateRemoteGATTCharacteristic(
+  BluetoothRemoteGATTCharacteristic* GetOrCreateRemoteGATTCharacteristic(
       ExecutionContext*,
       mojom::blink::WebBluetoothRemoteGATTCharacteristicPtr,
       BluetoothRemoteGATTService*);
 
   // Returns true if a BluetoothRemoteGATTCharacteristic with
   // |characteristicInstanceId| is in the map.
-  bool containsCharacteristic(const String& characteristicInstanceId);
+  bool ContainsCharacteristic(const String& characteristicInstanceId);
 
   // Constructs a new BluetoothRemoteGATTDescriptor object if there was no
   // descriptor with the same instance id and adds it to the map.
   // Otherwise returns the BluetoothRemoteGATTDescriptor object already in
   // the map.
-  BluetoothRemoteGATTDescriptor* getOrCreateBluetoothRemoteGATTDescriptor(
+  BluetoothRemoteGATTDescriptor* GetOrCreateBluetoothRemoteGATTDescriptor(
       mojom::blink::WebBluetoothRemoteGATTDescriptorPtr,
       BluetoothRemoteGATTCharacteristic*);
 
   // Returns true if a BluetoothRemoteGATTDescriptor with
   // |descriptorInstanceId| is in the map.
-  bool containsDescriptor(const String& descriptorInstanceId);
+  bool ContainsDescriptor(const String& descriptorInstanceId);
 
   // Removes all Attributes from the map.
   // TODO(crbug.com/654950): Remove descriptors when implemented.
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothCharacteristicProperties.cpp b/third_party/WebKit/Source/modules/bluetooth/BluetoothCharacteristicProperties.cpp
index f216207f..1a0d4b0 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothCharacteristicProperties.cpp
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothCharacteristicProperties.cpp
@@ -6,7 +6,7 @@
 
 namespace blink {
 
-BluetoothCharacteristicProperties* BluetoothCharacteristicProperties::create(
+BluetoothCharacteristicProperties* BluetoothCharacteristicProperties::Create(
     uint32_t properties) {
   return new BluetoothCharacteristicProperties(properties);
 }
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothCharacteristicProperties.h b/third_party/WebKit/Source/modules/bluetooth/BluetoothCharacteristicProperties.h
index 97b927d..f421a7c 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothCharacteristicProperties.h
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothCharacteristicProperties.h
@@ -19,8 +19,9 @@
   DEFINE_WRAPPERTYPEINFO();
 
  public:
-  static BluetoothCharacteristicProperties* create(uint32_t properties);
+  static BluetoothCharacteristicProperties* Create(uint32_t properties);
 
+  // IDL exposed interface:
   bool broadcast() const;
   bool read() const;
   bool writeWithoutResponse() const;
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothDevice.cpp b/third_party/WebKit/Source/modules/bluetooth/BluetoothDevice.cpp
index e8bfd645..6d0405a 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothDevice.cpp
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothDevice.cpp
@@ -24,7 +24,7 @@
     : ContextLifecycleObserver(context),
       m_attributeInstanceMap(new BluetoothAttributeInstanceMap(this)),
       m_device(std::move(device)),
-      m_gatt(BluetoothRemoteGATTServer::create(this)),
+      m_gatt(BluetoothRemoteGATTServer::Create(this)),
       m_bluetooth(bluetooth) {}
 
 // static
@@ -36,66 +36,66 @@
                              bluetooth);
 }
 
-BluetoothRemoteGATTService* BluetoothDevice::getOrCreateRemoteGATTService(
+BluetoothRemoteGATTService* BluetoothDevice::GetOrCreateRemoteGATTService(
     mojom::blink::WebBluetoothRemoteGATTServicePtr service,
     bool isPrimary,
     const String& deviceInstanceId) {
-  return m_attributeInstanceMap->getOrCreateRemoteGATTService(
+  return m_attributeInstanceMap->GetOrCreateRemoteGATTService(
       std::move(service), isPrimary, deviceInstanceId);
 }
 
-bool BluetoothDevice::isValidService(const String& serviceInstanceId) {
-  return m_attributeInstanceMap->containsService(serviceInstanceId);
+bool BluetoothDevice::IsValidService(const String& serviceInstanceId) {
+  return m_attributeInstanceMap->ContainsService(serviceInstanceId);
 }
 
 BluetoothRemoteGATTCharacteristic*
-BluetoothDevice::getOrCreateRemoteGATTCharacteristic(
+BluetoothDevice::GetOrCreateRemoteGATTCharacteristic(
     ExecutionContext* context,
     mojom::blink::WebBluetoothRemoteGATTCharacteristicPtr characteristic,
     BluetoothRemoteGATTService* service) {
-  return m_attributeInstanceMap->getOrCreateRemoteGATTCharacteristic(
+  return m_attributeInstanceMap->GetOrCreateRemoteGATTCharacteristic(
       context, std::move(characteristic), service);
 }
 
-bool BluetoothDevice::isValidCharacteristic(
+bool BluetoothDevice::IsValidCharacteristic(
     const String& characteristicInstanceId) {
-  return m_attributeInstanceMap->containsCharacteristic(
+  return m_attributeInstanceMap->ContainsCharacteristic(
       characteristicInstanceId);
 }
 
 BluetoothRemoteGATTDescriptor*
-BluetoothDevice::getOrCreateBluetoothRemoteGATTDescriptor(
+BluetoothDevice::GetOrCreateBluetoothRemoteGATTDescriptor(
     mojom::blink::WebBluetoothRemoteGATTDescriptorPtr descriptor,
     BluetoothRemoteGATTCharacteristic* characteristic) {
-  return m_attributeInstanceMap->getOrCreateBluetoothRemoteGATTDescriptor(
+  return m_attributeInstanceMap->GetOrCreateBluetoothRemoteGATTDescriptor(
       std::move(descriptor), characteristic);
 }
 
-bool BluetoothDevice::isValidDescriptor(const String& descriptorInstanceId) {
-  return m_attributeInstanceMap->containsDescriptor(descriptorInstanceId);
+bool BluetoothDevice::IsValidDescriptor(const String& descriptorInstanceId) {
+  return m_attributeInstanceMap->ContainsDescriptor(descriptorInstanceId);
 }
 
-void BluetoothDevice::dispose() {
-  disconnectGATTIfConnected();
+void BluetoothDevice::Dispose() {
+  DisconnectGATTIfConnected();
 }
 
 void BluetoothDevice::contextDestroyed(ExecutionContext*) {
-  disconnectGATTIfConnected();
+  DisconnectGATTIfConnected();
 }
 
-void BluetoothDevice::disconnectGATTIfConnected() {
+void BluetoothDevice::DisconnectGATTIfConnected() {
   if (m_gatt->connected()) {
-    m_gatt->setConnected(false);
+    m_gatt->SetConnected(false);
     m_gatt->ClearActiveAlgorithms();
-    m_bluetooth->removeFromConnectedDevicesMap(id());
-    mojom::blink::WebBluetoothService* service = m_bluetooth->service();
+    m_bluetooth->RemoveFromConnectedDevicesMap(id());
+    mojom::blink::WebBluetoothService* service = m_bluetooth->Service();
     service->RemoteServerDisconnect(id());
   }
 }
 
-void BluetoothDevice::cleanupDisconnectedDeviceAndFireEvent() {
+void BluetoothDevice::CleanupDisconnectedDeviceAndFireEvent() {
   DCHECK(m_gatt->connected());
-  m_gatt->setConnected(false);
+  m_gatt->SetConnected(false);
   m_gatt->ClearActiveAlgorithms();
   m_attributeInstanceMap->Clear();
   dispatchEvent(Event::createBubble(EventTypeNames::gattserverdisconnected));
@@ -109,11 +109,11 @@
   return ContextLifecycleObserver::getExecutionContext();
 }
 
-void BluetoothDevice::dispatchGattServerDisconnected() {
+void BluetoothDevice::DispatchGattServerDisconnected() {
   if (!m_gatt->connected()) {
     return;
   }
-  cleanupDisconnectedDeviceAndFireEvent();
+  CleanupDisconnectedDeviceAndFireEvent();
 }
 
 DEFINE_TRACE(BluetoothDevice) {
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothDevice.h b/third_party/WebKit/Source/modules/bluetooth/BluetoothDevice.h
index 30876f7..2c339cc 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothDevice.h
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothDevice.h
@@ -32,7 +32,7 @@
 // CallbackPromiseAdapter class comments.
 class BluetoothDevice final : public EventTargetWithInlineData,
                               public ContextLifecycleObserver {
-  USING_PRE_FINALIZER(BluetoothDevice, dispose);
+  USING_PRE_FINALIZER(BluetoothDevice, Dispose);
   DEFINE_WRAPPERTYPEINFO();
   USING_GARBAGE_COLLECTED_MIXIN(BluetoothDevice);
 
@@ -46,22 +46,22 @@
                                mojom::blink::WebBluetoothDevicePtr,
                                Bluetooth*);
 
-  BluetoothRemoteGATTService* getOrCreateRemoteGATTService(
+  BluetoothRemoteGATTService* GetOrCreateRemoteGATTService(
       mojom::blink::WebBluetoothRemoteGATTServicePtr,
       bool isPrimary,
       const String& deviceInstanceId);
-  bool isValidService(const String& serviceInstanceId);
+  bool IsValidService(const String& serviceInstanceId);
 
-  BluetoothRemoteGATTCharacteristic* getOrCreateRemoteGATTCharacteristic(
+  BluetoothRemoteGATTCharacteristic* GetOrCreateRemoteGATTCharacteristic(
       ExecutionContext*,
       mojom::blink::WebBluetoothRemoteGATTCharacteristicPtr,
       BluetoothRemoteGATTService*);
-  bool isValidCharacteristic(const String& characteristicInstanceId);
+  bool IsValidCharacteristic(const String& characteristicInstanceId);
 
-  BluetoothRemoteGATTDescriptor* getOrCreateBluetoothRemoteGATTDescriptor(
+  BluetoothRemoteGATTDescriptor* GetOrCreateBluetoothRemoteGATTDescriptor(
       mojom::blink::WebBluetoothRemoteGATTDescriptorPtr,
       BluetoothRemoteGATTCharacteristic*);
-  bool isValidDescriptor(const String& descriptorInstanceId);
+  bool IsValidDescriptor(const String& descriptorInstanceId);
 
   // We should disconnect from the device in all of the following cases:
   // 1. When the object gets GarbageCollected e.g. it went out of scope.
@@ -74,7 +74,7 @@
 
   // USING_PRE_FINALIZER interface.
   // Called before the object gets garbage collected.
-  void dispose();
+  void Dispose();
 
   // ContextLifecycleObserver interface.
   void contextDestroyed(ExecutionContext*) override;
@@ -83,17 +83,17 @@
   // This function only performs the necessary steps to ensure a device
   // disconnects therefore it should only be used when the object is being
   // garbage collected or the context is being destroyed.
-  void disconnectGATTIfConnected();
+  void DisconnectGATTIfConnected();
 
   // Performs necessary cleanup when a device disconnects and fires
   // gattserverdisconnected event.
-  void cleanupDisconnectedDeviceAndFireEvent();
+  void CleanupDisconnectedDeviceAndFireEvent();
 
   // EventTarget methods:
   const AtomicString& interfaceName() const override;
   ExecutionContext* getExecutionContext() const override;
 
-  void dispatchGattServerDisconnected();
+  void DispatchGattServerDisconnected();
 
   Bluetooth* bluetooth() { return m_bluetooth; }
 
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothError.cpp b/third_party/WebKit/Source/modules/bluetooth/BluetoothError.cpp
index c09a7e9..780c576 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothError.cpp
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothError.cpp
@@ -18,7 +18,7 @@
 }  // namespace
 
 // static
-DOMException* BluetoothError::createNotConnectedException(
+DOMException* BluetoothError::CreateNotConnectedException(
     BluetoothOperation operation) {
   const char* operationString = nullptr;
   switch (operation) {
@@ -42,7 +42,7 @@
 }
 
 // static
-DOMException* BluetoothError::createDOMException(
+DOMException* BluetoothError::CreateDOMException(
     BluetoothErrorCode error,
     const String& detailedMessage) {
   switch (error) {
@@ -60,7 +60,7 @@
 }
 
 // static
-DOMException* BluetoothError::createDOMException(
+DOMException* BluetoothError::CreateDOMException(
     mojom::blink::WebBluetoothResult error) {
   switch (error) {
     case mojom::blink::WebBluetoothResult::SUCCESS:
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothError.h b/third_party/WebKit/Source/modules/bluetooth/BluetoothError.h
index 1e3f9075..c7da2788 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothError.h
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothError.h
@@ -38,11 +38,11 @@
   STATIC_ONLY(BluetoothError);
 
  public:
-  static DOMException* createNotConnectedException(BluetoothOperation);
-  static DOMException* createDOMException(BluetoothErrorCode,
+  static DOMException* CreateNotConnectedException(BluetoothOperation);
+  static DOMException* CreateDOMException(BluetoothErrorCode,
                                           const String& detailedMessage);
 
-  static DOMException* createDOMException(
+  static DOMException* CreateDOMException(
       mojom::blink::WebBluetoothResult error);
 };
 
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.cpp b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.cpp
index 03f5795f..1c38600 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.cpp
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.cpp
@@ -34,10 +34,10 @@
       m_stopped(false),
       m_device(device) {
   m_properties =
-      BluetoothCharacteristicProperties::create(m_characteristic->properties);
+      BluetoothCharacteristicProperties::Create(m_characteristic->properties);
 }
 
-BluetoothRemoteGATTCharacteristic* BluetoothRemoteGATTCharacteristic::create(
+BluetoothRemoteGATTCharacteristic* BluetoothRemoteGATTCharacteristic::Create(
     ExecutionContext* context,
     mojom::blink::WebBluetoothRemoteGATTCharacteristicPtr characteristic,
     BluetoothRemoteGATTService* service,
@@ -46,30 +46,30 @@
       context, std::move(characteristic), service, device);
 }
 
-void BluetoothRemoteGATTCharacteristic::setValue(DOMDataView* domDataView) {
+void BluetoothRemoteGATTCharacteristic::SetValue(DOMDataView* domDataView) {
   m_value = domDataView;
 }
 
-void BluetoothRemoteGATTCharacteristic::dispatchCharacteristicValueChanged(
+void BluetoothRemoteGATTCharacteristic::DispatchCharacteristicValueChanged(
     const Vector<uint8_t>& value) {
-  if (!getGatt()->connected())
+  if (!GetGatt()->connected())
     return;
-  this->setValue(BluetoothRemoteGATTUtils::ConvertWTFVectorToDataView(value));
+  this->SetValue(BluetoothRemoteGATTUtils::ConvertWTFVectorToDataView(value));
   dispatchEvent(Event::create(EventTypeNames::characteristicvaluechanged));
 }
 
 void BluetoothRemoteGATTCharacteristic::contextDestroyed(ExecutionContext*) {
-  notifyCharacteristicObjectRemoved();
+  NotifyCharacteristicObjectRemoved();
 }
 
-void BluetoothRemoteGATTCharacteristic::dispose() {
-  notifyCharacteristicObjectRemoved();
+void BluetoothRemoteGATTCharacteristic::Dispose() {
+  NotifyCharacteristicObjectRemoved();
 }
 
-void BluetoothRemoteGATTCharacteristic::notifyCharacteristicObjectRemoved() {
+void BluetoothRemoteGATTCharacteristic::NotifyCharacteristicObjectRemoved() {
   if (!m_stopped) {
     m_stopped = true;
-    m_device->bluetooth()->characteristicObjectRemoved(
+    m_device->bluetooth()->CharacteristicObjectRemoved(
         m_characteristic->instance_id);
   }
 }
@@ -91,7 +91,7 @@
   // We will also need to unregister a characteristic once all the event
   // listeners have been removed. See http://crbug.com/541390
   if (eventType == EventTypeNames::characteristicvaluechanged) {
-    m_device->bluetooth()->registerCharacteristicObject(
+    m_device->bluetooth()->RegisterCharacteristicObject(
         m_characteristic->instance_id, this);
   }
 }
@@ -105,9 +105,9 @@
     return;
 
   // If the device is disconnected, reject.
-  if (!getGatt()->RemoveFromActiveAlgorithms(resolver)) {
+  if (!GetGatt()->RemoveFromActiveAlgorithms(resolver)) {
     resolver->reject(
-        BluetoothError::createNotConnectedException(BluetoothOperation::GATT));
+        BluetoothError::CreateNotConnectedException(BluetoothOperation::GATT));
     return;
   }
 
@@ -115,32 +115,32 @@
     DCHECK(value);
     DOMDataView* domDataView =
         BluetoothRemoteGATTUtils::ConvertWTFVectorToDataView(value.value());
-    setValue(domDataView);
+    SetValue(domDataView);
     resolver->resolve(domDataView);
   } else {
-    resolver->reject(BluetoothError::createDOMException(result));
+    resolver->reject(BluetoothError::CreateDOMException(result));
   }
 }
 
 ScriptPromise BluetoothRemoteGATTCharacteristic::readValue(
     ScriptState* scriptState) {
-  if (!getGatt()->connected()) {
+  if (!GetGatt()->connected()) {
     return ScriptPromise::rejectWithDOMException(
         scriptState,
-        BluetoothError::createNotConnectedException(BluetoothOperation::GATT));
+        BluetoothError::CreateNotConnectedException(BluetoothOperation::GATT));
   }
 
-  if (!getGatt()->device()->isValidCharacteristic(
+  if (!GetGatt()->device()->IsValidCharacteristic(
           m_characteristic->instance_id)) {
     return ScriptPromise::rejectWithDOMException(
-        scriptState, createInvalidCharacteristicError());
+        scriptState, CreateInvalidCharacteristicError());
   }
 
   ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
   ScriptPromise promise = resolver->promise();
-  getGatt()->AddToActiveAlgorithms(resolver);
+  GetGatt()->AddToActiveAlgorithms(resolver);
 
-  mojom::blink::WebBluetoothService* service = m_device->bluetooth()->service();
+  mojom::blink::WebBluetoothService* service = m_device->bluetooth()->Service();
   service->RemoteCharacteristicReadValue(
       m_characteristic->instance_id,
       convertToBaseCallback(
@@ -159,33 +159,33 @@
     return;
 
   // If the device is disconnected, reject.
-  if (!getGatt()->RemoveFromActiveAlgorithms(resolver)) {
+  if (!GetGatt()->RemoveFromActiveAlgorithms(resolver)) {
     resolver->reject(
-        BluetoothError::createNotConnectedException(BluetoothOperation::GATT));
+        BluetoothError::CreateNotConnectedException(BluetoothOperation::GATT));
     return;
   }
 
   if (result == mojom::blink::WebBluetoothResult::SUCCESS) {
-    setValue(BluetoothRemoteGATTUtils::ConvertWTFVectorToDataView(value));
+    SetValue(BluetoothRemoteGATTUtils::ConvertWTFVectorToDataView(value));
     resolver->resolve();
   } else {
-    resolver->reject(BluetoothError::createDOMException(result));
+    resolver->reject(BluetoothError::CreateDOMException(result));
   }
 }
 
 ScriptPromise BluetoothRemoteGATTCharacteristic::writeValue(
     ScriptState* scriptState,
     const DOMArrayPiece& value) {
-  if (!getGatt()->connected()) {
+  if (!GetGatt()->connected()) {
     return ScriptPromise::rejectWithDOMException(
         scriptState,
-        BluetoothError::createNotConnectedException(BluetoothOperation::GATT));
+        BluetoothError::CreateNotConnectedException(BluetoothOperation::GATT));
   }
 
-  if (!getGatt()->device()->isValidCharacteristic(
+  if (!GetGatt()->device()->IsValidCharacteristic(
           m_characteristic->instance_id)) {
     return ScriptPromise::rejectWithDOMException(
-        scriptState, createInvalidCharacteristicError());
+        scriptState, CreateInvalidCharacteristicError());
   }
 
   // Partial implementation of writeValue algorithm:
@@ -205,9 +205,9 @@
 
   ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
   ScriptPromise promise = resolver->promise();
-  getGatt()->AddToActiveAlgorithms(resolver);
+  GetGatt()->AddToActiveAlgorithms(resolver);
 
-  mojom::blink::WebBluetoothService* service = m_device->bluetooth()->service();
+  mojom::blink::WebBluetoothService* service = m_device->bluetooth()->Service();
   service->RemoteCharacteristicWriteValue(
       m_characteristic->instance_id, valueVector,
       convertToBaseCallback(WTF::bind(
@@ -225,38 +225,38 @@
     return;
 
   // If the device is disconnected, reject.
-  if (!getGatt()->RemoveFromActiveAlgorithms(resolver)) {
+  if (!GetGatt()->RemoveFromActiveAlgorithms(resolver)) {
     resolver->reject(
-        BluetoothError::createNotConnectedException(BluetoothOperation::GATT));
+        BluetoothError::CreateNotConnectedException(BluetoothOperation::GATT));
     return;
   }
 
   if (result == mojom::blink::WebBluetoothResult::SUCCESS) {
     resolver->resolve(this);
   } else {
-    resolver->reject(BluetoothError::createDOMException(result));
+    resolver->reject(BluetoothError::CreateDOMException(result));
   }
 }
 
 ScriptPromise BluetoothRemoteGATTCharacteristic::startNotifications(
     ScriptState* scriptState) {
-  if (!getGatt()->connected()) {
+  if (!GetGatt()->connected()) {
     return ScriptPromise::rejectWithDOMException(
         scriptState,
-        BluetoothError::createNotConnectedException(BluetoothOperation::GATT));
+        BluetoothError::CreateNotConnectedException(BluetoothOperation::GATT));
   }
 
-  if (!getGatt()->device()->isValidCharacteristic(
+  if (!GetGatt()->device()->IsValidCharacteristic(
           m_characteristic->instance_id)) {
     return ScriptPromise::rejectWithDOMException(
-        scriptState, createInvalidCharacteristicError());
+        scriptState, CreateInvalidCharacteristicError());
   }
 
   ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
   ScriptPromise promise = resolver->promise();
-  getGatt()->AddToActiveAlgorithms(resolver);
+  GetGatt()->AddToActiveAlgorithms(resolver);
 
-  mojom::blink::WebBluetoothService* service = m_device->bluetooth()->service();
+  mojom::blink::WebBluetoothService* service = m_device->bluetooth()->Service();
   service->RemoteCharacteristicStartNotifications(
       m_characteristic->instance_id,
       convertToBaseCallback(
@@ -268,23 +268,23 @@
 
 ScriptPromise BluetoothRemoteGATTCharacteristic::stopNotifications(
     ScriptState* scriptState) {
-  if (!getGatt()->connected()) {
+  if (!GetGatt()->connected()) {
     return ScriptPromise::rejectWithDOMException(
         scriptState,
-        BluetoothError::createNotConnectedException(BluetoothOperation::GATT));
+        BluetoothError::CreateNotConnectedException(BluetoothOperation::GATT));
   }
 
-  if (!getGatt()->device()->isValidCharacteristic(
+  if (!GetGatt()->device()->IsValidCharacteristic(
           m_characteristic->instance_id)) {
     return ScriptPromise::rejectWithDOMException(
-        scriptState, createInvalidCharacteristicError());
+        scriptState, CreateInvalidCharacteristicError());
   }
 
   ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
   ScriptPromise promise = resolver->promise();
-  getGatt()->AddToActiveAlgorithms(resolver);
+  GetGatt()->AddToActiveAlgorithms(resolver);
 
-  mojom::blink::WebBluetoothService* service = m_device->bluetooth()->service();
+  mojom::blink::WebBluetoothService* service = m_device->bluetooth()->Service();
   service->RemoteCharacteristicStopNotifications(
       m_characteristic->instance_id,
       convertToBaseCallback(
@@ -303,7 +303,7 @@
   if (exceptionState.hadException())
     return exceptionState.reject(scriptState);
 
-  return getDescriptorsImpl(scriptState,
+  return GetDescriptorsImpl(scriptState,
                             mojom::blink::WebBluetoothGATTQueryQuantity::SINGLE,
                             descriptor);
 }
@@ -311,7 +311,7 @@
 ScriptPromise BluetoothRemoteGATTCharacteristic::getDescriptors(
     ScriptState* scriptState,
     ExceptionState&) {
-  return getDescriptorsImpl(
+  return GetDescriptorsImpl(
       scriptState, mojom::blink::WebBluetoothGATTQueryQuantity::MULTIPLE);
 }
 
@@ -324,32 +324,32 @@
   if (exceptionState.hadException())
     return exceptionState.reject(scriptState);
 
-  return getDescriptorsImpl(
+  return GetDescriptorsImpl(
       scriptState, mojom::blink::WebBluetoothGATTQueryQuantity::MULTIPLE,
       descriptor);
 }
 
-ScriptPromise BluetoothRemoteGATTCharacteristic::getDescriptorsImpl(
+ScriptPromise BluetoothRemoteGATTCharacteristic::GetDescriptorsImpl(
     ScriptState* scriptState,
     mojom::blink::WebBluetoothGATTQueryQuantity quantity,
     const String& descriptorsUUID) {
-  if (!getGatt()->connected()) {
+  if (!GetGatt()->connected()) {
     return ScriptPromise::rejectWithDOMException(
-        scriptState, BluetoothError::createNotConnectedException(
+        scriptState, BluetoothError::CreateNotConnectedException(
                          BluetoothOperation::DescriptorsRetrieval));
   }
 
-  if (!getGatt()->device()->isValidCharacteristic(
+  if (!GetGatt()->device()->IsValidCharacteristic(
           m_characteristic->instance_id)) {
     return ScriptPromise::rejectWithDOMException(
-        scriptState, createInvalidCharacteristicError());
+        scriptState, CreateInvalidCharacteristicError());
   }
 
   ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
   ScriptPromise promise = resolver->promise();
-  getGatt()->AddToActiveAlgorithms(resolver);
+  GetGatt()->AddToActiveAlgorithms(resolver);
 
-  mojom::blink::WebBluetoothService* service = m_device->bluetooth()->service();
+  mojom::blink::WebBluetoothService* service = m_device->bluetooth()->Service();
   service->RemoteCharacteristicGetDescriptors(
       m_characteristic->instance_id, quantity, descriptorsUUID,
       convertToBaseCallback(WTF::bind(
@@ -376,7 +376,7 @@
 
   // If the device is disconnected, reject.
   if (!m_service->device()->gatt()->RemoveFromActiveAlgorithms(resolver)) {
-    resolver->reject(BluetoothError::createNotConnectedException(
+    resolver->reject(BluetoothError::CreateNotConnectedException(
         BluetoothOperation::DescriptorsRetrieval));
     return;
   }
@@ -387,7 +387,7 @@
     if (quantity == mojom::blink::WebBluetoothGATTQueryQuantity::SINGLE) {
       DCHECK_EQ(1u, descriptors->size());
       resolver->resolve(
-          m_service->device()->getOrCreateBluetoothRemoteGATTDescriptor(
+          m_service->device()->GetOrCreateBluetoothRemoteGATTDescriptor(
               std::move(descriptors.value()[0]), this));
       return;
     }
@@ -396,25 +396,25 @@
     gattDescriptors.reserveInitialCapacity(descriptors->size());
     for (auto& descriptor : descriptors.value()) {
       gattDescriptors.push_back(
-          m_service->device()->getOrCreateBluetoothRemoteGATTDescriptor(
+          m_service->device()->GetOrCreateBluetoothRemoteGATTDescriptor(
               std::move(descriptor), this));
     }
     resolver->resolve(gattDescriptors);
   } else {
     if (result == mojom::blink::WebBluetoothResult::DESCRIPTOR_NOT_FOUND) {
-      resolver->reject(BluetoothError::createDOMException(
+      resolver->reject(BluetoothError::CreateDOMException(
           BluetoothErrorCode::DescriptorNotFound,
           "No Descriptors matching UUID " + requestedDescriptorUUID +
               " found in Characteristic with UUID " + uuid() + "."));
     } else {
-      resolver->reject(BluetoothError::createDOMException(result));
+      resolver->reject(BluetoothError::CreateDOMException(result));
     }
   }
 }
 
 DOMException*
-BluetoothRemoteGATTCharacteristic::createInvalidCharacteristicError() {
-  return BluetoothError::createDOMException(
+BluetoothRemoteGATTCharacteristic::CreateInvalidCharacteristicError() {
+  return BluetoothError::CreateDOMException(
       BluetoothErrorCode::InvalidCharacteristic,
       "Characteristic with UUID " + uuid() +
           " is no longer valid. Remember to retrieve the characteristic again "
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.h b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.h
index ca7efb1..4f4e831 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.h
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.h
@@ -35,7 +35,7 @@
 class BluetoothRemoteGATTCharacteristic final
     : public EventTargetWithInlineData,
       public ContextLifecycleObserver {
-  USING_PRE_FINALIZER(BluetoothRemoteGATTCharacteristic, dispose);
+  USING_PRE_FINALIZER(BluetoothRemoteGATTCharacteristic, Dispose);
   DEFINE_WRAPPERTYPEINFO();
   USING_GARBAGE_COLLECTED_MIXIN(BluetoothRemoteGATTCharacteristic);
 
@@ -46,27 +46,27 @@
       BluetoothRemoteGATTService*,
       BluetoothDevice*);
 
-  static BluetoothRemoteGATTCharacteristic* create(
+  static BluetoothRemoteGATTCharacteristic* Create(
       ExecutionContext*,
       mojom::blink::WebBluetoothRemoteGATTCharacteristicPtr,
       BluetoothRemoteGATTService*,
       BluetoothDevice*);
 
   // Save value.
-  void setValue(DOMDataView*);
+  void SetValue(DOMDataView*);
 
-  void dispatchCharacteristicValueChanged(const Vector<uint8_t>& value);
+  void DispatchCharacteristicValueChanged(const Vector<uint8_t>& value);
 
   // ContextLifecycleObserver interface.
   void contextDestroyed(ExecutionContext*) override;
 
   // USING_PRE_FINALIZER interface.
   // Called before the object gets garbage collected.
-  void dispose();
+  void Dispose();
 
   // Notify our embedder that we should stop any notifications.
   // The function only notifies the embedder once.
-  void notifyCharacteristicObjectRemoved();
+  void NotifyCharacteristicObjectRemoved();
 
   // EventTarget methods:
   const AtomicString& interfaceName() const override;
@@ -102,7 +102,7 @@
  private:
   friend class BluetoothRemoteGATTDescriptor;
 
-  BluetoothRemoteGATTServer* getGatt() { return m_service->device()->gatt(); }
+  BluetoothRemoteGATTServer* GetGatt() { return m_service->device()->gatt(); }
 
   void ReadValueCallback(ScriptPromiseResolver*,
                          mojom::blink::WebBluetoothResult,
@@ -113,7 +113,7 @@
   void NotificationsCallback(ScriptPromiseResolver*,
                              mojom::blink::WebBluetoothResult);
 
-  ScriptPromise getDescriptorsImpl(ScriptState*,
+  ScriptPromise GetDescriptorsImpl(ScriptState*,
                                    mojom::blink::WebBluetoothGATTQueryQuantity,
                                    const String& descriptorUUID = String());
 
@@ -126,7 +126,7 @@
       Optional<Vector<mojom::blink::WebBluetoothRemoteGATTDescriptorPtr>>
           descriptors);
 
-  DOMException* createInvalidCharacteristicError();
+  DOMException* CreateInvalidCharacteristicError();
 
   mojom::blink::WebBluetoothRemoteGATTCharacteristicPtr m_characteristic;
   Member<BluetoothRemoteGATTService> m_service;
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTDescriptor.cpp b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTDescriptor.cpp
index d6a72b3..738be8cb 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTDescriptor.cpp
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTDescriptor.cpp
@@ -19,7 +19,7 @@
     BluetoothRemoteGATTCharacteristic* characteristic)
     : m_descriptor(std::move(descriptor)), m_characteristic(characteristic) {}
 
-BluetoothRemoteGATTDescriptor* BluetoothRemoteGATTDescriptor::create(
+BluetoothRemoteGATTDescriptor* BluetoothRemoteGATTDescriptor::Create(
     mojom::blink::WebBluetoothRemoteGATTDescriptorPtr descriptor,
 
     BluetoothRemoteGATTCharacteristic* characteristic) {
@@ -37,9 +37,9 @@
     return;
 
   // If the device is disconnected, reject.
-  if (!getGatt()->RemoveFromActiveAlgorithms(resolver)) {
+  if (!GetGatt()->RemoveFromActiveAlgorithms(resolver)) {
     resolver->reject(
-        BluetoothError::createNotConnectedException(BluetoothOperation::GATT));
+        BluetoothError::CreateNotConnectedException(BluetoothOperation::GATT));
     return;
   }
 
@@ -50,27 +50,27 @@
     m_value = domDataView;
     resolver->resolve(domDataView);
   } else {
-    resolver->reject(BluetoothError::createDOMException(result));
+    resolver->reject(BluetoothError::CreateDOMException(result));
   }
 }
 
 ScriptPromise BluetoothRemoteGATTDescriptor::readValue(
     ScriptState* scriptState) {
-  if (!getGatt()->connected()) {
+  if (!GetGatt()->connected()) {
     return ScriptPromise::rejectWithDOMException(
         scriptState,
-        BluetoothError::createNotConnectedException(BluetoothOperation::GATT));
+        BluetoothError::CreateNotConnectedException(BluetoothOperation::GATT));
   }
 
-  if (!getGatt()->device()->isValidDescriptor(m_descriptor->instance_id)) {
+  if (!GetGatt()->device()->IsValidDescriptor(m_descriptor->instance_id)) {
     return ScriptPromise::rejectWithDOMException(
-        scriptState, createInvalidDescriptorError());
+        scriptState, CreateInvalidDescriptorError());
   }
 
   ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
   ScriptPromise promise = resolver->promise();
-  getGatt()->AddToActiveAlgorithms(resolver);
-  getService()->RemoteDescriptorReadValue(
+  GetGatt()->AddToActiveAlgorithms(resolver);
+  GetService()->RemoteDescriptorReadValue(
       m_descriptor->instance_id,
       convertToBaseCallback(
           WTF::bind(&BluetoothRemoteGATTDescriptor::ReadValueCallback,
@@ -89,9 +89,9 @@
 
   // If the resolver is not in the set of ActiveAlgorithms then the frame
   // disconnected so we reject.
-  if (!getGatt()->RemoveFromActiveAlgorithms(resolver)) {
+  if (!GetGatt()->RemoveFromActiveAlgorithms(resolver)) {
     resolver->reject(
-        BluetoothError::createNotConnectedException(BluetoothOperation::GATT));
+        BluetoothError::CreateNotConnectedException(BluetoothOperation::GATT));
     return;
   }
 
@@ -99,22 +99,22 @@
     m_value = BluetoothRemoteGATTUtils::ConvertWTFVectorToDataView(value);
     resolver->resolve();
   } else {
-    resolver->reject(BluetoothError::createDOMException(result));
+    resolver->reject(BluetoothError::CreateDOMException(result));
   }
 }
 
 ScriptPromise BluetoothRemoteGATTDescriptor::writeValue(
     ScriptState* scriptState,
     const DOMArrayPiece& value) {
-  if (!getGatt()->connected()) {
+  if (!GetGatt()->connected()) {
     return ScriptPromise::rejectWithDOMException(
         scriptState,
-        BluetoothError::createNotConnectedException(BluetoothOperation::GATT));
+        BluetoothError::CreateNotConnectedException(BluetoothOperation::GATT));
   }
 
-  if (!getGatt()->device()->isValidDescriptor(m_descriptor->instance_id)) {
+  if (!GetGatt()->device()->IsValidDescriptor(m_descriptor->instance_id)) {
     return ScriptPromise::rejectWithDOMException(
-        scriptState, createInvalidDescriptorError());
+        scriptState, CreateInvalidDescriptorError());
   }
 
   // Partial implementation of writeValue algorithm:
@@ -135,8 +135,8 @@
 
   ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
   ScriptPromise promise = resolver->promise();
-  getGatt()->AddToActiveAlgorithms(resolver);
-  getService()->RemoteDescriptorWriteValue(
+  GetGatt()->AddToActiveAlgorithms(resolver);
+  GetService()->RemoteDescriptorWriteValue(
       m_descriptor->instance_id, valueVector,
       convertToBaseCallback(WTF::bind(
           &BluetoothRemoteGATTDescriptor::WriteValueCallback,
@@ -145,8 +145,8 @@
   return promise;
 }
 
-DOMException* BluetoothRemoteGATTDescriptor::createInvalidDescriptorError() {
-  return BluetoothError::createDOMException(
+DOMException* BluetoothRemoteGATTDescriptor::CreateInvalidDescriptorError() {
+  return BluetoothError::CreateDOMException(
       BluetoothErrorCode::InvalidDescriptor,
       "Descriptor with UUID " + uuid() +
           " is no longer valid. Remember to retrieve the Descriptor again "
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTDescriptor.h b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTDescriptor.h
index 289fefd..c73492b 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTDescriptor.h
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTDescriptor.h
@@ -35,7 +35,7 @@
       mojom::blink::WebBluetoothRemoteGATTDescriptorPtr,
       BluetoothRemoteGATTCharacteristic*);
 
-  static BluetoothRemoteGATTDescriptor* create(
+  static BluetoothRemoteGATTDescriptor* Create(
       mojom::blink::WebBluetoothRemoteGATTDescriptorPtr,
       BluetoothRemoteGATTCharacteristic*);
 
@@ -54,9 +54,9 @@
  private:
   friend class DescriptorReadValueCallback;
 
-  BluetoothRemoteGATTServer* getGatt() { return m_characteristic->getGatt(); }
-  mojom::blink::WebBluetoothService* getService() {
-    return m_characteristic->m_device->bluetooth()->service();
+  BluetoothRemoteGATTServer* GetGatt() { return m_characteristic->GetGatt(); }
+  mojom::blink::WebBluetoothService* GetService() {
+    return m_characteristic->m_device->bluetooth()->Service();
   }
 
   void ReadValueCallback(ScriptPromiseResolver*,
@@ -67,7 +67,7 @@
                           const Vector<uint8_t>&,
                           mojom::blink::WebBluetoothResult);
 
-  DOMException* createInvalidDescriptorError();
+  DOMException* CreateInvalidDescriptorError();
 
   mojom::blink::WebBluetoothRemoteGATTDescriptorPtr m_descriptor;
   Member<BluetoothRemoteGATTCharacteristic> m_characteristic;
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTServer.cpp b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTServer.cpp
index b2f37308..8aca52e 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTServer.cpp
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTServer.cpp
@@ -22,7 +22,7 @@
 BluetoothRemoteGATTServer::BluetoothRemoteGATTServer(BluetoothDevice* device)
     : m_device(device), m_connected(false) {}
 
-BluetoothRemoteGATTServer* BluetoothRemoteGATTServer::create(
+BluetoothRemoteGATTServer* BluetoothRemoteGATTServer::Create(
     BluetoothDevice* device) {
   return new BluetoothRemoteGATTServer(device);
 }
@@ -55,11 +55,11 @@
     return;
 
   if (result == mojom::blink::WebBluetoothResult::SUCCESS) {
-    m_device->bluetooth()->addToConnectedDevicesMap(m_device->id(), m_device);
-    setConnected(true);
+    m_device->bluetooth()->AddToConnectedDevicesMap(m_device->id(), m_device);
+    SetConnected(true);
     resolver->resolve(this);
   } else {
-    resolver->reject(BluetoothError::createDOMException(result));
+    resolver->reject(BluetoothError::CreateDOMException(result));
   }
 }
 
@@ -67,7 +67,7 @@
   ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
   ScriptPromise promise = resolver->promise();
 
-  mojom::blink::WebBluetoothService* service = m_device->bluetooth()->service();
+  mojom::blink::WebBluetoothService* service = m_device->bluetooth()->Service();
   service->RemoteServerConnect(
       m_device->id(), convertToBaseCallback(WTF::bind(
                           &BluetoothRemoteGATTServer::ConnectCallback,
@@ -79,9 +79,9 @@
 void BluetoothRemoteGATTServer::disconnect(ScriptState* scriptState) {
   if (!m_connected)
     return;
-  m_device->cleanupDisconnectedDeviceAndFireEvent();
-  m_device->bluetooth()->removeFromConnectedDevicesMap(m_device->id());
-  mojom::blink::WebBluetoothService* service = m_device->bluetooth()->service();
+  m_device->CleanupDisconnectedDeviceAndFireEvent();
+  m_device->bluetooth()->RemoveFromConnectedDevicesMap(m_device->id());
+  mojom::blink::WebBluetoothService* service = m_device->bluetooth()->Service();
   service->RemoteServerDisconnect(m_device->id());
 }
 
@@ -99,7 +99,7 @@
 
   // If the device is disconnected, reject.
   if (!RemoveFromActiveAlgorithms(resolver)) {
-    resolver->reject(BluetoothError::createNotConnectedException(
+    resolver->reject(BluetoothError::CreateNotConnectedException(
         BluetoothOperation::ServicesRetrieval));
     return;
   }
@@ -109,7 +109,7 @@
 
     if (quantity == mojom::blink::WebBluetoothGATTQueryQuantity::SINGLE) {
       DCHECK_EQ(1u, services->size());
-      resolver->resolve(m_device->getOrCreateRemoteGATTService(
+      resolver->resolve(m_device->GetOrCreateRemoteGATTService(
           std::move(services.value()[0]), true /* isPrimary */,
           m_device->id()));
       return;
@@ -119,18 +119,18 @@
     gattServices.reserveInitialCapacity(services->size());
 
     for (auto& service : services.value()) {
-      gattServices.push_back(m_device->getOrCreateRemoteGATTService(
+      gattServices.push_back(m_device->GetOrCreateRemoteGATTService(
           std::move(service), true /* isPrimary */, m_device->id()));
     }
     resolver->resolve(gattServices);
   } else {
     if (result == mojom::blink::WebBluetoothResult::SERVICE_NOT_FOUND) {
-      resolver->reject(BluetoothError::createDOMException(
+      resolver->reject(BluetoothError::CreateDOMException(
           BluetoothErrorCode::ServiceNotFound, "No Services matching UUID " +
                                                    requestedServiceUUID +
                                                    " found in Device."));
     } else {
-      resolver->reject(BluetoothError::createDOMException(result));
+      resolver->reject(BluetoothError::CreateDOMException(result));
     }
   }
 }
@@ -143,7 +143,7 @@
   if (exceptionState.hadException())
     return exceptionState.reject(scriptState);
 
-  return getPrimaryServicesImpl(
+  return GetPrimaryServicesImpl(
       scriptState, mojom::blink::WebBluetoothGATTQueryQuantity::SINGLE,
       serviceUUID);
 }
@@ -156,7 +156,7 @@
   if (exceptionState.hadException())
     return exceptionState.reject(scriptState);
 
-  return getPrimaryServicesImpl(
+  return GetPrimaryServicesImpl(
       scriptState, mojom::blink::WebBluetoothGATTQueryQuantity::MULTIPLE,
       serviceUUID);
 }
@@ -164,17 +164,17 @@
 ScriptPromise BluetoothRemoteGATTServer::getPrimaryServices(
     ScriptState* scriptState,
     ExceptionState&) {
-  return getPrimaryServicesImpl(
+  return GetPrimaryServicesImpl(
       scriptState, mojom::blink::WebBluetoothGATTQueryQuantity::MULTIPLE);
 }
 
-ScriptPromise BluetoothRemoteGATTServer::getPrimaryServicesImpl(
+ScriptPromise BluetoothRemoteGATTServer::GetPrimaryServicesImpl(
     ScriptState* scriptState,
     mojom::blink::WebBluetoothGATTQueryQuantity quantity,
     String servicesUUID) {
   if (!m_connected) {
     return ScriptPromise::rejectWithDOMException(
-        scriptState, BluetoothError::createNotConnectedException(
+        scriptState, BluetoothError::CreateNotConnectedException(
                          BluetoothOperation::ServicesRetrieval));
   }
 
@@ -182,7 +182,7 @@
   ScriptPromise promise = resolver->promise();
   AddToActiveAlgorithms(resolver);
 
-  mojom::blink::WebBluetoothService* service = m_device->bluetooth()->service();
+  mojom::blink::WebBluetoothService* service = m_device->bluetooth()->Service();
   service->RemoteServerGetPrimaryServices(
       m_device->id(), quantity, servicesUUID,
       convertToBaseCallback(
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTServer.h b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTServer.h
index 7379ad6..805e50a 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTServer.h
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTServer.h
@@ -29,9 +29,9 @@
  public:
   BluetoothRemoteGATTServer(BluetoothDevice*);
 
-  static BluetoothRemoteGATTServer* create(BluetoothDevice*);
+  static BluetoothRemoteGATTServer* Create(BluetoothDevice*);
 
-  void setConnected(bool connected) { m_connected = connected; }
+  void SetConnected(bool connected) { m_connected = connected; }
 
   // The Active Algorithms set is maintained so that disconnection, i.e.
   // disconnect() method or the device disconnecting by itself, can be detected
@@ -64,7 +64,7 @@
   ScriptPromise getPrimaryServices(ScriptState*, ExceptionState&);
 
  private:
-  ScriptPromise getPrimaryServicesImpl(
+  ScriptPromise GetPrimaryServicesImpl(
       ScriptState*,
       mojom::blink::WebBluetoothGATTQueryQuantity,
       String serviceUUID = String());
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.cpp b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.cpp
index 31837a08..0975449e 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.cpp
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.cpp
@@ -48,7 +48,7 @@
 
   // If the device is disconnected, reject.
   if (!m_device->gatt()->RemoveFromActiveAlgorithms(resolver)) {
-    resolver->reject(BluetoothError::createNotConnectedException(
+    resolver->reject(BluetoothError::CreateNotConnectedException(
         BluetoothOperation::CharacteristicsRetrieval));
     return;
   }
@@ -58,7 +58,7 @@
 
     if (quantity == mojom::blink::WebBluetoothGATTQueryQuantity::SINGLE) {
       DCHECK_EQ(1u, characteristics->size());
-      resolver->resolve(m_device->getOrCreateRemoteGATTCharacteristic(
+      resolver->resolve(m_device->GetOrCreateRemoteGATTCharacteristic(
           resolver->getExecutionContext(),
           std::move(characteristics.value()[0]), this));
       return;
@@ -68,19 +68,19 @@
     gattCharacteristics.reserveInitialCapacity(characteristics->size());
     for (auto& characteristic : characteristics.value()) {
       gattCharacteristics.push_back(
-          m_device->getOrCreateRemoteGATTCharacteristic(
+          m_device->GetOrCreateRemoteGATTCharacteristic(
               resolver->getExecutionContext(), std::move(characteristic),
               this));
     }
     resolver->resolve(gattCharacteristics);
   } else {
     if (result == mojom::blink::WebBluetoothResult::CHARACTERISTIC_NOT_FOUND) {
-      resolver->reject(BluetoothError::createDOMException(
+      resolver->reject(BluetoothError::CreateDOMException(
           BluetoothErrorCode::CharacteristicNotFound,
           "No Characteristics matching UUID " + requestedCharacteristicUUID +
               " found in Service with UUID " + uuid() + "."));
     } else {
-      resolver->reject(BluetoothError::createDOMException(result));
+      resolver->reject(BluetoothError::CreateDOMException(result));
     }
   }
 }
@@ -94,7 +94,7 @@
   if (exceptionState.hadException())
     return exceptionState.reject(scriptState);
 
-  return getCharacteristicsImpl(
+  return GetCharacteristicsImpl(
       scriptState, mojom::blink::WebBluetoothGATTQueryQuantity::SINGLE,
       characteristicUUID);
 }
@@ -108,7 +108,7 @@
   if (exceptionState.hadException())
     return exceptionState.reject(scriptState);
 
-  return getCharacteristicsImpl(
+  return GetCharacteristicsImpl(
       scriptState, mojom::blink::WebBluetoothGATTQueryQuantity::MULTIPLE,
       characteristicUUID);
 }
@@ -116,23 +116,23 @@
 ScriptPromise BluetoothRemoteGATTService::getCharacteristics(
     ScriptState* scriptState,
     ExceptionState&) {
-  return getCharacteristicsImpl(
+  return GetCharacteristicsImpl(
       scriptState, mojom::blink::WebBluetoothGATTQueryQuantity::MULTIPLE);
 }
 
-ScriptPromise BluetoothRemoteGATTService::getCharacteristicsImpl(
+ScriptPromise BluetoothRemoteGATTService::GetCharacteristicsImpl(
     ScriptState* scriptState,
     mojom::blink::WebBluetoothGATTQueryQuantity quantity,
     const String& characteristicsUUID) {
   if (!m_device->gatt()->connected()) {
     return ScriptPromise::rejectWithDOMException(
-        scriptState, BluetoothError::createNotConnectedException(
+        scriptState, BluetoothError::CreateNotConnectedException(
                          BluetoothOperation::CharacteristicsRetrieval));
   }
 
-  if (!m_device->isValidService(m_service->instance_id)) {
+  if (!m_device->IsValidService(m_service->instance_id)) {
     return ScriptPromise::rejectWithDOMException(
-        scriptState, BluetoothError::createDOMException(
+        scriptState, BluetoothError::CreateDOMException(
                          BluetoothErrorCode::InvalidService,
                          "Service with UUID " + m_service->uuid +
                              " is no longer valid. Remember to retrieve "
@@ -143,7 +143,7 @@
   ScriptPromise promise = resolver->promise();
   m_device->gatt()->AddToActiveAlgorithms(resolver);
 
-  mojom::blink::WebBluetoothService* service = m_device->bluetooth()->service();
+  mojom::blink::WebBluetoothService* service = m_device->bluetooth()->Service();
   service->RemoteServiceGetCharacteristics(
       m_service->instance_id, quantity, characteristicsUUID,
       convertToBaseCallback(
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.h b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.h
index b3a8fcc9..aea53c0 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.h
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.h
@@ -63,7 +63,7 @@
       Optional<Vector<mojom::blink::WebBluetoothRemoteGATTCharacteristicPtr>>
           characteristics);
 
-  ScriptPromise getCharacteristicsImpl(
+  ScriptPromise GetCharacteristicsImpl(
       ScriptState*,
       mojom::blink::WebBluetoothGATTQueryQuantity,
       const String& characteristicUUID = String());
diff --git a/third_party/WebKit/Source/modules/bluetooth/NavigatorBluetooth.cpp b/third_party/WebKit/Source/modules/bluetooth/NavigatorBluetooth.cpp
index c4f5f66..94f9a5f 100644
--- a/third_party/WebKit/Source/modules/bluetooth/NavigatorBluetooth.cpp
+++ b/third_party/WebKit/Source/modules/bluetooth/NavigatorBluetooth.cpp
@@ -25,7 +25,7 @@
 
 Bluetooth* NavigatorBluetooth::bluetooth() {
   if (!m_bluetooth)
-    m_bluetooth = Bluetooth::create();
+    m_bluetooth = Bluetooth::Create();
   return m_bluetooth.get();
 }
 
diff --git a/third_party/WebKit/Source/modules/bluetooth/NavigatorBluetooth.h b/third_party/WebKit/Source/modules/bluetooth/NavigatorBluetooth.h
index e0f6c784..f6e795f 100644
--- a/third_party/WebKit/Source/modules/bluetooth/NavigatorBluetooth.h
+++ b/third_party/WebKit/Source/modules/bluetooth/NavigatorBluetooth.h
@@ -24,6 +24,8 @@
   static NavigatorBluetooth& from(Navigator&);
 
   static Bluetooth* bluetooth(Navigator&);
+
+  // IDL exposed interface:
   Bluetooth* bluetooth();
 
   DECLARE_TRACE();
diff --git a/third_party/WebKit/Source/modules/peerconnection/RTCConfiguration.idl b/third_party/WebKit/Source/modules/peerconnection/RTCConfiguration.idl
index bbe1b573..40b94d7 100644
--- a/third_party/WebKit/Source/modules/peerconnection/RTCConfiguration.idl
+++ b/third_party/WebKit/Source/modules/peerconnection/RTCConfiguration.idl
@@ -41,5 +41,5 @@
     RTCRtcpMuxPolicy rtcpMuxPolicy = "require";
     // TODO(foolip): DOMString peerIdentity;
     sequence<RTCCertificate> certificates;
-    // TODO(foolip): unsigned short iceCandidatePoolSize = 0;
+    [EnforceRange] octet iceCandidatePoolSize = 0;
 };
diff --git a/third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.cpp b/third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.cpp
index 256c5a6..3ea3bc9 100644
--- a/third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.cpp
+++ b/third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.cpp
@@ -337,6 +337,7 @@
     webConfiguration.certificates = std::move(certificatesCopy);
   }
 
+  webConfiguration.iceCandidatePoolSize = configuration.iceCandidatePoolSize();
   return webConfiguration;
 }
 
diff --git a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5 b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5
index b94dda3..736087a 100644
--- a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5
+++ b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5
@@ -877,10 +877,6 @@
       name: "TouchpadAndWheelScrollLatching",
     },
     {
-      name: "TrueColorRendering",
-      status: "experimental",
-    },
-    {
       name: "TrustedEventsDefaultAction",
       status: "stable",
     },
diff --git a/third_party/WebKit/Source/platform/graphics/BitmapImage.cpp b/third_party/WebKit/Source/platform/graphics/BitmapImage.cpp
index 2b793ebc..766cadf 100644
--- a/third_party/WebKit/Source/platform/graphics/BitmapImage.cpp
+++ b/third_party/WebKit/Source/platform/graphics/BitmapImage.cpp
@@ -47,7 +47,7 @@
 namespace {
 
 ColorBehavior defaultColorBehavior() {
-  if (RuntimeEnabledFeatures::trueColorRenderingEnabled())
+  if (RuntimeEnabledFeatures::colorCorrectRenderingEnabled())
     return ColorBehavior::tag();
   return ColorBehavior::transformToGlobalTarget();
 }
diff --git a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
index 1c59437..7350420 100644
--- a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
+++ b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
@@ -950,7 +950,7 @@
       (!m_surface ||
        m_contextProvider->contextGL()->GetGraphicsResetStatusKHR() !=
            GL_NO_ERROR);
-  DCHECK(m_mailboxes.last().m_parentLayerBridge.get() == this);
+  DCHECK(m_mailboxes.back().m_parentLayerBridge.get() == this);
 
   // Mailboxes are typically released in FIFO order, so we iterate
   // from the end of m_mailboxes.
diff --git a/third_party/WebKit/Source/platform/graphics/gpu/SharedContextRateLimiter.cpp b/third_party/WebKit/Source/platform/graphics/gpu/SharedContextRateLimiter.cpp
index 32b0ce44..3b35cbc0 100644
--- a/third_party/WebKit/Source/platform/graphics/gpu/SharedContextRateLimiter.cpp
+++ b/third_party/WebKit/Source/platform/graphics/gpu/SharedContextRateLimiter.cpp
@@ -47,9 +47,9 @@
 
   m_queries.push_back(0);
   if (m_canUseSyncQueries)
-    gl->GenQueriesEXT(1, &m_queries.last());
+    gl->GenQueriesEXT(1, &m_queries.back());
   if (m_canUseSyncQueries) {
-    gl->BeginQueryEXT(GL_COMMANDS_COMPLETED_CHROMIUM, m_queries.last());
+    gl->BeginQueryEXT(GL_COMMANDS_COMPLETED_CHROMIUM, m_queries.back());
     gl->EndQueryEXT(GL_COMMANDS_COMPLETED_CHROMIUM);
   }
   if (m_queries.size() > m_maxPendingTicks) {
diff --git a/third_party/WebKit/Source/web/LocalFrameClientImpl.cpp b/third_party/WebKit/Source/web/LocalFrameClientImpl.cpp
index bae944f..0d92d85 100644
--- a/third_party/WebKit/Source/web/LocalFrameClientImpl.cpp
+++ b/third_party/WebKit/Source/web/LocalFrameClientImpl.cpp
@@ -413,7 +413,7 @@
 
 void LocalFrameClientImpl::dispatchWillCommitProvisionalLoad() {
   if (m_webFrame->client())
-    m_webFrame->client()->willCommitProvisionalLoad(m_webFrame);
+    m_webFrame->client()->willCommitProvisionalLoad();
 }
 
 void LocalFrameClientImpl::dispatchDidStartProvisionalLoad(
diff --git a/third_party/WebKit/Source/web/WebRuntimeFeatures.cpp b/third_party/WebKit/Source/web/WebRuntimeFeatures.cpp
index 501ab3b..0ea03be 100644
--- a/third_party/WebKit/Source/web/WebRuntimeFeatures.cpp
+++ b/third_party/WebKit/Source/web/WebRuntimeFeatures.cpp
@@ -80,10 +80,6 @@
   RuntimeEnabledFeatures::setColorCorrectRenderingDefaultModeEnabled(enable);
 }
 
-void WebRuntimeFeatures::enableTrueColorRendering(bool enable) {
-  RuntimeEnabledFeatures::setTrueColorRenderingEnabled(enable);
-}
-
 void WebRuntimeFeatures::enableCompositedSelectionUpdate(bool enable) {
   RuntimeEnabledFeatures::setCompositedSelectionUpdateEnabled(enable);
 }
diff --git a/third_party/WebKit/Source/wtf/Deque.h b/third_party/WebKit/Source/wtf/Deque.h
index 43f8559..c7c2251 100644
--- a/third_party/WebKit/Source/wtf/Deque.h
+++ b/third_party/WebKit/Source/wtf/Deque.h
@@ -99,11 +99,11 @@
   }
   T takeFirst();
 
-  T& last() {
+  T& back() {
     DCHECK_NE(m_start, m_end);
     return *(--end());
   }
-  const T& last() const {
+  const T& back() const {
     DCHECK_NE(m_start, m_end);
     return *(--end());
   }
@@ -140,8 +140,6 @@
   void pop_back();
   void pop_front();
   bool empty() const { return isEmpty(); }
-  T& back() { return last(); }
-  const T& back() const { return last(); }
   template <typename... Args>
   void emplace_back(Args&&...);
   template <typename... Args>
@@ -489,7 +487,7 @@
 
 template <typename T, size_t inlineCapacity, typename Allocator>
 inline T Deque<T, inlineCapacity, Allocator>::takeLast() {
-  T oldLast = std::move(last());
+  T oldLast = std::move(back());
   pop_back();
   return oldLast;
 }
diff --git a/third_party/WebKit/Source/wtf/DequeTest.cpp b/third_party/WebKit/Source/wtf/DequeTest.cpp
index 09dd3cc54..5a676ce1 100644
--- a/third_party/WebKit/Source/wtf/DequeTest.cpp
+++ b/third_party/WebKit/Source/wtf/DequeTest.cpp
@@ -181,7 +181,7 @@
 
   std::unique_ptr<DestructCounter>& counter0 = deque.front();
   EXPECT_EQ(0, counter0->get());
-  int counter1 = deque.last()->get();
+  int counter1 = deque.back()->get();
   EXPECT_EQ(1, counter1);
   EXPECT_EQ(0, destructNumber);
 
@@ -270,7 +270,7 @@
   EXPECT_EQ(2u, deque.size());
 
   ASSERT_EQ(1, deque.front().value());
-  ASSERT_EQ(2, deque.last().value());
+  ASSERT_EQ(2, deque.back().value());
 
   MoveOnly oldFirst = deque.takeFirst();
   ASSERT_EQ(1, oldFirst.value());
diff --git a/third_party/WebKit/public/platform/WebOriginTrialTokenStatus.h b/third_party/WebKit/public/platform/WebOriginTrialTokenStatus.h
index d4297c8..d24f0d0 100644
--- a/third_party/WebKit/public/platform/WebOriginTrialTokenStatus.h
+++ b/third_party/WebKit/public/platform/WebOriginTrialTokenStatus.h
@@ -20,7 +20,8 @@
   Malformed = 6,
   WrongVersion = 7,
   FeatureDisabled = 8,
-  Last = FeatureDisabled
+  TokenDisabled = 9,
+  Last = TokenDisabled
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/public/platform/WebRTCConfiguration.h b/third_party/WebKit/public/platform/WebRTCConfiguration.h
index cd64fb8..aa133dd 100644
--- a/third_party/WebKit/public/platform/WebRTCConfiguration.h
+++ b/third_party/WebKit/public/platform/WebRTCConfiguration.h
@@ -60,6 +60,7 @@
   WebRTCBundlePolicy bundlePolicy = WebRTCBundlePolicy::kBalanced;
   WebRTCRtcpMuxPolicy rtcpMuxPolicy = WebRTCRtcpMuxPolicy::kRequire;
   WebVector<std::unique_ptr<WebRTCCertificate>> certificates;
+  int iceCandidatePoolSize = 0;
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/public/web/WebFrameClient.h b/third_party/WebKit/public/web/WebFrameClient.h
index 9d10cea..5ba3b93 100644
--- a/third_party/WebKit/public/web/WebFrameClient.h
+++ b/third_party/WebKit/public/web/WebFrameClient.h
@@ -204,7 +204,7 @@
   virtual void frameFocused() {}
 
   // A provisional load is about to commit.
-  virtual void willCommitProvisionalLoad(WebLocalFrame*) {}
+  virtual void willCommitProvisionalLoad() {}
 
   // This frame's name has changed.
   virtual void didChangeName(const WebString& name,
diff --git a/third_party/WebKit/public/web/WebRuntimeFeatures.h b/third_party/WebKit/public/web/WebRuntimeFeatures.h
index 9e685b5b..7542919 100644
--- a/third_party/WebKit/public/web/WebRuntimeFeatures.h
+++ b/third_party/WebKit/public/web/WebRuntimeFeatures.h
@@ -140,7 +140,6 @@
   BLINK_EXPORT static void enableAutoplayMutedVideos(bool);
   BLINK_EXPORT static void enableTimerThrottlingForBackgroundTabs(bool);
   BLINK_EXPORT static void enableTimerThrottlingForHiddenFrames(bool);
-  BLINK_EXPORT static void enableTrueColorRendering(bool);
   BLINK_EXPORT static void enableExpensiveBackgroundTimerThrottling(bool);
   BLINK_EXPORT static void enableCanvas2dDynamicRenderingModeSwitching(bool);
   BLINK_EXPORT static void enableSendBeaconThrowForBlobWithNonSimpleType(bool);
diff --git a/third_party/snappy/BUILD.gn b/third_party/snappy/BUILD.gn
index 606cc9521..ab665d1 100644
--- a/third_party/snappy/BUILD.gn
+++ b/third_party/snappy/BUILD.gn
@@ -55,10 +55,4 @@
   # Chromium doesn't use automake, but we generated config.h offline for all the
   # platforms that we build for.
   defines = [ "HAVE_CONFIG_H" ]
-
-  if (is_clang) {
-    # snappy-stubs-internal.h unapologetically has: using namespace std
-    # https://code.google.com/p/snappy/issues/detail?id=70
-    configs -= [ "//build/config/clang:extra_warnings" ]
-  }
 }
diff --git a/third_party/snappy/README.chromium b/third_party/snappy/README.chromium
index 47d0696..b9808e9 100644
--- a/third_party/snappy/README.chromium
+++ b/third_party/snappy/README.chromium
@@ -11,7 +11,6 @@
 
 Local Additions:
 * gyp file for building in chromium
-  * Suppress clang header-hygiene warning - https://code.google.com/p/snappy/issues/detail?id=70
   * Suppress MSVC signed/unsigned warning - https://code.google.com/p/snappy/issues/detail?id=71
   * Suppress MSVC x64 size_t warnings - https://code.google.com/p/snappy/issues/detail?id=75
 * {mac,linux,win32}/snappy-stubs-public.h autogenerated public headers
diff --git a/tools/mb/mb.py b/tools/mb/mb.py
index 917f3c6..2125245 100755
--- a/tools/mb/mb.py
+++ b/tools/mb/mb.py
@@ -1086,14 +1086,10 @@
                                 output_path=None)
 
     if android and test_type != "script":
-      # TODO(crbug.com/693203): Reenable logcat logdog uploading when outage
-      # has been resolved.
       cmdline = [
-          self.PathJoin('bin', 'run_%s' % target),
-          '--logcat-output-file', '${ISOLATED_OUTDIR}/logcats',
-          '--target-devices-file', '${SWARMING_BOT_FILE}',
-          '-v'
-      ]
+          '../../build/android/test_wrapper/logdog_wrapper.py',
+          '--target', target,
+          '--logdog-bin-cmd', '../../bin/logdog_butler']
     elif use_xvfb and test_type == 'windowed_test_launcher':
       extra_files = [
           '../../testing/test_env.py',
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 7b496b83..feda2df 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -86658,6 +86658,7 @@
   <int value="36" label="NTPSnippets thumbnails"/>
   <int value="37" label="Doodle"/>
   <int value="38" label="UKM"/>
+  <int value="39" label="Payments"/>
 </enum>
 
 <enum name="DecodedImageOrientation" type="int">
@@ -93346,6 +93347,7 @@
   <int value="1854" label="HTMLMediaElementControlsListNoDownload"/>
   <int value="1855" label="HTMLMediaElementControlsListNoFullscreen"/>
   <int value="1856" label="HTMLMediaElementControlsListNoRemotePlayback"/>
+  <int value="1857" label="PointerEventClickRetargetCausedByCapture"/>
 </enum>
 
 <enum name="FetchRequestMode" type="int">
@@ -99098,6 +99100,7 @@
   <int value="-1867382602" label="WebRTC-H264WithOpenH264FFmpeg:enabled"/>
   <int value="-1867342522" label="MaterialDesignHistory:enabled"/>
   <int value="-1861814223" label="MidiManagerDynamicInstantiation:enabled"/>
+  <int value="-1856902397" label="LoadingWithMojo:enabled"/>
   <int value="-1849706663" label="enable-password-force-saving:disabled"/>
   <int value="-1847835522" label="disable-touch-adjustment"/>
   <int value="-1847776781"
@@ -99170,6 +99173,7 @@
   <int value="-1572010356" label="enable-privet-v3"/>
   <int value="-1571841513" label="enable-devtools-experiments"/>
   <int value="-1559789642" label="RunAllFlashInAllowMode:enabled"/>
+  <int value="-1557527869" label="LoadingWithMojo:disabled"/>
   <int value="-1553477903" label="ash-disable-text-filtering-in-overview-mode"/>
   <int value="-1546903171" label="enable-touch-drag-drop"/>
   <int value="-1544248549" label="ArcUseAuthEndpoint:enabled"/>
@@ -103535,6 +103539,7 @@
   <int value="6" label="Malformed"/>
   <int value="7" label="WrongVersion"/>
   <int value="8" label="FeatureDisabled"/>
+  <int value="9" label="TokenDisabled"/>
 </enum>
 
 <enum name="OSAgnosticErrno" type="int">
@@ -103749,10 +103754,14 @@
     touchpad vs. touch screen).
   </summary>
   <int value="0" label="None">Did not scroll</int>
-  <int value="1" label="Forward">Scrolled forward using touchpad</int>
-  <int value="2" label="Back">Scrolled back using touchpad</int>
-  <int value="3" label="Forward">Scrolled forward using touch screen</int>
-  <int value="4" label="Back">Scrolled back using touch screen</int>
+  <int value="1" label="Forward Touchpad">Scrolled forward using touchpad</int>
+  <int value="2" label="Back Touchpad">Scrolled back using touchpad</int>
+  <int value="3" label="Forward Touch Screen">
+    Scrolled forward using touch screen
+  </int>
+  <int value="4" label="Back Touch Screen">
+    Scrolled back using touch screen
+  </int>
 </enum>
 
 <enum name="P2PLookupResult" type="int">
diff --git a/tools/perf/benchmarks/battor.py b/tools/perf/benchmarks/battor.py
index b85e94ea..092b13c 100644
--- a/tools/perf/benchmarks/battor.py
+++ b/tools/perf/benchmarks/battor.py
@@ -36,21 +36,6 @@
     return True
 
 
-# android: See battor.android.tough_video_cases below
-# win8: crbug.com/531618
-# crbug.com/565180: Only include cases that report time_to_play
-# Taken directly from media benchmark.
-@benchmark.Disabled('android', 'win8')
-@benchmark.Owner(emails=['charliea@chromium.org'])
-class BattOrToughVideoCases(_BattOrBenchmark):
-  """Obtains media metrics for key user scenarios."""
-  page_set = page_sets.ToughVideoCasesPageSet
-
-  @classmethod
-  def Name(cls):
-    return 'battor.tough_video_cases'
-
-
 @benchmark.Enabled('mac')
 @benchmark.Owner(emails=['charliea@chromium.org'])
 class BattOrTrivialPages(_BattOrBenchmark):
diff --git a/tools/perf/benchmarks/media.py b/tools/perf/benchmarks/media.py
index 7eb9ae9d..984b530 100644
--- a/tools/perf/benchmarks/media.py
+++ b/tools/perf/benchmarks/media.py
@@ -6,8 +6,10 @@
 
 from telemetry import benchmark
 from telemetry.page import legacy_page_test
+from telemetry.timeline import chrome_trace_category_filter
 from telemetry.value import list_of_scalar_values
 from telemetry.value import scalar
+from telemetry.web_perf import timeline_based_measurement
 
 from measurements import media
 import page_sets
@@ -40,7 +42,7 @@
 # android: See media.android.tough_video_cases below
 # crbug.com/565180: Only include cases that report time_to_play
 @benchmark.Disabled('android')
-class Media(perf_benchmark.PerfBenchmark):
+class MediaToughVideoCases(perf_benchmark.PerfBenchmark):
   """Obtains media metrics for key user scenarios."""
   test = media.Media
   page_set = page_sets.ToughVideoCasesPageSet
@@ -50,6 +52,36 @@
     return 'media.tough_video_cases'
 
 
+@benchmark.Owner(emails=['johnchen@chromium.org', 'crouleau@chromium.org'],
+                 component='Internals>Media')
+@benchmark.Disabled('android')
+class MediaToughVideoCasesTBMv2(perf_benchmark.PerfBenchmark):
+  """Obtains media metrics using TBMv2.
+  Will eventually replace MediaToughVideoCases class."""
+  page_set = page_sets.ToughVideoCasesPageSet
+
+  def CreateTimelineBasedMeasurementOptions(self):
+    category_filter = chrome_trace_category_filter.ChromeTraceCategoryFilter()
+
+    # 'toplevel' category provides CPU time slices used by # cpuTimeMetric.
+    category_filter.AddIncludedCategory('toplevel')
+
+    # 'rail' category is used by powerMetric to attribute different period of
+    # time to different activities, such as video_animation, etc.
+    category_filter.AddIncludedCategory('rail')
+
+    options = timeline_based_measurement.Options(category_filter)
+    options.config.enable_atrace_trace = True
+    options.config.atrace_config.categories = ['sched']
+    options.config.enable_battor_trace = True
+    options.SetTimelineBasedMetrics(['powerMetric', 'cpuTimeMetric'])
+    return options
+
+  @classmethod
+  def Name(cls):
+    return 'media.tough_video_cases_tbmv2'
+
+
 # crbug.com/565180: Only include cases that don't report time_to_play
 @benchmark.Disabled('android')
 @benchmark.Owner(emails=['crouleau@chromium.org', 'videostack-eng@google.com'])
diff --git a/tools/perf/core/trybot_command.py b/tools/perf/core/trybot_command.py
index afa50059..ddd9e21 100644
--- a/tools/perf/core/trybot_command.py
+++ b/tools/perf/core/trybot_command.py
@@ -3,12 +3,16 @@
 # found in the LICENSE file.
 
 import argparse
+import base64
+import gzip
+import io
 import json
 import logging
 import os
 import platform
 import subprocess
 import tempfile
+import urllib
 import urllib2
 
 
@@ -86,6 +90,12 @@
     }
 }
 
+_MILO_MASTER_ENDPOINT = ('https://luci-milo.appspot.com/prpc/milo.Buildbot/'
+                        'GetCompressedMasterJSON')
+
+_MILO_RESPONSE_PREFIX = ')]}\'\n'
+
+
 assert not set(DEFAULT_TRYBOTS) & set(EXCLUDED_BOTS), (
     'A trybot cannot present in both Default as well as Excluded bots lists.')
 
@@ -96,6 +106,31 @@
     return '(ERROR) Perf Try Job: %s' % self.args[0]
 
 
+def _ProcessMiloData(data):
+  if not data.startswith(_MILO_RESPONSE_PREFIX):
+    return None
+  data = data[len(_MILO_RESPONSE_PREFIX):]
+
+  try:
+    response_data = json.loads(data)
+  except Exception:
+    return None
+
+  try:
+    decoded_data = base64.b64decode(response_data.get('data'))
+  except Exception:
+    return None
+
+  try:
+    with io.BytesIO(decoded_data) as compressed_file:
+      with gzip.GzipFile(fileobj=compressed_file) as decompressed_file:
+        data_json = decompressed_file.read()
+  except Exception:
+    return None
+
+  return json.loads(data_json)
+
+
 def _GetTrybotList(builders):
   builders = ['%s' % bot.replace('_perf_bisect', '').replace('_', '-')
               for bot in builders]
@@ -195,10 +230,14 @@
   def _GetBuilderList(cls):
     if not cls._builders:
       try:
-        f = urllib2.urlopen(
-            ('https://build.chromium.org/p/tryserver.chromium.perf/json/'
-             'builders'),
-            timeout=5)
+        headers = {
+            'Accept': 'application/json',
+            'Content-Type': 'application/json',
+        }
+        values = {'name': 'tryserver.chromium.perf'}
+        data = urllib.urlencode(values)
+        req = urllib2.Request(_MILO_MASTER_ENDPOINT, None, headers)
+        f = urllib2.urlopen(req, json.dumps(values), timeout=10)
       # In case of any kind of exception, allow tryjobs to use default trybots.
       # Possible exception are ssl.SSLError, urllib2.URLError,
       # socket.timeout, socket.error.
@@ -208,7 +247,8 @@
                'information, tryjob will use default trybots.')
         cls._builders = DEFAULT_TRYBOTS
       else:
-        builders = json.loads(f.read()).keys()
+        data = _ProcessMiloData(f.read())
+        builders = data.get('builders', {}).keys()
         # Exclude unsupported bots like win xp and some dummy bots.
         cls._builders = [bot for bot in builders if bot not in EXCLUDED_BOTS]
 
diff --git a/tools/perf/core/trybot_command_unittest.py b/tools/perf/core/trybot_command_unittest.py
index 7bca1481..e04055e 100644
--- a/tools/perf/core/trybot_command_unittest.py
+++ b/tools/perf/core/trybot_command_unittest.py
@@ -2,6 +2,9 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 import argparse
+import base64
+import io
+import gzip
 import json
 import logging
 import os
@@ -78,8 +81,19 @@
     return builders
 
   def _MockTryserverJson(self, bots_dict):
+    data_to_compress = json.dumps({'builders': bots_dict})
+
+    with io.BytesIO() as dst:
+      with gzip.GzipFile(fileobj=dst, mode='wb') as src:
+        src.write(data_to_compress)
+      compressed_data = dst.getvalue()
+
+    milo_data = {'data': base64.b64encode(compressed_data)}
+    milo_data = json.dumps(milo_data)
+    milo_data = trybot_command._MILO_RESPONSE_PREFIX + milo_data
+
     data = mock.Mock()
-    data.read.return_value = json.dumps(bots_dict)
+    data.read.return_value = milo_data
     self._urllib2_mock.urlopen.return_value = data
 
   def _MockTempFile(self, issue, issue_url):
diff --git a/ui/arc/notification/arc_custom_notification_view.cc b/ui/arc/notification/arc_custom_notification_view.cc
index 805d31c..1730e91 100644
--- a/ui/arc/notification/arc_custom_notification_view.cc
+++ b/ui/arc/notification/arc_custom_notification_view.cc
@@ -169,6 +169,8 @@
   }
 
   bool IsPinned() const override {
+    if (!owner_->item_)
+      return false;
     return owner_->item_->pinned();
   }
 
diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc
index 34ff8e9..7637bcdd 100644
--- a/ui/compositor/compositor.cc
+++ b/ui/compositor/compositor.cc
@@ -165,8 +165,7 @@
       command_line->HasSwitch(cc::switches::kUIEnableLayerLists);
 
   settings.enable_color_correct_rasterization =
-      command_line->HasSwitch(cc::switches::kEnableColorCorrectRendering) ||
-      command_line->HasSwitch(cc::switches::kEnableTrueColorRendering);
+      command_line->HasSwitch(cc::switches::kEnableColorCorrectRendering);
   settings.renderer_settings.enable_color_correct_rendering =
       settings.enable_color_correct_rasterization ||
       command_line->HasSwitch(switches::kEnableHDROutput);
diff --git a/ui/gfx/BUILD.gn b/ui/gfx/BUILD.gn
index bbffa845..4ea3d50 100644
--- a/ui/gfx/BUILD.gn
+++ b/ui/gfx/BUILD.gn
@@ -21,6 +21,26 @@
   ]
 }
 
+component("geometry_skia") {
+  sources = [
+    "skia_util.cc",
+    "skia_util.h",
+    "transform.cc",
+    "transform.h",
+    "transform_util.cc",
+    "transform_util.h",
+  ]
+  public_deps = [
+    ":gfx_export",
+  ]
+  deps = [
+    "//base",
+    "//skia",
+    "//ui/gfx/geometry",
+  ]
+  defines = [ "GFX_IMPLEMENTATION" ]
+}
+
 component("gfx") {
   sources = [
     "android/gfx_jni_registrar.cc",
@@ -172,8 +192,6 @@
     "skbitmap_operations.h",
     "skia_color_space_util.cc",
     "skia_color_space_util.h",
-    "skia_util.cc",
-    "skia_util.h",
     "switches.cc",
     "switches.h",
     "sys_color_change_listener.cc",
@@ -185,10 +203,6 @@
     "text_utils.h",
     "text_utils_android.cc",
     "text_utils_ios.mm",
-    "transform.cc",
-    "transform.h",
-    "transform_util.cc",
-    "transform_util.h",
     "ui_gfx_exports.cc",
     "utf16_indexing.cc",
     "utf16_indexing.h",
@@ -252,6 +266,7 @@
 
   public_deps = [
     ":color_space",
+    ":geometry_skia",
     ":memory_buffer_sources",
     ":native_widget_types",
     ":selection_bound_sources",
diff --git a/ui/gfx/skia_util.cc b/ui/gfx/skia_util.cc
index 6f7818d9..e065fd40 100644
--- a/ui/gfx/skia_util.cc
+++ b/ui/gfx/skia_util.cc
@@ -18,8 +18,6 @@
 #include "ui/gfx/geometry/quad_f.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/geometry/rect_f.h"
-#include "ui/gfx/image/image_skia_rep.h"
-#include "ui/gfx/shadow_value.h"
 #include "ui/gfx/transform.h"
 
 namespace gfx {
diff --git a/ui/gfx/skia_util.h b/ui/gfx/skia_util.h
index 50748d1..0c1f251 100644
--- a/ui/gfx/skia_util.h
+++ b/ui/gfx/skia_util.h
@@ -8,7 +8,6 @@
 #include <string>
 #include <vector>
 
-#include "cc/paint/paint_shader.h"
 #include "third_party/skia/include/core/SkColor.h"
 #include "third_party/skia/include/core/SkRect.h"
 #include "ui/gfx/geometry/quad_f.h"
diff --git a/ui/message_center/message_center_impl.cc b/ui/message_center/message_center_impl.cc
index 0db1a54..4e90822a 100644
--- a/ui/message_center/message_center_impl.cc
+++ b/ui/message_center/message_center_impl.cc
@@ -656,8 +656,8 @@
   bool remove_pinned = (type == RemoveType::ALL);
 
   const NotificationBlockers& blockers =
-      (type == RemoveType::ALL ? NotificationBlockers() /* empty blockers */
-                               : blockers_ /* use default blockers */);
+      remove_pinned ? NotificationBlockers() /* empty blockers */
+                    : blockers_;             /* use default blockers */
 
   const NotificationList::Notifications notifications =
       notification_list_->GetVisibleNotifications(blockers);
diff --git a/ui/views/view.cc b/ui/views/view.cc
index 86624f8..a67ae7f 100644
--- a/ui/views/view.cc
+++ b/ui/views/view.cc
@@ -255,7 +255,7 @@
     layout_manager_->ViewAdded(this, view);
 
   for (ViewObserver& observer : observers_)
-    observer.OnChildViewAdded(view);
+    observer.OnChildViewAdded(this, view);
 }
 
 void View::ReorderChildView(View* view, int index) {
@@ -287,7 +287,7 @@
   children_.insert(children_.begin() + index, view);
 
   for (ViewObserver& observer : observers_)
-    observer.OnChildViewReordered(view);
+    observer.OnChildViewReordered(this, view);
 
   ReorderLayers();
 }
@@ -1967,7 +1967,7 @@
     layout_manager_->ViewRemoved(this, view);
 
   for (ViewObserver& observer : observers_)
-    observer.OnChildViewRemoved(view, this);
+    observer.OnChildViewRemoved(this, view);
 }
 
 void View::PropagateRemoveNotifications(View* old_parent,
diff --git a/ui/views/view_observer.h b/ui/views/view_observer.h
index 5876588d..c4f56791 100644
--- a/ui/views/view_observer.h
+++ b/ui/views/view_observer.h
@@ -11,27 +11,29 @@
 
 class View;
 
-// Observer can listen to various events on the Views.
+// ViewObserver is used to observe changes to a View. The first argument to all
+// ViewObserver functions is the View the observer was added to.
 class VIEWS_EXPORT ViewObserver {
  public:
-  // Called when |child| is added to its parent. Invoked on the parent which has
-  // the |child| added to it.
-  virtual void OnChildViewAdded(View* child) {}
+  // Called when |child| is added as a child to |observed_view|.
+  virtual void OnChildViewAdded(View* observed_view, View* child) {}
 
-  // Called when |child| is removed from its |parent|.
-  virtual void OnChildViewRemoved(View* child, View* parent) {}
+  // Called when |child| is removed as a child of |observed_view|.
+  virtual void OnChildViewRemoved(View* observed_view, View* child) {}
 
-  // Called when View::SetVisible() is called with a new value.
-  // The |view| may still be hidden at this point.
-  virtual void OnViewVisibilityChanged(View* view) {}
+  // Called when View::SetVisible() is called with a new value. See
+  // View::IsDrawn() for details on how visibility and drawn differ.
+  virtual void OnViewVisibilityChanged(View* observed_view) {}
 
-  virtual void OnViewEnabledChanged(View* view) {}
+  // Called when View::SetEnabled() is called with a new value.
+  virtual void OnViewEnabledChanged(View* observed_view) {}
 
-  virtual void OnViewBoundsChanged(View* view) {}
+  // Called when the bounds of |observed_view| change.
+  virtual void OnViewBoundsChanged(View* observed_view) {}
 
-  // Invoked whenever a child is moved to another index. This is called on the
-  // parent view. |view| is the child view being moved.
-  virtual void OnChildViewReordered(View* view) {}
+  // Called when a child is reordered among its siblings, specifically
+  // View::ReorderChildView() is called on |observed_view|.
+  virtual void OnChildViewReordered(View* observed_view, View* child) {}
 
   // Called from ~View.
   virtual void OnViewIsDeleting(View* observed_view) {}
diff --git a/ui/views/view_unittest.cc b/ui/views/view_unittest.cc
index 96cd62a..55445de 100644
--- a/ui/views/view_unittest.cc
+++ b/ui/views/view_unittest.cc
@@ -4867,6 +4867,7 @@
   ViewObserverTest()
       : child_view_added_times_(0),
         child_view_removed_times_(0),
+        child_view_added_parent_(nullptr),
         child_view_added_(nullptr),
         child_view_removed_(nullptr),
         child_view_removed_parent_(nullptr),
@@ -4878,11 +4879,12 @@
   ~ViewObserverTest() override {}
 
   // ViewObserver:
-  void OnChildViewAdded(View* child) override {
+  void OnChildViewAdded(View* parent, View* child) override {
     child_view_added_times_++;
     child_view_added_ = child;
+    child_view_added_parent_ = parent;
   }
-  void OnChildViewRemoved(View* child, View* parent) override {
+  void OnChildViewRemoved(View* parent, View* child) override {
     child_view_removed_times_++;
     child_view_removed_ = child;
     child_view_removed_parent_ = parent;
@@ -4898,12 +4900,15 @@
 
   void OnViewBoundsChanged(View* view) override { view_bounds_changed_ = view; }
 
-  void OnChildViewReordered(View* view) override { view_reordered_ = view; }
+  void OnChildViewReordered(View* parent, View* view) override {
+    view_reordered_ = view;
+  }
 
   void reset() {
     child_view_added_times_ = 0;
     child_view_removed_times_ = 0;
     child_view_added_ = nullptr;
+    child_view_added_parent_ = nullptr;
     child_view_removed_ = nullptr;
     child_view_removed_parent_ = nullptr;
     view_visibility_changed_ = nullptr;
@@ -4921,6 +4926,9 @@
   int child_view_added_times() { return child_view_added_times_; }
   int child_view_removed_times() { return child_view_removed_times_; }
   const View* child_view_added() const { return child_view_added_; }
+  const View* child_view_added_parent() const {
+    return child_view_added_parent_;
+  }
   const View* child_view_removed() const { return child_view_removed_; }
   const View* child_view_removed_parent() const {
     return child_view_removed_parent_;
@@ -4936,6 +4944,7 @@
   int child_view_added_times_;
   int child_view_removed_times_;
 
+  View* child_view_added_parent_;
   View* child_view_added_;
   View* child_view_removed_;
   View* child_view_removed_parent_;
@@ -4956,7 +4965,8 @@
   EXPECT_EQ(0, child_view_removed_times());
   EXPECT_EQ(1, child_view_added_times());
   EXPECT_EQ(child_view.get(), child_view_added());
-  EXPECT_EQ(child_view.get()->parent(), parent1.get());
+  EXPECT_EQ(child_view->parent(), child_view_added_parent());
+  EXPECT_EQ(child_view->parent(), parent1.get());
   reset();
 
   // Removed from parent1, added to parent2
@@ -4966,7 +4976,7 @@
   EXPECT_EQ(child_view.get(), child_view_removed());
   EXPECT_EQ(parent1.get(), child_view_removed_parent());
   EXPECT_EQ(child_view.get(), child_view_added());
-  EXPECT_EQ(child_view.get()->parent(), parent2.get());
+  EXPECT_EQ(child_view->parent(), parent2.get());
 
   reset();