diff --git a/DEPS b/DEPS
index de6221b..14b13909 100644
--- a/DEPS
+++ b/DEPS
@@ -137,7 +137,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'v8_revision': 'cb549d80bab3e4427ef2540031717b69b72ffef2',
+  'v8_revision': 'ee8d4aca6f746ceeda730abf2ef7dc3fab20064e',
   # 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.
@@ -145,11 +145,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': '95e58587bed917de783fea8f6529229ce2f124ed',
+  'angle_revision': 'e4faae213dfd8bd6ab4464922c8fe54d44fc47b9',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
-  'swiftshader_revision': 'e228502d01637b60f93856b8afc9447772d48ab6',
+  'swiftshader_revision': '2568cf76ee2c21dac908ae94aebbeae715c6faef',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
@@ -168,7 +168,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling googletest
   # and whatever else without interference from each other.
-  'googletest_revision': '9997a830ee5589c2da79198bc3b60d1c47e50118',
+  'googletest_revision': '3f5b5b8f8493a03fa25f1e4a7eae7678514a431d',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling lighttpd
   # and whatever else without interference from each other.
@@ -252,11 +252,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'spv_tools_revision': '06ce59b0b07658e35f0aa91f8301105968bbdc5e',
+  'spv_tools_revision': '2947e88f793824cf62ffb44f6e99a20f8054c388',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'spv_headers_revision': 'c4f8f65792d4bf2657ca751904c511bbcf2ac77b',
+  'spv_headers_revision': '30ebd2f19c8d1e604bdeb3cbf9a16adf4c6df325',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -802,7 +802,7 @@
 
   # Build tools for Chrome OS. Note: This depends on third_party/pyelftools.
   'src/third_party/chromite': {
-      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '802c51c55135928f90117cf8b19f90031f4db23d',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'be0bae41e32836324b91eb56ceb8839c202cd315',
       'condition': 'checkout_linux',
   },
 
@@ -1177,7 +1177,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' +  '9c05e647cb982ba03f82ebcabe613e04710e05ce',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' +  'c827dc29b351a286099d5701afa473017f0e19b6',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + 'ac0d98b5cee6c024b0cffeb4f8f45b6fc5ccdb78',
@@ -1348,7 +1348,7 @@
     Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '6f0b34abee8dba611c253738d955c59f703c147a',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '2a1f020dd9e60407abf55703bc1268cbb8cc530d',
+    Var('webrtc_git') + '/src.git' + '@' + 'efe931463c18db830c64d313f751abe5be35a754',
 
   'src/third_party/xdg-utils': {
       'url': Var('chromium_git') + '/chromium/deps/xdg-utils.git' + '@' + 'd80274d5869b17b8c9067a1022e4416ee7ed5e0d',
@@ -1389,7 +1389,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@77830e8b14f7da43303dde0490602caf108f757f',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@5d29b3945d6955b57d010c0065996c75be028026',
     'condition': 'checkout_src_internal',
   },
 
diff --git a/WATCHLISTS b/WATCHLISTS
index 795e6ed..dc0ed30f 100644
--- a/WATCHLISTS
+++ b/WATCHLISTS
@@ -847,6 +847,9 @@
                   '|chrome/browser/chromeos/printing/'\
                   '|printing/',
     },
+    'custom_proxy': {
+      'filepath': 'services/network/network_service_proxy_delegate.*',
+    },
     'custom_tabs': {
       'filepath': 'chrome/android/java/src/org/chromium/chrome/browser/customtabs/|'\
                   'chrome/android/java/src/org/chromium/chrome/browser/browseractions/|'\
@@ -2253,6 +2256,8 @@
     'cups_printing': ['baileyberro+watch-printers@chromium.org',
                       'jimmyxgong+watch-printers@chromium.org',
                       'zentaro+watch-printers@chromium.org'],
+    'custom_proxy': ['lbendig@opera.com',
+                     'wdzierzanowski@opera.com'],
     'custom_tabs': ['amalova+watch@chromium.org',
                     'lizeb+watch-custom-tabs@chromium.org',
                     'peconn+watch@chromium.org',
diff --git a/ash/BUILD.gn b/ash/BUILD.gn
index d5a5348b..71da560b 100644
--- a/ash/BUILD.gn
+++ b/ash/BUILD.gn
@@ -192,8 +192,6 @@
     "bluetooth_devices_observer.h",
     "cancel_mode.cc",
     "cancel_mode.h",
-    "cast_config_controller.cc",
-    "cast_config_controller.h",
     "custom_tab/arc_custom_tab_view.cc",
     "custom_tab/arc_custom_tab_view.h",
     "dbus/ash_dbus_helper.cc",
diff --git a/ash/app_list/app_list_presenter_delegate_unittest.cc b/ash/app_list/app_list_presenter_delegate_unittest.cc
index 748eac0..f96103b 100644
--- a/ash/app_list/app_list_presenter_delegate_unittest.cc
+++ b/ash/app_list/app_list_presenter_delegate_unittest.cc
@@ -1229,6 +1229,49 @@
   EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->GetAutoHideState());
 }
 
+// Verifies that in clamshell mode, AppList has the expected state based on the
+// drag distance after dragging from Peeking state.
+TEST_F(AppListPresenterDelegateTest, DragAppListViewFromPeeking) {
+  GetAppListTestHelper()->ShowAndRunLoop(GetPrimaryDisplayId());
+  GetAppListTestHelper()->CheckState(ash::mojom::AppListViewState::kPeeking);
+
+  // Calculate |threshold| in the same way with AppListView::EndDrag.
+  const int threshold =
+      app_list::AppListConfig::instance().peeking_app_list_height() /
+      app_list::kAppListThresholdDenominator;
+
+  // Drag AppListView downward by |threshold| then release the gesture.
+  // Check the final state should be Peeking.
+  ui::test::EventGenerator* generator = GetEventGenerator();
+  app_list::AppListView* view = GetAppListView();
+  const int drag_to_peeking_distance = threshold;
+  gfx::Point drag_start = view->GetBoundsInScreen().top_center();
+  gfx::Point drag_end(drag_start.x(),
+                      drag_start.y() + drag_to_peeking_distance);
+  generator->GestureScrollSequence(
+      drag_start, drag_end,
+      generator->CalculateScrollDurationForFlingVelocity(drag_start, drag_end,
+                                                         2, 1000),
+      1000);
+  GetAppListTestHelper()->WaitUntilIdle();
+  GetAppListTestHelper()->CheckState(ash::mojom::AppListViewState::kPeeking);
+
+  // Drag AppListView upward by bigger distance then release the gesture.
+  // Check the final state should be kFullscreenAllApps.
+  const int drag_to_fullscreen_distance = threshold + 1;
+  drag_start = view->GetBoundsInScreen().top_center();
+  drag_end =
+      gfx::Point(drag_start.x(), drag_start.y() - drag_to_fullscreen_distance);
+
+  generator->GestureScrollSequence(
+      drag_start, drag_end,
+      generator->CalculateScrollDurationForFlingVelocity(drag_start, drag_end,
+                                                         2, 1000),
+      1000);
+  GetAppListTestHelper()->CheckState(
+      ash::mojom::AppListViewState::kFullscreenAllApps);
+}
+
 // Test a variety of behaviors for home launcher (app list in tablet mode).
 class AppListPresenterDelegateHomeLauncherTest
     : public AppListPresenterDelegateTest {
diff --git a/ash/app_list/presenter/app_list_presenter_impl.cc b/ash/app_list/presenter/app_list_presenter_impl.cc
index d79f5f76..62a194a 100644
--- a/ash/app_list/presenter/app_list_presenter_impl.cc
+++ b/ash/app_list/presenter/app_list_presenter_impl.cc
@@ -9,7 +9,6 @@
 #include "ash/app_list/app_list_metrics.h"
 #include "ash/app_list/app_list_view_delegate.h"
 #include "ash/app_list/views/app_list_main_view.h"
-#include "ash/app_list/views/app_list_view.h"
 #include "ash/app_list/views/contents_view.h"
 #include "ash/public/cpp/app_list/app_list_features.h"
 #include "ash/public/cpp/app_list/app_list_switches.h"
@@ -211,16 +210,8 @@
 
 void AppListPresenterImpl::EndDragFromShelf(
     ash::mojom::AppListViewState app_list_state) {
-  if (view_) {
-    if (app_list_state == ash::mojom::AppListViewState::kClosed ||
-        view_->app_list_state() == ash::mojom::AppListViewState::kClosed) {
-      view_->Dismiss();
-    } else {
-      view_->SetState(app_list_state);
-    }
-    view_->SetIsInDrag(false);
-    view_->UpdateChildViewsYPositionAndOpacity();
-  }
+  if (view_)
+    view_->EndDragFromShelf(app_list_state);
 }
 
 void AppListPresenterImpl::ProcessMouseWheelOffset(
diff --git a/ash/app_list/presenter/app_list_presenter_impl.h b/ash/app_list/presenter/app_list_presenter_impl.h
index fb4353c..f5fec27 100644
--- a/ash/app_list/presenter/app_list_presenter_impl.h
+++ b/ash/app_list/presenter/app_list_presenter_impl.h
@@ -12,6 +12,7 @@
 #include "ash/app_list/app_list_metrics.h"
 #include "ash/app_list/presenter/app_list_presenter_delegate.h"
 #include "ash/app_list/presenter/app_list_presenter_export.h"
+#include "ash/app_list/views/app_list_view.h"
 #include "ash/public/cpp/pagination/pagination_model_observer.h"
 #include "ash/public/cpp/shelf_types.h"
 #include "ash/public/interfaces/app_list_view.mojom.h"
diff --git a/ash/app_list/views/app_list_view.cc b/ash/app_list/views/app_list_view.cc
index 18167c7..3172b96c 100644
--- a/ash/app_list/views/app_list_view.cc
+++ b/ash/app_list/views/app_list_view.cc
@@ -46,6 +46,7 @@
 #include "ui/gfx/canvas.h"
 #include "ui/gfx/geometry/insets.h"
 #include "ui/gfx/image/image_skia.h"
+#include "ui/gfx/interpolated_transform.h"
 #include "ui/gfx/skia_util.h"
 #include "ui/keyboard/keyboard_controller.h"
 #include "ui/strings/grit/ui_strings.h"
@@ -69,10 +70,6 @@
 // The height of the half app list from the bottom of the screen.
 constexpr int kHalfAppListHeight = 561;
 
-// The fraction of app list height that the app list must be released at in
-// order to transition to the next state.
-constexpr int kAppListThresholdDenominator = 3;
-
 // The scroll offset in order to transition from PEEKING to FULLSCREEN
 constexpr int kAppListMinScrollToSwitchStates = 20;
 
@@ -448,6 +445,52 @@
   DISALLOW_COPY_AND_ASSIGN(AppListBackgroundShieldView);
 };
 
+// Animation used to translate AppListView as well as its child views. The
+// location and opacity of child views' are updated in each animation frame so
+// it is expensive. Only used when |update_childview_each_frame_| is true.
+class PeekingResetAnimation : public ui::LayerAnimationElement {
+ public:
+  PeekingResetAnimation(int y_offset, int duration_ms, AppListView* view)
+      : ui::LayerAnimationElement(
+            ui::LayerAnimationElement::TRANSFORM,
+            base::TimeDelta::FromMilliseconds(duration_ms)),
+        transform_(std::make_unique<ui::InterpolatedTranslation>(
+            gfx::PointF(0, y_offset),
+            gfx::PointF())),
+        view_(view) {
+    DCHECK(view_->is_in_drag() &&
+           view_->app_list_state() == ash::mojom::AppListViewState::kPeeking &&
+           !view_->is_tablet_mode());
+  }
+
+  ~PeekingResetAnimation() override = default;
+
+  // ui::LayerAnimationElement:
+  void OnStart(ui::LayerAnimationDelegate* delegate) override {}
+  bool OnProgress(double current,
+                  ui::LayerAnimationDelegate* delegate) override {
+    const double progress =
+        gfx::Tween::CalculateValue(gfx::Tween::EASE_OUT, current);
+    delegate->SetTransformFromAnimation(
+        transform_->Interpolate(progress),
+        ui::PropertyChangeReason::FROM_ANIMATION);
+
+    // Update child views' location and opacity at each animation frame because
+    // child views' padding changes along with the app list view's bounds.
+    view_->app_list_main_view()->contents_view()->UpdateYPositionAndOpacity();
+
+    return true;
+  }
+  void OnGetTarget(TargetValue* target) const override {}
+  void OnAbort(ui::LayerAnimationDelegate* delegate) override {}
+
+ private:
+  std::unique_ptr<ui::InterpolatedTransform> transform_;
+  AppListView* view_;
+
+  DISALLOW_COPY_AND_ASSIGN(PeekingResetAnimation);
+};
+
 ////////////////////////////////////////////////////////////////////////////////
 // AppListView::TestApi
 
@@ -961,53 +1004,54 @@
     const int location_y_in_current_work_area =
         location_in_screen_coordinates.y() -
         GetDisplayNearestView().work_area().y();
-    // If the drag ended near the bezel, close the app list and return early.
+    // If the drag ended near the bezel, close the app list.
     if (location_y_in_current_work_area >=
         (fullscreen_height - kAppListBezelMargin)) {
       Dismiss();
-      return;
-    }
-    switch (app_list_state_) {
-      case ash::mojom::AppListViewState::kFullscreenAllApps:
-        if (drag_delta < -app_list_threshold) {
-          if (is_tablet_mode_ || is_side_shelf_)
+    } else {
+      switch (app_list_state_) {
+        case ash::mojom::AppListViewState::kFullscreenAllApps:
+          if (drag_delta < -app_list_threshold) {
+            if (is_tablet_mode_ || is_side_shelf_)
+              Dismiss();
+            else
+              SetState(ash::mojom::AppListViewState::kPeeking);
+          } else {
+            SetState(app_list_state_);
+          }
+          break;
+        case ash::mojom::AppListViewState::kFullscreenSearch:
+          if (drag_delta < -app_list_threshold)
             Dismiss();
           else
-            SetState(ash::mojom::AppListViewState::kPeeking);
-        } else {
-          SetState(app_list_state_);
-        }
-        break;
-      case ash::mojom::AppListViewState::kFullscreenSearch:
-        if (drag_delta < -app_list_threshold)
-          Dismiss();
-        else
-          SetState(app_list_state_);
-        break;
-      case ash::mojom::AppListViewState::kHalf:
-        if (drag_delta > app_list_threshold)
-          SetState(ash::mojom::AppListViewState::kFullscreenSearch);
-        else if (drag_delta < -app_list_threshold)
-          Dismiss();
-        else
-          SetState(app_list_state_);
-        break;
-      case ash::mojom::AppListViewState::kPeeking:
-        if (drag_delta > app_list_threshold) {
-          SetState(ash::mojom::AppListViewState::kFullscreenAllApps);
-          UMA_HISTOGRAM_ENUMERATION(kAppListPeekingToFullscreenHistogram,
-                                    kSwipe, kMaxPeekingToFullscreen);
-        } else if (drag_delta < -app_list_threshold) {
-          Dismiss();
-        } else {
-          SetState(app_list_state_);
-        }
-        break;
-      case ash::mojom::AppListViewState::kClosed:
-        NOTREACHED();
-        break;
+            SetState(app_list_state_);
+          break;
+        case ash::mojom::AppListViewState::kHalf:
+          if (drag_delta > app_list_threshold)
+            SetState(ash::mojom::AppListViewState::kFullscreenSearch);
+          else if (drag_delta < -app_list_threshold)
+            Dismiss();
+          else
+            SetState(app_list_state_);
+          break;
+        case ash::mojom::AppListViewState::kPeeking:
+          if (drag_delta > app_list_threshold) {
+            SetState(ash::mojom::AppListViewState::kFullscreenAllApps);
+            UMA_HISTOGRAM_ENUMERATION(kAppListPeekingToFullscreenHistogram,
+                                      kSwipe, kMaxPeekingToFullscreen);
+          } else if (drag_delta < -app_list_threshold) {
+            Dismiss();
+          } else {
+            SetState(app_list_state_);
+          }
+          break;
+        case ash::mojom::AppListViewState::kClosed:
+          NOTREACHED();
+          break;
+      }
     }
   }
+  SetIsInDrag(false);
   UpdateChildViewsYPositionAndOpacity();
   initial_drag_point_ = gfx::Point();
 }
@@ -1320,7 +1364,6 @@
       // Avoid scrolling events for the app list in tablet mode.
       if (is_side_shelf_ || is_tablet_mode())
         return;
-      SetIsInDrag(false);
       EndDrag(event->location());
       event->SetHandled();
       break;
@@ -1484,6 +1527,9 @@
   if (target_state == ash::mojom::AppListViewState::kClosed)
     return;
 
+  base::AutoReset<bool> auto_reset(
+      &update_childview_each_frame_,
+      ShouldUpdateChildViewsDuringAnimation(target_state));
   const display::Display display = GetDisplayNearestView();
   const int target_state_y = GetPreferredWidgetYForState(target_state);
   gfx::Rect target_bounds = fullscreen_widget_->GetNativeView()->bounds();
@@ -1515,7 +1561,8 @@
   ui::Layer* layer = fullscreen_widget_->GetLayer();
   layer->SetBounds(target_bounds);
   gfx::Transform transform;
-  transform.Translate(0, original_state_y - target_state_y);
+  const int y_offset = original_state_y - target_state_y;
+  transform.Translate(0, y_offset);
   layer->SetTransform(transform);
 
   ui::LayerAnimator* animator = layer->GetAnimator();
@@ -1549,12 +1596,18 @@
   TRACE_EVENT_ASYNC_BEGIN0("ui", "AppList::StateTransitionAnimations",
                            transition_animation_observer_.get());
 
-  layer->SetTransform(gfx::Transform());
+  if (update_childview_each_frame_) {
+    animator->StartAnimation(
+        new ui::LayerAnimationSequence(std::make_unique<PeekingResetAnimation>(
+            y_offset, animation_duration, this)));
+  } else {
+    layer->SetTransform(gfx::Transform());
 
-  // In transition animation, layout is only performed after it is complete,
-  // which makes the child views jump. So update y positions in advance here to
-  // avoid that.
-  app_list_main_view_->contents_view()->UpdateYPositionAndOpacity();
+    // In transition animation, layout is only performed after it is complete,
+    // which makes the child views jump. So update y positions in advance here
+    // to avoid that.
+    app_list_main_view_->contents_view()->UpdateYPositionAndOpacity();
+  }
 }
 
 void AppListView::StartCloseAnimation(base::TimeDelta animation_duration) {
@@ -1675,11 +1728,12 @@
   if (!is_in_drag && !is_tablet_mode_)
     presentation_time_recorder_.reset();
 
-  if (app_list_state_ == ash::mojom::AppListViewState::kClosed)
-    return;
-
   if (is_in_drag == is_in_drag_)
     return;
+  is_in_drag_ = is_in_drag;
+
+  if (app_list_state_ == ash::mojom::AppListViewState::kClosed)
+    return;
 
   if (is_in_drag && !is_tablet_mode_) {
     DCHECK(!presentation_time_recorder_);
@@ -1688,7 +1742,6 @@
         kAppListDragInClamshellMaxLatencyHistogram);
   }
 
-  is_in_drag_ = is_in_drag;
   GetAppsContainerView()->UpdateControlVisibility(app_list_state_, is_in_drag_);
 }
 
@@ -2002,7 +2055,7 @@
 }
 
 int AppListView::GetPreferredWidgetYForState(
-    ash::mojom::AppListViewState state) {
+    ash::mojom::AppListViewState state) const {
   // Note that app list container fills the screen, so we can treat the
   // container's y as the top of display.
   const display::Display display = GetDisplayNearestView();
@@ -2060,6 +2113,29 @@
   app_list_background_shield_->SetTransform(transform);
 }
 
+bool AppListView::ShouldUpdateChildViewsDuringAnimation(
+    ash::mojom::AppListViewState target_state) const {
+  // Return true when following conditions are all satisfied:
+  // (1) In Clamshell mode.
+  // (2) AppListView is in drag and both the current state and the target state
+  // are Peeking. For example, drag AppListView from Peeking state by a little
+  // offset then release the drag.
+  // (3) The top of AppListView's current bounds is lower than that of
+  // AppList in Peeking state. Because UI janks obviously in this situation
+  // wihtout updating child views in each animation frame.
+
+  if (is_tablet_mode_)
+    return false;
+
+  if (target_state != ash::mojom::AppListViewState::kPeeking || !is_in_drag_ ||
+      app_list_state_ != target_state) {
+    return false;
+  }
+
+  return fullscreen_widget_->GetNativeView()->bounds().origin().y() >
+         GetPreferredWidgetYForState(target_state);
+}
+
 void AppListView::OnStateTransitionAnimationCompleted() {
   delegate_->OnStateTransitionAnimationCompleted(app_list_state_);
 }
@@ -2070,4 +2146,16 @@
       animation_transition);
 }
 
+void AppListView::EndDragFromShelf(
+    ash::mojom::AppListViewState app_list_state) {
+  if (app_list_state == ash::mojom::AppListViewState::kClosed ||
+      app_list_state_ == ash::mojom::AppListViewState::kClosed) {
+    Dismiss();
+  } else {
+    SetState(app_list_state);
+  }
+  SetIsInDrag(false);
+  UpdateChildViewsYPositionAndOpacity();
+}
+
 }  // namespace app_list
diff --git a/ash/app_list/views/app_list_view.h b/ash/app_list/views/app_list_view.h
index 713a53d..4c08ac72c 100644
--- a/ash/app_list/views/app_list_view.h
+++ b/ash/app_list/views/app_list_view.h
@@ -57,8 +57,14 @@
 class TransitionAnimationObserver;
 
 namespace {
+
 // The background corner radius in peeking and fullscreen state.
 constexpr int kAppListBackgroundRadius = 28;
+
+// The fraction of app list height that the app list must be released at in
+// order to transition to the next state.
+constexpr int kAppListThresholdDenominator = 3;
+
 }  // namespace
 
 // AppListView is the top-level view and controller of app list UI. It creates
@@ -281,6 +287,9 @@
   void OnTabletModeAnimationTransitionNotified(
       TabletModeAnimationTransition animation_transition);
 
+  // Called at the end of dragging AppList from Shelf.
+  void EndDragFromShelf(ash::mojom::AppListViewState app_list_state);
+
   views::Widget* get_fullscreen_widget_for_test() const {
     return fullscreen_widget_;
   }
@@ -420,7 +429,7 @@
 
   // Returns preferred y of fullscreen widget bounds in parent window for the
   // specified state.
-  int GetPreferredWidgetYForState(ash::mojom::AppListViewState state);
+  int GetPreferredWidgetYForState(ash::mojom::AppListViewState state) const;
 
   // Returns preferred fullscreen widget bounds in parent window for the
   // specified state. Note that this function should only be called after the
@@ -432,6 +441,11 @@
   // |app_list_state_| and |is_in_drag_|.
   void UpdateAppListBackgroundYPosition();
 
+  // Returns whether it should update child views' position and opacity in each
+  // animation frame.
+  bool ShouldUpdateChildViewsDuringAnimation(
+      ash::mojom::AppListViewState target_state) const;
+
   AppListViewDelegate* delegate_;    // Weak. Owned by AppListService.
   AppListModel* const model_;        // Not Owned.
   SearchModel* const search_model_;  // Not Owned.
@@ -510,6 +524,14 @@
   // Records the presentation time for app launcher dragging.
   std::unique_ptr<ash::PresentationTimeRecorder> presentation_time_recorder_;
 
+  // Update child views' position and opacity in each animation frame when it is
+  // true. The padding between child views is affected by the height of
+  // AppListView. In the normal animation, child views' location is only updated
+  // at the end of animation. As a result, the dramatic change in padding leads
+  // to animation jank. However, updating child views in each animation frame is
+  // expensive. So it is only applied in the limited scenarios.
+  bool update_childview_each_frame_ = false;
+
   base::WeakPtrFactory<AppListView> weak_ptr_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(AppListView);
diff --git a/ash/app_list/views/apps_grid_view.cc b/ash/app_list/views/apps_grid_view.cc
index ed1b276..6eff47428 100644
--- a/ash/app_list/views/apps_grid_view.cc
+++ b/ash/app_list/views/apps_grid_view.cc
@@ -359,6 +359,12 @@
   if (item_list_)
     item_list_->RemoveObserver(this);
 
+  // Cancel animations now, otherwise RemoveAllChildViews() may call back to
+  // ViewHierarchyChanged() during removal, which can lead to double deletes
+  // (because ViewHierarchyChanged() may attempt to delete a view that is part
+  // way through deletion).
+  bounds_animator_.Cancel();
+
   view_model_.Clear();
   RemoveAllChildViews(true);
 }
diff --git a/ash/cast_config_controller.cc b/ash/cast_config_controller.cc
deleted file mode 100644
index a5826b89..0000000
--- a/ash/cast_config_controller.cc
+++ /dev/null
@@ -1,84 +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 "ash/cast_config_controller.h"
-
-#include <utility>
-#include <vector>
-
-namespace ash {
-
-CastConfigController::CastConfigController() = default;
-
-CastConfigController::~CastConfigController() = default;
-
-bool CastConfigController::Connected() {
-  return client_.is_bound();
-}
-
-void CastConfigController::AddObserver(CastConfigControllerObserver* observer) {
-  observers_.AddObserver(observer);
-}
-
-void CastConfigController::RemoveObserver(
-    CastConfigControllerObserver* observer) {
-  observers_.RemoveObserver(observer);
-}
-
-void CastConfigController::BindRequest(mojom::CastConfigRequest request) {
-  bindings_.AddBinding(this, std::move(request));
-}
-
-bool CastConfigController::HasSinksAndRoutes() const {
-  return !sinks_and_routes_.empty();
-}
-
-bool CastConfigController::HasActiveRoute() const {
-  for (const auto& sr : sinks_and_routes_) {
-    if (!sr->route->title.empty() && sr->route->is_local_source)
-      return true;
-  }
-
-  return false;
-}
-
-void CastConfigController::SetClient(
-    mojom::CastConfigClientAssociatedPtrInfo client) {
-  client_.Bind(std::move(client));
-
-  // If we added observers before we were connected to, run them now.
-  if (observers_.might_have_observers())
-    client_->RequestDeviceRefresh();
-}
-
-void CastConfigController::OnDevicesUpdated(
-    std::vector<mojom::SinkAndRoutePtr> devices) {
-  sinks_and_routes_.clear();
-  for (const auto& item : devices)
-    sinks_and_routes_.emplace_back(item.Clone());
-
-  for (auto& observer : observers_) {
-    std::vector<mojom::SinkAndRoutePtr> devices_copy;
-    for (const auto& item : devices)
-      devices_copy.emplace_back(item.Clone());
-    observer.OnDevicesUpdated(std::move(devices_copy));
-  }
-}
-
-void CastConfigController::RequestDeviceRefresh() {
-  if (client_)
-    client_->RequestDeviceRefresh();
-}
-
-void CastConfigController::CastToSink(ash::mojom::CastSinkPtr sink) {
-  if (client_)
-    client_->CastToSink(std::move(sink));
-}
-
-void CastConfigController::StopCasting(ash::mojom::CastRoutePtr route) {
-  if (client_)
-    client_->StopCasting(std::move(route));
-}
-
-}  // namespace ash
diff --git a/ash/cast_config_controller.h b/ash/cast_config_controller.h
deleted file mode 100644
index 5f9d8bd5..0000000
--- a/ash/cast_config_controller.h
+++ /dev/null
@@ -1,83 +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 ASH_CAST_CONFIG_CONTROLLER_H_
-#define ASH_CAST_CONFIG_CONTROLLER_H_
-
-#include <vector>
-
-#include "ash/public/interfaces/cast_config.mojom.h"
-#include "base/macros.h"
-#include "base/observer_list.h"
-#include "mojo/public/cpp/bindings/associated_binding.h"
-#include "mojo/public/cpp/bindings/binding_set.h"
-
-namespace ash {
-
-// There is a single CastConfigController which receives device
-// information. This observer interface sends that information to all the
-// TrayCast items--there is one per display.
-class CastConfigControllerObserver {
- public:
-  virtual void OnDevicesUpdated(
-      std::vector<mojom::SinkAndRoutePtr> devices) = 0;
-
- protected:
-  virtual ~CastConfigControllerObserver() {}
-};
-
-// We want to establish our connection lazily and preferably only once, as
-// TrayCast instances will come and go.
-class CastConfigController : public ash::mojom::CastConfig {
- public:
-  CastConfigController();
-  ~CastConfigController() override;
-
-  // Returns whether our SetClient() method has been called and the client
-  // object pointer is still live.
-  bool Connected();
-
-  void AddObserver(CastConfigControllerObserver* observer);
-  void RemoveObserver(CastConfigControllerObserver* observer);
-
-  void BindRequest(mojom::CastConfigRequest request);
-
-  // Return true if there are available cast devices.
-  bool HasSinksAndRoutes() const;
-
-  // Return true if casting is active. The route may be DIAL based, such as
-  // casting YouTube where the cast sink directly streams content from another
-  // server. In that case, this device is not actively transmitting information
-  // to the cast sink.
-  bool HasActiveRoute() const;
-
-  // ash::mojom::CastConfig:
-  void SetClient(mojom::CastConfigClientAssociatedPtrInfo client) override;
-  void OnDevicesUpdated(std::vector<mojom::SinkAndRoutePtr> devices) override;
-
-  // Methods to forward to |client_|.
-  void RequestDeviceRefresh();
-  void CastToSink(mojom::CastSinkPtr sink);
-  void StopCasting(mojom::CastRoutePtr route);
-
-  const std::vector<mojom::SinkAndRoutePtr>& sinks_and_routes() const {
-    return sinks_and_routes_;
-  }
-
- private:
-  // Bindings for the CastConfig interface.
-  mojo::BindingSet<mojom::CastConfig> bindings_;
-
-  mojom::CastConfigClientAssociatedPtr client_;
-
-  std::vector<mojom::SinkAndRoutePtr> sinks_and_routes_;
-
-  base::ObserverList<CastConfigControllerObserver>::Unchecked observers_;
-
-  DISALLOW_COPY_AND_ASSIGN(CastConfigController);
-};
-
-}  // namespace ash
-
-#endif  // ASH_CAST_CONFIG_CONTROLLER_H_
diff --git a/ash/ime/ime_controller.cc b/ash/ime/ime_controller.cc
index 6d08aa3..5c30e5aa 100644
--- a/ash/ime/ime_controller.cc
+++ b/ash/ime/ime_controller.cc
@@ -19,9 +19,9 @@
     : mode_indicator_observer_(std::make_unique<ModeIndicatorObserver>()) {}
 
 ImeController::~ImeController() {
-  Shell* shell = Shell::Get();
-  shell->cast_config()->RemoveObserver(this);
-  shell->display_manager()->RemoveObserver(this);
+  if (CastConfigController::Get())
+    CastConfigController::Get()->RemoveObserver(this);
+  Shell::Get()->display_manager()->RemoveObserver(this);
 }
 
 void ImeController::AddObserver(Observer* observer) {
@@ -40,9 +40,9 @@
   client_ = std::move(client);
 
   // Initializes some observers for client.
-  Shell* shell = Shell::Get();
-  shell->cast_config()->AddObserver(this);
-  shell->display_manager()->AddObserver(this);
+  if (CastConfigController::Get())
+    CastConfigController::Get()->AddObserver(this);
+  Shell::Get()->display_manager()->AddObserver(this);
 }
 
 bool ImeController::CanSwitchIme() const {
@@ -186,13 +186,12 @@
   client_->UpdateMirroringState(is_mirroring);
 }
 
-void ImeController::OnDevicesUpdated(
-    std::vector<mojom::SinkAndRoutePtr> devices) {
+void ImeController::OnDevicesUpdated(const std::vector<SinkAndRoute>& devices) {
   DCHECK(client_);
 
   bool casting_desktop = false;
-  for (auto& receiver : devices) {
-    if (receiver->route->content_source == mojom::ContentSource::DESKTOP) {
+  for (const auto& receiver : devices) {
+    if (receiver.route.content_source == ContentSource::kDesktop) {
       casting_desktop = true;
       break;
     }
diff --git a/ash/ime/ime_controller.h b/ash/ime/ime_controller.h
index 678a5a4..5bbe32b 100644
--- a/ash/ime/ime_controller.h
+++ b/ash/ime/ime_controller.h
@@ -9,7 +9,7 @@
 #include <vector>
 
 #include "ash/ash_export.h"
-#include "ash/cast_config_controller.h"
+#include "ash/public/cpp/cast_config_controller.h"
 #include "ash/public/interfaces/ime_controller.mojom.h"
 #include "ash/public/interfaces/ime_info.mojom.h"
 #include "base/macros.h"
@@ -29,7 +29,7 @@
 // which might live in Chrome browser or in a separate mojo service.
 class ASH_EXPORT ImeController : public mojom::ImeController,
                                  public display::DisplayObserver,
-                                 public CastConfigControllerObserver {
+                                 public CastConfigController::Observer {
  public:
   class Observer {
    public:
@@ -113,8 +113,8 @@
   void OnDisplayMetricsChanged(const display::Display& display,
                                uint32_t changed_metrics) override;
 
-  // CastConfigControllerObserver:
-  void OnDevicesUpdated(std::vector<mojom::SinkAndRoutePtr> devices) override;
+  // CastConfigController::Observer:
+  void OnDevicesUpdated(const std::vector<SinkAndRoute>& devices) override;
 
   // Synchronously returns the cached caps lock state.
   bool IsCapsLockEnabled() const;
diff --git a/ash/media/media_notification_view.cc b/ash/media/media_notification_view.cc
index 0923282..4e93dfc 100644
--- a/ash/media/media_notification_view.cc
+++ b/ash/media/media_notification_view.cc
@@ -20,6 +20,7 @@
 #include "ui/message_center/public/cpp/message_center_constants.h"
 #include "ui/message_center/views/notification_control_buttons_view.h"
 #include "ui/message_center/views/notification_header_view.h"
+#include "ui/native_theme/native_theme_dark_aura.h"
 #include "ui/views/controls/button/image_button_factory.h"
 #include "ui/views/layout/box_layout.h"
 #include "ui/views/style/typography.h"
@@ -110,6 +111,7 @@
   SetLayoutManager(std::make_unique<views::BoxLayout>(
       views::BoxLayout::kVertical, gfx::Insets(), 0));
 
+  SetNativeTheme(ui::NativeThemeDarkAura::instance());
   // |controls_button_view_| has the common notification control buttons.
   control_buttons_view_ =
       std::make_unique<message_center::NotificationControlButtonsView>(this);
diff --git a/ash/mojo_interface_factory.cc b/ash/mojo_interface_factory.cc
index fb10ab6..f401f98 100644
--- a/ash/mojo_interface_factory.cc
+++ b/ash/mojo_interface_factory.cc
@@ -15,7 +15,6 @@
 #include "ash/assistant/assistant_screen_context_controller.h"
 #include "ash/assistant/assistant_setup_controller.h"
 #include "ash/autotest/shelf_integration_test_api.h"
-#include "ash/cast_config_controller.h"
 #include "ash/display/ash_display_controller.h"
 #include "ash/display/cros_display_config.h"
 #include "ash/display/display_output_protection.h"
@@ -133,10 +132,6 @@
   Shell::Get()->message_center_controller()->BindRequest(std::move(request));
 }
 
-void BindCastConfigOnMainThread(mojom::CastConfigRequest request) {
-  Shell::Get()->cast_config()->BindRequest(std::move(request));
-}
-
 void BindDisplayOutputProtectionRequestOnMainThread(
     mojom::DisplayOutputProtectionRequest request) {
   Shell::Get()->display_output_protection()->BindRequest(std::move(request));
@@ -303,8 +298,6 @@
   registry->AddInterface(
       base::BindRepeating(&BindAshMessageCenterControllerRequestOnMainThread),
       main_thread_task_runner);
-  registry->AddInterface(base::BindRepeating(&BindCastConfigOnMainThread),
-                         main_thread_task_runner);
   if (base::FeatureList::IsEnabled(features::kKioskNextShell)) {
     registry->AddInterface(
         base::BindRepeating(&BindKioskNextShellControllerRequestOnMainThread),
diff --git a/ash/public/cpp/BUILD.gn b/ash/public/cpp/BUILD.gn
index bce7add..56e71f1 100644
--- a/ash/public/cpp/BUILD.gn
+++ b/ash/public/cpp/BUILD.gn
@@ -56,6 +56,8 @@
     "caption_buttons/frame_size_button_delegate.h",
     "caption_buttons/snap_controller.cc",
     "caption_buttons/snap_controller.h",
+    "cast_config_controller.cc",
+    "cast_config_controller.h",
     "default_frame_header.cc",
     "default_frame_header.h",
     "default_scale_factor_retriever.cc",
diff --git a/ash/public/cpp/cast_config_controller.cc b/ash/public/cpp/cast_config_controller.cc
new file mode 100644
index 0000000..7206371
--- /dev/null
+++ b/ash/public/cpp/cast_config_controller.cc
@@ -0,0 +1,40 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ash/public/cpp/cast_config_controller.h"
+
+#include "base/logging.h"
+
+namespace ash {
+
+namespace {
+CastConfigController* g_instance = nullptr;
+}
+
+CastSink::CastSink() = default;
+
+CastSink::CastSink(const CastSink& other) = default;
+
+SinkAndRoute::SinkAndRoute() = default;
+
+SinkAndRoute::SinkAndRoute(const SinkAndRoute& other) = default;
+
+SinkAndRoute::SinkAndRoute(SinkAndRoute&& other) = default;
+
+// static
+CastConfigController* CastConfigController::Get() {
+  return g_instance;
+}
+
+CastConfigController::CastConfigController() {
+  DCHECK_EQ(nullptr, g_instance);
+  g_instance = this;
+}
+
+CastConfigController::~CastConfigController() {
+  DCHECK_EQ(this, g_instance);
+  g_instance = nullptr;
+}
+
+}  // namespace ash
diff --git a/ash/public/cpp/cast_config_controller.h b/ash/public/cpp/cast_config_controller.h
new file mode 100644
index 0000000..132c9d43
--- /dev/null
+++ b/ash/public/cpp/cast_config_controller.h
@@ -0,0 +1,115 @@
+// Copyright 2019 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 ASH_PUBLIC_CPP_CAST_CONFIG_CONTROLLER_H_
+#define ASH_PUBLIC_CPP_CAST_CONFIG_CONTROLLER_H_
+
+#include <string>
+#include <vector>
+
+#include "ash/public/cpp/ash_public_export.h"
+#include "base/observer_list_types.h"
+
+namespace ash {
+
+// The type of icon the sink is associated with. These values match
+// media_router::SinkIconType.
+enum class SinkIconType {
+  kCast = 0,
+  kCastAudioGroup = 1,
+  kCastAudio = 2,
+  kMeeting = 3,
+  kHangout = 4,
+  kEducation = 5,
+  kWiredDisplay = 6,
+  kGeneric = 7,
+};
+
+struct ASH_PUBLIC_EXPORT CastSink {
+  CastSink();
+  CastSink(const CastSink& other);
+
+  std::string id;
+  std::string name;
+  std::string domain;
+
+  // Icon which describes the type of sink media is being routed to.
+  SinkIconType sink_icon_type = SinkIconType::kGeneric;
+};
+
+enum class ContentSource {
+  kUnknown,
+  kTab,
+  kDesktop,
+};
+
+struct ASH_PUBLIC_EXPORT CastRoute {
+  std::string id;
+  std::string title;
+
+  // Is the activity source this computer? ie, are we mirroring the display?
+  bool is_local_source = false;
+
+  // What is source of the content? For example, we could be DIAL casting a
+  // tab or mirroring the entire desktop.
+  ContentSource content_source = ContentSource::kUnknown;
+};
+
+struct ASH_PUBLIC_EXPORT SinkAndRoute {
+  SinkAndRoute();
+  SinkAndRoute(const SinkAndRoute& other);
+  SinkAndRoute(SinkAndRoute&& other);
+
+  CastSink sink;
+  CastRoute route;
+};
+
+// This interface allows the UI code in ash, e.g. |TrayCastDetailedView|, to
+// access the cast system. This is implemented in Chrome and is expected to
+// outlive ash::Shell.
+class ASH_PUBLIC_EXPORT CastConfigController {
+ public:
+  class Observer : public base::CheckedObserver {
+   public:
+    virtual void OnDevicesUpdated(const std::vector<SinkAndRoute>& devices) = 0;
+
+   protected:
+    ~Observer() override = default;
+  };
+
+  // Returns the singleton instance, which may be null in unit tests.
+  static CastConfigController* Get();
+
+  virtual void AddObserver(Observer* observer) = 0;
+  virtual void RemoveObserver(Observer* observer) = 0;
+
+  // Return true if there are available cast devices.
+  virtual bool HasSinksAndRoutes() const = 0;
+
+  // Return true if casting is active. The route may be DIAL based, such as
+  // casting YouTube where the cast sink directly streams content from another
+  // server. In that case, this device is not actively transmitting information
+  // to the cast sink.
+  virtual bool HasActiveRoute() const = 0;
+
+  // Request fresh data from the backend. When the data is available, all
+  // registered observers will get called.
+  virtual void RequestDeviceRefresh() = 0;
+
+  virtual const std::vector<ash::SinkAndRoute>& GetSinksAndRoutes() = 0;
+
+  // Initiate a casting session to the sink identified by |sink_id|.
+  virtual void CastToSink(const std::string& sink_id) = 0;
+
+  // A user-initiated request to stop the given cast session.
+  virtual void StopCasting(const std::string& route_id) = 0;
+
+ protected:
+  CastConfigController();
+  virtual ~CastConfigController();
+};
+
+}  // namespace ash
+
+#endif  // ASH_PUBLIC_CPP_CAST_CONFIG_CONTROLLER_H_
diff --git a/ash/public/cpp/manifest.cc b/ash/public/cpp/manifest.cc
index 196a363c..df991f083 100644
--- a/ash/public/cpp/manifest.cc
+++ b/ash/public/cpp/manifest.cc
@@ -11,7 +11,6 @@
 #include "ash/public/interfaces/ash_message_center_controller.mojom.h"
 #include "ash/public/interfaces/assistant_controller.mojom.h"
 #include "ash/public/interfaces/assistant_volume_control.mojom.h"
-#include "ash/public/interfaces/cast_config.mojom.h"
 #include "ash/public/interfaces/constants.mojom.h"
 #include "ash/public/interfaces/cros_display_config.mojom.h"
 #include "ash/public/interfaces/display_output_protection.mojom.h"
@@ -81,7 +80,7 @@
                   mojom::AssistantNotificationController,
                   mojom::AssistantScreenContextController,
                   mojom::AssistantSetupController,
-                  mojom::AssistantVolumeControl, mojom::CastConfig,
+                  mojom::AssistantVolumeControl,
                   mojom::KioskNextShellController,
                   mojom::CrosDisplayConfigController,
                   mojom::DockedMagnifierController,
diff --git a/ash/public/interfaces/BUILD.gn b/ash/public/interfaces/BUILD.gn
index 521ee16..162ac134 100644
--- a/ash/public/interfaces/BUILD.gn
+++ b/ash/public/interfaces/BUILD.gn
@@ -27,7 +27,6 @@
     "assistant_image_downloader.mojom",
     "assistant_setup.mojom",
     "assistant_volume_control.mojom",
-    "cast_config.mojom",
     "constants.mojom",
     "cros_display_config.mojom",
     "display_output_protection.mojom",
diff --git a/ash/public/interfaces/cast_config.mojom b/ash/public/interfaces/cast_config.mojom
deleted file mode 100644
index 2f27a9c..0000000
--- a/ash/public/interfaces/cast_config.mojom
+++ /dev/null
@@ -1,78 +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.
-
-module ash.mojom;
-
-// The type of icon the sink is associated with. These values match
-// media_router::SinkIconType.
-enum SinkIconType {
-  CAST = 0,
-  CAST_AUDIO_GROUP = 1,
-  CAST_AUDIO = 2,
-  MEETING = 3,
-  HANGOUT = 4,
-  EDUCATION = 5,
-  WIRED_DISPLAY = 6,
-  GENERIC = 7
-};
-
-struct CastSink {
-  string id;
-  string name;
-  string domain;
-
-  // Icon which describes the type of sink media is being routed to.
-  SinkIconType sink_icon_type = SinkIconType.GENERIC;
-};
-
-enum ContentSource {
-  UNKNOWN,
-  TAB,
-  DESKTOP
-};
-
-struct CastRoute {
-  string id;
-  string title;
-
-  // Is the activity source this computer? ie, are we mirroring the display?
-  bool is_local_source = false;
-
-  // What is source of the content? For example, we could be DIAL casting a
-  // tab or mirroring the entire desktop.
-  ContentSource content_source = ContentSource.UNKNOWN;
-};
-
-struct SinkAndRoute {
-  CastSink sink;
-  CastRoute route;
-};
-
-// Allows clients (e.g. Chrome browser) to interface with the cast item in the
-// system tray.
-interface CastConfig {
-  // Sets the client interface. This client interface will receive commands from
-  // ash and provide OnDevicesUpdated() calls.
-  SetClient(associated CastConfigClient client);
-
-  // Invoked whenever there is new sink or route information available.
-  OnDevicesUpdated(array<SinkAndRoute> device);
-};
-
-// This delegate allows the UI code in ash, e.g. |TrayCastDetailedView|,
-// to access the cast system.
-//
-// TODO(erg): Eventually, this should no longer be exported by chrome, but
-// should be exported by a separate cast service.
-interface CastConfigClient {
-  // Request fresh data from the backend. When the data is available, all
-  // registered observers will get called.
-  RequestDeviceRefresh();
-
-  // Initiate a casting session to |sink|.
-  CastToSink(CastSink sink);
-
-  // A user-initiated request to stop the given cast session.
-  StopCasting(CastRoute route);
-};
diff --git a/ash/shelf/shelf_layout_manager.cc b/ash/shelf/shelf_layout_manager.cc
index a932f19..83febfe 100644
--- a/ash/shelf/shelf_layout_manager.cc
+++ b/ash/shelf/shelf_layout_manager.cc
@@ -277,6 +277,7 @@
   Shell::Get()->activation_client()->AddObserver(this);
   Shell::Get()->locale_update_controller()->AddObserver(this);
   state_.session_state = Shell::Get()->session_controller()->GetSessionState();
+  shelf_background_type_ = GetShelfBackgroundType();
   wallpaper_controller_observer_.Add(Shell::Get()->wallpaper_controller());
   display::Screen::GetScreen()->AddObserver(this);
   ScreenRotationAnimator::GetForRootWindow(
diff --git a/ash/shell.cc b/ash/shell.cc
index b98dd53..d25afe58 100644
--- a/ash/shell.cc
+++ b/ash/shell.cc
@@ -22,7 +22,6 @@
 #include "ash/app_list/app_list_controller_impl.h"
 #include "ash/assistant/assistant_controller.h"
 #include "ash/autoclick/autoclick_controller.h"
-#include "ash/cast_config_controller.h"
 #include "ash/dbus/ash_dbus_helper.h"
 #include "ash/dbus/ash_dbus_services.h"
 #include "ash/detachable_base/detachable_base_handler.h"
@@ -619,7 +618,6 @@
       ash_display_controller_(std::make_unique<AshDisplayController>()),
       brightness_control_delegate_(
           std::make_unique<system::BrightnessControllerChromeos>()),
-      cast_config_(std::make_unique<CastConfigController>()),
       connector_(connector),
       first_run_helper_(std::make_unique<FirstRunHelper>()),
       focus_cycler_(std::make_unique<FocusCycler>()),
diff --git a/ash/shell.h b/ash/shell.h
index e561b7b..baab7eb 100644
--- a/ash/shell.h
+++ b/ash/shell.h
@@ -106,7 +106,6 @@
 class BluetoothNotificationController;
 class BluetoothPowerController;
 class BrightnessControlDelegate;
-class CastConfigController;
 class DisplayOutputProtection;
 class CrosDisplayConfig;
 class DesksController;
@@ -353,7 +352,6 @@
   BrightnessControlDelegate* brightness_control_delegate() {
     return brightness_control_delegate_.get();
   }
-  CastConfigController* cast_config() { return cast_config_.get(); }
   service_manager::Connector* connector() { return connector_; }
   CrosDisplayConfig* cros_display_config() {
     return cros_display_config_.get();
@@ -710,7 +708,6 @@
   std::unique_ptr<AssistantController> assistant_controller_;
   std::unique_ptr<BacklightsForcedOffSetter> backlights_forced_off_setter_;
   std::unique_ptr<BrightnessControlDelegate> brightness_control_delegate_;
-  std::unique_ptr<CastConfigController> cast_config_;
   std::unique_ptr<CrosDisplayConfig> cros_display_config_;
   service_manager::Connector* const connector_;
   std::unique_ptr<DesksController> desks_controller_;
diff --git a/ash/system/cast/cast_feature_pod_controller.cc b/ash/system/cast/cast_feature_pod_controller.cc
index 239427c2..4eee642 100644
--- a/ash/system/cast/cast_feature_pod_controller.cc
+++ b/ash/system/cast/cast_feature_pod_controller.cc
@@ -17,11 +17,11 @@
 CastFeaturePodController::CastFeaturePodController(
     UnifiedSystemTrayController* tray_controller)
     : tray_controller_(tray_controller) {
-  Shell::Get()->cast_config()->AddObserver(this);
 }
 
 CastFeaturePodController::~CastFeaturePodController() {
-  Shell::Get()->cast_config()->RemoveObserver(this);
+  if (CastConfigController::Get() && button_)
+    CastConfigController::Get()->RemoveObserver(this);
 }
 
 FeaturePodButton* CastFeaturePodController::CreateButton() {
@@ -33,7 +33,12 @@
   button_->ShowDetailedViewArrow();
   button_->DisableLabelButtonFocus();
   button_->SetID(VIEW_ID_CAST_MAIN_VIEW);
-  Update();
+
+  if (CastConfigController::Get()) {
+    CastConfigController::Get()->AddObserver(this);
+    CastConfigController::Get()->RequestDeviceRefresh();
+  }
+
   return button_;
 }
 
@@ -46,14 +51,13 @@
 }
 
 void CastFeaturePodController::OnDevicesUpdated(
-    std::vector<mojom::SinkAndRoutePtr> devices) {
+    const std::vector<SinkAndRoute>& devices) {
   Update();
 }
 
 void CastFeaturePodController::Update() {
-  CastConfigController* cast_config = Shell::Get()->cast_config();
-  button_->SetVisible(cast_config->Connected() &&
-                      cast_config->HasSinksAndRoutes() &&
+  auto* cast_config = CastConfigController::Get();
+  button_->SetVisible(cast_config && cast_config->HasSinksAndRoutes() &&
                       !cast_config->HasActiveRoute());
 }
 
diff --git a/ash/system/cast/cast_feature_pod_controller.h b/ash/system/cast/cast_feature_pod_controller.h
index cfae108..a88258a4f 100644
--- a/ash/system/cast/cast_feature_pod_controller.h
+++ b/ash/system/cast/cast_feature_pod_controller.h
@@ -6,7 +6,7 @@
 #define ASH_SYSTEM_CAST_CAST_FEATURE_POD_CONTROLLER_H_
 
 #include "ash/ash_export.h"
-#include "ash/cast_config_controller.h"
+#include "ash/public/cpp/cast_config_controller.h"
 #include "ash/system/unified/feature_pod_controller_base.h"
 #include "base/macros.h"
 
@@ -17,7 +17,7 @@
 // Controller of cast feature pod button.
 class ASH_EXPORT CastFeaturePodController
     : public FeaturePodControllerBase,
-      public CastConfigControllerObserver {
+      public CastConfigController::Observer {
  public:
   CastFeaturePodController(UnifiedSystemTrayController* tray_controller);
   ~CastFeaturePodController() override;
@@ -28,7 +28,7 @@
   SystemTrayItemUmaType GetUmaType() const override;
 
   // CastConfigControllerObserver:
-  void OnDevicesUpdated(std::vector<mojom::SinkAndRoutePtr> devices) override;
+  void OnDevicesUpdated(const std::vector<SinkAndRoute>& devices) override;
 
  private:
   void Update();
diff --git a/ash/system/cast/cast_notification_controller.cc b/ash/system/cast/cast_notification_controller.cc
index 78c15e7..d35efc42 100644
--- a/ash/system/cast/cast_notification_controller.cc
+++ b/ash/system/cast/cast_notification_controller.cc
@@ -22,31 +22,31 @@
 namespace {
 
 bool ShouldShowNotification() {
-  CastConfigController* cast_config = Shell::Get()->cast_config();
-  return cast_config->Connected() && cast_config->HasSinksAndRoutes() &&
+  auto* cast_config = CastConfigController::Get();
+  return cast_config && cast_config->HasSinksAndRoutes() &&
          cast_config->HasActiveRoute();
 }
 
-base::string16 GetNotificationTitle(const mojom::CastSinkPtr& sink,
-                                    const mojom::CastRoutePtr& route) {
-  switch (route->content_source) {
-    case ash::mojom::ContentSource::UNKNOWN:
+base::string16 GetNotificationTitle(const CastSink& sink,
+                                    const CastRoute& route) {
+  switch (route.content_source) {
+    case ContentSource::kUnknown:
       return l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_CAST_CAST_UNKNOWN);
-    case ash::mojom::ContentSource::TAB:
-    case ash::mojom::ContentSource::DESKTOP:
+    case ContentSource::kTab:
+    case ContentSource::kDesktop:
       return l10n_util::GetStringFUTF16(
           IDS_ASH_STATUS_TRAY_CAST_NOTIFICATION_TITLE,
-          base::UTF8ToUTF16(sink->name));
+          base::UTF8ToUTF16(sink.name));
   }
 }
 
-base::string16 GetNotificationMessage(const mojom::CastRoutePtr& route) {
-  switch (route->content_source) {
-    case ash::mojom::ContentSource::UNKNOWN:
+base::string16 GetNotificationMessage(const CastRoute& route) {
+  switch (route.content_source) {
+    case ContentSource::kUnknown:
       return base::string16();
-    case ash::mojom::ContentSource::TAB:
-      return base::UTF8ToUTF16(route->title);
-    case ash::mojom::ContentSource::DESKTOP:
+    case ContentSource::kTab:
+      return base::UTF8ToUTF16(route.title);
+    case ContentSource::kDesktop:
       return l10n_util::GetStringUTF16(
           IDS_ASH_STATUS_TRAY_CAST_CAST_DESKTOP_NOTIFICATION_MESSAGE);
   }
@@ -58,40 +58,41 @@
 }  // namespace
 
 CastNotificationController::CastNotificationController() {
-  Shell::Get()->cast_config()->AddObserver(this);
-  Shell::Get()->cast_config()->RequestDeviceRefresh();
+  if (CastConfigController::Get()) {
+    CastConfigController::Get()->AddObserver(this);
+    CastConfigController::Get()->RequestDeviceRefresh();
+  }
 }
 
 CastNotificationController::~CastNotificationController() {
-  Shell::Get()->cast_config()->RemoveObserver(this);
+  if (CastConfigController::Get())
+    CastConfigController::Get()->RemoveObserver(this);
 }
 
 void CastNotificationController::OnDevicesUpdated(
-    std::vector<mojom::SinkAndRoutePtr> devices) {
-  if (ShouldShowNotification())
-    ShowNotification(std::move(devices));
-  else
-    RemoveNotification();
-}
+    const std::vector<SinkAndRoute>& devices) {
+  if (!ShouldShowNotification()) {
+    message_center::MessageCenter::Get()->RemoveNotification(
+        kNotificationId, false /* by_user */);
+    return;
+  }
 
-void CastNotificationController::ShowNotification(
-    std::vector<mojom::SinkAndRoutePtr> devices) {
   for (const auto& device : devices) {
-    const mojom::CastSinkPtr& sink = device->sink;
-    const mojom::CastRoutePtr& route = device->route;
+    const CastSink& sink = device.sink;
+    const CastRoute& route = device.route;
 
     // We only want to display casts that came from this machine, since on a
     // busy network many other people could be casting.
-    if (route->id.empty() || !route->is_local_source)
+    if (route.id.empty() || !route.is_local_source)
       continue;
 
-    displayed_route_ = route.Clone();
+    displayed_route_id_ = route.id;
 
     message_center::RichNotificationData data;
     data.buttons.push_back(message_center::ButtonInfo(
         l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_CAST_STOP)));
 
-    std::unique_ptr<Notification> notification = ash::CreateSystemNotification(
+    std::unique_ptr<Notification> notification = CreateSystemNotification(
         message_center::NOTIFICATION_TYPE_SIMPLE, kNotificationId,
         GetNotificationTitle(sink, route), GetNotificationMessage(route),
         base::string16() /* display_source */, GURL(),
@@ -110,13 +111,8 @@
   }
 }
 
-void CastNotificationController::RemoveNotification() {
-  message_center::MessageCenter::Get()->RemoveNotification(kNotificationId,
-                                                           false /* by_user */);
-}
-
 void CastNotificationController::StopCasting() {
-  Shell::Get()->cast_config()->StopCasting(displayed_route_.Clone());
+  CastConfigController::Get()->StopCasting(displayed_route_id_);
   Shell::Get()->metrics()->RecordUserMetricsAction(
       UMA_STATUS_AREA_CAST_STOP_CAST);
 }
diff --git a/ash/system/cast/cast_notification_controller.h b/ash/system/cast/cast_notification_controller.h
index c8ccc110..3622c7d 100644
--- a/ash/system/cast/cast_notification_controller.h
+++ b/ash/system/cast/cast_notification_controller.h
@@ -5,27 +5,27 @@
 #ifndef ASH_SYSTEM_CAST_CAST_NOTIFICATION_CONTROLLER_H_
 #define ASH_SYSTEM_CAST_CAST_NOTIFICATION_CONTROLLER_H_
 
-#include "ash/cast_config_controller.h"
+#include "ash/public/cpp/cast_config_controller.h"
+
+#include "base/macros.h"
+#include "base/memory/weak_ptr.h"
 
 namespace ash {
 
-class CastNotificationController : public CastConfigControllerObserver {
+class CastNotificationController : public CastConfigController::Observer {
  public:
   CastNotificationController();
   ~CastNotificationController() override;
 
   // CastConfigControllerObserver:
-  void OnDevicesUpdated(std::vector<mojom::SinkAndRoutePtr> devices) override;
+  void OnDevicesUpdated(const std::vector<SinkAndRoute>& devices) override;
 
  private:
-  void ShowNotification(std::vector<mojom::SinkAndRoutePtr> devices);
-  void RemoveNotification();
-
   void StopCasting();
 
   // The cast activity id that we are displaying. If the user stops a cast, we
   // send this value to the config delegate so that we stop the right cast.
-  mojom::CastRoutePtr displayed_route_;
+  std::string displayed_route_id_;
 
   base::WeakPtrFactory<CastNotificationController> weak_ptr_factory_{this};
 
diff --git a/ash/system/cast/tray_cast.cc b/ash/system/cast/tray_cast.cc
index 4644ee4..07e3c7ec 100644
--- a/ash/system/cast/tray_cast.cc
+++ b/ash/system/cast/tray_cast.cc
@@ -11,7 +11,6 @@
 
 #include "ash/metrics/user_metrics_recorder.h"
 #include "ash/public/cpp/ash_view_ids.h"
-#include "ash/public/interfaces/cast_config.mojom.h"
 #include "ash/resources/vector_icons/vector_icons.h"
 #include "ash/shell.h"
 #include "ash/strings/grit/ash_strings.h"
@@ -33,32 +32,32 @@
 
 // Returns the correct vector icon for |icon_type|. Some types may be different
 // for branded builds.
-const gfx::VectorIcon& SinkIconTypeToIcon(mojom::SinkIconType icon_type) {
+const gfx::VectorIcon& SinkIconTypeToIcon(SinkIconType icon_type) {
   switch (icon_type) {
 #if defined(GOOGLE_CHROME_BUILD)
-    case mojom::SinkIconType::CAST:
+    case SinkIconType::kCast:
       return kSystemMenuCastDeviceIcon;
-    case mojom::SinkIconType::EDUCATION:
+    case SinkIconType::kEducation:
       return kSystemMenuCastEducationIcon;
-    case mojom::SinkIconType::HANGOUT:
+    case SinkIconType::kHangout:
       return kSystemMenuCastHangoutIcon;
-    case mojom::SinkIconType::MEETING:
+    case SinkIconType::kMeeting:
       return kSystemMenuCastMeetingIcon;
 #else
-    case mojom::SinkIconType::CAST:
-    case mojom::SinkIconType::EDUCATION:
+    case SinkIconType::kCast:
+    case SinkIconType::kEducation:
       return kSystemMenuCastGenericIcon;
-    case mojom::SinkIconType::HANGOUT:
-    case mojom::SinkIconType::MEETING:
+    case SinkIconType::kHangout:
+    case SinkIconType::kMeeting:
       return kSystemMenuCastMessageIcon;
 #endif
-    case mojom::SinkIconType::GENERIC:
+    case SinkIconType::kGeneric:
       return kSystemMenuCastGenericIcon;
-    case mojom::SinkIconType::CAST_AUDIO_GROUP:
+    case SinkIconType::kCastAudioGroup:
       return kSystemMenuCastAudioGroupIcon;
-    case mojom::SinkIconType::CAST_AUDIO:
+    case SinkIconType::kCastAudio:
       return kSystemMenuCastAudioIcon;
-    case mojom::SinkIconType::WIRED_DISPLAY:
+    case SinkIconType::kWiredDisplay:
       return kSystemMenuCastGenericIcon;
   }
 
@@ -70,41 +69,42 @@
 
 namespace tray {
 
-CastDetailedView::CastDetailedView(
-    DetailedViewDelegate* delegate,
-    const std::vector<mojom::SinkAndRoutePtr>& sinks_routes)
+CastDetailedView::CastDetailedView(DetailedViewDelegate* delegate)
     : TrayDetailedView(delegate) {
   CreateItems();
-  UpdateReceiverList(sinks_routes);
+  OnDevicesUpdated(CastConfigController::Get()->GetSinksAndRoutes());
+  CastConfigController::Get()->AddObserver(this);
 }
 
-CastDetailedView::~CastDetailedView() = default;
+CastDetailedView::~CastDetailedView() {
+  CastConfigController::Get()->RemoveObserver(this);
+}
 
 void CastDetailedView::CreateItems() {
   CreateScrollableList();
   CreateTitleRow(IDS_ASH_STATUS_TRAY_CAST);
 }
 
-void CastDetailedView::UpdateReceiverList(
-    const std::vector<mojom::SinkAndRoutePtr>& sinks_routes) {
+void CastDetailedView::OnDevicesUpdated(
+    const std::vector<SinkAndRoute>& sinks_routes) {
   // Add/update existing.
-  for (const auto& it : sinks_routes)
-    sinks_and_routes_[it->sink->id] = it->Clone();
+  for (const auto& device : sinks_routes)
+    sinks_and_routes_.insert(std::make_pair(device.sink.id, device));
 
   // Remove non-existent sinks. Removing an element invalidates all existing
   // iterators.
-  auto i = sinks_and_routes_.begin();
-  while (i != sinks_and_routes_.end()) {
+  auto iter = sinks_and_routes_.begin();
+  while (iter != sinks_and_routes_.end()) {
     bool has_receiver = false;
     for (auto& receiver : sinks_routes) {
-      if (i->first == receiver->sink->id)
+      if (iter->first == receiver.sink.id)
         has_receiver = true;
     }
 
     if (has_receiver)
-      ++i;
+      ++iter;
     else
-      i = sinks_and_routes_.erase(i);
+      iter = sinks_and_routes_.erase(iter);
   }
 
   // Update UI.
@@ -119,11 +119,10 @@
 
   // Add a view for each receiver.
   for (auto& it : sinks_and_routes_) {
-    const ash::mojom::SinkAndRoutePtr& sink_route = it.second;
-    const base::string16 name = base::UTF8ToUTF16(sink_route->sink->name);
+    const CastSink& sink = it.second.sink;
     views::View* container = AddScrollListItem(
-        SinkIconTypeToIcon(sink_route->sink->sink_icon_type), name);
-    view_to_sink_map_[container] = sink_route->sink.Clone();
+        SinkIconTypeToIcon(sink.sink_icon_type), base::UTF8ToUTF16(sink.name));
+    view_to_sink_map_[container] = sink.id;
   }
 
   scroll_content()->SizeToPreferredSize();
@@ -134,7 +133,7 @@
   // Find the receiver we are going to cast to.
   auto it = view_to_sink_map_.find(view);
   if (it != view_to_sink_map_.end()) {
-    Shell::Get()->cast_config()->CastToSink(it->second.Clone());
+    CastConfigController::Get()->CastToSink(it->second);
     Shell::Get()->metrics()->RecordUserMetricsAction(
         UMA_STATUS_AREA_DETAILED_CAST_VIEW_LAUNCH_CAST);
   }
diff --git a/ash/system/cast/tray_cast.h b/ash/system/cast/tray_cast.h
index 0803d80..0c1d717 100644
--- a/ash/system/cast/tray_cast.h
+++ b/ash/system/cast/tray_cast.h
@@ -8,8 +8,7 @@
 #include <string>
 #include <vector>
 
-#include "ash/cast_config_controller.h"
-#include "ash/shell_observer.h"
+#include "ash/public/cpp/cast_config_controller.h"
 #include "ash/system/tray/tray_detailed_view.h"
 #include "base/macros.h"
 
@@ -19,15 +18,14 @@
 // This view displays a list of cast receivers that can be clicked on and casted
 // to. It is activated by clicking on the chevron inside of
 // |CastSelectDefaultView|.
-class CastDetailedView : public TrayDetailedView {
+class CastDetailedView : public TrayDetailedView,
+                         public CastConfigController::Observer {
  public:
-  CastDetailedView(DetailedViewDelegate* delegate,
-                   const std::vector<mojom::SinkAndRoutePtr>& sinks_and_routes);
+  explicit CastDetailedView(DetailedViewDelegate* delegate);
   ~CastDetailedView() override;
 
-  // Updates the list of available receivers.
-  void UpdateReceiverList(
-      const std::vector<mojom::SinkAndRoutePtr>& sinks_routes);
+  // CastConfigController::Observer:
+  void OnDevicesUpdated(const std::vector<SinkAndRoute>& devices) override;
 
  private:
   void CreateItems();
@@ -37,10 +35,10 @@
   // TrayDetailedView:
   void HandleViewClicked(views::View* view) override;
 
-  // A mapping from the receiver id to the receiver/activity data.
-  std::map<std::string, ash::mojom::SinkAndRoutePtr> sinks_and_routes_;
-  // A mapping from the view pointer to the associated activity id.
-  std::map<views::View*, ash::mojom::CastSinkPtr> view_to_sink_map_;
+  // A mapping from the sink id to the receiver/activity data.
+  std::map<std::string, SinkAndRoute> sinks_and_routes_;
+  // A mapping from the view pointer to the associated activity sink id.
+  std::map<views::View*, std::string> view_to_sink_map_;
 
   DISALLOW_COPY_AND_ASSIGN(CastDetailedView);
 };
diff --git a/ash/system/cast/unified_cast_detailed_view_controller.cc b/ash/system/cast/unified_cast_detailed_view_controller.cc
index 30737d7..4bbd35a 100644
--- a/ash/system/cast/unified_cast_detailed_view_controller.cc
+++ b/ash/system/cast/unified_cast_detailed_view_controller.cc
@@ -20,15 +20,8 @@
 
 views::View* UnifiedCastDetailedViewController::CreateView() {
   DCHECK(!view_);
-  view_ = new tray::CastDetailedView(
-      detailed_view_delegate_.get(),
-      Shell::Get()->cast_config()->sinks_and_routes());
+  view_ = new tray::CastDetailedView(detailed_view_delegate_.get());
   return view_;
 }
 
-void UnifiedCastDetailedViewController::OnDevicesUpdated(
-    std::vector<mojom::SinkAndRoutePtr> devices) {
-  view_->UpdateReceiverList(std::move(devices));
-}
-
 }  // namespace ash
diff --git a/ash/system/cast/unified_cast_detailed_view_controller.h b/ash/system/cast/unified_cast_detailed_view_controller.h
index f8fac22..9f3d10c 100644
--- a/ash/system/cast/unified_cast_detailed_view_controller.h
+++ b/ash/system/cast/unified_cast_detailed_view_controller.h
@@ -5,8 +5,9 @@
 #ifndef ASH_SYSTEM_CAST_UNIFIED_CAST_DETAILED_VIEW_CONTROLLER_H_
 #define ASH_SYSTEM_CAST_UNIFIED_CAST_DETAILED_VIEW_CONTROLLER_H_
 
-#include "ash/cast_config_controller.h"
+#include "ash/public/cpp/cast_config_controller.h"
 #include "ash/system/unified/detailed_view_controller.h"
+#include "base/macros.h"
 
 namespace ash {
 namespace tray {
@@ -17,8 +18,7 @@
 class UnifiedSystemTrayController;
 
 // Controller of Cast detailed view in UnifiedSystemTray.
-class UnifiedCastDetailedViewController : public DetailedViewController,
-                                          public CastConfigControllerObserver {
+class UnifiedCastDetailedViewController : public DetailedViewController {
  public:
   explicit UnifiedCastDetailedViewController(
       UnifiedSystemTrayController* tray_controller);
@@ -27,9 +27,6 @@
   // DetailedViewControllerBase:
   views::View* CreateView() override;
 
-  // CastConfigControllerObserver:
-  void OnDevicesUpdated(std::vector<mojom::SinkAndRoutePtr> devices) override;
-
  private:
   const std::unique_ptr<DetailedViewDelegate> detailed_view_delegate_;
 
diff --git a/ash/system/message_center/unified_message_center_view.cc b/ash/system/message_center/unified_message_center_view.cc
index 37e97d9..fd57f0be 100644
--- a/ash/system/message_center/unified_message_center_view.cc
+++ b/ash/system/message_center/unified_message_center_view.cc
@@ -21,6 +21,7 @@
 #include "ash/system/unified/unified_system_tray_view.h"
 #include "base/metrics/user_metrics.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/gfx/animation/linear_animation.h"
 #include "ui/gfx/canvas.h"
 #include "ui/message_center/message_center.h"
 #include "ui/message_center/public/cpp/message_center_constants.h"
@@ -40,6 +41,9 @@
 
 namespace {
 
+constexpr base::TimeDelta kHideStackingBarAnimationDuration =
+    base::TimeDelta::FromMilliseconds(330);
+
 enum ClearAllButtonTag {
   kStackingBarClearAllButtonTag,
   kBottomClearAllButtonTag,
@@ -205,7 +209,7 @@
   stacked_notification_count_ = stacked_notification_count;
 
   if (features::IsNotificationStackingBarRedesignEnabled()) {
-    SetVisible(total_notification_count_ > 1);
+    UpdateVisibility();
 
     auto tooltip = l10n_util::GetStringFUTF16Int(
         IDS_ASH_MESSAGE_CENTER_STACKING_BAR_CLEAR_ALL_BUTTON_TOOLTIP,
@@ -229,6 +233,12 @@
   return true;
 }
 
+void StackingNotificationCounterView::SetAnimationState(
+    UnifiedMessageCenterAnimationState animation_state) {
+  animation_state_ = animation_state;
+  UpdateVisibility();
+}
+
 void StackingNotificationCounterView::OnPaint(gfx::Canvas* canvas) {
   cc::PaintFlags flags;
   flags.setColor(message_center::kNotificationBackgroundColor);
@@ -269,6 +279,20 @@
   views::View::OnPaint(canvas);
 }
 
+void StackingNotificationCounterView::UpdateVisibility() {
+  switch (animation_state_) {
+    case UnifiedMessageCenterAnimationState::IDLE:
+      SetVisible(total_notification_count_ > 1);
+      break;
+    case UnifiedMessageCenterAnimationState::HIDE_STACKING_BAR:
+      SetVisible(true);
+      break;
+    case UnifiedMessageCenterAnimationState::COLLAPSE:
+      SetVisible(false);
+      break;
+  }
+}
+
 UnifiedMessageCenterView::UnifiedMessageCenterView(
     UnifiedSystemTrayView* parent,
     UnifiedSystemTrayModel* model)
@@ -278,7 +302,8 @@
       scroll_bar_(new MessageCenterScrollBar(this)),
       scroller_(new views::ScrollView()),
       message_list_view_(new UnifiedMessageListView(this, model)),
-      last_scroll_position_from_bottom_(kClearAllButtonRowHeight) {
+      last_scroll_position_from_bottom_(kClearAllButtonRowHeight),
+      animation_(std::make_unique<gfx::LinearAnimation>(this)) {
   message_list_view_->Init();
 
   AddChildView(stacking_counter_);
@@ -309,6 +334,13 @@
   UpdateVisibility();
 }
 
+void UnifiedMessageCenterView::OnNotificationSlidOut() {
+  if (stacking_counter_->visible() &&
+      message_list_view_->GetTotalNotificationCount() <= 1) {
+    StartHideStackingBarAnimation();
+  }
+}
+
 void UnifiedMessageCenterView::ListPreferredSizeChanged() {
   UpdateVisibility();
   PreferredSizeChanged();
@@ -341,12 +373,20 @@
                               GetStackedNotificationCount());
   if (stacking_counter_->visible()) {
     gfx::Rect counter_bounds(GetContentsBounds());
-    counter_bounds.set_height(GetStackingNotificationCounterHeight());
+
+    int stacking_counter_height = GetStackingNotificationCounterHeight();
+    int stacking_counter_offset = 0;
+    if (animation_state_ ==
+        UnifiedMessageCenterAnimationState::HIDE_STACKING_BAR)
+      stacking_counter_offset = GetAnimationValue() * stacking_counter_height;
+
+    counter_bounds.set_height(stacking_counter_height);
+    counter_bounds.set_y(counter_bounds.y() - stacking_counter_offset);
     stacking_counter_->SetBoundsRect(counter_bounds);
 
     gfx::Rect scroller_bounds(GetContentsBounds());
-    scroller_bounds.Inset(
-        gfx::Insets(GetStackingNotificationCounterHeight(), 0, 0, 0));
+    scroller_bounds.Inset(gfx::Insets(
+        stacking_counter_height - stacking_counter_offset, 0, 0, 0));
     scroller_->SetBoundsRect(scroller_bounds);
   } else {
     scroller_->SetBoundsRect(GetContentsBounds());
@@ -360,8 +400,11 @@
   gfx::Size preferred_size = scroller_->GetPreferredSize();
 
   if (stacking_counter_->visible()) {
-    preferred_size.set_height(preferred_size.height() +
-                              GetStackingNotificationCounterHeight());
+    int bar_height = GetStackingNotificationCounterHeight();
+    if (animation_state_ ==
+        UnifiedMessageCenterAnimationState::HIDE_STACKING_BAR)
+      bar_height -= GetAnimationValue() * bar_height;
+    preferred_size.set_height(preferred_size.height() + bar_height);
   }
 
   // Hide Clear All button at the buttom from initial viewport.
@@ -420,11 +463,53 @@
   OnMessageCenterScrolled();
 }
 
+void UnifiedMessageCenterView::AnimationEnded(const gfx::Animation* animation) {
+  // This is also called from AnimationCanceled().
+  animation_->SetCurrentValue(1.0);
+  PreferredSizeChanged();
+
+  switch (animation_state_) {
+    case UnifiedMessageCenterAnimationState::IDLE:
+      break;
+    case UnifiedMessageCenterAnimationState::HIDE_STACKING_BAR:
+      break;
+    case UnifiedMessageCenterAnimationState::COLLAPSE:
+      NOTIMPLEMENTED();
+      break;
+  }
+
+  animation_state_ = UnifiedMessageCenterAnimationState::IDLE;
+  stacking_counter_->SetAnimationState(animation_state_);
+}
+
+void UnifiedMessageCenterView::AnimationProgressed(
+    const gfx::Animation* animation) {
+  PreferredSizeChanged();
+}
+
+void UnifiedMessageCenterView::AnimationCanceled(
+    const gfx::Animation* animation) {
+  AnimationEnded(animation);
+}
+
 void UnifiedMessageCenterView::SetNotificationRectBelowScroll(
     const gfx::Rect& rect_below_scroll) {
   parent_->SetNotificationRectBelowScroll(rect_below_scroll);
 }
 
+void UnifiedMessageCenterView::StartHideStackingBarAnimation() {
+  animation_->End();
+  animation_state_ = UnifiedMessageCenterAnimationState::HIDE_STACKING_BAR;
+  stacking_counter_->SetAnimationState(animation_state_);
+  animation_->SetDuration(kHideStackingBarAnimationDuration);
+  animation_->Start();
+}
+
+double UnifiedMessageCenterView::GetAnimationValue() const {
+  return gfx::Tween::CalculateValue(gfx::Tween::FAST_OUT_SLOW_IN,
+                                    animation_->GetCurrentValue());
+}
+
 void UnifiedMessageCenterView::UpdateVisibility() {
   SessionControllerImpl* session_controller =
       Shell::Get()->session_controller();
diff --git a/ash/system/message_center/unified_message_center_view.h b/ash/system/message_center/unified_message_center_view.h
index 6de6186..d34eb9eb 100644
--- a/ash/system/message_center/unified_message_center_view.h
+++ b/ash/system/message_center/unified_message_center_view.h
@@ -8,12 +8,17 @@
 #include "ash/ash_export.h"
 #include "ash/system/message_center/message_center_scroll_bar.h"
 #include "ash/system/message_center/unified_message_list_view.h"
+#include "ui/gfx/animation/animation_delegate.h"
 #include "ui/views/background.h"
 #include "ui/views/controls/button/button.h"
 #include "ui/views/controls/label.h"
 #include "ui/views/focus/focus_manager.h"
 #include "ui/views/view.h"
 
+namespace gfx {
+class LinearAnimation;
+}  // namespace gfx
+
 namespace views {
 class ScrollView;
 }  // namespace views
@@ -24,6 +29,25 @@
 class UnifiedSystemTrayModel;
 class UnifiedSystemTrayView;
 
+// Note: This enum represents the current animation state for
+// UnifiedMessageCenterView. There is an equivalent animation state emum in
+// the child UnifiedMessageListView. The animations for these two views can
+// occur simultaneously or independently, so states for both views are tracked
+// separately.
+enum class UnifiedMessageCenterAnimationState {
+  // No animation is running.
+  IDLE,
+
+  // Animating hiding the stacking bar. Runs when the user dismisses the
+  // second to last notification and during the clear all animation.
+  HIDE_STACKING_BAR,
+
+  // Animating collapsing the entire message center. Runs after the user
+  // dismisses the last notification and during the clear all animation.
+  // TODO(tengs): This animation is not yet implemented.
+  COLLAPSE,
+};
+
 // The header shown above the notification list displaying the number of hidden
 // notifications. There are currently two UI implementations toggled by the
 // NotificationStackingBarRedesign feature flag.
@@ -36,14 +60,21 @@
   // true if the count was updated from the previous SetCount() call.
   bool SetCount(int total_notification_count, int stacked_notification_count);
 
+  // Sets the current animation state.
+  void SetAnimationState(UnifiedMessageCenterAnimationState animation_state);
+
   // views::View:
   void OnPaint(gfx::Canvas* canvas) override;
 
  private:
   friend class UnifiedMessageCenterViewTest;
 
+  void UpdateVisibility();
+
   int total_notification_count_ = 0;
   int stacked_notification_count_ = 0;
+  UnifiedMessageCenterAnimationState animation_state_ =
+      UnifiedMessageCenterAnimationState::IDLE;
 
   // These UI elements are only created and shown when the
   // NotificationStackingBarRedesign feature is enabled.
@@ -58,7 +89,8 @@
     : public views::View,
       public MessageCenterScrollBar::Observer,
       public views::ButtonListener,
-      public views::FocusChangeListener {
+      public views::FocusChangeListener,
+      public gfx::AnimationDelegate {
  public:
   UnifiedMessageCenterView(UnifiedSystemTrayView* parent,
                            UnifiedSystemTrayModel* model);
@@ -77,6 +109,10 @@
   // Called from UnifiedMessageListView when the preferred size is changed.
   void ListPreferredSizeChanged();
 
+  // Called from the UnifiedMessageListView after a notification is dismissed by
+  // the user and the slide animation is finished.
+  void OnNotificationSlidOut();
+
   // Configures MessageView to forward scroll events. Called from
   // UnifiedMessageListView.
   void ConfigureMessageView(message_center::MessageView* message_view);
@@ -100,6 +136,11 @@
   void OnWillChangeFocus(views::View* before, views::View* now) override;
   void OnDidChangeFocus(views::View* before, views::View* now) override;
 
+  // gfx::AnimationDelegate:
+  void AnimationEnded(const gfx::Animation* animation) override;
+  void AnimationProgressed(const gfx::Animation* animation) override;
+  void AnimationCanceled(const gfx::Animation* animation) override;
+
  protected:
   // Virtual for testing.
   virtual void SetNotificationRectBelowScroll(
@@ -108,6 +149,14 @@
  private:
   friend class UnifiedMessageCenterViewTest;
 
+  // Starts the animation to hide the notification stacking bar.
+  void StartHideStackingBarAnimation();
+
+  // Returns the current animation value after tweening.
+  double GetAnimationValue() const;
+
+  // Decides whether the message center should be shown or not based on
+  // current state.
   void UpdateVisibility();
 
   // Scroll the notification list to the target position.
@@ -132,6 +181,11 @@
   // or collapsed).
   int available_height_ = 0;
 
+  // Tracks the current animation state.
+  UnifiedMessageCenterAnimationState animation_state_ =
+      UnifiedMessageCenterAnimationState::IDLE;
+  const std::unique_ptr<gfx::LinearAnimation> animation_;
+
   views::FocusManager* focus_manager_ = nullptr;
 
   DISALLOW_COPY_AND_ASSIGN(UnifiedMessageCenterView);
diff --git a/ash/system/message_center/unified_message_center_view_unittest.cc b/ash/system/message_center/unified_message_center_view_unittest.cc
index 0e085db3..183f14a 100644
--- a/ash/system/message_center/unified_message_center_view_unittest.cc
+++ b/ash/system/message_center/unified_message_center_view_unittest.cc
@@ -118,17 +118,17 @@
     size_changed_count_ = 0;
   }
 
-  void AnimateToValue(float value) {
+  void AnimateMessageListToValue(float value) {
     GetMessageListView()->animation_->SetCurrentValue(value);
     GetMessageListView()->AnimationProgressed(
         GetMessageListView()->animation_.get());
   }
 
-  void AnimateToMiddle() { AnimateToValue(0.5); }
+  void AnimateMessageListToMiddle() { AnimateMessageListToValue(0.5); }
 
-  void AnimateToEnd() { GetMessageListView()->animation_->End(); }
+  void AnimateMessageListToEnd() { GetMessageListView()->animation_->End(); }
 
-  void AnimateUntilIdle() {
+  void AnimateMessageListUntilIdle() {
     while (GetMessageListView()->animation_->is_animating())
       GetMessageListView()->animation_->End();
   }
@@ -144,6 +144,10 @@
     return message_center_view()->message_list_view_;
   }
 
+  gfx::LinearAnimation* GetMessageCenterAnimation() {
+    return message_center_view()->animation_.get();
+  }
+
   views::ScrollView* GetScroller() { return message_center_view()->scroller_; }
 
   MessageCenterScrollBar* GetScrollBar() {
@@ -224,10 +228,10 @@
                 GetScroller()->GetVisibleRect().bottom());
 
   MessageCenter::Get()->RemoveNotification(id0, true /* by_user */);
-  AnimateToEnd();
-  AnimateToMiddle();
+  AnimateMessageListToEnd();
+  AnimateMessageListToMiddle();
   EXPECT_TRUE(message_center_view()->visible());
-  AnimateToEnd();
+  AnimateMessageListToEnd();
   EXPECT_FALSE(message_center_view()->visible());
 }
 
@@ -251,8 +255,8 @@
 
   // The first animation slides the notification out of the list, and the second
   // animation collapses the list.
-  AnimateToEnd();
-  AnimateToValue(0);
+  AnimateMessageListToEnd();
+  AnimateMessageListToValue(0);
 
   // The scroll position should not change after sliding the notification out
   // and instead should wait until the animation finishes.
@@ -260,7 +264,7 @@
 
   // The scroll position should be reduced by the height of the removed
   // notification after collapsing.
-  AnimateToEnd();
+  AnimateMessageListToEnd();
   EXPECT_EQ(scroll_position - GetMessageViewVisibleBounds(0).height(),
             GetScroller()->GetVisibleRect().y());
 
@@ -283,7 +287,7 @@
   const int previous_list_height = GetMessageListView()->height();
 
   MessageCenter::Get()->RemoveNotification(ids.back(), true /* by_user */);
-  AnimateUntilIdle();
+  AnimateMessageListUntilIdle();
   EXPECT_TRUE(message_center_view()->visible());
   EXPECT_GT(previous_contents_height, GetScrollerContents()->height());
   EXPECT_GT(previous_list_height, GetMessageListView()->height());
@@ -368,7 +372,7 @@
   // When Clear All button is pressed, all notifications are removed and the
   // view becomes invisible.
   message_center_view()->ButtonPressed(nullptr, DummyEvent());
-  AnimateUntilIdle();
+  AnimateMessageListUntilIdle();
   EXPECT_FALSE(message_center_view()->visible());
 }
 
@@ -521,7 +525,7 @@
   EXPECT_TRUE(GetStackingCounter()->visible());
   for (size_t i = 0; i < 5; ++i) {
     MessageCenter::Get()->RemoveNotification(ids[i], true /* by_user */);
-    AnimateUntilIdle();
+    AnimateMessageListUntilIdle();
   }
   EXPECT_FALSE(GetStackingCounter()->visible());
 }
@@ -615,7 +619,7 @@
   EXPECT_TRUE(GetStackingCounter()->visible());
   for (size_t i = 0; i < 4; ++i) {
     MessageCenter::Get()->RemoveNotification(ids[i], true /* by_user */);
-    AnimateUntilIdle();
+    AnimateMessageListUntilIdle();
   }
   EXPECT_TRUE(GetStackingCounter()->visible());
   EXPECT_FALSE(GetStackingCounterLabel()->visible());
@@ -629,9 +633,25 @@
             message_center_view()->height());
 
   // Dismiss until there is only 1 notification left. The bar should be
-  // invisible.
+  // hidden after an animation.
   MessageCenter::Get()->RemoveNotification(ids[4], true /* by_user */);
-  AnimateUntilIdle();
+  EXPECT_TRUE(GetStackingCounter()->visible());
+
+  // The HIDE_STACKING_BAR animation starts after the notification is slid out.
+  AnimateMessageListToEnd();
+  auto* hide_animation = GetMessageCenterAnimation();
+  EXPECT_TRUE(hide_animation->is_animating());
+  EXPECT_TRUE(GetStackingCounter()->visible());
+
+  // Animate to middle. The bar should still be visible.
+  AnimateMessageListToMiddle();
+  hide_animation->SetCurrentValue(0.5);
+  message_center_view()->AnimationProgressed(hide_animation);
+  EXPECT_TRUE(GetStackingCounter()->visible());
+
+  // Animate to end. The bar should now be hidden.
+  AnimateMessageListToEnd();
+  hide_animation->End();
   EXPECT_FALSE(GetStackingCounter()->visible());
 }
 
@@ -778,7 +798,7 @@
 
   // Remove the notification and observe that the focus is cleared.
   MessageCenter::Get()->RemoveNotification(id1, true /* by_user */);
-  AnimateUntilIdle();
+  AnimateMessageListUntilIdle();
   EXPECT_FALSE(message_center_view()->GetFocusManager()->GetFocusedView());
 
   widget->GetRootView()->RemoveChildView(message_center_view());
diff --git a/ash/system/message_center/unified_message_list_view.cc b/ash/system/message_center/unified_message_list_view.cc
index 824a3b67..463ba3d 100644
--- a/ash/system/message_center/unified_message_list_view.cc
+++ b/ash/system/message_center/unified_message_list_view.cc
@@ -395,6 +395,8 @@
     UpdateClearAllAnimation();
   }
 
+  UpdateBorders();
+
   if (state_ != State::IDLE)
     StartAnimation();
 }
@@ -457,9 +459,11 @@
 }
 
 void UnifiedMessageListView::UpdateBorders() {
-  // When the stacking bar is shown, there should never be a top notification.
-  bool is_top = !features::IsNotificationStackingBarRedesignEnabled() ||
-                children().size() == 1;
+  // The top notification is drawn with rounded corners when the stacking bar is
+  // not shown.
+  bool is_top = (!features::IsNotificationStackingBarRedesignEnabled() ||
+                 children().size() == 1) &&
+                state_ != State::MOVE_DOWN;
   for (auto* child : children()) {
     AsMVC(child)->UpdateBorder(is_top, child == children().back());
     is_top = false;
@@ -532,8 +536,13 @@
     case State::IDLE:
       break;
     case State::SLIDE_OUT:
-      FALLTHROUGH;
+      animation_->SetDuration(kClosingAnimationDuration);
+      animation_->Start();
+      break;
     case State::MOVE_DOWN:
+      // |message_center_view_| can be null in tests.
+      if (message_center_view_)
+        message_center_view_->OnNotificationSlidOut();
       animation_->SetDuration(kClosingAnimationDuration);
       animation_->Start();
       break;
diff --git a/ash/system/tray/tray_bubble_view.cc b/ash/system/tray/tray_bubble_view.cc
index 571d8e5bf..6b0e060 100644
--- a/ash/system/tray/tray_bubble_view.cc
+++ b/ash/system/tray/tray_bubble_view.cc
@@ -24,6 +24,7 @@
 #include "ui/gfx/geometry/insets.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/skia_util.h"
+#include "ui/native_theme/native_theme_dark_aura.h"
 #include "ui/views/bubble/bubble_frame_view.h"
 #include "ui/views/layout/box_layout.h"
 #include "ui/views/painter.h"
@@ -232,6 +233,8 @@
   set_margins(gfx::Insets());
   SetPaintToLayer();
 
+  SetNativeTheme(ui::NativeThemeDarkAura::instance());
+
   if (!ash::features::ShouldUseShaderRoundedCorner()) {
     bubble_content_mask_ = views::Painter::CreatePaintedLayer(
         views::Painter::CreateSolidRoundRectPainter(
diff --git a/ash/system/unified/unified_system_tray_bubble.cc b/ash/system/unified/unified_system_tray_bubble.cc
index ba4ddc01..86872901 100644
--- a/ash/system/unified/unified_system_tray_bubble.cc
+++ b/ash/system/unified/unified_system_tray_bubble.cc
@@ -20,6 +20,7 @@
 #include "ash/wm/work_area_insets.h"
 #include "base/metrics/histogram_macros.h"
 #include "ui/aura/window.h"
+#include "ui/native_theme/native_theme_dark_aura.h"
 #include "ui/wm/core/window_util.h"
 #include "ui/wm/public/activation_client.h"
 
diff --git a/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java b/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
index 9001194..ae710cf 100644
--- a/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
+++ b/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
@@ -620,9 +620,9 @@
 
         if (processType == LibraryProcessType.PROCESS_BROWSER
                 && PLATFORM_REQUIRES_NATIVE_FALLBACK_EXTRACTION) {
-            // Perform the detection and deletion of obsolete native libraries on a background
+            // Perform the detection and deletion of obsolete native libraries on a
             // background thread.
-            PostTask.postTask(TaskTraits.BEST_EFFORT_MAY_BLOCK, () -> {
+            new Thread(() -> {
                 final String suffix = BuildInfo.getInstance().extractedFileSuffix;
                 final File[] files = getLibraryDir().listFiles();
                 if (files == null) return;
@@ -645,7 +645,7 @@
                         }
                     }
                 }
-            });
+            }).start();
         }
 
         // From this point on, native code is ready to use and checkIsReady()
diff --git a/base/nix/xdg_util_unittest.cc b/base/nix/xdg_util_unittest.cc
index ad81836..d6f4c5b 100644
--- a/base/nix/xdg_util_unittest.cc
+++ b/base/nix/xdg_util_unittest.cc
@@ -9,6 +9,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 
 using ::testing::_;
+using ::testing::DoAll;
 using ::testing::Eq;
 using ::testing::Return;
 using ::testing::SetArgPointee;
diff --git a/base/task/common/scoped_defer_task_posting.cc b/base/task/common/scoped_defer_task_posting.cc
index 9dc719c..00194bd3 100644
--- a/base/task/common/scoped_defer_task_posting.cc
+++ b/base/task/common/scoped_defer_task_posting.cc
@@ -38,12 +38,13 @@
 }
 
 // static
-void ScopedDeferTaskPosting::Set(ScopedDeferTaskPosting* scope) {
+bool ScopedDeferTaskPosting::Set(ScopedDeferTaskPosting* scope) {
   // We can post a task from within a ScheduleWork in some tests, so we can
   // get nested scopes. In this case ignore all except the top one.
-  if (!Get())
-    return;
-  return GetScopedDeferTaskPostingTLS().Set(scope);
+  if (Get() && scope)
+    return false;
+  GetScopedDeferTaskPostingTLS().Set(scope);
+  return true;
 }
 
 // static
@@ -52,10 +53,14 @@
 }
 
 ScopedDeferTaskPosting::ScopedDeferTaskPosting() {
-  Set(this);
+  top_level_scope_ = Set(this);
 }
 
 ScopedDeferTaskPosting::~ScopedDeferTaskPosting() {
+  if (!top_level_scope_) {
+    DCHECK(deferred_tasks_.empty());
+    return;
+  }
   Set(nullptr);
   for (DeferredTask& deferred_task : deferred_tasks_) {
     deferred_task.task_runner->PostTask(deferred_task.from_here,
diff --git a/base/task/common/scoped_defer_task_posting.h b/base/task/common/scoped_defer_task_posting.h
index ebc12fc..51c8ab3 100644
--- a/base/task/common/scoped_defer_task_posting.h
+++ b/base/task/common/scoped_defer_task_posting.h
@@ -34,7 +34,9 @@
 
  private:
   static ScopedDeferTaskPosting* Get();
-  static void Set(ScopedDeferTaskPosting* scope);
+  // Returns whether the |scope| was set as active, which happens only
+  // when the scope wasn't set before.
+  static bool Set(ScopedDeferTaskPosting* scope);
 
   void DeferTaskPosting(scoped_refptr<SequencedTaskRunner> task_runner,
                         const Location& from_here,
@@ -56,6 +58,11 @@
 
   std::vector<DeferredTask> deferred_tasks_;
 
+  // Scopes can be nested (e.g. ScheduleWork inside PostTasks can post a task
+  // to another task runner), so we want to know whether the scope is top-level
+  // or not.
+  bool top_level_scope_ = false;
+
   DISALLOW_COPY_AND_ASSIGN(ScopedDeferTaskPosting);
 };
 
diff --git a/base/task/sequence_manager/task_queue_impl.cc b/base/task/sequence_manager/task_queue_impl.cc
index b72a9b0..50b182428 100644
--- a/base/task/sequence_manager/task_queue_impl.cc
+++ b/base/task/sequence_manager/task_queue_impl.cc
@@ -50,6 +50,8 @@
 TaskQueueImpl::GuardedTaskPoster::~GuardedTaskPoster() {}
 
 bool TaskQueueImpl::GuardedTaskPoster::PostTask(PostedTask task) {
+  // Do not process new PostTasks while we are handling a PostTask (tracing
+  // has to do this) as it can lead to a deadlock and defer it instead.
   ScopedDeferTaskPosting disallow_task_posting;
 
   auto token = operations_controller_.TryBeginOperation();
diff --git a/base/test/launcher/test_launcher_unittest.cc b/base/test/launcher/test_launcher_unittest.cc
index 67e6b69..f0155d5 100644
--- a/base/test/launcher/test_launcher_unittest.cc
+++ b/base/test/launcher/test_launcher_unittest.cc
@@ -74,8 +74,8 @@
     }
     using ::testing::_;
     EXPECT_CALL(delegate, GetTests(_))
-        .WillOnce(
-            DoAll(testing::SetArgPointee<0>(tests), testing::Return(true)));
+        .WillOnce(testing::DoAll(testing::SetArgPointee<0>(tests),
+                                 testing::Return(true)));
     EXPECT_CALL(delegate, WillRunTest(_, _))
         .WillRepeatedly(testing::Return(true));
     EXPECT_CALL(delegate, ShouldRunTest(_, _))
diff --git a/base/util/BUILD.gn b/base/util/BUILD.gn
index c3b1942c..24a8de6 100644
--- a/base/util/BUILD.gn
+++ b/base/util/BUILD.gn
@@ -7,6 +7,7 @@
 test("base_util_unittests") {
   deps = [
     "type-safety:tests",
+    "values:unittests",
     "//base/test:run_all_base_unittests",
   ]
 }
diff --git a/base/util/values/BUILD.gn b/base/util/values/BUILD.gn
new file mode 100644
index 0000000..f3927a9
--- /dev/null
+++ b/base/util/values/BUILD.gn
@@ -0,0 +1,26 @@
+# Copyright 2019 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.
+
+source_set("values_util") {
+  sources = [
+    "values_util.cc",
+    "values_util.h",
+  ]
+
+  deps = [
+    "//base:base",
+  ]
+}
+
+source_set("unittests") {
+  testonly = true
+  sources = [
+    "values_util_unittest.cc",
+  ]
+
+  deps = [
+    ":values_util",
+    "//testing/gtest",
+  ]
+}
diff --git a/base/util/values/OWNERS b/base/util/values/OWNERS
new file mode 100644
index 0000000..37b5467
--- /dev/null
+++ b/base/util/values/OWNERS
@@ -0,0 +1,2 @@
+alancutter@chromium.org
+jdoerrie@chromium.org
diff --git a/base/util/values/values_util.cc b/base/util/values/values_util.cc
new file mode 100644
index 0000000..43b317b3
--- /dev/null
+++ b/base/util/values/values_util.cc
@@ -0,0 +1,60 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/util/values/values_util.h"
+
+#include "base/strings/string_number_conversions.h"
+
+namespace util {
+
+base::Value Int64ToValue(int64_t integer) {
+  return base::Value(base::NumberToString(integer));
+}
+
+base::Optional<int64_t> ValueToInt64(const base::Value* value) {
+  return value ? ValueToInt64(*value) : base::nullopt;
+}
+
+base::Optional<int64_t> ValueToInt64(const base::Value& value) {
+  if (!value.is_string())
+    return base::nullopt;
+
+  int64_t integer;
+  if (!base::StringToInt64(value.GetString(), &integer))
+    return base::nullopt;
+
+  return integer;
+}
+
+base::Value TimeDeltaToValue(base::TimeDelta time_delta) {
+  return Int64ToValue(time_delta.InMicroseconds());
+}
+
+base::Optional<base::TimeDelta> ValueToTimeDelta(const base::Value* value) {
+  return value ? ValueToTimeDelta(*value) : base::nullopt;
+}
+
+base::Optional<base::TimeDelta> ValueToTimeDelta(const base::Value& value) {
+  base::Optional<int64_t> integer = ValueToInt64(value);
+  if (!integer)
+    return base::nullopt;
+  return base::TimeDelta::FromMicroseconds(*integer);
+}
+
+base::Value TimeToValue(base::Time time) {
+  return TimeDeltaToValue(time.ToDeltaSinceWindowsEpoch());
+}
+
+base::Optional<base::Time> ValueToTime(const base::Value* value) {
+  return value ? ValueToTime(*value) : base::nullopt;
+}
+
+base::Optional<base::Time> ValueToTime(const base::Value& value) {
+  base::Optional<base::TimeDelta> time_delta = ValueToTimeDelta(value);
+  if (!time_delta)
+    return base::nullopt;
+  return base::Time::FromDeltaSinceWindowsEpoch(*time_delta);
+}
+
+}  // namespace util
diff --git a/base/util/values/values_util.h b/base/util/values/values_util.h
new file mode 100644
index 0000000..de9fd1b9
--- /dev/null
+++ b/base/util/values/values_util.h
@@ -0,0 +1,36 @@
+// Copyright 2019 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 BASE_UTIL_VALUES_VALUES_UTIL_H_
+#define BASE_UTIL_VALUES_VALUES_UTIL_H_
+
+#include "base/optional.h"
+#include "base/time/time.h"
+#include "base/values.h"
+
+namespace util {
+
+// Simple helper functions for converting int64_t, base::TimeDelta and
+// base::Time to numeric string base::Values.
+// Because base::TimeDelta and base::Time share the same internal representation
+// as int64_t they are stored using the exact same numeric string format.
+
+// Stores the int64_t as a string.
+base::Value Int64ToValue(int64_t integer);
+base::Optional<int64_t> ValueToInt64(const base::Value* value);
+base::Optional<int64_t> ValueToInt64(const base::Value& value);
+
+// Converts the TimeDelta to an int64_t of microseconds.
+base::Value TimeDeltaToValue(base::TimeDelta time_delta);
+base::Optional<base::TimeDelta> ValueToTimeDelta(const base::Value* value);
+base::Optional<base::TimeDelta> ValueToTimeDelta(const base::Value& value);
+
+// Converts the Time to a TimeDelta from the Windows epoch.
+base::Value TimeToValue(base::Time time);
+base::Optional<base::Time> ValueToTime(const base::Value* value);
+base::Optional<base::Time> ValueToTime(const base::Value& value);
+
+}  // namespace util
+
+#endif  // BASE_UTIL_VALUES_VALUES_UTIL_H_
diff --git a/base/util/values/values_util_unittest.cc b/base/util/values/values_util_unittest.cc
new file mode 100644
index 0000000..ee543c18
--- /dev/null
+++ b/base/util/values/values_util_unittest.cc
@@ -0,0 +1,71 @@
+// Copyright 2019 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 <limits>
+
+#include "base/util/values/values_util.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace util {
+
+namespace {
+
+TEST(ValuesUtilTest, BasicLimits) {
+  struct {
+    int64_t input;
+    const char* expected;
+  } test_cases[] = {
+      {0, "0"},
+      {-1234, "-1234"},
+      {5678, "5678"},
+      {std::numeric_limits<int64_t>::lowest(), "-9223372036854775808"},
+      {std::numeric_limits<int64_t>::max(), "9223372036854775807"},
+  };
+  for (const auto& test_case : test_cases) {
+    int64_t input = test_case.input;
+    base::TimeDelta time_delta_input = base::TimeDelta::FromMicroseconds(input);
+    base::Time time_input =
+        base::Time::FromDeltaSinceWindowsEpoch(time_delta_input);
+    base::Value expected(test_case.expected);
+    SCOPED_TRACE(testing::Message()
+                 << "input: " << input << ", expected: " << expected);
+
+    EXPECT_EQ(Int64ToValue(input), expected);
+    EXPECT_EQ(*ValueToInt64(&expected), input);
+
+    EXPECT_EQ(TimeDeltaToValue(time_delta_input), expected);
+    EXPECT_EQ(*ValueToTimeDelta(&expected), time_delta_input);
+
+    EXPECT_EQ(TimeToValue(time_input), expected);
+    EXPECT_EQ(*ValueToTime(&expected), time_input);
+  }
+}
+
+TEST(ValuesUtilTest, InvalidValues) {
+  std::unique_ptr<base::Value> test_cases[] = {
+      nullptr,
+      std::make_unique<base::Value>(),
+      std::make_unique<base::Value>(0),
+      std::make_unique<base::Value>(1234),
+      std::make_unique<base::Value>(true),
+      std::make_unique<base::Value>(base::Value::Type::BINARY),
+      std::make_unique<base::Value>(base::Value::Type::LIST),
+      std::make_unique<base::Value>(base::Value::Type::DICTIONARY),
+      std::make_unique<base::Value>(""),
+      std::make_unique<base::Value>("abcd"),
+      std::make_unique<base::Value>("1234.0"),
+      std::make_unique<base::Value>("1234a"),
+      std::make_unique<base::Value>("a1234"),
+  };
+  for (const auto& test_case : test_cases) {
+    EXPECT_FALSE(ValueToInt64(test_case.get()));
+    EXPECT_FALSE(ValueToTimeDelta(test_case.get()));
+    EXPECT_FALSE(ValueToTime(test_case.get()));
+  }
+}
+
+}  // namespace
+
+}  // namespace util
diff --git a/cc/input/snap_fling_controller_unittest.cc b/cc/input/snap_fling_controller_unittest.cc
index 5deb03c..ebbf5b1 100644
--- a/cc/input/snap_fling_controller_unittest.cc
+++ b/cc/input/snap_fling_controller_unittest.cc
@@ -77,9 +77,10 @@
 
   EXPECT_CALL(mock_client_,
               GetSnapFlingInfo(testing::_, testing::_, testing::_))
-      .WillOnce(DoAll(testing::SetArgPointee<1>(gfx::Vector2dF(0, 0)),
-                      testing::SetArgPointee<2>(gfx::Vector2dF(0, 100)),
-                      testing::Return(true)));
+      .WillOnce(
+          testing::DoAll(testing::SetArgPointee<1>(gfx::Vector2dF(0, 0)),
+                         testing::SetArgPointee<2>(gfx::Vector2dF(0, 100)),
+                         testing::Return(true)));
   EXPECT_CALL(mock_client_, RequestAnimationForSnapFling()).Times(1);
   EXPECT_CALL(mock_client_, ScrollByForSnapFling(testing::_)).Times(1);
   EXPECT_TRUE(controller_->HandleGestureScrollUpdate(gsu));
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc
index 6802db5..5b6f640 100644
--- a/cc/trees/layer_tree_host_impl_unittest.cc
+++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -10351,7 +10351,21 @@
   scoped_refptr<viz::ContextProvider> display_context_provider_;
 };
 
-TEST_F(LayerTreeHostImplTest, ShutdownReleasesContext) {
+enum RendererTestType { TEST_GL, TEST_SKIA };
+
+class LayerTreeHostImplTestWithRenderer
+    : public LayerTreeHostImplTest,
+      public ::testing::WithParamInterface<RendererTestType> {
+ protected:
+  bool test_type() const { return GetParam(); }
+};
+
+// TODO(crbug.com/948128): Enable this test for SkiaRenderer.
+INSTANTIATE_TEST_SUITE_P(,
+                         LayerTreeHostImplTestWithRenderer,
+                         ::testing::Values(TEST_GL));
+
+TEST_P(LayerTreeHostImplTestWithRenderer, ShutdownReleasesContext) {
   scoped_refptr<viz::TestContextProvider> context_provider =
       viz::TestContextProvider::Create();
   FrameSinkClient test_client(context_provider);
@@ -10359,9 +10373,11 @@
   constexpr bool synchronous_composite = true;
   constexpr bool disable_display_vsync = false;
   constexpr double refresh_rate = 60.0;
+  viz::RendererSettings renderer_settings = viz::RendererSettings();
+  renderer_settings.use_skia_renderer = test_type() == TEST_SKIA;
   auto layer_tree_frame_sink = std::make_unique<viz::TestLayerTreeFrameSink>(
       context_provider, viz::TestContextProvider::CreateWorker(), nullptr,
-      viz::RendererSettings(), base::ThreadTaskRunnerHandle::Get().get(),
+      renderer_settings, base::ThreadTaskRunnerHandle::Get().get(),
       synchronous_composite, disable_display_vsync, refresh_rate);
   layer_tree_frame_sink->SetClient(&test_client);
 
diff --git a/cc/trees/layer_tree_host_unittest_copyrequest.cc b/cc/trees/layer_tree_host_unittest_copyrequest.cc
index cad1e728..be57da1 100644
--- a/cc/trees/layer_tree_host_unittest_copyrequest.cc
+++ b/cc/trees/layer_tree_host_unittest_copyrequest.cc
@@ -18,6 +18,7 @@
 #include "components/viz/common/frame_sinks/copy_output_result.h"
 #include "components/viz/service/display/direct_renderer.h"
 #include "components/viz/test/fake_output_surface.h"
+#include "components/viz/test/fake_skia_output_surface.h"
 #include "components/viz/test/test_gles2_interface.h"
 #include "components/viz/test/test_layer_tree_frame_sink.h"
 #include "gpu/GLES2/gl2extchromium.h"
@@ -25,9 +26,32 @@
 namespace cc {
 namespace {
 
-// These tests only use direct rendering, as there is no output to copy for
-// delegated renderers.
-class LayerTreeHostCopyRequestTest : public LayerTreeTest {};
+enum CopyRequestTestType { TEST_GL, TEST_SKIA, TEST_SOFTWARE };
+
+auto CombineWithCompositorModes(const std::vector<CopyRequestTestType>& types) {
+  return ::testing::Combine(::testing::ValuesIn(types),
+                            ::testing::Values(CompositorMode::SINGLE_THREADED,
+                                              CompositorMode::THREADED));
+}
+
+class LayerTreeHostCopyRequestTest
+    : public LayerTreeTest,
+      public ::testing::WithParamInterface<
+          ::testing::tuple<CopyRequestTestType, CompositorMode>> {
+ public:
+  CopyRequestTestType test_type() const {
+    return ::testing::get<0>(GetParam());
+  }
+
+  CompositorMode compositor_mode() const {
+    return ::testing::get<1>(GetParam());
+  }
+
+  void InitializeFromTestType() {
+    use_skia_renderer_ = test_type() == TEST_SKIA;
+    use_software_renderer_ = test_type() == TEST_SOFTWARE;
+  }
+};
 
 class LayerTreeHostCopyRequestTestMultipleRequests
     : public LayerTreeHostCopyRequestTest {
@@ -136,27 +160,6 @@
 
   void AfterTest() override { EXPECT_EQ(4u, callbacks_.size()); }
 
-  std::unique_ptr<viz::OutputSurface> CreateDisplayOutputSurfaceOnThread(
-      scoped_refptr<viz::ContextProvider> compositor_context_provider)
-      override {
-    if (!use_gl_renderer_) {
-      return viz::FakeOutputSurface::CreateSoftware(
-          std::make_unique<viz::SoftwareOutputDevice>());
-    }
-
-    scoped_refptr<viz::TestContextProvider> display_context_provider =
-        viz::TestContextProvider::Create();
-    viz::TestContextSupport* context_support =
-        display_context_provider->support();
-    context_support->set_out_of_order_callbacks(out_of_order_callbacks_);
-    display_context_provider->BindToCurrentThread();
-
-    return viz::FakeOutputSurface::Create3d(
-        std::move(display_context_provider));
-  }
-
-  bool use_gl_renderer_;
-  bool out_of_order_callbacks_ = false;
   std::map<size_t, gfx::Size> callbacks_;
   FakeContentLayerClient client_;
   scoped_refptr<FakePictureLayer> root;
@@ -164,72 +167,48 @@
   scoped_refptr<FakePictureLayer> grand_child;
 };
 
-TEST_F(LayerTreeHostCopyRequestTestMultipleRequests,
-       GLRenderer_RunSingleThread) {
-  use_gl_renderer_ = true;
-  RunTest(CompositorMode::SINGLE_THREADED);
+INSTANTIATE_TEST_SUITE_P(,
+                         LayerTreeHostCopyRequestTestMultipleRequests,
+                         CombineWithCompositorModes({TEST_GL, TEST_SKIA,
+                                                     TEST_SOFTWARE}));
+
+TEST_P(LayerTreeHostCopyRequestTestMultipleRequests, Test) {
+  InitializeFromTestType();
+  RunTest(compositor_mode());
 }
 
-TEST_F(LayerTreeHostCopyRequestTestMultipleRequests,
-       GLRenderer_RunMultiThread) {
-  use_gl_renderer_ = true;
-  RunTest(CompositorMode::THREADED);
-}
+// These tests run with |out_of_order_callbacks_| set on the TestContextSupport,
+// which causes callbacks for sync queries to be sent in reverse order.
+class LayerTreeHostCopyRequestTestMultipleRequestsOutOfOrder
+    : public LayerTreeHostCopyRequestTestMultipleRequests {
+  std::unique_ptr<viz::SkiaOutputSurface>
+  CreateDisplaySkiaOutputSurfaceOnThread() override {
+    auto skia_output_surface = viz::FakeSkiaOutputSurface::Create3d();
+    skia_output_surface->SetOutOfOrderCallbacks(true);
+    return skia_output_surface;
+  }
 
-TEST_F(LayerTreeHostCopyRequestTestMultipleRequests,
-       GLRenderer_RunSingleThread_OutOfOrderCallbacks) {
-  use_gl_renderer_ = true;
-  out_of_order_callbacks_ = true;
-  RunTest(CompositorMode::SINGLE_THREADED);
-}
+  std::unique_ptr<viz::OutputSurface> CreateDisplayOutputSurfaceOnThread(
+      scoped_refptr<viz::ContextProvider> compositor_context_provider)
+      override {
+    // Since this test does not override CreateLayerTreeFrameSink, the
+    // |compositor_context_provider| will be a viz::TestContextProvider.
+    auto* context_support = static_cast<viz::TestContextSupport*>(
+        compositor_context_provider->ContextSupport());
+    context_support->set_out_of_order_callbacks(true);
 
-TEST_F(LayerTreeHostCopyRequestTestMultipleRequests,
-       GLRenderer_RunMultiThread_OutOfOrderCallbacks) {
-  use_gl_renderer_ = true;
-  out_of_order_callbacks_ = true;
-  RunTest(CompositorMode::THREADED);
-}
+    return viz::FakeOutputSurface::Create3d(
+        std::move(compositor_context_provider));
+  }
+};
 
-TEST_F(LayerTreeHostCopyRequestTestMultipleRequests,
-       SkiaRenderer_RunSingleThread) {
-  use_gl_renderer_ = true;
-  use_skia_renderer_ = true;
-  RunTest(CompositorMode::SINGLE_THREADED);
-}
+INSTANTIATE_TEST_SUITE_P(,
+                         LayerTreeHostCopyRequestTestMultipleRequestsOutOfOrder,
+                         CombineWithCompositorModes({TEST_GL, TEST_SKIA}));
 
-TEST_F(LayerTreeHostCopyRequestTestMultipleRequests,
-       SkiaRenderer_RunMultiThread) {
-  use_gl_renderer_ = true;
-  use_skia_renderer_ = true;
-  RunTest(CompositorMode::THREADED);
-}
-
-TEST_F(LayerTreeHostCopyRequestTestMultipleRequests,
-       SkiaRenderer_RunSingleThread_OutOfOrderCallbacks) {
-  use_gl_renderer_ = true;
-  use_skia_renderer_ = true;
-  out_of_order_callbacks_ = true;
-  RunTest(CompositorMode::SINGLE_THREADED);
-}
-
-TEST_F(LayerTreeHostCopyRequestTestMultipleRequests,
-       SkiaRenderer_RunMultiThread_OutOfOrderCallbacks) {
-  use_gl_renderer_ = true;
-  use_skia_renderer_ = true;
-  out_of_order_callbacks_ = true;
-  RunTest(CompositorMode::THREADED);
-}
-
-TEST_F(LayerTreeHostCopyRequestTestMultipleRequests,
-       SoftwareRenderer_RunSingleThread) {
-  use_gl_renderer_ = false;
-  RunTest(CompositorMode::SINGLE_THREADED);
-}
-
-TEST_F(LayerTreeHostCopyRequestTestMultipleRequests,
-       SoftwareRenderer_RunMultiThread) {
-  use_gl_renderer_ = false;
-  RunTest(CompositorMode::THREADED);
+TEST_P(LayerTreeHostCopyRequestTestMultipleRequestsOutOfOrder, Test) {
+  InitializeFromTestType();
+  RunTest(compositor_mode());
 }
 
 // TODO(crbug.com/564832): Remove this test when the workaround it tests is no
@@ -285,7 +264,14 @@
   scoped_refptr<FakePictureLayer> layer_;
 };
 
-SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostCopyRequestCompletionCausesCommit);
+INSTANTIATE_TEST_SUITE_P(,
+                         LayerTreeHostCopyRequestCompletionCausesCommit,
+                         CombineWithCompositorModes({TEST_GL, TEST_SKIA}));
+
+TEST_P(LayerTreeHostCopyRequestCompletionCausesCommit, Test) {
+  InitializeFromTestType();
+  RunTest(compositor_mode());
+}
 
 class LayerTreeHostCopyRequestTestLayerDestroyed
     : public LayerTreeHostCopyRequestTest {
@@ -383,7 +369,14 @@
   scoped_refptr<FakePictureLayer> impl_destroyed_;
 };
 
-SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostCopyRequestTestLayerDestroyed);
+INSTANTIATE_TEST_SUITE_P(,
+                         LayerTreeHostCopyRequestTestLayerDestroyed,
+                         CombineWithCompositorModes({TEST_GL, TEST_SKIA}));
+
+TEST_P(LayerTreeHostCopyRequestTestLayerDestroyed, Test) {
+  InitializeFromTestType();
+  RunTest(compositor_mode());
+}
 
 class LayerTreeHostCopyRequestTestInHiddenSubtree
     : public LayerTreeHostCopyRequestTest {
@@ -483,7 +476,14 @@
   scoped_refptr<FakePictureLayer> copy_layer_;
 };
 
-SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostCopyRequestTestInHiddenSubtree);
+INSTANTIATE_TEST_SUITE_P(,
+                         LayerTreeHostCopyRequestTestInHiddenSubtree,
+                         CombineWithCompositorModes({TEST_GL, TEST_SKIA}));
+
+TEST_P(LayerTreeHostCopyRequestTestInHiddenSubtree, Test) {
+  InitializeFromTestType();
+  RunTest(compositor_mode());
+}
 
 class LayerTreeHostTestHiddenSurfaceNotAllocatedForSubtreeCopyRequest
     : public LayerTreeHostCopyRequestTest {
@@ -596,8 +596,15 @@
   scoped_refptr<FakePictureLayer> copy_layer_;
 };
 
-SINGLE_AND_MULTI_THREAD_TEST_F(
-    LayerTreeHostTestHiddenSurfaceNotAllocatedForSubtreeCopyRequest);
+INSTANTIATE_TEST_SUITE_P(
+    ,
+    LayerTreeHostTestHiddenSurfaceNotAllocatedForSubtreeCopyRequest,
+    CombineWithCompositorModes({TEST_GL, TEST_SKIA}));
+
+TEST_P(LayerTreeHostTestHiddenSurfaceNotAllocatedForSubtreeCopyRequest, Test) {
+  InitializeFromTestType();
+  RunTest(compositor_mode());
+}
 
 class LayerTreeHostCopyRequestTestClippedOut
     : public LayerTreeHostCopyRequestTest {
@@ -647,7 +654,14 @@
   scoped_refptr<FakePictureLayer> copy_layer_;
 };
 
-SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostCopyRequestTestClippedOut);
+INSTANTIATE_TEST_SUITE_P(,
+                         LayerTreeHostCopyRequestTestClippedOut,
+                         CombineWithCompositorModes({TEST_GL, TEST_SKIA}));
+
+TEST_P(LayerTreeHostCopyRequestTestClippedOut, Test) {
+  InitializeFromTestType();
+  RunTest(compositor_mode());
+}
 
 class LayerTreeHostCopyRequestTestScaledLayer
     : public LayerTreeHostCopyRequestTest {
@@ -705,7 +719,14 @@
   scoped_refptr<FakePictureLayer> child_layer_;
 };
 
-SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostCopyRequestTestScaledLayer);
+INSTANTIATE_TEST_SUITE_P(,
+                         LayerTreeHostCopyRequestTestScaledLayer,
+                         CombineWithCompositorModes({TEST_GL, TEST_SKIA}));
+
+TEST_P(LayerTreeHostCopyRequestTestScaledLayer, Test) {
+  InitializeFromTestType();
+  RunTest(compositor_mode());
+}
 
 class LayerTreeHostTestAsyncTwoReadbacksWithoutDraw
     : public LayerTreeHostCopyRequestTest {
@@ -791,7 +812,14 @@
   scoped_refptr<FakePictureLayer> copy_layer_;
 };
 
-SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestAsyncTwoReadbacksWithoutDraw);
+INSTANTIATE_TEST_SUITE_P(,
+                         LayerTreeHostTestAsyncTwoReadbacksWithoutDraw,
+                         CombineWithCompositorModes({TEST_GL, TEST_SKIA}));
+
+TEST_P(LayerTreeHostTestAsyncTwoReadbacksWithoutDraw, Test) {
+  InitializeFromTestType();
+  RunTest(compositor_mode());
+}
 
 class LayerTreeHostCopyRequestTestDeleteSharedImage
     : public LayerTreeHostCopyRequestTest {
@@ -799,9 +827,12 @@
   std::unique_ptr<viz::OutputSurface> CreateDisplayOutputSurfaceOnThread(
       scoped_refptr<viz::ContextProvider> compositor_context_provider)
       override {
-    display_context_provider_ = viz::TestContextProvider::Create();
-    display_context_provider_->BindToCurrentThread();
-    return viz::FakeOutputSurface::Create3d(display_context_provider_);
+    // Since this test does not override CreateLayerTreeFrameSink, the
+    // |compositor_context_provider| will be a viz::TestContextProvider.
+    display_context_provider_ = static_cast<viz::TestContextProvider*>(
+        compositor_context_provider.get());
+    return viz::FakeOutputSurface::Create3d(
+        std::move(compositor_context_provider));
   }
 
   void SetupTree() override {
@@ -918,7 +949,15 @@
   std::unique_ptr<viz::CopyOutputResult> result_;
 };
 
-SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostCopyRequestTestDeleteSharedImage);
+// TODO(crbug.com/948128): Enable this test for SkiaRenderer.
+INSTANTIATE_TEST_SUITE_P(,
+                         LayerTreeHostCopyRequestTestDeleteSharedImage,
+                         CombineWithCompositorModes({TEST_GL}));
+
+TEST_P(LayerTreeHostCopyRequestTestDeleteSharedImage, Test) {
+  InitializeFromTestType();
+  RunTest(compositor_mode());
+}
 
 class LayerTreeHostCopyRequestTestCountSharedImages
     : public LayerTreeHostCopyRequestTest {
@@ -1042,7 +1081,15 @@
   std::unique_ptr<viz::SingleReleaseCallback> release_;
 };
 
-SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostCopyRequestTestCreatesSharedImage);
+// TODO(crbug.com/948128): Enable this test for SkiaRenderer.
+INSTANTIATE_TEST_SUITE_P(,
+                         LayerTreeHostCopyRequestTestCreatesSharedImage,
+                         CombineWithCompositorModes({TEST_GL}));
+
+TEST_P(LayerTreeHostCopyRequestTestCreatesSharedImage, Test) {
+  InitializeFromTestType();
+  RunTest(compositor_mode());
+}
 
 class LayerTreeHostCopyRequestTestDestroyBeforeCopy
     : public LayerTreeHostCopyRequestTest {
@@ -1123,7 +1170,14 @@
   scoped_refptr<FakePictureLayer> copy_layer_;
 };
 
-SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostCopyRequestTestDestroyBeforeCopy);
+INSTANTIATE_TEST_SUITE_P(,
+                         LayerTreeHostCopyRequestTestDestroyBeforeCopy,
+                         CombineWithCompositorModes({TEST_GL, TEST_SKIA}));
+
+TEST_P(LayerTreeHostCopyRequestTestDestroyBeforeCopy, Test) {
+  InitializeFromTestType();
+  RunTest(compositor_mode());
+}
 
 class LayerTreeHostCopyRequestTestShutdownBeforeCopy
     : public LayerTreeHostCopyRequestTest {
@@ -1198,7 +1252,14 @@
   scoped_refptr<FakePictureLayer> copy_layer_;
 };
 
-SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostCopyRequestTestShutdownBeforeCopy);
+INSTANTIATE_TEST_SUITE_P(,
+                         LayerTreeHostCopyRequestTestShutdownBeforeCopy,
+                         CombineWithCompositorModes({TEST_GL, TEST_SKIA}));
+
+TEST_P(LayerTreeHostCopyRequestTestShutdownBeforeCopy, Test) {
+  InitializeFromTestType();
+  RunTest(compositor_mode());
+}
 
 class LayerTreeHostCopyRequestTestMultipleDrawsHiddenCopyRequest
     : public LayerTreeHostCopyRequestTest {
@@ -1324,8 +1385,15 @@
   bool draw_happened_;
 };
 
-SINGLE_AND_MULTI_THREAD_TEST_F(
-    LayerTreeHostCopyRequestTestMultipleDrawsHiddenCopyRequest);
+INSTANTIATE_TEST_SUITE_P(
+    ,
+    LayerTreeHostCopyRequestTestMultipleDrawsHiddenCopyRequest,
+    CombineWithCompositorModes({TEST_GL, TEST_SKIA}));
+
+TEST_P(LayerTreeHostCopyRequestTestMultipleDrawsHiddenCopyRequest, Test) {
+  InitializeFromTestType();
+  RunTest(compositor_mode());
+}
 
 }  // namespace
 }  // namespace cc
diff --git a/chrome/BUILD.gn b/chrome/BUILD.gn
index 5c1ff7a..bf3a03b 100644
--- a/chrome/BUILD.gn
+++ b/chrome/BUILD.gn
@@ -1646,6 +1646,7 @@
   if (!is_android) {
     public_deps += [
       "//chrome/browser/resources:component_extension_resources",
+      "//chrome/browser/resources:downloads_resources",
       "//chrome/browser/resources:local_ntp_resources",
       "//chrome/browser/resources:settings_resources",
     ]
@@ -1776,7 +1777,7 @@
 
   java_cpp_enum("credit_card_javagen") {
     sources = [
-      "../components/autofill/core/browser/credit_card.h",
+      "../components/autofill/core/browser/data_model/credit_card.h",
     ]
   }
 
diff --git a/chrome/android/chrome_junit_test_java_sources.gni b/chrome/android/chrome_junit_test_java_sources.gni
index 8bcc72b..81b9fb4 100644
--- a/chrome/android/chrome_junit_test_java_sources.gni
+++ b/chrome/android/chrome_junit_test_java_sources.gni
@@ -143,6 +143,7 @@
   "junit/src/org/chromium/chrome/browser/omnibox/geo/PlatformNetworksManagerTest.java",
   "junit/src/org/chromium/chrome/browser/omnibox/geo/VisibleNetworksTest.java",
   "junit/src/org/chromium/chrome/browser/omnibox/geo/VisibleNetworksTrackerTest.java",
+  "junit/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionTest.java",
   "junit/src/org/chromium/chrome/browser/page_info/PermissionParamsListBuilderUnitTest.java",
   "junit/src/org/chromium/chrome/browser/partnerbookmarks/PartnerBookmarksFaviconThrottleTest.java",
   "junit/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizationsUnitTest.java",
@@ -167,6 +168,7 @@
   "junit/src/org/chromium/chrome/browser/snackbar/SnackbarCollectionUnitTest.java",
   "junit/src/org/chromium/chrome/browser/suggestions/SuggestionsImageFetcherTest.java",
   "junit/src/org/chromium/chrome/browser/suggestions/TileGroupUnitTest.java",
+  "junit/src/org/chromium/chrome/browser/suggestions/TileGroupUnitTest.java",
   "junit/src/org/chromium/chrome/browser/survey/ChromeSurveyControllerTest.java",
   "junit/src/org/chromium/chrome/browser/tab/TabAttributesTest.java",
   "junit/src/org/chromium/chrome/browser/tabmodel/TabPersistentStoreUnitTest.java",
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedImageLoader.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedImageLoader.java
index f7668894..583159f 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedImageLoader.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedImageLoader.java
@@ -143,9 +143,13 @@
     private @DrawableRes int lookupDrawableIdentifier(String resourceName) {
         switch (resourceName) {
             case BundledAssets.OFFLINE_INDICATOR_BADGE:
-                return R.drawable.offline_pin_round;
+                return R.drawable.ic_offline_pin_24dp_on_light_bg;
+            case BundledAssets.OFFLINE_INDICATOR_BADGE_DARK_BG:
+                return R.drawable.ic_offline_pin_24dp_on_dark_bg;
             case BundledAssets.VIDEO_INDICATOR_BADGE:
-                return R.drawable.ic_play_circle_filled_grey;
+                return R.drawable.ic_play_circle_filled_24dp_on_light_bg;
+            case BundledAssets.VIDEO_INDICATOR_BADGE_DARK_BG:
+                return R.drawable.ic_play_circle_filled_24dp_on_dark_bg;
         }
 
         return 0;
diff --git a/chrome/android/java/res/drawable-hdpi/offline_pin_round.png b/chrome/android/java/res/drawable-hdpi/offline_pin_round.png
deleted file mode 100644
index 61cab7c..0000000
--- a/chrome/android/java/res/drawable-hdpi/offline_pin_round.png
+++ /dev/null
Binary files differ
diff --git a/chrome/android/java/res/drawable-mdpi/offline_pin_round.png b/chrome/android/java/res/drawable-mdpi/offline_pin_round.png
deleted file mode 100644
index 6c4bd2b5..0000000
--- a/chrome/android/java/res/drawable-mdpi/offline_pin_round.png
+++ /dev/null
Binary files differ
diff --git a/chrome/android/java/res/drawable-xhdpi/offline_pin_round.png b/chrome/android/java/res/drawable-xhdpi/offline_pin_round.png
deleted file mode 100644
index 2067c3e..0000000
--- a/chrome/android/java/res/drawable-xhdpi/offline_pin_round.png
+++ /dev/null
Binary files differ
diff --git a/chrome/android/java/res/drawable-xxhdpi/offline_pin_round.png b/chrome/android/java/res/drawable-xxhdpi/offline_pin_round.png
deleted file mode 100644
index a52e1bc..0000000
--- a/chrome/android/java/res/drawable-xxhdpi/offline_pin_round.png
+++ /dev/null
Binary files differ
diff --git a/chrome/android/java/res/drawable-xxxhdpi/offline_pin_round.png b/chrome/android/java/res/drawable-xxxhdpi/offline_pin_round.png
deleted file mode 100644
index 3e1cdc4..0000000
--- a/chrome/android/java/res/drawable-xxxhdpi/offline_pin_round.png
+++ /dev/null
Binary files differ
diff --git a/chrome/android/java/res/drawable/data_reduction_big.xml b/chrome/android/java/res/drawable/data_reduction_big.xml
index 2c5b4ed..4c12faf 100644
--- a/chrome/android/java/res/drawable/data_reduction_big.xml
+++ b/chrome/android/java/res/drawable/data_reduction_big.xml
@@ -13,13 +13,13 @@
   <path
       android:pathData="M31.7987,13.7962C32.597,15.3095 33.1187,17.0012 33.2803,18.8095C33.9387,26.1295 28.5137,32.6245 21.192,33.2795C13.872,33.9378 7.3787,28.5128 6.722,21.1912C6.0637,13.8712 11.4887,7.3762 18.8103,6.7212C21.547,6.4745 24.167,7.0812 26.412,8.3162L29.1687,6.0978C26.1303,4.0895 22.4203,3.0495 18.5103,3.4012C9.3487,4.2228 2.5787,12.3262 3.4003,21.4895C4.2237,30.6528 12.327,37.4228 21.4903,36.6012C30.6537,35.7778 37.4237,27.6745 36.6003,18.5112C36.3303,15.4945 35.2587,12.7445 33.6303,10.4312L31.7987,13.7962Z"
       android:strokeWidth="1"
-      android:fillColor="@color/light_icon_color"
+      android:fillColor="@color/default_icon_color_secondary"
       android:fillType="evenOdd"
       android:strokeColor="#00000000"/>
   <path
       android:pathData="M17.6515,22.3508C18.2765,22.9775 19.1248,23.3292 20.0098,23.3275C20.8948,23.3275 21.7432,22.9758 22.3682,22.3492L31.7982,8.1975L17.6515,17.6342C17.0248,18.2608 16.6732,19.1092 16.6732,19.9925C16.6732,20.8775 17.0265,21.7258 17.6515,22.3508"
       android:strokeWidth="1"
-      android:fillColor="@color/light_icon_color"
+      android:fillColor="@color/default_icon_color_secondary"
       android:fillType="evenOdd"
       android:strokeColor="#00000000"/>
 </vector>
diff --git a/chrome/android/java/res/drawable/ic_offline_pin_24dp.xml b/chrome/android/java/res/drawable/ic_offline_pin_24dp.xml
new file mode 100644
index 0000000..1a830666
--- /dev/null
+++ b/chrome/android/java/res/drawable/ic_offline_pin_24dp.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2019 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. -->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:targetApi="21"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+  <group>
+    <clip-path android:pathData="M0,0h24v24H0V0z M 0,0"/>
+    <path
+        android:pathData="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10,-4.5 10,-10S17.5 2 12 2zm5 16H7v-2h10v2zm-6.7,-4L7 10.7l1.4,-1.4 1.9 1.9 5.3,-5.3L17 7.3 10.3 14z"
+        android:fillColor="@color/default_icon_color_secondary"/>
+  </group>
+</vector>
diff --git a/chrome/android/java/res/drawable/ic_offline_pin_24dp_on_dark_bg.xml b/chrome/android/java/res/drawable/ic_offline_pin_24dp_on_dark_bg.xml
new file mode 100644
index 0000000..2337734a
--- /dev/null
+++ b/chrome/android/java/res/drawable/ic_offline_pin_24dp_on_dark_bg.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2019 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. -->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:targetApi="21"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+  <group>
+    <clip-path android:pathData="M0,0h24v24H0V0z M 0,0"/>
+    <path
+        android:pathData="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10,-4.5 10,-10S17.5 2 12 2zm5 16H7v-2h10v2zm-6.7,-4L7 10.7l1.4,-1.4 1.9 1.9 5.3,-5.3L17 7.3 10.3 14z"
+        android:fillColor="@color/default_icon_color_secondary_light"/>
+  </group>
+</vector>
diff --git a/chrome/android/java/res/drawable/ic_offline_pin_24dp_on_light_bg.xml b/chrome/android/java/res/drawable/ic_offline_pin_24dp_on_light_bg.xml
new file mode 100644
index 0000000..f388441
--- /dev/null
+++ b/chrome/android/java/res/drawable/ic_offline_pin_24dp_on_light_bg.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2019 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. -->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:targetApi="21"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+  <group>
+    <clip-path android:pathData="M0,0h24v24H0V0z M 0,0"/>
+    <path
+        android:pathData="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10,-4.5 10,-10S17.5 2 12 2zm5 16H7v-2h10v2zm-6.7,-4L7 10.7l1.4,-1.4 1.9 1.9 5.3,-5.3L17 7.3 10.3 14z"
+        android:fillColor="@color/default_icon_color_secondary_dark"/>
+  </group>
+</vector>
diff --git a/chrome/android/java/res/drawable/ic_play_circle_filled_grey.xml b/chrome/android/java/res/drawable/ic_play_circle_filled_24dp.xml
similarity index 92%
rename from chrome/android/java/res/drawable/ic_play_circle_filled_grey.xml
rename to chrome/android/java/res/drawable/ic_play_circle_filled_24dp.xml
index 9fd9ced..c8c7846 100644
--- a/chrome/android/java/res/drawable/ic_play_circle_filled_grey.xml
+++ b/chrome/android/java/res/drawable/ic_play_circle_filled_24dp.xml
@@ -16,7 +16,7 @@
         android:fillColor="@android:color/transparent"
         android:pathData="M 6,6 H 18 V 18 H 6 z" />
     <path
-        android:fillColor="#757575"
+        android:fillColor="@color/default_icon_color_secondary"
         android:pathData="M 12,2 C 6.475,2 2,6.475 2,12 2,17.525 6.475,22 12,22 17.525,22 22,17.525
             22,12 22,6.475 17.525,2 12,2 z M 9.9999998,16.5 v -9 L 16,12 9.9999998,16.5 z" />
 </vector>
diff --git a/chrome/android/java/res/drawable/ic_play_circle_filled_grey.xml b/chrome/android/java/res/drawable/ic_play_circle_filled_24dp_on_dark_bg.xml
similarity index 92%
copy from chrome/android/java/res/drawable/ic_play_circle_filled_grey.xml
copy to chrome/android/java/res/drawable/ic_play_circle_filled_24dp_on_dark_bg.xml
index 9fd9ced..aebbf6e 100644
--- a/chrome/android/java/res/drawable/ic_play_circle_filled_grey.xml
+++ b/chrome/android/java/res/drawable/ic_play_circle_filled_24dp_on_dark_bg.xml
@@ -16,7 +16,7 @@
         android:fillColor="@android:color/transparent"
         android:pathData="M 6,6 H 18 V 18 H 6 z" />
     <path
-        android:fillColor="#757575"
+        android:fillColor="@color/default_icon_color_secondary_light"
         android:pathData="M 12,2 C 6.475,2 2,6.475 2,12 2,17.525 6.475,22 12,22 17.525,22 22,17.525
             22,12 22,6.475 17.525,2 12,2 z M 9.9999998,16.5 v -9 L 16,12 9.9999998,16.5 z" />
 </vector>
diff --git a/chrome/android/java/res/drawable/ic_play_circle_filled_grey.xml b/chrome/android/java/res/drawable/ic_play_circle_filled_24dp_on_light_bg.xml
similarity index 92%
copy from chrome/android/java/res/drawable/ic_play_circle_filled_grey.xml
copy to chrome/android/java/res/drawable/ic_play_circle_filled_24dp_on_light_bg.xml
index 9fd9ced..03fff3c5 100644
--- a/chrome/android/java/res/drawable/ic_play_circle_filled_grey.xml
+++ b/chrome/android/java/res/drawable/ic_play_circle_filled_24dp_on_light_bg.xml
@@ -16,7 +16,7 @@
         android:fillColor="@android:color/transparent"
         android:pathData="M 6,6 H 18 V 18 H 6 z" />
     <path
-        android:fillColor="#757575"
+        android:fillColor="@color/default_icon_color_secondary_dark"
         android:pathData="M 12,2 C 6.475,2 2,6.475 2,12 2,17.525 6.475,22 12,22 17.525,22 22,17.525
             22,12 22,6.475 17.525,2 12,2 z M 9.9999998,16.5 v -9 L 16,12 9.9999998,16.5 z" />
 </vector>
diff --git a/chrome/android/java/res/layout/content_suggestions_card_modern_reversed.xml b/chrome/android/java/res/layout/content_suggestions_card_modern_reversed.xml
index 095b5b1..aa4963de 100644
--- a/chrome/android/java/res/layout/content_suggestions_card_modern_reversed.xml
+++ b/chrome/android/java/res/layout/content_suggestions_card_modern_reversed.xml
@@ -83,9 +83,9 @@
                     android:layout_width="@dimen/snippets_offline_icon_size"
                     android:layout_height="@dimen/snippets_offline_icon_size"
                     android:layout_marginStart="6dp"
-                    android:src="@drawable/offline_pin_round"
                     android:contentDescription="@string/accessibility_ntp_offline_badge"
                     android:visibility="gone"
+                    app:srcCompat="@drawable/ic_offline_pin_24dp"
                     tools:tint="@color/default_icon_color" />
 
                 <ImageView
@@ -95,8 +95,8 @@
                     android:layout_marginStart="6dp"
                     android:contentDescription="@string/accessibility_suggestion_with_video_badge"
                     android:visibility="gone"
-                    app:srcCompat="@drawable/ic_play_circle_filled_grey"
-                    tools:src="@drawable/ic_play_circle_filled_grey" />
+                    app:srcCompat="@drawable/ic_play_circle_filled_24dp"
+                    tools:src="@drawable/ic_play_circle_filled_24dp" />
             </LinearLayout>
         </LinearLayout>
 
diff --git a/chrome/android/java/res/layout/edit_url_suggestion_layout.xml b/chrome/android/java/res/layout/edit_url_suggestion_layout.xml
index 2a16a58..bb5ea00 100644
--- a/chrome/android/java/res/layout/edit_url_suggestion_layout.xml
+++ b/chrome/android/java/res/layout/edit_url_suggestion_layout.xml
@@ -22,18 +22,16 @@
         android:layout_marginEnd="@dimen/omnibox_suggestion_refine_view_modern_end_padding">
 
         <org.chromium.ui.widget.ChromeImageButton
-            android:id="@+id/url_copy_icon"
-            style="@style/OmniboxSuggestionIconButton"
-            app:srcCompat="@drawable/ic_content_copy_black"
-            android:contentDescription="@string/copy_link"
-            android:visibility="gone" />
-
-        <org.chromium.ui.widget.ChromeImageButton
             android:id="@+id/url_share_icon"
             style="@style/OmniboxSuggestionIconButton"
             app:srcCompat="@drawable/ic_share_white_24dp"
-            android:contentDescription="@string/menu_share_page"
-            android:visibility="gone" />
+            android:contentDescription="@string/menu_share_page" />
+
+        <org.chromium.ui.widget.ChromeImageButton
+            android:id="@+id/url_copy_icon"
+            style="@style/OmniboxSuggestionIconButton"
+            app:srcCompat="@drawable/ic_content_copy_black"
+            android:contentDescription="@string/copy_link" />
 
         <org.chromium.ui.widget.ChromeImageButton
             android:id="@+id/url_edit_icon"
diff --git a/chrome/android/java/res/layout/history_item_view.xml b/chrome/android/java/res/layout/history_item_view.xml
index 6a7fe21d..0a28ae86 100644
--- a/chrome/android/java/res/layout/history_item_view.xml
+++ b/chrome/android/java/res/layout/history_item_view.xml
@@ -20,7 +20,7 @@
             style="@style/ListItemEndIconSmall"
             android:contentDescription="@string/remove"
             android:src="@drawable/btn_delete_24dp"
-            app:tint="@color/light_icon_color" />
+            app:tint="@color/default_icon_color_secondary" />
     </LinearLayout>
 
 </org.chromium.chrome.browser.history.HistoryItemView>
\ No newline at end of file
diff --git a/chrome/android/java/res/layout/selectable_list_layout.xml b/chrome/android/java/res/layout/selectable_list_layout.xml
index c9307ff8..50b62c9 100644
--- a/chrome/android/java/res/layout/selectable_list_layout.xml
+++ b/chrome/android/java/res/layout/selectable_list_layout.xml
@@ -47,7 +47,7 @@
                 android:drawablePadding="3dp"
                 android:visibility="gone"
                 android:textAppearance="@style/TextAppearance.BlackDisabledText1"
-                app:chromeDrawableTint="@color/light_icon_color"/>
+                app:chromeDrawableTint="@color/default_icon_color_secondary"/>
         </FrameLayout>
 
         <org.chromium.chrome.browser.widget.LoadingView
diff --git a/chrome/android/java/res_download/layout/download_manager_prefetch_item.xml b/chrome/android/java/res_download/layout/download_manager_prefetch_item.xml
index ffcfc7c..102c447 100644
--- a/chrome/android/java/res_download/layout/download_manager_prefetch_item.xml
+++ b/chrome/android/java/res_download/layout/download_manager_prefetch_item.xml
@@ -92,8 +92,8 @@
         android:layout_width="12dp"
         android:layout_height="12dp"
         android:layout_marginStart="4dp"
-        android:src="@drawable/offline_pin_round"
         android:scaleType="centerInside"
+        app:srcCompat="@drawable/ic_offline_pin_24dp"
         android:tint="@color/default_icon_color"
         app:layout_column="2"
         app:layout_row="2"
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/AppHooks.java b/chrome/android/java/src/org/chromium/chrome/browser/AppHooks.java
index 7f5cfd5..9e4420c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/AppHooks.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/AppHooks.java
@@ -378,23 +378,40 @@
     }
 
     /**
-     * @param activity An activity for access to different features.
+     * Use {@link #attachTouchlessMenuCoordinator(ChromeActivity, TouchlessUiController)} instead.
      */
+    @Deprecated
     public void attachTouchlessMenuCoordinator(ChromeActivity activity) {}
 
     /**
      * @param activity An activity for access to different features.
-     * @return A new {@link TouchlessUiController} instance.
+     * @param uiController A TouchlessUiController to use.
      */
+    public void attachTouchlessMenuCoordinator(
+            ChromeActivity activity, TouchlessUiController uiController) {
+        attachTouchlessMenuCoordinator(activity);
+    }
+
+    /**
+     * Deprecated, use {@link #createTouchlessUiController(Activity)}.
+     */
+    @Deprecated
     public TouchlessUiController createTouchlessUiController(ChromeActivity activity) {
         return null;
     }
 
     /**
-     * Get the UI controller from the activity if it exists.
-     * @param activity The activity to get the UI controller from.
-     * @return The UI controller or null.
+     * @param activity An activity for access to different features.
+     * @return A new {@link TouchlessUiController} instance.
      */
+    public TouchlessUiController createTouchlessUiController(Activity activity) {
+        return createTouchlessUiController((ChromeActivity) activity);
+    }
+
+    /**
+     * Use {@link #attachTouchlessMenuCoordinator(ChromeActivity, TouchlessUiController)}.
+     */
+    @Deprecated
     public TouchlessUiController getTouchlessUiControllerForActivity(ChromeActivity activity) {
         return null;
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
index 1d6a50f..a2644262 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
@@ -2564,6 +2564,8 @@
      * @return Whether this Activity supports the App Menu.
      */
     public boolean supportsAppMenu() {
+        if (FeatureUtilities.isNoTouchModeEnabled()) return false;
+
         // Derived classes that disable the toolbar should also have the Menu disabled without
         // having to explicitly disable the Menu as well.
         return getToolbarLayoutId() != NO_TOOLBAR_LAYOUT;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabListSceneLayer.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabListSceneLayer.java
index ef5bf55..f25947d 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabListSceneLayer.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabListSceneLayer.java
@@ -103,7 +103,7 @@
 
             int closeButtonColor = useIncognitoColors
                     ? Color.WHITE
-                    : ApiCompatibilityUtils.getColor(res, R.color.light_icon_color);
+                    : ApiCompatibilityUtils.getColor(res, R.color.default_icon_color_secondary);
             float closeButtonSizePx =
                     res.getDimensionPixelSize(R.dimen.tab_switcher_close_button_size);
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/status/StatusView.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/status/StatusView.java
index c7a7626a..f282aacd 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/status/StatusView.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/status/StatusView.java
@@ -14,6 +14,7 @@
 import android.support.annotation.Nullable;
 import android.support.annotation.StringRes;
 import android.support.v4.view.ViewCompat;
+import android.support.v7.content.res.AppCompatResources;
 import android.util.AttributeSet;
 import android.view.View;
 import android.view.ViewStub;
@@ -24,7 +25,7 @@
 import org.chromium.base.ApiCompatibilityUtils;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.util.AccessibilityUtil;
-import org.chromium.chrome.browser.widget.TintedDrawable;
+import org.chromium.ui.UiUtils;
 
 /**
  * StatusView is a location bar's view displaying status (icons and/or text).
@@ -71,10 +72,9 @@
         boolean wantIconHidden = false;
 
         if (mIconRes != 0 && mIconTintRes != 0) {
-            targetIcon =
-                    TintedDrawable.constructTintedDrawable(getContext(), mIconRes, mIconTintRes);
+            targetIcon = UiUtils.getTintedDrawable(getContext(), mIconRes, mIconTintRes);
         } else if (mIconRes != 0) {
-            targetIcon = ApiCompatibilityUtils.getDrawable(getContext().getResources(), mIconRes);
+            targetIcon = AppCompatResources.getDrawable(getContext(), mIconRes);
         } else {
             // Do not specify any icon here and do not replace existing icon, either.
             // TransitionDrawable uses different timing mechanism than Animations, and that may,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionProcessor.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionProcessor.java
index e4c7571..ca272a60 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionProcessor.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionProcessor.java
@@ -16,7 +16,6 @@
 import org.chromium.base.metrics.CachedMetrics.EnumeratedHistogramSample;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.ActivityTabProvider;
-import org.chromium.chrome.browser.ChromeFeatureList;
 import org.chromium.chrome.browser.omnibox.OmniboxSuggestionType;
 import org.chromium.chrome.browser.omnibox.UrlBar;
 import org.chromium.chrome.browser.omnibox.UrlBar.OmniboxAction;
@@ -83,15 +82,6 @@
     private static final CachedMetrics.ActionEvent ACTION_EDIT_URL_SUGGESTION_SHARE =
             new CachedMetrics.ActionEvent("Omnibox.EditUrlSuggestion.Share");
 
-    /** The name of the parameter for getting the experiment variation. */
-    private static final String FIELD_TRIAL_PARAM_NAME = "variation";
-
-    /** The name of the experiment variation that shows the copy icon. */
-    private static final String COPY_ICON_VARIATION_NAME = "copy_icon";
-
-    /** The name of the experiment variation that shows both the copy and share icon. */
-    private static final String COPY_SHARE_ICON_VARIATION_NAME = "copy_share_icon";
-
     /** The delegate for accessing the location bar for observation and modification. */
     private final LocationBarDelegate mLocationBarDelegate;
 
@@ -193,19 +183,6 @@
     @Override
     public void populateModel(OmniboxSuggestion suggestion, PropertyModel model, int position) {
         model.set(EditUrlSuggestionProperties.TEXT_CLICK_LISTENER, this);
-
-        // Check which variation of the experiment is being run.
-        String variation = getSearchReadyOmniboxVariation();
-        if (TextUtils.equals(COPY_ICON_VARIATION_NAME, variation)) {
-            model.set(EditUrlSuggestionProperties.COPY_ICON_VISIBLE, true);
-            model.set(EditUrlSuggestionProperties.SHARE_ICON_VISIBLE, false);
-        } else if (TextUtils.equals(COPY_SHARE_ICON_VARIATION_NAME, variation)) {
-            model.set(EditUrlSuggestionProperties.COPY_ICON_VISIBLE, true);
-            model.set(EditUrlSuggestionProperties.SHARE_ICON_VISIBLE, true);
-        } else {
-            model.set(EditUrlSuggestionProperties.COPY_ICON_VISIBLE, false);
-            model.set(EditUrlSuggestionProperties.SHARE_ICON_VISIBLE, true);
-        }
         model.set(EditUrlSuggestionProperties.BUTTON_CLICK_LISTENER, this);
 
         if (mOriginalTitle == null) mOriginalTitle = mTabProvider.get().getTitle();
@@ -231,14 +208,6 @@
         mSelectionHandler = null;
     }
 
-    /**
-     * @return The experiment variation for the Search Ready Omnibox.
-     */
-    private static String getSearchReadyOmniboxVariation() {
-        return ChromeFeatureList.getFieldTrialParamByFeature(
-                ChromeFeatureList.SEARCH_READY_OMNIBOX, FIELD_TRIAL_PARAM_NAME);
-    }
-
     @Override
     public void onUrlFocusChange(boolean hasFocus) {
         if (hasFocus) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionProperties.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionProperties.java
index 337d3952..b4cfc6b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionProperties.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionProperties.java
@@ -9,19 +9,10 @@
 import org.chromium.chrome.browser.omnibox.suggestions.SuggestionCommonProperties;
 import org.chromium.ui.modelutil.PropertyKey;
 import org.chromium.ui.modelutil.PropertyModel;
-import org.chromium.ui.modelutil.PropertyModel.WritableBooleanPropertyKey;
 import org.chromium.ui.modelutil.PropertyModel.WritableObjectPropertyKey;
 
 /** The properties for the "edit URL" suggestion in the omnibox suggestions. */
 class EditUrlSuggestionProperties {
-    /** A key determining the visibility of the copy icon in the suggestion view. */
-    public static final WritableBooleanPropertyKey COPY_ICON_VISIBLE =
-            new WritableBooleanPropertyKey();
-
-    /** A key determining the visibility of the share icon in the suggestion view. */
-    public static final WritableBooleanPropertyKey SHARE_ICON_VISIBLE =
-            new WritableBooleanPropertyKey();
-
     /** The key for the title displayed by the suggestion item. */
     public static final WritableObjectPropertyKey<String> TITLE_TEXT =
             new WritableObjectPropertyKey<>();
@@ -38,8 +29,8 @@
     public static final WritableObjectPropertyKey<View.OnClickListener> TEXT_CLICK_LISTENER =
             new WritableObjectPropertyKey<>();
 
-    private static final PropertyKey[] ALL_UNIQUE_KEYS = new PropertyKey[] {COPY_ICON_VISIBLE,
-            SHARE_ICON_VISIBLE, TITLE_TEXT, URL_TEXT, BUTTON_CLICK_LISTENER, TEXT_CLICK_LISTENER};
+    private static final PropertyKey[] ALL_UNIQUE_KEYS =
+            new PropertyKey[] {TITLE_TEXT, URL_TEXT, BUTTON_CLICK_LISTENER, TEXT_CLICK_LISTENER};
 
     public static final PropertyKey[] ALL_KEYS =
             PropertyModel.concatKeys(ALL_UNIQUE_KEYS, SuggestionCommonProperties.ALL_KEYS);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionViewBinder.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionViewBinder.java
index 08c56df5..04faee3 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionViewBinder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionViewBinder.java
@@ -4,7 +4,6 @@
 
 package org.chromium.chrome.browser.omnibox.suggestions.editurl;
 
-import android.view.View;
 import android.view.ViewGroup;
 import android.widget.TextView;
 
@@ -15,17 +14,7 @@
 /** A mechanism for binding the {@link EditUrlSuggestionProperties} to its view. */
 public class EditUrlSuggestionViewBinder {
     public static void bind(PropertyModel model, ViewGroup view, PropertyKey propertyKey) {
-        if (EditUrlSuggestionProperties.COPY_ICON_VISIBLE == propertyKey) {
-            view.findViewById(R.id.url_copy_icon)
-                    .setVisibility(model.get(EditUrlSuggestionProperties.COPY_ICON_VISIBLE)
-                                    ? View.VISIBLE
-                                    : View.GONE);
-        } else if (EditUrlSuggestionProperties.SHARE_ICON_VISIBLE == propertyKey) {
-            view.findViewById(R.id.url_share_icon)
-                    .setVisibility(model.get(EditUrlSuggestionProperties.SHARE_ICON_VISIBLE)
-                                    ? View.VISIBLE
-                                    : View.GONE);
-        } else if (EditUrlSuggestionProperties.TITLE_TEXT == propertyKey) {
+        if (EditUrlSuggestionProperties.TITLE_TEXT == propertyKey) {
             TextView titleView = view.findViewById(R.id.title_text_view);
             titleView.setText(model.get(EditUrlSuggestionProperties.TITLE_TEXT));
         } else if (EditUrlSuggestionProperties.URL_TEXT == propertyKey) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java
index 7d7d526..a135630 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java
@@ -352,7 +352,7 @@
         if (isPreview) {
             return R.drawable.preview_pin_round;
         } else if (isOfflinePage) {
-            return R.drawable.offline_pin_round;
+            return R.drawable.ic_offline_pin_24dp;
         }
 
         switch (securityLevel) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webauth/AuthenticatorImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/webauth/AuthenticatorImpl.java
index 21eff773..5392a8d 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webauth/AuthenticatorImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webauth/AuthenticatorImpl.java
@@ -116,6 +116,12 @@
         callback.call(fingerprintManager != null && fingerprintManager.hasEnrolledFingerprints());
     }
 
+    @Override
+    public void cancel() {
+        onError(AuthenticatorStatus.NOT_IMPLEMENTED);
+        return;
+    }
+
     /**
      * Callbacks for receiving responses from the internal handlers.
      */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/accessibility/AccessibilityTabModelListItem.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/accessibility/AccessibilityTabModelListItem.java
index 2210fdc..9139e1f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/widget/accessibility/AccessibilityTabModelListItem.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/accessibility/AccessibilityTabModelListItem.java
@@ -218,7 +218,7 @@
                 context.getResources().getDimensionPixelOffset(R.dimen.accessibility_tab_height);
         mDarkIconColor = ColorUtils.getIconTint(context, false);
         mDefaultCloseIconColor =
-                AppCompatResources.getColorStateList(context, R.color.light_icon_color);
+                AppCompatResources.getColorStateList(context, R.color.default_icon_color_secondary);
         mIncognitoCloseIconColor =
                 AppCompatResources.getColorStateList(context, R.color.white_alpha_70);
         mDefaultLevel = getResources().getInteger(R.integer.list_item_level_default);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java
index cd81e11..3b1f9ab 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java
@@ -116,6 +116,7 @@
     @MediumTest
     @Feature({"Browser"})
     @RetryOnFailure
+    @DisabledTest(message = "https://crbug.com/959265")
     public void testCopyImageLinkCopiesLinkURL() throws Throwable {
         Tab tab = mDownloadTestRule.getActivity().getActivityTab();
         ContextMenuUtils.selectContextMenuItem(InstrumentationRegistry.getInstrumentation(),
@@ -403,6 +404,7 @@
     @SmallTest
     @Feature({"Browser", "ContextMenu"})
     @RetryOnFailure
+    @DisabledTest(message = "https://crbug.com/959265")
     public void testContextMenuRetrievesImageLinkOptions()
             throws TimeoutException, InterruptedException {
         Tab tab = mDownloadTestRule.getActivity().getActivityTab();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/TrustedCdnPublisherUrlTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/TrustedCdnPublisherUrlTest.java
index 1cd1b9e..0bcae52 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/TrustedCdnPublisherUrlTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/TrustedCdnPublisherUrlTest.java
@@ -370,7 +370,7 @@
         String testUrl = mWebServer.getResponseUrl("/test.html");
         mCustomTabActivityTestRule.loadUrl(testUrl);
         verifyUrl(UrlFormatter.formatUrlForSecurityDisplayOmitScheme(testUrl));
-        verifySecurityIcon(R.drawable.offline_pin_round);
+        verifySecurityIcon(R.drawable.ic_offline_pin_24dp);
     }
 
     private void runTrustedCdnPublisherUrlTest(@Nullable String publisherUrl, String clientPackage,
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/LocationBarLayoutTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/LocationBarLayoutTest.java
index 3ac3d49..be25a13 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/LocationBarLayoutTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/LocationBarLayoutTest.java
@@ -25,7 +25,6 @@
 import org.chromium.chrome.browser.toolbar.LocationBarModel;
 import org.chromium.chrome.test.ChromeActivityTestRule;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
-import org.chromium.chrome.test.util.browser.Features.DisableFeatures;
 import org.chromium.chrome.test.util.browser.Features.EnableFeatures;
 import org.chromium.components.security_state.ConnectionSecurityLevel;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
@@ -207,7 +206,6 @@
 
     @Test
     @SmallTest
-    @DisableFeatures(ChromeFeatureList.SEARCH_READY_OMNIBOX)
     public void testEditingTextShownOnFocus() {
         final UrlBar urlBar = getUrlBar();
         final LocationBarLayout locationBar = getLocationBar();
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionTest.java
new file mode 100644
index 0000000..92e14b0
--- /dev/null
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionTest.java
@@ -0,0 +1,146 @@
+// Copyright 2019 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.omnibox.suggestions.editurl;
+
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.support.test.filters.SmallTest;
+import android.view.View;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+
+import org.chromium.base.test.BaseRobolectricTestRunner;
+import org.chromium.chrome.R;
+import org.chromium.chrome.browser.ActivityTabProvider;
+import org.chromium.chrome.browser.omnibox.OmniboxSuggestionType;
+import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestion;
+import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.ui.modelutil.PropertyModel;
+
+/**
+ * Unit tests for the "edit url" omnibox suggestion.
+ */
+@RunWith(BaseRobolectricTestRunner.class)
+@Config(manifest = Config.NONE)
+public final class EditUrlSuggestionTest {
+    private static final String TEST_URL = "http://www.example.com";
+    private static final String TEST_TITLE = "Test Page";
+
+    private EditUrlSuggestionProcessor mProcessor;
+    private PropertyModel mModel;
+
+    @Mock
+    private ActivityTabProvider mTabProvider;
+
+    @Mock
+    private Tab mTab;
+
+    @Mock
+    private OmniboxSuggestion mWhatYouTypedSuggestion;
+
+    @Mock
+    private OmniboxSuggestion mOtherSuggestion;
+
+    @Mock
+    private EditUrlSuggestionProcessor.LocationBarDelegate mLocationBarDelegate;
+
+    @Mock
+    private EditUrlSuggestionProcessor.SuggestionSelectionHandler mSelectionHandler;
+
+    @Mock
+    private View mEditButton;
+
+    @Mock
+    private View mSuggestionView;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        when(mTab.getUrl()).thenReturn(TEST_URL);
+        when(mTab.getTitle()).thenReturn(TEST_TITLE);
+        when(mTab.isNativePage()).thenReturn(false);
+        when(mTab.isIncognito()).thenReturn(false);
+
+        when(mTabProvider.get()).thenReturn(mTab);
+
+        when(mWhatYouTypedSuggestion.getType())
+                .thenReturn(OmniboxSuggestionType.URL_WHAT_YOU_TYPED);
+        when(mWhatYouTypedSuggestion.getUrl()).thenReturn(TEST_URL);
+
+        when(mOtherSuggestion.getType()).thenReturn(OmniboxSuggestionType.SEARCH_HISTORY);
+
+        mModel = new PropertyModel.Builder(EditUrlSuggestionProperties.ALL_KEYS).build();
+
+        mProcessor = new EditUrlSuggestionProcessor(mLocationBarDelegate, mSelectionHandler);
+        mProcessor.setActivityTabProvider(mTabProvider);
+
+        when(mEditButton.getId()).thenReturn(R.id.url_edit_icon);
+    }
+
+    /** Test that the suggestion is triggered. */
+    @Test
+    @SmallTest
+    public void testSuggestionTriggered() throws Exception {
+        mProcessor.onUrlFocusChange(true);
+
+        Assert.assertTrue("The processor should handle the \"what you typed\" suggestion.",
+                mProcessor.doesProcessSuggestion(mWhatYouTypedSuggestion));
+
+        mProcessor.populateModel(mWhatYouTypedSuggestion, mModel, 0);
+
+        Assert.assertEquals("The model should have the title set.", TEST_TITLE,
+                mModel.get(EditUrlSuggestionProperties.TITLE_TEXT));
+
+        Assert.assertEquals("The model should have the URL set to the tab's URL", TEST_URL,
+                mModel.get(EditUrlSuggestionProperties.URL_TEXT));
+    }
+
+    /** Test that the suggestion is not triggered if it is not the first suggestion. */
+    @Test
+    @SmallTest
+    public void testWhatYouTypedSecondSuggestion() throws Exception {
+        mProcessor.onUrlFocusChange(true);
+
+        Assert.assertFalse("The processor should not handle the suggestion.",
+                mProcessor.doesProcessSuggestion(mOtherSuggestion));
+
+        Assert.assertFalse("The processor should not handle the \"what you typed\" suggestion.",
+                mProcessor.doesProcessSuggestion(mWhatYouTypedSuggestion));
+    }
+
+    /** Test the edit button is pressed, the correct method in the URL bar delegate is triggered. */
+    @Test
+    @SmallTest
+    public void testEditButtonPress() throws Exception {
+        mProcessor.onUrlFocusChange(true);
+        mProcessor.doesProcessSuggestion(mWhatYouTypedSuggestion);
+        mProcessor.populateModel(mWhatYouTypedSuggestion, mModel, 0);
+
+        mModel.get(EditUrlSuggestionProperties.BUTTON_CLICK_LISTENER).onClick(mEditButton);
+
+        verify(mLocationBarDelegate).setOmniboxEditingText(TEST_URL);
+    }
+
+    /** Test that when suggestion is tapped, it still navigates to the correct location. */
+    @Test
+    @SmallTest
+    public void testPressSuggestion() throws Exception {
+        mProcessor.onUrlFocusChange(true);
+        mProcessor.doesProcessSuggestion(mWhatYouTypedSuggestion);
+        mProcessor.populateModel(mWhatYouTypedSuggestion, mModel, 0);
+
+        mModel.get(EditUrlSuggestionProperties.BUTTON_CLICK_LISTENER).onClick(mSuggestionView);
+
+        verify(mSelectionHandler).onEditUrlSuggestionSelected(mWhatYouTypedSuggestion);
+    }
+}
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/toolbar/ToolbarSecurityIconTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/toolbar/ToolbarSecurityIconTest.java
index d51da68b..bf4be1a 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/toolbar/ToolbarSecurityIconTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/toolbar/ToolbarSecurityIconTest.java
@@ -73,11 +73,11 @@
     public void testGetSecurityIconResource() {
         for (int securityLevel : SECURITY_LEVELS) {
             assertEquals("Wrong phone resource for security level " + securityLevel,
-                    R.drawable.offline_pin_round,
+                    R.drawable.ic_offline_pin_24dp,
                     LocationBarModel.getSecurityIconResource(
                             securityLevel, IS_SMALL_DEVICE, IS_OFFLINE_PAGE, !IS_PREVIEW));
             assertEquals("Wrong tablet resource for security level " + securityLevel,
-                    R.drawable.offline_pin_round,
+                    R.drawable.ic_offline_pin_24dp,
                     LocationBarModel.getSecurityIconResource(
                             securityLevel, !IS_SMALL_DEVICE, IS_OFFLINE_PAGE, !IS_PREVIEW));
             assertEquals("Wrong phone resource for security level " + securityLevel,
diff --git a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/NoTouchActivity.java b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/NoTouchActivity.java
index f86efdf6..5c7f367 100644
--- a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/NoTouchActivity.java
+++ b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/NoTouchActivity.java
@@ -146,7 +146,7 @@
         getFullscreenManager().setTab(getActivityTab());
 
         mUiController = AppHooks.get().createTouchlessUiController(this);
-        AppHooks.get().attachTouchlessMenuCoordinator(this);
+        AppHooks.get().attachTouchlessMenuCoordinator(this, mUiController);
         super.finishNativeInitialization();
     }
 
@@ -239,7 +239,8 @@
 
     @Override
     public ModalDialogManager createModalDialogManager() {
-        return new ModalDialogManager(new TouchlessDialogPresenter(this), ModalDialogType.APP);
+        return new ModalDialogManager(
+                new TouchlessDialogPresenter(this, mUiController), ModalDialogType.APP);
     }
 
     @Override
diff --git a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessExploreSitesCategoryCardView.java b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessExploreSitesCategoryCardView.java
index a07af8ee..6d982fb 100644
--- a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessExploreSitesCategoryCardView.java
+++ b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessExploreSitesCategoryCardView.java
@@ -60,6 +60,11 @@
         }
 
         @Override
+        public String getContextMenuTitle() {
+            return mModel.get(ExploreSitesSite.TITLE_KEY);
+        }
+
+        @Override
         public Bitmap getIconBitmap() {
             return mModel.get(ExploreSitesSite.ICON_KEY);
         }
diff --git a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/dialog/TouchlessDialogPresenter.java b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/dialog/TouchlessDialogPresenter.java
index cb518a3c..cd4bb077 100644
--- a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/dialog/TouchlessDialogPresenter.java
+++ b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/dialog/TouchlessDialogPresenter.java
@@ -19,8 +19,8 @@
 import android.widget.TextView;
 
 import org.chromium.base.ApiCompatibilityUtils;
-import org.chromium.chrome.browser.AppHooks;
 import org.chromium.chrome.browser.ChromeActivity;
+import org.chromium.chrome.browser.touchless.TouchlessUiController;
 import org.chromium.chrome.browser.touchless.dialog.TouchlessDialogProperties.DialogListItemProperties;
 import org.chromium.chrome.browser.touchless.dialog.TouchlessDialogProperties.ListItemType;
 import org.chromium.chrome.touchless.R;
@@ -39,6 +39,7 @@
 public class TouchlessDialogPresenter extends Presenter {
     /** An activity to attach dialogs to. */
     private final ChromeActivity mActivity;
+    private final TouchlessUiController mUiController;
 
     /** The dialog this class abstracts. */
     private Dialog mDialog;
@@ -47,8 +48,9 @@
     private PropertyModelChangeProcessor<PropertyModel, Pair<ViewGroup, ModelListAdapter>,
             PropertyKey> mModelChangeProcessor;
 
-    public TouchlessDialogPresenter(ChromeActivity activity) {
+    public TouchlessDialogPresenter(ChromeActivity activity, TouchlessUiController uiController) {
         mActivity = activity;
+        mUiController = uiController;
     }
 
     @Override
@@ -74,20 +76,12 @@
 
         mDialog.setOnCancelListener(dialogInterface
                 -> dismissCurrentDialog(DialogDismissalCause.NAVIGATE_BACK_OR_TOUCH_OUTSIDE));
-        mDialog.setOnShowListener(dialog
-                -> AppHooks.get().getTouchlessUiControllerForActivity(mActivity).addModelToQueue(
-                        model));
-        mDialog.setOnDismissListener(dialog
-                -> AppHooks.get()
-                           .getTouchlessUiControllerForActivity(mActivity)
-                           .removeModelFromQueue(model));
+        mDialog.setOnShowListener(dialog -> mUiController.addModelToQueue(model));
+        mDialog.setOnDismissListener(dialog -> mUiController.removeModelFromQueue(model));
         // Cancel on touch outside should be disabled by default. The ModelChangeProcessor wouldn't
         // notify change if the property is not set during initialization.
         mDialog.setCanceledOnTouchOutside(false);
-        mDialog.setOnKeyListener(
-                (dialog, keyCode, event)
-                        -> AppHooks.get().getTouchlessUiControllerForActivity(mActivity).onKeyEvent(
-                                event));
+        mDialog.setOnKeyListener((dialog, keyCode, event) -> mUiController.onKeyEvent(event));
         ViewGroup dialogView = (ViewGroup) LayoutInflater.from(mDialog.getContext())
                 .inflate(R.layout.touchless_dialog_view, null);
         ModelListAdapter adapter = new ModelListAdapter(mActivity);
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 7ceb00e..f24fdfa7 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -1105,9 +1105,12 @@
       <message name="IDS_HELP_MENU" desc="The text label of the Help sub-menu item in the wrench menu">
         H&amp;elp
       </message>
-      <message name="IDS_MANAGED_BY_ORG" desc="The text label of the 'Managed by' UI in the app menu, for enterprise users">
+      <message name="IDS_MANAGED" desc="The text label of the 'Managed by' UI in the app menu, for enterprise users">
         Managed by your organization
       </message>
+      <message name="IDS_MANAGED_BY" desc="The text label of the 'Managed by' UI in the app menu, for enterprise users">
+        Managed by <ph name="ENROLLMENT_DOMAIN">$1<ex>example.com</ex></ph>
+      </message>
       <if expr="not use_titlecase">
         <message name="IDS_IMPORT_SETTINGS_MENU_LABEL" desc="In sentence case: The app menu label to import bookmarks and settings.">
           Import bookmarks and settings...
@@ -6483,13 +6486,19 @@
       <!-- Managed UI on pages like chrome://settings and chrome://downloads -->
       <if expr="not is_android">
         <if expr="chromeos">
-          <message name="IDS_MANAGED_BY_ORG_WITH_HYPERLINK" desc="Message to end users in Enterprise/EDU, with a link for more info (ChromeOS)">
-            Your <ph name="BEGIN_LINK">&lt;a target="_blank" href="$1"&gt;</ph><ph name="DEVICE_TYPE">$2<ex>Chromebook</ex></ph> is managed<ph name="END_LINK">&lt;/a&gt;</ph> by your organization
+          <message name="IDS_MANAGED_WITH_HYPERLINK" desc="Message to end users in Enterprise/EDU, with a link for more info (ChromeOS)">
+            Your <ph name="BEGIN_LINK">&lt;a href="$1"&gt;</ph><ph name="DEVICE_TYPE">$2<ex>Chromebook</ex></ph> is managed<ph name="END_LINK">&lt;/a&gt;</ph> by your organization
+          </message>
+          <message name="IDS_MANAGED_BY_WITH_HYPERLINK" desc="Message to end users in Enterprise/EDU, with a link for more info (ChromeOS)">
+            Your <ph name="BEGIN_LINK">&lt;a href="$1"&gt;</ph><ph name="DEVICE_TYPE">$2<ex>Chromebook</ex></ph> is managed<ph name="END_LINK">&lt;/a&gt;</ph> by <ph name="ENROLLMENT_DOMAIN">$3<ex>example.com</ex></ph>
           </message>
         </if>
         <if expr="not chromeos">
-          <message name="IDS_MANAGED_BY_ORG_WITH_HYPERLINK" desc="Message to end users in Enterprise/EDU, with a link for more info (non-ChromeOS)">
-            Your <ph name="BEGIN_LINK">&lt;a target="_blank" href="$1"&gt;</ph>browser is managed<ph name="END_LINK">&lt;/a&gt;</ph> by your organization
+          <message name="IDS_MANAGED_WITH_HYPERLINK" desc="Message to end users in Enterprise/EDU, with a link for more info (non-ChromeOS)">
+            Your <ph name="BEGIN_LINK">&lt;a href="$1"&gt;</ph>browser is managed<ph name="END_LINK">&lt;/a&gt;</ph> by your organization
+          </message>
+          <message name="IDS_MANAGED_BY_WITH_HYPERLINK" desc="Message to end users in Enterprise/EDU, with a link for more info (non-ChromeOS)">
+            Your <ph name="BEGIN_LINK">&lt;a href="$1"&gt;</ph>browser is managed<ph name="END_LINK">&lt;/a&gt;</ph> by <ph name="ENROLLMENT_DOMAIN">$2<ex>example.com</ex></ph>
           </message>
         </if>
       </if>
diff --git a/chrome/app/generated_resources_grd/IDS_MANAGED.png.sha1 b/chrome/app/generated_resources_grd/IDS_MANAGED.png.sha1
new file mode 100644
index 0000000..3974ee4
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_MANAGED.png.sha1
@@ -0,0 +1 @@
+69fdbc92e66a3becccf33994067a19683ed7f4ae
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_MANAGED_BY.png.sha1 b/chrome/app/generated_resources_grd/IDS_MANAGED_BY.png.sha1
new file mode 100644
index 0000000..c543d46
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_MANAGED_BY.png.sha1
@@ -0,0 +1 @@
+545d8addbeeded80704be87fc15868b2c931a426
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_MANAGED_BY_ORG.png.sha1 b/chrome/app/generated_resources_grd/IDS_MANAGED_BY_ORG.png.sha1
deleted file mode 100644
index 52336ea..0000000
--- a/chrome/app/generated_resources_grd/IDS_MANAGED_BY_ORG.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5da71cdadaae89ea1d464fff75b65a60e3040b74
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_MANAGED_BY_ORG_WITH_HYPERLINK.png.sha1 b/chrome/app/generated_resources_grd/IDS_MANAGED_BY_ORG_WITH_HYPERLINK.png.sha1
deleted file mode 100644
index 8ec22ab..0000000
--- a/chrome/app/generated_resources_grd/IDS_MANAGED_BY_ORG_WITH_HYPERLINK.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e833678c2cc9804565724acfd9b6f78e0d211314
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_MANAGED_BY_WITH_HYPERLINK.png.sha1 b/chrome/app/generated_resources_grd/IDS_MANAGED_BY_WITH_HYPERLINK.png.sha1
new file mode 100644
index 0000000..c9340e1
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_MANAGED_BY_WITH_HYPERLINK.png.sha1
@@ -0,0 +1 @@
+6682f67cb8c503a710e365382735c7780d6903d4
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_MANAGED_WITH_HYPERLINK.png.sha1 b/chrome/app/generated_resources_grd/IDS_MANAGED_WITH_HYPERLINK.png.sha1
new file mode 100644
index 0000000..bba4dd72
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_MANAGED_WITH_HYPERLINK.png.sha1
@@ -0,0 +1 @@
+df6d8102570ab1e7f579ccfa2f0fc600ce696333
\ No newline at end of file
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
index a03ff66a..4dca627 100644
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -2557,6 +2557,9 @@
     Uses the same spell checker that’s used in Google search. Text you type in the browser is sent to Google.
   </message>
   <if expr="not is_macosx">
+    <message name="IDS_SETTING_LANGUAGES_SPELL_CHECK_DISABLED_REASON" desc="Text that indicates to the user that spell check options are disabled because none of the languages they have added have spell check support.">
+      Spell check isn’t supported for the languages you selected
+    </message>
     <message name="IDS_SETTINGS_LANGUAGES_SPELL_CHECK_LANGUAGES_LIST_TITLE" desc="Title for the list of languages that support spell check, from which users can enable or disable spell check for.">
       Use spell check for
     </message>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index f847e2c..14b0dfe2 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -1825,6 +1825,7 @@
     ":resource_prefetch_predictor_proto",
     "//base:i18n",
     "//base/allocator:buildflags",
+    "//base/util/values:values_util",
     "//cc",
     "//chrome:extra_resources",
     "//chrome:resources",
@@ -5075,7 +5076,6 @@
     "//chrome/browser/performance_manager:mojo_bindings_js",
     "//chrome/browser/resources/ssl/ssl_error_assistant:make_ssl_error_assistant_protobuf",
     "//chrome/browser/ui/webui/bluetooth_internals:mojo_bindings_js",
-    "//chrome/browser/ui/webui/downloads:mojo_bindings_js",
     "//chrome/browser/ui/webui/interventions_internals:mojo_bindings_js",
     "//chrome/browser/ui/webui/omnibox:mojo_bindings_js",
     "//chrome/browser/ui/webui/usb_internals:mojo_bindings_js",
@@ -5141,7 +5141,6 @@
   if (!is_android && optimize_webui) {
     deps += [
       "//chrome/browser/resources/bookmarks:build",
-      "//chrome/browser/resources/downloads:build",
       "//chrome/browser/resources/history:build",
     ]
     if (is_chromeos) {
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 475b8f9..7bb69df 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -1429,15 +1429,6 @@
      ENABLE_DISABLE_VALUE_TYPE(
          autofill::switches::kEnableOfferStoreUnmaskedWalletCards,
          autofill::switches::kDisableOfferStoreUnmaskedWalletCards)},
-    {"enable-offline-auto-reload", flag_descriptions::kOfflineAutoReloadName,
-     flag_descriptions::kOfflineAutoReloadDescription, kOsAll,
-     ENABLE_DISABLE_VALUE_TYPE(switches::kEnableOfflineAutoReload,
-                               switches::kDisableOfflineAutoReload)},
-    {"enable-offline-auto-reload-visible-only",
-     flag_descriptions::kOfflineAutoReloadVisibleOnlyName,
-     flag_descriptions::kOfflineAutoReloadVisibleOnlyDescription, kOsAll,
-     ENABLE_DISABLE_VALUE_TYPE(switches::kEnableOfflineAutoReloadVisibleOnly,
-                               switches::kDisableOfflineAutoReloadVisibleOnly)},
 #if defined(OS_CHROMEOS)
     {"enable-virtual-keyboard", flag_descriptions::kVirtualKeyboardName,
      flag_descriptions::kVirtualKeyboardDescription, kOsCrOS,
@@ -2703,6 +2694,10 @@
 #endif  // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
 
 #if !defined(OS_ANDROID)
+    {"chrome-colors", flag_descriptions::kChromeColorsName,
+     flag_descriptions::kChromeColorsDescription, kOsDesktop,
+     FEATURE_VALUE_TYPE(features::kChromeColors)},
+
     {"remove-ntp-fakebox", flag_descriptions::kRemoveNtpFakeboxName,
      flag_descriptions::kRemoveNtpFakeboxDescription, kOsDesktop,
      FEATURE_VALUE_TYPE(features::kRemoveNtpFakebox)},
@@ -2740,13 +2735,6 @@
 #endif  // defined(OS_ANDROID)
 
 #if defined(OS_ANDROID)
-    {"enable-downloads-location-change",
-     flag_descriptions::kDownloadsLocationChangeName,
-     flag_descriptions::kDownloadsLocationChangeDescription, kOsAndroid,
-     FEATURE_VALUE_TYPE(features::kDownloadsLocationChange)},
-#endif  // defined(OS_ANDROID)
-
-#if defined(OS_ANDROID)
     {"download-progress-infobar",
      flag_descriptions::kDownloadProgressInfoBarName,
      flag_descriptions::kDownloadProgressInfoBarDescription, kOsAndroid,
@@ -2801,13 +2789,6 @@
      flag_descriptions::kTabHoverCardImagesDescription, kOsDesktop,
      FEATURE_VALUE_TYPE(features::kTabHoverCardImages)},
 
-#if defined(OS_POSIX)
-    {"enable-ntlm-v2", flag_descriptions::kNtlmV2EnabledName,
-     flag_descriptions::kNtlmV2EnabledDescription,
-     kOsMac | kOsLinux | kOsCrOS | kOsAndroid,
-     FEATURE_VALUE_TYPE(features::kNtlmV2Enabled)},
-#endif  // defined(OS_POSIX)
-
     {"stop-non-timers-in-background",
      flag_descriptions::kStopNonTimersInBackgroundName,
      flag_descriptions::kStopNonTimersInBackgroundDescription, kOsAll,
diff --git a/chrome/browser/android/autofill_assistant/ui_controller_android.cc b/chrome/browser/android/autofill_assistant/ui_controller_android.cc
index c1dedfef..11218770 100644
--- a/chrome/browser/android/autofill_assistant/ui_controller_android.cc
+++ b/chrome/browser/android/autofill_assistant/ui_controller_android.cc
@@ -23,8 +23,8 @@
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
 #include "chrome/common/channel_info.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill_assistant/browser/controller.h"
 #include "components/autofill_assistant/browser/features.h"
 #include "components/autofill_assistant/browser/metrics.h"
diff --git a/chrome/browser/android/chrome_feature_list.cc b/chrome/browser/android/chrome_feature_list.cc
index 47aa4b3..5214e41f 100644
--- a/chrome/browser/android/chrome_feature_list.cc
+++ b/chrome/browser/android/chrome_feature_list.cc
@@ -475,7 +475,7 @@
                                          base::FEATURE_DISABLED_BY_DEFAULT};
 
 const base::Feature kSearchReadyOmniboxFeature{
-    "SearchReadyOmnibox", base::FEATURE_DISABLED_BY_DEFAULT};
+    "SearchReadyOmnibox", base::FEATURE_ENABLED_BY_DEFAULT};
 
 const base::Feature kServiceManagerForBackgroundPrefetch{
     "ServiceManagerForBackgroundPrefetch", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/chrome/browser/apps/app_service/app_icon_factory.cc b/chrome/browser/apps/app_service/app_icon_factory.cc
index 031d84cb8..5cda01f 100644
--- a/chrome/browser/apps/app_service/app_icon_factory.cc
+++ b/chrome/browser/apps/app_service/app_icon_factory.cc
@@ -266,16 +266,16 @@
         // caller has asked for compressed icons (i.e. PNG-formatted data), not
         // uncompressed (i.e. a gfx::ImageSkia).
         if (extension->location() == extensions::Manifest::COMPONENT) {
-          extensions::ComponentExtensionResourceInfo resource_info;
+          int resource_id = 0;
           const extensions::ComponentExtensionResourceManager* manager =
               extensions::ExtensionsBrowserClient::Get()
                   ->GetComponentExtensionResourceManager();
           if (manager && manager->IsComponentExtensionResource(
                              extension->path(), ext_resource.relative_path(),
-                             &resource_info)) {
+                             &resource_id)) {
             base::StringPiece data =
                 ui::ResourceBundle::GetSharedInstance().GetRawDataResource(
-                    resource_info.resource_id);
+                    resource_id);
             RunCallbackWithCompressedData(
                 size_hint_in_dip, default_icon_resource, is_placeholder_icon,
                 icon_effects, std::move(callback),
diff --git a/chrome/browser/apps/platform_apps/app_browsertest_util.cc b/chrome/browser/apps/platform_apps/app_browsertest_util.cc
index 0e863ce..4403bdc 100644
--- a/chrome/browser/apps/platform_apps/app_browsertest_util.cc
+++ b/chrome/browser/apps/platform_apps/app_browsertest_util.cc
@@ -29,7 +29,7 @@
 
 #if defined(OS_CHROMEOS)
 #include "chrome/browser/media/router/media_routes_observer.h"
-#include "chrome/browser/ui/ash/cast_config_client_media_router.h"
+#include "chrome/browser/ui/ash/cast_config_controller_media_router.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #endif
 
@@ -71,13 +71,13 @@
   ON_CALL(*media_router_, RegisterMediaSinksObserver(testing::_))
       .WillByDefault(testing::Return(true));
 
-  CastConfigClientMediaRouter::SetMediaRouterForTest(media_router_.get());
+  CastConfigControllerMediaRouter::SetMediaRouterForTest(media_router_.get());
 #endif
 }
 
 void PlatformAppBrowserTest::TearDownOnMainThread() {
 #if defined(OS_CHROMEOS)
-  CastConfigClientMediaRouter::SetMediaRouterForTest(nullptr);
+  CastConfigControllerMediaRouter::SetMediaRouterForTest(nullptr);
 #endif
   ExtensionApiTest::TearDownOnMainThread();
 }
diff --git a/chrome/browser/autofill/autofill_browsertest.cc b/chrome/browser/autofill/autofill_browsertest.cc
index d44d09e..7ddfb38 100644
--- a/chrome/browser/autofill/autofill_browsertest.cc
+++ b/chrome/browser/autofill/autofill_browsertest.cc
@@ -32,9 +32,9 @@
 #include "chrome/test/base/ui_test_utils.h"
 #include "components/autofill/content/browser/content_autofill_driver.h"
 #include "components/autofill/content/browser/content_autofill_driver_factory.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/personal_data_manager_observer.h"
 #include "components/autofill/core/browser/validation.h"
diff --git a/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc b/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc
index 13ed5e9..90a53173 100644
--- a/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc
+++ b/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc
@@ -37,9 +37,9 @@
 #include "components/autofill/content/browser/content_autofill_driver_factory.h"
 #include "components/autofill/core/browser/autofill_manager.h"
 #include "components/autofill/core/browser/autofill_manager_test_delegate.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/proto/server.pb.h"
 #include "components/autofill/core/browser/state_names.h"
diff --git a/chrome/browser/autofill/autofill_interactive_uitest.cc b/chrome/browser/autofill/autofill_interactive_uitest.cc
index dea1a92c1..260faf9 100644
--- a/chrome/browser/autofill/autofill_interactive_uitest.cc
+++ b/chrome/browser/autofill/autofill_interactive_uitest.cc
@@ -49,8 +49,8 @@
 #include "components/autofill/content/browser/content_autofill_driver_factory.h"
 #include "components/autofill/core/browser/autofill_manager.h"
 #include "components/autofill/core/browser/autofill_manager_test_delegate.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/validation.h"
 #include "components/autofill/core/common/autofill_features.h"
 #include "components/autofill/core/common/autofill_util.h"
diff --git a/chrome/browser/autofill/autofill_server_browsertest.cc b/chrome/browser/autofill/autofill_server_browsertest.cc
index ba99bd5..3e5c5be 100644
--- a/chrome/browser/autofill/autofill_server_browsertest.cc
+++ b/chrome/browser/autofill/autofill_server_browsertest.cc
@@ -16,8 +16,8 @@
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/personal_data_manager_observer.h"
 #include "components/autofill/core/common/autofill_features.h"
diff --git a/chrome/browser/autofill/autofill_uitest_util.cc b/chrome/browser/autofill/autofill_uitest_util.cc
index 34b2b66..5bee77a2 100644
--- a/chrome/browser/autofill/autofill_uitest_util.cc
+++ b/chrome/browser/autofill/autofill_uitest_util.cc
@@ -8,8 +8,8 @@
 #include "chrome/browser/autofill/personal_data_manager_factory.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/personal_data_manager_observer.h"
 #include "content/public/test/test_utils.h"
diff --git a/chrome/browser/autofill/manual_filling_controller_impl_unittest.cc b/chrome/browser/autofill/manual_filling_controller_impl_unittest.cc
index 50c8fe16..28edcc1a 100644
--- a/chrome/browser/autofill/manual_filling_controller_impl_unittest.cc
+++ b/chrome/browser/autofill/manual_filling_controller_impl_unittest.cc
@@ -36,8 +36,8 @@
       void(const std::map<base::string16, const autofill::PasswordForm*>&,
            const url::Origin&));
   MOCK_METHOD1(OnFilledIntoFocusedField, void(autofill::FillingStatus));
-  MOCK_METHOD3(RefreshSuggestionsForField,
-               void(const url::Origin&, bool, bool));
+  MOCK_METHOD4(RefreshSuggestionsForField,
+               void(const url::Origin&, bool, bool, bool));
   MOCK_METHOD0(DidNavigateMainFrame, void());
   MOCK_METHOD2(GetFavicon,
                void(int, base::OnceCallback<void(const gfx::Image&)>));
diff --git a/chrome/browser/autofill/manual_filling_utils.cc b/chrome/browser/autofill/manual_filling_utils.cc
index 28eaa679..d0588f77 100644
--- a/chrome/browser/autofill/manual_filling_utils.cc
+++ b/chrome/browser/autofill/manual_filling_utils.cc
@@ -6,13 +6,12 @@
 
 #include <utility>
 
-#include "chrome/grit/generated_resources.h"
-#include "ui/base/l10n/l10n_util.h"
-
 namespace autofill {
 
-AccessorySheetData CreateAccessorySheetData(base::string16 title,
-                                            std::vector<UserInfo> user_info) {
+AccessorySheetData CreateAccessorySheetData(
+    base::string16 title,
+    std::vector<UserInfo> user_info,
+    std::vector<FooterCommand> footer_commands) {
   // TODO(crbug.com/902425): Remove hard-coded enum value
   AccessorySheetData data(FallbackSheetType::PASSWORD, std::move(title));
   for (auto& i : user_info) {
@@ -21,9 +20,9 @@
 
   // TODO(crbug.com/902425): Generalize options (both adding to footer, and
   // handling selection).
-  base::string16 manage_passwords_title = l10n_util::GetStringUTF16(
-      IDS_PASSWORD_MANAGER_ACCESSORY_ALL_PASSWORDS_LINK);
-  data.add_footer_command(FooterCommand(manage_passwords_title));
+  for (auto& footer_command : footer_commands) {
+    data.add_footer_command(std::move(footer_command));
+  }
 
   return data;
 }
diff --git a/chrome/browser/autofill/manual_filling_utils.h b/chrome/browser/autofill/manual_filling_utils.h
index 1dbcf3d..f931874 100644
--- a/chrome/browser/autofill/manual_filling_utils.h
+++ b/chrome/browser/autofill/manual_filling_utils.h
@@ -11,8 +11,10 @@
 
 // Creates an AccessorySheetData defining the data to be shown in the filling
 // UI.
-AccessorySheetData CreateAccessorySheetData(base::string16 title,
-                                            std::vector<UserInfo> user_info);
+AccessorySheetData CreateAccessorySheetData(
+    base::string16 title,
+    std::vector<UserInfo> user_info,
+    std::vector<FooterCommand> footer_commands);
 
 }  // namespace autofill
 
diff --git a/chrome/browser/badging/badge_service_impl.cc b/chrome/browser/badging/badge_service_impl.cc
index 9cd2571..77118ea4 100644
--- a/chrome/browser/badging/badge_service_impl.cc
+++ b/chrome/browser/badging/badge_service_impl.cc
@@ -80,7 +80,7 @@
 }
 
 bool BadgeServiceImpl::IsInApp() {
-  WebAppBrowserController* web_app_controller =
+  web_app::AppBrowserController* web_app_controller =
       chrome::FindBrowserWithWebContents(web_contents_)->web_app_controller();
   return web_app_controller &&
          extensions::IsSameScope(web_app_controller->GetAppLaunchURL(),
diff --git a/chrome/browser/banners/app_banner_settings_helper.cc b/chrome/browser/banners/app_banner_settings_helper.cc
index 4c0ccbe9..3ae7a9f 100644
--- a/chrome/browser/banners/app_banner_settings_helper.cc
+++ b/chrome/browser/banners/app_banner_settings_helper.cc
@@ -14,6 +14,7 @@
 #include "base/command_line.h"
 #include "base/optional.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/util/values/values_util.h"
 #include "chrome/browser/banners/app_banner_manager.h"
 #include "chrome/browser/banners/app_banner_metrics.h"
 #include "chrome/browser/browser_process.h"
@@ -182,21 +183,6 @@
   return (now - event_time < period);
 }
 
-base::Optional<base::TimeDelta> ParseTimeDelta(const base::Value* value) {
-  std::string delta_string;
-  if (!value || !value->GetAsString(&delta_string))
-    return base::nullopt;
-
-  int64_t delta_int64;
-  if (!base::StringToInt64(delta_string, &delta_int64))
-    return base::nullopt;
-  return base::TimeDelta::FromMicroseconds(delta_int64);
-}
-
-base::Value SerializeTimeDelta(const base::TimeDelta& delta) {
-  return base::Value(base::NumberToString(delta.InMicroseconds()));
-}
-
 // Dictionary of time information for how long to wait before showing the
 // "Install" text slide animation again.
 // Data format: {"last_shown": timestamp, "delay": duration}
@@ -230,18 +216,17 @@
   if (!next_dict || !next_dict->is_dict())
     return base::nullopt;
 
-  base::Optional<base::TimeDelta> last_shown_since_epoch =
-      ParseTimeDelta(next_dict->FindKey(kLastShownKey));
-  if (!last_shown_since_epoch)
+  base::Optional<base::Time> last_shown =
+      util::ValueToTime(next_dict->FindKey(kLastShownKey));
+  if (!last_shown)
     return base::nullopt;
 
   base::Optional<base::TimeDelta> delay =
-      ParseTimeDelta(next_dict->FindKey(kDelayKey));
+      util::ValueToTimeDelta(next_dict->FindKey(kDelayKey));
   if (!delay)
     return base::nullopt;
 
-  return NextInstallTextAnimation{
-      base::Time::FromDeltaSinceWindowsEpoch(*last_shown_since_epoch), *delay};
+  return NextInstallTextAnimation{*last_shown, *delay};
 }
 
 void NextInstallTextAnimation::RecordToPrefs(content::WebContents* web_contents,
@@ -251,9 +236,8 @@
     return;
 
   base::Value next_dict(base::Value::Type::DICTIONARY);
-  next_dict.SetKey(kLastShownKey,
-                   SerializeTimeDelta(last_shown.ToDeltaSinceWindowsEpoch()));
-  next_dict.SetKey(kDelayKey, SerializeTimeDelta(delay));
+  next_dict.SetKey(kLastShownKey, util::TimeToValue(last_shown));
+  next_dict.SetKey(kDelayKey, util::TimeDeltaToValue(delay));
   app_prefs.dict()->SetKey(kNextInstallTextAnimation, std::move(next_dict));
   app_prefs.Save();
 }
diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd
index 91e567f..48ec1c49 100644
--- a/chrome/browser/browser_resources.grd
+++ b/chrome/browser/browser_resources.grd
@@ -158,37 +158,6 @@
       <include name="IDR_UKM_INTERNALS_CSS" file="../../components/ukm/debug/ukm_internals.css" flattenhtml="true" compress="gzip" type="BINDATA" />
       <include name="IDR_TRANSLATE_INTERNALS_HTML" file="../../components/translate/translate_internals/translate_internals.html" flattenhtml="true" allowexternalscript="true" compress="gzip" type="BINDATA" />
       <include name="IDR_TRANSLATE_INTERNALS_JS" file="../../components/translate/translate_internals/translate_internals.js" flattenhtml="true" compress="gzip" type="BINDATA" />
-      <if expr="not is_android">
-        <include name="IDR_DOWNLOADS_IMAGES_INCOGNITO_MARKER_SVG" file="resources\downloads\images\incognito_marker.svg" type="BINDATA" />
-        <include name="IDR_DOWNLOADS_IMAGES_NO_DOWNLOADS_SVG" file="resources\downloads\images\no_downloads.svg" type="BINDATA" />
-        <include name="IDR_DOWNLOADS_MOJO_LITE_JS" file="${root_gen_dir}\chrome\browser\ui\webui\downloads\downloads.mojom-lite.js" use_base_dir="false" type="BINDATA" />
-        <if expr="optimize_webui">
-          <then>
-            <include name="IDR_DOWNLOADS_VULCANIZED_HTML" file="${root_gen_dir}\chrome\browser\resources\downloads\vulcanized.html" use_base_dir="false" flattenhtml="true" allowexternalscript="true" type="BINDATA" compress="gzip" />
-            <include name="IDR_DOWNLOADS_CRISPER_JS" file="${root_gen_dir}\chrome\browser\resources\downloads\crisper.js" use_base_dir="false" flattenhtml="true" type="BINDATA" compress="gzip" />
-          </then>
-          <else>
-            <include name="IDR_DOWNLOADS_DOWNLOADS_HTML" file="resources\downloads\downloads.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
-            <include name="IDR_DOWNLOADS_BROWSER_PROXY_HTML" file="resources\downloads\browser_proxy.html" type="BINDATA" />
-            <include name="IDR_DOWNLOADS_BROWSER_PROXY_JS" file="resources\downloads\browser_proxy.js" type="BINDATA" />
-            <include name="IDR_DOWNLOADS_CONSTANTS_HTML" file="resources\downloads\constants.html" type="BINDATA" />
-            <include name="IDR_DOWNLOADS_CONSTANTS_JS" file="resources\downloads\constants.js" type="BINDATA" />
-            <include name="IDR_DOWNLOADS_DOWNLOADS_JS" file="resources\downloads\downloads.js" type="BINDATA" />
-            <include name="IDR_DOWNLOADS_I18N_SETUP_HTML" file="resources\downloads\i18n_setup.html" type="BINDATA" />
-            <include name="IDR_DOWNLOADS_ICON_LOADER_HTML" file="resources\downloads\icon_loader.html" type="BINDATA" />
-            <include name="IDR_DOWNLOADS_ICON_LOADER_JS" file="resources\downloads\icon_loader.js" type="BINDATA" />
-            <include name="IDR_DOWNLOADS_ICONS_HTML" file="resources\downloads\icons.html" type="BINDATA" />
-            <include name="IDR_DOWNLOADS_ITEM_HTML" file="resources\downloads\item.html" type="BINDATA" />
-            <include name="IDR_DOWNLOADS_ITEM_JS" file="resources\downloads\item.js" type="BINDATA" />
-            <include name="IDR_DOWNLOADS_MANAGER_HTML" file="resources\downloads\manager.html" type="BINDATA" />
-            <include name="IDR_DOWNLOADS_MANAGER_JS" file="resources\downloads\manager.js" type="BINDATA" />
-            <include name="IDR_DOWNLOADS_SEARCH_SERVICE_HTML" file="resources\downloads\search_service.html" type="BINDATA" />
-            <include name="IDR_DOWNLOADS_SEARCH_SERVICE_JS" file="resources\downloads\search_service.js" type="BINDATA" />
-            <include name="IDR_DOWNLOADS_TOOLBAR_HTML" file="resources\downloads\toolbar.html" type="BINDATA" />
-            <include name="IDR_DOWNLOADS_TOOLBAR_JS" file="resources\downloads\toolbar.js" type="BINDATA" />
-          </else>
-        </if>
-      </if>
       <include name="IDR_FEEDBACK_MANIFEST" file="resources\feedback\manifest.json" type="BINDATA" />
       <if expr="is_android">
         <include name="IDR_EXPLORE_SITES_INTERNALS_HTML" file="resources\explore_sites_internals\explore_sites_internals.html" allowexternalscript="true" compress="gzip" type="BINDATA" />
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc
index 23e9af6..96fd7902b 100644
--- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc
+++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc
@@ -55,9 +55,9 @@
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/testing_browser_process.h"
 #include "chrome/test/base/testing_profile.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/payments/legacy_strike_database.h"
 #include "components/autofill/core/browser/payments/strike_database.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
diff --git a/chrome/browser/browsing_data/counters/autofill_counter_browsertest.cc b/chrome/browser/browsing_data/counters/autofill_counter_browsertest.cc
index 325e1b7..e4a955e 100644
--- a/chrome/browser/browsing_data/counters/autofill_counter_browsertest.cc
+++ b/chrome/browser/browsing_data/counters/autofill_counter_browsertest.cc
@@ -15,10 +15,10 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/web_data_service_factory.h"
 #include "chrome/test/base/in_process_browser_test.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/autofill_type.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/test_autofill_clock.h"
 #include "components/autofill/core/browser/webdata/autofill_webdata_service.h"
 #include "components/browsing_data/core/browsing_data_utils.h"
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index c507af9..9f0839be 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -1973,27 +1973,13 @@
 bool IsAutoReloadEnabled() {
   const base::CommandLine& browser_command_line =
       *base::CommandLine::ForCurrentProcess();
-  if (browser_command_line.HasSwitch(switches::kEnableOfflineAutoReload))
+  if (browser_command_line.HasSwitch(switches::kEnableAutoReload))
     return true;
-  if (browser_command_line.HasSwitch(switches::kDisableOfflineAutoReload))
+  if (browser_command_line.HasSwitch(switches::kDisableAutoReload))
     return false;
   return true;
 }
 
-bool IsAutoReloadVisibleOnlyEnabled() {
-  const base::CommandLine& browser_command_line =
-      *base::CommandLine::ForCurrentProcess();
-  if (browser_command_line.HasSwitch(
-      switches::kEnableOfflineAutoReloadVisibleOnly)) {
-    return true;
-  }
-  if (browser_command_line.HasSwitch(
-      switches::kDisableOfflineAutoReloadVisibleOnly)) {
-    return false;
-  }
-  return true;
-}
-
 void MaybeAppendBlinkSettingsSwitchForFieldTrial(
     const base::CommandLine& browser_command_line,
     base::CommandLine* command_line) {
@@ -2204,11 +2190,7 @@
     }
 
     if (IsAutoReloadEnabled())
-      command_line->AppendSwitch(switches::kEnableOfflineAutoReload);
-    if (IsAutoReloadVisibleOnlyEnabled()) {
-      command_line->AppendSwitch(
-          switches::kEnableOfflineAutoReloadVisibleOnly);
-    }
+      command_line->AppendSwitch(switches::kEnableAutoReload);
 
     MaybeAppendBlinkSettingsSwitchForFieldTrial(
         browser_command_line, command_line);
diff --git a/chrome/browser/chromeos/extensions/external_cache_impl.cc b/chrome/browser/chromeos/extensions/external_cache_impl.cc
index 654f65bb..a383bea0 100644
--- a/chrome/browser/chromeos/extensions/external_cache_impl.cc
+++ b/chrome/browser/chromeos/extensions/external_cache_impl.cc
@@ -282,21 +282,25 @@
       continue;
     }
 
+    base::FilePath file_path;
+    std::string version;
+    std::string hash;
+    bool is_cached =
+        local_cache_.GetExtension(entry.first, hash, &file_path, &version);
+    if (!is_cached)
+      version = "0.0.0.0";
     if (downloader_) {
       GURL update_url =
           GetExtensionUpdateUrl(entry.second, always_check_updates_);
 
       if (update_url.is_valid()) {
-        downloader_->AddPendingExtension(
+        downloader_->AddPendingExtensionWithVersion(
             entry.first, update_url, extensions::Manifest::EXTERNAL_POLICY,
-            false, 0, extensions::ManifestFetchData::FetchPriority::BACKGROUND);
+            false, 0, extensions::ManifestFetchData::FetchPriority::BACKGROUND,
+            base::Version(version));
       }
     }
-
-    base::FilePath file_path;
-    std::string version;
-    std::string hash;
-    if (local_cache_.GetExtension(entry.first, hash, &file_path, &version)) {
+    if (is_cached) {
       cached_extensions_->SetKey(
           entry.first,
           GetExtensionValueToCache(entry.second, file_path.value(), version));
diff --git a/chrome/browser/chromeos/file_manager/external_filesystem_apitest.cc b/chrome/browser/chromeos/file_manager/external_filesystem_apitest.cc
index a5e06ce..6d305d4 100644
--- a/chrome/browser/chromeos/file_manager/external_filesystem_apitest.cc
+++ b/chrome/browser/chromeos/file_manager/external_filesystem_apitest.cc
@@ -21,7 +21,7 @@
 #include "chrome/browser/media/router/test/mock_media_router.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
-#include "chrome/browser/ui/ash/cast_config_client_media_router.h"
+#include "chrome/browser/ui/ash/cast_config_controller_media_router.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/common/chrome_constants.h"
 #include "chrome/common/chrome_paths.h"
@@ -359,13 +359,13 @@
     media_router_ = std::make_unique<media_router::MockMediaRouter>();
     ON_CALL(*media_router_, RegisterMediaSinksObserver(testing::_))
         .WillByDefault(testing::Return(true));
-    CastConfigClientMediaRouter::SetMediaRouterForTest(media_router_.get());
+    CastConfigControllerMediaRouter::SetMediaRouterForTest(media_router_.get());
 
     extensions::ExtensionApiTest::SetUpOnMainThread();
   }
 
   void TearDownOnMainThread() override {
-    CastConfigClientMediaRouter::SetMediaRouterForTest(nullptr);
+    CastConfigControllerMediaRouter::SetMediaRouterForTest(nullptr);
     extensions::ExtensionApiTest::TearDownOnMainThread();
   }
 
diff --git a/chrome/browser/complex_tasks/task_tab_helper.cc b/chrome/browser/complex_tasks/task_tab_helper.cc
index 159b02b..b2ceaf3 100644
--- a/chrome/browser/complex_tasks/task_tab_helper.cc
+++ b/chrome/browser/complex_tasks/task_tab_helper.cc
@@ -133,6 +133,16 @@
         context_record_task_id->set_root_task_id(
             prev_context_record_task_id->root_task_id());
       }
+#if defined(OS_ANDROID)
+      else {
+        // Cross-tab navigation - only supported in Android. In this case
+        // the parent and parent root Task IDs are passed from the Java layer
+        if (this->GetParentTaskId() != -1) {
+          context_record_task_id->set_parent_task_id(this->GetParentTaskId());
+          context_record_task_id->set_root_task_id(this->GetParentRootTaskId());
+        }
+      }
+#endif  // defined(OS_ANDROID)
     }
   } else {
     context_record_task_id->set_root_task_id(context_record_task_id->task_id());
diff --git a/chrome/browser/complex_tasks/task_tab_helper_unittest.cc b/chrome/browser/complex_tasks/task_tab_helper_unittest.cc
index c8ffc0bf..d99e5089 100644
--- a/chrome/browser/complex_tasks/task_tab_helper_unittest.cc
+++ b/chrome/browser/complex_tasks/task_tab_helper_unittest.cc
@@ -65,9 +65,11 @@
         .WillByDefault(testing::Return(DEFAULT_SEARCH_ENGINE_HUB_TYPE));
   }
 
+  void GoBack() { content::NavigationSimulator::GoBack(web_contents()); }
+
   void GoBackNTimes(int times) {
     while (times--) {
-      content::NavigationSimulator::GoBack(web_contents());
+      GoBack();
     }
   }
 
@@ -232,3 +234,36 @@
   EXPECT_NE(a_context_record_task_id.root_task_id(),
             b_context_record_task_id.root_task_id());
 }
+
+TEST_F(TaskTabHelperUnitTest, TestTaskIdBackButton) {
+  NavigateAndCommit(GURL("http://a.com"), ui::PAGE_TRANSITION_TYPED);
+  NavigateAndCommit(GURL("http://b.com"));
+  sessions::ContextRecordTaskId b_context_record_task_id =
+      *sessions::ContextRecordTaskId::Get(GetLastCommittedEntry());
+  GoBack();
+  sessions::ContextRecordTaskId a_context_record_task_id =
+      *sessions::ContextRecordTaskId::Get(GetLastCommittedEntry());
+
+  // A should still have no parent after a back navigation and
+  // shouldn't link to B (like it would if we navigated a.com -> b.com -> a.com
+  // via clicking links)
+  EXPECT_EQ(a_context_record_task_id.parent_task_id(), -1);
+  EXPECT_NE(a_context_record_task_id.parent_task_id(),
+            b_context_record_task_id.task_id());
+}
+
+TEST_F(TaskTabHelperUnitTest, TestTaskIdBackViaLink) {
+  NavigateAndCommit(GURL("http://a.com"), ui::PAGE_TRANSITION_TYPED);
+  NavigateAndCommit(GURL("http://b.com"));
+  sessions::ContextRecordTaskId b_context_record_task_id =
+      *sessions::ContextRecordTaskId::Get(GetLastCommittedEntry());
+  NavigateAndCommit(GURL("http://a.com"));
+  sessions::ContextRecordTaskId a_context_record_task_id =
+      *sessions::ContextRecordTaskId::Get(GetLastCommittedEntry());
+
+  // We got back to a.com via a link (not back button) so it should now point to
+  // B.
+  EXPECT_NE(a_context_record_task_id.parent_task_id(), -1);
+  EXPECT_EQ(a_context_record_task_id.parent_task_id(),
+            b_context_record_task_id.task_id());
+}
diff --git a/chrome/browser/extensions/api/autofill_private/autofill_private_api.cc b/chrome/browser/extensions/api/autofill_private/autofill_private_api.cc
index ec3a4fbb..b9c4b02 100644
--- a/chrome/browser/extensions/api/autofill_private/autofill_private_api.cc
+++ b/chrome/browser/extensions/api/autofill_private/autofill_private_api.cc
@@ -18,7 +18,7 @@
 #include "components/autofill/content/browser/content_autofill_driver.h"
 #include "components/autofill/content/browser/content_autofill_driver_factory.h"
 #include "components/autofill/core/browser/autofill_manager.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/form_data_importer.h"
 #include "components/autofill/core/browser/payments/local_card_migration_manager.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
diff --git a/chrome/browser/extensions/api/autofill_private/autofill_util.cc b/chrome/browser/extensions/api/autofill_private/autofill_util.cc
index 157f6c0..0f3bb0a 100644
--- a/chrome/browser/extensions/api/autofill_private/autofill_util.cc
+++ b/chrome/browser/extensions/api/autofill_private/autofill_util.cc
@@ -17,10 +17,10 @@
 #include "chrome/common/extensions/api/autofill_private.h"
 #include "chrome/common/pref_names.h"
 #include "components/autofill/core/browser/autofill_country.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_type.h"
 #include "components/autofill/core/browser/country_combobox_model.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/prefs/pref_service.h"
 #include "components/strings/grit/components_strings.h"
diff --git a/chrome/browser/extensions/bookmark_app_helper.cc b/chrome/browser/extensions/bookmark_app_helper.cc
index b1e9c931..fcb56b0 100644
--- a/chrome/browser/extensions/bookmark_app_helper.cc
+++ b/chrome/browser/extensions/bookmark_app_helper.cc
@@ -367,14 +367,16 @@
 
   if (!contents_) {
     // The web contents can be null in tests.
-    OnBubbleCompleted(true, web_app_info_);
+    OnBubbleCompleted(true,
+                      std::make_unique<WebApplicationInfo>(web_app_info_));
     return;
   }
 
   Browser* browser = chrome::FindBrowserWithWebContents(contents_);
   if (!browser) {
     // The browser can be null in tests.
-    OnBubbleCompleted(true, web_app_info_);
+    OnBubbleCompleted(true,
+                      std::make_unique<WebApplicationInfo>(web_app_info_));
     return;
   }
 
@@ -404,9 +406,10 @@
 
 void BookmarkAppHelper::OnBubbleCompleted(
     bool user_accepted,
-    const WebApplicationInfo& web_app_info) {
+    std::unique_ptr<WebApplicationInfo> web_app_info) {
   if (user_accepted) {
-    web_app_info_ = web_app_info;
+    DCHECK(web_app_info);
+    web_app_info_ = *web_app_info;
 
     if (is_policy_installed_app_)
       crx_installer_->set_install_source(Manifest::EXTERNAL_POLICY_DOWNLOAD);
diff --git a/chrome/browser/extensions/bookmark_app_helper.h b/chrome/browser/extensions/bookmark_app_helper.h
index 21db2f0..05edccd4 100644
--- a/chrome/browser/extensions/bookmark_app_helper.h
+++ b/chrome/browser/extensions/bookmark_app_helper.h
@@ -164,7 +164,7 @@
   // Called after the bubble has been shown, and the user has either accepted or
   // the dialog was dismissed.
   void OnBubbleCompleted(bool user_accepted,
-                         const WebApplicationInfo& web_app_info);
+                         std::unique_ptr<WebApplicationInfo> web_app_info);
 
   // Called when the installation of the app is complete to perform the final
   // installation steps.
diff --git a/chrome/browser/extensions/bookmark_app_helper_browsertest.cc b/chrome/browser/extensions/bookmark_app_helper_browsertest.cc
index dfa01cb..260e63e 100644
--- a/chrome/browser/extensions/bookmark_app_helper_browsertest.cc
+++ b/chrome/browser/extensions/bookmark_app_helper_browsertest.cc
@@ -182,8 +182,9 @@
 
   ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver> observer(this);
   observer.Add(ExtensionRegistry::Get(browser()->profile()));
-  bookmark_app_helper_->OnBubbleCompleted(true,
-                                          bookmark_app_helper_->web_app_info_);
+  bookmark_app_helper_->OnBubbleCompleted(
+      true, std::make_unique<WebApplicationInfo>(
+                bookmark_app_helper_->web_app_info_));
   Wait();  // Quits when the extension install completes.
 
   Browser* app_browser = chrome::FindBrowserWithWebContents(web_contents());
diff --git a/chrome/browser/extensions/chrome_component_extension_resource_manager.cc b/chrome/browser/extensions/chrome_component_extension_resource_manager.cc
index cbfa7b3..c5278b6 100644
--- a/chrome/browser/extensions/chrome_component_extension_resource_manager.cc
+++ b/chrome/browser/extensions/chrome_component_extension_resource_manager.cc
@@ -34,7 +34,7 @@
 
 ChromeComponentExtensionResourceManager::
 ChromeComponentExtensionResourceManager() {
-  static const GzippedGritResourceMap kExtraComponentExtensionResources[] = {
+  static const GritResourceMap kExtraComponentExtensionResources[] = {
 #if defined(OS_CHROMEOS)
     {"web_store/webstore_icon_128.png", IDR_WEBSTORE_APP_ICON_128},
     {"web_store/webstore_icon_16.png", IDR_WEBSTORE_APP_ICON_16},
@@ -53,8 +53,8 @@
     {"chrome_app/chrome_app_icon_192.png", IDR_CHROME_APP_ICON_192},
     {"pdf/ink/ink_lib_binary.js", IDR_INK_LIB_BINARY_JS},
     {"pdf/ink/pthread-main.js", IDR_INK_PTHREAD_MAIN_JS},
-    {"pdf/ink/glcore_base.js.mem", IDR_INK_GLCORE_BASE_JS_MEM, true},
-    {"pdf/ink/glcore_base.wasm", IDR_INK_GLCORE_BASE_WASM, true},
+    {"pdf/ink/glcore_base.js.mem", IDR_INK_GLCORE_BASE_JS_MEM},
+    {"pdf/ink/glcore_base.wasm", IDR_INK_GLCORE_BASE_WASM},
     {"pdf/ink/glcore_wasm_bootstrap_compiled.js",
      IDR_INK_GLCORE_WASM_BOOTSTRAP_COMPILED_JS},
 #endif
@@ -67,7 +67,7 @@
                               base::size(kExtraComponentExtensionResources));
 #if defined(OS_CHROMEOS)
   size_t file_manager_resource_size;
-  const GzippedGritResourceMap* file_manager_resources =
+  const GritResourceMap* file_manager_resources =
       file_manager::GetFileManagerResources(&file_manager_resource_size);
   AddComponentResourceEntries(
       file_manager_resources,
@@ -84,7 +84,7 @@
   }
 
   size_t keyboard_resource_size;
-  const GzippedGritResourceMap* keyboard_resources =
+  const GritResourceMap* keyboard_resources =
       keyboard::GetKeyboardExtensionResources(&keyboard_resource_size);
   AddComponentResourceEntries(
       keyboard_resources,
@@ -103,7 +103,7 @@
 bool ChromeComponentExtensionResourceManager::IsComponentExtensionResource(
     const base::FilePath& extension_path,
     const base::FilePath& resource_path,
-    ComponentExtensionResourceInfo* resource_info) const {
+    int* resource_id) const {
   base::FilePath directory_path = extension_path;
   base::FilePath resources_dir;
   base::FilePath relative_path;
@@ -114,9 +114,9 @@
   relative_path = relative_path.Append(resource_path);
   relative_path = relative_path.NormalizePathSeparators();
 
-  auto entry = path_to_resource_info_.find(relative_path);
-  if (entry != path_to_resource_info_.end()) {
-    *resource_info = entry->second;
+  auto entry = path_to_resource_id_.find(relative_path);
+  if (entry != path_to_resource_id_.end()) {
+    *resource_id = entry->second;
     return true;
   }
 
@@ -134,16 +134,15 @@
 }
 
 void ChromeComponentExtensionResourceManager::AddComponentResourceEntries(
-    const GzippedGritResourceMap* entries,
+    const GritResourceMap* entries,
     size_t size) {
   for (size_t i = 0; i < size; ++i) {
     base::FilePath resource_path = base::FilePath().AppendASCII(
         entries[i].name);
     resource_path = resource_path.NormalizePathSeparators();
 
-    DCHECK(!base::ContainsKey(path_to_resource_info_, resource_path));
-    path_to_resource_info_[resource_path] = {entries[i].value,
-                                             entries[i].gzipped};
+    DCHECK(!base::ContainsKey(path_to_resource_id_, resource_path));
+    path_to_resource_id_[resource_path] = entries[i].value;
   }
 }
 
diff --git a/chrome/browser/extensions/chrome_component_extension_resource_manager.h b/chrome/browser/extensions/chrome_component_extension_resource_manager.h
index 4c92fe7..010e5d4 100644
--- a/chrome/browser/extensions/chrome_component_extension_resource_manager.h
+++ b/chrome/browser/extensions/chrome_component_extension_resource_manager.h
@@ -13,7 +13,7 @@
 #include "base/macros.h"
 #include "extensions/browser/component_extension_resource_manager.h"
 
-struct GzippedGritResourceMap;
+struct GritResourceMap;
 
 namespace extensions {
 
@@ -24,21 +24,18 @@
   ~ChromeComponentExtensionResourceManager() override;
 
   // Overridden from ComponentExtensionResourceManager:
-  bool IsComponentExtensionResource(
-      const base::FilePath& extension_path,
-      const base::FilePath& resource_path,
-      ComponentExtensionResourceInfo* resource_info) const override;
+  bool IsComponentExtensionResource(const base::FilePath& extension_path,
+                                    const base::FilePath& resource_path,
+                                    int* resource_id) const override;
   const ui::TemplateReplacements* GetTemplateReplacementsForExtension(
       const std::string& extension_id) const override;
 
  private:
-  void AddComponentResourceEntries(const GzippedGritResourceMap* entries,
-                                   size_t size);
+  void AddComponentResourceEntries(const GritResourceMap* entries, size_t size);
 
   // A map from a resource path to the resource ID.  Used by
   // IsComponentExtensionResource.
-  std::map<base::FilePath, ComponentExtensionResourceInfo>
-      path_to_resource_info_;
+  std::map<base::FilePath, int> path_to_resource_id_;
 
   // A map from an extension ID to its i18n template replacements.
   std::map<std::string, ui::TemplateReplacements>
diff --git a/chrome/browser/extensions/chrome_component_extension_resource_manager_unittest.cc b/chrome/browser/extensions/chrome_component_extension_resource_manager_unittest.cc
index 7ef5bec..8364e164 100644
--- a/chrome/browser/extensions/chrome_component_extension_resource_manager_unittest.cc
+++ b/chrome/browser/extensions/chrome_component_extension_resource_manager_unittest.cc
@@ -65,11 +65,10 @@
 
 #if defined(OS_CHROMEOS)
   // The resource is a component resource.
-  ComponentExtensionResourceInfo resource_info;
+  int resource_id = 0;
   ASSERT_TRUE(resource_manager->IsComponentExtensionResource(
-      extension->path(), resource.relative_path(), &resource_info));
-  ASSERT_EQ(IDR_FILE_MANAGER_ICON_16, resource_info.resource_id);
-  EXPECT_FALSE(resource_info.gzipped);
+      extension->path(), resource.relative_path(), &resource_id));
+  ASSERT_EQ(IDR_FILE_MANAGER_ICON_16, resource_id);
 #endif
 }
 
diff --git a/chrome/browser/extensions/chrome_extensions_browser_client.cc b/chrome/browser/extensions/chrome_extensions_browser_client.cc
index d717bc7..a483305 100644
--- a/chrome/browser/extensions/chrome_extensions_browser_client.cc
+++ b/chrome/browser/extensions/chrome_extensions_browser_client.cc
@@ -201,21 +201,21 @@
 base::FilePath ChromeExtensionsBrowserClient::GetBundleResourcePath(
     const network::ResourceRequest& request,
     const base::FilePath& extension_resources_path,
-    ComponentExtensionResourceInfo* resource_info) const {
+    int* resource_id) const {
   return chrome_url_request_util::GetBundleResourcePath(
-      request, extension_resources_path, resource_info);
+      request, extension_resources_path, resource_id);
 }
 
 void ChromeExtensionsBrowserClient::LoadResourceFromResourceBundle(
     const network::ResourceRequest& request,
     network::mojom::URLLoaderRequest loader,
     const base::FilePath& resource_relative_path,
-    const ComponentExtensionResourceInfo& resource_info,
+    int resource_id,
     const std::string& content_security_policy,
     network::mojom::URLLoaderClientPtr client,
     bool send_cors_header) {
   chrome_url_request_util::LoadResourceFromResourceBundle(
-      request, std::move(loader), resource_relative_path, resource_info,
+      request, std::move(loader), resource_relative_path, resource_id,
       content_security_policy, std::move(client), send_cors_header);
 }
 
diff --git a/chrome/browser/extensions/chrome_extensions_browser_client.h b/chrome/browser/extensions/chrome_extensions_browser_client.h
index 795b8b4..fd7e844 100644
--- a/chrome/browser/extensions/chrome_extensions_browser_client.h
+++ b/chrome/browser/extensions/chrome_extensions_browser_client.h
@@ -74,12 +74,12 @@
   base::FilePath GetBundleResourcePath(
       const network::ResourceRequest& request,
       const base::FilePath& extension_resources_path,
-      ComponentExtensionResourceInfo* resource_info) const override;
+      int* resource_id) const override;
   void LoadResourceFromResourceBundle(
       const network::ResourceRequest& request,
       network::mojom::URLLoaderRequest loader,
       const base::FilePath& resource_relative_path,
-      const ComponentExtensionResourceInfo& resource_info,
+      int resource_id,
       const std::string& content_security_policy,
       network::mojom::URLLoaderClientPtr client,
       bool send_cors_header) override;
diff --git a/chrome/browser/extensions/chrome_url_request_util.cc b/chrome/browser/extensions/chrome_url_request_util.cc
index 7e6616ea..c071a32 100644
--- a/chrome/browser/extensions/chrome_url_request_util.cc
+++ b/chrome/browser/extensions/chrome_url_request_util.cc
@@ -55,11 +55,11 @@
 }
 
 scoped_refptr<base::RefCountedMemory> GetResource(
-    const extensions::ComponentExtensionResourceInfo& resource_info,
+    int resource_id,
     const std::string& extension_id) {
   const ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
   scoped_refptr<base::RefCountedMemory> bytes =
-      rb.LoadDataResourceBytes(resource_info.resource_id);
+      rb.LoadDataResourceBytes(resource_id);
   auto* replacements =
       ExtensionsBrowserClient::Get()->GetComponentExtensionResourceManager()
           ? ExtensionsBrowserClient::Get()
@@ -67,7 +67,8 @@
                 ->GetTemplateReplacementsForExtension(extension_id)
           : nullptr;
 
-  if (!bytes->size() || (!replacements && !resource_info.gzipped)) {
+  bool is_gzipped = rb.IsGzipped(resource_id);
+  if (!bytes->size() || (!replacements && !is_gzipped)) {
     return bytes;
   }
 
@@ -77,7 +78,7 @@
   std::string temp_str;
 
   base::StringPiece source = input;
-  if (resource_info.gzipped) {
+  if (is_gzipped) {
     temp_str.resize(compression::GetUncompressedSize(input));
     source = temp_str;
     CHECK(compression::GzipUncompress(input, source));
@@ -96,16 +97,15 @@
 // by component extensions.
 class URLRequestResourceBundleJob : public net::URLRequestSimpleJob {
  public:
-  URLRequestResourceBundleJob(
-      net::URLRequest* request,
-      net::NetworkDelegate* network_delegate,
-      const base::FilePath& filename,
-      const extensions::ComponentExtensionResourceInfo& resource_info,
-      const std::string& content_security_policy,
-      bool send_cors_header)
+  URLRequestResourceBundleJob(net::URLRequest* request,
+                              net::NetworkDelegate* network_delegate,
+                              const base::FilePath& filename,
+                              int resource_id,
+                              const std::string& content_security_policy,
+                              bool send_cors_header)
       : net::URLRequestSimpleJob(request, network_delegate),
         filename_(filename),
-        resource_info_(resource_info),
+        resource_id_(resource_id),
         weak_factory_(this) {
     // Leave cache headers out of resource bundle requests.
     response_info_.headers = extensions::BuildHttpHeaders(
@@ -117,7 +117,7 @@
                         std::string* charset,
                         scoped_refptr<base::RefCountedMemory>* data,
                         net::CompletionOnceCallback callback) const override {
-    *data = GetResource(resource_info_, request()->url().host());
+    *data = GetResource(resource_id_, request()->url().host());
 
     // Add the Content-Length header now that we know the resource length.
     response_info_.headers->AddHeader(
@@ -162,8 +162,8 @@
   // We need the filename of the resource to determine the mime type.
   base::FilePath filename_;
 
-  // The resource to load.
-  const extensions::ComponentExtensionResourceInfo resource_info_;
+  // The resource bundle id to load.
+  int resource_id_;
 
   net::HttpResponseInfo response_info_;
 
@@ -174,21 +174,20 @@
 // component extensions.
 class ResourceBundleFileLoader : public network::mojom::URLLoader {
  public:
-  static void CreateAndStart(
-      const network::ResourceRequest& request,
-      network::mojom::URLLoaderRequest loader,
-      network::mojom::URLLoaderClientPtrInfo client_info,
-      const base::FilePath& filename,
-      const extensions::ComponentExtensionResourceInfo& resource_info,
-      const std::string& content_security_policy,
-      bool send_cors_header) {
+  static void CreateAndStart(const network::ResourceRequest& request,
+                             network::mojom::URLLoaderRequest loader,
+                             network::mojom::URLLoaderClientPtrInfo client_info,
+                             const base::FilePath& filename,
+                             int resource_id,
+                             const std::string& content_security_policy,
+                             bool send_cors_header) {
     // Owns itself. Will live as long as its URLLoader and URLLoaderClientPtr
     // bindings are alive - essentially until either the client gives up or all
     // file data has been sent to it.
     auto* bundle_loader =
         new ResourceBundleFileLoader(content_security_policy, send_cors_header);
     bundle_loader->Start(request, std::move(loader), std::move(client_info),
-                         filename, resource_info);
+                         filename, resource_id);
   }
 
   // mojom::URLLoader implementation:
@@ -218,14 +217,14 @@
              network::mojom::URLLoaderRequest loader,
              network::mojom::URLLoaderClientPtrInfo client_info,
              const base::FilePath& filename,
-             const extensions::ComponentExtensionResourceInfo& resource_info) {
+             int resource_id) {
     client_.Bind(std::move(client_info));
     binding_.Bind(std::move(loader));
     binding_.set_connection_error_handler(base::BindOnce(
         &ResourceBundleFileLoader::OnBindingError, base::Unretained(this)));
     client_.set_connection_error_handler(base::BindOnce(
         &ResourceBundleFileLoader::OnConnectionError, base::Unretained(this)));
-    auto data = GetResource(resource_info, request.url.host());
+    auto data = GetResource(resource_id, request.url.host());
 
     std::string* read_mime_type = new std::string;
     base::PostTaskWithTraitsAndReplyWithResult(
@@ -356,15 +355,15 @@
       resources_path.AppendRelativePath(directory_path, &relative_path)) {
     base::FilePath request_path =
         extensions::file_util::ExtensionURLToRelativeFilePath(request->url());
-    ComponentExtensionResourceInfo resource_info;
+    int resource_id = 0;
     if (ExtensionsBrowserClient::Get()
             ->GetComponentExtensionResourceManager()
             ->IsComponentExtensionResource(directory_path, request_path,
-                                           &resource_info)) {
+                                           &resource_id)) {
       relative_path = relative_path.Append(request_path);
       relative_path = relative_path.NormalizePathSeparators();
       return new URLRequestResourceBundleJob(
-          request, network_delegate, relative_path, resource_info,
+          request, network_delegate, relative_path, resource_id,
           content_security_policy, send_cors_header);
     }
   }
@@ -374,8 +373,8 @@
 base::FilePath GetBundleResourcePath(
     const network::ResourceRequest& request,
     const base::FilePath& extension_resources_path,
-    ComponentExtensionResourceInfo* resource_info) {
-  *resource_info = {};
+    int* resource_id) {
+  *resource_id = 0;
   // |chrome_resources_path| corresponds to src/chrome/browser/resources in
   // source tree.
   base::FilePath chrome_resources_path;
@@ -394,11 +393,10 @@
   if (!ExtensionsBrowserClient::Get()
            ->GetComponentExtensionResourceManager()
            ->IsComponentExtensionResource(extension_resources_path,
-                                          request_relative_path,
-                                          resource_info)) {
+                                          request_relative_path, resource_id)) {
     return base::FilePath();
   }
-  DCHECK_NE(0, resource_info->resource_id);
+  DCHECK_NE(0, *resource_id);
 
   return request_relative_path;
 }
@@ -407,14 +405,14 @@
     const network::ResourceRequest& request,
     network::mojom::URLLoaderRequest loader,
     const base::FilePath& resource_relative_path,
-    const ComponentExtensionResourceInfo& resource_info,
+    int resource_id,
     const std::string& content_security_policy,
     network::mojom::URLLoaderClientPtr client,
     bool send_cors_header) {
   DCHECK(!resource_relative_path.empty());
   ResourceBundleFileLoader::CreateAndStart(
       request, std::move(loader), client.PassInterface(),
-      resource_relative_path, resource_info, content_security_policy,
+      resource_relative_path, resource_id, content_security_policy,
       send_cors_header);
 }
 
diff --git a/chrome/browser/extensions/chrome_url_request_util.h b/chrome/browser/extensions/chrome_url_request_util.h
index 76ee93f..a61b87b 100644
--- a/chrome/browser/extensions/chrome_url_request_util.h
+++ b/chrome/browser/extensions/chrome_url_request_util.h
@@ -24,7 +24,6 @@
 }
 
 namespace extensions {
-struct ComponentExtensionResourceInfo;
 class Extension;
 class ExtensionSet;
 class ProcessMap;
@@ -59,10 +58,13 @@
 // Return the |request|'s resource path relative to the Chromium resources path
 // (chrome::DIR_RESOURCES) *if* the request refers to a resource within the
 // Chrome resource bundle. If not then the returned file path will be empty.
+// |resource_id| is used to check whether the requested resource is registered
+// as a component extensions resource, via
+// ChromeComponentExtensionResourceManager::IsComponentExtensionResource()
 base::FilePath GetBundleResourcePath(
     const network::ResourceRequest& request,
     const base::FilePath& extension_resources_path,
-    ComponentExtensionResourceInfo* resource_info);
+    int* resource_id);
 
 // Creates and starts a URLLoader for loading component extension resources out
 // of a Chrome resource bundle. This should only be called if
@@ -71,7 +73,7 @@
     const network::ResourceRequest& request,
     network::mojom::URLLoaderRequest loader,
     const base::FilePath& resource_relative_path,
-    const ComponentExtensionResourceInfo& resource_info,
+    int resource_id,
     const std::string& content_security_policy,
     network::mojom::URLLoaderClientPtr client,
     bool send_cors_header);
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index b0dbcc08..8c42325 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -371,6 +371,11 @@
     "expiry_milestone": 76
   },
   {
+    "name": "chrome-colors",
+    "owners": ["gayane"],
+    "expiry_milestone": 78
+  },
+  {
     "name": "clear-old-browsing-data",
     "owners": [ "dullweber" ],
     "expiry_milestone": 78
@@ -1000,11 +1005,6 @@
     "expiry_milestone": 80
   },
   {
-    "name": "enable-downloads-location-change",
-    // "owners": [ "your-team" ],
-    "expiry_milestone": 76
-  },
-  {
     "name": "enable-drive-fs",
     "owners": [ "sammc", "dats" ],
     "expiry_milestone": 76
@@ -1361,11 +1361,6 @@
     "expiry_milestone": 78
   },
   {
-    "name": "enable-ntlm-v2",
-    // "owners": [ "your-team" ],
-    "expiry_milestone": 76
-  },
-  {
     "name": "enable-ntp-button",
     "owners": [ "twellington" ],
     "expiry_milestone": 78
@@ -1381,16 +1376,6 @@
     "expiry_milestone": 76
   },
   {
-    "name": "enable-offline-auto-reload",
-    // "owners": [ "your-team" ],
-    "expiry_milestone": 76
-  },
-  {
-    "name": "enable-offline-auto-reload-visible-only",
-    // "owners": [ "your-team" ],
-    "expiry_milestone": 76
-  },
-  {
     "name": "enable-offline-previews",
     "owners": [ "//components/data_reduction_proxy/OWNERS" ],
     // This flag is used for frequent manual testing and should not be removed.
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 5b6c4fa..05d598f 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -1233,29 +1233,12 @@
 const char kUseMultiloginEndpointDescription[] =
     "Use Gaia OAuth multilogin for identity consistency.";
 
-#if defined(OS_POSIX)
-const char kNtlmV2EnabledName[] = "Enable NTLMv2 Authentication";
-const char kNtlmV2EnabledDescription[] =
-    "Enable NTLMv2 HTTP Authentication. This disables NTLMv1 support.";
-#endif
-
 const char kOfferStoreUnmaskedWalletCardsName[] =
     "Google Payments card saving checkbox";
 const char kOfferStoreUnmaskedWalletCardsDescription[] =
     "Show the checkbox to offer local saving of a credit card downloaded from "
     "the server.";
 
-const char kOfflineAutoReloadName[] = "Offline Auto-Reload Mode";
-const char kOfflineAutoReloadDescription[] =
-    "Pages that fail to load while the browser is offline will be "
-    "auto-reloaded when the browser is online again.";
-
-const char kOfflineAutoReloadVisibleOnlyName[] =
-    "Only Auto-Reload Visible Tabs";
-const char kOfflineAutoReloadVisibleOnlyDescription[] =
-    "Pages that fail to load while the browser is offline will only be "
-    "auto-reloaded if their tab is visible.";
-
 const char kOmniboxAlternateMatchDescriptionSeparatorName[] =
     "Omnibox Alternate Match Description Separator";
 const char kOmniboxAlternateMatchDescriptionSeparatorDescription[] =
@@ -2215,10 +2198,6 @@
 const char kContextualSearchUnityIntegrationDescription[] =
     "Enables integration of Tap to Search with Unified Consent.";
 
-const char kDownloadsLocationChangeName[] = "Enable downloads location change";
-const char kDownloadsLocationChangeDescription[] =
-    "Enable changing default downloads storage location on Android.";
-
 const char kDownloadProgressInfoBarName[] = "Enable download progress infobar";
 const char kDownloadProgressInfoBarDescription[] =
     "Enables an infobar notifying users about status of current downloads.";
@@ -2597,6 +2576,10 @@
 const char kAppManagementDescription[] =
     "Shows the new app management page at chrome://apps.";
 
+const char kChromeColorsName[] = "Chrome Colors menu";
+const char kChromeColorsDescription[] =
+    "Show Chrome Colors menu in the NTP customization menu.";
+
 const char kRemoveNtpFakeboxName[] = "Remove fakebox from the NTP";
 const char kRemoveNtpFakeboxDescription[] =
     "Do not show the fakebox on the New Tab page.";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index afd97365..f26f6374 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -763,20 +763,9 @@
 extern const char kUseMultiloginEndpointName[];
 extern const char kUseMultiloginEndpointDescription[];
 
-#if defined(OS_POSIX)
-extern const char kNtlmV2EnabledName[];
-extern const char kNtlmV2EnabledDescription[];
-#endif
-
 extern const char kOfferStoreUnmaskedWalletCardsName[];
 extern const char kOfferStoreUnmaskedWalletCardsDescription[];
 
-extern const char kOfflineAutoReloadName[];
-extern const char kOfflineAutoReloadDescription[];
-
-extern const char kOfflineAutoReloadVisibleOnlyName[];
-extern const char kOfflineAutoReloadVisibleOnlyDescription[];
-
 extern const char kOmniboxAlternateMatchDescriptionSeparatorName[];
 extern const char kOmniboxAlternateMatchDescriptionSeparatorDescription[];
 
@@ -1327,9 +1316,6 @@
 extern const char kDontPrefetchLibrariesName[];
 extern const char kDontPrefetchLibrariesDescription[];
 
-extern const char kDownloadsLocationChangeName[];
-extern const char kDownloadsLocationChangeDescription[];
-
 extern const char kDownloadProgressInfoBarName[];
 extern const char kDownloadProgressInfoBarDescription[];
 
@@ -1551,6 +1537,9 @@
 extern const char kAutofillDropdownLayoutName[];
 extern const char kAutofillDropdownLayoutDescription[];
 
+extern const char kChromeColorsName[];
+extern const char kChromeColorsDescription[];
+
 extern const char kRemoveNtpFakeboxName[];
 extern const char kRemoveNtpFakeboxDescription[];
 
diff --git a/chrome/browser/net/errorpage_browsertest.cc b/chrome/browser/net/errorpage_browsertest.cc
index c0a6e0c..4977414 100644
--- a/chrome/browser/net/errorpage_browsertest.cc
+++ b/chrome/browser/net/errorpage_browsertest.cc
@@ -39,7 +39,6 @@
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
-#include "components/error_page/common/error_page_switches.h"
 #include "components/google/core/common/google_util.h"
 #include "components/language/core/browser/pref_names.h"
 #include "components/policy/core/browser/browser_policy_connector.h"
@@ -936,7 +935,7 @@
 class ErrorPageAutoReloadTest : public InProcessBrowserTest {
  public:
   void SetUpCommandLine(base::CommandLine* command_line) override {
-    command_line->AppendSwitch(switches::kEnableOfflineAutoReload);
+    command_line->AppendSwitch(switches::kEnableAutoReload);
   }
 
   void TearDownOnMainThread() override { url_loader_interceptor_.reset(); }
diff --git a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc
index a343d611..4b9099a4 100644
--- a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc
@@ -570,29 +570,40 @@
           FrameData::InteractiveStatus::kPreInteractive);
       base::TimeDelta task_duration_post = ad_frame_data.GetInteractiveCpuUsage(
           FrameData::InteractiveStatus::kPostInteractive);
+      base::TimeDelta task_duration_total =
+          task_duration_pre + task_duration_post;
       if (total_duration.InMilliseconds() > 0) {
         ADS_HISTOGRAM("Cpu.AdFrames.PerFrame.PercentUsage.Unactivated",
                       UMA_HISTOGRAM_PERCENTAGE, visibility,
-                      GetCpuPercentage(task_duration_pre + task_duration_post,
-                                       total_duration));
+                      GetCpuPercentage(task_duration_total, total_duration));
+        ADS_HISTOGRAM("Cpu.AdFrames.PerFrame.TotalUsage.Unactivated",
+                      PAGE_LOAD_HISTOGRAM, visibility, task_duration_total);
       }
       if (pre_interactive_duration_.InMilliseconds() > 0) {
         ADS_HISTOGRAM(
             "Cpu.AdFrames.PerFrame.PercentUsage.Unactivated.PreInteractive",
             UMA_HISTOGRAM_PERCENTAGE, visibility,
             GetCpuPercentage(task_duration_pre, pre_interactive_duration_));
+        ADS_HISTOGRAM(
+            "Cpu.AdFrames.PerFrame.TotalUsage.Unactivated.PreInteractive",
+            PAGE_LOAD_HISTOGRAM, visibility, task_duration_pre);
       }
       if (post_interactive_duration.InMilliseconds() > 0) {
         ADS_HISTOGRAM(
             "Cpu.AdFrames.PerFrame.PercentUsage.Unactivated.PostInteractive",
             UMA_HISTOGRAM_PERCENTAGE, visibility,
             GetCpuPercentage(task_duration_post, post_interactive_duration));
+        ADS_HISTOGRAM(
+            "Cpu.AdFrames.PerFrame.TotalUsage.Unactivated.PostInteractive",
+            PAGE_LOAD_HISTOGRAM, visibility, task_duration_post);
       }
     } else {
       base::TimeDelta task_duration_pre = ad_frame_data.GetActivationCpuUsage(
           FrameData::UserActivationStatus::kNoActivation);
       base::TimeDelta task_duration_post = ad_frame_data.GetActivationCpuUsage(
           FrameData::UserActivationStatus::kReceivedActivation);
+      base::TimeDelta task_duration_total =
+          task_duration_pre + task_duration_post;
       base::TimeDelta pre_activation_duration =
           ad_frame_data.pre_activation_foreground_duration();
       base::TimeDelta post_activation_duration =
@@ -600,20 +611,27 @@
       if (total_duration.InMilliseconds() > 0) {
         ADS_HISTOGRAM("Cpu.AdFrames.PerFrame.PercentUsage.Activated",
                       UMA_HISTOGRAM_PERCENTAGE, visibility,
-                      GetCpuPercentage(task_duration_pre + task_duration_post,
-                                       total_duration));
+                      GetCpuPercentage(task_duration_total, total_duration));
+        ADS_HISTOGRAM("Cpu.AdFrames.PerFrame.TotalUsage.Activated",
+                      PAGE_LOAD_HISTOGRAM, visibility, task_duration_total);
       }
       if (pre_activation_duration.InMilliseconds() > 0) {
         ADS_HISTOGRAM(
             "Cpu.AdFrames.PerFrame.PercentUsage.Activated.PreActivation",
             UMA_HISTOGRAM_PERCENTAGE, visibility,
             GetCpuPercentage(task_duration_pre, pre_activation_duration));
+        ADS_HISTOGRAM(
+            "Cpu.AdFrames.PerFrame.TotalUsage.Activated.PreActivation",
+            PAGE_LOAD_HISTOGRAM, visibility, task_duration_pre);
       }
       if (post_activation_duration.InMilliseconds() > 0) {
         ADS_HISTOGRAM(
             "Cpu.AdFrames.PerFrame.PercentUsage.Activated.PostActivation",
             UMA_HISTOGRAM_PERCENTAGE, visibility,
             GetCpuPercentage(task_duration_post, post_activation_duration));
+        ADS_HISTOGRAM(
+            "Cpu.AdFrames.PerFrame.TotalUsage.Activated.PostActivation",
+            PAGE_LOAD_HISTOGRAM, visibility, task_duration_post);
       }
     }
   }
@@ -634,23 +652,29 @@
   base::TimeDelta task_duration_post =
       aggregate_frame_data_->GetInteractiveCpuUsage(
           FrameData::InteractiveStatus::kPostInteractive);
+  base::TimeDelta task_duration_total = task_duration_pre + task_duration_post;
   if (total_duration.InMilliseconds() > 0) {
     ADS_HISTOGRAM("Cpu.FullPage.PercentUsage", UMA_HISTOGRAM_PERCENTAGE,
                   visibility,
-                  GetCpuPercentage(task_duration_pre + task_duration_post,
-                                   total_duration));
+                  GetCpuPercentage(task_duration_total, total_duration));
+    ADS_HISTOGRAM("Cpu.FullPage.TotalUsage", PAGE_LOAD_HISTOGRAM, visibility,
+                  task_duration_total);
   }
   if (pre_interactive_duration_.InMilliseconds() > 0) {
     ADS_HISTOGRAM(
         "Cpu.FullPage.PercentUsage.PreInteractive", UMA_HISTOGRAM_PERCENTAGE,
         visibility,
         GetCpuPercentage(task_duration_pre, pre_interactive_duration_));
+    ADS_HISTOGRAM("Cpu.FullPage.TotalUsage.PreInteractive", PAGE_LOAD_HISTOGRAM,
+                  visibility, task_duration_pre);
   }
   if (post_interactive_duration.InMilliseconds() > 0) {
     ADS_HISTOGRAM(
         "Cpu.FullPage.PercentUsage.PostInteractive", UMA_HISTOGRAM_PERCENTAGE,
         visibility,
         GetCpuPercentage(task_duration_post, post_interactive_duration));
+    ADS_HISTOGRAM("Cpu.FullPage.TotalUsage.PostInteractive",
+                  PAGE_LOAD_HISTOGRAM, visibility, task_duration_post);
   }
 }
 
diff --git a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc
index 614616ca..be7f104 100644
--- a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc
@@ -328,7 +328,51 @@
     clock_ = std::make_unique<base::SimpleTestTickClock>();
   }
 
+  // Given the prefix of the CPU histogram to check, either "Cpu.FullPage" or
+  // "Cpu.AdFrames.PerFrame", as well as the type, one of "" (for "FullPage"),
+  // "Activated", or "Unactivated", along with the total pre and post cpu time
+  // and total time, check all the relevant cpu histograms.
+  void CheckCpuHistograms(const std::string& prefix,
+                          std::string type,
+                          int pre_task_time,
+                          int pre_time,
+                          int post_task_time,
+                          int post_time) {
+    int total_task_time = pre_task_time + post_task_time;
+    int total_time = pre_time + post_time;
+    std::string suffix = type == "Activated" ? "Activation" : "Interactive";
+    type = type.empty() ? "" : "." + type;
+
+    CheckSpecificCpuHistogram(
+        SuffixedHistogram(prefix + ".PercentUsage" + type),
+        SuffixedHistogram(prefix + ".TotalUsage" + type), total_task_time,
+        total_time);
+    CheckSpecificCpuHistogram(
+        SuffixedHistogram(prefix + ".PercentUsage" + type + ".Pre" + suffix),
+        SuffixedHistogram(prefix + ".TotalUsage" + type + ".Pre" + suffix),
+        pre_task_time, pre_time);
+    CheckSpecificCpuHistogram(
+        SuffixedHistogram(prefix + ".PercentUsage" + type + ".Post" + suffix),
+        SuffixedHistogram(prefix + ".TotalUsage" + type + ".Post" + suffix),
+        post_task_time, post_time);
+  }
+
  private:
+  void CheckSpecificCpuHistogram(std::string percent_histogram,
+                                 std::string total_histogram,
+                                 int total_task_time,
+                                 int total_time) {
+    if (total_time) {
+      histogram_tester().ExpectUniqueSample(
+          percent_histogram, 100 * total_task_time / total_time, 1);
+      histogram_tester().ExpectUniqueSample(total_histogram, total_task_time,
+                                            1);
+    } else {
+      histogram_tester().ExpectTotalCount(percent_histogram, 0);
+      histogram_tester().ExpectTotalCount(total_histogram, 0);
+    }
+  }
+
   void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) {
     auto observer = std::make_unique<AdsPageLoadMetricsObserver>();
     ads_observer_ = observer.get();
@@ -833,33 +877,14 @@
   AdvancePageDuration(base::TimeDelta::FromMilliseconds(2000));
   NavigateFrame(kNonAdUrl, main_frame);
 
-  // Overall usage on page for 3 categories:
-  histogram_tester().ExpectUniqueSample(
-      SuffixedHistogram("Cpu.FullPage.PercentUsage"),
-      100 * (500 + 500 + 1000 + 500) / 4000 /*=62%*/, 1);
-  histogram_tester().ExpectUniqueSample(
-      SuffixedHistogram("Cpu.FullPage.PercentUsage.PreInteractive"),
-      100 * (500 + 500) / 2000 /*=50%*/, 1);
-  histogram_tester().ExpectUniqueSample(
-      SuffixedHistogram("Cpu.FullPage.PercentUsage.PostInteractive"),
-      100 * (1000 + 500) / 2000 /*=75%*/, 1);
-
-  // Make sure there are no activated numbers reported.
-  histogram_tester().ExpectTotalCount(
-      SuffixedHistogram("Cpu.AdFrames.PerFrame.PercentUsage.Activated"), 0);
-
-  // Usage for ad frame on page for 3 categories:
-  histogram_tester().ExpectUniqueSample(
-      SuffixedHistogram("Cpu.AdFrames.PerFrame.PercentUsage.Unactivated"),
-      100 * (500 + 1000) / 4000 /*=37%*/, 1);
-  histogram_tester().ExpectUniqueSample(
-      SuffixedHistogram(
-          "Cpu.AdFrames.PerFrame.PercentUsage.Unactivated.PreInteractive"),
-      100 * (500) / 2000 /*=25%*/, 1);
-  histogram_tester().ExpectUniqueSample(
-      SuffixedHistogram(
-          "Cpu.AdFrames.PerFrame.PercentUsage.Unactivated.PostInteractive"),
-      100 * (1000) / 2000 /*=50%*/, 1);
+  // Check the cpu histograms.
+  CheckCpuHistograms("Cpu.FullPage", "", /*pre_tasks=*/500 + 500,
+                     /*pre_time=*/2000, /*post_tasks=*/1000 + 500,
+                     /*post_time=*/2000);
+  CheckCpuHistograms("Cpu.AdFrames.PerFrame", "Activated", 0, 0, 0, 0);
+  CheckCpuHistograms("Cpu.AdFrames.PerFrame", "Unactivated", /*pre_tasks=*/500,
+                     /*pre_time=*/2000, /*post_tasks=*/1000,
+                     /*post_time=*/2000);
 }
 
 TEST_F(AdsPageLoadMetricsObserverTest,
@@ -895,33 +920,14 @@
   AdvancePageDuration(base::TimeDelta::FromMilliseconds(500));
   NavigateFrame(kNonAdUrl, main_frame);
 
-  // Overall usage on page for 3 categories:
-  histogram_tester().ExpectUniqueSample(
-      SuffixedHistogram("Cpu.FullPage.PercentUsage"),
-      100 * (500 + 500 + 1000) / 3500 /*=57%*/, 1);
-  histogram_tester().ExpectUniqueSample(
-      SuffixedHistogram("Cpu.FullPage.PercentUsage.PreInteractive"),
-      100 * (500 + 500) / 2000 /*=50%*/, 1);
-  histogram_tester().ExpectUniqueSample(
-      SuffixedHistogram("Cpu.FullPage.PercentUsage.PostInteractive"),
-      100 * (1000) / 1500 /*=66%*/, 1);
-
-  // Make sure there are no activated numbers reported.
-  histogram_tester().ExpectTotalCount(
-      SuffixedHistogram("Cpu.AdFrames.PerFrame.PercentUsage.Activated"), 0);
-
-  // Usage for ad frame on page for 3 categories:
-  histogram_tester().ExpectUniqueSample(
-      SuffixedHistogram("Cpu.AdFrames.PerFrame.PercentUsage.Unactivated"),
-      100 * (500 + 1000) / 3500 /*=42%*/, 1);
-  histogram_tester().ExpectUniqueSample(
-      SuffixedHistogram(
-          "Cpu.AdFrames.PerFrame.PercentUsage.Unactivated.PreInteractive"),
-      100 * (500) / 2000 /*=25%*/, 1);
-  histogram_tester().ExpectUniqueSample(
-      SuffixedHistogram(
-          "Cpu.AdFrames.PerFrame.PercentUsage.Unactivated.PostInteractive"),
-      100 * (1000) / 1500 /*=66%*/, 1);
+  // Check the cpu histograms.
+  CheckCpuHistograms("Cpu.FullPage", "", /*pre_tasks=*/500 + 500,
+                     /*pre_time=*/2000, /*post_tasks=*/1000,
+                     /*post_time=*/1500);
+  CheckCpuHistograms("Cpu.AdFrames.PerFrame", "Activated", 0, 0, 0, 0);
+  CheckCpuHistograms("Cpu.AdFrames.PerFrame", "Unactivated", /*pre_tasks=*/500,
+                     /*pre_time=*/2000, /*post_tasks=*/1000,
+                     /*post_time=*/1500);
 }
 
 TEST_F(AdsPageLoadMetricsObserverTest, TestCpuTimingMetricsOnActivation) {
@@ -959,33 +965,15 @@
   AdvancePageDuration(base::TimeDelta::FromMilliseconds(1500));
   NavigateFrame(kNonAdUrl, main_frame);
 
-  // Overall usage on page for 3 categories:
-  histogram_tester().ExpectUniqueSample(
-      SuffixedHistogram("Cpu.FullPage.PercentUsage"),
-      100 * (500 + 500 + 1000 + 500) / 4000 /*=62%*/, 1);
-  histogram_tester().ExpectUniqueSample(
-      SuffixedHistogram("Cpu.FullPage.PercentUsage.PreInteractive"),
-      100 * (500 + 500) / 2000 /*=50%*/, 1);
-  histogram_tester().ExpectUniqueSample(
-      SuffixedHistogram("Cpu.FullPage.PercentUsage.PostInteractive"),
-      100 * (1000 + 500) / 2000 /*=75%*/, 1);
-
-  // Make sure there are no unactivated numbers reported.
-  histogram_tester().ExpectTotalCount(
-      SuffixedHistogram("Cpu.AdFrames.PerFrame.PercentUsage.Unactivated"), 0);
-
-  // Usage for ad frame on page for 3 categories:
-  histogram_tester().ExpectUniqueSample(
-      SuffixedHistogram("Cpu.AdFrames.PerFrame.PercentUsage.Activated"),
-      100 * (500 + 500 + 500) / 4000 /*=37%*/, 1);
-  histogram_tester().ExpectUniqueSample(
-      SuffixedHistogram(
-          "Cpu.AdFrames.PerFrame.PercentUsage.Activated.PreActivation"),
-      100 * (500 + 500) / 2500 /*=40%*/, 1);
-  histogram_tester().ExpectUniqueSample(
-      SuffixedHistogram(
-          "Cpu.AdFrames.PerFrame.PercentUsage.Activated.PostActivation"),
-      100 * (500) / 1500 /*=33%*/, 1);
+  // Check the cpu histograms.
+  CheckCpuHistograms("Cpu.FullPage", "", /*pre_tasks=*/500 + 500,
+                     /*pre_time=*/2000, /*post_tasks=*/1000 + 500,
+                     /*post_time=*/2000);
+  CheckCpuHistograms("Cpu.AdFrames.PerFrame", "Unactivated", 0, 0, 0, 0);
+  CheckCpuHistograms("Cpu.AdFrames.PerFrame", "Activated",
+                     /*pre_tasks=*/500 + 500, /*pre_time=*/2500,
+                     /*post_tasks=*/500,
+                     /*post_time=*/1500);
 }
 
 TEST_F(AdsPageLoadMetricsObserverTest, TestNoReportingWhenAlwaysBackgrounded) {
@@ -1020,12 +1008,9 @@
   NavigateFrame(kNonAdUrl, main_frame);
 
   // Ensure that all metrics are zero.
-  histogram_tester().ExpectTotalCount(
-      SuffixedHistogram("Cpu.FullPage.PercentUsage"), 0);
-  histogram_tester().ExpectTotalCount(
-      SuffixedHistogram("Cpu.AdFrames.PerFrame.PercentUsage.Unactivated"), 0);
-  histogram_tester().ExpectTotalCount(
-      SuffixedHistogram("Cpu.AdFrames.PerFrame.PercentUsage.Activated"), 0);
+  CheckCpuHistograms("Cpu.FullPage", "", 0, 0, 0, 0);
+  CheckCpuHistograms("Cpu.AdFrames.PerFrame", "Unactivated", 0, 0, 0, 0);
+  CheckCpuHistograms("Cpu.AdFrames.PerFrame", "Activated", 0, 0, 0, 0);
 }
 
 TEST_F(AdsPageLoadMetricsObserverTest, TestCpuTimingMetricsNoInteractive) {
@@ -1046,31 +1031,12 @@
   AdvancePageDuration(base::TimeDelta::FromMilliseconds(2000));
   NavigateFrame(kNonAdUrl, main_frame);
 
-  // Overall usage on page for 3 categories:
-  histogram_tester().ExpectUniqueSample(
-      SuffixedHistogram("Cpu.FullPage.PercentUsage"),
-      100 * (500 + 500) / 2000 /*=50%*/, 1);
-  histogram_tester().ExpectUniqueSample(
-      SuffixedHistogram("Cpu.FullPage.PercentUsage.PreInteractive"),
-      100 * (500 + 500) / 2000 /*=50%*/, 1);
-  histogram_tester().ExpectTotalCount(
-      SuffixedHistogram("Cpu.FullPage.PercentUsage.PostInteractive"), 0);
-
-  // Make sure there are no activated numbers reported.
-  histogram_tester().ExpectTotalCount(
-      SuffixedHistogram("Cpu.AdFrames.PerFrame.PercentUsage.Activated"), 0);
-
-  // Usage for ad frame on page for 3 categories:
-  histogram_tester().ExpectUniqueSample(
-      SuffixedHistogram("Cpu.AdFrames.PerFrame.PercentUsage.Unactivated"),
-      100 * (500) / 2000 /*=25%*/, 1);
-  histogram_tester().ExpectUniqueSample(
-      SuffixedHistogram(
-          "Cpu.AdFrames.PerFrame.PercentUsage.Unactivated.PreInteractive"),
-      100 * (500) / 2000 /*=25%*/, 1);
-  histogram_tester().ExpectTotalCount(
-      SuffixedHistogram(
-          "Cpu.AdFrames.PerFrame.PercentUsage.Unactivated.PostInteractive"), 0);
+  // Check the cpu histograms.
+  CheckCpuHistograms("Cpu.FullPage", "", /*pre_tasks=*/500 + 500,
+                     /*pre_time=*/2000, /*post_tasks=*/0, /*post_time=*/0);
+  CheckCpuHistograms("Cpu.AdFrames.PerFrame", "Activated", 0, 0, 0, 0);
+  CheckCpuHistograms("Cpu.AdFrames.PerFrame", "Unactivated", /*pre_tasks=*/500,
+                     /*pre_time=*/2000, /*post_tasks=*/0, /*post_time=*/0);
 }
 
 TEST_F(AdsPageLoadMetricsObserverTest, TestCpuTimingMetricsShortTimeframes) {
@@ -1101,10 +1067,7 @@
   NavigateFrame(kNonAdUrl, main_frame);
 
   // Make sure there are no numbers reported, as the timeframes are too short.
-  histogram_tester().ExpectTotalCount(
-      SuffixedHistogram("Cpu.AdFrames.PerFrame.PercentUsage.Activated"), 0);
-  histogram_tester().ExpectTotalCount(
-      SuffixedHistogram("Cpu.AdFrames.PerFrame.PercentUsage.Unctivated"), 0);
-  histogram_tester().ExpectTotalCount(
-      SuffixedHistogram("Cpu.FullPage.PercentUsage"), 0);
+  CheckCpuHistograms("Cpu.FullPage", "", 0, 0, 0, 0);
+  CheckCpuHistograms("Cpu.AdFrames.PerFrame", "Activated", 0, 0, 0, 0);
+  CheckCpuHistograms("Cpu.AdFrames.PerFrame", "Unactivated", 0, 0, 0, 0);
 }
diff --git a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc
index b3755a3..5f2b182 100644
--- a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc
@@ -9,6 +9,7 @@
 #include <memory>
 #include <utility>
 
+#include "base/feature_list.h"
 #include "base/metrics/histogram_macros.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/page_load_metrics/observers/largest_contentful_paint_handler.h"
@@ -16,6 +17,7 @@
 #include "content/public/common/process_type.h"
 #include "net/http/http_response_headers.h"
 #include "ui/base/page_transition_types.h"
+#include "ui/events/blink/blink_features.h"
 
 namespace {
 // TODO(bmcquade): If other observers want to log histograms based on load type,
@@ -107,6 +109,14 @@
     "PageLoad.InteractiveTiming.FirstInputDelay3";
 const char kHistogramFirstInputTimestamp[] =
     "PageLoad.InteractiveTiming.FirstInputTimestamp3";
+const char kHistogramFirstInputDelay4[] =
+    "PageLoad.InteractiveTiming.FirstInputDelay4";
+const char kHistogramFirstInputTimestamp4[] =
+    "PageLoad.InteractiveTiming.FirstInputTimestamp4";
+const char kHistogramFirstInputDelaySkipFilteringComparison[] =
+    "PageLoad.InteractiveTiming.FirstInputDelay.SkipFilteringComparison";
+const char kHistogramFirstInputTimestampSkipFilteringComparison[] =
+    "PageLoad.InteractiveTiming.FirstInputTimestamp.SkipFilteringComparison";
 const char kHistogramLongestInputDelay[] =
     "PageLoad.InteractiveTiming.LongestInputDelay3";
 const char kHistogramLongestInputTimestamp[] =
@@ -566,13 +576,42 @@
 
   // Input delay will often be ~0, and will only be > 10 seconds very
   // rarely. Capture the range from 1ms to 60s.
+  // While the SkipTouchEventFilter experiment is running, always record
+  // first input metrics with the name "SkipFilteringComparison" so that
+  // we can compare with it on/off.
   UMA_HISTOGRAM_CUSTOM_TIMES(
-      internal::kHistogramFirstInputDelay,
+      internal::kHistogramFirstInputDelaySkipFilteringComparison,
       timing.interactive_timing->first_input_delay.value(),
       base::TimeDelta::FromMilliseconds(1), base::TimeDelta::FromSeconds(60),
       50);
-  PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstInputTimestamp,
-                      timing.interactive_timing->first_input_timestamp.value());
+  PAGE_LOAD_HISTOGRAM(
+      internal::kHistogramFirstInputTimestampSkipFilteringComparison,
+      timing.interactive_timing->first_input_timestamp.value());
+  if (base::FeatureList::IsEnabled(features::kSkipTouchEventFilter)) {
+    // This experiment will change the FID and first input metric by
+    // changing the timestamp on pointerdown events on mobile pages with no
+    // pointer event handlers. If it is ramped up to 100% to launch, we need
+    // to update the metric name (v3->v4).
+    UMA_HISTOGRAM_CUSTOM_TIMES(
+        internal::kHistogramFirstInputDelay4,
+        timing.interactive_timing->first_input_delay.value(),
+        base::TimeDelta::FromMilliseconds(1), base::TimeDelta::FromSeconds(60),
+        50);
+    PAGE_LOAD_HISTOGRAM(
+        internal::kHistogramFirstInputTimestamp4,
+        timing.interactive_timing->first_input_timestamp.value());
+  } else {
+    // If the SkipTouchEventFilter experiment does not launch, we want to
+    // continue reporting first input events under the current name.
+    UMA_HISTOGRAM_CUSTOM_TIMES(
+        internal::kHistogramFirstInputDelay,
+        timing.interactive_timing->first_input_delay.value(),
+        base::TimeDelta::FromMilliseconds(1), base::TimeDelta::FromSeconds(60),
+        50);
+    PAGE_LOAD_HISTOGRAM(
+        internal::kHistogramFirstInputTimestamp,
+        timing.interactive_timing->first_input_timestamp.value());
+  }
 }
 
 void CorePageLoadMetricsObserver::OnParseStart(
diff --git a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.h
index 9e77820..3973a52 100644
--- a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.h
@@ -18,6 +18,10 @@
 extern const char kHistogramFirstLayout[];
 extern const char kHistogramFirstInputDelay[];
 extern const char kHistogramFirstInputTimestamp[];
+extern const char kHistogramFirstInputDelaySkipFilteringComparison[];
+extern const char kHistogramFirstInputTimestampSkipFilteringComparison[];
+extern const char kHistogramFirstInputDelay4[];
+extern const char kHistogramFirstInputTimestamp4[];
 extern const char kHistogramLongestInputDelay[];
 extern const char kHistogramLongestInputTimestamp[];
 extern const char kHistogramFirstPaint[];
diff --git a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc
index 3c013a4f..0ab8c00 100644
--- a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc
@@ -8,6 +8,7 @@
 #include <memory>
 #include <vector>
 
+#include "base/feature_list.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/engagement/site_engagement_service.h"
 #include "chrome/browser/page_load_metrics/observers/largest_contentful_paint_handler.h"
@@ -28,6 +29,7 @@
 #include "services/metrics/public/cpp/ukm_recorder.h"
 #include "services/network/public/cpp/network_quality_tracker.h"
 #include "third_party/metrics_proto/system_profile.pb.h"
+#include "ui/events/blink/blink_features.h"
 
 #if BUILDFLAG(ENABLE_OFFLINE_PAGES)
 #include "chrome/browser/offline_pages/offline_page_tab_helper.h"
@@ -350,14 +352,40 @@
   if (timing.interactive_timing->first_input_delay) {
     base::TimeDelta first_input_delay =
         timing.interactive_timing->first_input_delay.value();
-    builder.SetInteractiveTiming_FirstInputDelay3(
+    builder.SetInteractiveTiming_FirstInputDelay_SkipFilteringComparison(
         first_input_delay.InMilliseconds());
+    if (base::FeatureList::IsEnabled(features::kSkipTouchEventFilter)) {
+      // This experiment will change the FID and first input metric by
+      // changing the timestamp on pointerdown events on mobile pages with no
+      // pointer event handlers. If it is ramped up to 100% to launch, we need
+      // to update the metric name (v3->v4).
+      builder.SetInteractiveTiming_FirstInputDelay4(
+          first_input_delay.InMilliseconds());
+    } else {
+      // If the SkipTouchEventFilter experiment does not launch, we want to
+      // continue reporting first input events under the current name.
+      builder.SetInteractiveTiming_FirstInputDelay3(
+          first_input_delay.InMilliseconds());
+    }
   }
   if (timing.interactive_timing->first_input_timestamp) {
     base::TimeDelta first_input_timestamp =
         timing.interactive_timing->first_input_timestamp.value();
-    builder.SetInteractiveTiming_FirstInputTimestamp3(
+    builder.SetInteractiveTiming_FirstInputTimestamp_SkipFilteringComparison(
         first_input_timestamp.InMilliseconds());
+    if (base::FeatureList::IsEnabled(features::kSkipTouchEventFilter)) {
+      // This experiment will change the FID and first input metric by
+      // changing the timestamp on pointerdown events on mobile pages with no
+      // pointer event handlers. If it is ramped up to 100% to launch, we need
+      // to update the metric name (v3->v4).
+      builder.SetInteractiveTiming_FirstInputTimestamp4(
+          first_input_timestamp.InMilliseconds());
+    } else {
+      // If the SkipTouchEventFilter experiment does not launch, we want to
+      // continue reporting first input events under the current name.
+      builder.SetInteractiveTiming_FirstInputTimestamp3(
+          first_input_timestamp.InMilliseconds());
+    }
   }
 
   if (timing.interactive_timing->longest_input_delay) {
diff --git a/chrome/browser/password_manager/chrome_password_manager_client.cc b/chrome/browser/password_manager/chrome_password_manager_client.cc
index 469ceb9ec..9f1622e2 100644
--- a/chrome/browser/password_manager/chrome_password_manager_client.cc
+++ b/chrome/browser/password_manager/chrome_password_manager_client.cc
@@ -1020,14 +1020,23 @@
 }
 
 void ChromePasswordManagerClient::FocusedInputChanged(
-    const url::Origin& last_committed_origin,
+    password_manager::PasswordManagerDriver* driver,
     bool is_fillable,
     bool is_password_field) {
 #if defined(OS_ANDROID)
   if (PasswordAccessoryController::AllowedForWebContents(web_contents())) {
+    bool is_manual_generation_available =
+        password_manager_util::ManualPasswordGenerationEnabled(driver);
+
+    password_manager::ContentPasswordManagerDriver* content_driver =
+        static_cast<password_manager::ContentPasswordManagerDriver*>(driver);
+    url::Origin last_committed_origin =
+        content_driver->render_frame_host()->GetLastCommittedOrigin();
+
     PasswordAccessoryController::GetOrCreate(web_contents())
         ->RefreshSuggestionsForField(last_committed_origin, is_fillable,
-                                     is_password_field);
+                                     is_password_field,
+                                     is_manual_generation_available);
   }
 #endif  // defined(OS_ANDROID)
 }
diff --git a/chrome/browser/password_manager/chrome_password_manager_client.h b/chrome/browser/password_manager/chrome_password_manager_client.h
index 8e459461..9839a03 100644
--- a/chrome/browser/password_manager/chrome_password_manager_client.h
+++ b/chrome/browser/password_manager/chrome_password_manager_client.h
@@ -72,7 +72,7 @@
       bool has_generated_password,
       bool is_update) override;
   void HideManualFallbackForSaving() override;
-  void FocusedInputChanged(const url::Origin& last_committed_origin,
+  void FocusedInputChanged(password_manager::PasswordManagerDriver* driver,
                            bool is_fillable,
                            bool is_password_field) override;
   bool PromptUserToChooseCredentials(
diff --git a/chrome/browser/password_manager/native_backend_kwallet_x.cc b/chrome/browser/password_manager/native_backend_kwallet_x.cc
index 712c06c..ec4ade5 100644
--- a/chrome/browser/password_manager/native_backend_kwallet_x.cc
+++ b/chrome/browser/password_manager/native_backend_kwallet_x.cc
@@ -413,7 +413,7 @@
   auto it = std::partition(
       forms.begin(), forms.end(),
       [&form](const std::unique_ptr<PasswordForm>& current_form) {
-        return !ArePasswordFormUniqueKeyEqual(form, *current_form);
+        return !ArePasswordFormUniqueKeysEqual(form, *current_form);
       });
   password_manager::PasswordStoreChangeList changes;
   if (it != forms.end()) {
@@ -449,7 +449,7 @@
   auto it = std::partition(
       forms.begin(), forms.end(),
       [&form](const std::unique_ptr<PasswordForm>& current_form) {
-        return !ArePasswordFormUniqueKeyEqual(form, *current_form);
+        return !ArePasswordFormUniqueKeysEqual(form, *current_form);
       });
 
   if (it == forms.end())
@@ -481,7 +481,7 @@
   std::vector<std::unique_ptr<PasswordForm>> kept_forms;
   kept_forms.reserve(all_forms.size());
   for (std::unique_ptr<PasswordForm>& saved_form : all_forms) {
-    if (!ArePasswordFormUniqueKeyEqual(form, *saved_form)) {
+    if (!ArePasswordFormUniqueKeysEqual(form, *saved_form)) {
       kept_forms.push_back(std::move(saved_form));
     }
   }
diff --git a/chrome/browser/password_manager/password_accessory_controller.h b/chrome/browser/password_manager/password_accessory_controller.h
index 29792ff..d063671e 100644
--- a/chrome/browser/password_manager/password_accessory_controller.h
+++ b/chrome/browser/password_manager/password_accessory_controller.h
@@ -72,9 +72,11 @@
   // Makes sure, that all shown suggestions are appropriate for the currently
   // focused field and for fields that lost the focus. If a field lost focus,
   // |is_fillable| will be false.
-  virtual void RefreshSuggestionsForField(const url::Origin& origin,
-                                          bool is_fillable,
-                                          bool is_password_field) = 0;
+  virtual void RefreshSuggestionsForField(
+      const url::Origin& origin,
+      bool is_fillable,
+      bool is_password_field,
+      bool is_manual_generation_available) = 0;
 
   // Reacts to a navigation on the main frame, e.g. by clearing caches.
   virtual void DidNavigateMainFrame() = 0;
diff --git a/chrome/browser/password_manager/password_accessory_controller_impl.cc b/chrome/browser/password_manager/password_accessory_controller_impl.cc
index d312374c..679ce63 100644
--- a/chrome/browser/password_manager/password_accessory_controller_impl.cc
+++ b/chrome/browser/password_manager/password_accessory_controller_impl.cc
@@ -26,6 +26,7 @@
 #include "components/password_manager/content/browser/content_password_manager_driver.h"
 #include "components/password_manager/content/browser/content_password_manager_driver_factory.h"
 #include "components/password_manager/core/browser/password_manager_driver.h"
+#include "components/password_manager/core/browser/password_manager_util.h"
 #include "components/password_manager/core/common/password_manager_features.h"
 #include "components/url_formatter/elide_url.h"
 #include "content/public/browser/web_contents.h"
@@ -181,8 +182,10 @@
 void PasswordAccessoryControllerImpl::RefreshSuggestionsForField(
     const url::Origin& origin,
     bool is_fillable,
-    bool is_password_field) {
+    bool is_password_field,
+    bool is_manual_generation_available) {
   std::vector<UserInfo> info_to_add;
+  std::vector<FooterCommand> footer_commands_to_add;
 
   if (is_fillable) {
     const std::vector<PasswordAccessorySuggestion> suggestions =
@@ -192,16 +195,27 @@
                    [is_password_field](const auto& x) {
                      return Translate(is_password_field, x);
                    });
+
+    if (is_password_field && is_manual_generation_available) {
+      base::string16 generate_password_title = l10n_util::GetStringUTF16(
+          IDS_PASSWORD_MANAGER_ACCESSORY_GENERATE_PASSWORD_BUTTON_TITLE);
+      footer_commands_to_add.push_back(FooterCommand(generate_password_title));
+    }
   }
 
+  base::string16 manage_passwords_title = l10n_util::GetStringUTF16(
+      IDS_PASSWORD_MANAGER_ACCESSORY_ALL_PASSWORDS_LINK);
+  footer_commands_to_add.push_back(FooterCommand(manage_passwords_title));
+
   bool has_suggestions = !info_to_add.empty();
 
   GetManualFillingController()->RefreshSuggestionsForField(
-      is_fillable, autofill::CreateAccessorySheetData(
-                       GetTitle(has_suggestions, GetFocusedFrameOrigin()),
-                       std::move(info_to_add)));
+      is_fillable,
+      autofill::CreateAccessorySheetData(
+          GetTitle(has_suggestions, GetFocusedFrameOrigin()),
+          std::move(info_to_add), std::move(footer_commands_to_add)));
 
-  if (is_password_field) {
+  if (is_password_field && is_fillable) {
     GetManualFillingController()->ShowWhenKeyboardIsVisible(
         FillingSource::PASSWORD_FALLBACKS);
   } else {
diff --git a/chrome/browser/password_manager/password_accessory_controller_impl.h b/chrome/browser/password_manager/password_accessory_controller_impl.h
index 0db305a..a9e989f 100644
--- a/chrome/browser/password_manager/password_accessory_controller_impl.h
+++ b/chrome/browser/password_manager/password_accessory_controller_impl.h
@@ -69,7 +69,8 @@
   void OnFilledIntoFocusedField(autofill::FillingStatus status) override;
   void RefreshSuggestionsForField(const url::Origin& origin,
                                   bool is_fillable,
-                                  bool is_password_field) override;
+                                  bool is_password_field,
+                                  bool is_manual_generation_available) override;
   void DidNavigateMainFrame() override;
   void GetFavicon(
       int desired_size_in_pixel,
diff --git a/chrome/browser/password_manager/password_accessory_controller_impl_unittest.cc b/chrome/browser/password_manager/password_accessory_controller_impl_unittest.cc
index c4c212a..d69782f 100644
--- a/chrome/browser/password_manager/password_accessory_controller_impl_unittest.cc
+++ b/chrome/browser/password_manager/password_accessory_controller_impl_unittest.cc
@@ -143,6 +143,11 @@
       IDS_PASSWORD_MANAGER_ACCESSORY_ALL_PASSWORDS_LINK);
 }
 
+base::string16 generate_password_str() {
+  return l10n_util::GetStringUTF16(
+      IDS_PASSWORD_MANAGER_ACCESSORY_GENERATE_PASSWORD_BUTTON_TITLE);
+}
+
 // Creates a AccessorySheetDataBuilder object with a "Manage passwords..."
 // footer.
 AccessorySheetDataBuilder PasswordAccessorySheetDataBuilder(
@@ -262,7 +267,8 @@
   controller()->RefreshSuggestionsForField(
       url::Origin::Create(GURL(kExampleSite)),
       /*is_fillable=*/true,
-      /*is_password_field=*/false);
+      /*is_password_field=*/false,
+      /*is_manual_generation_available=*/false);
 }
 
 TEST_F(PasswordAccessoryControllerTest, HintsToEmptyUserNames) {
@@ -284,7 +290,8 @@
   controller()->RefreshSuggestionsForField(
       url::Origin::Create(GURL(kExampleSite)),
       /*is_fillable=*/true,
-      /*is_password_field=*/false);
+      /*is_password_field=*/false,
+      /*is_manual_generation_available=*/false);
 }
 
 TEST_F(PasswordAccessoryControllerTest, SortsAlphabeticalDuringTransform) {
@@ -324,7 +331,8 @@
   controller()->RefreshSuggestionsForField(
       url::Origin::Create(GURL(kExampleSite)),
       /*is_fillable=*/true,
-      /*is_password_field=*/false);
+      /*is_password_field=*/false,
+      /*is_manual_generation_available=*/false);
 }
 
 TEST_F(PasswordAccessoryControllerTest, RepeatsSuggestionsForSameFrame) {
@@ -348,7 +356,8 @@
   controller()->RefreshSuggestionsForField(
       url::Origin::Create(GURL(kExampleSite)),
       /*is_fillable=*/true,
-      /*is_password_field=*/false);
+      /*is_password_field=*/false,
+      /*is_manual_generation_available=*/false);
 }
 
 TEST_F(PasswordAccessoryControllerTest, ProvidesEmptySuggestionsMessage) {
@@ -365,7 +374,8 @@
   controller()->RefreshSuggestionsForField(
       url::Origin::Create(GURL(kExampleSite)),
       /*is_fillable=*/true,
-      /*is_password_field=*/false);
+      /*is_password_field=*/false,
+      /*is_manual_generation_available=*/false);
 }
 
 TEST_F(PasswordAccessoryControllerTest, OnFilledIntoFocusedField) {
@@ -403,7 +413,8 @@
   controller()->RefreshSuggestionsForField(
       url::Origin::Create(GURL(kExampleSite)),
       /*is_fillable=*/true,
-      /*is_password_field=*/false);
+      /*is_password_field=*/false,
+      /*is_manual_generation_available=*/false);
 
   // Pretend that we focus a password field now: By triggering a refresh with
   // |is_password_field| set to true, all suggestions should become interactive.
@@ -423,7 +434,8 @@
   controller()->RefreshSuggestionsForField(
       url::Origin::Create(GURL(kExampleSite)),
       /*is_fillable=*/true,
-      /*is_password_field=*/true);
+      /*is_password_field=*/true,
+      /*is_manual_generation_available=*/false);
 }
 
 TEST_F(PasswordAccessoryControllerTest, CachesIsReplacedByNewPasswords) {
@@ -445,7 +457,8 @@
   controller()->RefreshSuggestionsForField(
       url::Origin::Create(GURL(kExampleSite)),
       /*is_fillable=*/true,
-      /*is_password_field=*/false);
+      /*is_password_field=*/false,
+      /*is_manual_generation_available=*/false);
 
   controller()->SavePasswordsForOrigin({CreateEntry("Alf", "M3lm4k").first},
                                        url::Origin::Create(GURL(kExampleSite)));
@@ -465,7 +478,8 @@
   controller()->RefreshSuggestionsForField(
       url::Origin::Create(GURL(kExampleSite)),
       /*is_fillable=*/true,
-      /*is_password_field=*/false);
+      /*is_password_field=*/false,
+      /*is_manual_generation_available=*/false);
 }
 
 TEST_F(PasswordAccessoryControllerTest, UnfillableFieldClearsSuggestions) {
@@ -489,7 +503,8 @@
   controller()->RefreshSuggestionsForField(
       url::Origin::Create(GURL(kExampleSite)),
       /*is_fillable=*/true,
-      /*is_password_field=*/false);
+      /*is_password_field=*/false,
+      /*is_manual_generation_available=*/false);
 
   // Pretend that the focus was lost or moved to an unfillable field. Now, only
   // the empty state message should be sent.
@@ -504,7 +519,8 @@
   controller()->RefreshSuggestionsForField(
       url::Origin::Create(GURL(kExampleSite)),
       /*is_fillable=*/false,
-      /*is_password_field=*/false);  // Unused.
+      /*is_password_field=*/false,
+      /*is_manual_generation_available=*/false);
 }
 
 TEST_F(PasswordAccessoryControllerTest, NavigatingMainFrameClearsSuggestions) {
@@ -528,7 +544,8 @@
   controller()->RefreshSuggestionsForField(
       url::Origin::Create(GURL(kExampleSite)),
       /*is_fillable=*/true,
-      /*is_password_field=*/false);
+      /*is_password_field=*/false,
+      /*is_manual_generation_available=*/false);
 
   // Pretend that the focus was lost or moved to an unfillable field.
   NavigateAndCommit(GURL("https://random.other-site.org/"));
@@ -546,7 +563,8 @@
   controller()->RefreshSuggestionsForField(
       url::Origin::Create(GURL("https://random.other-site.org/")),
       /*is_fillable=*/true,
-      /*is_password_field=*/false);  // Unused.
+      /*is_password_field=*/false,
+      /*is_manual_generation_available=*/false);
 }
 
 TEST_F(PasswordAccessoryControllerTest, FetchFaviconForCurrentUrl) {
@@ -559,7 +577,8 @@
   controller()->RefreshSuggestionsForField(
       url::Origin::Create(GURL(kExampleSite)),
       /*is_fillable=*/true,
-      /*is_password_field=*/false);
+      /*is_password_field=*/false,
+      /*is_manual_generation_available=*/false);
 
   EXPECT_CALL(*favicon_service(), GetRawFaviconForPageURL(GURL(kExampleSite), _,
                                                           kIconSize, _, _, _))
@@ -579,7 +598,8 @@
   controller()->RefreshSuggestionsForField(
       url::Origin::Create(GURL(kExampleSite)),
       /*is_fillable=*/true,
-      /*is_password_field=*/false);
+      /*is_password_field=*/false,
+      /*is_manual_generation_available=*/false);
 
   EXPECT_CALL(*favicon_service(), GetRawFaviconForPageURL(GURL(kExampleSite), _,
                                                           kIconSize, _, _, _))
@@ -619,7 +639,8 @@
   controller()->RefreshSuggestionsForField(
       url::Origin::Create(GURL(kExampleSite)),
       /*is_fillable=*/true,
-      /*is_password_field=*/false);
+      /*is_password_field=*/false,
+      /*is_manual_generation_available=*/false);
 
   EXPECT_CALL(*favicon_service(), GetRawFaviconForPageURL(GURL(kExampleSite), _,
                                                           kIconSize, _, _, _))
@@ -647,7 +668,8 @@
               Hide(FillingSource::PASSWORD_FALLBACKS));
   controller()->RefreshSuggestionsForField(
       url::Origin::Create(GURL(kExampleSite)), /*is_fillable=*/true,
-      /*is_password_field=*/false);
+      /*is_password_field=*/false,
+      /*is_manual_generation_available=*/false);
 
   // The cache was cleared, so now the service has to be queried again.
   EXPECT_CALL(*favicon_service(), GetRawFaviconForPageURL(GURL(kExampleSite), _,
@@ -667,7 +689,7 @@
   EXPECT_CALL(mock_manual_filling_controller_,
               Hide(FillingSource::PASSWORD_FALLBACKS));
   controller()->RefreshSuggestionsForField(
-      url::Origin::Create(GURL(kExampleSite)), true, false);
+      url::Origin::Create(GURL(kExampleSite)), true, false, false);
 
   // Right after starting the favicon request for example.com, a navigation
   // changes the URL of the focused frame. Even if the request is completed,
@@ -689,7 +711,43 @@
   EXPECT_CALL(mock_manual_filling_controller_,
               Hide(FillingSource::PASSWORD_FALLBACKS));
   controller()->RefreshSuggestionsForField(
-      url::Origin::Create(GURL("https://other.frame.com/")), true, false);
+      url::Origin::Create(GURL("https://other.frame.com/")), true, false,
+      false);
 
   base::RunLoop().RunUntilIdle();
 }
+
+TEST_F(PasswordAccessoryControllerTest, AddsGenerationCommandWhenAvailable) {
+  controller()->SavePasswordsForOrigin({},
+                                       url::Origin::Create(GURL(kExampleSite)));
+  AccessorySheetDataBuilder data_builder(passwords_empty_str(kExampleDomain));
+  data_builder.AppendFooterCommand(generate_password_str())
+      .AppendFooterCommand(manage_passwords_str());
+  EXPECT_CALL(mock_manual_filling_controller_,
+              RefreshSuggestionsForField(
+                  /*is_fillable=*/true, data_builder.Build()));
+  EXPECT_CALL(mock_manual_filling_controller_,
+              ShowWhenKeyboardIsVisible(FillingSource::PASSWORD_FALLBACKS));
+  controller()->RefreshSuggestionsForField(
+      url::Origin::Create(GURL(kExampleSite)),
+      /*is_fillable=*/true,
+      /*is_password_field=*/true,
+      /*is_manual_generation_available=*/true);
+}
+
+TEST_F(PasswordAccessoryControllerTest, NoGenerationCommandIfNotPasswordField) {
+  controller()->SavePasswordsForOrigin({},
+                                       url::Origin::Create(GURL(kExampleSite)));
+  EXPECT_CALL(mock_manual_filling_controller_,
+              RefreshSuggestionsForField(
+                  /*is_fillable=*/true, PasswordAccessorySheetDataBuilder(
+                                            passwords_empty_str(kExampleDomain))
+                                            .Build()));
+  EXPECT_CALL(mock_manual_filling_controller_,
+              Hide(FillingSource::PASSWORD_FALLBACKS));
+  controller()->RefreshSuggestionsForField(
+      url::Origin::Create(GURL(kExampleSite)),
+      /*is_fillable=*/true,
+      /*is_password_field=*/false,
+      /*is_manual_generation_available=*/true);
+}
diff --git a/chrome/browser/password_manager/password_store_x_unittest.cc b/chrome/browser/password_manager/password_store_x_unittest.cc
index 945d39e..246bd5a 100644
--- a/chrome/browser/password_manager/password_store_x_unittest.cc
+++ b/chrome/browser/password_manager/password_store_x_unittest.cc
@@ -161,7 +161,7 @@
   bool UpdateLogin(const PasswordForm& form,
                    PasswordStoreChangeList* changes) override {
     for (size_t i = 0; i < all_forms_.size(); ++i) {
-      if (ArePasswordFormUniqueKeyEqual(all_forms_[i], form)) {
+      if (ArePasswordFormUniqueKeysEqual(all_forms_[i], form)) {
         all_forms_[i] = form;
         changes->push_back(
             PasswordStoreChange(PasswordStoreChange::UPDATE, form));
@@ -173,7 +173,7 @@
   bool RemoveLogin(const PasswordForm& form,
                    PasswordStoreChangeList* changes) override {
     for (size_t i = 0; i < all_forms_.size(); ++i) {
-      if (ArePasswordFormUniqueKeyEqual(all_forms_[i], form)) {
+      if (ArePasswordFormUniqueKeysEqual(all_forms_[i], form)) {
         changes->push_back(
             PasswordStoreChange(PasswordStoreChange::REMOVE, form));
         erase(i--);
diff --git a/chrome/browser/performance_manager/decorators/page_almost_idle_decorator_unittest.cc b/chrome/browser/performance_manager/decorators/page_almost_idle_decorator_unittest.cc
index 0c8ffc7..7f6bdf3 100644
--- a/chrome/browser/performance_manager/decorators/page_almost_idle_decorator_unittest.cc
+++ b/chrome/browser/performance_manager/decorators/page_almost_idle_decorator_unittest.cc
@@ -84,7 +84,7 @@
 
   // Mark the page as idling. It should transition from kLoading directly
   // to kLoadedAndIdling after this.
-  frame_node->SetNetworkAlmostIdle(true);
+  frame_node->SetNetworkAlmostIdle();
   proc_node->SetMainThreadTaskLoadIsLow(true);
   page_node->SetIsLoading(false);
   EXPECT_EQ(LIS::kLoadedAndIdling, page_data->load_idle_state_);
@@ -100,7 +100,7 @@
 
   // Go back to not idling. We should transition back to kLoadedNotIdling, and
   // a timer should still be running.
-  frame_node->SetNetworkAlmostIdle(false);
+  frame_node->OnNavigationCommitted(GURL(), false);
   EXPECT_EQ(LIS::kLoadedNotIdling, page_data->load_idle_state_);
   EXPECT_TRUE(page_data->idling_timer_.IsRunning());
 
@@ -115,7 +115,7 @@
     EXPECT_FALSE(Data::GetForTesting(page_node));
   } else {
     // Go back to idling.
-    frame_node->SetNetworkAlmostIdle(true);
+    frame_node->SetNetworkAlmostIdle();
     EXPECT_EQ(LIS::kLoadedAndIdling, page_data->load_idle_state_);
     EXPECT_TRUE(page_data->idling_timer_.IsRunning());
 
@@ -131,7 +131,7 @@
   // Firing other signals should not change the state at all.
   proc_node->SetMainThreadTaskLoadIsLow(false);
   EXPECT_FALSE(Data::GetForTesting(page_node));
-  frame_node->SetNetworkAlmostIdle(false);
+  frame_node->OnNavigationCommitted(GURL(), false);
   EXPECT_FALSE(Data::GetForTesting(page_node));
 
   // Post a navigation. The state should reset.
@@ -181,7 +181,7 @@
   EXPECT_FALSE(IsIdling(page_node));
 
   // Should return true when network is idle.
-  frame_node->SetNetworkAlmostIdle(true);
+  frame_node->SetNetworkAlmostIdle();
   EXPECT_TRUE(IsIdling(page_node));
 
   // Should toggle with main thread task low.
@@ -191,7 +191,7 @@
   EXPECT_TRUE(IsIdling(page_node));
 
   // Should return false when network is no longer idle.
-  frame_node->SetNetworkAlmostIdle(false);
+  frame_node->OnNavigationCommitted(GURL(), false);
   EXPECT_FALSE(IsIdling(page_node));
 
   // And should stay false if main thread task also goes low again.
diff --git a/chrome/browser/performance_manager/graph/frame_node_impl.cc b/chrome/browser/performance_manager/graph/frame_node_impl.cc
index b785bb8..ccb24a3 100644
--- a/chrome/browser/performance_manager/graph/frame_node_impl.cc
+++ b/chrome/browser/performance_manager/graph/frame_node_impl.cc
@@ -48,8 +48,8 @@
   binding_.Bind(std::move(request));
 }
 
-void FrameNodeImpl::SetNetworkAlmostIdle(bool network_almost_idle) {
-  network_almost_idle_.SetAndMaybeNotify(this, network_almost_idle);
+void FrameNodeImpl::SetNetworkAlmostIdle() {
+  document_.network_almost_idle.SetAndMaybeNotify(this, true);
 }
 
 void FrameNodeImpl::SetLifecycleState(
@@ -60,7 +60,7 @@
 
 void FrameNodeImpl::SetHasNonEmptyBeforeUnload(bool has_nonempty_beforeunload) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  has_nonempty_beforeunload_ = has_nonempty_beforeunload;
+  document_.has_nonempty_beforeunload = has_nonempty_beforeunload;
 }
 
 void FrameNodeImpl::SetInterventionPolicy(
@@ -133,12 +133,12 @@
 
 bool FrameNodeImpl::has_nonempty_beforeunload() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return has_nonempty_beforeunload_;
+  return document_.has_nonempty_beforeunload;
 }
 
 const GURL& FrameNodeImpl::url() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return url_;
+  return document_.url;
 }
 
 bool FrameNodeImpl::is_current() const {
@@ -148,7 +148,7 @@
 
 bool FrameNodeImpl::network_almost_idle() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return network_almost_idle_.value();
+  return document_.network_almost_idle.value();
 }
 
 bool FrameNodeImpl::is_ad_frame() const {
@@ -189,10 +189,10 @@
 void FrameNodeImpl::OnNavigationCommitted(const GURL& url, bool same_document) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  url_ = url;
-
-  if (same_document)
+  if (same_document) {
+    document_.url = url;
     return;
+  }
 
   // Close |binding_| to ensure that messages queued by the previous document
   // before the navigation commit are dropped.
@@ -216,6 +216,9 @@
   //       before the interface provider is bound. A posts B to PM sequence and
   //       C posts D to PM sequence, therefore B happens before D.
   binding_.Close();
+
+  // Reset properties.
+  document_.Reset(this, url);
 }
 
 bool FrameNodeImpl::AreAllInterventionPoliciesSet() const {
@@ -335,4 +338,15 @@
   return false;
 }
 
+FrameNodeImpl::DocumentProperties::DocumentProperties() = default;
+FrameNodeImpl::DocumentProperties::~DocumentProperties() = default;
+
+void FrameNodeImpl::DocumentProperties::Reset(FrameNodeImpl* frame_node,
+                                              const GURL& url_in) {
+  url = url_in;
+  has_nonempty_beforeunload = false;
+  // Network is busy on navigation.
+  network_almost_idle.SetAndMaybeNotify(frame_node, false);
+}
+
 }  // namespace performance_manager
diff --git a/chrome/browser/performance_manager/graph/frame_node_impl.h b/chrome/browser/performance_manager/graph/frame_node_impl.h
index 67222ce..88dc109a 100644
--- a/chrome/browser/performance_manager/graph/frame_node_impl.h
+++ b/chrome/browser/performance_manager/graph/frame_node_impl.h
@@ -64,7 +64,7 @@
       resource_coordinator::mojom::DocumentCoordinationUnitRequest request);
 
   // resource_coordinator::mojom::DocumentCoordinationUnit implementation.
-  void SetNetworkAlmostIdle(bool idle) override;
+  void SetNetworkAlmostIdle() override;
   void SetLifecycleState(
       resource_coordinator::mojom::LifecycleState state) override;
   void SetHasNonEmptyBeforeUnload(bool has_nonempty_beforeunload) override;
@@ -112,6 +112,24 @@
   friend class PageNodeImpl;
   friend class ProcessNodeImpl;
 
+  // Properties associated with a Document, which are reset when a
+  // different-document navigation is committed in the frame.
+  struct DocumentProperties {
+    DocumentProperties();
+    ~DocumentProperties();
+
+    void Reset(FrameNodeImpl* frame_node, const GURL& url_in);
+
+    GURL url;
+    bool has_nonempty_beforeunload = false;
+
+    // Network is considered almost idle when there are no more than 2 network
+    // connections.
+    ObservedProperty::
+        NotifiesOnlyOnChanges<bool, &GraphObserver::OnNetworkAlmostIdleChanged>
+            network_almost_idle{false};
+  };
+
   // Invoked by subframes on joining/leaving the graph.
   void AddChildFrame(FrameNodeImpl* frame_node);
   void RemoveChildFrame(FrameNodeImpl* frame_node);
@@ -137,13 +155,13 @@
   const base::UnguessableToken dev_tools_token_;
 
   base::flat_set<FrameNodeImpl*> child_frame_nodes_;
+
+  // Does *not* change when a navigation is committed.
   ObservedProperty::NotifiesOnlyOnChanges<
       resource_coordinator::mojom::LifecycleState,
       &GraphObserver::OnLifecycleStateChanged>
       lifecycle_state_{resource_coordinator::mojom::LifecycleState::kRunning};
 
-  bool has_nonempty_beforeunload_ = false;
-  GURL url_;
   // This is a one way switch. Once marked an ad-frame, always an ad-frame.
   bool is_ad_frame_ = false;
 
@@ -151,20 +169,24 @@
                                           &GraphObserver::OnIsCurrentChanged>
       is_current_{false};
 
-  // Network is considered almost idle when there are no more than 2 network
-  // connections.
-  ObservedProperty::
-      NotifiesOnlyOnChanges<bool, &GraphObserver::OnNetworkAlmostIdleChanged>
-          network_almost_idle_{false};
-
   // Intervention policy for this frame. These are communicated from the
   // renderer process and are controlled by origin trials.
+  //
+  // TODO(fdoray): Adapt aggregation logic in PageNodeImpl to allow moving this
+  // to DocumentProperties.
   resource_coordinator::mojom::InterventionPolicy
       intervention_policy_[static_cast<size_t>(
                                resource_coordinator::mojom::
                                    PolicyControlledIntervention::kMaxValue) +
                            1];
 
+  // Properties associated with a Document, which are reset when a
+  // different-document navigation is committed in the frame.
+  //
+  // TODO(fdoray): Cleanup this once there is a 1:1 mapping between
+  // RenderFrameHost and Document https://crbug.com/936696.
+  DocumentProperties document_;
+
   DISALLOW_COPY_AND_ASSIGN(FrameNodeImpl);
 };
 
diff --git a/chrome/browser/push_messaging/push_messaging_service_impl.cc b/chrome/browser/push_messaging/push_messaging_service_impl.cc
index 33ce6a8e..7e5c7d4 100644
--- a/chrome/browser/push_messaging/push_messaging_service_impl.cc
+++ b/chrome/browser/push_messaging/push_messaging_service_impl.cc
@@ -4,6 +4,8 @@
 
 #include "chrome/browser/push_messaging/push_messaging_service_impl.h"
 
+#include <map>
+#include <sstream>
 #include <vector>
 
 #include "base/barrier_closure.h"
@@ -46,6 +48,7 @@
 #include "components/rappor/public/rappor_utils.h"
 #include "components/rappor/rappor_service_impl.h"
 #include "content/public/browser/browser_context.h"
+#include "content/public/browser/devtools_background_services_context.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/service_worker_context.h"
@@ -128,6 +131,29 @@
   std::move(closure).Run();
 }
 
+void LogMessageReceivedEventToDevTools(
+    content::DevToolsBackgroundServicesContext* devtools_context,
+    const PushMessagingAppIdentifier& app_identifier,
+    const std::string& message_id,
+    bool was_encrypted,
+    const std::string& error_message) {
+  if (!devtools_context)
+    return;
+
+  std::map<std::string, std::string> event_metadata = {
+      {"Success", error_message.empty() ? "Yes" : "No"},
+      {"Was Encrypted", was_encrypted ? "Yes" : "No"}};
+
+  if (!error_message.empty())
+    event_metadata["Error Reason"] = error_message;
+
+  devtools_context->LogBackgroundServiceEvent(
+      app_identifier.service_worker_registration_id(),
+      url::Origin::Create(app_identifier.origin()),
+      content::DevToolsBackgroundService::kPushMessaging,
+      "Push message received" /* event_name */, message_id, event_metadata);
+}
+
 }  // namespace
 
 // static
@@ -252,6 +278,12 @@
                            blink::mojom::PushDeliveryStatus::UNKNOWN_APP_ID);
     return;
   }
+
+  LogMessageReceivedEventToDevTools(GetDevToolsContext(app_identifier.origin()),
+                                    app_identifier, message.message_id,
+                                    /* was_encrypted= */ message.decrypted,
+                                    std::string() /* error_message */);
+
   // Drop message and unregister if |origin| has lost push permission.
   if (!IsPermissionSet(app_identifier.origin())) {
     DeliverMessageCallback(app_id, app_identifier.origin(),
@@ -274,7 +306,8 @@
   // Dispatch the message to the appropriate Service Worker.
   content::BrowserContext::DeliverPushMessage(
       profile_, app_identifier.origin(),
-      app_identifier.service_worker_registration_id(), payload,
+      app_identifier.service_worker_registration_id(), message.message_id,
+      payload,
       base::Bind(&PushMessagingServiceImpl::DeliverMessageCallback,
                  weak_factory_.GetWeakPtr(), app_identifier.app_id(),
                  app_identifier.origin(),
@@ -302,7 +335,7 @@
 
   base::RepeatingClosure completion_closure = base::BindRepeating(
       &PushMessagingServiceImpl::DidHandleMessage, weak_factory_.GetWeakPtr(),
-      app_id, message_handled_closure,
+      app_id, message.message_id, message_handled_closure,
       false /* did_show_generic_notification */);
   // The |completion_closure| should run by default at the end of this function,
   // unless it is explicitly passed to another function or disabled.
@@ -333,7 +366,7 @@
             requesting_origin, service_worker_registration_id,
             base::BindOnce(&PushMessagingServiceImpl::DidHandleMessage,
                            weak_factory_.GetWeakPtr(), app_id,
-                           message_handled_closure));
+                           message.message_id, message_handled_closure));
         // Disable the default completion closure.
         completion_closure_runner.ReplaceClosure(base::DoNothing());
       }
@@ -367,11 +400,26 @@
         app_id, message.sender_id,
         base::BindOnce(&UnregisterCallbackToClosure,
                        completion_closure_runner.Release()));
+
+    if (app_identifier.is_null())
+      return;
+
+    if (auto* devtools_context = GetDevToolsContext(app_identifier.origin())) {
+      std::stringstream ss;
+      ss << unsubscribe_reason;
+      devtools_context->LogBackgroundServiceEvent(
+          app_identifier.service_worker_registration_id(),
+          url::Origin::Create(app_identifier.origin()),
+          content::DevToolsBackgroundService::kPushMessaging,
+          "Unsubscribed due to error" /* event_name */, message.message_id,
+          {{"Reason", ss.str()}});
+    }
   }
 }
 
 void PushMessagingServiceImpl::DidHandleMessage(
     const std::string& app_id,
+    const std::string& push_message_id,
     const base::RepeatingClosure& message_handled_closure,
     bool did_show_generic_notification) {
   auto in_flight_iterator = in_flight_message_deliveries_.find(app_id);
@@ -393,6 +441,21 @@
   chrome::android::Java_PushMessagingServiceObserver_onMessageHandled(
       base::android::AttachCurrentThread());
 #endif
+
+  PushMessagingAppIdentifier app_identifier =
+      PushMessagingAppIdentifier::FindByAppId(profile_, app_id);
+
+  if (app_identifier.is_null() || !did_show_generic_notification)
+    return;
+
+  if (auto* devtools_context = GetDevToolsContext(app_identifier.origin())) {
+    devtools_context->LogBackgroundServiceEvent(
+        app_identifier.service_worker_registration_id(),
+        url::Origin::Create(app_identifier.origin()),
+        content::DevToolsBackgroundService::kPushMessaging,
+        "Generic notification shown" /* event_name */, push_message_id,
+        {} /* event_metadata */);
+  }
 }
 
 void PushMessagingServiceImpl::SetMessageCallbackForTesting(
@@ -422,7 +485,17 @@
 void PushMessagingServiceImpl::OnMessageDecryptionFailed(
     const std::string& app_id,
     const std::string& message_id,
-    const std::string& error_message) {}
+    const std::string& error_message) {
+  PushMessagingAppIdentifier app_identifier =
+      PushMessagingAppIdentifier::FindByAppId(profile_, app_id);
+
+  if (app_identifier.is_null())
+    return;
+
+  LogMessageReceivedEventToDevTools(GetDevToolsContext(app_identifier.origin()),
+                                    app_identifier, message_id,
+                                    /* was_encrypted= */ true, error_message);
+}
 
 // GetEndpoint method ----------------------------------------------------------
 
@@ -1072,3 +1145,21 @@
   CHECK(instance_id_profile_service->driver());
   return instance_id_profile_service->driver();
 }
+
+content::DevToolsBackgroundServicesContext*
+PushMessagingServiceImpl::GetDevToolsContext(const GURL& origin) const {
+  auto* storage_partition =
+      content::BrowserContext::GetStoragePartitionForSite(profile_, origin);
+  if (!storage_partition)
+    return nullptr;
+
+  auto* devtools_context =
+      storage_partition->GetDevToolsBackgroundServicesContext();
+
+  if (!devtools_context->IsRecording(
+          content::DevToolsBackgroundService::kPushMessaging)) {
+    return nullptr;
+  }
+
+  return devtools_context;
+}
diff --git a/chrome/browser/push_messaging/push_messaging_service_impl.h b/chrome/browser/push_messaging/push_messaging_service_impl.h
index 3cbc3947..9e75f64a 100644
--- a/chrome/browser/push_messaging/push_messaging_service_impl.h
+++ b/chrome/browser/push_messaging/push_messaging_service_impl.h
@@ -31,6 +31,7 @@
 #include "content/public/browser/notification_registrar.h"
 #include "content/public/browser/push_messaging_service.h"
 
+class GURL;
 class Profile;
 class PushMessagingAppIdentifier;
 class PushMessagingServiceTest;
@@ -45,12 +46,17 @@
 struct WebPushSubscriptionOptions;
 }  // namespace blink
 
+namespace content {
+class DevToolsBackgroundServicesContext;
+}  // namespace content
+
 namespace gcm {
 class GCMDriver;
-}
+}  // namespace gcm
+
 namespace instance_id {
 class InstanceIDDriver;
-}
+}  // namespace instance_id
 
 class PushMessagingServiceImpl : public content::PushMessagingService,
                                  public gcm::GCMAppHandler,
@@ -155,6 +161,7 @@
                               blink::mojom::PushDeliveryStatus status);
 
   void DidHandleMessage(const std::string& app_id,
+                        const std::string& push_message_id,
                         const base::RepeatingClosure& completion_closure,
                         bool did_show_generic_notification);
 
@@ -252,6 +259,9 @@
 
   instance_id::InstanceIDDriver* GetInstanceIDDriver() const;
 
+  content::DevToolsBackgroundServicesContext* GetDevToolsContext(
+      const GURL& origin) const;
+
   // Testing methods -----------------------------------------------------------
 
   // Callback to be invoked when a message has been dispatched. Enables tests to
diff --git a/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper.mm b/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper.mm
index d31c14f0..acea663 100644
--- a/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper.mm
+++ b/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper.mm
@@ -129,7 +129,7 @@
     case blink::WebInputEvent::kGestureScrollBegin:
       if (event.data.scroll_begin.synthetic ||
           event.data.scroll_begin.inertial_phase ==
-              blink::WebGestureEvent::kMomentumPhase) {
+              blink::WebGestureEvent::InertialPhaseState::kMomentum) {
         return;
       }
       // GestureScrollBegin and GestureScrollEnd events are created to wrap
diff --git a/chrome/browser/resources/BUILD.gn b/chrome/browser/resources/BUILD.gn
index ccfd3ee..9b4adc9 100644
--- a/chrome/browser/resources/BUILD.gn
+++ b/chrome/browser/resources/BUILD.gn
@@ -175,6 +175,39 @@
     ]
     output_dir = "$root_gen_dir/chrome"
   }
+
+  grit("downloads_resources") {
+    if (optimize_webui) {
+      source = "downloads/downloads_resources_vulcanized.grd"
+
+      deps = [
+        "//chrome/browser/resources/downloads:build",
+      ]
+    } else {
+      source = "downloads/downloads_resources.grd"
+
+      deps = [
+        "//chrome/browser/ui/webui/downloads:mojo_bindings_js",
+      ]
+    }
+
+    # The .grd contains references to generated files.
+    source_is_generated = true
+
+    grit_flags = [
+      "-E",
+      "root_gen_dir=" + rebase_path(root_gen_dir, root_build_dir),
+    ]
+
+    defines = chrome_grit_defines
+    outputs = [
+      "grit/downloads_resources.h",
+      "grit/downloads_resources_map.cc",
+      "grit/downloads_resources_map.h",
+      "downloads_resources.pak",
+    ]
+    output_dir = "$root_gen_dir/chrome"
+  }
 }
 
 if (is_chromeos) {
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/background_test.extjs b/chrome/browser/resources/chromeos/chromevox/cvox2/background/background_test.extjs
index 952eeb28..eac7922 100644
--- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/background_test.extjs
+++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/background_test.extjs
@@ -1242,7 +1242,9 @@
   });
 });
 
-TEST_F('ChromeVoxBackgroundTest', 'ListItem', function() {
+// Timeout on ChromeOS with LayoutNG & Viz.
+// https://crbug.com/959261
+TEST_F('ChromeVoxBackgroundTest', 'DISABLED_ListItem', function() {
   this.resetContextualOutput();
   var mockFeedback = this.createMockFeedback();
   this.runWithLoadedTree(function(root) {/*!
diff --git a/chrome/browser/resources/component_extension_resources.grd b/chrome/browser/resources/component_extension_resources.grd
index 8106070a..0afd6c47 100644
--- a/chrome/browser/resources/component_extension_resources.grd
+++ b/chrome/browser/resources/component_extension_resources.grd
@@ -6,8 +6,8 @@
     <output filename="grit/component_extension_resources.h" type="rc_header">
       <emit emit_type='prepend'></emit>
     </output>
-    <output filename="grit/component_extension_resources_map.cc" type="gzipped_resource_file_map_source" />
-    <output filename="grit/component_extension_resources_map.h" type="gzipped_resource_map_header" />
+    <output filename="grit/component_extension_resources_map.cc" type="resource_file_map_source" />
+    <output filename="grit/component_extension_resources_map.h" type="resource_map_header" />
     <output filename="component_extension_resources.pak" type="data_package" />
   </outputs>
   <release seq="1">
diff --git a/chrome/browser/resources/downloads/BUILD.gn b/chrome/browser/resources/downloads/BUILD.gn
index bd28ff0..ceb9f736 100644
--- a/chrome/browser/resources/downloads/BUILD.gn
+++ b/chrome/browser/resources/downloads/BUILD.gn
@@ -2,21 +2,63 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//chrome/common/features.gni")
 import("//third_party/closure_compiler/compile_js.gni")
+import("//tools/grit/grit_rule.gni")
 import("../optimize_webui.gni")
 
-optimize_webui("build") {
-  deps = []
-  host = "downloads"
-  html_in_files = [ "downloads.html" ]
-  html_out_files = [ "vulcanized.html" ]
-  input = rebase_path(".", root_build_dir)
-  insert_in_head = "<base href=chrome://downloads>"
-  js_out_files = [ "crisper.js" ]
-  excludes = [
-    "chrome://resources/js/mojo_bindings_lite.js",
-    "chrome://downloads/downloads.mojom-lite.js",
-  ]
+if (optimize_webui) {
+  downloads_pak_file = "downloads_resources.pak"
+  unpak_folder = "downloads_resources.unpak"
+
+  optimize_webui("build") {
+    host = "downloads"
+    html_in_files = [ "downloads.html" ]
+    html_out_files = [ "vulcanized.html" ]
+    insert_in_head = "<base href=chrome://downloads>"
+    input = rebase_path("$target_gen_dir/$unpak_folder", root_build_dir)
+    js_out_files = [ "crisper.js" ]
+    excludes = [
+      "chrome://resources/js/mojo_bindings_lite.js",
+      "chrome://downloads/downloads.mojom-lite.js",
+    ]
+
+    deps = [
+      ":unpak",
+    ]
+  }
+
+  unpak("unpak") {
+    pak_file = downloads_pak_file
+    out_folder = unpak_folder
+
+    deps = [
+      ":flattened_resources",
+    ]
+  }
+
+  grit("flattened_resources") {
+    source = "downloads_resources.grd"
+
+    # The .grd contains references to generated files.
+    source_is_generated = true
+
+    defines = chrome_grit_defines
+    outputs = [
+      "grit/downloads_resources.h",
+      "grit/downloads_resources_map.cc",
+      "grit/downloads_resources_map.h",
+      downloads_pak_file,
+    ]
+    deps = [
+      "//chrome/browser/ui/webui/downloads:mojo_bindings_js",
+    ]
+    grit_flags = [
+      "-E",
+      "root_gen_dir=" + rebase_path(root_gen_dir, root_build_dir),
+    ]
+    output_dir = "$root_gen_dir/chrome/browser/resources/downloads"
+  }
 }
 
 js_type_check("closure_compile") {
diff --git a/chrome/browser/resources/downloads/downloads_resources.grd b/chrome/browser/resources/downloads/downloads_resources.grd
new file mode 100644
index 0000000..ba9c485
--- /dev/null
+++ b/chrome/browser/resources/downloads/downloads_resources.grd
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grit latest_public_release="0" current_release="1" output_all_resource_defines="false">
+  <outputs>
+    <output filename="grit/downloads_resources.h" type="rc_header">
+      <emit emit_type='prepend'></emit>
+    </output>
+    <output filename="grit/downloads_resources_map.cc"
+            type="resource_file_map_source" />
+    <output filename="grit/downloads_resources_map.h"
+            type="resource_map_header" />
+    <output filename="downloads_resources.pak" type="data_package" />
+  </outputs>
+  <release seq="1">
+    <includes>
+      <include name="IDR_DOWNLOADS_IMAGES_INCOGNITO_MARKER_SVG"
+          file="images\incognito_marker.svg"
+          type="BINDATA" />
+      <include name="IDR_DOWNLOADS_IMAGES_NO_DOWNLOADS_SVG"
+          file="images\no_downloads.svg"
+          type="BINDATA" />
+      <include name="IDR_DOWNLOADS_MOJO_LITE_JS"
+          file="${root_gen_dir}\chrome\browser\ui\webui\downloads\downloads.mojom-lite.js"
+          use_base_dir="false"
+          type="BINDATA" />
+    </includes>
+    <structures>
+      <structure name="IDR_DOWNLOADS_DOWNLOADS_HTML"
+          file="downloads.html"
+          preprocess="true"
+          type="chrome_html" />
+      <structure name="IDR_DOWNLOADS_BROWSER_PROXY_HTML"
+          file="browser_proxy.html"
+          type="chrome_html" />
+      <structure name="IDR_DOWNLOADS_BROWSER_PROXY_JS"
+          file="browser_proxy.js"
+          type="chrome_html" />
+      <structure name="IDR_DOWNLOADS_CONSTANTS_HTML"
+          file="constants.html"
+          type="chrome_html" />
+      <structure name="IDR_DOWNLOADS_CONSTANTS_JS"
+          file="constants.js"
+          type="chrome_html" />
+      <structure name="IDR_DOWNLOADS_DOWNLOADS_JS"
+          file="downloads.js"
+          type="chrome_html" />
+      <structure name="IDR_DOWNLOADS_I18N_SETUP_HTML"
+          file="i18n_setup.html"
+          type="chrome_html" />
+      <structure name="IDR_DOWNLOADS_ICON_LOADER_HTML"
+          file="icon_loader.html"
+          type="chrome_html" />
+      <structure name="IDR_DOWNLOADS_ICON_LOADER_JS"
+          file="icon_loader.js" type="chrome_html" />
+      <structure name="IDR_DOWNLOADS_ICONS_HTML"
+          file="icons.html"
+          type="chrome_html" />
+      <structure name="IDR_DOWNLOADS_ITEM_HTML"
+          file="item.html"
+          type="chrome_html" />
+      <structure name="IDR_DOWNLOADS_ITEM_JS"
+          file="item.js"
+          type="chrome_html" />
+      <structure name="IDR_DOWNLOADS_MANAGER_HTML"
+          file="manager.html"
+          type="chrome_html" />
+      <structure name="IDR_DOWNLOADS_MANAGER_JS"
+          file="manager.js"
+          type="chrome_html" />
+      <structure name="IDR_DOWNLOADS_SEARCH_SERVICE_HTML"
+          file="search_service.html"
+          type="chrome_html" />
+      <structure name="IDR_DOWNLOADS_SEARCH_SERVICE_JS"
+          file="search_service.js"
+          type="chrome_html" />
+      <structure name="IDR_DOWNLOADS_TOOLBAR_HTML"
+          file="toolbar.html"
+          type="chrome_html" />
+      <structure name="IDR_DOWNLOADS_TOOLBAR_JS"
+          file="toolbar.js"
+          type="chrome_html" />
+    </structures>
+  </release>
+</grit>
diff --git a/chrome/browser/resources/downloads/downloads_resources_vulcanized.grd b/chrome/browser/resources/downloads/downloads_resources_vulcanized.grd
new file mode 100644
index 0000000..71179dc
--- /dev/null
+++ b/chrome/browser/resources/downloads/downloads_resources_vulcanized.grd
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grit latest_public_release="0" current_release="1" output_all_resource_defines="false">
+  <outputs>
+    <output filename="grit/downloads_resources.h" type="rc_header">
+      <emit emit_type='prepend'></emit>
+    </output>
+    <output filename="grit/downloads_resources_map.cc"
+            type="resource_map_source" />
+    <output filename="grit/downloads_resources_map.h"
+            type="resource_map_header" />
+    <output filename="downloads_resources.pak" type="data_package" />
+  </outputs>
+  <release seq="1">
+    <includes>
+      <include name="IDR_DOWNLOADS_IMAGES_INCOGNITO_MARKER_SVG"
+               file="images\incognito_marker.svg"
+               type="BINDATA" />
+      <include name="IDR_DOWNLOADS_IMAGES_NO_DOWNLOADS_SVG"
+               file="images\no_downloads.svg"
+               type="BINDATA" />
+      <include name="IDR_DOWNLOADS_MOJO_LITE_JS"
+               file="${root_gen_dir}\chrome\browser\ui\webui\downloads\downloads.mojom-lite.js"
+               use_base_dir="false"
+               compress="gzip"
+               type="BINDATA" />
+      <include name="IDR_DOWNLOADS_VULCANIZED_HTML"
+               file="${root_gen_dir}\chrome\browser\resources\downloads\vulcanized.html"
+               use_base_dir="false"
+               preprocess="true"
+               compress="gzip"
+               type="BINDATA" />
+      <include name="IDR_DOWNLOADS_CRISPER_JS"
+               file="${root_gen_dir}\chrome\browser\resources\downloads\crisper.js"
+               use_base_dir="false"
+               preprocess="true"
+               compress="gzip"
+               type="BINDATA" />
+    </includes>
+  </release>
+</grit>
diff --git a/chrome/browser/resources/kiosk_next_internal_resources.grd b/chrome/browser/resources/kiosk_next_internal_resources.grd
index f90c89f..6418df00 100644
--- a/chrome/browser/resources/kiosk_next_internal_resources.grd
+++ b/chrome/browser/resources/kiosk_next_internal_resources.grd
@@ -4,8 +4,8 @@
     <output filename="grit/kiosk_next_internal_resources.h" type="rc_header">
       <emit emit_type='prepend'></emit>
     </output>
-    <output filename="grit/kiosk_next_internal_resources_map.cc" type="gzipped_resource_file_map_source" />
-    <output filename="grit/kiosk_next_internal_resources_map.h" type="gzipped_resource_map_header" />
+    <output filename="grit/kiosk_next_internal_resources_map.cc" type="resource_file_map_source" />
+    <output filename="grit/kiosk_next_internal_resources_map.h" type="resource_map_header" />
     <output filename="kiosk_next_internal_resources.pak" type="data_package" />
   </outputs>
   <release seq="1">
diff --git a/chrome/browser/resources/local_ntp/custom_backgrounds.js b/chrome/browser/resources/local_ntp/custom_backgrounds.js
index 196d9a4..4423cf6 100644
--- a/chrome/browser/resources/local_ntp/custom_backgrounds.js
+++ b/chrome/browser/resources/local_ntp/custom_backgrounds.js
@@ -94,6 +94,7 @@
   EDIT_BG_TEXT: 'edit-bg-text',
   MENU_BACK: 'menu-back',
   MENU_CANCEL: 'menu-cancel',
+  MENU_DONE: 'menu-done',
   MENU_TITLE: 'menu-title',
   LINK_ICON: 'link-icon',
   MENU: 'bg-sel-menu',
@@ -129,6 +130,7 @@
   OPTION_DISABLED: 'bg-option-disabled',  // The menu option is disabled.
   MENU_SHOWN: 'menu-shown',
   MOUSE_NAV: 'using-mouse-nav',
+  SELECTED: 'selected',
   SELECTED_BORDER: 'selected-border',
   SELECTED_CHECK: 'selected-check',
   SELECTED_CIRCLE: 'selected-circle',
@@ -217,6 +219,7 @@
   $(customBackgrounds.IDS.EDIT_BG_DIVIDER).hidden = false;
   $(customBackgrounds.IDS.CUSTOM_LINKS_RESTORE_DEFAULT).hidden =
       configData.hideShortcuts;
+  $(customBackgrounds.IDS.COLORS_BUTTON).hidden = !configData.chromeColors;
 };
 
 /**
@@ -310,6 +313,11 @@
   menu.classList.toggle(customBackgrounds.CLASSES.ON_IMAGE_MENU, false);
   backgroundMenu.classList.toggle(
       customBackgrounds.CLASSES.MENU_SHOWN, showMenu);
+
+  // Reset done button state.
+  $(customBackgrounds.IDS.MENU_DONE).disabled = true;
+  customBackgrounds.selectedTile = null;
+  $(customBackgrounds.IDS.MENU_DONE).tabIndex = -1;
 };
 
 /* Close the collection selection dialog and cleanup the state
@@ -536,6 +544,43 @@
 };
 
 /**
+ * Apply styling to a selected tile in the richer picker and enable the done
+ * button.
+ * @param {!Element} tile The tile to apply styling to.
+ */
+customBackgrounds.selectTile = function(tile) {
+  tile.parentElement.classList.toggle(customBackgrounds.CLASSES.SELECTED, true);
+  $(customBackgrounds.IDS.MENU_DONE).disabled = false;
+  customBackgrounds.selectedTile = tile;
+  $(customBackgrounds.IDS.MENU_DONE).tabIndex = 0;
+
+  // Create and append selected check.
+  const selectedCircle = document.createElement('div');
+  const selectedCheck = document.createElement('div');
+  selectedCircle.classList.add(customBackgrounds.CLASSES.SELECTED_CIRCLE);
+  selectedCheck.classList.add(customBackgrounds.CLASSES.SELECTED_CHECK);
+  selectedCircle.appendChild(selectedCheck);
+  tile.appendChild(selectedCircle);
+};
+
+/**
+ * Remove styling from a selected tile in the richer picker and disable the
+ * done button.
+ * @param {!Element} tile The tile to remove styling from.
+ */
+customBackgrounds.deselectTile = function(tile) {
+  tile.parentElement.classList.toggle(
+      customBackgrounds.CLASSES.SELECTED, false);
+  $(customBackgrounds.IDS.MENU_DONE).disabled = true;
+  customBackgrounds.selectedTile = null;
+  $(customBackgrounds.IDS.MENU_DONE).tabIndex = -1;
+
+  // Remove selected check.
+  tile.innerHTML = '';
+};
+
+
+/**
  * Apply border and checkmark when a tile is selected
  * @param {!Element} tile The tile to apply styling to.
  */
@@ -636,15 +681,27 @@
 
     const tileInteraction = function(tile) {
       if (customBackgrounds.selectedTile) {
-        customBackgrounds.removeSelectedState(customBackgrounds.selectedTile);
-        if (customBackgrounds.selectedTile.id === tile.id) {
-          customBackgrounds.unselectTile();
-          return ;
+        if (configData.richerPicker) {
+          const id = customBackgrounds.selectedTile.id;
+          customBackgrounds.deselectTile(customBackgrounds.selectedTile);
+          if (id === tile.id) {
+            return;
+          }
+        } else {
+          customBackgrounds.removeSelectedState(customBackgrounds.selectedTile);
+          if (customBackgrounds.selectedTile.id === tile.id) {
+            customBackgrounds.unselectTile();
+            return;
+          }
         }
       }
-      customBackgrounds.selectedTile = tile;
 
-      customBackgrounds.applySelectedState(tile);
+      if (configData.richerPicker) {
+        customBackgrounds.selectTile(tile);
+      } else {
+        customBackgrounds.applySelectedState(tile);
+        customBackgrounds.selectedTile = tile;
+      }
 
       $(customBackgrounds.IDS.DONE).tabIndex = 0;
 
@@ -877,6 +934,7 @@
 
   $(customBackgrounds.IDS.MENU_CANCEL).onclick = function(event) {
     $(customBackgrounds.IDS.CUSTOMIZATION_MENU).close();
+    customBackgrounds.resetImageMenu(false);
   };
 
 
diff --git a/chrome/browser/resources/local_ntp/externs.js b/chrome/browser/resources/local_ntp/externs.js
index f5e69bbb..60cd9a2d 100644
--- a/chrome/browser/resources/local_ntp/externs.js
+++ b/chrome/browser/resources/local_ntp/externs.js
@@ -33,7 +33,8 @@
  *            removeFakebox: boolean,
  *            alternateFakebox: boolean,
  *            fakeboxSearchIcon: boolean,
- *            hideShortcuts: boolean}}
+ *            hideShortcuts: boolean,
+ *            chromeColors: boolean}}
  */
 let configData;
 
diff --git a/chrome/browser/resources/local_ntp/local_ntp.css b/chrome/browser/resources/local_ntp/local_ntp.css
index 221d0a9aa..66c1d63 100644
--- a/chrome/browser/resources/local_ntp/local_ntp.css
+++ b/chrome/browser/resources/local_ntp/local_ntp.css
@@ -1008,6 +1008,20 @@
   margin-bottom: 8px;
 }
 
+#backgrounds-image-menu .bg-sel-tile-bg.selected {
+  background-color: rgba(var(--GB900-rgb), .08);
+}
+
+#backgrounds-image-menu .bg-sel-tile-bg.selected .bg-sel-tile {
+  height: 144px;
+  margin: 16px 16px 0 16px;
+  width: 144px;
+}
+
+#backgrounds-image-menu .bg-sel-tile-bg.selected .bg-sel-tile:focus {
+  outline: none;
+}
+
 #backgrounds-menu .bg-sel-tile,
 #backgrounds-image-menu .bg-sel-tile {
   background-position: center;
@@ -1025,7 +1039,7 @@
 
 #backgrounds-default.bg-sel-tile-bg {
   background-color: white;
-  border: 1px solid black;
+  border: 1px solid rgb(var(--GG300-rgb));
   height: 174px;
   margin-inline-end: 6px;
   width: 174px;
@@ -1033,7 +1047,7 @@
 
 #backgrounds-upload.bg-sel-tile-bg {
   background-color: white;
-  border: 1px solid black;
+  border: 1px solid rgb(var(--GG300-rgb));
   height: 174px;
   margin-inline-end: 6px;
   vertical-align: top;
@@ -1064,3 +1078,47 @@
   margin-inline-start: 212px;
   visibility: visible;
 }
+
+#backgrounds-upload-icon {
+  -webkit-mask-image: url(icons/upload.svg);
+  -webkit-mask-repeat: no-repeat;
+  -webkit-mask-size: 100%;
+  background: 32px 24px rgb(var(--GG700-rgb));
+  height: 32px;
+  margin-bottom: 8px;
+  margin-inline-start: 72px;
+  margin-top: 61px;
+  width: 32px;
+}
+
+#backgrounds-upload-text {
+  color: rgb(var(--GG700-rgb));
+  text-align: center;
+  width: 100%;
+}
+
+.bg-sel-tile .selected-circle {
+  height: 20px;
+  left: initial;
+  right: 10px;
+  top: 10px;
+  width: 20px;
+}
+
+html[dir=rtl] .bg-sel-tile .selected-circle {
+  left: 10px;
+  right: initial;
+}
+
+.bg-sel-tile .selected-check {
+  height: 24px;
+  left: initial;
+  right: 0;
+  top: 0;
+  width: 24px;
+}
+
+html[dir=rtl] .bg-sel-tile .selected-check {
+  left: 0;
+  right: initial;
+}
diff --git a/chrome/browser/resources/local_ntp/local_ntp.html b/chrome/browser/resources/local_ntp/local_ntp.html
index 02b33e5..4ee4de4d 100644
--- a/chrome/browser/resources/local_ntp/local_ntp.html
+++ b/chrome/browser/resources/local_ntp/local_ntp.html
@@ -200,7 +200,10 @@
     </div>
     <div id="menu-contents">
       <div id="backgrounds-menu" class="menu-panel">
-        <div id="backgrounds-upload" class="bg-sel-tile-bg">Upload an image</div>
+        <div id="backgrounds-upload" class="bg-sel-tile-bg">
+          <div id="backgrounds-upload-icon"></div>
+          <div id="backgrounds-upload-text">$i18n{uploadImage}</div>
+        </div>
         <div id="backgrounds-default" class="bg-sel-tile-bg">
           <div class="bg-sel-tile-title">Default</div>
         </div>
diff --git a/chrome/browser/resources/omnibox/omnibox_output.js b/chrome/browser/resources/omnibox/omnibox_output.js
index 2d8cee79..48c19794 100644
--- a/chrome/browser/resources/omnibox/omnibox_output.js
+++ b/chrome/browser/resources/omnibox/omnibox_output.js
@@ -113,6 +113,7 @@
       this.$$('#contents').appendChild(resultsGroup);
 
       this.updateVisibility_();
+      this.updateEliding_();
       this.updateFilterHighlights_();
     }
 
diff --git a/chrome/browser/resources/settings/a11y_page/manage_a11y_page.html b/chrome/browser/resources/settings/a11y_page/manage_a11y_page.html
index 395f0453..6277b01 100644
--- a/chrome/browser/resources/settings/a11y_page/manage_a11y_page.html
+++ b/chrome/browser/resources/settings/a11y_page/manage_a11y_page.html
@@ -10,7 +10,6 @@
 <link rel="import" href="../i18n_setup.html">
 <link rel="import" href="../route.html">
 <link rel="import" href="../settings_shared_css.html">
-<link rel="import" href="tts_subpage.html">
 
 <dom-module id="settings-manage-a11y-page">
   <template>
diff --git a/chrome/browser/resources/settings/chromeos/BUILD.gn b/chrome/browser/resources/settings/chromeos/BUILD.gn
index 2a1b1036..b6e3dd5 100644
--- a/chrome/browser/resources/settings/chromeos/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/BUILD.gn
@@ -64,6 +64,7 @@
   deps = [
     "os_people_page:closure_compile",
     "os_privacy_page:closure_compile",
+    "os_search_page:closure_compile",
     "os_settings_main:closure_compile",
     "os_settings_menu:closure_compile",
     "os_settings_page:closure_compile",
diff --git a/chrome/browser/resources/settings/chromeos/os_search_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/os_search_page/BUILD.gn
new file mode 100644
index 0000000..53fc8b56
--- /dev/null
+++ b/chrome/browser/resources/settings/chromeos/os_search_page/BUILD.gn
@@ -0,0 +1,22 @@
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//third_party/closure_compiler/compile_js.gni")
+
+js_type_check("closure_compile") {
+  deps = [
+    ":os_search_page",
+  ]
+}
+
+js_library("os_search_page") {
+  deps = [
+    "../..:route",
+    "../../prefs",
+    "../../search_engines_page:search_engines_browser_proxy",
+    "../../settings_page:settings_animated_pages",
+    "//ui/webui/resources/js:cr",
+    "//ui/webui/resources/js:i18n_behavior",
+  ]
+}
diff --git a/chrome/browser/resources/settings/chromeos/os_search_page/os_search_page.html b/chrome/browser/resources/settings/chromeos/os_search_page/os_search_page.html
new file mode 100644
index 0000000..42c05796
--- /dev/null
+++ b/chrome/browser/resources/settings/chromeos/os_search_page/os_search_page.html
@@ -0,0 +1,103 @@
+<link rel="import" href="chrome://resources/html/polymer.html">
+
+<link rel="import" href="chrome://resources/cr_elements/cr_icon_button/cr_icon_button.html">
+<link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_pref_indicator.html">
+<link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html">
+<link rel="import" href="chrome://resources/html/assert.html">
+<link rel="import" href="chrome://resources/html/i18n_behavior.html">
+<link rel="import" href="chrome://resources/html/md_select_css.html">
+<link rel="import" href="../../controls/extension_controlled_indicator.html">
+<link rel="import" href="../../google_assistant_page/google_assistant_page.html">
+<link rel="import" href="../../google_assistant_page/google_assistant_browser_proxy.html">
+<link rel="import" href="../../icons.html">
+<link rel="import" href="../../i18n_setup.html">
+<link rel="import" href="../../route.html">
+<link rel="import" href="../../search_engines_page/search_engines_browser_proxy.html">
+<link rel="import" href="../../settings_page/settings_animated_pages.html">
+<link rel="import" href="../../settings_page/settings_subpage.html">
+<link rel="import" href="../../settings_shared_css.html">
+<link rel="import" href="../../settings_vars_css.html">
+
+<dom-module id="os-settings-search-page">
+  <template>
+    <style include="settings-shared md-select">
+      #search-wrapper {
+        align-items: center;
+        display: flex;
+        min-height: var(--settings-row-min-height);
+      }
+
+      iron-icon {
+        padding-inline-end: 16px;
+      }
+    </style>
+    <settings-animated-pages id="pages" section="search"
+        focus-config="[[focusConfig_]]">
+      <div route-path="default">
+        <!-- Omnibox and launcher search engine. This shares the same pref with
+             browser search engine because users probably don't want one engine
+             in the omnibox and a different one in the launcher. -->
+        <div class="settings-box first block">
+          <div id="search-wrapper">
+            <div id="searchExplanation" class="start">
+              $i18nRaw{searchExplanation}
+            </div>
+            <template is="dom-if" if="[[isDefaultSearchControlledByPolicy_(
+                prefs.default_search_provider_data.template_url_data)]]">
+              <cr-policy-pref-indicator pref="[[
+                  prefs.default_search_provider_data.template_url_data]]">
+              </cr-policy-pref-indicator>
+            </template>
+            <select class="md-select" on-change="onChange_"
+                aria-labelledby="searchExplanation"
+                disabled$="[[isDefaultSearchEngineEnforced_(
+                    prefs.default_search_provider_data.template_url_data)]]">
+              <template is="dom-repeat" items="[[searchEngines_]]">
+                <option selected="[[item.default]]">[[item.name]]</option>
+              </template>
+            </select>
+          </div>
+          <template is="dom-if"
+              if="[[prefs.default_search_provider_data.template_url_data.extensionId]]">
+            <extension-controlled-indicator
+                extension-id="[[
+                    prefs.default_search_provider_data.template_url_data.extensionId]]"
+                extension-name="[[
+                    prefs.default_search_provider_data.template_url_data.controlledByName]]"
+                extension-can-be-disabled="[[
+                    prefs.default_search_provider_data.template_url_data.extensionCanBeDisabled]]"
+                on-disable-extension="onDisableExtension_">
+            </extension-controlled-indicator>
+          </template>
+        </div>
+
+        <!-- Google Assistant -->
+        <template is="dom-if" if="[[isAssistantAllowed_]]">
+          <div id="assistant-subpage-trigger" class="settings-box two-line"
+              on-click="onGoogleAssistantTap_" actionable>
+            <div class="start">
+              $i18n{searchGoogleAssistant}
+              <div class="secondary">
+                [[getAssistantEnabledDisabledLabel_(
+                    prefs.settings.voice_interaction.enabled.value)]]
+              </div>
+            </div>
+            <cr-icon-button class="subpage-arrow"
+                aria-label="$i18n{searchGoogleAssistant}"></cr-icon-button>
+          </div>
+        </template>
+      </div>
+      <template is="dom-if" if="[[isAssistantAllowed_]]">
+        <template is="dom-if" route-path="/googleAssistant">
+          <settings-subpage
+              associated-control="[[$$('#assistant-subpage-trigger')]]"
+              page-title="$i18n{googleAssistantPageTitle}">
+            <settings-google-assistant-page prefs="{{prefs}}">
+            </settings-google-assistant-page>
+          </settings-subpage>
+        </template>
+      </template>
+    </settings-animated-pages>
+  </template>
+  <script src="os_search_page.js"></script>
+</dom-module>
diff --git a/chrome/browser/resources/settings/chromeos/os_search_page/os_search_page.js b/chrome/browser/resources/settings/chromeos/os_search_page/os_search_page.js
new file mode 100644
index 0000000..7d5e348
--- /dev/null
+++ b/chrome/browser/resources/settings/chromeos/os_search_page/os_search_page.js
@@ -0,0 +1,113 @@
+// Copyright 2019 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.
+
+/**
+ * @fileoverview
+ * 'os-settings-search-page' contains search and assistant settings.
+ */
+Polymer({
+  is: 'os-settings-search-page',
+
+  behaviors: [I18nBehavior],
+
+  properties: {
+    prefs: Object,
+
+    /**
+     * List of default search engines available.
+     * @private {!Array<!SearchEngine>}
+     */
+    searchEngines_: {
+      type: Array,
+      value: function() {
+        return [];
+      }
+    },
+
+    /** @private Filter applied to search engines. */
+    searchEnginesFilter_: String,
+
+    /** @type {?Map<string, string>} */
+    focusConfig_: Object,
+
+    /** @private Can be disallowed due to flag, policy, locale, etc. */
+    isAssistantAllowed_: {
+      type: Boolean,
+      value: function() {
+        return loadTimeData.getBoolean('isAssistantAllowed');
+      },
+    },
+  },
+
+  /** @private {?settings.SearchEnginesBrowserProxy} */
+  browserProxy_: null,
+
+  /** @override */
+  created: function() {
+    this.browserProxy_ = settings.SearchEnginesBrowserProxyImpl.getInstance();
+  },
+
+  /** @override */
+  ready: function() {
+    const updateSearchEngines = searchEngines => {
+      this.set('searchEngines_', searchEngines.defaults);
+    };
+    this.browserProxy_.getSearchEnginesList().then(updateSearchEngines);
+    cr.addWebUIListener('search-engines-changed', updateSearchEngines);
+
+    this.focusConfig_ = new Map();
+    if (settings.routes.GOOGLE_ASSISTANT) {
+      this.focusConfig_.set(
+          settings.routes.GOOGLE_ASSISTANT.path,
+          '#assistant-subpage-trigger .subpage-arrow');
+    }
+  },
+
+  /** @private */
+  onChange_: function() {
+    const select = /** @type {!HTMLSelectElement} */ (this.$$('select'));
+    const searchEngine = this.searchEngines_[select.selectedIndex];
+    this.browserProxy_.setDefaultSearchEngine(searchEngine.modelIndex);
+  },
+
+  /** @private */
+  onDisableExtension_: function() {
+    this.fire('refresh-pref', 'default_search_provider.enabled');
+  },
+
+  /** @private */
+  onGoogleAssistantTap_: function() {
+    assert(this.isAssistantAllowed_);
+    settings.navigateTo(settings.routes.GOOGLE_ASSISTANT);
+  },
+
+  /**
+   * @param {boolean} toggleValue
+   * @return {string}
+   * @private
+   */
+  getAssistantEnabledDisabledLabel_: function(toggleValue) {
+    return this.i18n(
+        toggleValue ? 'searchGoogleAssistantEnabled' :
+                      'searchGoogleAssistantDisabled');
+  },
+
+  /**
+   * @param {!chrome.settingsPrivate.PrefObject} pref
+   * @return {boolean}
+   * @private
+   */
+  isDefaultSearchControlledByPolicy_: function(pref) {
+    return pref.controlledBy == chrome.settingsPrivate.ControlledBy.USER_POLICY;
+  },
+
+  /**
+   * @param {!chrome.settingsPrivate.PrefObject} pref
+   * @return {boolean}
+   * @private
+   */
+  isDefaultSearchEngineEnforced_: function(pref) {
+    return pref.enforcement == chrome.settingsPrivate.Enforcement.ENFORCED;
+  },
+});
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_menu/os_settings_menu.html b/chrome/browser/resources/settings/chromeos/os_settings_menu/os_settings_menu.html
index d3b3607..5854d29 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings_menu/os_settings_menu.html
+++ b/chrome/browser/resources/settings/chromeos/os_settings_menu/os_settings_menu.html
@@ -115,7 +115,7 @@
       </a>
       <a href="/search">
         <iron-icon icon="cr:search"></iron-icon>
-        $i18n{searchPageTitle}
+        $i18n{osSearchPageTitle}
       </a>
       <a href="/apps" hidden="[[!showApps]]">
         <!-- TODO(crbug.com/960631) change icon once created. -->
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_page.html b/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_page.html
index e91e9079..0405d34 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_page.html
+++ b/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_page.html
@@ -4,11 +4,11 @@
 <link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html">
 <link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html">
 <link rel="import" href="../os_people_page/os_people_page.html">
+<link rel="import" href="../os_search_page/os_search_page.html">
 <link rel="import" href="../personalization_page/personalization_page.html">
 <link rel="import" href="../../change_password_page/change_password_page.html">
 <link rel="import" href="../../controls/settings_idle_load.html">
 <link rel="import" href="../../reset_page/reset_profile_banner.html">
-<link rel="import" href="../../search_page/search_page.html">
 <link rel="import" href="../../settings_page/main_page_behavior.html">
 <link rel="import" href="../../settings_page/settings_section.html">
 <link rel="import" href="../../settings_page_css.html">
@@ -149,9 +149,10 @@
           </settings-section>
         </template>
         <template is="dom-if" if="[[showPage_(pageVisibility.search)]]" restamp>
-          <settings-section page-title="$i18n{searchPageTitle}"
+          <settings-section page-title="$i18n{osSearchPageTitle}"
               section="search">
-            <settings-search-page prefs="{{prefs}}"></settings-search-page>
+            <os-settings-search-page prefs="{{prefs}}">
+            </os-settings-search-page>
           </settings-section>
         </template>
         <template is="dom-if" if="[[showApps]]" restamp>
diff --git a/chrome/browser/resources/settings/google_assistant_page/google_assistant_page.html b/chrome/browser/resources/settings/google_assistant_page/google_assistant_page.html
index 344d9ab..8f5a39a9 100644
--- a/chrome/browser/resources/settings/google_assistant_page/google_assistant_page.html
+++ b/chrome/browser/resources/settings/google_assistant_page/google_assistant_page.html
@@ -25,18 +25,8 @@
         min-width: 200px;
       }
 
-      /**
-       * This style is copied from the settings_dropdown_menu.
-       * We don't use the settings_dropdown_menu for the
-       * dspHotwordState drop down (see below), because the
-       * dspHotwordState manages 2 preferences. The
-       * settings_dropdown_menu is designed to manage only a
-       * single preference.
-       */
       cr-policy-pref-indicator {
-        height: 24px;
-        order: 0;
-        width: 24px;
+        margin-inline-end: var(--cr-controlled-by-spacing);
       }
     </style>
     <settings-toggle-button id="google-assistant-enable"
@@ -73,13 +63,15 @@
               $i18n{googleAssistantEnableHotwordDescription}
             </div>
           </div>
-          <template is="dom-if"
-              if="[[prefs.settings.voice_interaction.enabled.controllerBy]]"
-              restamp>
-            <cr-policy-pref-indicator
+          <template is="dom-if" if="[[hotwordEnforced_]]" restamp>
+            <cr-policy-pref-indicator id="hotword-policy-pref-indicator"
                 pref="{{prefs.settings.voice_interaction.hotword.enabled}}">
             </cr-policy-pref-indicator>
           </template>
+          <!-- We don't use the settings_dropdown_menu for the dspHotwordState
+               drop down, because the dspHotwordState manages 2 preferences.
+               The settings_dropdown_menu is designed to manage only a single
+               preference. -->
           <select id="dsp-hotword-state" class="md-select"
               aria-labelledby="googleAssistantEnableHotword"
               on-change="onDspHotwordStateChange_"
diff --git a/chrome/browser/resources/settings/languages_page/BUILD.gn b/chrome/browser/resources/settings/languages_page/BUILD.gn
index c461ede4..4d26b5f 100644
--- a/chrome/browser/resources/settings/languages_page/BUILD.gn
+++ b/chrome/browser/resources/settings/languages_page/BUILD.gn
@@ -38,6 +38,7 @@
     "../prefs:prefs_types",
     "//ui/webui/resources/js:assert",
     "//ui/webui/resources/js:cr",
+    "//ui/webui/resources/js:i18n_behavior",
     "//ui/webui/resources/js:promise_resolver",
   ]
   externs_list = [
diff --git a/chrome/browser/resources/settings/languages_page/languages_page.html b/chrome/browser/resources/settings/languages_page/languages_page.html
index 9a4b8dc..911bd906 100644
--- a/chrome/browser/resources/settings/languages_page/languages_page.html
+++ b/chrome/browser/resources/settings/languages_page/languages_page.html
@@ -9,6 +9,7 @@
 <link rel="import" href="chrome://resources/html/assert.html">
 <link rel="import" href="chrome://resources/html/cr.html">
 <link rel="import" href="chrome://resources/html/cr/ui/focus_without_ink.html">
+<link rel="import" href="chrome://resources/html/i18n_behavior.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-collapse/iron-collapse.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
 <link rel="import" href="chrome://resources/cr_elements/cr_action_menu/cr_action_menu.html">
@@ -293,6 +294,7 @@
         <settings-toggle-button
             id="enableSpellcheckingToggle"
             label="$i18n{spellCheckTitle}"
+            sub-label="[[getSpellCheckSubLabel_(spellCheckLanguages_)]]"
             pref="{{prefs.browser.enable_spellchecking}}"
             disabled="[[!spellCheckLanguages_.length]]">
         </settings-toggle-button>
diff --git a/chrome/browser/resources/settings/languages_page/languages_page.js b/chrome/browser/resources/settings/languages_page/languages_page.js
index 649d7ae..19fd2d9 100644
--- a/chrome/browser/resources/settings/languages_page/languages_page.js
+++ b/chrome/browser/resources/settings/languages_page/languages_page.js
@@ -27,6 +27,7 @@
   is: 'settings-languages-page',
 
   behaviors: [
+    I18nBehavior,
     PrefsBehavior,
   ],
 
@@ -692,6 +693,20 @@
     return '';
   },
 
+  /**
+   * @return {string|undefined}
+   * @private
+   */
+  getSpellCheckSubLabel_: function() {
+    // <if expr="not is_macosx">
+    if (this.spellCheckLanguages_.length === 0) {
+      return this.i18n('spellCheckDisabledReason');
+    }
+    // </if>
+
+    return undefined;
+  },
+
   // <if expr="chromeos">
   /**
    * @param {string} id The input method ID.
diff --git a/chrome/browser/resources/settings/os_settings_resources.grd b/chrome/browser/resources/settings/os_settings_resources.grd
index 78fb694..b324bb7 100644
--- a/chrome/browser/resources/settings/os_settings_resources.grd
+++ b/chrome/browser/resources/settings/os_settings_resources.grd
@@ -889,11 +889,11 @@
                  type="chrome_html"
                  allowexternalscript="true" />
       <structure name="IDR_OS_SETTINGS_SEARCH_PAGE_JS"
-                 file="search_page/search_page.js"
+                 file="chromeos/os_search_page/os_search_page.js"
                  type="chrome_html"
                  preprocess="true" />
       <structure name="IDR_OS_SETTINGS_SEARCH_PAGE_HTML"
-                 file="search_page/search_page.html"
+                 file="chromeos/os_search_page/os_search_page.html"
                  type="chrome_html"
                  preprocess="true"
                  allowexternalscript="true" />
diff --git a/chrome/browser/resources/settings/search_page/search_page.js b/chrome/browser/resources/settings/search_page/search_page.js
index 2ac4cc4..cc8ec3d 100644
--- a/chrome/browser/resources/settings/search_page/search_page.js
+++ b/chrome/browser/resources/settings/search_page/search_page.js
@@ -36,7 +36,8 @@
     isAssistantAllowed_: {
       type: Boolean,
       value: function() {
-        return loadTimeData.getBoolean('isAssistantAllowed');
+        return loadTimeData.getBoolean('isAssistantAllowed') &&
+            loadTimeData.getBoolean('showOSSettings');
       },
     },
     // </if>
diff --git a/chrome/browser/resources/settings/settings_menu/settings_menu.html b/chrome/browser/resources/settings/settings_menu/settings_menu.html
index cb5681f..9ddd2c0 100644
--- a/chrome/browser/resources/settings/settings_menu/settings_menu.html
+++ b/chrome/browser/resources/settings/settings_menu/settings_menu.html
@@ -14,8 +14,9 @@
   <template>
     <style include="settings-shared">
       :host {
+        box-sizing: border-box;
         display: block;
-        margin-top: 8px;
+        padding-top: 8px;
       }
 
       a[href],
diff --git a/chrome/browser/resources/settings/settings_page/settings_section.html b/chrome/browser/resources/settings/settings_page/settings_section.html
index 81438e6..8e4475d 100644
--- a/chrome/browser/resources/settings/settings_page/settings_section.html
+++ b/chrome/browser/resources/settings/settings_page/settings_section.html
@@ -9,9 +9,6 @@
       :host {
         display: flex;
         flex-direction: column;
-        /* Margin so the box-shadow isn't clipped during animations. */
-        margin-inline-end: 3px;
-        margin-inline-start: 3px;
         outline: none;
         position: relative;
       }
diff --git a/chrome/browser/resources/settings/settings_ui/settings_ui.html b/chrome/browser/resources/settings/settings_ui/settings_ui.html
index 879a4b36..71df2e27 100644
--- a/chrome/browser/resources/settings/settings_ui/settings_ui.html
+++ b/chrome/browser/resources/settings/settings_ui/settings_ui.html
@@ -4,6 +4,7 @@
 <link rel="import" href="chrome://resources/cr_elements/cr_drawer/cr_drawer.html">
 <link rel="import" href="chrome://resources/cr_elements/cr_toolbar/cr_toolbar.html">
 <link rel="import" href="chrome://resources/cr_elements/icons.html">
+<link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html">
 <link rel="import" href="chrome://resources/html/find_shortcut_behavior.html">
 <link rel="import" href="chrome://resources/html/util.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/paper-styles/color.html">
@@ -30,27 +31,79 @@
         @apply --layout-fit;
         display: flex;
         flex-direction: column;
-      }
-
-      cr-drawer {
-        z-index: 2;
+        --settings-menu-width: 250px;
+        /* Centered cards has a max-width of var(--cr-centered-card-max-width)
+         * and a width of a certain percentage. Therefore, to make room for the
+         * cards to be at their max width, the flex-basis of #main needs to be
+         * whatever value the percentage of would equal to the max width. */
+        --settings-main-basis: calc(var(--cr-centered-card-max-width) /
+            var(--cr-centered-card-width-percentage));
       }
 
       cr-toolbar {
         @apply --layout-center;
         min-height: 56px;
         z-index: 2;
+        --cr-toolbar-left-spacer-width: var(--settings-menu-width);
+        --cr-toolbar-center-basis: var(--settings-main-basis);
       }
 
       :host-context(html:not([dark])) cr-toolbar {
         --iron-icon-fill-color: white;
       }
 
+      #cr-container-shadow-top {
+        /* Needs to be higher than #container's z-index to appear above
+         * scrollbars. */
+        z-index: 2;
+      }
+
       #container {
+        align-items: flex-start;
+        display: flex;
         flex: 1;
         overflow: overlay;
         position: relative;
       }
+
+      #left,
+      #main,
+      #right {
+        flex: 1 1 0;
+      }
+
+      #left {
+        height: 100%;
+        position: sticky;
+        top: 0;
+      }
+
+      #left settings-menu {
+        max-height: 100%;
+        overflow: auto;
+        overscroll-behavior: contain;
+        width: var(--settings-menu-width);
+      }
+
+      #main {
+        flex-basis: var(--settings-main-basis);
+        height: 100%;
+        min-height: fit-content;
+      }
+
+      /* The breakpoint of 980px was decided on by the rounded sum of
+       * var(--settings-main-basis), var(--settings-menu-width), and
+       * var(--cr-section-padding). */
+      @media (max-width: 980px) {
+        #left,
+        #right {
+          display: none;
+        }
+
+        #main {
+          min-width: auto;
+        }
+      }
     </style>
     <settings-prefs id="prefs" prefs="{{prefs}}"></settings-prefs>
     <cr-toolbar page-name="$i18n{settings}"
@@ -61,7 +114,9 @@
         menu-label="$i18n{menuButtonLabel}"
         on-search-changed="onSearchChanged_"
         role="banner"
-        show-menu>
+        narrow="{{narrow_}}"
+        narrow-threshold="980"
+        show-menu="[[narrow_]]">
     </cr-toolbar>
     <cr-drawer id="drawer" on-close="onMenuClose_" heading="$i18n{settings}"
         align="$i18n{textdirection}">
@@ -81,6 +136,17 @@
       </div>
     </cr-drawer>
     <div id="container" class="no-outline">
+      <div id="left">
+        <settings-menu page-visibility="[[pageVisibility_]]"
+            show-android-apps="[[showAndroidApps_]]"
+            show-crostini="[[showCrostini_]]"
+            show-plugin-vm="[[showPluginVm_]]"
+            show-multidevice="[[showMultidevice_]]"
+            have-play-store-app="[[havePlayStoreApp_]]"
+            on-iron-activate="onIronActivate_"
+            advanced-opened="{{advancedOpened_}}">
+        </settings-menu>
+      </div>
       <settings-main id="main" prefs="{{prefs}}"
           toolbar-spinner-active="{{toolbarSpinnerActive_}}"
           page-visibility="[[pageVisibility_]]"
@@ -93,6 +159,9 @@
           have-play-store-app="[[havePlayStoreApp_]]"
           advanced-toggle-expanded="{{advancedOpened_}}">
       </settings-main>
+      <!-- An additional child of the flex #container to take up space,
+           aligned with the right-hand child of the flex toolbar. -->
+      <div id="right"></div>
     </div>
   </template>
   <script src="settings_ui.js"></script>
diff --git a/chrome/browser/resources/settings/settings_ui/settings_ui.js b/chrome/browser/resources/settings/settings_ui/settings_ui.js
index b0c16095..f94ab482 100644
--- a/chrome/browser/resources/settings/settings_ui/settings_ui.js
+++ b/chrome/browser/resources/settings/settings_ui/settings_ui.js
@@ -45,6 +45,9 @@
       value: false,
     },
 
+    /** @private */
+    narrow_: Boolean,
+
     /**
      * @private {!PageVisibility}
      */
diff --git a/chrome/browser/safe_browsing/download_protection/file_analyzer.cc b/chrome/browser/safe_browsing/download_protection/file_analyzer.cc
index 4d4756b..d41df53 100644
--- a/chrome/browser/safe_browsing/download_protection/file_analyzer.cc
+++ b/chrome/browser/safe_browsing/download_protection/file_analyzer.cc
@@ -181,8 +181,8 @@
   UMA_HISTOGRAM_BOOLEAN(
       "SBClientDownload.ZipFileHasArchiveButNoExecutable",
       archive_results.has_archive && !archive_results.has_executable);
-  UMA_HISTOGRAM_TIMES("SBClientDownload.ExtractZipFeaturesTime",
-                      base::TimeTicks::Now() - zip_analysis_start_time_);
+  UMA_HISTOGRAM_MEDIUM_TIMES("SBClientDownload.ExtractZipFeaturesTimeMedium",
+                             base::TimeTicks::Now() - zip_analysis_start_time_);
   for (const auto& file_name : archive_results.archived_archive_filenames)
     RecordArchivedArchiveFileExtensionType(file_name);
 
@@ -251,8 +251,8 @@
   UMA_HISTOGRAM_BOOLEAN(
       "SBClientDownload.RarFileHasArchiveButNoExecutable",
       archive_results.has_archive && !archive_results.has_executable);
-  UMA_HISTOGRAM_TIMES("SBClientDownload.ExtractRarFeaturesTime",
-                      base::TimeTicks::Now() - rar_analysis_start_time_);
+  UMA_HISTOGRAM_MEDIUM_TIMES("SBClientDownload.ExtractRarFeaturesTimeMedium",
+                             base::TimeTicks::Now() - rar_analysis_start_time_);
   for (const auto& file_name : archive_results.archived_archive_filenames)
     RecordArchivedArchiveFileExtensionType(file_name);
 
@@ -350,8 +350,8 @@
                              uma_file_type);
   }
 
-  UMA_HISTOGRAM_TIMES("SBClientDownload.ExtractDmgFeaturesTime",
-                      base::TimeTicks::Now() - dmg_analysis_start_time_);
+  UMA_HISTOGRAM_MEDIUM_TIMES("SBClientDownload.ExtractDmgFeaturesTimeMedium",
+                             base::TimeTicks::Now() - dmg_analysis_start_time_);
 
   std::move(callback_).Run(std::move(results_));
 }
diff --git a/chrome/browser/safe_browsing/safe_browsing_controller_client.cc b/chrome/browser/safe_browsing/safe_browsing_controller_client.cc
index 3411f3c..d8bffdf 100644
--- a/chrome/browser/safe_browsing/safe_browsing_controller_client.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_controller_client.cc
@@ -14,7 +14,7 @@
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/extensions/hosted_app_browser_controller.h"
-#include "chrome/browser/ui/web_app_browser_controller.h"
+#include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #endif  // BUILDFLAG(ENABLE_EXTENSIONS)
 
 SafeBrowsingControllerClient::SafeBrowsingControllerClient(
@@ -39,7 +39,7 @@
   // to a regular Chrome window and proceed as usual there.
   Browser* browser = chrome::FindBrowserWithWebContents(web_contents_);
   if (browser &&
-      WebAppBrowserController::IsForExperimentalWebAppBrowser(browser)) {
+      web_app::AppBrowserController::IsForExperimentalWebAppBrowser(browser)) {
     chrome::OpenInChrome(browser);
   }
 #endif  // BUILDFLAG(ENABLE_EXTENSIONS)
diff --git a/chrome/browser/safe_browsing/threat_details_unittest.cc b/chrome/browser/safe_browsing/threat_details_unittest.cc
index 4b21c607..8f45785 100644
--- a/chrome/browser/safe_browsing/threat_details_unittest.cc
+++ b/chrome/browser/safe_browsing/threat_details_unittest.cc
@@ -43,6 +43,7 @@
 using content::BrowserThread;
 using content::WebContents;
 using testing::_;
+using testing::DoAll;
 using testing::Eq;
 using testing::Return;
 using testing::SetArgPointee;
diff --git a/chrome/browser/search/local_ntp_source.cc b/chrome/browser/search/local_ntp_source.cc
index 35b3a81..3e6f84b4 100644
--- a/chrome/browser/search/local_ntp_source.cc
+++ b/chrome/browser/search/local_ntp_source.cc
@@ -623,6 +623,8 @@
       config_data.SetBoolean(
           "richerPicker",
           base::FeatureList::IsEnabled(features::kNtpCustomizationMenuV2));
+      config_data.SetBoolean("chromeColors", base::FeatureList::IsEnabled(
+                                                 features::kChromeColors));
     }
 
     // Serialize the dictionary.
@@ -995,6 +997,8 @@
         l10n_util::GetStringUTF16(IDS_NTP_CUSTOMIZE_MENU_SHORTCUTS_LABEL));
     replacements["colorsOption"] = base::UTF16ToUTF8(
         l10n_util::GetStringUTF16(IDS_NTP_CUSTOMIZE_MENU_COLORS_LABEL));
+    replacements["uploadImage"] = base::UTF16ToUTF8(
+        l10n_util::GetStringUTF16(IDS_NTP_CUSTOM_BG_UPLOAD_AN_IMAGE));
 
     replacements["bgPreloader"] = "";
     GURL custom_background_url = GetCustomBackgroundURL(profile_->GetPrefs());
diff --git a/chrome/browser/search/ntp_features.cc b/chrome/browser/search/ntp_features.cc
index 1b6929f..606e4ff 100644
--- a/chrome/browser/search/ntp_features.cc
+++ b/chrome/browser/search/ntp_features.cc
@@ -9,6 +9,10 @@
 
 namespace features {
 
+// If enabled, 'Chrome Colors' menu becomes visible in the customization picker.
+const base::Feature kChromeColors{"ChromeColors",
+                                  base::FEATURE_DISABLED_BY_DEFAULT};
+
 // If enabled, does not fade in most visited tiles on initial page load.
 const base::Feature kDisableInitialMostVisitedFadeIn{
     "DisableInitialMostVisitedFadeIn", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/chrome/browser/search/ntp_features.h b/chrome/browser/search/ntp_features.h
index 3211ce94..a642e74d 100644
--- a/chrome/browser/search/ntp_features.h
+++ b/chrome/browser/search/ntp_features.h
@@ -12,6 +12,7 @@
 // The features should be documented alongside the definition of their values in
 // the .cc file.
 
+extern const base::Feature kChromeColors;
 extern const base::Feature kDisableInitialMostVisitedFadeIn;
 extern const base::Feature kNtpCustomizationMenuV2;
 extern const base::Feature kRemoveNtpFakebox;
diff --git a/chrome/browser/ssl/ssl_error_controller_client.cc b/chrome/browser/ssl/ssl_error_controller_client.cc
index b8f15976..3fcd5d7 100644
--- a/chrome/browser/ssl/ssl_error_controller_client.cc
+++ b/chrome/browser/ssl/ssl_error_controller_client.cc
@@ -198,7 +198,7 @@
   // to a regular Chrome window and proceed as usual there.
   Browser* browser = chrome::FindBrowserWithWebContents(web_contents_);
   if (browser &&
-      WebAppBrowserController::IsForExperimentalWebAppBrowser(browser)) {
+      web_app::AppBrowserController::IsForExperimentalWebAppBrowser(browser)) {
     chrome::OpenInChrome(browser);
   }
 #endif  // BUILDFLAG(ENABLE_EXTENSIONS)
diff --git a/chrome/browser/ssl/ssl_error_navigation_throttle.cc b/chrome/browser/ssl/ssl_error_navigation_throttle.cc
index f0e6c98..94e497a1 100644
--- a/chrome/browser/ssl/ssl_error_navigation_throttle.cc
+++ b/chrome/browser/ssl/ssl_error_navigation_throttle.cc
@@ -18,7 +18,7 @@
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/extensions/hosted_app_browser_controller.h"
-#include "chrome/browser/ui/web_app_browser_controller.h"
+#include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #endif  // BUILDFLAG(ENABLE_EXTENSIONS)
 
 SSLErrorNavigationThrottle::SSLErrorNavigationThrottle(
@@ -90,7 +90,7 @@
   Browser* browser =
       chrome::FindBrowserWithWebContents(handle->GetWebContents());
   if (browser &&
-      WebAppBrowserController::IsForExperimentalWebAppBrowser(browser)) {
+      web_app::AppBrowserController::IsForExperimentalWebAppBrowser(browser)) {
     QueueShowInterstitial(
         std::move(handle_ssl_error_callback_), handle->GetWebContents(),
         // The navigation handle's net error code will be
diff --git a/chrome/browser/sync/test/integration/autofill_helper.cc b/chrome/browser/sync/test/integration/autofill_helper.cc
index 2ad3a5e..664b23d 100644
--- a/chrome/browser/sync/test/integration/autofill_helper.cc
+++ b/chrome/browser/sync/test/integration/autofill_helper.cc
@@ -19,9 +19,9 @@
 #include "chrome/browser/sync/test/integration/sync_datatype_helper.h"
 #include "chrome/browser/sync/test/integration/sync_test.h"
 #include "chrome/browser/web_data_service_factory.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/autofill_type.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/webdata/autofill_entry.h"
 #include "components/autofill/core/browser/webdata/autofill_table.h"
diff --git a/chrome/browser/sync/test/integration/enable_disable_test.cc b/chrome/browser/sync/test/integration/enable_disable_test.cc
index ac58311..5441a92 100644
--- a/chrome/browser/sync/test/integration/enable_disable_test.cc
+++ b/chrome/browser/sync/test/integration/enable_disable_test.cc
@@ -22,7 +22,6 @@
 #include "components/sync/driver/sync_user_settings_impl.h"
 #include "components/sync/test/fake_server/bookmark_entity_builder.h"
 #include "components/sync/test/fake_server/entity_builder_factory.h"
-#include "components/sync/test/fake_server/fake_server_http_post_provider.h"
 
 namespace {
 
@@ -443,39 +442,6 @@
   EXPECT_EQ(cache_guid, prefs.GetCacheGuid());
 }
 
-IN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest,
-                       PRE_RestartDuringInitialSync) {
-  SetupSyncNoWaitingForCompletion();
-
-  // The intended scenario being tested involves an ongoing initial sync. This
-  // means a cache GUID has been generated, but the initial birthday hasn't been
-  // received yet (which is received from the server as part of the initial
-  // GetUpdates request).
-  SyncPrefs prefs(GetProfile(0)->GetPrefs());
-  ASSERT_NE("", prefs.GetCacheGuid());
-  ASSERT_EQ("", prefs.GetBirthday());
-
-  // Mimic a non-responding server (slow connection) during shutdown, to make
-  // sure test teardown logic doesn't fetch the birthday. This is asserted in
-  // the next test and would otherwise fail.
-  fake_server::FakeServerHttpPostProvider::SetNetworkDelay(
-      base::TimeDelta::Max());
-}
-
-IN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest,
-                       RestartDuringInitialSync) {
-  ASSERT_TRUE(SetupClients());
-
-  SyncPrefs prefs(GetProfile(0)->GetPrefs());
-  ASSERT_NE("", prefs.GetCacheGuid());
-  ASSERT_EQ("", prefs.GetBirthday());
-
-  EXPECT_TRUE(GetClient(0)->AwaitSyncSetupCompletion());
-
-  ASSERT_NE("", prefs.GetCacheGuid());
-  EXPECT_NE("", prefs.GetBirthday());
-}
-
 class EnableDisableSingleClientSelfNotifyTest
     : public EnableDisableSingleClientTest {
  public:
diff --git a/chrome/browser/sync/test/integration/performance/autofill_sync_perf_test.cc b/chrome/browser/sync/test/integration/performance/autofill_sync_perf_test.cc
index 61f0e35..ce7e918 100644
--- a/chrome/browser/sync/test/integration/performance/autofill_sync_perf_test.cc
+++ b/chrome/browser/sync/test/integration/performance/autofill_sync_perf_test.cc
@@ -12,8 +12,8 @@
 #include "chrome/browser/sync/test/integration/performance/sync_timing_helper.h"
 #include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
 #include "chrome/browser/sync/test/integration/sync_test.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/webdata/autofill_entry.h"
 #include "components/sync/driver/sync_driver_switches.h"
 
diff --git a/chrome/browser/sync/test/integration/single_client_autofill_profile_sync_test.cc b/chrome/browser/sync/test/integration/single_client_autofill_profile_sync_test.cc
index 37ed86d7..db06da9 100644
--- a/chrome/browser/sync/test/integration/single_client_autofill_profile_sync_test.cc
+++ b/chrome/browser/sync/test/integration/single_client_autofill_profile_sync_test.cc
@@ -9,7 +9,7 @@
 #include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
 #include "chrome/browser/sync/test/integration/single_client_status_change_checker.h"
 #include "chrome/browser/sync/test/integration/sync_test.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/common/autofill_prefs.h"
 #include "components/prefs/pref_service.h"
diff --git a/chrome/browser/sync/test/integration/single_client_wallet_sync_test.cc b/chrome/browser/sync/test/integration/single_client_wallet_sync_test.cc
index 042ab28..d9b79683 100644
--- a/chrome/browser/sync/test/integration/single_client_wallet_sync_test.cc
+++ b/chrome/browser/sync/test/integration/single_client_wallet_sync_test.cc
@@ -19,9 +19,9 @@
 #include "chrome/browser/sync/test/integration/wallet_helper.h"
 #include "chrome/browser/web_data_service_factory.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
-#include "components/autofill/core/browser/autofill_metadata.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_metadata.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/payments/payments_customer_data.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
diff --git a/chrome/browser/sync/test/integration/two_client_autofill_sync_test.cc b/chrome/browser/sync/test/integration/two_client_autofill_sync_test.cc
index f1a81a4..d0fe64b 100644
--- a/chrome/browser/sync/test/integration/two_client_autofill_sync_test.cc
+++ b/chrome/browser/sync/test/integration/two_client_autofill_sync_test.cc
@@ -10,9 +10,9 @@
 #include "chrome/browser/sync/test/integration/autofill_helper.h"
 #include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
 #include "chrome/browser/sync/test/integration/sync_test.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/webdata/autofill_table.h"
 #include "components/sync/driver/sync_driver_switches.h"
diff --git a/chrome/browser/sync/test/integration/two_client_wallet_sync_test.cc b/chrome/browser/sync/test/integration/two_client_wallet_sync_test.cc
index 17ae71c..eb9f3417 100644
--- a/chrome/browser/sync/test/integration/two_client_wallet_sync_test.cc
+++ b/chrome/browser/sync/test/integration/two_client_wallet_sync_test.cc
@@ -6,9 +6,9 @@
 #include "chrome/browser/sync/test/integration/autofill_helper.h"
 #include "chrome/browser/sync/test/integration/sync_test.h"
 #include "chrome/browser/sync/test/integration/wallet_helper.h"
-#include "components/autofill/core/browser/autofill_metadata.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_metadata.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/test_autofill_clock.h"
 #include "components/autofill/core/common/autofill_util.h"
diff --git a/chrome/browser/sync/test/integration/wallet_helper.cc b/chrome/browser/sync/test/integration/wallet_helper.cc
index 1f8754e..1b1e88db 100644
--- a/chrome/browser/sync/test/integration/wallet_helper.cc
+++ b/chrome/browser/sync/test/integration/wallet_helper.cc
@@ -14,8 +14,8 @@
 #include "chrome/browser/sync/test/integration/sync_test.h"
 #include "chrome/browser/web_data_service_factory.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
-#include "components/autofill/core/browser/autofill_metadata.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_metadata.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/payments/payments_customer_data.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/webdata/autofill_table.h"
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 405c6db..f7d66f5 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -1375,8 +1375,8 @@
       "ash/ash_shell_init.h",
       "ash/ash_util.cc",
       "ash/ash_util.h",
-      "ash/cast_config_client_media_router.cc",
-      "ash/cast_config_client_media_router.h",
+      "ash/cast_config_controller_media_router.cc",
+      "ash/cast_config_controller_media_router.h",
       "ash/chrome_accessibility_delegate.cc",
       "ash/chrome_accessibility_delegate.h",
       "ash/chrome_browser_main_extra_parts_ash.cc",
@@ -2982,8 +2982,6 @@
       "views/webauthn/sheet_view_factory.h",
       "views_mode_controller.cc",
       "views_mode_controller.h",
-      "web_app_browser_controller.cc",
-      "web_app_browser_controller.h",
       "webauthn/account_hover_list_model.cc",
       "webauthn/account_hover_list_model.h",
       "webauthn/authenticator_request_sheet_model.h",
@@ -3589,6 +3587,8 @@
       "views/extensions/media_galleries_dialog_views.h",
       "views/extensions/media_gallery_checkbox_view.cc",
       "views/extensions/media_gallery_checkbox_view.h",
+      "web_applications/app_browser_controller.cc",
+      "web_applications/app_browser_controller.h",
       "web_applications/system_web_app_ui_utils_chromeos.cc",
       "web_applications/system_web_app_ui_utils_chromeos.h",
       "web_applications/web_app_dialog_utils.cc",
diff --git a/chrome/browser/ui/android/autofill/credit_card_scanner_view_android.cc b/chrome/browser/ui/android/autofill/credit_card_scanner_view_android.cc
index 824150d..09e2b4b 100644
--- a/chrome/browser/ui/android/autofill/credit_card_scanner_view_android.cc
+++ b/chrome/browser/ui/android/autofill/credit_card_scanner_view_android.cc
@@ -11,7 +11,7 @@
 #include "base/memory/ptr_util.h"
 #include "chrome/browser/ui/android/view_android_helper.h"
 #include "chrome/browser/ui/autofill/payments/credit_card_scanner_view_delegate.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "jni/CreditCardScannerBridge_jni.h"
 #include "ui/android/view_android.h"
diff --git a/chrome/browser/ui/ash/cast_config_client_media_router.cc b/chrome/browser/ui/ash/cast_config_client_media_router.cc
deleted file mode 100644
index 6311742..0000000
--- a/chrome/browser/ui/ash/cast_config_client_media_router.cc
+++ /dev/null
@@ -1,253 +0,0 @@
-// Copyright 2015 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 "chrome/browser/ui/ash/cast_config_client_media_router.h"
-
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "ash/public/interfaces/constants.mojom.h"
-#include "base/bind_helpers.h"
-#include "base/macros.h"
-#include "base/optional.h"
-#include "base/strings/string_util.h"
-#include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/media/router/media_router.h"
-#include "chrome/browser/media/router/media_router_factory.h"
-#include "chrome/browser/media/router/media_router_feature.h"
-#include "chrome/browser/media/router/media_routes_observer.h"
-#include "chrome/browser/media/router/media_sinks_observer.h"
-#include "chrome/browser/profiles/profile_manager.h"
-#include "chrome/common/media_router/media_source_helper.h"
-#include "chrome/common/url_constants.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/notification_source.h"
-#include "content/public/common/service_manager_connection.h"
-#include "services/service_manager/public/cpp/connector.h"
-
-namespace {
-
-media_router::MediaRouter* media_router_for_test_ = nullptr;
-
-// Returns the MediaRouter instance for the current primary profile.
-media_router::MediaRouter* GetMediaRouter() {
-  if (media_router_for_test_)
-    return media_router_for_test_;
-
-  auto* router = media_router::MediaRouterFactory::GetApiForBrowserContext(
-      ProfileManager::GetPrimaryUserProfile());
-  DCHECK(router);
-  return router;
-}
-
-// "Cast for Education" extension uses this string and expects the client to
-// interpret it as "signed-in user's domain".
-constexpr char const kDefaultDomain[] = "default";
-
-}  // namespace
-
-// This class caches the values that the observers give us so we can query them
-// at any point in time. It also emits a device refresh event when new data is
-// available.
-class CastDeviceCache : public media_router::MediaRoutesObserver,
-                        public media_router::MediaSinksObserver {
- public:
-  using MediaSinks = std::vector<media_router::MediaSink>;
-  using MediaRoutes = std::vector<media_router::MediaRoute>;
-  using MediaRouteIds = std::vector<media_router::MediaRoute::Id>;
-
-  explicit CastDeviceCache(ash::mojom::CastConfigClient* cast_config_client);
-  ~CastDeviceCache() override;
-
-  // This may call cast_config_client->RequestDeviceRefresh() before
-  // returning.
-  void Init();
-
-  const MediaSinks& sinks() const { return sinks_; }
-  const MediaRoutes& routes() const { return routes_; }
-
- private:
-  // media_router::MediaSinksObserver:
-  void OnSinksReceived(const MediaSinks& sinks) override;
-
-  // media_router::MediaRoutesObserver:
-  void OnRoutesUpdated(const MediaRoutes& routes,
-                       const MediaRouteIds& unused_joinable_route_ids) override;
-
-  MediaSinks sinks_;
-  MediaRoutes routes_;
-
-  // Not owned.
-  ash::mojom::CastConfigClient* cast_config_client_;
-
-  DISALLOW_COPY_AND_ASSIGN(CastDeviceCache);
-};
-
-CastDeviceCache::CastDeviceCache(
-    ash::mojom::CastConfigClient* cast_config_client)
-    : MediaRoutesObserver(GetMediaRouter()),
-      MediaSinksObserver(
-          GetMediaRouter(),
-          media_router::MediaSourceForDesktop(),
-          url::Origin::Create(GURL(chrome::kChromeUIMediaRouterURL))),
-      cast_config_client_(cast_config_client) {}
-
-CastDeviceCache::~CastDeviceCache() {}
-
-void CastDeviceCache::Init() {
-  CHECK(MediaSinksObserver::Init());
-}
-
-void CastDeviceCache::OnSinksReceived(const MediaSinks& sinks) {
-  sinks_.clear();
-  for (const media_router::MediaSink& sink : sinks) {
-    // The media router adds a MediaSink instance that doesn't have a name. Make
-    // sure to filter that sink out from the UI so it is not rendered, as it
-    // will be a line that only has a icon with no apparent meaning.
-    if (sink.name().empty())
-      continue;
-
-    // Hide all sinks which have a non-default domain (ie, castouts) to meet
-    // privacy requirements. This will be enabled once UI can display the
-    // domain. See crbug.com/624016.
-    if (sink.domain() && !sink.domain()->empty() &&
-        sink.domain() != kDefaultDomain) {
-      continue;
-    }
-
-    sinks_.push_back(sink);
-  }
-
-  cast_config_client_->RequestDeviceRefresh();
-}
-
-void CastDeviceCache::OnRoutesUpdated(
-    const MediaRoutes& routes,
-    const MediaRouteIds& unused_joinable_route_ids) {
-  routes_ = routes;
-  cast_config_client_->RequestDeviceRefresh();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// CastConfigClientMediaRouter:
-
-void CastConfigClientMediaRouter::SetMediaRouterForTest(
-    media_router::MediaRouter* media_router) {
-  media_router_for_test_ = media_router;
-}
-
-CastConfigClientMediaRouter::CastConfigClientMediaRouter() : binding_(this) {
-  // TODO(jdufault): This should use a callback interface once there is an
-  // equivalent. See crbug.com/666005.
-  registrar_.Add(this, chrome::NOTIFICATION_LOGIN_USER_PROFILE_PREPARED,
-                 content::NotificationService::AllSources());
-
-  // When starting up, we need to connect to ash and set ourselves as the
-  // client.
-  content::ServiceManagerConnection::GetForProcess()
-      ->GetConnector()
-      ->BindInterface(ash::mojom::kServiceName, &cast_config_);
-
-  // Register this object as the client interface implementation.
-  ash::mojom::CastConfigClientAssociatedPtrInfo ptr_info;
-  binding_.Bind(mojo::MakeRequest(&ptr_info));
-  cast_config_->SetClient(std::move(ptr_info));
-}
-
-CastConfigClientMediaRouter::~CastConfigClientMediaRouter() {}
-
-CastDeviceCache* CastConfigClientMediaRouter::devices() {
-  // The CastDeviceCache instance is lazily allocated because the MediaRouter
-  // component is not ready when the constructor is invoked.
-  if (!devices_ && GetMediaRouter()) {
-    devices_ = std::make_unique<CastDeviceCache>(this);
-    devices_->Init();
-  }
-
-  return devices_.get();
-}
-
-void CastConfigClientMediaRouter::RequestDeviceRefresh() {
-  // The media router component isn't ready yet.
-  if (!devices())
-    return;
-
-  // We failed to connect to ash; don't crash in release.
-  if (!cast_config_) {
-    NOTREACHED();
-    return;
-  }
-
-  // Build the old-style SinkAndRoute set out of the MediaRouter
-  // source/sink/route setup. We first map the existing sinks, and then we
-  // update those sinks with activity information.
-
-  std::vector<ash::mojom::SinkAndRoutePtr> items;
-
-  for (const media_router::MediaSink& sink : devices()->sinks()) {
-    ash::mojom::SinkAndRoutePtr sr = ash::mojom::SinkAndRoute::New();
-    sr->route = ash::mojom::CastRoute::New();
-    sr->sink = ash::mojom::CastSink::New();
-    sr->sink->id = sink.id();
-    sr->sink->name = sink.name();
-    sr->sink->domain = sink.domain().value_or(std::string());
-    // TODO(crbug.com/788854): Replace SinkIconType with
-    // ash::mojom::SinkIconType.
-    sr->sink->sink_icon_type =
-        static_cast<ash::mojom::SinkIconType>(sink.icon_type());
-    items.push_back(std::move(sr));
-  }
-
-  for (const media_router::MediaRoute& route : devices()->routes()) {
-    if (!route.for_display())
-      continue;
-
-    for (ash::mojom::SinkAndRoutePtr& item : items) {
-      if (item->sink->id == route.media_sink_id()) {
-        item->route->id = route.media_route_id();
-        item->route->title = route.description();
-        item->route->is_local_source = route.is_local();
-
-        // Default to a tab/app capture. This will display the media router
-        // description. This means we will properly support DIAL casts.
-        item->route->content_source = ash::mojom::ContentSource::TAB;
-        if (media_router::IsDesktopMirroringMediaSource(route.media_source()))
-          item->route->content_source = ash::mojom::ContentSource::DESKTOP;
-
-        break;
-      }
-    }
-  }
-
-  cast_config_->OnDevicesUpdated(std::move(items));
-}
-
-void CastConfigClientMediaRouter::CastToSink(ash::mojom::CastSinkPtr sink) {
-  // TODO(imcheng): Pass in tab casting timeout.
-  GetMediaRouter()->CreateRoute(
-      media_router::MediaSourceForDesktop().id(), sink->id,
-      url::Origin::Create(GURL("http://cros-cast-origin/")), nullptr,
-      base::DoNothing(), base::TimeDelta(), false);
-}
-
-void CastConfigClientMediaRouter::StopCasting(ash::mojom::CastRoutePtr route) {
-  GetMediaRouter()->TerminateRoute(route->id);
-}
-
-void CastConfigClientMediaRouter::Observe(
-    int type,
-    const content::NotificationSource& source,
-    const content::NotificationDetails& details) {
-  switch (type) {
-    case chrome::NOTIFICATION_LOGIN_USER_PROFILE_PREPARED:
-      // The active profile has changed, which means that the media router has
-      // as well. Reset the device cache to ensure we are using up-to-date
-      // object instances.
-      devices_.reset();
-      RequestDeviceRefresh();
-      break;
-  }
-}
diff --git a/chrome/browser/ui/ash/cast_config_client_media_router.h b/chrome/browser/ui/ash/cast_config_client_media_router.h
deleted file mode 100644
index 363db31a..0000000
--- a/chrome/browser/ui/ash/cast_config_client_media_router.h
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2015 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 CHROME_BROWSER_UI_ASH_CAST_CONFIG_CLIENT_MEDIA_ROUTER_H_
-#define CHROME_BROWSER_UI_ASH_CAST_CONFIG_CLIENT_MEDIA_ROUTER_H_
-
-#include <memory>
-
-#include "ash/public/interfaces/cast_config.mojom.h"
-#include "base/macros.h"
-#include "base/observer_list.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
-#include "mojo/public/cpp/bindings/associated_binding.h"
-#include "mojo/public/cpp/bindings/interface_ptr_set.h"
-
-namespace media_router {
-class MediaRouter;
-}
-
-class CastDeviceCache;
-
-// A class which allows the ash tray to communicate with the media router.
-class CastConfigClientMediaRouter : public ash::mojom::CastConfigClient,
-                                    public content::NotificationObserver {
- public:
-  CastConfigClientMediaRouter();
-  ~CastConfigClientMediaRouter() override;
-
-  static void SetMediaRouterForTest(media_router::MediaRouter* media_router);
-
- private:
-  // CastConfigClient:
-  void RequestDeviceRefresh() override;
-  void CastToSink(ash::mojom::CastSinkPtr sink) override;
-  void StopCasting(ash::mojom::CastRoutePtr route) override;
-
-  // content::NotificationObserver:
-  void Observe(int type,
-               const content::NotificationSource& source,
-               const content::NotificationDetails& details) override;
-
-  // |devices_| stores the current source/route status that we query from.
-  // This will return null until the media router is initialized.
-  CastDeviceCache* devices();
-  std::unique_ptr<CastDeviceCache> devices_;
-
-  content::NotificationRegistrar registrar_;
-
-  ash::mojom::CastConfigPtr cast_config_;
-
-  mojo::AssociatedBinding<ash::mojom::CastConfigClient> binding_;
-
-  DISALLOW_COPY_AND_ASSIGN(CastConfigClientMediaRouter);
-};
-
-#endif  // CHROME_BROWSER_UI_ASH_CAST_CONFIG_CLIENT_MEDIA_ROUTER_H_
diff --git a/chrome/browser/ui/ash/cast_config_controller_media_router.cc b/chrome/browser/ui/ash/cast_config_controller_media_router.cc
new file mode 100644
index 0000000..b467783
--- /dev/null
+++ b/chrome/browser/ui/ash/cast_config_controller_media_router.cc
@@ -0,0 +1,270 @@
+// Copyright 2015 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 "chrome/browser/ui/ash/cast_config_controller_media_router.h"
+
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "base/bind_helpers.h"
+#include "base/callback.h"
+#include "base/macros.h"
+#include "base/optional.h"
+#include "base/strings/string_util.h"
+#include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/chromeos/profiles/profile_helper.h"
+#include "chrome/browser/media/router/media_router.h"
+#include "chrome/browser/media/router/media_router_factory.h"
+#include "chrome/browser/media/router/media_router_feature.h"
+#include "chrome/browser/media/router/media_routes_observer.h"
+#include "chrome/browser/media/router/media_sinks_observer.h"
+#include "chrome/common/media_router/media_source_helper.h"
+#include "chrome/common/url_constants.h"
+#include "components/user_manager/user_manager.h"
+#include "content/public/browser/notification_service.h"
+#include "content/public/browser/notification_source.h"
+
+namespace {
+
+base::Optional<media_router::MediaRouter*> media_router_for_test_;
+
+// Returns the MediaRouter instance for the current primary profile, if there is
+// one.
+media_router::MediaRouter* GetMediaRouter() {
+  if (media_router_for_test_)
+    return *media_router_for_test_;
+
+  if (!user_manager::UserManager::IsInitialized())
+    return nullptr;
+
+  auto* user = user_manager::UserManager::Get()->GetPrimaryUser();
+  if (!user)
+    return nullptr;
+
+  Profile* profile = chromeos::ProfileHelper::Get()->GetProfileByUser(user);
+  if (!profile)
+    return nullptr;
+
+  auto* router =
+      media_router::MediaRouterFactory::GetApiForBrowserContext(profile);
+  DCHECK(router);
+  return router;
+}
+
+// "Cast for Education" extension uses this string and expects the client to
+// interpret it as "signed-in user's domain".
+constexpr char const kDefaultDomain[] = "default";
+
+}  // namespace
+
+// This class caches the values that the observers give us so we can query them
+// at any point in time. It also emits a device refresh event when new data is
+// available.
+class CastDeviceCache : public media_router::MediaRoutesObserver,
+                        public media_router::MediaSinksObserver {
+ public:
+  using MediaSinks = std::vector<media_router::MediaSink>;
+  using MediaRoutes = std::vector<media_router::MediaRoute>;
+  using MediaRouteIds = std::vector<media_router::MediaRoute::Id>;
+
+  explicit CastDeviceCache(
+      const base::RepeatingClosure& update_devices_callback);
+  ~CastDeviceCache() override;
+
+  // This may run |update_devices_callback_| before returning.
+  void Init();
+
+  const MediaSinks& sinks() const { return sinks_; }
+  const MediaRoutes& routes() const { return routes_; }
+
+ private:
+  // media_router::MediaSinksObserver:
+  void OnSinksReceived(const MediaSinks& sinks) override;
+
+  // media_router::MediaRoutesObserver:
+  void OnRoutesUpdated(const MediaRoutes& routes,
+                       const MediaRouteIds& unused_joinable_route_ids) override;
+
+  MediaSinks sinks_;
+  MediaRoutes routes_;
+
+  base::RepeatingClosure update_devices_callback_;
+
+  DISALLOW_COPY_AND_ASSIGN(CastDeviceCache);
+};
+
+CastDeviceCache::CastDeviceCache(
+    const base::RepeatingClosure& update_devices_callback)
+    : MediaRoutesObserver(GetMediaRouter()),
+      MediaSinksObserver(
+          GetMediaRouter(),
+          media_router::MediaSourceForDesktop(),
+          url::Origin::Create(GURL(chrome::kChromeUIMediaRouterURL))),
+      update_devices_callback_(update_devices_callback) {}
+
+CastDeviceCache::~CastDeviceCache() = default;
+
+void CastDeviceCache::Init() {
+  CHECK(MediaSinksObserver::Init());
+}
+
+void CastDeviceCache::OnSinksReceived(const MediaSinks& sinks) {
+  sinks_.clear();
+  for (const media_router::MediaSink& sink : sinks) {
+    // The media router adds a MediaSink instance that doesn't have a name. Make
+    // sure to filter that sink out from the UI so it is not rendered, as it
+    // will be a line that only has a icon with no apparent meaning.
+    if (sink.name().empty())
+      continue;
+
+    // Hide all sinks which have a non-default domain (ie, castouts) to meet
+    // privacy requirements. This will be enabled once UI can display the
+    // domain. See crbug.com/624016.
+    if (sink.domain() && !sink.domain()->empty() &&
+        sink.domain() != kDefaultDomain) {
+      continue;
+    }
+
+    sinks_.push_back(sink);
+  }
+
+  update_devices_callback_.Run();
+}
+
+void CastDeviceCache::OnRoutesUpdated(
+    const MediaRoutes& routes,
+    const MediaRouteIds& unused_joinable_route_ids) {
+  routes_ = routes;
+  update_devices_callback_.Run();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// CastConfigControllerMediaRouter:
+
+void CastConfigControllerMediaRouter::SetMediaRouterForTest(
+    media_router::MediaRouter* media_router) {
+  media_router_for_test_ = media_router;
+}
+
+CastConfigControllerMediaRouter::CastConfigControllerMediaRouter() {
+  // TODO(jdufault): This should use a callback interface once there is an
+  // equivalent. See crbug.com/666005.
+  registrar_.Add(this, chrome::NOTIFICATION_LOGIN_USER_PROFILE_PREPARED,
+                 content::NotificationService::AllSources());
+}
+
+CastConfigControllerMediaRouter::~CastConfigControllerMediaRouter() = default;
+
+CastDeviceCache* CastConfigControllerMediaRouter::device_cache() {
+  // The CastDeviceCache instance is lazily allocated because the MediaRouter
+  // component is not ready when the constructor is invoked.
+  if (!device_cache_ && GetMediaRouter()) {
+    device_cache_ = std::make_unique<CastDeviceCache>(base::BindRepeating(
+        &CastConfigControllerMediaRouter::RequestDeviceRefresh,
+        base::Unretained(this)));
+    device_cache_->Init();
+  }
+
+  return device_cache_.get();
+}
+
+void CastConfigControllerMediaRouter::AddObserver(Observer* observer) {
+  observers_.AddObserver(observer);
+}
+
+void CastConfigControllerMediaRouter::RemoveObserver(Observer* observer) {
+  observers_.RemoveObserver(observer);
+}
+
+bool CastConfigControllerMediaRouter::HasSinksAndRoutes() const {
+  return !devices_.empty();
+}
+
+bool CastConfigControllerMediaRouter::HasActiveRoute() const {
+  for (const auto& device : devices_) {
+    if (device.route.is_local_source && !device.route.title.empty())
+      return true;
+  }
+
+  return false;
+}
+
+void CastConfigControllerMediaRouter::RequestDeviceRefresh() {
+  // The media router component isn't ready yet.
+  if (!device_cache())
+    return;
+
+  // Build the old-style SinkAndRoute set out of the MediaRouter
+  // source/sink/route setup. We first map the existing sinks, and then we
+  // update those sinks with activity information.
+  devices_.clear();
+
+  for (const media_router::MediaSink& sink : device_cache()->sinks()) {
+    ash::SinkAndRoute device;
+    device.sink.id = sink.id();
+    device.sink.name = sink.name();
+    device.sink.domain = sink.domain().value_or(std::string());
+    device.sink.sink_icon_type =
+        static_cast<ash::SinkIconType>(sink.icon_type());
+    devices_.push_back(std::move(device));
+  }
+
+  for (const media_router::MediaRoute& route : device_cache()->routes()) {
+    if (!route.for_display())
+      continue;
+
+    for (ash::SinkAndRoute& device : devices_) {
+      if (device.sink.id == route.media_sink_id()) {
+        device.route.id = route.media_route_id();
+        device.route.title = route.description();
+        device.route.is_local_source = route.is_local();
+
+        // Default to a tab/app capture. This will display the media router
+        // description. This means we will properly support DIAL casts.
+        device.route.content_source =
+            media_router::IsDesktopMirroringMediaSource(route.media_source())
+                ? ash::ContentSource::kDesktop
+                : ash::ContentSource::kTab;
+        break;
+      }
+    }
+  }
+
+  for (auto& observer : observers_)
+    observer.OnDevicesUpdated(devices_);
+}
+
+const std::vector<ash::SinkAndRoute>&
+CastConfigControllerMediaRouter::GetSinksAndRoutes() {
+  return devices_;
+}
+
+void CastConfigControllerMediaRouter::CastToSink(const std::string& sink_id) {
+  // TODO(imcheng): Pass in tab casting timeout.
+  GetMediaRouter()->CreateRoute(
+      media_router::MediaSourceForDesktop().id(), sink_id,
+      url::Origin::Create(GURL("http://cros-cast-origin/")), nullptr,
+      base::DoNothing(), base::TimeDelta(), false);
+}
+
+void CastConfigControllerMediaRouter::StopCasting(const std::string& route_id) {
+  GetMediaRouter()->TerminateRoute(route_id);
+}
+
+void CastConfigControllerMediaRouter::Observe(
+    int type,
+    const content::NotificationSource& source,
+    const content::NotificationDetails& details) {
+  switch (type) {
+    case chrome::NOTIFICATION_LOGIN_USER_PROFILE_PREPARED:
+      // The active profile has changed, which means that the media router has
+      // as well. Reset the device cache to ensure we are using up-to-date
+      // object instances.
+      device_cache_.reset();
+      RequestDeviceRefresh();
+      break;
+  }
+}
diff --git a/chrome/browser/ui/ash/cast_config_controller_media_router.h b/chrome/browser/ui/ash/cast_config_controller_media_router.h
new file mode 100644
index 0000000..cf0e3a56
--- /dev/null
+++ b/chrome/browser/ui/ash/cast_config_controller_media_router.h
@@ -0,0 +1,63 @@
+// Copyright 2015 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 CHROME_BROWSER_UI_ASH_CAST_CONFIG_CONTROLLER_MEDIA_ROUTER_H_
+#define CHROME_BROWSER_UI_ASH_CAST_CONFIG_CONTROLLER_MEDIA_ROUTER_H_
+
+#include <memory>
+
+#include "ash/public/cpp/cast_config_controller.h"
+#include "base/macros.h"
+#include "base/observer_list.h"
+#include "content/public/browser/notification_observer.h"
+#include "content/public/browser/notification_registrar.h"
+
+namespace media_router {
+class MediaRouter;
+}
+
+class CastDeviceCache;
+
+// A class which allows the ash tray to communicate with the media router.
+class CastConfigControllerMediaRouter : public ash::CastConfigController,
+                                        public content::NotificationObserver {
+ public:
+  CastConfigControllerMediaRouter();
+  ~CastConfigControllerMediaRouter() override;
+
+  static void SetMediaRouterForTest(media_router::MediaRouter* media_router);
+
+ private:
+  // CastConfigController:
+  void AddObserver(Observer* observer) override;
+  void RemoveObserver(Observer* observer) override;
+  bool HasSinksAndRoutes() const override;
+  bool HasActiveRoute() const override;
+  void RequestDeviceRefresh() override;
+  const std::vector<ash::SinkAndRoute>& GetSinksAndRoutes() override;
+  void CastToSink(const std::string& sink_id) override;
+  void StopCasting(const std::string& route_id) override;
+
+  // content::NotificationObserver:
+  void Observe(int type,
+               const content::NotificationSource& source,
+               const content::NotificationDetails& details) override;
+
+  // |device_cache_| stores the current source/route status that we query from.
+  // This will return null until the media router is initialized.
+  CastDeviceCache* device_cache();
+  std::unique_ptr<CastDeviceCache> device_cache_;
+
+  // The list of available devices in a format more palatable for consumption by
+  // Ash UI.
+  std::vector<ash::SinkAndRoute> devices_;
+
+  base::ObserverList<Observer> observers_;
+
+  content::NotificationRegistrar registrar_;
+
+  DISALLOW_COPY_AND_ASSIGN(CastConfigControllerMediaRouter);
+};
+
+#endif  // CHROME_BROWSER_UI_ASH_CAST_CONFIG_CONTROLLER_MEDIA_ROUTER_H_
diff --git a/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.cc b/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.cc
index fba7d1ef..ed2e5978 100644
--- a/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.cc
+++ b/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.cc
@@ -27,7 +27,7 @@
 #include "chrome/browser/ui/app_list/app_list_client_impl.h"
 #include "chrome/browser/ui/ash/accessibility/accessibility_controller_client.h"
 #include "chrome/browser/ui/ash/ash_shell_init.h"
-#include "chrome/browser/ui/ash/cast_config_client_media_router.h"
+#include "chrome/browser/ui/ash/cast_config_controller_media_router.h"
 #include "chrome/browser/ui/ash/chrome_new_window_client.h"
 #include "chrome/browser/ui/ash/ime_controller_client.h"
 #include "chrome/browser/ui/ash/kiosk_next_shell_client.h"
@@ -151,6 +151,9 @@
       std::make_unique<NetworkConnectDelegateChromeOS>();
   chromeos::NetworkConnect::Initialize(network_connect_delegate_.get());
 
+  cast_config_controller_media_router_ =
+      std::make_unique<CastConfigControllerMediaRouter>();
+
   ash_shell_init_ = std::make_unique<AshShellInit>();
 
   if (ui_devtools::UiDevToolsServer::IsUiDevToolsEnabled(
@@ -208,8 +211,6 @@
 }
 
 void ChromeBrowserMainExtraPartsAsh::PostProfileInit() {
-  cast_config_client_media_router_ =
-      std::make_unique<CastConfigClientMediaRouter>();
   login_screen_client_ = std::make_unique<LoginScreenClient>();
   // https://crbug.com/884127 ensuring that LoginScreenClient is initialized before using it InitializeDeviceDisablingManager.
   g_browser_process->platform_part()->InitializeDeviceDisablingManager();
@@ -277,7 +278,6 @@
   display_settings_handler_.reset();
   media_client_.reset();
   login_screen_client_.reset();
-  cast_config_client_media_router_.reset();
   kiosk_next_shell_client_.reset();
 
   // Initialized in PreProfileInit:
@@ -290,6 +290,7 @@
   // needs to be released before destroying the profile.
   app_list_client_.reset();
   ash_shell_init_.reset();
+  cast_config_controller_media_router_.reset();
 
   chromeos::NetworkConnect::Shutdown();
   network_connect_delegate_.reset();
diff --git a/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.h b/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.h
index 11904b21..790c321 100644
--- a/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.h
+++ b/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.h
@@ -22,7 +22,7 @@
 class AccessibilityControllerClient;
 class AppListClientImpl;
 class AshShellInit;
-class CastConfigClientMediaRouter;
+class CastConfigControllerMediaRouter;
 class ChromeNewWindowClient;
 class ImeControllerClient;
 class KioskNextShellClient;
@@ -66,6 +66,8 @@
 
   // Initialized in PreProfileInit in all configs before Shell init:
   std::unique_ptr<NetworkConnectDelegateChromeOS> network_connect_delegate_;
+  std::unique_ptr<CastConfigControllerMediaRouter>
+      cast_config_controller_media_router_;
 
   // Initialized in PreProfileInit if ash config != MASH:
   std::unique_ptr<AshShellInit> ash_shell_init_;
@@ -96,7 +98,6 @@
 #endif
 
   // Initialized in PostProfileInit in all configs:
-  std::unique_ptr<CastConfigClientMediaRouter> cast_config_client_media_router_;
   std::unique_ptr<KioskNextShellClient> kiosk_next_shell_client_;
   std::unique_ptr<LoginScreenClient> login_screen_client_;
   std::unique_ptr<MediaClient> media_client_;
diff --git a/chrome/browser/ui/ash/system_tray_tray_cast_browsertest_media_router_chromeos.cc b/chrome/browser/ui/ash/system_tray_tray_cast_browsertest_media_router_chromeos.cc
index 48a13856..37835e77 100644
--- a/chrome/browser/ui/ash/system_tray_tray_cast_browsertest_media_router_chromeos.cc
+++ b/chrome/browser/ui/ash/system_tray_tray_cast_browsertest_media_router_chromeos.cc
@@ -6,6 +6,7 @@
 #include <vector>
 
 #include "ash/public/cpp/ash_view_ids.h"
+#include "ash/public/cpp/cast_config_controller.h"
 #include "ash/public/interfaces/ash_message_center_controller.mojom-test-utils.h"
 #include "ash/public/interfaces/ash_message_center_controller.mojom.h"
 #include "ash/public/interfaces/constants.mojom.h"
@@ -16,7 +17,7 @@
 #include "chrome/browser/media/router/media_routes_observer.h"
 #include "chrome/browser/media/router/media_sinks_observer.h"
 #include "chrome/browser/media/router/test/mock_media_router.h"
-#include "chrome/browser/ui/ash/cast_config_client_media_router.h"
+#include "chrome/browser/ui/ash/cast_config_controller_media_router.h"
 #include "chrome/common/media_router/media_source_helper.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "content/public/common/service_manager_connection.h"
@@ -92,6 +93,13 @@
 
  private:
   // InProcessBrowserTest:
+  void SetUp() override {
+    // This makes sure CastDeviceCache is not initialized until after the
+    // MockMediaRouter is ready. (MockMediaRouter can't be constructed yet.)
+    CastConfigControllerMediaRouter::SetMediaRouterForTest(nullptr);
+    InProcessBrowserTest::SetUp();
+  }
+
   void PreRunTestOnMainThread() override {
     media_router_ = std::make_unique<media_router::MockMediaRouter>();
     ON_CALL(*media_router_, RegisterMediaSinksObserver(_))
@@ -100,7 +108,7 @@
     ON_CALL(*media_router_, RegisterMediaRoutesObserver(_))
         .WillByDefault(Invoke(
             this, &SystemTrayTrayCastMediaRouterChromeOSTest::CaptureRoutes));
-    CastConfigClientMediaRouter::SetMediaRouterForTest(media_router_.get());
+    CastConfigControllerMediaRouter::SetMediaRouterForTest(media_router_.get());
     InProcessBrowserTest::PreRunTestOnMainThread();
   }
 
@@ -119,7 +127,7 @@
 
   void PostRunTestOnMainThread() override {
     InProcessBrowserTest::PostRunTestOnMainThread();
-    CastConfigClientMediaRouter::SetMediaRouterForTest(nullptr);
+    CastConfigControllerMediaRouter::SetMediaRouterForTest(nullptr);
   }
 
   bool CaptureSink(media_router::MediaSinksObserver* media_sinks_observer) {
diff --git a/chrome/browser/ui/autofill/autofill_popup_layout_model.cc b/chrome/browser/ui/autofill/autofill_popup_layout_model.cc
index b1402b1..088ca8f 100644
--- a/chrome/browser/ui/autofill/autofill_popup_layout_model.cc
+++ b/chrome/browser/ui/autofill/autofill_popup_layout_model.cc
@@ -13,7 +13,7 @@
 #include "chrome/browser/android/android_theme_resources.h"
 #include "chrome/browser/ui/autofill/autofill_popup_view.h"
 #include "chrome/browser/ui/autofill/popup_constants.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/popup_item_ids.h"
 #include "components/autofill/core/browser/suggestion.h"
 #include "components/autofill/core/common/autofill_features.h"
diff --git a/chrome/browser/ui/autofill/payments/save_card_bubble_controller_impl.h b/chrome/browser/ui/autofill/payments/save_card_bubble_controller_impl.h
index 3fccd9c7..64072d0 100644
--- a/chrome/browser/ui/autofill/payments/save_card_bubble_controller_impl.h
+++ b/chrome/browser/ui/autofill/payments/save_card_bubble_controller_impl.h
@@ -10,7 +10,7 @@
 #include "base/macros.h"
 #include "chrome/browser/ui/autofill/payments/save_card_ui.h"
 #include "components/autofill/core/browser/autofill_client.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/sync_utils.h"
 #include "components/autofill/core/browser/ui/payments/save_card_bubble_controller.h"
 #include "components/security_state/core/security_state.h"
diff --git a/chrome/browser/ui/autofill/payments/save_card_bubble_controller_impl_unittest.cc b/chrome/browser/ui/autofill/payments/save_card_bubble_controller_impl_unittest.cc
index 0893dbbf..7086360 100644
--- a/chrome/browser/ui/autofill/payments/save_card_bubble_controller_impl_unittest.cc
+++ b/chrome/browser/ui/autofill/payments/save_card_bubble_controller_impl_unittest.cc
@@ -22,7 +22,7 @@
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/sync_utils.h"
 #include "components/autofill/core/browser/test_autofill_clock.h"
 #include "components/autofill/core/common/autofill_features.h"
diff --git a/chrome/browser/ui/bookmarks/bookmark_context_menu_controller.cc b/chrome/browser/ui/bookmarks/bookmark_context_menu_controller.cc
index 39211448..34d7e739 100644
--- a/chrome/browser/ui/bookmarks/bookmark_context_menu_controller.cc
+++ b/chrome/browser/ui/bookmarks/bookmark_context_menu_controller.cc
@@ -43,7 +43,7 @@
 constexpr UserMetricsAction kBookmarkBarNewBackgroundTab(
     "BookmarkBar_ContextMenu_OpenAll");
 constexpr UserMetricsAction kBookmarkBarNewWindow(
-    "BookmarkBar_ContextMenu_OpenAll");
+    "BookmarkBar_ContextMenu_OpenAllInNewWindow");
 constexpr UserMetricsAction kBookmarkBarIncognito(
     "BookmarkBar_ContextMenu_OpenAllIncognito");
 constexpr UserMetricsAction kAppMenuBookmarksNewBackgroundTab(
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
index 5230064..7460dcb 100644
--- a/chrome/browser/ui/browser.cc
+++ b/chrome/browser/ui/browser.cc
@@ -148,7 +148,7 @@
 #include "chrome/browser/ui/tabs/tab_menu_model.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/ui/tabs/tab_utils.h"
-#include "chrome/browser/ui/web_app_browser_controller.h"
+#include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "chrome/browser/ui/webui/signin/login_ui_service.h"
 #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h"
 #include "chrome/browser/ui/window_sizer/window_sizer.h"
@@ -284,7 +284,7 @@
 #endif
 }
 
-std::unique_ptr<WebAppBrowserController> MaybeCreateWebAppController(
+std::unique_ptr<web_app::AppBrowserController> MaybeCreateWebAppController(
     Browser* browser) {
 #if BUILDFLAG(ENABLE_EXTENSIONS)
   const std::string extension_id =
@@ -427,7 +427,7 @@
       location_bar_model_delegate_(new BrowserLocationBarModelDelegate(this)),
       live_tab_context_(new BrowserLiveTabContext(this)),
       synced_window_delegate_(new BrowserSyncedWindowDelegate(this)),
-      web_app_controller_(MaybeCreateWebAppController(this)),
+      app_controller_(MaybeCreateWebAppController(this)),
       bookmark_bar_state_(BookmarkBar::HIDDEN),
       command_controller_(new chrome::BrowserCommandController(this)),
       window_has_shown_(false),
@@ -482,8 +482,8 @@
                           : CreateBrowserWindow(std::unique_ptr<Browser>(this),
                                                 params.user_gesture);
 
-  if (web_app_controller_)
-    web_app_controller_->UpdateToolbarVisibility(false);
+  if (app_controller_)
+    app_controller_->UpdateToolbarVisibility(false);
 
   // Create the extension window controller before sending notifications.
   extension_window_controller_.reset(
@@ -677,9 +677,8 @@
   // |contents| can be NULL because GetWindowTitleForCurrentTab is called by the
   // window during the window's creation (before tabs have been added).
   if (contents) {
-    title = FormatTitleForDisplay(web_app_controller_
-                                      ? web_app_controller_->GetTitle()
-                                      : contents->GetTitle());
+    title = FormatTitleForDisplay(app_controller_ ? app_controller_->GetTitle()
+                                                  : contents->GetTitle());
   }
 
   // If there is no title, leave it empty for apps.
@@ -695,9 +694,8 @@
   // ensures that the native window gets a title which is important for a11y,
   // for example the window selector uses the Aura window title.
   if (title.empty() && is_app() && include_app_name) {
-    return base::UTF8ToUTF16(web_app_controller_
-                                 ? web_app_controller_->GetAppShortName()
-                                 : app_name());
+    return base::UTF8ToUTF16(
+        app_controller_ ? app_controller_->GetAppShortName() : app_name());
   }
 
   // Include the app name in window titles for tabbed browser windows when
@@ -1406,8 +1404,8 @@
        content::INVALIDATE_TYPE_TAB))
     command_controller_->TabStateChanged();
 
-  if (web_app_controller_)
-    web_app_controller_->UpdateToolbarVisibility(true);
+  if (app_controller_)
+    app_controller_->UpdateToolbarVisibility(true);
 }
 
 void Browser::VisibleSecurityStateChanged(WebContents* source) {
@@ -1417,8 +1415,8 @@
   if (tab_strip_model_->GetActiveWebContents() == source) {
     UpdateToolbar(false);
 
-    if (web_app_controller_)
-      web_app_controller_->UpdateToolbarVisibility(true);
+    if (app_controller_)
+      app_controller_->UpdateToolbarVisibility(true);
   }
 }
 
@@ -2589,7 +2587,7 @@
     return !is_trusted_source();
 
   // Web apps always support a location bar.
-  if (web_app_controller_)
+  if (app_controller_)
     return true;
 
   return false;
@@ -2625,7 +2623,7 @@
   // Web apps should always support the toolbar, so the title/origin of the
   // current page can be shown when browsing a url that is not inside the app.
   // Note: Final determination of whether or not the toolbar is shown is made by
-  // the |WebAppBrowserController|.
+  // the |AppBrowserController|.
   if (web_app_controller() &&
       web_app_controller()->IsForExperimentalWebAppBrowser()) {
     features |= FEATURE_TOOLBAR;
diff --git a/chrome/browser/ui/browser.h b/chrome/browser/ui/browser.h
index bce833a9..55d5012 100644
--- a/chrome/browser/ui/browser.h
+++ b/chrome/browser/ui/browser.h
@@ -50,7 +50,6 @@
 #include "ui/base/window_open_disposition.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/shell_dialogs/select_file_dialog.h"
-// #include "chrome/browser/ui/web_app_browser_controller.h"
 
 #if !defined(OS_ANDROID)
 #include "components/zoom/zoom_observer.h"
@@ -107,7 +106,10 @@
 namespace viz {
 class SurfaceId;
 }
-class WebAppBrowserController;
+
+namespace web_app {
+class AppBrowserController;
+}
 
 class Browser : public TabStripModelObserver,
                 public content::WebContentsDelegate,
@@ -321,11 +323,11 @@
   BrowserInstantController* instant_controller() {
     return instant_controller_.get();
   }
-  const WebAppBrowserController* web_app_controller() const {
-    return web_app_controller_.get();
+  const web_app::AppBrowserController* web_app_controller() const {
+    return app_controller_.get();
   }
-  WebAppBrowserController* web_app_controller() {
-    return web_app_controller_.get();
+  web_app::AppBrowserController* web_app_controller() {
+    return app_controller_.get();
   }
 
 #if !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
@@ -1083,7 +1085,7 @@
   // Helper which handles bookmark app specific browser configuration.
   // This must be initialized before |command_controller_| to ensure the correct
   // set of commands are enabled.
-  std::unique_ptr<WebAppBrowserController> web_app_controller_;
+  std::unique_ptr<web_app::AppBrowserController> app_controller_;
 
   BookmarkBar::State bookmark_bar_state_;
 
diff --git a/chrome/browser/ui/browser_command_controller.cc b/chrome/browser/ui/browser_command_controller.cc
index 970c19e..bbfb1ce1 100644
--- a/chrome/browser/ui/browser_command_controller.cc
+++ b/chrome/browser/ui/browser_command_controller.cc
@@ -34,6 +34,7 @@
 #include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_commands.h"
+#include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/chrome_pages.h"
 #include "chrome/browser/ui/extensions/application_launch.h"
@@ -41,7 +42,7 @@
 #include "chrome/browser/ui/page_info/page_info_dialog.h"
 #include "chrome/browser/ui/singleton_tabs.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "chrome/browser/ui/web_app_browser_controller.h"
+#include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "chrome/browser/ui/webui/inspect_ui.h"
 #include "chrome/common/content_restriction.h"
 #include "chrome/common/pref_names.h"
@@ -101,6 +102,33 @@
 
 namespace chrome {
 
+namespace {
+
+// Ensures that - if we have not popped up an infobar to prompt the user to e.g.
+// reload the current page - that the content pane of the browser is refocused.
+void AppInfoDialogClosedCallback(content::WebContents* web_contents,
+                                 views::Widget::ClosedReason /* unused */,
+                                 bool reload_prompt) {
+  if (reload_prompt)
+    return;
+
+  // Ensure that the web contents handle we have is still valid. It's possible
+  // (though unlikely) that either the browser or web contents has been pulled
+  // out from underneath us.
+  Browser* const browser = chrome::FindBrowserWithWebContents(web_contents);
+  if (!browser)
+    return;
+
+  // We want to focus the active web contents, which again, might not be the
+  // original web contents (though it should be the vast majority of the time).
+  content::WebContents* const active_contents =
+      browser->tab_strip_model()->GetActiveWebContents();
+  if (active_contents)
+    active_contents->Focus();
+}
+
+}  // namespace
+
 ///////////////////////////////////////////////////////////////////////////////
 // BrowserCommandController, public:
 
@@ -706,11 +734,17 @@
           browser_,
           browser_->tab_strip_model()->GetActiveWebContents()->GetVisibleURL());
       break;
-    case IDC_HOSTED_APP_MENU_APP_INFO:
-      ShowPageInfoDialog(browser_->tab_strip_model()->GetActiveWebContents(),
-                         bubble_anchor_util::kAppMenuButton);
+    case IDC_HOSTED_APP_MENU_APP_INFO: {
+      content::WebContents* const web_contents =
+          browser_->tab_strip_model()->GetActiveWebContents();
+      if (web_contents) {
+        ShowPageInfoDialog(web_contents,
+                           base::BindOnce(&AppInfoDialogClosedCallback,
+                                          base::Unretained(web_contents)),
+                           bubble_anchor_util::kAppMenuButton);
+      }
       break;
-
+    }
     default:
       LOG(WARNING) << "Received Unimplemented Command: " << id;
       break;
@@ -934,7 +968,7 @@
                                         normal_window || browser_->is_app());
 
   const bool is_experimental_hosted_app =
-      WebAppBrowserController::IsForExperimentalWebAppBrowser(browser_);
+      web_app::AppBrowserController::IsForExperimentalWebAppBrowser(browser_);
   // Hosted app browser commands.
   command_updater_.UpdateCommandEnabled(IDC_COPY_URL,
                                         is_experimental_hosted_app);
@@ -1232,7 +1266,7 @@
 void BrowserCommandController::UpdateCommandsForHostedAppAvailability() {
   bool has_toolbar =
       browser_->is_type_tabbed() ||
-      WebAppBrowserController::IsForExperimentalWebAppBrowser(browser_);
+      web_app::AppBrowserController::IsForExperimentalWebAppBrowser(browser_);
   if (window() && window()->ShouldHideUIForFullscreen())
     has_toolbar = false;
   command_updater_.UpdateCommandEnabled(IDC_FOCUS_TOOLBAR, has_toolbar);
diff --git a/chrome/browser/ui/browser_dialogs.h b/chrome/browser/ui/browser_dialogs.h
index 70237b0..cde104d9 100644
--- a/chrome/browser/ui/browser_dialogs.h
+++ b/chrome/browser/ui/browser_dialogs.h
@@ -96,7 +96,7 @@
 // WebApplicationInfo parameter contains the information about the app,
 // possibly modified by the user.
 using AppInstallationAcceptanceCallback =
-    base::OnceCallback<void(bool, const WebApplicationInfo&)>;
+    base::OnceCallback<void(bool, std::unique_ptr<WebApplicationInfo>)>;
 
 // Shows the Bookmark App bubble.
 // See Extension::InitFromValueFlags::FROM_BOOKMARK for a description of
diff --git a/chrome/browser/ui/cocoa/page_info/page_info_bubble_views_mac_browsertest.mm b/chrome/browser/ui/cocoa/page_info/page_info_bubble_views_mac_browsertest.mm
index 416f984..f02649c 100644
--- a/chrome/browser/ui/cocoa/page_info/page_info_bubble_views_mac_browsertest.mm
+++ b/chrome/browser/ui/cocoa/page_info/page_info_bubble_views_mac_browsertest.mm
@@ -58,7 +58,8 @@
 IN_PROC_BROWSER_TEST_P(PageInfoBubbleViewsMacTest, NoCrashOnFullScreenToggle) {
   ui::test::ScopedFakeNSWindowFullscreen fake_fullscreen;
   ui_test_utils::NavigateToURL(browser(), GURL(GetParam().url));
-  ShowPageInfoDialog(browser()->tab_strip_model()->GetWebContentsAt(0));
+  ShowPageInfoDialog(browser()->tab_strip_model()->GetWebContentsAt(0),
+                     base::BindOnce([](views::Widget::CloseReason, bool) {}));
   ExclusiveAccessManager* access_manager =
       browser()->exclusive_access_manager();
   FullscreenController* fullscreen_controller =
@@ -91,7 +92,8 @@
   EXPECT_EQ(0, browser()->tab_strip_model()->active_index());
 
   // Show the (internal or external) Page Info bubble and check it's visible.
-  ShowPageInfoDialog(browser()->tab_strip_model()->GetWebContentsAt(0));
+  ShowPageInfoDialog(browser()->tab_strip_model()->GetWebContentsAt(0),
+                     base::BindOnce([](views::Widget::CloseReason, bool) {}));
   EXPECT_EQ(GetParam().bubble_type, PageInfoBubbleView::GetShownBubbleType());
   views::BubbleDialogDelegateView* page_info =
       PageInfoBubbleView::GetPageInfoBubble();
diff --git a/chrome/browser/ui/extensions/hosted_app_browser_controller.cc b/chrome/browser/ui/extensions/hosted_app_browser_controller.cc
index 3ac5ba5..8d808d4 100644
--- a/chrome/browser/ui/extensions/hosted_app_browser_controller.cc
+++ b/chrome/browser/ui/extensions/hosted_app_browser_controller.cc
@@ -90,7 +90,7 @@
 
 // static
 void HostedAppBrowserController::SetAppPrefsForWebContents(
-    WebAppBrowserController* controller,
+    web_app::AppBrowserController* controller,
     content::WebContents* web_contents) {
   auto* rvh = web_contents->GetRenderViewHost();
 
@@ -125,7 +125,7 @@
 }
 
 HostedAppBrowserController::HostedAppBrowserController(Browser* browser)
-    : WebAppBrowserController(browser),
+    : AppBrowserController(browser),
       extension_id_(web_app::GetAppIdFromApplicationName(browser->app_name())),
       // If a bookmark app has a URL handler, then it is a PWA.
       // TODO(https://crbug.com/774918): Replace once there is a more explicit
@@ -246,7 +246,7 @@
 
 base::Optional<SkColor> HostedAppBrowserController::GetThemeColor() const {
   base::Optional<SkColor> web_theme_color =
-      WebAppBrowserController::GetThemeColor();
+      AppBrowserController::GetThemeColor();
   if (web_theme_color)
     return web_theme_color;
 
@@ -273,7 +273,7 @@
     return base::UTF8ToUTF16(extension->name());
   }
 
-  return WebAppBrowserController::GetTitle();
+  return AppBrowserController::GetTitle();
 }
 
 GURL HostedAppBrowserController::GetAppLaunchURL() const {
@@ -321,13 +321,13 @@
 }
 
 void HostedAppBrowserController::OnTabInserted(content::WebContents* contents) {
-  WebAppBrowserController::OnTabInserted(contents);
+  AppBrowserController::OnTabInserted(contents);
   extensions::HostedAppBrowserController::SetAppPrefsForWebContents(this,
                                                                     contents);
 }
 
 void HostedAppBrowserController::OnTabRemoved(content::WebContents* contents) {
-  WebAppBrowserController::OnTabRemoved(contents);
+  AppBrowserController::OnTabRemoved(contents);
   extensions::HostedAppBrowserController::ClearAppPrefsForWebContents(contents);
 }
 
diff --git a/chrome/browser/ui/extensions/hosted_app_browser_controller.h b/chrome/browser/ui/extensions/hosted_app_browser_controller.h
index 8d26321..963df726 100644
--- a/chrome/browser/ui/extensions/hosted_app_browser_controller.h
+++ b/chrome/browser/ui/extensions/hosted_app_browser_controller.h
@@ -13,7 +13,7 @@
 #include "base/strings/string16.h"
 #include "chrome/browser/extensions/extension_uninstall_dialog.h"
 #include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
-#include "chrome/browser/ui/web_app_browser_controller.h"
+#include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "third_party/skia/include/core/SkColor.h"
 
 class Browser;
@@ -36,11 +36,12 @@
 // Class to encapsulate logic to control the browser UI for extension based web
 // apps.
 class HostedAppBrowserController : public ExtensionUninstallDialog::Delegate,
-                                   public WebAppBrowserController {
+                                   public web_app::AppBrowserController {
  public:
   // Functions to set preferences that are unique to app windows.
-  static void SetAppPrefsForWebContents(WebAppBrowserController* controller,
-                                        content::WebContents* web_contents);
+  static void SetAppPrefsForWebContents(
+      web_app::AppBrowserController* controller,
+      content::WebContents* web_contents);
 
   // Clear preferences that are unique to app windows.
   static void ClearAppPrefsForWebContents(content::WebContents* web_contents);
diff --git a/chrome/browser/ui/extensions/hosted_app_menu_model.cc b/chrome/browser/ui/extensions/hosted_app_menu_model.cc
index 37707766..bca9e1c 100644
--- a/chrome/browser/ui/extensions/hosted_app_menu_model.cc
+++ b/chrome/browser/ui/extensions/hosted_app_menu_model.cc
@@ -10,7 +10,7 @@
 #include "chrome/browser/media/router/media_router_feature.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/web_app_browser_controller.h"
+#include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "chrome/grit/chromium_strings.h"
 #include "chrome/grit/generated_resources.h"
 #include "components/strings/grit/components_strings.h"
@@ -31,7 +31,7 @@
   AddItemWithStringId(IDC_HOSTED_APP_MENU_APP_INFO,
                       IDS_APP_CONTEXT_MENU_SHOW_INFO);
   int app_info_index = GetItemCount() - 1;
-  SetMinorText(app_info_index, WebAppBrowserController::FormatUrlOrigin(
+  SetMinorText(app_info_index, web_app::AppBrowserController::FormatUrlOrigin(
                                    browser()
                                        ->tab_strip_model()
                                        ->GetActiveWebContents()
diff --git a/chrome/browser/ui/managed_ui.cc b/chrome/browser/ui/managed_ui.cc
index 3875524..753263a 100644
--- a/chrome/browser/ui/managed_ui.cc
+++ b/chrome/browser/ui/managed_ui.cc
@@ -5,18 +5,23 @@
 #include "chrome/browser/ui/managed_ui.h"
 
 #include "base/feature_list.h"
+#include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/browser_process_platform_part.h"
 #include "chrome/browser/policy/chrome_browser_policy_connector.h"
 #include "chrome/browser/policy/profile_policy_connector.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/webui/management_ui_handler.h"
 #include "chrome/common/chrome_features.h"
+#include "chrome/grit/generated_resources.h"
+#include "ui/base/l10n/l10n_util.h"
 
 #if defined(OS_CHROMEOS)
 #include "chrome/browser/chromeos/login/demo_mode/demo_session.h"
 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
 #include "chrome/browser/chromeos/profiles/profile_helper.h"
 #include "components/user_manager/user_manager.h"
+#include "ui/chromeos/devicetype_utils.h"
 #endif
 
 namespace chrome {
@@ -71,4 +76,37 @@
   return false;
 }
 
+base::string16 GetManagedUiMenuItemLabel(Profile* profile) {
+  std::string management_domain =
+      ManagementUIHandler::GetAccountDomain(profile);
+
+  int string_id = IDS_MANAGED;
+  std::vector<base::string16> replacements;
+  if (!management_domain.empty()) {
+    string_id = IDS_MANAGED_BY;
+    replacements.push_back(base::UTF8ToUTF16(management_domain));
+  }
+
+  return l10n_util::GetStringFUTF16(string_id, replacements, nullptr);
+}
+
+base::string16 GetManagedUiWebUILabel(Profile* profile) {
+  std::string management_domain =
+      ManagementUIHandler::GetAccountDomain(profile);
+
+  int string_id = IDS_MANAGED_WITH_HYPERLINK;
+
+  std::vector<base::string16> replacements;
+  replacements.push_back(base::UTF8ToUTF16(chrome::kChromeUIManagementURL));
+#if defined(OS_CHROMEOS)
+  replacements.push_back(ui::GetChromeOSDeviceName());
+#endif
+  if (!management_domain.empty()) {
+    string_id = IDS_MANAGED_BY_WITH_HYPERLINK;
+    replacements.push_back(base::UTF8ToUTF16(management_domain));
+  }
+
+  return l10n_util::GetStringFUTF16(string_id, replacements, nullptr);
+}
+
 }  // namespace chrome
diff --git a/chrome/browser/ui/managed_ui.h b/chrome/browser/ui/managed_ui.h
index 2c548f26..2fc7db70 100644
--- a/chrome/browser/ui/managed_ui.h
+++ b/chrome/browser/ui/managed_ui.h
@@ -5,6 +5,8 @@
 #ifndef CHROME_BROWSER_UI_MANAGED_UI_H_
 #define CHROME_BROWSER_UI_MANAGED_UI_H_
 
+#include "base/strings/string16.h"
+
 class Profile;
 
 namespace chrome {
@@ -21,6 +23,13 @@
 // users.
 bool ShouldDisplayManagedUi(Profile* profile);
 
+// The label for the App Menu item for Managed UI.
+base::string16 GetManagedUiMenuItemLabel(Profile* profile);
+
+// The label for the WebUI footnote for Managed UI. These strings contain HTML
+// for an <a> element.
+base::string16 GetManagedUiWebUILabel(Profile* profile);
+
 }  // namespace chrome
 
 #endif  // CHROME_BROWSER_UI_MANAGED_UI_H_
diff --git a/chrome/browser/ui/managed_ui_browsertest.cc b/chrome/browser/ui/managed_ui_browsertest.cc
index 0e552a0..4f14678f 100644
--- a/chrome/browser/ui/managed_ui_browsertest.cc
+++ b/chrome/browser/ui/managed_ui_browsertest.cc
@@ -4,12 +4,14 @@
 
 #include "chrome/browser/ui/managed_ui.h"
 
+#include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/values.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/common/chrome_features.h"
 #include "chrome/test/base/in_process_browser_test.h"
+#include "chrome/test/base/testing_profile.h"
 #include "components/policy/core/browser/browser_policy_connector.h"
 #include "components/policy/core/common/mock_configuration_policy_provider.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -71,3 +73,48 @@
   EXPECT_TRUE(chrome::ShouldDisplayManagedUi(browser()->profile()));
 #endif
 }
+
+IN_PROC_BROWSER_TEST_F(ManagedUiTest, GetManagedUiMenuItemLabel) {
+  TestingProfile::Builder builder;
+  auto profile = builder.Build();
+
+  TestingProfile::Builder builder_with_domain;
+  builder_with_domain.SetProfileName("foobar@example.com");
+  auto profile_with_domain = builder_with_domain.Build();
+
+  EXPECT_EQ(base::UTF8ToUTF16("Managed by your organization"),
+            chrome::GetManagedUiMenuItemLabel(profile.get()));
+  EXPECT_EQ(base::UTF8ToUTF16("Managed by example.com"),
+            chrome::GetManagedUiMenuItemLabel(profile_with_domain.get()));
+}
+
+IN_PROC_BROWSER_TEST_F(ManagedUiTest, GetManagedUiWebUILabel) {
+  TestingProfile::Builder builder;
+  auto profile = builder.Build();
+
+  TestingProfile::Builder builder_with_domain;
+  builder_with_domain.SetProfileName("foobar@example.com");
+  auto profile_with_domain = builder_with_domain.Build();
+
+#if !defined(OS_CHROMEOS)
+  EXPECT_EQ(
+      base::UTF8ToUTF16(
+          "Your <a href=\"chrome://management\">browser is managed</a> by your "
+          "organization"),
+      chrome::GetManagedUiWebUILabel(profile.get()));
+  EXPECT_EQ(
+      base::UTF8ToUTF16(
+          "Your <a href=\"chrome://management\">browser is managed</a> by "
+          "example.com"),
+      chrome::GetManagedUiWebUILabel(profile_with_domain.get()));
+#else
+  EXPECT_EQ(
+      base::UTF8ToUTF16("Your <a href=\"chrome://management\">Chrome device is "
+                        "managed</a> by your organization"),
+      chrome::GetManagedUiWebUILabel(profile.get()));
+  EXPECT_EQ(
+      base::UTF8ToUTF16("Your <a href=\"chrome://management\">Chrome device is "
+                        "managed</a> by example.com"),
+      chrome::GetManagedUiWebUILabel(profile_with_domain.get()));
+#endif
+}
diff --git a/chrome/browser/ui/manifest_web_app_browser_controller.cc b/chrome/browser/ui/manifest_web_app_browser_controller.cc
index 3170d0c..f1ff39f 100644
--- a/chrome/browser/ui/manifest_web_app_browser_controller.cc
+++ b/chrome/browser/ui/manifest_web_app_browser_controller.cc
@@ -17,7 +17,7 @@
 
 ManifestWebAppBrowserController::ManifestWebAppBrowserController(
     Browser* browser)
-    : WebAppBrowserController(browser), app_launch_url_(GURL()) {}
+    : AppBrowserController(browser), app_launch_url_(GURL()) {}
 
 ManifestWebAppBrowserController::~ManifestWebAppBrowserController() = default;
 
@@ -91,6 +91,6 @@
     content::WebContents* contents) {
   if (app_launch_url_.is_empty())
     app_launch_url_ = contents->GetURL();
-  WebAppBrowserController::OnTabInserted(contents);
+  AppBrowserController::OnTabInserted(contents);
   UpdateToolbarVisibility(false);
 }
diff --git a/chrome/browser/ui/manifest_web_app_browser_controller.h b/chrome/browser/ui/manifest_web_app_browser_controller.h
index c96db39..a1a0cd12 100644
--- a/chrome/browser/ui/manifest_web_app_browser_controller.h
+++ b/chrome/browser/ui/manifest_web_app_browser_controller.h
@@ -12,7 +12,7 @@
 #include "base/strings/string16.h"
 #include "chrome/browser/extensions/extension_uninstall_dialog.h"
 #include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
-#include "chrome/browser/ui/web_app_browser_controller.h"
+#include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "third_party/skia/include/core/SkColor.h"
 
@@ -24,7 +24,7 @@
 
 // Class to encapsulate logic to control the browser UI for manifest based web
 // apps or focus mode.
-class ManifestWebAppBrowserController : public WebAppBrowserController {
+class ManifestWebAppBrowserController : public web_app::AppBrowserController {
  public:
   explicit ManifestWebAppBrowserController(Browser* browser);
   ~ManifestWebAppBrowserController() override;
diff --git a/chrome/browser/ui/page_info/page_info.cc b/chrome/browser/ui/page_info/page_info.cc
index 3ccf350..9d7c5ce 100644
--- a/chrome/browser/ui/page_info/page_info.cc
+++ b/chrome/browser/ui/page_info/page_info.cc
@@ -513,15 +513,20 @@
   PresentSiteData();
 }
 
-void PageInfo::OnUIClosing() {
+void PageInfo::OnUIClosing(bool* reload_prompt) {
+  if (reload_prompt)
+    *reload_prompt = false;
 #if defined(OS_ANDROID)
   NOTREACHED();
 #else
   if (show_info_bar_ && web_contents() && !web_contents()->IsBeingDestroyed()) {
     InfoBarService* infobar_service =
         InfoBarService::FromWebContents(web_contents());
-    if (infobar_service)
+    if (infobar_service) {
       PageInfoInfoBarDelegate::Create(infobar_service);
+      if (reload_prompt)
+        *reload_prompt = true;
+    }
   }
 #endif
 }
diff --git a/chrome/browser/ui/page_info/page_info.h b/chrome/browser/ui/page_info/page_info.h
index b36e08f..0f62274 100644
--- a/chrome/browser/ui/page_info/page_info.h
+++ b/chrome/browser/ui/page_info/page_info.h
@@ -164,7 +164,9 @@
                                  const base::Value& object);
 
   // This method is called by the UI when the UI is closing.
-  void OnUIClosing();
+  // If specified, |reload_prompt| is set to whether closing the UI resulted in
+  // a prompt to the user to reload the page.
+  void OnUIClosing(bool* reload_prompt);
 
   // This method is called when the revoke SSL error bypass button is pressed.
   void OnRevokeSSLErrorBypassButtonPressed();
diff --git a/chrome/browser/ui/page_info/page_info_dialog.cc b/chrome/browser/ui/page_info/page_info_dialog.cc
index df2e839d..670f3c4 100644
--- a/chrome/browser/ui/page_info/page_info_dialog.cc
+++ b/chrome/browser/ui/page_info/page_info_dialog.cc
@@ -12,6 +12,7 @@
 #include "content/public/browser/web_contents.h"
 
 bool ShowPageInfoDialog(content::WebContents* web_contents,
+                        PageInfoClosingCallback closing_callback,
                         bubble_anchor_util::Anchor anchor) {
   if (!web_contents)
     return false;
@@ -27,9 +28,9 @@
 
   SecurityStateTabHelper* helper =
       SecurityStateTabHelper::FromWebContents(web_contents);
-  ShowPageInfoDialogImpl(browser, web_contents, entry->GetVirtualURL(),
-                         helper->GetSecurityLevel(),
-                         *helper->GetVisibleSecurityState(), anchor);
+  ShowPageInfoDialogImpl(
+      browser, web_contents, entry->GetVirtualURL(), helper->GetSecurityLevel(),
+      *helper->GetVisibleSecurityState(), anchor, std::move(closing_callback));
 
   if (GetPageInfoDialogCreatedCallbackForTesting())
     std::move(GetPageInfoDialogCreatedCallbackForTesting()).Run();
diff --git a/chrome/browser/ui/page_info/page_info_dialog.h b/chrome/browser/ui/page_info/page_info_dialog.h
index 97257b9..5728f682 100644
--- a/chrome/browser/ui/page_info/page_info_dialog.h
+++ b/chrome/browser/ui/page_info/page_info_dialog.h
@@ -5,9 +5,10 @@
 #ifndef CHROME_BROWSER_UI_PAGE_INFO_PAGE_INFO_DIALOG_H_
 #define CHROME_BROWSER_UI_PAGE_INFO_PAGE_INFO_DIALOG_H_
 
-#include "base/callback_forward.h"
+#include "base/callback.h"
 #include "chrome/browser/ui/bubble_anchor_util.h"
 #include "components/security_state/core/security_state.h"
+#include "ui/views/widget/widget.h"
 
 namespace content {
 class WebContents;
@@ -16,10 +17,18 @@
 class GURL;
 class Browser;
 
+// Callback that happens when the user closes the Page Info UI.
+// The second parameter is whether closing the UI caused a reload prompt to be
+// displayed to the user.
+using PageInfoClosingCallback =
+    base::OnceCallback<void(views::Widget::ClosedReason,
+                            bool /* reload_prompt */)>;
+
 // Shows PageInfo for the given |web_contents| in its browser. Returns false if
 // the URL or parent Browser* can not be determined.
 bool ShowPageInfoDialog(
     content::WebContents* web_contents,
+    PageInfoClosingCallback closing_callback,
     bubble_anchor_util::Anchor = bubble_anchor_util::kLocationBar);
 
 // Shows Page Info using the specified information. |virtual_url| is the virtual
@@ -32,7 +41,8 @@
     const GURL& virtual_url,
     security_state::SecurityLevel security_level,
     const security_state::VisibleSecurityState& visible_security_state,
-    bubble_anchor_util::Anchor);
+    bubble_anchor_util::Anchor,
+    PageInfoClosingCallback closing_callback);
 
 // Gets the callback to run after a dialog is created. Only used in tests.
 base::OnceClosure& GetPageInfoDialogCreatedCallbackForTesting();
diff --git a/chrome/browser/ui/page_info/page_info_unittest.cc b/chrome/browser/ui/page_info/page_info_unittest.cc
index 0cc5dd7..8a3114f7 100644
--- a/chrome/browser/ui/page_info/page_info_unittest.cc
+++ b/chrome/browser/ui/page_info/page_info_unittest.cc
@@ -859,7 +859,8 @@
 TEST_F(PageInfoTest, NoInfoBar) {
   SetDefaultUIExpectations(mock_ui());
   EXPECT_EQ(0u, infobar_service()->infobar_count());
-  page_info()->OnUIClosing();
+  bool unused;
+  page_info()->OnUIClosing(&unused);
   EXPECT_EQ(0u, infobar_service()->infobar_count());
 }
 
@@ -872,7 +873,8 @@
   EXPECT_EQ(0u, infobar_service()->infobar_count());
   page_info()->OnSitePermissionChanged(CONTENT_SETTINGS_TYPE_GEOLOCATION,
                                        CONTENT_SETTING_ALLOW);
-  page_info()->OnUIClosing();
+  bool unused;
+  page_info()->OnUIClosing(&unused);
   ASSERT_EQ(1u, infobar_service()->infobar_count());
 
   infobar_service()->RemoveInfoBar(infobar_service()->infobar_at(0));
@@ -882,7 +884,8 @@
   EXPECT_EQ(0u, infobar_service()->infobar_count());
   page_info()->OnSitePermissionChanged(CONTENT_SETTINGS_TYPE_SOUND,
                                        CONTENT_SETTING_BLOCK);
-  page_info()->OnUIClosing();
+  bool unused;
+  page_info()->OnUIClosing(&unused);
   EXPECT_EQ(0u, infobar_service()->infobar_count());
 }
 
@@ -892,7 +895,8 @@
                                        CONTENT_SETTING_BLOCK);
   page_info()->OnSitePermissionChanged(CONTENT_SETTINGS_TYPE_SOUND,
                                        CONTENT_SETTING_BLOCK);
-  page_info()->OnUIClosing();
+  bool unused;
+  page_info()->OnUIClosing(&unused);
   EXPECT_EQ(1u, infobar_service()->infobar_count());
 
   infobar_service()->RemoveInfoBar(infobar_service()->infobar_at(0));
diff --git a/chrome/browser/ui/passwords/manage_passwords_state.cc b/chrome/browser/ui/passwords/manage_passwords_state.cc
index 3f466a0..fda40c3 100644
--- a/chrome/browser/ui/passwords/manage_passwords_state.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_state.cc
@@ -47,7 +47,7 @@
   auto it = std::find_if(
       forms->begin(), forms->end(),
       [&updated_form](const std::unique_ptr<autofill::PasswordForm>& form) {
-        return ArePasswordFormUniqueKeyEqual(*form, updated_form);
+        return ArePasswordFormUniqueKeysEqual(*form, updated_form);
       });
   if (it != forms->end()) {
     **it = updated_form;
@@ -64,7 +64,7 @@
   auto it = std::find_if(
       forms->begin(), forms->end(),
       [&form_to_delete](const std::unique_ptr<autofill::PasswordForm>& form) {
-        return ArePasswordFormUniqueKeyEqual(*form, form_to_delete);
+        return ArePasswordFormUniqueKeysEqual(*form, form_to_delete);
       });
   if (it != forms->end()) {
     forms->erase(it);
diff --git a/chrome/browser/ui/toolbar/app_menu_model.cc b/chrome/browser/ui/toolbar/app_menu_model.cc
index 388647e..160ec00 100644
--- a/chrome/browser/ui/toolbar/app_menu_model.cc
+++ b/chrome/browser/ui/toolbar/app_menu_model.cc
@@ -835,8 +835,9 @@
         ui::NativeTheme::kColorId_HighlightedMenuItemForegroundColor);
     const auto icon =
         gfx::CreateVectorIcon(vector_icons::kBusinessIcon, kIconSize, color);
-    AddHighlightedItemWithStringIdAndIcon(IDC_SHOW_MANAGEMENT_PAGE,
-                                          IDS_MANAGED_BY_ORG, icon);
+    AddHighlightedItemWithIcon(
+        IDC_SHOW_MANAGEMENT_PAGE,
+        chrome::GetManagedUiMenuItemLabel(browser_->profile()), icon);
   }
 #endif  // !defined(OS_CHROMEOS)
 
diff --git a/chrome/browser/ui/views/autofill/payments/save_card_bubble_views.cc b/chrome/browser/ui/views/autofill/payments/save_card_bubble_views.cc
index 49f3e172..9c37909 100644
--- a/chrome/browser/ui/views/autofill/payments/save_card_bubble_views.cc
+++ b/chrome/browser/ui/views/autofill/payments/save_card_bubble_views.cc
@@ -14,7 +14,7 @@
 #include "chrome/browser/ui/views/chrome_layout_provider.h"
 #include "chrome/browser/ui/views/chrome_typography.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/payments/legal_message_line.h"
 #include "components/autofill/core/browser/ui/payments/save_card_bubble_controller.h"
 #include "components/autofill/core/common/autofill_features.h"
diff --git a/chrome/browser/ui/views/autofill/payments/save_card_offer_bubble_views.cc b/chrome/browser/ui/views/autofill/payments/save_card_offer_bubble_views.cc
index 84af3b3..fe9f225d 100644
--- a/chrome/browser/ui/views/autofill/payments/save_card_offer_bubble_views.cc
+++ b/chrome/browser/ui/views/autofill/payments/save_card_offer_bubble_views.cc
@@ -17,7 +17,7 @@
 #include "chrome/grit/generated_resources.h"
 #include "components/autofill/core/browser/autofill_experiments.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/payments/legal_message_line.h"
 #include "components/autofill/core/browser/ui/payments/save_card_bubble_controller.h"
 #include "components/autofill/core/browser/validation.h"
diff --git a/chrome/browser/ui/views/chrome_typography_provider.cc b/chrome/browser/ui/views/chrome_typography_provider.cc
index fc61b23a..e1ffcda 100644
--- a/chrome/browser/ui/views/chrome_typography_provider.cc
+++ b/chrome/browser/ui/views/chrome_typography_provider.cc
@@ -110,18 +110,17 @@
 #if defined(OS_WIN)
 // static
 int ChromeTypographyProvider::GetPlatformFontHeight(int font_context) {
-  const bool windows_10 = base::win::GetVersion() >= base::win::Version::WIN10;
   switch (font_context) {
     case CONTEXT_HEADLINE:
-      return windows_10 ? 27 : 28;
+      return 27;
     case views::style::CONTEXT_DIALOG_TITLE:
-      return windows_10 ? 20 : 21;
+      return 20;
     case CONTEXT_BODY_TEXT_LARGE:
     case CONTEXT_TAB_HOVER_CARD_TITLE:
     case views::style::CONTEXT_MESSAGE_BOX_BODY_TEXT:
       return 18;
     case CONTEXT_BODY_TEXT_SMALL:
-      return windows_10 ? 16 : 15;
+      return 16;
   }
   NOTREACHED();
   return 0;
diff --git a/chrome/browser/ui/views/extensions/bookmark_app_confirmation_view.cc b/chrome/browser/ui/views/extensions/bookmark_app_confirmation_view.cc
index 51f29db9..0c85cb1 100644
--- a/chrome/browser/ui/views/extensions/bookmark_app_confirmation_view.cc
+++ b/chrome/browser/ui/views/extensions/bookmark_app_confirmation_view.cc
@@ -118,15 +118,18 @@
 }
 
 void BookmarkAppConfirmationView::WindowClosing() {
-  if (callback_)
-    std::move(callback_).Run(false, web_app_info_);
+  if (callback_) {
+    std::move(callback_).Run(
+        false, std::make_unique<WebApplicationInfo>(web_app_info_));
+  }
 }
 
 bool BookmarkAppConfirmationView::Accept() {
   web_app_info_.title = GetTrimmedTitle();
   web_app_info_.open_as_window =
       open_as_window_checkbox_ && open_as_window_checkbox_->checked();
-  std::move(callback_).Run(true, web_app_info_);
+  std::move(callback_).Run(true,
+                           std::make_unique<WebApplicationInfo>(web_app_info_));
   return true;
 }
 
diff --git a/chrome/browser/ui/views/extensions/pwa_confirmation.cc b/chrome/browser/ui/views/extensions/pwa_confirmation.cc
index 7ccf50a..48e9f34 100644
--- a/chrome/browser/ui/views/extensions/pwa_confirmation.cc
+++ b/chrome/browser/ui/views/extensions/pwa_confirmation.cc
@@ -124,12 +124,15 @@
 }
 
 void PWAConfirmation::Accept() {
-  std::move(callback_).Run(true, web_app_info_);
+  std::move(callback_).Run(true,
+                           std::make_unique<WebApplicationInfo>(web_app_info_));
 }
 
 void PWAConfirmation::WindowClosing() {
-  if (callback_)
-    std::move(callback_).Run(false, web_app_info_);
+  if (callback_) {
+    std::move(callback_).Run(
+        false, std::make_unique<WebApplicationInfo>(web_app_info_));
+  }
 }
 
 namespace chrome {
diff --git a/chrome/browser/ui/views/frame/browser_frame.cc b/chrome/browser/ui/views/frame/browser_frame.cc
index 35251f5..0346882 100644
--- a/chrome/browser/ui/views/frame/browser_frame.cc
+++ b/chrome/browser/ui/views/frame/browser_frame.cc
@@ -173,7 +173,7 @@
 
 bool BrowserFrame::ShouldUseTheme() const {
   // Browser windows are always themed (including popups).
-  if (!WebAppBrowserController::IsForExperimentalWebAppBrowser(
+  if (!web_app::AppBrowserController::IsForExperimentalWebAppBrowser(
           browser_view_->browser())) {
     return true;
   }
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view.cc
index 043db66..d2ee8ebc 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view.cc
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view.cc
@@ -16,7 +16,7 @@
 #include "chrome/browser/ui/views/frame/browser_view.h"
 #include "chrome/browser/ui/views/frame/hosted_app_button_container.h"
 #include "chrome/browser/ui/views/tabs/tab_strip.h"
-#include "chrome/browser/ui/web_app_browser_controller.h"
+#include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "chrome/common/chrome_features.h"
 #include "chrome/grit/theme_resources.h"
 #include "third_party/skia/include/core/SkColor.h"
@@ -153,7 +153,7 @@
   if (frame_->ShouldUseTheme())
     return GetThemeProviderForProfile()->GetColor(color_id);
 
-  WebAppBrowserController* web_app_controller =
+  web_app::AppBrowserController* web_app_controller =
       browser_view_->browser()->web_app_controller();
   if (web_app_controller && web_app_controller->GetThemeColor())
     return *web_app_controller->GetThemeColor();
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index 311b352..b3656fc0 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -111,7 +111,7 @@
 #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/web_app_browser_controller.h"
+#include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "chrome/browser/ui/window_sizer/window_sizer.h"
 #include "chrome/common/channel_info.h"
 #include "chrome/common/chrome_features.h"
@@ -621,7 +621,7 @@
 }
 
 bool BrowserView::IsBrowserTypeHostedApp() const {
-  return WebAppBrowserController::IsForExperimentalWebAppBrowser(
+  return web_app::AppBrowserController::IsForExperimentalWebAppBrowser(
       browser_.get());
 }
 
@@ -2045,7 +2045,8 @@
 }
 
 gfx::ImageSkia BrowserView::GetWindowAppIcon() {
-  WebAppBrowserController* app_controller = browser()->web_app_controller();
+  web_app::AppBrowserController* app_controller =
+      browser()->web_app_controller();
   return app_controller ? app_controller->GetWindowAppIcon() : GetWindowIcon();
 }
 
@@ -2055,7 +2056,8 @@
     return gfx::ImageSkia();
 
   // Hosted apps always show their app icon.
-  WebAppBrowserController* app_controller = browser()->web_app_controller();
+  web_app::AppBrowserController* app_controller =
+      browser()->web_app_controller();
   if (app_controller)
     return app_controller->GetWindowIcon();
 
diff --git a/chrome/browser/ui/views/frame/glass_browser_frame_view.cc b/chrome/browser/ui/views/frame/glass_browser_frame_view.cc
index 2326734..32e506e9 100644
--- a/chrome/browser/ui/views/frame/glass_browser_frame_view.cc
+++ b/chrome/browser/ui/views/frame/glass_browser_frame_view.cc
@@ -19,7 +19,7 @@
 #include "chrome/browser/ui/views/tabs/tab.h"
 #include "chrome/browser/ui/views/tabs/tab_strip.h"
 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
-#include "chrome/browser/ui/web_app_browser_controller.h"
+#include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "chrome/browser/win/titlebar_config.h"
 #include "content/public/browser/web_contents.h"
 #include "skia/ext/image_operations.h"
@@ -111,7 +111,7 @@
     AddChildView(window_title_);
   }
 
-  WebAppBrowserController* controller =
+  web_app::AppBrowserController* controller =
       browser_view->browser()->web_app_controller();
   if (controller && controller->ShouldShowHostedAppButtonContainer()) {
     // TODO(alancutter): Avoid snapshotting GetCaptionColor() values here and
diff --git a/chrome/browser/ui/views/frame/hosted_app_origin_text.cc b/chrome/browser/ui/views/frame/hosted_app_origin_text.cc
index dc22cf8..1397c33 100644
--- a/chrome/browser/ui/views/frame/hosted_app_origin_text.cc
+++ b/chrome/browser/ui/views/frame/hosted_app_origin_text.cc
@@ -10,7 +10,7 @@
 #include "chrome/browser/ui/extensions/hosted_app_browser_controller.h"
 #include "chrome/browser/ui/views/chrome_typography.h"
 #include "chrome/browser/ui/views/frame/hosted_app_button_container.h"
-#include "chrome/browser/ui/web_app_browser_controller.h"
+#include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "ui/accessibility/ax_node_data.h"
 #include "ui/compositor/layer_animation_element.h"
 #include "ui/compositor/layer_animation_sequence.h"
@@ -25,7 +25,8 @@
 }  // namespace
 
 HostedAppOriginText::HostedAppOriginText(Browser* browser) {
-  DCHECK(WebAppBrowserController::IsForExperimentalWebAppBrowser(browser));
+  DCHECK(
+      web_app::AppBrowserController::IsForExperimentalWebAppBrowser(browser));
 
   SetLayoutManager(std::make_unique<views::FillLayout>());
 
diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc b/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
index e8ff35c6..b607780 100644
--- a/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
+++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
@@ -20,7 +20,7 @@
 #include "chrome/browser/ui/views/tabs/new_tab_button.h"
 #include "chrome/browser/ui/views/tabs/tab_strip.h"
 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
-#include "chrome/browser/ui/web_app_browser_controller.h"
+#include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "chrome/grit/generated_resources.h"
 #include "chrome/grit/theme_resources.h"
 #include "components/strings/grit/components_strings.h"
@@ -181,7 +181,7 @@
   window_title_->SetID(VIEW_ID_WINDOW_TITLE);
   AddChildView(window_title_);
 
-  WebAppBrowserController* controller =
+  web_app::AppBrowserController* controller =
       browser_view()->browser()->web_app_controller();
   if (controller && controller->ShouldShowHostedAppButtonContainer()) {
     set_hosted_app_button_container(new HostedAppButtonContainer(
diff --git a/chrome/browser/ui/views/layout_provider_unittest.cc b/chrome/browser/ui/views/layout_provider_unittest.cc
index 42aaeab..c640d2f 100644
--- a/chrome/browser/ui/views/layout_provider_unittest.cc
+++ b/chrome/browser/ui/views/layout_provider_unittest.cc
@@ -39,17 +39,22 @@
  public:
   LayoutProviderTest() {}
 
-#if defined(OS_WIN)
  protected:
   static void SetUpTestCase() {
-    // The expected case is to have DirectWrite enabled; the fallback gives
-    // different font heights. However, only use DirectWrite on Windows 10 and
-    // later, since it's known to have flaky results on Windows 7. See
-    // http://crbug.com/759870.
-    if (base::win::GetVersion() >= base::win::Version::WIN10)
-      gfx::win::InitializeDirectWrite();
-  }
+#if defined(OS_WIN)
+    gfx::win::InitializeDirectWrite();
+
+    // Ensures anti-aliasing is activated.
+    BOOL antialiasing = TRUE;
+    BOOL result =
+        SystemParametersInfo(SPI_GETFONTSMOOTHING, 0, &antialiasing, 0);
+    ASSERT_NE(result, FALSE);
+    ASSERT_NE(antialiasing, FALSE)
+        << "The test requires that fonts smoothing (anti-aliasing) is "
+           "activated. If this assert is failing you need to manually activate "
+           "the flag in your system fonts settings.";
 #endif
+  }
 
  private:
   DISALLOW_COPY_AND_ASSIGN(LayoutProviderTest);
@@ -58,23 +63,24 @@
 // Check legacy font sizes. No new code should be using these constants, but if
 // these tests ever fail it probably means something in the old UI will have
 // changed by mistake.
-// Disabled since this relies on machine configuration. http://crbug.com/701241.
-TEST_F(LayoutProviderTest, DISABLED_LegacyFontSizeConstants) {
+TEST_F(LayoutProviderTest, LegacyFontSizeConstants) {
   ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
   gfx::FontList label_font = rb.GetFontListWithDelta(ui::kLabelFontSizeDelta);
 
-  EXPECT_EQ(12, label_font.GetFontSize());
+#if defined(OS_WIN)
+  EXPECT_EQ(16, label_font.GetHeight());
+  EXPECT_EQ(13, label_font.GetBaseline());
+#else
   EXPECT_EQ(15, label_font.GetHeight());
   EXPECT_EQ(12, label_font.GetBaseline());
+#endif
+  EXPECT_EQ(12, label_font.GetFontSize());
   EXPECT_EQ(9, label_font.GetCapHeight());
-// Note some Windows bots report 11,13,11,9 for the above.
-// TODO(tapted): Smoke them out and figure out why.
 
 #if defined(OS_MACOSX)
-  EXPECT_EQ(10, label_font.GetExpectedTextWidth(1));
+  EXPECT_EQ(7, label_font.GetExpectedTextWidth(1));
 #else
   EXPECT_EQ(6, label_font.GetExpectedTextWidth(1));
-// Some Windows bots may say 5.
 #endif
 
   gfx::FontList title_font = rb.GetFontListWithDelta(ui::kTitleFontSizeDelta);
@@ -104,7 +110,7 @@
   if (base::mac::IsOS10_9()) {
     EXPECT_EQ(7, title_font.GetExpectedTextWidth(1));
   } else {
-    EXPECT_EQ(12, title_font.GetExpectedTextWidth(1));
+    EXPECT_EQ(8, title_font.GetExpectedTextWidth(1));
   }
 #else
   EXPECT_EQ(8, title_font.GetExpectedTextWidth(1));
@@ -142,8 +148,7 @@
 // platform starts returning 18 in a standard configuration then the
 // TypographyProvider must add 4 instead. We do this so that Chrome adapts
 // correctly to _non-standard_ system font configurations on user machines.
-// Disabled since this relies on machine configuration. http://crbug.com/701241.
-TEST_F(LayoutProviderTest, DISABLED_RequestFontBySize) {
+TEST_F(LayoutProviderTest, RequestFontBySize) {
 #if defined(OS_MACOSX)
   constexpr int kBase = 13;
 #else
@@ -311,8 +316,7 @@
 // Ensure that line heights reported in a default bot configuration match the
 // Harmony spec. This test will only run if it detects that the current machine
 // has the default OS configuration.
-// Flaky. http://crbug.com/759870
-TEST_F(LayoutProviderTest, DISABLED_ExplicitTypographyLineHeight) {
+TEST_F(LayoutProviderTest, ExplicitTypographyLineHeight) {
   std::unique_ptr<views::LayoutProvider> layout_provider =
       ChromeLayoutProvider::CreateLayoutProvider();
 
diff --git a/chrome/browser/ui/views/location_bar/custom_tab_bar_view.cc b/chrome/browser/ui/views/location_bar/custom_tab_bar_view.cc
index 18e5e70..65fde94 100644
--- a/chrome/browser/ui/views/location_bar/custom_tab_bar_view.cc
+++ b/chrome/browser/ui/views/location_bar/custom_tab_bar_view.cc
@@ -320,8 +320,11 @@
 void CustomTabBarView::OnLocationIconDragged(const ui::MouseEvent& event) {}
 
 bool CustomTabBarView::ShowPageInfoDialog() {
-  return ::ShowPageInfoDialog(GetWebContents(),
-                              bubble_anchor_util::Anchor::kCustomTabBar);
+  return ::ShowPageInfoDialog(
+      GetWebContents(),
+      base::BindOnce(&CustomTabBarView::AppInfoClosedCallback,
+                     weak_factory_.GetWeakPtr()),
+      bubble_anchor_util::Anchor::kCustomTabBar);
 }
 
 SkColor CustomTabBarView::GetSecurityChipColor(
@@ -384,6 +387,24 @@
   controller.GoToOffset(offset);
 }
 
+void CustomTabBarView::AppInfoClosedCallback(
+    views::Widget::ClosedReason closed_reason,
+    bool reload_prompt) {
+  // If we're closing the bubble because the user pressed ESC or because the
+  // user clicked Close (rather than the user clicking directly on something
+  // else), we should refocus the location bar. This lets the user tab into the
+  // "You should reload this page" infobar rather than dumping them back out
+  // into a stale webpage.
+  if (!reload_prompt)
+    return;
+  if (closed_reason != views::Widget::ClosedReason::kEscKeyPressed &&
+      closed_reason != views::Widget::ClosedReason::kCloseButtonClicked) {
+    return;
+  }
+
+  GetFocusManager()->SetFocusedView(location_icon_view_);
+}
+
 bool CustomTabBarView::IsShowingOriginForTesting() const {
   return title_origin_view_ != nullptr &&
          title_origin_view_->IsShowingOriginForTesting();
diff --git a/chrome/browser/ui/views/location_bar/custom_tab_bar_view.h b/chrome/browser/ui/views/location_bar/custom_tab_bar_view.h
index 7a2dad43..f03031887d 100644
--- a/chrome/browser/ui/views/location_bar/custom_tab_bar_view.h
+++ b/chrome/browser/ui/views/location_bar/custom_tab_bar_view.h
@@ -6,6 +6,7 @@
 #define CHROME_BROWSER_UI_VIEWS_LOCATION_BAR_CUSTOM_TAB_BAR_VIEW_H_
 
 #include "base/macros.h"
+#include "base/memory/weak_ptr.h"
 #include "base/scoped_observer.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/views/location_bar/location_bar_view.h"
@@ -81,6 +82,11 @@
   // Takes the web contents for the custom tab bar back to the app scope.
   void GoBackToApp();
 
+  // Called when the AppInfo dialog closes to set the focus on the correct view
+  // within the browser.
+  void AppInfoClosedCallback(views::Widget::ClosedReason closed_reason,
+                             bool reload_prompt);
+
   SkColor title_bar_color_;
 
   base::string16 last_title_;
@@ -94,6 +100,8 @@
 
   views::FlexLayout* layout_manager_;
 
+  base::WeakPtrFactory<CustomTabBarView> weak_factory_{this};
+
   DISALLOW_COPY_AND_ASSIGN(CustomTabBarView);
 };
 
diff --git a/chrome/browser/ui/views/location_bar/custom_tab_bar_view_browsertest.cc b/chrome/browser/ui/views/location_bar/custom_tab_bar_view_browsertest.cc
index efde62e..839a3bc0 100644
--- a/chrome/browser/ui/views/location_bar/custom_tab_bar_view_browsertest.cc
+++ b/chrome/browser/ui/views/location_bar/custom_tab_bar_view_browsertest.cc
@@ -8,7 +8,7 @@
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
-#include "chrome/browser/ui/web_app_browser_controller.h"
+#include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "chrome/common/chrome_features.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/web_application_info.h"
@@ -143,7 +143,7 @@
 // |install_interstitial| is true.
 class UrlHidingWebContentsObserver : public content::WebContentsObserver {
  public:
-  UrlHidingWebContentsObserver(content::WebContents* contents)
+  explicit UrlHidingWebContentsObserver(content::WebContents* contents)
       : content::WebContentsObserver(contents), install_interstitial_(true) {}
 
   void DidFinishNavigation(content::NavigationHandle* handle) override {
@@ -225,7 +225,7 @@
   BrowserView* browser_view_;
   LocationBarView* location_bar_;
   CustomTabBarView* custom_tab_bar_;
-  WebAppBrowserController* web_app_controller_;
+  web_app::AppBrowserController* web_app_controller_;
 
   net::EmbeddedTestServer* https_server() { return &https_server_; }
 
diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.cc b/chrome/browser/ui/views/location_bar/location_bar_view.cc
index 05eac8d1..36ba6015 100644
--- a/chrome/browser/ui/views/location_bar/location_bar_view.cc
+++ b/chrome/browser/ui/views/location_bar/location_bar_view.cc
@@ -58,7 +58,7 @@
 #include "chrome/browser/ui/views/page_action/omnibox_page_action_icon_container_view.h"
 #include "chrome/browser/ui/views/page_info/page_info_bubble_view.h"
 #include "chrome/browser/ui/views/passwords/manage_passwords_icon_views.h"
-#include "chrome/browser/ui/web_app_browser_controller.h"
+#include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "chrome/common/chrome_features.h"
 #include "chrome/grit/chromium_strings.h"
 #include "chrome/grit/generated_resources.h"
@@ -864,7 +864,7 @@
 }
 
 bool LocationBarView::RefreshContentSettingViews() {
-  if (WebAppBrowserController::IsForExperimentalWebAppBrowser(browser_)) {
+  if (web_app::AppBrowserController::IsForExperimentalWebAppBrowser(browser_)) {
     // For hosted apps, the location bar is normally hidden and icons appear in
     // the window frame instead.
     GetWidget()->non_client_view()->ResetWindowControls();
@@ -881,7 +881,7 @@
 }
 
 void LocationBarView::RefreshPageActionIconViews() {
-  if (WebAppBrowserController::IsForExperimentalWebAppBrowser(browser_)) {
+  if (web_app::AppBrowserController::IsForExperimentalWebAppBrowser(browser_)) {
     // For hosted apps, the location bar is normally hidden and icons appear in
     // the window frame instead.
     GetWidget()->non_client_view()->ResetWindowControls();
@@ -956,6 +956,24 @@
   return omnibox_view_->model()->popup_model()->view();
 }
 
+void LocationBarView::OnPageInfoBubbleClosed(
+    views::Widget::ClosedReason closed_reason,
+    bool reload_prompt) {
+  // If we're closing the bubble because the user pressed ESC or because the
+  // user clicked Close (rather than the user clicking directly on something
+  // else), we should refocus the location bar. This lets the user tab into the
+  // "You should reload this page" infobar rather than dumping them back out
+  // into a stale webpage.
+  if (!reload_prompt)
+    return;
+  if (closed_reason != views::Widget::ClosedReason::kEscKeyPressed &&
+      closed_reason != views::Widget::ClosedReason::kCloseButtonClicked) {
+    return;
+  }
+
+  FocusLocation(false);
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 // LocationBarView, private LocationBar implementation:
 
@@ -1298,7 +1316,9 @@
       PageInfoBubbleView::CreatePageInfoBubble(
           this, gfx::Rect(), GetWidget()->GetNativeWindow(), profile(),
           contents, entry->GetVirtualURL(), helper->GetSecurityLevel(),
-          *helper->GetVisibleSecurityState());
+          *helper->GetVisibleSecurityState(),
+          base::BindOnce(&LocationBarView::OnPageInfoBubbleClosed,
+                         weak_factory_.GetWeakPtr()));
   bubble->SetHighlightedButton(location_icon_view());
   bubble->GetWidget()->Show();
   return true;
diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.h b/chrome/browser/ui/views/location_bar/location_bar_view.h
index 686229c..1877f19 100644
--- a/chrome/browser/ui/views/location_bar/location_bar_view.h
+++ b/chrome/browser/ui/views/location_bar/location_bar_view.h
@@ -304,6 +304,10 @@
   // Gets the OmniboxPopupView associated with the model in |omnibox_view_|.
   OmniboxPopupView* GetOmniboxPopupView();
 
+  // Called when the page info bubble is closed.
+  void OnPageInfoBubbleClosed(views::Widget::ClosedReason closed_reason,
+                              bool reload_prompt);
+
   // LocationBar:
   GURL GetDestinationURL() const override;
   WindowOpenDisposition GetWindowOpenDisposition() const override;
@@ -449,11 +453,7 @@
                  ui::MaterialDesignControllerObserver>
       md_observer_{this};
 
-  // Used to scope the lifetime of asynchronous icon fetch callbacks to the
-  // lifetime of the object. Weak pointers issued by this factory are
-  // invalidated whenever we start a new icon fetch, so don't use this weak
-  // factory for any other purposes.
-  base::WeakPtrFactory<LocationBarView> icon_fetch_weak_ptr_factory_{this};
+  base::WeakPtrFactory<LocationBarView> weak_factory_{this};
 
   DISALLOW_COPY_AND_ASSIGN(LocationBarView);
 };
diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view.cc
index 9f0815e..742e353 100644
--- a/chrome/browser/ui/views/page_info/page_info_bubble_view.cc
+++ b/chrome/browser/ui/views/page_info/page_info_bubble_view.cc
@@ -440,7 +440,8 @@
     content::WebContents* web_contents,
     const GURL& url,
     security_state::SecurityLevel security_level,
-    const security_state::VisibleSecurityState& visible_security_state) {
+    const security_state::VisibleSecurityState& visible_security_state,
+    PageInfoClosingCallback closing_callback) {
   gfx::NativeView parent_view = platform_util::GetViewForWindow(parent_window);
 
   if (url.SchemeIs(content::kChromeUIScheme) ||
@@ -452,9 +453,9 @@
                                           web_contents, url);
   }
 
-  return new PageInfoBubbleView(anchor_view, anchor_rect, parent_view, profile,
-                                web_contents, url, security_level,
-                                visible_security_state);
+  return new PageInfoBubbleView(
+      anchor_view, anchor_rect, parent_view, profile, web_contents, url,
+      security_level, visible_security_state, std::move(closing_callback));
 }
 
 PageInfoBubbleView::PageInfoBubbleView(
@@ -465,19 +466,15 @@
     content::WebContents* web_contents,
     const GURL& url,
     security_state::SecurityLevel security_level,
-    const security_state::VisibleSecurityState& visible_security_state)
+    const security_state::VisibleSecurityState& visible_security_state,
+    PageInfoClosingCallback closing_callback)
     : PageInfoBubbleViewBase(anchor_view,
                              anchor_rect,
                              parent_window,
                              PageInfoBubbleViewBase::BUBBLE_PAGE_INFO,
                              web_contents),
       profile_(profile),
-      header_(nullptr),
-      site_settings_view_(nullptr),
-      cookie_button_(nullptr),
-      certificate_button_(nullptr),
-      page_feature_info_view_(nullptr),
-      weak_factory_(this) {
+      closing_callback_(std::move(closing_callback)) {
   // Capture the default bubble margin, and move it to the Layout classes. This
   // is necessary so that the views::Separator can extend the full width of the
   // bubble.
@@ -562,24 +559,9 @@
 
 void PageInfoBubbleView::OnWidgetDestroying(views::Widget* widget) {
   PageInfoBubbleViewBase::OnWidgetDestroying(widget);
-  presenter_->OnUIClosing();
-
-  // If we're closing the bubble because the user pressed ESC or because the
-  // user clicked Close (rather than the user clicking directly on something
-  // else), we should refocus the Omnibox. This lets the user tab into the
-  // "You should reload this page" infobar rather than dumping them back out
-  // into a stale webpage.
-  const views::Widget::ClosedReason closed_reason =
-      GetWidget()->closed_reason();
-  if (closed_reason == views::Widget::ClosedReason::kEscKeyPressed ||
-      closed_reason == views::Widget::ClosedReason::kCloseButtonClicked) {
-    // Because of how this bubble shows, the anchor is always in the toolbar,
-    // which means the infobar with the reload prompt is just after in the focus
-    // order.
-    View* const anchor = GetAnchorView();
-    if (anchor)
-      anchor->GetFocusManager()->SetFocusedView(anchor);
-  }
+  bool reload_prompt;
+  presenter_->OnUIClosing(&reload_prompt);
+  std::move(closing_callback_).Run(GetWidget()->closed_reason(), reload_prompt);
 }
 
 void PageInfoBubbleView::ButtonPressed(views::Button* button,
@@ -1041,7 +1023,8 @@
     const GURL& virtual_url,
     security_state::SecurityLevel security_level,
     const security_state::VisibleSecurityState& visible_security_state,
-    bubble_anchor_util::Anchor anchor) {
+    bubble_anchor_util::Anchor anchor,
+    PageInfoClosingCallback closing_callback) {
   AnchorConfiguration configuration =
       GetPageInfoAnchorConfiguration(browser, anchor);
   gfx::Rect anchor_rect =
@@ -1051,7 +1034,7 @@
       PageInfoBubbleView::CreatePageInfoBubble(
           configuration.anchor_view, anchor_rect, parent_window,
           browser->profile(), web_contents, virtual_url, security_level,
-          visible_security_state);
+          visible_security_state, std::move(closing_callback));
   bubble->SetHighlightedButton(configuration.highlighted_button);
   bubble->SetArrow(configuration.bubble_arrow);
   bubble->GetWidget()->Show();
diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view.h b/chrome/browser/ui/views/page_info/page_info_bubble_view.h
index f0ecfe6..e4346a6 100644
--- a/chrome/browser/ui/views/page_info/page_info_bubble_view.h
+++ b/chrome/browser/ui/views/page_info/page_info_bubble_view.h
@@ -8,9 +8,11 @@
 #include <memory>
 #include <vector>
 
+#include "base/callback.h"
 #include "base/compiler_specific.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
+#include "chrome/browser/ui/page_info/page_info_dialog.h"
 #include "chrome/browser/ui/page_info/page_info_ui.h"
 #include "chrome/browser/ui/views/bubble_anchor_util_views.h"
 #include "chrome/browser/ui/views/page_info/chosen_object_view_observer.h"
@@ -23,6 +25,7 @@
 #include "ui/views/controls/link_listener.h"
 #include "ui/views/controls/separator.h"
 #include "ui/views/controls/styled_label_listener.h"
+#include "ui/views/widget/widget.h"
 
 class BubbleHeaderView;
 class GURL;
@@ -48,7 +51,6 @@
 namespace views {
 class Link;
 class View;
-class Widget;
 }  // namespace views
 
 // The views implementation of the page info UI.
@@ -93,7 +95,8 @@
       content::WebContents* web_contents,
       const GURL& url,
       security_state::SecurityLevel security_level,
-      const security_state::VisibleSecurityState& visible_security_state);
+      const security_state::VisibleSecurityState& visible_security_state,
+      PageInfoClosingCallback closing_callback);
 
  private:
   friend class PageInfoBubbleViewBrowserTest;
@@ -107,7 +110,8 @@
       content::WebContents* web_contents,
       const GURL& url,
       security_state::SecurityLevel security_level,
-      const security_state::VisibleSecurityState& visible_security_state);
+      const security_state::VisibleSecurityState& visible_security_state,
+      PageInfoClosingCallback closing_callback);
 
   // PageInfoBubbleViewBase:
   gfx::Size CalculatePreferredSize() const override;
@@ -167,26 +171,26 @@
   // The presenter that controls the Page Info UI.
   std::unique_ptr<PageInfo> presenter_;
 
-  Profile* profile_;
+  Profile* const profile_;
 
   // The header section (containing security-related information).
-  BubbleHeaderView* header_;
+  BubbleHeaderView* header_ = nullptr;
 
   // The view that contains the certificate, cookie, and permissions sections.
-  views::View* site_settings_view_;
+  views::View* site_settings_view_ = nullptr;
 
   // The button that opens the "Cookies" dialog.
-  HoverButton* cookie_button_;
+  HoverButton* cookie_button_ = nullptr;
 
   // The button that opens the "Certificate" dialog.
-  HoverButton* certificate_button_;
+  HoverButton* certificate_button_ = nullptr;
 
   // The view that contains the "Permissions" table of the bubble.
-  views::View* permissions_view_;
+  views::View* permissions_view_ = nullptr;
 
   // The view that contains ui related to features on a page, like a presenting
   // VR page.
-  views::View* page_feature_info_view_;
+  views::View* page_feature_info_view_ = nullptr;
 
   // The certificate provided by the site, if one exists.
   scoped_refptr<net::X509Certificate> certificate_;
@@ -196,7 +200,9 @@
   // |Permission| changes.
   std::vector<std::unique_ptr<PermissionSelectorRow>> selector_rows_;
 
-  base::WeakPtrFactory<PageInfoBubbleView> weak_factory_;
+  PageInfoClosingCallback closing_callback_;
+
+  base::WeakPtrFactory<PageInfoBubbleView> weak_factory_{this};
 
   DISALLOW_COPY_AND_ASSIGN(PageInfoBubbleView);
 };
diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc
index 6cac31b..fbdf4db 100644
--- a/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc
+++ b/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc
@@ -71,11 +71,15 @@
     views::View* anchor_view = nullptr;
     view_ = new PageInfoBubbleView(
         anchor_view, gfx::Rect(), parent_, profile_, web_contents_, GURL(kUrl),
-        security_state::NONE, security_state::VisibleSecurityState());
+        security_state::NONE, security_state::VisibleSecurityState(),
+        base::BindOnce(&PageInfoBubbleViewTestApi::OnPageInfoBubbleClosed,
+                       base::Unretained(this), run_loop_.QuitClosure()));
   }
 
   PageInfoBubbleView* view() { return view_; }
   views::View* permissions_view() { return view_->permissions_view_; }
+  bool reload_prompt() const { return *reload_prompt_; }
+  views::Widget::ClosedReason closed_reason() const { return *closed_reason_; }
 
   base::string16 GetWindowTitle() { return view_->GetWindowTitle(); }
 
@@ -119,13 +123,26 @@
     CreateView();
   }
 
+  void WaitForBubbleClose() { run_loop_.Run(); }
+
  private:
+  void OnPageInfoBubbleClosed(base::RepeatingCallback<void()> quit_closure,
+                              views::Widget::ClosedReason closed_reason,
+                              bool reload_prompt) {
+    closed_reason_ = closed_reason;
+    reload_prompt_ = reload_prompt;
+    quit_closure.Run();
+  }
+
   PageInfoBubbleView* view_;  // Weak. Owned by its Widget.
 
   // For recreating the view.
   gfx::NativeView parent_;
   Profile* profile_;
   content::WebContents* web_contents_;
+  base::RunLoop run_loop_;
+  base::Optional<bool> reload_prompt_;
+  base::Optional<views::Widget::ClosedReason> closed_reason_;
 
   DISALLOW_COPY_AND_ASSIGN(PageInfoBubbleViewTestApi);
 };
@@ -629,3 +646,12 @@
   EXPECT_EQ(l10n_util::GetStringUTF16(IDS_PAGE_INFO_SECURE_SUMMARY),
             api_->GetWindowTitle());
 }
+
+TEST_F(PageInfoBubbleViewTest, EnsureCloseCallback) {
+  api_->view()->GetWidget()->CloseWithReason(
+      views::Widget::ClosedReason::kCloseButtonClicked);
+  api_->WaitForBubbleClose();
+  EXPECT_EQ(false, api_->reload_prompt());
+  EXPECT_EQ(views::Widget::ClosedReason::kCloseButtonClicked,
+            api_->closed_reason());
+}
diff --git a/chrome/browser/ui/views/payments/contact_info_editor_view_controller.cc b/chrome/browser/ui/views/payments/contact_info_editor_view_controller.cc
index bf44f0d..9f55487 100644
--- a/chrome/browser/ui/views/payments/contact_info_editor_view_controller.cc
+++ b/chrome/browser/ui/views/payments/contact_info_editor_view_controller.cc
@@ -9,8 +9,8 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/ui/views/payments/validating_textfield.h"
 #include "components/autofill/core/browser/autofill_country.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_type.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/phone_number_i18n.h"
 #include "components/autofill/core/browser/validation.h"
diff --git a/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc b/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc
index 443886ce..668e15b 100644
--- a/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc
+++ b/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc
@@ -28,7 +28,7 @@
 #include "components/autofill/core/browser/address_combobox_model.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
 #include "components/autofill/core/browser/autofill_type.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/payments/payments_service_url.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
diff --git a/chrome/browser/ui/views/payments/cvc_unmask_view_controller.cc b/chrome/browser/ui/views/payments/cvc_unmask_view_controller.cc
index a226582..697d0d30 100644
--- a/chrome/browser/ui/views/payments/cvc_unmask_view_controller.cc
+++ b/chrome/browser/ui/views/payments/cvc_unmask_view_controller.cc
@@ -17,7 +17,7 @@
 #include "chrome/browser/ui/views/payments/payment_request_views_util.h"
 #include "chrome/grit/generated_resources.h"
 #include "components/autofill/core/browser/autofill_client.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/payments/full_card_request.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/validation.h"
diff --git a/chrome/browser/ui/views/payments/error_message_view_controller_browsertest.cc b/chrome/browser/ui/views/payments/error_message_view_controller_browsertest.cc
index fbf8c6727..c6cf98c6 100644
--- a/chrome/browser/ui/views/payments/error_message_view_controller_browsertest.cc
+++ b/chrome/browser/ui/views/payments/error_message_view_controller_browsertest.cc
@@ -10,7 +10,7 @@
 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "content/public/test/browser_test_utils.h"
 
 namespace payments {
diff --git a/chrome/browser/ui/views/payments/order_summary_view_controller_browsertest.cc b/chrome/browser/ui/views/payments/order_summary_view_controller_browsertest.cc
index 5979ea5f7..93447730 100644
--- a/chrome/browser/ui/views/payments/order_summary_view_controller_browsertest.cc
+++ b/chrome/browser/ui/views/payments/order_summary_view_controller_browsertest.cc
@@ -7,8 +7,8 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h"
 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace payments {
diff --git a/chrome/browser/ui/views/payments/payment_request_browsertest.cc b/chrome/browser/ui/views/payments/payment_request_browsertest.cc
index 3342d62..d3e48778 100644
--- a/chrome/browser/ui/views/payments/payment_request_browsertest.cc
+++ b/chrome/browser/ui/views/payments/payment_request_browsertest.cc
@@ -12,9 +12,9 @@
 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h"
 #include "chrome/common/webui_url_constants.h"
 #include "chrome/test/base/ui_test_utils.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/payments/content/payment_request.h"
 #include "components/payments/content/payment_request_web_contents_manager.h"
 #include "components/web_modal/web_contents_modal_dialog_manager.h"
diff --git a/chrome/browser/ui/views/payments/payment_request_browsertest_base.cc b/chrome/browser/ui/views/payments/payment_request_browsertest_base.cc
index 8a982c4..b81f90d 100644
--- a/chrome/browser/ui/views/payments/payment_request_browsertest_base.cc
+++ b/chrome/browser/ui/views/payments/payment_request_browsertest_base.cc
@@ -27,8 +27,8 @@
 #include "chrome/browser/ui/views/payments/view_stack.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "components/autofill/core/browser/address_combobox_model.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/network_session_configurator/common/network_switches.h"
 #include "components/payments/content/payment_request.h"
diff --git a/chrome/browser/ui/views/payments/payment_request_can_make_payment_browsertest.cc b/chrome/browser/ui/views/payments/payment_request_can_make_payment_browsertest.cc
index 2a63c14..bd3df8c2 100644
--- a/chrome/browser/ui/views/payments/payment_request_can_make_payment_browsertest.cc
+++ b/chrome/browser/ui/views/payments/payment_request_can_make_payment_browsertest.cc
@@ -11,7 +11,7 @@
 #include "base/test/scoped_feature_list.h"
 #include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/payments/core/features.h"
 #include "content/public/common/content_features.h"
 #include "content/public/test/browser_test_utils.h"
diff --git a/chrome/browser/ui/views/payments/payment_request_can_make_payment_metrics_browsertest.cc b/chrome/browser/ui/views/payments/payment_request_can_make_payment_metrics_browsertest.cc
index 5f2b5f1f..578dec6 100644
--- a/chrome/browser/ui/views/payments/payment_request_can_make_payment_metrics_browsertest.cc
+++ b/chrome/browser/ui/views/payments/payment_request_can_make_payment_metrics_browsertest.cc
@@ -12,9 +12,9 @@
 #include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h"
 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h"
 #include "chrome/test/base/ui_test_utils.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/payments/core/journey_logger.h"
 #include "content/public/common/content_features.h"
 #include "content/public/test/browser_test_utils.h"
diff --git a/chrome/browser/ui/views/payments/payment_request_completion_status_metrics_browsertest.cc b/chrome/browser/ui/views/payments/payment_request_completion_status_metrics_browsertest.cc
index 5c7f9c5..6f466d39 100644
--- a/chrome/browser/ui/views/payments/payment_request_completion_status_metrics_browsertest.cc
+++ b/chrome/browser/ui/views/payments/payment_request_completion_status_metrics_browsertest.cc
@@ -10,9 +10,9 @@
 #include "base/test/scoped_feature_list.h"
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/payments/core/journey_logger.h"
 #include "content/public/common/content_features.h"
 #include "content/public/test/browser_test_utils.h"
diff --git a/chrome/browser/ui/views/payments/payment_request_debit_browsertest.cc b/chrome/browser/ui/views/payments/payment_request_debit_browsertest.cc
index 6236028..df28659 100644
--- a/chrome/browser/ui/views/payments/payment_request_debit_browsertest.cc
+++ b/chrome/browser/ui/views/payments/payment_request_debit_browsertest.cc
@@ -8,7 +8,7 @@
 #include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h"
 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/payments/core/features.h"
 #include "content/public/common/content_features.h"
 #include "content/public/test/browser_test_utils.h"
diff --git a/chrome/browser/ui/views/payments/payment_request_dialog_view.cc b/chrome/browser/ui/views/payments/payment_request_dialog_view.cc
index 1994fc9..e829fe04 100644
--- a/chrome/browser/ui/views/payments/payment_request_dialog_view.cc
+++ b/chrome/browser/ui/views/payments/payment_request_dialog_view.cc
@@ -23,8 +23,8 @@
 #include "chrome/browser/ui/views/payments/profile_list_view_controller.h"
 #include "chrome/browser/ui/views/payments/shipping_address_editor_view_controller.h"
 #include "chrome/browser/ui/views/payments/shipping_option_view_controller.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/constrained_window/constrained_window_views.h"
 #include "components/payments/content/payment_request.h"
 #include "components/strings/grit/components_strings.h"
diff --git a/chrome/browser/ui/views/payments/payment_request_has_enrolled_instrument_browsertest.cc b/chrome/browser/ui/views/payments/payment_request_has_enrolled_instrument_browsertest.cc
index cda6c6b..59048db 100644
--- a/chrome/browser/ui/views/payments/payment_request_has_enrolled_instrument_browsertest.cc
+++ b/chrome/browser/ui/views/payments/payment_request_has_enrolled_instrument_browsertest.cc
@@ -11,7 +11,7 @@
 #include "base/test/scoped_feature_list.h"
 #include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/payments/core/features.h"
 #include "content/public/common/content_features.h"
 #include "content/public/test/browser_test_utils.h"
diff --git a/chrome/browser/ui/views/payments/payment_request_journey_logger_browsertest.cc b/chrome/browser/ui/views/payments/payment_request_journey_logger_browsertest.cc
index fce8329..c84b9d6 100644
--- a/chrome/browser/ui/views/payments/payment_request_journey_logger_browsertest.cc
+++ b/chrome/browser/ui/views/payments/payment_request_journey_logger_browsertest.cc
@@ -11,9 +11,9 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h"
 #include "chrome/test/base/ui_test_utils.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/payments/core/journey_logger.h"
 #include "components/ukm/test_ukm_recorder.h"
 #include "content/public/common/content_features.h"
diff --git a/chrome/browser/ui/views/payments/payment_request_no_update_with_browsertest.cc b/chrome/browser/ui/views/payments/payment_request_no_update_with_browsertest.cc
index 69e0051..e6aec8b 100644
--- a/chrome/browser/ui/views/payments/payment_request_no_update_with_browsertest.cc
+++ b/chrome/browser/ui/views/payments/payment_request_no_update_with_browsertest.cc
@@ -5,8 +5,8 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h"
 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "content/public/test/browser_test_utils.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/chrome/browser/ui/views/payments/payment_request_payment_response_browsertest.cc b/chrome/browser/ui/views/payments/payment_request_payment_response_browsertest.cc
index 57c9b6db..619b7e2 100644
--- a/chrome/browser/ui/views/payments/payment_request_payment_response_browsertest.cc
+++ b/chrome/browser/ui/views/payments/payment_request_payment_response_browsertest.cc
@@ -10,9 +10,9 @@
 #include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h"
 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h"
 #include "chrome/test/base/ui_test_utils.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/web_modal/web_contents_modal_dialog_manager.h"
 #include "content/public/test/browser_test_utils.h"
 
diff --git a/chrome/browser/ui/views/payments/payment_request_shipping_address_instance_browsertest.cc b/chrome/browser/ui/views/payments/payment_request_shipping_address_instance_browsertest.cc
index 2bece5d9..378622a 100644
--- a/chrome/browser/ui/views/payments/payment_request_shipping_address_instance_browsertest.cc
+++ b/chrome/browser/ui/views/payments/payment_request_shipping_address_instance_browsertest.cc
@@ -6,9 +6,9 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h"
 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 
 namespace payments {
 namespace {
diff --git a/chrome/browser/ui/views/payments/payment_request_show_promise_browsertest.cc b/chrome/browser/ui/views/payments/payment_request_show_promise_browsertest.cc
index de91a04..6f7ccfa 100644
--- a/chrome/browser/ui/views/payments/payment_request_show_promise_browsertest.cc
+++ b/chrome/browser/ui/views/payments/payment_request_show_promise_browsertest.cc
@@ -5,8 +5,8 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h"
 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/web_modal/web_contents_modal_dialog_manager.h"
 #include "content/public/test/browser_test_utils.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/ui/views/payments/payment_request_update_with_browsertest.cc b/chrome/browser/ui/views/payments/payment_request_update_with_browsertest.cc
index 4a471e1..27c4a25 100644
--- a/chrome/browser/ui/views/payments/payment_request_update_with_browsertest.cc
+++ b/chrome/browser/ui/views/payments/payment_request_update_with_browsertest.cc
@@ -5,8 +5,8 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h"
 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "content/public/test/browser_test_utils.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/chrome/browser/ui/views/payments/payment_request_use_stats_browsertest.cc b/chrome/browser/ui/views/payments/payment_request_use_stats_browsertest.cc
index 14dfc32..76d81c2a 100644
--- a/chrome/browser/ui/views/payments/payment_request_use_stats_browsertest.cc
+++ b/chrome/browser/ui/views/payments/payment_request_use_stats_browsertest.cc
@@ -10,9 +10,9 @@
 #include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h"
 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h"
 #include "chrome/test/base/ui_test_utils.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/test_autofill_clock.h"
 #include "components/web_modal/web_contents_modal_dialog_manager.h"
diff --git a/chrome/browser/ui/views/payments/payment_request_views_util.cc b/chrome/browser/ui/views/payments/payment_request_views_util.cc
index b3288aa..904bc441 100644
--- a/chrome/browser/ui/views/payments/payment_request_views_util.cc
+++ b/chrome/browser/ui/views/payments/payment_request_views_util.cc
@@ -15,9 +15,9 @@
 #include "chrome/grit/chromium_strings.h"
 #include "chrome/grit/theme_resources.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_type.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/phone_number_i18n.h"
 #include "components/payments/content/icon/icon_size.h"
diff --git a/chrome/browser/ui/views/payments/payment_sheet_view_controller_browsertest.cc b/chrome/browser/ui/views/payments/payment_sheet_view_controller_browsertest.cc
index 4149a07e..f302f2b 100644
--- a/chrome/browser/ui/views/payments/payment_sheet_view_controller_browsertest.cc
+++ b/chrome/browser/ui/views/payments/payment_sheet_view_controller_browsertest.cc
@@ -5,9 +5,9 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h"
 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/strings/grit/components_strings.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/ui/views/payments/profile_list_view_controller_browsertest.cc b/chrome/browser/ui/views/payments/profile_list_view_controller_browsertest.cc
index b453767b..59899a4 100644
--- a/chrome/browser/ui/views/payments/profile_list_view_controller_browsertest.cc
+++ b/chrome/browser/ui/views/payments/profile_list_view_controller_browsertest.cc
@@ -6,8 +6,8 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h"
 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "ui/views/controls/label.h"
diff --git a/chrome/browser/ui/views/payments/shipping_address_editor_view_controller_browsertest.cc b/chrome/browser/ui/views/payments/shipping_address_editor_view_controller_browsertest.cc
index d0f1f39..2c8031a 100644
--- a/chrome/browser/ui/views/payments/shipping_address_editor_view_controller_browsertest.cc
+++ b/chrome/browser/ui/views/payments/shipping_address_editor_view_controller_browsertest.cc
@@ -12,9 +12,9 @@
 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h"
 #include "chrome/browser/ui/views/payments/validating_textfield.h"
 #include "components/autofill/core/browser/autofill_country.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/country_combobox_model.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/region_combobox_model.h"
 #include "components/autofill/core/browser/test_region_data_loader.h"
diff --git a/chrome/browser/ui/views/payments/shipping_option_view_controller_browsertest.cc b/chrome/browser/ui/views/payments/shipping_option_view_controller_browsertest.cc
index c9f139c..f5853c4 100644
--- a/chrome/browser/ui/views/payments/shipping_option_view_controller_browsertest.cc
+++ b/chrome/browser/ui/views/payments/shipping_option_view_controller_browsertest.cc
@@ -7,8 +7,8 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h"
 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/chrome/browser/ui/views/toolbar/toolbar_view.cc b/chrome/browser/ui/views/toolbar/toolbar_view.cc
index d727e12c1..f7628b7d 100644
--- a/chrome/browser/ui/views/toolbar/toolbar_view.cc
+++ b/chrome/browser/ui/views/toolbar/toolbar_view.cc
@@ -49,7 +49,7 @@
 #include "chrome/browser/ui/views/toolbar/reload_button.h"
 #include "chrome/browser/ui/views/toolbar/toolbar_button.h"
 #include "chrome/browser/ui/views/toolbar/toolbar_page_action_icon_container_view.h"
-#include "chrome/browser/ui/web_app_browser_controller.h"
+#include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "chrome/browser/upgrade_detector/upgrade_detector.h"
 #include "chrome/common/chrome_features.h"
 #include "chrome/common/pref_names.h"
@@ -107,7 +107,7 @@
     return ToolbarView::DisplayMode::NORMAL;
 
   if (browser->web_app_controller() &&
-      WebAppBrowserController::IsForExperimentalWebAppBrowser(browser) &&
+      web_app::AppBrowserController::IsForExperimentalWebAppBrowser(browser) &&
       base::FeatureList::IsEnabled(features::kDesktopPWAsCustomTabUI))
     return ToolbarView::DisplayMode::CUSTOM_TAB;
 
diff --git a/chrome/browser/ui/web_app_browser_controller.cc b/chrome/browser/ui/web_applications/app_browser_controller.cc
similarity index 61%
rename from chrome/browser/ui/web_app_browser_controller.cc
rename to chrome/browser/ui/web_applications/app_browser_controller.cc
index 1e7fe80..c3c2c870 100644
--- a/chrome/browser/ui/web_app_browser_controller.cc
+++ b/chrome/browser/ui/web_applications/app_browser_controller.cc
@@ -1,51 +1,34 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
+// Copyright 2019 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 "chrome/browser/ui/web_app_browser_controller.h"
+#include "chrome/browser/ui/web_applications/app_browser_controller.h"
 
-#include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/extensions/extension_util.h"
-#include "chrome/browser/extensions/tab_helper.h"
-#include "chrome/browser/profiles/profile.h"
+#include "base/feature_list.h"
 #include "chrome/browser/ssl/security_state_tab_helper.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_window.h"
-#include "chrome/browser/ui/extensions/hosted_app_browser_controller.h"
-#include "chrome/browser/ui/location_bar/location_bar.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "chrome/browser/web_applications/components/web_app_helpers.h"
 #include "chrome/common/chrome_features.h"
-#include "chrome/common/extensions/api/url_handlers/url_handlers_parser.h"
-#include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
-#include "chrome/common/extensions/manifest_handlers/app_theme_color_info.h"
 #include "components/security_state/core/security_state.h"
 #include "components/url_formatter/url_formatter.h"
-#include "content/public/browser/browser_context.h"
+#include "content/public/browser/navigation_controller.h"
 #include "content/public/browser/navigation_entry.h"
-#include "content/public/browser/render_view_host.h"
 #include "content/public/browser/web_contents.h"
-#include "content/public/common/url_constants.h"
-#include "content/public/common/web_preferences.h"
-#include "extensions/browser/extension_registry.h"
-#include "extensions/browser/extension_system.h"
-#include "extensions/browser/management_policy.h"
-#include "extensions/common/constants.h"
-#include "extensions/common/extension.h"
-#include "third_party/blink/public/mojom/renderer_preferences.mojom.h"
-#include "ui/gfx/favicon_size.h"
-#include "ui/gfx/image/image_skia.h"
+#include "net/base/escape.h"
 #include "url/gurl.h"
 
+namespace web_app {
+
 // static
-bool WebAppBrowserController::IsForExperimentalWebAppBrowser(
+bool AppBrowserController::IsForExperimentalWebAppBrowser(
     const Browser* browser) {
   return browser && browser->web_app_controller() &&
          browser->web_app_controller()->IsForExperimentalWebAppBrowser();
 }
 
 // static
-base::string16 WebAppBrowserController::FormatUrlOrigin(const GURL& url) {
+base::string16 AppBrowserController::FormatUrlOrigin(const GURL& url) {
   return url_formatter::FormatUrl(
       url.GetOrigin(),
       url_formatter::kFormatUrlOmitUsernamePassword |
@@ -57,7 +40,7 @@
 }
 
 // static
-bool WebAppBrowserController::IsSiteSecure(
+bool AppBrowserController::IsSiteSecure(
     const content::WebContents* web_contents) {
   const SecurityStateTabHelper* helper =
       SecurityStateTabHelper::FromWebContents(web_contents);
@@ -79,51 +62,51 @@
   return false;
 }
 
-WebAppBrowserController::WebAppBrowserController(Browser* browser)
+AppBrowserController::AppBrowserController(Browser* browser)
     : content::WebContentsObserver(nullptr), browser_(browser) {
   browser->tab_strip_model()->AddObserver(this);
 }
 
-WebAppBrowserController::~WebAppBrowserController() {
+AppBrowserController::~AppBrowserController() {
   browser()->tab_strip_model()->RemoveObserver(this);
 }
 
-bool WebAppBrowserController::IsForExperimentalWebAppBrowser() const {
+bool AppBrowserController::IsForExperimentalWebAppBrowser() const {
   return base::FeatureList::IsEnabled(::features::kDesktopPWAWindowing) ||
          base::FeatureList::IsEnabled(::features::kFocusMode);
 }
 
-bool WebAppBrowserController::CreatedForInstalledPwa() const {
+bool AppBrowserController::CreatedForInstalledPwa() const {
   return false;
 }
 
-bool WebAppBrowserController::IsInstalled() const {
+bool AppBrowserController::IsInstalled() const {
   return false;
 }
 
-bool WebAppBrowserController::IsHostedApp() const {
+bool AppBrowserController::IsHostedApp() const {
   return false;
 }
 
-bool WebAppBrowserController::CanUninstall() const {
+bool AppBrowserController::CanUninstall() const {
   return false;
 }
 
-void WebAppBrowserController::Uninstall() {
+void AppBrowserController::Uninstall() {
   NOTREACHED();
   return;
 }
 
-void WebAppBrowserController::UpdateToolbarVisibility(bool animate) const {
+void AppBrowserController::UpdateToolbarVisibility(bool animate) const {
   browser()->window()->UpdateToolbarVisibility(ShouldShowToolbar(), animate);
 }
 
-void WebAppBrowserController::DidChangeThemeColor(
+void AppBrowserController::DidChangeThemeColor(
     base::Optional<SkColor> theme_color) {
   browser_->window()->UpdateFrameColor();
 }
 
-base::Optional<SkColor> WebAppBrowserController::GetThemeColor() const {
+base::Optional<SkColor> AppBrowserController::GetThemeColor() const {
   base::Optional<SkColor> result;
   // HTML meta theme-color tag overrides manifest theme_color, see spec:
   // https://www.w3.org/TR/appmanifest/#theme_color-member
@@ -142,7 +125,7 @@
   return SkColorSetA(*result, SK_AlphaOPAQUE);
 }
 
-base::string16 WebAppBrowserController::GetTitle() const {
+base::string16 AppBrowserController::GetTitle() const {
   content::WebContents* web_contents =
       browser()->tab_strip_model()->GetActiveWebContents();
   if (!web_contents)
@@ -153,7 +136,7 @@
   return entry ? entry->GetTitle() : base::string16();
 }
 
-void WebAppBrowserController::OnTabStripModelChanged(
+void AppBrowserController::OnTabStripModelChanged(
     TabStripModel* tab_strip_model,
     const TabStripModelChange& change,
     const TabStripSelectionChange& selection) {
@@ -166,13 +149,15 @@
   }
 }
 
-void WebAppBrowserController::OnTabInserted(content::WebContents* contents) {
+void AppBrowserController::OnTabInserted(content::WebContents* contents) {
   DCHECK(!web_contents()) << " App windows are single tabbed only";
   content::WebContentsObserver::Observe(contents);
   DidChangeThemeColor(GetThemeColor());
 }
 
-void WebAppBrowserController::OnTabRemoved(content::WebContents* contents) {
+void AppBrowserController::OnTabRemoved(content::WebContents* contents) {
   DCHECK_EQ(contents, web_contents());
   content::WebContentsObserver::Observe(nullptr);
 }
+
+}  // namespace web_app
diff --git a/chrome/browser/ui/web_app_browser_controller.h b/chrome/browser/ui/web_applications/app_browser_controller.h
similarity index 87%
rename from chrome/browser/ui/web_app_browser_controller.h
rename to chrome/browser/ui/web_applications/app_browser_controller.h
index 4e10bc0f..46b4b60 100644
--- a/chrome/browser/ui/web_app_browser_controller.h
+++ b/chrome/browser/ui/web_applications/app_browser_controller.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_WEB_APP_BROWSER_CONTROLLER_H_
-#define CHROME_BROWSER_UI_WEB_APP_BROWSER_CONTROLLER_H_
+#ifndef CHROME_BROWSER_UI_WEB_APPLICATIONS_APP_BROWSER_CONTROLLER_H_
+#define CHROME_BROWSER_UI_WEB_APPLICATIONS_APP_BROWSER_CONTROLLER_H_
 
 #include <string>
 
@@ -20,11 +20,13 @@
 class ImageSkia;
 }
 
+namespace web_app {
+
 // Class to encapsulate logic to control the browser UI for web apps.
-class WebAppBrowserController : public TabStripModelObserver,
-                                public content::WebContentsObserver {
+class AppBrowserController : public TabStripModelObserver,
+                             public content::WebContentsObserver {
  public:
-  ~WebAppBrowserController() override;
+  ~AppBrowserController() override;
 
   // Returns whether |browser| uses the experimental hosted app experience.
   // Convenience wrapper for checking IsForExperimentalWebAppBrowser() on
@@ -103,7 +105,7 @@
       const TabStripSelectionChange& selection) override;
 
  protected:
-  explicit WebAppBrowserController(Browser* browser);
+  explicit AppBrowserController(Browser* browser);
   // Called by OnTabstripModelChanged().
   virtual void OnTabInserted(content::WebContents* contents);
   virtual void OnTabRemoved(content::WebContents* contents);
@@ -111,7 +113,9 @@
  private:
   Browser* const browser_;
 
-  DISALLOW_COPY_AND_ASSIGN(WebAppBrowserController);
+  DISALLOW_COPY_AND_ASSIGN(AppBrowserController);
 };
 
-#endif  // CHROME_BROWSER_UI_WEB_APP_BROWSER_CONTROLLER_H_
+}  // namespace web_app
+
+#endif  // CHROME_BROWSER_UI_WEB_APPLICATIONS_APP_BROWSER_CONTROLLER_H_
diff --git a/chrome/browser/ui/web_app_browser_controller_unittest.cc b/chrome/browser/ui/web_applications/app_browser_controller_unittest.cc
similarity index 84%
rename from chrome/browser/ui/web_app_browser_controller_unittest.cc
rename to chrome/browser/ui/web_applications/app_browser_controller_unittest.cc
index 3698a2e4..033a7d1 100644
--- a/chrome/browser/ui/web_app_browser_controller_unittest.cc
+++ b/chrome/browser/ui/web_applications/app_browser_controller_unittest.cc
@@ -2,13 +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/web_app_browser_controller.h"
+#include "chrome/browser/ui/web_applications/app_browser_controller.h"
 
 #include "base/strings/utf_string_conversions.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
+namespace web_app {
+
 // Tests that various URLs get formatted as an origin string in the desired way.
-TEST(WebAppBrowserController, FormatUrlOrigin) {
+TEST(AppBrowserController, FormatUrlOrigin) {
   constexpr struct {
     const char* const input;
     const wchar_t* const expectation;
@@ -29,7 +31,9 @@
       {"https://xn--36c-tfa.com", L"xn--36c-tfa.com"},
   };
   for (auto test_case : kTestCases) {
-    EXPECT_EQ(WebAppBrowserController::FormatUrlOrigin(GURL(test_case.input)),
+    EXPECT_EQ(AppBrowserController::FormatUrlOrigin(GURL(test_case.input)),
               base::WideToUTF16(test_case.expectation));
   }
 }
+
+}  // namespace web_app
diff --git a/chrome/browser/ui/web_applications/web_app_dialog_utils.cc b/chrome/browser/ui/web_applications/web_app_dialog_utils.cc
index acd66f5c..0e8416f7 100644
--- a/chrome/browser/ui/web_applications/web_app_dialog_utils.cc
+++ b/chrome/browser/ui/web_applications/web_app_dialog_utils.cc
@@ -25,26 +25,13 @@
 
 namespace {
 
-// Use tricky function adapters here to connect old API with new unique_ptr
-// based API. TODO(loyso): Erase these type adapters. crbug.com/915043.
-using AcceptanceCallback = InstallManager::WebAppInstallationAcceptanceCallback;
-
-void BookmarkAppAcceptanceCallback(
-    AcceptanceCallback web_app_acceptance_callback,
-    bool user_accepted,
-    const WebApplicationInfo& web_app_info) {
-  std::move(web_app_acceptance_callback)
-      .Run(user_accepted, std::make_unique<WebApplicationInfo>(web_app_info));
-}
-
 void WebAppInstallDialogCallback(
     WebappInstallSource install_source,
     content::WebContents* initiator_web_contents,
     std::unique_ptr<WebApplicationInfo> web_app_info,
     ForInstallableSite for_installable_site,
-    AcceptanceCallback web_app_acceptance_callback) {
-  chrome::AppInstallationAcceptanceCallback adapted_callback = base::BindOnce(
-      BookmarkAppAcceptanceCallback, std::move(web_app_acceptance_callback));
+    InstallManager::WebAppInstallationAcceptanceCallback
+        web_app_acceptance_callback) {
   // This is a copy paste of BookmarkAppHelper::OnIconsDownloaded().
   // TODO(https://crbug.com/915043): Delete
   // BookmarkAppHelper::OnIconsDownloaded().
@@ -53,14 +40,14 @@
     web_app_info->open_as_window = true;
     if (install_source == WebappInstallSource::OMNIBOX_INSTALL_ICON) {
       chrome::ShowPWAInstallBubble(initiator_web_contents, *web_app_info,
-                                   std::move(adapted_callback));
+                                   std::move(web_app_acceptance_callback));
     } else {
       chrome::ShowPWAInstallDialog(initiator_web_contents, *web_app_info,
-                                   std::move(adapted_callback));
+                                   std::move(web_app_acceptance_callback));
     }
   } else {
     chrome::ShowBookmarkAppDialog(initiator_web_contents, *web_app_info,
-                                  std::move(adapted_callback));
+                                  std::move(web_app_acceptance_callback));
   }
 }
 
diff --git a/chrome/browser/ui/web_applications/web_app_ui_delegate_impl.cc b/chrome/browser/ui/web_applications/web_app_ui_delegate_impl.cc
index a9fbcf1..64cbe8b 100644
--- a/chrome/browser/ui/web_applications/web_app_ui_delegate_impl.cc
+++ b/chrome/browser/ui/web_applications/web_app_ui_delegate_impl.cc
@@ -9,7 +9,7 @@
 #include "base/callback.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_list.h"
-#include "chrome/browser/ui/web_app_browser_controller.h"
+#include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "chrome/browser/ui/web_applications/web_app_ui_delegate_impl_factory.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 
diff --git a/chrome/browser/ui/webui/downloads/downloads_ui.cc b/chrome/browser/ui/webui/downloads/downloads_ui.cc
index 0b8d0d0..d0518761 100644
--- a/chrome/browser/ui/webui/downloads/downloads_ui.cc
+++ b/chrome/browser/ui/webui/downloads/downloads_ui.cc
@@ -25,8 +25,9 @@
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/common/url_constants.h"
-#include "chrome/grit/browser_resources.h"
 #include "chrome/grit/chromium_strings.h"
+#include "chrome/grit/downloads_resources.h"
+#include "chrome/grit/downloads_resources_map.h"
 #include "chrome/grit/generated_resources.h"
 #include "chrome/grit/theme_resources.h"
 #include "components/prefs/pref_service.h"
@@ -142,25 +143,10 @@
   source->AddResourcePath("crisper.js", IDR_DOWNLOADS_CRISPER_JS);
   source->SetDefaultResource(IDR_DOWNLOADS_VULCANIZED_HTML);
 #else
-  source->AddResourcePath("browser_proxy.html",
-                          IDR_DOWNLOADS_BROWSER_PROXY_HTML);
-  source->AddResourcePath("browser_proxy.js", IDR_DOWNLOADS_BROWSER_PROXY_JS);
-  source->AddResourcePath("constants.html", IDR_DOWNLOADS_CONSTANTS_HTML);
-  source->AddResourcePath("constants.js", IDR_DOWNLOADS_CONSTANTS_JS);
-  source->AddResourcePath("downloads.js", IDR_DOWNLOADS_DOWNLOADS_JS);
-  source->AddResourcePath("i18n_setup.html", IDR_DOWNLOADS_I18N_SETUP_HTML);
-  source->AddResourcePath("icon_loader.html", IDR_DOWNLOADS_ICON_LOADER_HTML);
-  source->AddResourcePath("icon_loader.js", IDR_DOWNLOADS_ICON_LOADER_JS);
-  source->AddResourcePath("icons.html", IDR_DOWNLOADS_ICONS_HTML);
-  source->AddResourcePath("item.html", IDR_DOWNLOADS_ITEM_HTML);
-  source->AddResourcePath("item.js", IDR_DOWNLOADS_ITEM_JS);
-  source->AddResourcePath("manager.html", IDR_DOWNLOADS_MANAGER_HTML);
-  source->AddResourcePath("manager.js", IDR_DOWNLOADS_MANAGER_JS);
-  source->AddResourcePath("search_service.html",
-                          IDR_DOWNLOADS_SEARCH_SERVICE_HTML);
-  source->AddResourcePath("search_service.js", IDR_DOWNLOADS_SEARCH_SERVICE_JS);
-  source->AddResourcePath("toolbar.html", IDR_DOWNLOADS_TOOLBAR_HTML);
-  source->AddResourcePath("toolbar.js", IDR_DOWNLOADS_TOOLBAR_JS);
+  for (size_t i = 0; i < kDownloadsResourcesSize; ++i) {
+    source->AddResourcePath(kDownloadsResources[i].name,
+                            kDownloadsResources[i].value);
+  }
   source->SetDefaultResource(IDR_DOWNLOADS_DOWNLOADS_HTML);
 #endif
 
diff --git a/chrome/browser/ui/webui/managed_ui_handler.cc b/chrome/browser/ui/webui/managed_ui_handler.cc
index 234e7b6..5fd6841e 100644
--- a/chrome/browser/ui/webui/managed_ui_handler.cc
+++ b/chrome/browser/ui/webui/managed_ui_handler.cc
@@ -7,7 +7,6 @@
 #include <utility>
 
 #include "base/bind.h"
-#include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/policy/profile_policy_connector.h"
@@ -15,14 +14,8 @@
 #include "chrome/browser/ui/managed_ui.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/common/webui_url_constants.h"
-#include "chrome/grit/generated_resources.h"
 #include "content/public/browser/web_ui.h"
 #include "content/public/browser/web_ui_data_source.h"
-#include "ui/base/l10n/l10n_util.h"
-
-#if defined(OS_CHROMEOS)
-#include "ui/chromeos/devicetype_utils.h"
-#endif
 
 namespace {
 
@@ -117,16 +110,8 @@
 std::unique_ptr<base::DictionaryValue> ManagedUIHandler::GetDataSourceUpdate()
     const {
   auto update = std::make_unique<base::DictionaryValue>();
-
   update->SetKey("managedByOrg",
-                 base::Value(l10n_util::GetStringFUTF16(
-                     IDS_MANAGED_BY_ORG_WITH_HYPERLINK,
-                     base::UTF8ToUTF16(chrome::kChromeUIManagementURL)
-#if defined(OS_CHROMEOS)
-                         ,
-                     ui::GetChromeOSDeviceName()
-#endif
-                         )));
+                 base::Value(chrome::GetManagedUiWebUILabel(profile_)));
   update->SetKey("isManaged", base::Value(managed_));
   return update;
 }
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
index 16e0616..21858f4 100644
--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -1418,6 +1418,8 @@
     {"spellCheckEnhancedDescription",
      IDS_SETTINGS_LANGUAGES_SPELL_CHECK_ENHANCED_DESCRIPTION},
 #if !defined(OS_MACOSX)
+    {"spellCheckDisabledReason",
+     IDS_SETTING_LANGUAGES_SPELL_CHECK_DISABLED_REASON},
     {"spellCheckLanguagesListTitle",
      IDS_SETTINGS_LANGUAGES_SPELL_CHECK_LANGUAGES_LIST_TITLE},
     {"manageSpellCheck", IDS_SETTINGS_LANGUAGES_SPELL_CHECK_MANAGE},
@@ -2215,17 +2217,24 @@
   const bool is_assistant_allowed =
       assistant::IsAssistantAllowedForProfile(profile) ==
       ash::mojom::AssistantAllowedState::ALLOWED;
+  // SplitSettings moves Assistant to the OS settings window.
+  const bool assistant_in_browser_settings =
+      is_assistant_allowed && !chromeos::features::IsSplitSettingsEnabled();
 #endif
 
   LocalizedString localized_strings[] = {
 #if defined(OS_CHROMEOS)
-    {"searchPageTitle", is_assistant_allowed ? IDS_SETTINGS_SEARCH_AND_ASSISTANT
-                                             : IDS_SETTINGS_SEARCH},
+    {"searchPageTitle", assistant_in_browser_settings
+                            ? IDS_SETTINGS_SEARCH_AND_ASSISTANT
+                            : IDS_SETTINGS_SEARCH},
 #else
     {"searchPageTitle", IDS_SETTINGS_SEARCH},
 #endif
     {"searchEnginesManage", IDS_SETTINGS_SEARCH_MANAGE_SEARCH_ENGINES},
 #if defined(OS_CHROMEOS)
+    {"osSearchPageTitle", is_assistant_allowed
+                              ? IDS_SETTINGS_SEARCH_AND_ASSISTANT
+                              : IDS_SETTINGS_SEARCH},
     {"searchGoogleAssistant", IDS_SETTINGS_SEARCH_GOOGLE_ASSISTANT},
     {"searchGoogleAssistantEnabled",
      IDS_SETTINGS_SEARCH_GOOGLE_ASSISTANT_ENABLED},
diff --git a/chrome/chrome_paks.gni b/chrome/chrome_paks.gni
index aba6aad8..8ff44c72 100644
--- a/chrome/chrome_paks.gni
+++ b/chrome/chrome_paks.gni
@@ -138,6 +138,7 @@
       # New paks should be added here by default.
       sources += [
         "$root_gen_dir/chrome/component_extension_resources.pak",
+        "$root_gen_dir/chrome/downloads_resources.pak",
         "$root_gen_dir/chrome/local_ntp_resources.pak",
         "$root_gen_dir/chrome/settings_resources.pak",
         "$root_gen_dir/content/browser/devtools/devtools_resources.pak",
@@ -145,6 +146,7 @@
       ]
       deps += [
         "//chrome/browser/resources:component_extension_resources",
+        "//chrome/browser/resources:downloads_resources",
         "//chrome/browser/resources:local_ntp_resources",
         "//chrome/browser/resources:settings_resources",
         "//content/browser/devtools:devtools_resources",
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc
index 7e09d16..74f7163 100644
--- a/chrome/common/chrome_switches.cc
+++ b/chrome/common/chrome_switches.cc
@@ -168,6 +168,9 @@
 // Tells the diagnostics mode to do the requested recovery step(s).
 const char kDiagnosticsRecovery[]           = "diagnostics-recovery";
 
+// Disable auto-reload of error pages.
+const char kDisableAutoReload[] = "disable-auto-reload";
+
 // Disable several subsystems which run network requests in the background.
 // This is for use when doing network performance testing to avoid noise in the
 // measurements.
@@ -212,13 +215,6 @@
 const char kDisableExtensionsFileAccessCheck[] =
     "disable-extensions-file-access-check";
 
-// Disable auto-reload of error pages if offline.
-const char kDisableOfflineAutoReload[]      = "disable-offline-auto-reload";
-
-// Disable only auto-reloading error pages when the tab is visible.
-const char kDisableOfflineAutoReloadVisibleOnly[] =
-    "disable-offline-auto-reload-visible-only";
-
 // Disable pop-up blocking.
 const char kDisablePopupBlocking[]          = "disable-popup-blocking";
 
@@ -261,6 +257,9 @@
 // Overrides the path of Easy Unlock component app.
 const char kEasyUnlockAppPath[]             = "easy-unlock-app-path";
 
+// Enable auto-reload of error pages.
+const char kEnableAutoReload[] = "enable-auto-reload";
+
 // If the WebRTC logging private API is active, enables audio debug recordings.
 const char kEnableAudioDebugRecordingsFromExtension[] =
     "enable-audio-debug-recordings-from-extension";
@@ -301,13 +300,6 @@
 // Enables the network-related benchmarking extensions.
 const char kEnableNetBenchmarking[]         = "enable-net-benchmarking";
 
-// Enable auto-reload of error pages if offline.
-const char kEnableOfflineAutoReload[]       = "enable-offline-auto-reload";
-
-// Only auto-reload error pages when the tab is visible.
-const char kEnableOfflineAutoReloadVisibleOnly[] =
-    "enable-offline-auto-reload-visible-only";
-
 // Enables a number of potentially annoying security features (strict mixed
 // content mode, powerful feature restrictions, etc.)
 const char kEnablePotentiallyAnnoyingSecurityFeatures[] =
diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h
index 25ed4a84..de75a32 100644
--- a/chrome/common/chrome_switches.h
+++ b/chrome/common/chrome_switches.h
@@ -64,6 +64,7 @@
 extern const char kDiagnostics[];
 extern const char kDiagnosticsFormat[];
 extern const char kDiagnosticsRecovery[];
+extern const char kDisableAutoReload[];
 extern const char kDisableBackgroundNetworking[];
 extern const char kDisableBundledPpapiFlash[];
 extern const char kDisableClientSidePhishingDetection[];
@@ -75,8 +76,6 @@
 extern const char kDisableExtensions[];
 extern const char kDisableExtensionsExcept[];
 extern const char kDisableExtensionsFileAccessCheck[];
-extern const char kDisableOfflineAutoReload[];
-extern const char kDisableOfflineAutoReloadVisibleOnly[];
 extern const char kDisablePopupBlocking[];
 extern const char kDisablePrintPreview[];
 extern const char kDisablePromptOnRepost[];
@@ -88,6 +87,7 @@
 extern const char kDumpBrowserHistograms[];
 extern const char kEasyUnlockAppPath[];
 extern const char kEnableAudioDebugRecordingsFromExtension[];
+extern const char kEnableAutoReload[];
 extern const char kEnableBookmarkUndo[];
 extern const char kEnableCloudPrintProxy[];
 extern const char kEnableDeviceDiscoveryNotifications[];
@@ -98,8 +98,6 @@
 extern const char kEnableNaCl[];
 extern const char kEnableNavigationTracing[];
 extern const char kEnableNetBenchmarking[];
-extern const char kEnableOfflineAutoReload[];
-extern const char kEnableOfflineAutoReloadVisibleOnly[];
 extern const char kEnablePotentiallyAnnoyingSecurityFeatures[];
 extern const char kExtensionContentVerification[];
 extern const char kExtensionContentVerificationBootstrap[];
diff --git a/chrome/installer/mac/sign_chrome.py b/chrome/installer/mac/sign_chrome.py
index 964cd09b..062457e7 100755
--- a/chrome/installer/mac/sign_chrome.py
+++ b/chrome/installer/mac/sign_chrome.py
@@ -86,6 +86,9 @@
     config = create_config(args.identity, args.keychain, args.development)
     paths = model.Paths(args.input, args.output, None)
 
+    if not os.path.exists(paths.output):
+        os.mkdir(paths.output)
+
     pipeline.sign_all(paths, config, package_dmg=not args.no_dmg)
 
 
diff --git a/chrome/renderer/net/net_error_helper.cc b/chrome/renderer/net/net_error_helper.cc
index cefa405..8fe751d 100644
--- a/chrome/renderer/net/net_error_helper.cc
+++ b/chrome/renderer/net/net_error_helper.cc
@@ -161,14 +161,11 @@
   RenderThread::Get()->AddObserver(this);
   base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
   bool auto_reload_enabled =
-      command_line->HasSwitch(switches::kEnableOfflineAutoReload);
-  bool auto_reload_visible_only =
-      command_line->HasSwitch(switches::kEnableOfflineAutoReloadVisibleOnly);
+      command_line->HasSwitch(switches::kEnableAutoReload);
   // TODO(mmenke): Consider only creating a NetErrorHelperCore for main frames.
   // subframes don't need any of the NetErrorHelperCore's extra logic.
   core_.reset(new NetErrorHelperCore(this,
                                      auto_reload_enabled,
-                                     auto_reload_visible_only,
                                      !render_frame->IsHidden()));
 
   render_frame->GetAssociatedInterfaceRegistry()->AddInterface(
diff --git a/chrome/renderer/net/net_error_helper_core.cc b/chrome/renderer/net/net_error_helper_core.cc
index 0efd368a..84bba943 100644
--- a/chrome/renderer/net/net_error_helper_core.cc
+++ b/chrome/renderer/net/net_error_helper_core.cc
@@ -503,13 +503,11 @@
 
 NetErrorHelperCore::NetErrorHelperCore(Delegate* delegate,
                                        bool auto_reload_enabled,
-                                       bool auto_reload_visible_only,
                                        bool is_visible)
     : delegate_(delegate),
       last_probe_status_(error_page::DNS_PROBE_POSSIBLE),
       can_show_network_diagnostics_dialog_(false),
       auto_reload_enabled_(auto_reload_enabled),
-      auto_reload_visible_only_(auto_reload_visible_only),
       auto_reload_timer_(new base::OneShotTimer()),
       auto_reload_paused_(false),
       auto_reload_in_flight_(false),
@@ -561,16 +559,12 @@
 
 void NetErrorHelperCore::OnWasShown() {
   visible_ = true;
-  if (!auto_reload_visible_only_)
-    return;
   if (auto_reload_paused_)
     MaybeStartAutoReloadTimer();
 }
 
 void NetErrorHelperCore::OnWasHidden() {
   visible_ = false;
-  if (!auto_reload_visible_only_)
-    return;
   PauseAutoReloadTimer();
 }
 
@@ -935,7 +929,7 @@
 
   committed_error_page_info_->auto_reload_triggered = true;
 
-  if (!online_ || (!visible_ && auto_reload_visible_only_)) {
+  if (!online_ || !visible_) {
     auto_reload_paused_ = true;
     return;
   }
diff --git a/chrome/renderer/net/net_error_helper_core.h b/chrome/renderer/net/net_error_helper_core.h
index 4eb7d93..989e9c2f 100644
--- a/chrome/renderer/net/net_error_helper_core.h
+++ b/chrome/renderer/net/net_error_helper_core.h
@@ -159,7 +159,6 @@
 
   NetErrorHelperCore(Delegate* delegate,
                      bool auto_reload_enabled,
-                     bool auto_reload_visible_only,
                      bool is_visible);
   ~NetErrorHelperCore();
 
@@ -307,9 +306,6 @@
   // True if auto-reload is enabled at all.
   const bool auto_reload_enabled_;
 
-  // True if auto-reload should only run when the observed frame is visible.
-  const bool auto_reload_visible_only_;
-
   // Timer used to wait for auto-reload attempts.
   std::unique_ptr<base::OneShotTimer> auto_reload_timer_;
 
diff --git a/chrome/renderer/net/net_error_helper_core_unittest.cc b/chrome/renderer/net/net_error_helper_core_unittest.cc
index 5be03054..8ba0cc20 100644
--- a/chrome/renderer/net/net_error_helper_core_unittest.cc
+++ b/chrome/renderer/net/net_error_helper_core_unittest.cc
@@ -177,7 +177,7 @@
         default_url_(GURL(kFailedUrl)),
         error_url_(GURL(content::kUnreachableWebDataURL)),
         tracking_request_count_(0) {
-    SetUpCore(false, false, true);
+    SetUpCore(false, true);
   }
 
   ~NetErrorHelperCoreTest() override {
@@ -186,13 +186,11 @@
   }
 
   void SetUpCore(bool auto_reload_enabled,
-                 bool auto_reload_visible_only,
                  bool visible) {
     // The old value of timer_, if any, will be freed by the old core_ being
     // destructed, since core_ takes ownership of the timer.
     timer_ = new base::MockOneShotTimer();
-    core_.reset(new NetErrorHelperCore(this, auto_reload_enabled,
-                                       auto_reload_visible_only, visible));
+    core_.reset(new NetErrorHelperCore(this, auto_reload_enabled, visible));
     core_->set_timer_for_testing(base::WrapUnique(timer_));
   }
 
@@ -2085,7 +2083,7 @@
  public:
   void SetUp() override {
     NetErrorHelperCoreTest::SetUp();
-    SetUpCore(true, false, true);
+    SetUpCore(true, true);
   }
 };
 
@@ -2407,7 +2405,7 @@
 }
 
 TEST_F(NetErrorHelperCoreAutoReloadTest, HiddenAndShown) {
-  SetUpCore(true, true, true);
+  SetUpCore(true, true);
   DoErrorLoad(net::ERR_CONNECTION_RESET);
   EXPECT_TRUE(timer()->IsRunning());
   core()->OnWasHidden();
@@ -2417,7 +2415,7 @@
 }
 
 TEST_F(NetErrorHelperCoreAutoReloadTest, HiddenWhileOnline) {
-  SetUpCore(true, true, true);
+  SetUpCore(true, true);
   core()->NetworkStateChanged(false);
   DoErrorLoad(net::ERR_CONNECTION_RESET);
   EXPECT_FALSE(timer()->IsRunning());
@@ -2439,7 +2437,7 @@
 }
 
 TEST_F(NetErrorHelperCoreAutoReloadTest, ShownWhileNotReloading) {
-  SetUpCore(true, true, false);
+  SetUpCore(true, false);
   DoErrorLoad(net::ERR_CONNECTION_RESET);
   EXPECT_FALSE(timer()->IsRunning());
   core()->OnWasShown();
@@ -2447,7 +2445,7 @@
 }
 
 TEST_F(NetErrorHelperCoreAutoReloadTest, ManualReloadShowsError) {
-  SetUpCore(true, true, true);
+  SetUpCore(true, true);
   DoErrorLoad(net::ERR_CONNECTION_RESET);
   core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
                       NetErrorHelperCore::ERROR_PAGE);
diff --git a/chrome/services/isolated_xr_device/xr_runtime_provider.cc b/chrome/services/isolated_xr_device/xr_runtime_provider.cc
index 57aba4d5..735e193 100644
--- a/chrome/services/isolated_xr_device/xr_runtime_provider.cc
+++ b/chrome/services/isolated_xr_device/xr_runtime_provider.cc
@@ -40,10 +40,37 @@
 }  // namespace
 
 void IsolatedXRRuntimeProvider::PollForDeviceChanges() {
+  // If we have multiple devices attached, only return one.  This typically will
+  // only happen if a device could be exposed through multiple APIs, such as
+  // OpenVR exposing a WMR or Oculus device.
+  bool disable_other_devices = false;
+
+#if BUILDFLAG(ENABLE_WINDOWS_MR)
+  if (check_wmr_) {
+    bool wmr_available =
+        !disable_other_devices && wmr_statics_->IsHardwareAvailable();
+    disable_other_devices = disable_other_devices || wmr_available;
+    if (wmr_available && !wmr_device_) {
+      wmr_device_ = std::make_unique<device::MixedRealityDevice>();
+      TraceHardwareAvailable(true, wmr_device_->GetId());
+      client_->OnDeviceAdded(
+          wmr_device_->BindXRRuntimePtr(), wmr_device_->BindGamepadFactory(),
+          wmr_device_->BindCompositorHost(), wmr_device_->GetId());
+    } else if (wmr_device_ && !wmr_available) {
+      TraceHardwareAvailable(false, wmr_device_->GetId());
+      client_->OnDeviceRemoved(wmr_device_->GetId());
+      wmr_device_ = nullptr;
+    }
+  }
+#endif
+
 #if BUILDFLAG(ENABLE_OCULUS_VR)
   if (check_oculus_) {
-    bool oculus_available = (oculus_device_ && oculus_device_->IsAvailable()) ||
-                            device::OculusDevice::IsHwAvailable();
+    bool oculus_available =
+        !disable_other_devices &&
+        ((oculus_device_ && oculus_device_->IsAvailable()) ||
+         device::OculusDevice::IsHwAvailable());
+    disable_other_devices = disable_other_devices || oculus_available;
     if (oculus_available && !oculus_device_) {
       oculus_device_ = std::make_unique<device::OculusDevice>();
       TraceHardwareAvailable(true, oculus_device_->GetId());
@@ -61,8 +88,11 @@
 
 #if BUILDFLAG(ENABLE_OPENVR)
   if (check_openvr_) {
-    bool openvr_available = (openvr_device_ && openvr_device_->IsAvailable()) ||
-                            device::OpenVRDevice::IsHwAvailable();
+    bool openvr_available =
+        !disable_other_devices &&
+        ((openvr_device_ && openvr_device_->IsAvailable()) ||
+         device::OpenVRDevice::IsHwAvailable());
+    disable_other_devices = disable_other_devices || openvr_available;
     if (openvr_available && !openvr_device_) {
       openvr_device_ = std::make_unique<device::OpenVRDevice>();
       TraceHardwareAvailable(true, openvr_device_->GetId());
@@ -78,23 +108,6 @@
   }
 #endif
 
-#if BUILDFLAG(ENABLE_WINDOWS_MR)
-  if (check_wmr_) {
-    bool wmr_available = wmr_statics_->IsHardwareAvailable();
-    if (wmr_available && !wmr_device_) {
-      wmr_device_ = std::make_unique<device::MixedRealityDevice>();
-      TraceHardwareAvailable(true, wmr_device_->GetId());
-      client_->OnDeviceAdded(
-          wmr_device_->BindXRRuntimePtr(), wmr_device_->BindGamepadFactory(),
-          wmr_device_->BindCompositorHost(), wmr_device_->GetId());
-    } else if (wmr_device_ && !wmr_available) {
-      TraceHardwareAvailable(false, wmr_device_->GetId());
-      client_->OnDeviceRemoved(wmr_device_->GetId());
-      wmr_device_ = nullptr;
-    }
-  }
-#endif
-
   if (check_openvr_ || check_oculus_ || check_wmr_) {
     // Post a task to do this again later.
     base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 3162398..221f7ea 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -3519,7 +3519,7 @@
       "../browser/ui/toolbar/toolbar_actions_bar_unittest.cc",
       "../browser/ui/toolbar/toolbar_actions_bar_unittest.h",
       "../browser/ui/toolbar/toolbar_actions_model_unittest.cc",
-      "../browser/ui/web_app_browser_controller_unittest.cc",
+      "../browser/ui/web_applications/app_browser_controller_unittest.cc",
       "../browser/ui/webui/browsing_history_handler_unittest.cc",
       "../browser/ui/webui/dark_mode_handler_unittest.cc",
       "../browser/ui/webui/downloads/downloads_dom_handler_unittest.cc",
diff --git a/chrome/test/base/in_process_browser_test.cc b/chrome/test/base/in_process_browser_test.cc
index f415cafe..8773337 100644
--- a/chrome/test/base/in_process_browser_test.cc
+++ b/chrome/test/base/in_process_browser_test.cc
@@ -226,9 +226,8 @@
 
   // Auto-reload breaks many browser tests, which assume error pages won't be
   // reloaded out from under them. Tests that expect or desire this behavior can
-  // append switches::kEnableOfflineAutoReload, which will override the disable
-  // here.
-  command_line->AppendSwitch(switches::kDisableOfflineAutoReload);
+  // append switches::kEnableAutoReload, which will override the disable here.
+  command_line->AppendSwitch(switches::kDisableAutoReload);
 
   // Allow subclasses to change the command line before running any tests.
   SetUpCommandLine(command_line);
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.video_suggestion_with_dark_dominant_color.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.video_suggestion_with_dark_dominant_color.Nexus_5-19.png.sha1
index 207b17f4..a9c4347 100644
--- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.video_suggestion_with_dark_dominant_color.Nexus_5-19.png.sha1
+++ b/chrome/test/data/android/render_tests/ArticleSnippetsTest.video_suggestion_with_dark_dominant_color.Nexus_5-19.png.sha1
@@ -1 +1 @@
-8bc7dfdcdbfc619d454dfa1769de42b202e752fd
\ No newline at end of file
+ef73f11637ec5cd03f8b6635397c917f0cd78adc
\ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.video_suggestion_with_dark_thumbnail.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.video_suggestion_with_dark_thumbnail.Nexus_5-19.png.sha1
index f54f4a67..f5edb20d 100644
--- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.video_suggestion_with_dark_thumbnail.Nexus_5-19.png.sha1
+++ b/chrome/test/data/android/render_tests/ArticleSnippetsTest.video_suggestion_with_dark_thumbnail.Nexus_5-19.png.sha1
@@ -1 +1 @@
-6a9031b377dc7e0007ba3455304405a7996cd398
\ No newline at end of file
+4d62c938b7ecd9250f30a2ee1854812d9dff9c4e
\ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.video_suggestion_with_light_dominant_color.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.video_suggestion_with_light_dominant_color.Nexus_5-19.png.sha1
index bc50dd7..bc1cc40 100644
--- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.video_suggestion_with_light_dominant_color.Nexus_5-19.png.sha1
+++ b/chrome/test/data/android/render_tests/ArticleSnippetsTest.video_suggestion_with_light_dominant_color.Nexus_5-19.png.sha1
@@ -1 +1 @@
-64244997cb1a91db14bee9021bc9deae3233dc16
\ No newline at end of file
+d199e4f28aa526a334400e3326f09464f5e92bd3
\ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.video_suggestion_with_light_thumbnail.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.video_suggestion_with_light_thumbnail.Nexus_5-19.png.sha1
index 318d2b1b..4eeff12 100644
--- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.video_suggestion_with_light_thumbnail.Nexus_5-19.png.sha1
+++ b/chrome/test/data/android/render_tests/ArticleSnippetsTest.video_suggestion_with_light_thumbnail.Nexus_5-19.png.sha1
@@ -1 +1 @@
-d66e153937d0f4a4399c1b26837ac1942a7fe5a6
\ No newline at end of file
+24cdf45e4687fc2d8a642f512dfde554661b7899
\ No newline at end of file
diff --git a/chrome/test/data/local_ntp/local_ntp_browsertest.html b/chrome/test/data/local_ntp/local_ntp_browsertest.html
index 2ac65be..2ca3d40 100644
--- a/chrome/test/data/local_ntp/local_ntp_browsertest.html
+++ b/chrome/test/data/local_ntp/local_ntp_browsertest.html
@@ -186,7 +186,10 @@
       </div>
       <div id="menu-contents">
         <div id="backgrounds-menu" class="menu-panel">
-          <div id="backgrounds-upload" class="bg-sel-tile-bg">Upload an image</div>
+          <div id="backgrounds-upload" class="bg-sel-tile-bg">
+            <div id="backgrounds-upload-icon"></div>
+            <div id="backgrounds-upload-text">$i18n{uploadImage}</div>
+          </div>
           <div id="backgrounds-default" class="bg-sel-tile-bg">
             <div class="bg-sel-tile-title">Default</div>
           </div>
diff --git a/chrome/test/data/plugin_power_saver/small_cross_origin_expected.png b/chrome/test/data/plugin_power_saver/small_cross_origin_expected.png
index 34f871c..4fdd4c8 100644
--- a/chrome/test/data/plugin_power_saver/small_cross_origin_expected.png
+++ b/chrome/test/data/plugin_power_saver/small_cross_origin_expected.png
Binary files differ
diff --git a/chrome/test/data/webui/extensions/cr_extensions_browsertest.js b/chrome/test/data/webui/extensions/cr_extensions_browsertest.js
index a6c29de..a8c87d3 100644
--- a/chrome/test/data/webui/extensions/cr_extensions_browsertest.js
+++ b/chrome/test/data/webui/extensions/cr_extensions_browsertest.js
@@ -524,6 +524,7 @@
   /** @override */
   get extraLibraries() {
     return super.extraLibraries.concat([
+      '../settings/test_util.js',
       'manager_test.js',
     ]);
   }
@@ -570,6 +571,7 @@
   /** @override */
   get extraLibraries() {
     return super.extraLibraries.concat([
+      '../settings/test_util.js',
       'manager_test.js',
     ]);
   }
diff --git a/chrome/test/data/webui/extensions/manager_test.js b/chrome/test/data/webui/extensions/manager_test.js
index 5479fcc..3e09001 100644
--- a/chrome/test/data/webui/extensions/manager_test.js
+++ b/chrome/test/data/webui/extensions/manager_test.js
@@ -35,6 +35,12 @@
 
     setup(function() {
       manager = document.querySelector('extensions-manager');
+      // Wait for the first view to be active before starting tests, if one is
+      // not active already. Sometimes, on Mac with native HTML imports
+      // disabled, no views are active at this point.
+      return manager.$.viewManager.querySelector('.active') ?
+          Promise.resolve() :
+          test_util.eventToPromise('view-enter-start', manager);
     });
 
     test(assert(TestNames.ItemListVisibility), function() {
diff --git a/chrome/test/data/webui/settings/google_assistant_page_test.js b/chrome/test/data/webui/settings/google_assistant_page_test.js
index a10fe15..7fa2e4e 100644
--- a/chrome/test/data/webui/settings/google_assistant_page_test.js
+++ b/chrome/test/data/webui/settings/google_assistant_page_test.js
@@ -130,7 +130,9 @@
 
   test('hotwordToggleEnabled', function() {
     let button = page.$$('#google-assistant-hotword-enable');
+    let indicator = page.$$('#hotword-policy-pref-indicator');
     assertFalse(!!button);
+    assertFalse(!!indicator);
 
     page.setPrefValue('settings.voice_interaction.enabled', true);
 
@@ -141,13 +143,17 @@
 
     Polymer.dom.flush();
     button = page.$$('#dsp-hotword-state');
+    indicator = page.$$('#hotword-policy-pref-indicator');
     assertTrue(!!button);
+    assertFalse(!!indicator);
     assertFalse(button.hasAttribute('disabled'));
   });
 
   test('hotwordToggleDisabled', function() {
     let button = page.$$('#google-assistant-hotword-enable');
+    let indicator = page.$$('#hotword-policy-pref-indicator');
     assertFalse(!!button);
+    assertFalse(!!indicator);
 
     page.setPrefValue('settings.voice_interaction.enabled', true);
 
@@ -158,7 +164,9 @@
 
     Polymer.dom.flush();
     button = page.$$('#dsp-hotword-state');
+    indicator = page.$$('#hotword-policy-pref-indicator');
     assertTrue(!!button);
+    assertTrue(!!indicator);
     assertTrue(button.hasAttribute('disabled'));
   });
 
diff --git a/chrome/test/data/webui/settings/languages_page_tests.js b/chrome/test/data/webui/settings/languages_page_tests.js
index 9249f12..dbd0044 100644
--- a/chrome/test/data/webui/settings/languages_page_tests.js
+++ b/chrome/test/data/webui/settings/languages_page_tests.js
@@ -659,9 +659,15 @@
           return;
         }
 
+        loadTimeData.overrideValues({
+          spellCheckDisabledReason: 'no languages!',
+        });
+
         assertFalse(languagesPage.$.enableSpellcheckingToggle.disabled);
         assertTrue(
             languageHelper.getPref('browser.enable_spellchecking').value);
+        assertEquals(
+            languagesPage.$.enableSpellcheckingToggle.subLabel, undefined);
 
         // Empty out supported languages
         languageHelper.setPrefValue('intl.accept_languages', '');
@@ -672,6 +678,9 @@
         assertTrue(languagesPage.$.enableSpellcheckingToggle.disabled);
         assertFalse(
             languageHelper.getPref('browser.enable_spellchecking').value);
+        assertEquals(
+            languagesPage.$.enableSpellcheckingToggle.subLabel,
+            'no languages!');
       });
 
       test('error handling', function() {
diff --git a/chrome/test/data/webui/settings/settings_ui_browsertest.js b/chrome/test/data/webui/settings/settings_ui_browsertest.js
index 28f3848..42893d7 100644
--- a/chrome/test/data/webui/settings/settings_ui_browsertest.js
+++ b/chrome/test/data/webui/settings/settings_ui_browsertest.js
@@ -48,13 +48,13 @@
       Polymer.dom.flush();
     });
 
-    test('basic', function() {
+    test('showing menu in toolbar', function() {
       toolbar = assert(ui.$$('cr-toolbar'));
-      assertTrue(toolbar.showMenu);
+      assertFalse(toolbar.showMenu);
     });
 
     test('app drawer', function() {
-      assertEquals(null, ui.$$('settings-menu'));
+      assertEquals(null, ui.$$('cr-drawer settings-menu'));
       const drawer = ui.$.drawer;
       assertFalse(!!drawer.open);
 
@@ -64,7 +64,7 @@
 
       // Validate that dialog is open and menu is shown so it will animate.
       assertTrue(drawer.open);
-      assertTrue(!!ui.$$('settings-menu'));
+      assertTrue(!!ui.$$('cr-drawer settings-menu'));
 
       return whenDone
           .then(function() {
@@ -76,37 +76,43 @@
             // Drawer is closed, but menu is still stamped so
             // its contents remain visible as the drawer slides
             // out.
-            assertTrue(!!ui.$$('settings-menu'));
+            assertTrue(!!ui.$$('cr-drawer settings-menu'));
           });
     });
 
     test('advanced UIs stay in sync', function() {
       const main = ui.$$('settings-main');
+      const floatingMenu = ui.$$('#left settings-menu');
       assertTrue(!!main);
+      assertTrue(!!floatingMenu);
 
-      assertFalse(!!ui.$$('settings-menu'));
+      assertFalse(!!ui.$$('cr-drawer settings-menu'));
       assertFalse(ui.advancedOpened_);
+      assertFalse(floatingMenu.advancedOpened);
       assertFalse(main.advancedToggleExpanded);
 
       main.advancedToggleExpanded = true;
       Polymer.dom.flush();
 
-      assertFalse(!!ui.$$('settings-menu'));
+      assertFalse(!!ui.$$('cr-drawer settings-menu'));
       assertTrue(ui.advancedOpened_);
+      assertTrue(floatingMenu.advancedOpened);
       assertTrue(main.advancedToggleExpanded);
 
       ui.$.drawerTemplate.if = true;
       Polymer.dom.flush();
 
-      const menu = ui.$$('settings-menu');
-      assertTrue(!!menu);
-      assertTrue(menu.advancedOpened);
+      const drawerMenu = ui.$$('cr-drawer settings-menu');
+      assertTrue(!!drawerMenu);
+      assertTrue(floatingMenu.advancedOpened);
+      assertTrue(drawerMenu.advancedOpened);
 
-      menu.$.advancedButton.click();
+      drawerMenu.$.advancedButton.click();
       Polymer.dom.flush();
 
       // Check that all values are updated in unison.
-      assertFalse(menu.advancedOpened);
+      assertFalse(drawerMenu.advancedOpened);
+      assertFalse(floatingMenu.advancedOpened);
       assertFalse(ui.advancedOpened_);
       assertFalse(main.advancedToggleExpanded);
     });
diff --git a/chromecast/browser/extensions/cast_extensions_browser_client.cc b/chromecast/browser/extensions/cast_extensions_browser_client.cc
index 3593cc6e..4c26ce22 100644
--- a/chromecast/browser/extensions/cast_extensions_browser_client.cc
+++ b/chromecast/browser/extensions/cast_extensions_browser_client.cc
@@ -119,7 +119,7 @@
 base::FilePath CastExtensionsBrowserClient::GetBundleResourcePath(
     const network::ResourceRequest& request,
     const base::FilePath& extension_resources_path,
-    ComponentExtensionResourceInfo* resource_info) const {
+    int* resource_id) const {
   return base::FilePath();
 }
 
@@ -127,7 +127,7 @@
     const network::ResourceRequest& request,
     network::mojom::URLLoaderRequest loader,
     const base::FilePath& resource_relative_path,
-    const ComponentExtensionResourceInfo& resource_info,
+    int resource_id,
     const std::string& content_security_policy,
     network::mojom::URLLoaderClientPtr client,
     bool send_cors_header) {
diff --git a/chromecast/browser/extensions/cast_extensions_browser_client.h b/chromecast/browser/extensions/cast_extensions_browser_client.h
index 923e518..f4f633f 100644
--- a/chromecast/browser/extensions/cast_extensions_browser_client.h
+++ b/chromecast/browser/extensions/cast_extensions_browser_client.h
@@ -57,12 +57,12 @@
   base::FilePath GetBundleResourcePath(
       const network::ResourceRequest& request,
       const base::FilePath& extension_resources_path,
-      ComponentExtensionResourceInfo* resource_info) const override;
+      int* resource_id) const override;
   void LoadResourceFromResourceBundle(
       const network::ResourceRequest& request,
       network::mojom::URLLoaderRequest loader,
       const base::FilePath& resource_relative_path,
-      const ComponentExtensionResourceInfo& resource_info,
+      int resource_id,
       const std::string& content_security_policy,
       network::mojom::URLLoaderClientPtr client,
       bool send_cors_header) override;
diff --git a/components/autofill/core/browser/BUILD.gn b/components/autofill/core/browser/BUILD.gn
index 72960ad..883e0dc 100644
--- a/components/autofill/core/browser/BUILD.gn
+++ b/components/autofill/core/browser/BUILD.gn
@@ -11,8 +11,6 @@
   sources = [
     "accessory_sheet_data.cc",
     "accessory_sheet_data.h",
-    "address.cc",
-    "address.h",
     "address_combobox_model.cc",
     "address_combobox_model.h",
     "address_contact_form_label_formatter.cc",
@@ -42,8 +40,6 @@
     "autofill_client.h",
     "autofill_country.cc",
     "autofill_country.h",
-    "autofill_data_model.cc",
-    "autofill_data_model.h",
     "autofill_data_util.cc",
     "autofill_data_util.h",
     "autofill_download_manager.cc",
@@ -68,17 +64,11 @@
     "autofill_manager.cc",
     "autofill_manager.h",
     "autofill_manager_test_delegate.h",
-    "autofill_metadata.cc",
-    "autofill_metadata.h",
     "autofill_metrics.cc",
     "autofill_metrics.h",
     "autofill_observer.cc",
     "autofill_observer.h",
     "autofill_popup_delegate.h",
-    "autofill_profile.cc",
-    "autofill_profile.h",
-    "autofill_profile_comparator.cc",
-    "autofill_profile_comparator.h",
     "autofill_profile_sync_util.cc",
     "autofill_profile_sync_util.h",
     "autofill_profile_validation_util.cc",
@@ -93,23 +83,37 @@
     "autofill_type.h",
     "contact_form_label_formatter.cc",
     "contact_form_label_formatter.h",
-    "contact_info.cc",
-    "contact_info.h",
     "country_combobox_model.cc",
     "country_combobox_model.h",
     "country_data.cc",
     "country_data.h",
     "country_names.cc",
     "country_names.h",
-    "credit_card.cc",
-    "credit_card.h",
+    "data_model/address.cc",
+    "data_model/address.h",
+    "data_model/autofill_data_model.cc",
+    "data_model/autofill_data_model.h",
+    "data_model/autofill_metadata.cc",
+    "data_model/autofill_metadata.h",
+    "data_model/autofill_profile.cc",
+    "data_model/autofill_profile.h",
+    "data_model/autofill_profile_comparator.cc",
+    "data_model/autofill_profile_comparator.h",
+    "data_model/contact_info.cc",
+    "data_model/contact_info.h",
+    "data_model/credit_card.cc",
+    "data_model/credit_card.h",
+    "data_model/form_group.cc",
+    "data_model/form_group.h",
+    "data_model/phone_number.cc",
+    "data_model/phone_number.h",
+    "data_model/test_data_creator.cc",
+    "data_model/test_data_creator.h",
     "field_filler.cc",
     "field_filler.h",
     "field_types.h",
     "form_data_importer.cc",
     "form_data_importer.h",
-    "form_group.cc",
-    "form_group.h",
     "form_parsing/address_field.cc",
     "form_parsing/address_field.h",
     "form_parsing/autofill_scanner.cc",
@@ -186,8 +190,6 @@
     "personal_data_manager.cc",
     "personal_data_manager.h",
     "personal_data_manager_observer.h",
-    "phone_number.cc",
-    "phone_number.h",
     "phone_number_i18n.cc",
     "phone_number_i18n.h",
     "popup_item_ids.h",
@@ -210,8 +212,6 @@
     "suggestion_selection.cc",
     "suggestion_selection.h",
     "sync_utils.h",
-    "test_data_creator.cc",
-    "test_data_creator.h",
     "ui/payments/card_unmask_prompt_controller.h",
     "ui/payments/card_unmask_prompt_controller_impl.cc",
     "ui/payments/card_unmask_prompt_controller_impl.h",
@@ -491,10 +491,8 @@
     "address_normalization_manager_unittest.cc",
     "address_normalizer_impl_unittest.cc",
     "address_rewriter_unittest.cc",
-    "address_unittest.cc",
     "autocomplete_history_manager_unittest.cc",
     "autofill_country_unittest.cc",
-    "autofill_data_model_unittest.cc",
     "autofill_data_util_unittest.cc",
     "autofill_download_manager_unittest.cc",
     "autofill_driver_factory_unittest.cc",
@@ -504,17 +502,20 @@
     "autofill_manager_unittest.cc",
     "autofill_merge_unittest.cc",
     "autofill_metrics_unittest.cc",
-    "autofill_profile_comparator_unittest.cc",
     "autofill_profile_sync_util_unittest.cc",
-    "autofill_profile_unittest.cc",
     "autofill_profile_validation_util_unittest.cc",
     "autofill_profile_validator_unittest.cc",
     "autofill_subject_unittest.cc",
     "autofill_type_unittest.cc",
-    "contact_info_unittest.cc",
     "country_combobox_model_unittest.cc",
     "country_names_unittest.cc",
-    "credit_card_unittest.cc",
+    "data_model/address_unittest.cc",
+    "data_model/autofill_data_model_unittest.cc",
+    "data_model/autofill_profile_comparator_unittest.cc",
+    "data_model/autofill_profile_unittest.cc",
+    "data_model/contact_info_unittest.cc",
+    "data_model/credit_card_unittest.cc",
+    "data_model/phone_number_unittest.cc",
     "field_filler_unittest.cc",
     "form_data_importer_unittest.cc",
     "form_parsing/address_field_unittest.cc",
@@ -539,7 +540,6 @@
     "payments/strike_database_unittest.cc",
     "personal_data_manager_unittest.cc",
     "phone_number_i18n_unittest.cc",
-    "phone_number_unittest.cc",
     "proto/legacy_proto_bridge_unittest.cc",
     "randomized_encoder_unittest.cc",
     "rationalization_util_unittest.cc",
diff --git a/components/autofill/core/browser/address_combobox_model.cc b/components/autofill/core/browser/address_combobox_model.cc
index e7e6fdb3..8f872e1 100644
--- a/components/autofill/core/browser/address_combobox_model.cc
+++ b/components/autofill/core/browser/address_combobox_model.cc
@@ -7,7 +7,7 @@
 #include <memory>
 
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/strings/grit/components_strings.h"
 #include "ui/base/l10n/l10n_util.h"
diff --git a/components/autofill/core/browser/address_contact_form_label_formatter.cc b/components/autofill/core/browser/address_contact_form_label_formatter.cc
index 32b1a9de..7cee59e 100644
--- a/components/autofill/core/browser/address_contact_form_label_formatter.cc
+++ b/components/autofill/core/browser/address_contact_form_label_formatter.cc
@@ -37,7 +37,8 @@
       !IsStreetAddressPart(focused_field_type());
 
   if (focused_group != NAME && !non_street_address_is_focused) {
-    AddLabelPartIfNotEmpty(GetLabelName(profile, app_locale()), &label_parts);
+    AddLabelPartIfNotEmpty(GetLabelFullName(profile, app_locale()),
+                           &label_parts);
   }
 
   if (!street_address_is_focused) {
diff --git a/components/autofill/core/browser/address_contact_form_label_formatter.h b/components/autofill/core/browser/address_contact_form_label_formatter.h
index eb851ca..0890b3b7 100644
--- a/components/autofill/core/browser/address_contact_form_label_formatter.h
+++ b/components/autofill/core/browser/address_contact_form_label_formatter.h
@@ -9,7 +9,7 @@
 #include <vector>
 
 #include "base/strings/string16.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/label_formatter.h"
 
diff --git a/components/autofill/core/browser/address_contact_form_label_formatter_unittest.cc b/components/autofill/core/browser/address_contact_form_label_formatter_unittest.cc
index b9508f2c..cc308ff 100644
--- a/components/autofill/core/browser/address_contact_form_label_formatter_unittest.cc
+++ b/components/autofill/core/browser/address_contact_form_label_formatter_unittest.cc
@@ -11,8 +11,8 @@
 #include "base/guid.h"
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/label_formatter_utils.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/components/autofill/core/browser/address_email_form_label_formatter.cc b/components/autofill/core/browser/address_email_form_label_formatter.cc
index 675bf30..05ad6804 100644
--- a/components/autofill/core/browser/address_email_form_label_formatter.cc
+++ b/components/autofill/core/browser/address_email_form_label_formatter.cc
@@ -41,7 +41,8 @@
   std::vector<base::string16> label_parts;
 
   if (focused_group != NAME) {
-    AddLabelPartIfNotEmpty(GetLabelName(profile, app_locale()), &label_parts);
+    AddLabelPartIfNotEmpty(GetLabelFullName(profile, app_locale()),
+                           &label_parts);
   }
 
   if (focused_group != ADDRESS_HOME) {
diff --git a/components/autofill/core/browser/address_email_form_label_formatter.h b/components/autofill/core/browser/address_email_form_label_formatter.h
index 5c44dba5..ce39061 100644
--- a/components/autofill/core/browser/address_email_form_label_formatter.h
+++ b/components/autofill/core/browser/address_email_form_label_formatter.h
@@ -9,7 +9,7 @@
 #include <vector>
 
 #include "base/strings/string16.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/label_formatter.h"
 
diff --git a/components/autofill/core/browser/address_email_form_label_formatter_unittest.cc b/components/autofill/core/browser/address_email_form_label_formatter_unittest.cc
index 34e2a2b..5028083 100644
--- a/components/autofill/core/browser/address_email_form_label_formatter_unittest.cc
+++ b/components/autofill/core/browser/address_email_form_label_formatter_unittest.cc
@@ -11,8 +11,8 @@
 #include "base/guid.h"
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/label_formatter_utils.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/components/autofill/core/browser/address_form_label_formatter.cc b/components/autofill/core/browser/address_form_label_formatter.cc
index ec88eda..40de741a 100644
--- a/components/autofill/core/browser/address_form_label_formatter.cc
+++ b/components/autofill/core/browser/address_form_label_formatter.cc
@@ -26,7 +26,8 @@
                                    field_types_for_labels());
   } else {
     std::vector<base::string16> label_parts;
-    AddLabelPartIfNotEmpty(GetLabelName(profile, app_locale()), &label_parts);
+    AddLabelPartIfNotEmpty(GetLabelFullName(profile, app_locale()),
+                           &label_parts);
     AddLabelPartIfNotEmpty(GetLabelForFocusedAddress(
                                focused_field_type(), form_has_street_address_,
                                profile, app_locale(), field_types_for_labels()),
diff --git a/components/autofill/core/browser/address_form_label_formatter.h b/components/autofill/core/browser/address_form_label_formatter.h
index e4a97dcd..06aaf6e 100644
--- a/components/autofill/core/browser/address_form_label_formatter.h
+++ b/components/autofill/core/browser/address_form_label_formatter.h
@@ -9,7 +9,7 @@
 #include <vector>
 
 #include "base/strings/string16.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/label_formatter.h"
 
diff --git a/components/autofill/core/browser/address_form_label_formatter_unittest.cc b/components/autofill/core/browser/address_form_label_formatter_unittest.cc
index 4f7a554..78fb89d 100644
--- a/components/autofill/core/browser/address_form_label_formatter_unittest.cc
+++ b/components/autofill/core/browser/address_form_label_formatter_unittest.cc
@@ -9,8 +9,8 @@
 #include "base/guid.h"
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/label_formatter_utils.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/components/autofill/core/browser/address_i18n.cc b/components/autofill/core/browser/address_i18n.cc
index 4eeac11c..36c2f11a 100644
--- a/components/autofill/core/browser/address_i18n.cc
+++ b/components/autofill/core/browser/address_i18n.cc
@@ -9,8 +9,8 @@
 #include "base/logging.h"
 #include "base/strings/string_split.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_type.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_data.h"
 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_metadata.h"
 
diff --git a/components/autofill/core/browser/address_i18n_unittest.cc b/components/autofill/core/browser/address_i18n_unittest.cc
index 0f96565a..5c7a18ea 100644
--- a/components/autofill/core/browser/address_i18n_unittest.cc
+++ b/components/autofill/core/browser/address_i18n_unittest.cc
@@ -12,8 +12,8 @@
 
 #include "base/guid.h"
 #include "base/macros.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_data.h"
diff --git a/components/autofill/core/browser/address_normalization_manager.cc b/components/autofill/core/browser/address_normalization_manager.cc
index f9f27c05..a83ef90 100644
--- a/components/autofill/core/browser/address_normalization_manager.cc
+++ b/components/autofill/core/browser/address_normalization_manager.cc
@@ -12,7 +12,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/address_normalizer.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 
 namespace autofill {
diff --git a/components/autofill/core/browser/address_normalizer_impl.cc b/components/autofill/core/browser/address_normalizer_impl.cc
index 8c2e4f4..a28e5a1 100644
--- a/components/autofill/core/browser/address_normalizer_impl.cc
+++ b/components/autofill/core/browser/address_normalizer_impl.cc
@@ -19,7 +19,7 @@
 #include "base/time/time.h"
 #include "components/autofill/core/browser/address_i18n.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/phone_number_i18n.h"
 #include "third_party/libaddressinput/chromium/chrome_address_validator.h"
 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_data.h"
diff --git a/components/autofill/core/browser/address_normalizer_impl_unittest.cc b/components/autofill/core/browser/address_normalizer_impl_unittest.cc
index 26d534e..37f0a97 100644
--- a/components/autofill/core/browser/address_normalizer_impl_unittest.cc
+++ b/components/autofill/core/browser/address_normalizer_impl_unittest.cc
@@ -11,8 +11,8 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_task_environment.h"
 #include "components/autofill/core/browser/address_normalizer.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/null_storage.h"
 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/source.h"
diff --git a/components/autofill/core/browser/address_phone_form_label_formatter.cc b/components/autofill/core/browser/address_phone_form_label_formatter.cc
index 97e374b..7954ab4 100644
--- a/components/autofill/core/browser/address_phone_form_label_formatter.cc
+++ b/components/autofill/core/browser/address_phone_form_label_formatter.cc
@@ -40,7 +40,8 @@
         FieldTypeGroup focused_group) const {
   std::vector<base::string16> label_parts;
   if (focused_group != NAME) {
-    AddLabelPartIfNotEmpty(GetLabelName(profile, app_locale()), &label_parts);
+    AddLabelPartIfNotEmpty(GetLabelFullName(profile, app_locale()),
+                           &label_parts);
   }
 
   if (focused_group != PHONE_HOME) {
diff --git a/components/autofill/core/browser/address_phone_form_label_formatter.h b/components/autofill/core/browser/address_phone_form_label_formatter.h
index 231ca9e..3c56a3d6 100644
--- a/components/autofill/core/browser/address_phone_form_label_formatter.h
+++ b/components/autofill/core/browser/address_phone_form_label_formatter.h
@@ -9,7 +9,7 @@
 #include <vector>
 
 #include "base/strings/string16.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/label_formatter.h"
 
diff --git a/components/autofill/core/browser/address_phone_form_label_formatter_unittest.cc b/components/autofill/core/browser/address_phone_form_label_formatter_unittest.cc
index caf0e18..bb64ba0 100644
--- a/components/autofill/core/browser/address_phone_form_label_formatter_unittest.cc
+++ b/components/autofill/core/browser/address_phone_form_label_formatter_unittest.cc
@@ -11,8 +11,8 @@
 #include "base/guid.h"
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/label_formatter_utils.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/components/autofill/core/browser/autofill_assistant.cc b/components/autofill/core/browser/autofill_assistant.cc
index 5cbbd241..7871113 100644
--- a/components/autofill/core/browser/autofill_assistant.cc
+++ b/components/autofill/core/browser/autofill_assistant.cc
@@ -8,7 +8,7 @@
 #include "base/containers/adapters.h"
 #include "base/strings/string16.h"
 #include "components/autofill/core/browser/autofill_manager.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/form_structure.h"
 #include "components/autofill/core/common/autofill_constants.h"
 #include "components/autofill/core/common/autofill_features.h"
diff --git a/components/autofill/core/browser/autofill_assistant_unittest.cc b/components/autofill/core/browser/autofill_assistant_unittest.cc
index 365e2f8e..d0177b4 100644
--- a/components/autofill/core/browser/autofill_assistant_unittest.cc
+++ b/components/autofill/core/browser/autofill_assistant_unittest.cc
@@ -15,7 +15,7 @@
 #include "components/autofill/core/browser/autofill_driver.h"
 #include "components/autofill/core/browser/autofill_manager.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/form_structure.h"
 #include "components/autofill/core/browser/mock_autocomplete_history_manager.h"
 #include "components/autofill/core/browser/payments/test_credit_card_save_manager.h"
diff --git a/components/autofill/core/browser/autofill_data_util.cc b/components/autofill/core/browser/autofill_data_util.cc
index a13de4a..f697952 100644
--- a/components/autofill/core/browser/autofill_data_util.cc
+++ b/components/autofill/core/browser/autofill_data_util.cc
@@ -14,9 +14,9 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_country.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_type.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/webdata/autofill_table.h"
 #include "components/grit/components_scaled_resources.h"
diff --git a/components/autofill/core/browser/autofill_data_util_unittest.cc b/components/autofill/core/browser/autofill_data_util_unittest.cc
index 6130ba8..7b1ea28 100644
--- a/components/autofill/core/browser/autofill_data_util_unittest.cc
+++ b/components/autofill/core/browser/autofill_data_util_unittest.cc
@@ -5,8 +5,8 @@
 #include "components/autofill/core/browser/autofill_data_util.h"
 
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace autofill {
diff --git a/components/autofill/core/browser/autofill_field.h b/components/autofill/core/browser/autofill_field.h
index b7f9069..eeb64b7 100644
--- a/components/autofill/core/browser/autofill_field.h
+++ b/components/autofill/core/browser/autofill_field.h
@@ -15,8 +15,8 @@
 #include "base/macros.h"
 #include "base/optional.h"
 #include "base/strings/string16.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_type.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/proto/password_requirements.pb.h"
 #include "components/autofill/core/browser/proto/server.pb.h"
diff --git a/components/autofill/core/browser/autofill_ie_toolbar_import_win.cc b/components/autofill/core/browser/autofill_ie_toolbar_import_win.cc
index 1edd5bd..4e3f15e 100644
--- a/components/autofill/core/browser/autofill_ie_toolbar_import_win.cc
+++ b/components/autofill/core/browser/autofill_ie_toolbar_import_win.cc
@@ -16,14 +16,14 @@
 #include "base/strings/string16.h"
 #include "base/win/registry.h"
 #include "components/autofill/core/browser/autofill_country.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
 #include "components/autofill/core/browser/crypto/rc4_decryptor.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
+#include "components/autofill/core/browser/data_model/form_group.h"
+#include "components/autofill/core/browser/data_model/phone_number.h"
 #include "components/autofill/core/browser/field_types.h"
-#include "components/autofill/core/browser/form_group.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/personal_data_manager_observer.h"
-#include "components/autofill/core/browser/phone_number.h"
 #include "components/autofill/core/browser/phone_number_i18n.h"
 #include "components/os_crypt/os_crypt.h"
 
diff --git a/components/autofill/core/browser/autofill_ie_toolbar_import_win_unittest.cc b/components/autofill/core/browser/autofill_ie_toolbar_import_win_unittest.cc
index 1d218fc..f8593ff 100644
--- a/components/autofill/core/browser/autofill_ie_toolbar_import_win_unittest.cc
+++ b/components/autofill/core/browser/autofill_ie_toolbar_import_win_unittest.cc
@@ -9,8 +9,8 @@
 #include "base/stl_util.h"
 #include "base/strings/string16.h"
 #include "base/win/registry.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/os_crypt/os_crypt.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/autofill/core/browser/autofill_manager.cc
index 76089a90..03db74cb 100644
--- a/components/autofill/core/browser/autofill_manager.cc
+++ b/components/autofill/core/browser/autofill_manager.cc
@@ -37,17 +37,18 @@
 #include "build/build_config.h"
 #include "components/autofill/core/browser/autocomplete_history_manager.h"
 #include "components/autofill/core/browser/autofill_client.h"
-#include "components/autofill/core/browser/autofill_data_model.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
 #include "components/autofill/core/browser/autofill_external_delegate.h"
 #include "components/autofill/core/browser/autofill_field.h"
 #include "components/autofill/core/browser/autofill_manager_test_delegate.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/autofill_profile_comparator.h"
 #include "components/autofill/core/browser/autofill_type.h"
 #include "components/autofill/core/browser/country_names.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_data_model.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile_comparator.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
+#include "components/autofill/core/browser/data_model/phone_number.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/form_data_importer.h"
 #include "components/autofill/core/browser/form_structure.h"
@@ -56,7 +57,6 @@
 #include "components/autofill/core/browser/metrics/form_events.h"
 #include "components/autofill/core/browser/payments/payments_client.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
-#include "components/autofill/core/browser/phone_number.h"
 #include "components/autofill/core/browser/phone_number_i18n.h"
 #include "components/autofill/core/browser/popup_item_ids.h"
 #include "components/autofill/core/browser/randomized_encoder.h"
diff --git a/components/autofill/core/browser/autofill_manager_unittest.cc b/components/autofill/core/browser/autofill_manager_unittest.cc
index e04a175..710e226 100644
--- a/components/autofill/core/browser/autofill_manager_unittest.cc
+++ b/components/autofill/core/browser/autofill_manager_unittest.cc
@@ -31,9 +31,9 @@
 #include "build/build_config.h"
 #include "components/autofill/core/browser/autocomplete_history_manager.h"
 #include "components/autofill/core/browser/autofill_download_manager.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/metrics/form_events.h"
 #include "components/autofill/core/browser/mock_autocomplete_history_manager.h"
 #include "components/autofill/core/browser/payments/test_credit_card_save_manager.h"
diff --git a/components/autofill/core/browser/autofill_metrics.cc b/components/autofill/core/browser/autofill_metrics.cc
index 0515f96..8f8695c 100644
--- a/components/autofill/core/browser/autofill_metrics.cc
+++ b/components/autofill/core/browser/autofill_metrics.cc
@@ -17,7 +17,7 @@
 #include "base/time/time.h"
 #include "components/autofill/core/browser/autofill_field.h"
 #include "components/autofill/core/browser/autofill_type.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/form_structure.h"
 #include "components/autofill/core/common/autofill_clock.h"
 #include "components/autofill/core/common/autofill_prefs.h"
diff --git a/components/autofill/core/browser/autofill_metrics.h b/components/autofill/core/browser/autofill_metrics.h
index 0e0d1d1..c7373a8a 100644
--- a/components/autofill/core/browser/autofill_metrics.h
+++ b/components/autofill/core/browser/autofill_metrics.h
@@ -14,8 +14,8 @@
 #include "base/macros.h"
 #include "base/time/time.h"
 #include "components/autofill/core/browser/autofill_client.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/form_types.h"
 #include "components/autofill/core/browser/metrics/form_events.h"
diff --git a/components/autofill/core/browser/autofill_profile_sync_util.cc b/components/autofill/core/browser/autofill_profile_sync_util.cc
index 0d6a67f..b960f5e 100644
--- a/components/autofill/core/browser/autofill_profile_sync_util.cc
+++ b/components/autofill/core/browser/autofill_profile_sync_util.cc
@@ -10,10 +10,10 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 // TODO(crbug.com/904390): Remove when the investigation is over.
-#include "components/autofill/core/browser/autofill_profile_comparator.h"
 #include "components/autofill/core/browser/country_names.h"
+#include "components/autofill/core/browser/data_model/autofill_profile_comparator.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/proto/autofill_sync.pb.h"
 #include "components/autofill/core/browser/webdata/autofill_table.h"
diff --git a/components/autofill/core/browser/autofill_profile_sync_util_unittest.cc b/components/autofill/core/browser/autofill_profile_sync_util_unittest.cc
index 3925a7e..350f936 100644
--- a/components/autofill/core/browser/autofill_profile_sync_util_unittest.cc
+++ b/components/autofill/core/browser/autofill_profile_sync_util_unittest.cc
@@ -5,8 +5,8 @@
 #include "components/autofill/core/browser/autofill_profile_sync_util.h"
 
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/country_names.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/test_autofill_clock.h"
 #include "components/autofill/core/browser/webdata/autofill_table.h"
 #include "components/autofill/core/common/autofill_constants.h"
diff --git a/components/autofill/core/browser/autofill_profile_validation_util.h b/components/autofill/core/browser/autofill_profile_validation_util.h
index 9baf90a..9b19817 100644
--- a/components/autofill/core/browser/autofill_profile_validation_util.h
+++ b/components/autofill/core/browser/autofill_profile_validation_util.h
@@ -5,7 +5,7 @@
 #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_PROFILE_VALIDATION_UTIL_H_
 #define COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_PROFILE_VALIDATION_UTIL_H_
 
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "third_party/libaddressinput/chromium/chrome_address_validator.h"
 
 namespace autofill {
diff --git a/components/autofill/core/browser/autofill_profile_validator.h b/components/autofill/core/browser/autofill_profile_validator.h
index 2253b4d4..3f46b76 100644
--- a/components/autofill/core/browser/autofill_profile_validator.h
+++ b/components/autofill/core/browser/autofill_profile_validator.h
@@ -14,7 +14,7 @@
 
 #include "base/cancelable_callback.h"
 #include "base/macros.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "third_party/libaddressinput/chromium/chrome_address_validator.h"
 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/source.h"
 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/storage.h"
diff --git a/components/autofill/core/browser/autofill_profile_validator_unittest.cc b/components/autofill/core/browser/autofill_profile_validator_unittest.cc
index 34203afe..e2cd547c 100644
--- a/components/autofill/core/browser/autofill_profile_validator_unittest.cc
+++ b/components/autofill/core/browser/autofill_profile_validator_unittest.cc
@@ -14,8 +14,8 @@
 #include "base/guid.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_task_environment.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/null_storage.h"
 #include "third_party/libaddressinput/src/cpp/test/testdata_source.h"
diff --git a/components/autofill/core/browser/autofill_test_utils.cc b/components/autofill/core/browser/autofill_test_utils.cc
index 9c3e280..ad00a12 100644
--- a/components/autofill/core/browser/autofill_test_utils.cc
+++ b/components/autofill/core/browser/autofill_test_utils.cc
@@ -13,8 +13,8 @@
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "components/autofill/core/browser/autofill_external_delegate.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/webdata/autofill_table.h"
 #include "components/autofill/core/common/autofill_constants.h"
diff --git a/components/autofill/core/browser/autofill_test_utils.h b/components/autofill/core/browser/autofill_test_utils.h
index 9b74aab..f8e34221 100644
--- a/components/autofill/core/browser/autofill_test_utils.h
+++ b/components/autofill/core/browser/autofill_test_utils.h
@@ -10,8 +10,8 @@
 #include <vector>
 
 #include "components/autofill/core/browser/autofill_field.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/proto/server.pb.h"
 
diff --git a/components/autofill/core/browser/contact_form_label_formatter.cc b/components/autofill/core/browser/contact_form_label_formatter.cc
index 48feb02..aee524f2 100644
--- a/components/autofill/core/browser/contact_form_label_formatter.cc
+++ b/components/autofill/core/browser/contact_form_label_formatter.cc
@@ -26,7 +26,8 @@
     FieldTypeGroup focused_group) const {
   std::vector<base::string16> label_parts;
   if (focused_group != NAME) {
-    AddLabelPartIfNotEmpty(GetLabelName(profile, app_locale()), &label_parts);
+    AddLabelPartIfNotEmpty(GetLabelFullName(profile, app_locale()),
+                           &label_parts);
   }
 
   if (focused_group != PHONE_HOME) {
diff --git a/components/autofill/core/browser/contact_form_label_formatter.h b/components/autofill/core/browser/contact_form_label_formatter.h
index be4eb1ca..c26852d 100644
--- a/components/autofill/core/browser/contact_form_label_formatter.h
+++ b/components/autofill/core/browser/contact_form_label_formatter.h
@@ -9,7 +9,7 @@
 #include <vector>
 
 #include "base/strings/string16.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/label_formatter.h"
 
diff --git a/components/autofill/core/browser/contact_form_label_formatter_unittest.cc b/components/autofill/core/browser/contact_form_label_formatter_unittest.cc
index d9f18e3..ecea6b8 100644
--- a/components/autofill/core/browser/contact_form_label_formatter_unittest.cc
+++ b/components/autofill/core/browser/contact_form_label_formatter_unittest.cc
@@ -11,8 +11,8 @@
 #include "base/guid.h"
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/label_formatter_utils.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/components/autofill/core/browser/address.cc b/components/autofill/core/browser/data_model/address.cc
similarity index 95%
rename from components/autofill/core/browser/address.cc
rename to components/autofill/core/browser/data_model/address.cc
index f3ab3a3..01686d1 100644
--- a/components/autofill/core/browser/address.cc
+++ b/components/autofill/core/browser/data_model/address.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 "components/autofill/core/browser/address.h"
+#include "components/autofill/core/browser/data_model/address.h"
 
 #include <stddef.h>
 #include <algorithm>
@@ -16,10 +16,10 @@
 #include "components/autofill/core/browser/autofill_country.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
 #include "components/autofill/core/browser/autofill_field.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/autofill_profile_comparator.h"
 #include "components/autofill/core/browser/autofill_type.h"
 #include "components/autofill/core/browser/country_names.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile_comparator.h"
 #include "components/autofill/core/browser/state_names.h"
 #include "components/autofill/core/common/autofill_l10n_util.h"
 
@@ -150,9 +150,9 @@
       break;
 
     case ADDRESS_HOME_STREET_ADDRESS:
-      street_address_ = base::SplitString(
-          value, base::ASCIIToUTF16("\n"),
-          base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
+      street_address_ =
+          base::SplitString(value, base::ASCIIToUTF16("\n"),
+                            base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
       break;
 
     default:
diff --git a/components/autofill/core/browser/address.h b/components/autofill/core/browser/data_model/address.h
similarity index 88%
rename from components/autofill/core/browser/address.h
rename to components/autofill/core/browser/data_model/address.h
index 9c1721f9..9a71f04 100644
--- a/components/autofill/core/browser/address.h
+++ b/components/autofill/core/browser/data_model/address.h
@@ -2,15 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_ADDRESS_H_
-#define COMPONENTS_AUTOFILL_CORE_BROWSER_ADDRESS_H_
+#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_ADDRESS_H_
+#define COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_ADDRESS_H_
 
 #include <string>
 #include <vector>
 
 #include "base/compiler_specific.h"
 #include "base/strings/string16.h"
-#include "components/autofill/core/browser/form_group.h"
+#include "components/autofill/core/browser/data_model/form_group.h"
 
 namespace autofill {
 
@@ -63,4 +63,4 @@
 
 }  // namespace autofill
 
-#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_ADDRESS_H_
+#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_ADDRESS_H_
diff --git a/components/autofill/core/browser/address_unittest.cc b/components/autofill/core/browser/data_model/address_unittest.cc
similarity index 93%
rename from components/autofill/core/browser/address_unittest.cc
rename to components/autofill/core/browser/data_model/address_unittest.cc
index d5e67b01..c9bb50a0 100644
--- a/components/autofill/core/browser/address_unittest.cc
+++ b/components/autofill/core/browser/data_model/address_unittest.cc
@@ -9,9 +9,9 @@
 #include "base/macros.h"
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/address.h"
 #include "components/autofill/core/browser/autofill_type.h"
 #include "components/autofill/core/browser/country_names.h"
+#include "components/autofill/core/browser/data_model/address.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 using base::ASCIIToUTF16;
@@ -34,8 +34,8 @@
       address.GetInfo(AutofillType(ADDRESS_HOME_COUNTRY), "en-US");
   EXPECT_EQ(base::string16(), country);
 
-  address.SetInfo(
-      AutofillType(ADDRESS_HOME_COUNTRY), ASCIIToUTF16("US"), "en-US");
+  address.SetInfo(AutofillType(ADDRESS_HOME_COUNTRY), ASCIIToUTF16("US"),
+                  "en-US");
   country = address.GetInfo(AutofillType(ADDRESS_HOME_COUNTRY), "en-US");
   EXPECT_EQ(ASCIIToUTF16("United States"), country);
   country = address.GetInfo(
@@ -62,38 +62,37 @@
   EXPECT_EQ(base::string16(), address.GetRawInfo(ADDRESS_HOME_COUNTRY));
 
   // Test basic conversion.
-  address.SetInfo(
-      AutofillType(ADDRESS_HOME_COUNTRY), ASCIIToUTF16("United States"),
-      "en-US");
+  address.SetInfo(AutofillType(ADDRESS_HOME_COUNTRY),
+                  ASCIIToUTF16("United States"), "en-US");
   base::string16 country =
       address.GetInfo(AutofillType(ADDRESS_HOME_COUNTRY), "en-US");
   EXPECT_EQ(ASCIIToUTF16("US"), address.GetRawInfo(ADDRESS_HOME_COUNTRY));
   EXPECT_EQ(ASCIIToUTF16("United States"), country);
 
   // Test basic synonym detection.
-  address.SetInfo(
-      AutofillType(ADDRESS_HOME_COUNTRY), ASCIIToUTF16("USA"), "en-US");
+  address.SetInfo(AutofillType(ADDRESS_HOME_COUNTRY), ASCIIToUTF16("USA"),
+                  "en-US");
   country = address.GetInfo(AutofillType(ADDRESS_HOME_COUNTRY), "en-US");
   EXPECT_EQ(ASCIIToUTF16("US"), address.GetRawInfo(ADDRESS_HOME_COUNTRY));
   EXPECT_EQ(ASCIIToUTF16("United States"), country);
 
   // Test case-insensitivity.
-  address.SetInfo(
-      AutofillType(ADDRESS_HOME_COUNTRY), ASCIIToUTF16("canADA"), "en-US");
+  address.SetInfo(AutofillType(ADDRESS_HOME_COUNTRY), ASCIIToUTF16("canADA"),
+                  "en-US");
   country = address.GetInfo(AutofillType(ADDRESS_HOME_COUNTRY), "en-US");
   EXPECT_EQ(ASCIIToUTF16("CA"), address.GetRawInfo(ADDRESS_HOME_COUNTRY));
   EXPECT_EQ(ASCIIToUTF16("Canada"), country);
 
   // Test country code detection.
-  address.SetInfo(
-      AutofillType(ADDRESS_HOME_COUNTRY), ASCIIToUTF16("JP"), "en-US");
+  address.SetInfo(AutofillType(ADDRESS_HOME_COUNTRY), ASCIIToUTF16("JP"),
+                  "en-US");
   country = address.GetInfo(AutofillType(ADDRESS_HOME_COUNTRY), "en-US");
   EXPECT_EQ(ASCIIToUTF16("JP"), address.GetRawInfo(ADDRESS_HOME_COUNTRY));
   EXPECT_EQ(ASCIIToUTF16("Japan"), country);
 
   // Test that we ignore unknown countries.
-  address.SetInfo(
-      AutofillType(ADDRESS_HOME_COUNTRY), ASCIIToUTF16("Unknown"), "en-US");
+  address.SetInfo(AutofillType(ADDRESS_HOME_COUNTRY), ASCIIToUTF16("Unknown"),
+                  "en-US");
   country = address.GetInfo(AutofillType(ADDRESS_HOME_COUNTRY), "en-US");
   EXPECT_EQ(base::string16(), address.GetRawInfo(ADDRESS_HOME_COUNTRY));
   EXPECT_EQ(base::string16(), country);
@@ -125,13 +124,8 @@
   Address address;
   address.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("US"));
 
-  const char* const kValidMatches[] = {
-    "United States",
-    "USA",
-    "US",
-    "United states",
-    "us"
-  };
+  const char* const kValidMatches[] = {"United States", "USA", "US",
+                                       "United states", "us"};
   for (const char* valid_match : kValidMatches) {
     SCOPED_TRACE(valid_match);
     ServerFieldTypeSet matching_types;
@@ -140,10 +134,7 @@
     EXPECT_EQ(ADDRESS_HOME_COUNTRY, *matching_types.begin());
   }
 
-  const char* const kInvalidMatches[] = {
-    "United",
-    "Garbage"
-  };
+  const char* const kInvalidMatches[] = {"United", "Garbage"};
   for (const char* invalid_match : kInvalidMatches) {
     ServerFieldTypeSet matching_types;
     address.GetMatchingTypes(ASCIIToUTF16(invalid_match), "US",
@@ -240,10 +231,10 @@
 TEST_F(AddressTest, SetRawStreetAddress) {
   const base::string16 empty_street_address;
   const base::string16 short_street_address = ASCIIToUTF16("456 Nowhere Ln.");
-  const base::string16 long_street_address =
-      ASCIIToUTF16("123 Example Ave.\n"
-                   "Apt. 42\n"
-                   "(The one with the blue door)");
+  const base::string16 long_street_address = ASCIIToUTF16(
+      "123 Example Ave.\n"
+      "Apt. 42\n"
+      "(The one with the blue door)");
 
   Address address;
   EXPECT_EQ(base::string16(), address.GetRawInfo(ADDRESS_HOME_LINE1));
@@ -272,10 +263,10 @@
 // Street addresses should be set properly.
 TEST_F(AddressTest, SetStreetAddress) {
   const base::string16 empty_street_address;
-  const base::string16 multi_line_street_address =
-      ASCIIToUTF16("789 Fancy Pkwy.\n"
-                   "Unit 3.14\n"
-                   "Box 9");
+  const base::string16 multi_line_street_address = ASCIIToUTF16(
+      "789 Fancy Pkwy.\n"
+      "Unit 3.14\n"
+      "Box 9");
   const base::string16 single_line_street_address =
       ASCIIToUTF16("123 Main, Apt 7");
   const AutofillType type = AutofillType(ADDRESS_HOME_STREET_ADDRESS);
diff --git a/components/autofill/core/browser/autofill_data_model.cc b/components/autofill/core/browser/data_model/autofill_data_model.cc
similarity index 94%
rename from components/autofill/core/browser/autofill_data_model.cc
rename to components/autofill/core/browser/data_model/autofill_data_model.cc
index bf0f73f..daf2f87 100644
--- a/components/autofill/core/browser/autofill_data_model.cc
+++ b/components/autofill/core/browser/data_model/autofill_data_model.cc
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "components/autofill/core/browser/autofill_data_model.h"
+#include "components/autofill/core/browser/data_model/autofill_data_model.h"
 
 #include <math.h>
 
-#include "components/autofill/core/browser/autofill_metadata.h"
 #include "components/autofill/core/browser/autofill_type.h"
+#include "components/autofill/core/browser/data_model/autofill_metadata.h"
 #include "components/autofill/core/common/autofill_clock.h"
 #include "components/autofill/core/common/autofill_constants.h"
 #include "url/gurl.h"
diff --git a/components/autofill/core/browser/autofill_data_model.h b/components/autofill/core/browser/data_model/autofill_data_model.h
similarity index 94%
rename from components/autofill/core/browser/autofill_data_model.h
rename to components/autofill/core/browser/data_model/autofill_data_model.h
index 07fd92b..3a646545 100644
--- a/components/autofill/core/browser/autofill_data_model.h
+++ b/components/autofill/core/browser/data_model/autofill_data_model.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 COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_DATA_MODEL_H_
-#define COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_DATA_MODEL_H_
+#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_AUTOFILL_DATA_MODEL_H_
+#define COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_AUTOFILL_DATA_MODEL_H_
 
 #include <stddef.h>
 
@@ -11,7 +11,7 @@
 
 #include "base/strings/string16.h"
 #include "base/time/time.h"
-#include "components/autofill/core/browser/form_group.h"
+#include "components/autofill/core/browser/data_model/form_group.h"
 
 namespace autofill {
 
@@ -135,4 +135,4 @@
 
 }  // namespace autofill
 
-#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_DATA_MODEL_H_
+#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_AUTOFILL_DATA_MODEL_H_
diff --git a/components/autofill/core/browser/autofill_data_model_unittest.cc b/components/autofill/core/browser/data_model/autofill_data_model_unittest.cc
similarity index 97%
rename from components/autofill/core/browser/autofill_data_model_unittest.cc
rename to components/autofill/core/browser/data_model/autofill_data_model_unittest.cc
index f719d9b..b8762af 100644
--- a/components/autofill/core/browser/autofill_data_model_unittest.cc
+++ b/components/autofill/core/browser/data_model/autofill_data_model_unittest.cc
@@ -2,14 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "components/autofill/core/browser/autofill_data_model.h"
+#include "components/autofill/core/browser/data_model/autofill_data_model.h"
 
 #include <stddef.h>
 
 #include "base/compiler_specific.h"
 #include "base/macros.h"
 #include "base/time/time.h"
-#include "components/autofill/core/browser/autofill_metadata.h"
+#include "components/autofill/core/browser/data_model/autofill_metadata.h"
 #include "components/autofill/core/browser/test_autofill_clock.h"
 #include "components/autofill/core/common/autofill_constants.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/autofill/core/browser/autofill_metadata.cc b/components/autofill/core/browser/data_model/autofill_metadata.cc
similarity index 93%
rename from components/autofill/core/browser/autofill_metadata.cc
rename to components/autofill/core/browser/data_model/autofill_metadata.cc
index cb2686f..6e48b3f 100644
--- a/components/autofill/core/browser/autofill_metadata.cc
+++ b/components/autofill/core/browser/data_model/autofill_metadata.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 "components/autofill/core/browser/autofill_metadata.h"
+#include "components/autofill/core/browser/data_model/autofill_metadata.h"
 
 #include "components/autofill/core/common/autofill_clock.h"
 #include "components/autofill/core/common/autofill_constants.h"
diff --git a/components/autofill/core/browser/autofill_metadata.h b/components/autofill/core/browser/data_model/autofill_metadata.h
similarity index 86%
rename from components/autofill/core/browser/autofill_metadata.h
rename to components/autofill/core/browser/data_model/autofill_metadata.h
index e8b62f1..ee50913 100644
--- a/components/autofill/core/browser/autofill_metadata.h
+++ b/components/autofill/core/browser/data_model/autofill_metadata.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 COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_METADATA_H_
-#define COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_METADATA_H_
+#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_AUTOFILL_METADATA_H_
+#define COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_AUTOFILL_METADATA_H_
 
 #include <string>
 
@@ -49,4 +49,4 @@
 
 }  // namespace autofill
 
-#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_METADATA_H_
+#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_AUTOFILL_METADATA_H_
diff --git a/components/autofill/core/browser/autofill_profile.cc b/components/autofill/core/browser/data_model/autofill_profile.cc
similarity index 96%
rename from components/autofill/core/browser/autofill_profile.cc
rename to components/autofill/core/browser/data_model/autofill_profile.cc
index 6322169e..d8c109e 100644
--- a/components/autofill/core/browser/autofill_profile.cc
+++ b/components/autofill/core/browser/data_model/autofill_profile.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 "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 
 #include <algorithm>
 #include <functional>
@@ -22,16 +22,16 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversion_utils.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/address.h"
 #include "components/autofill/core/browser/address_i18n.h"
 #include "components/autofill/core/browser/autofill_country.h"
 #include "components/autofill/core/browser/autofill_field.h"
-#include "components/autofill/core/browser/autofill_metadata.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
-#include "components/autofill/core/browser/autofill_profile_comparator.h"
 #include "components/autofill/core/browser/autofill_type.h"
-#include "components/autofill/core/browser/contact_info.h"
-#include "components/autofill/core/browser/phone_number.h"
+#include "components/autofill/core/browser/data_model/address.h"
+#include "components/autofill/core/browser/data_model/autofill_metadata.h"
+#include "components/autofill/core/browser/data_model/autofill_profile_comparator.h"
+#include "components/autofill/core/browser/data_model/contact_info.h"
+#include "components/autofill/core/browser/data_model/phone_number.h"
 #include "components/autofill/core/browser/phone_number_i18n.h"
 #include "components/autofill/core/browser/state_names.h"
 #include "components/autofill/core/browser/validation.h"
@@ -135,18 +135,18 @@
     ServerFieldType excluded_field,
     std::vector<ServerFieldType>* distinguishing_fields) {
   static const ServerFieldType kDefaultDistinguishingFields[] = {
-    NAME_FULL,
-    ADDRESS_HOME_LINE1,
-    ADDRESS_HOME_LINE2,
-    ADDRESS_HOME_DEPENDENT_LOCALITY,
-    ADDRESS_HOME_CITY,
-    ADDRESS_HOME_STATE,
-    ADDRESS_HOME_ZIP,
-    ADDRESS_HOME_SORTING_CODE,
-    ADDRESS_HOME_COUNTRY,
-    EMAIL_ADDRESS,
-    PHONE_HOME_WHOLE_NUMBER,
-    COMPANY_NAME,
+      NAME_FULL,
+      ADDRESS_HOME_LINE1,
+      ADDRESS_HOME_LINE2,
+      ADDRESS_HOME_DEPENDENT_LOCALITY,
+      ADDRESS_HOME_CITY,
+      ADDRESS_HOME_STATE,
+      ADDRESS_HOME_ZIP,
+      ADDRESS_HOME_SORTING_CODE,
+      ADDRESS_HOME_COUNTRY,
+      EMAIL_ADDRESS,
+      PHONE_HOME_WHOLE_NUMBER,
+      COMPANY_NAME,
   };
 
   std::vector<ServerFieldType> default_fields;
@@ -261,8 +261,7 @@
   operator=(profile);
 }
 
-AutofillProfile::~AutofillProfile() {
-}
+AutofillProfile::~AutofillProfile() {}
 
 AutofillProfile& AutofillProfile::operator=(const AutofillProfile& profile) {
   if (this == &profile)
@@ -449,8 +448,8 @@
   return 0;
 }
 
-bool AutofillProfile::EqualsForSyncPurposes(const AutofillProfile& profile)
-    const {
+bool AutofillProfile::EqualsForSyncPurposes(
+    const AutofillProfile& profile) const {
   return use_count() == profile.use_count() &&
          UseDateEqualsInSeconds(&profile) && EqualsSansGuid(profile);
 }
@@ -709,7 +708,7 @@
   // Construct the default label for each profile. Also construct a map that
   // associates each label with the profiles that have this label. This map is
   // then used to detect which labels need further differentiating fields.
-  std::map<base::string16, std::list<size_t> > labels_to_profiles;
+  std::map<base::string16, std::list<size_t>> labels_to_profiles;
   for (size_t i = 0; i < profiles.size(); ++i) {
     base::string16 label = profiles[i]->ConstructInferredLabel(
         fields_to_use.data(), fields_to_use.size(), minimal_fields_shown,
@@ -776,14 +775,13 @@
   std::unique_ptr<AddressData> address_data =
       i18n::CreateAddressDataFromAutofillProfile(trimmed_profile, app_locale);
   std::string address_line;
-  ::i18n::addressinput::GetFormattedNationalAddressLine(
-      *address_data, &address_line);
+  ::i18n::addressinput::GetFormattedNationalAddressLine(*address_data,
+                                                        &address_line);
   base::string16 label = base::UTF8ToUTF16(address_line);
 
   for (std::vector<ServerFieldType>::const_iterator it =
            remaining_fields.begin();
-       it != remaining_fields.end() && num_fields_to_use > 0;
-       ++it) {
+       it != remaining_fields.end() && num_fields_to_use > 0; ++it) {
     base::string16 field_value;
     // Special case whole numbers: we want the user-formatted (raw) version, not
     // the canonicalized version we'll fill into the page.
@@ -1060,8 +1058,8 @@
     std::vector<base::string16>* labels) {
   // For efficiency, we first construct a map of fields to their text values and
   // each value's frequency.
-  std::map<ServerFieldType,
-           std::map<base::string16, size_t> > field_text_frequencies_by_field;
+  std::map<ServerFieldType, std::map<base::string16, size_t>>
+      field_text_frequencies_by_field;
   for (const ServerFieldType& field : fields) {
     std::map<base::string16, size_t>& field_text_frequencies =
         field_text_frequencies_by_field[field];
@@ -1176,8 +1174,7 @@
 
 bool AutofillProfile::EqualsSansGuid(const AutofillProfile& profile) const {
   return origin() == profile.origin() &&
-         language_code() == profile.language_code() &&
-         Compare(profile) == 0;
+         language_code() == profile.language_code() && Compare(profile) == 0;
 }
 
 std::ostream& operator<<(std::ostream& os, const AutofillProfile& profile) {
diff --git a/components/autofill/core/browser/autofill_profile.h b/components/autofill/core/browser/data_model/autofill_profile.h
similarity index 96%
rename from components/autofill/core/browser/autofill_profile.h
rename to components/autofill/core/browser/data_model/autofill_profile.h
index 5dad1f4..65469df7 100644
--- a/components/autofill/core/browser/autofill_profile.h
+++ b/components/autofill/core/browser/data_model/autofill_profile.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 COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_PROFILE_H_
-#define COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_PROFILE_H_
+#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_AUTOFILL_PROFILE_H_
+#define COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_AUTOFILL_PROFILE_H_
 
 #include <stddef.h>
 
@@ -17,11 +17,11 @@
 #include "base/memory/weak_ptr.h"
 #include "base/strings/string16.h"
 #include "base/time/time.h"
-#include "components/autofill/core/browser/address.h"
-#include "components/autofill/core/browser/autofill_data_model.h"
 #include "components/autofill/core/browser/autofill_type.h"
-#include "components/autofill/core/browser/contact_info.h"
-#include "components/autofill/core/browser/phone_number.h"
+#include "components/autofill/core/browser/data_model/address.h"
+#include "components/autofill/core/browser/data_model/autofill_data_model.h"
+#include "components/autofill/core/browser/data_model/contact_info.h"
+#include "components/autofill/core/browser/data_model/phone_number.h"
 #include "components/autofill/core/browser/proto/server.pb.h"
 
 namespace autofill {
@@ -353,4 +353,4 @@
 
 }  // namespace autofill
 
-#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_PROFILE_H_
+#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_AUTOFILL_PROFILE_H_
diff --git a/components/autofill/core/browser/autofill_profile_comparator.cc b/components/autofill/core/browser/data_model/autofill_profile_comparator.cc
similarity index 98%
rename from components/autofill/core/browser/autofill_profile_comparator.cc
rename to components/autofill/core/browser/data_model/autofill_profile_comparator.cc
index 3c360fb..109965bda 100644
--- a/components/autofill/core/browser/autofill_profile_comparator.cc
+++ b/components/autofill/core/browser/data_model/autofill_profile_comparator.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 "components/autofill/core/browser/autofill_profile_comparator.h"
+#include "components/autofill/core/browser/data_model/autofill_profile_comparator.h"
 
 #include <algorithm>
 #include <vector>
@@ -20,9 +20,9 @@
 #include "components/autofill/core/browser/state_names.h"
 #include "third_party/libphonenumber/phonenumber_api.h"
 
-using i18n::phonenumbers::PhoneNumberUtil;
 using base::UTF16ToUTF8;
 using base::UTF8ToUTF16;
+using i18n::phonenumbers::PhoneNumberUtil;
 
 namespace autofill {
 namespace {
@@ -215,10 +215,9 @@
   return true;
 }
 
-bool AutofillProfileComparator::MergeCJKNames(
-    const AutofillProfile& p1,
-    const AutofillProfile& p2,
-    NameInfo* info) const {
+bool AutofillProfileComparator::MergeCJKNames(const AutofillProfile& p1,
+                                              const AutofillProfile& p2,
+                                              NameInfo* info) const {
   DCHECK(data_util::IsCJKName(p1.GetInfo(NAME_FULL, app_locale_)));
   DCHECK(data_util::IsCJKName(p2.GetInfo(NAME_FULL, app_locale_)));
 
@@ -228,16 +227,10 @@
     base::string16 full;
   };
 
-  Name name1 = {
-    p1.GetRawInfo(NAME_FIRST),
-    p1.GetRawInfo(NAME_LAST),
-    p1.GetRawInfo(NAME_FULL)
-  };
-  Name name2 = {
-    p2.GetRawInfo(NAME_FIRST),
-    p2.GetRawInfo(NAME_LAST),
-    p2.GetRawInfo(NAME_FULL)
-  };
+  Name name1 = {p1.GetRawInfo(NAME_FIRST), p1.GetRawInfo(NAME_LAST),
+                p1.GetRawInfo(NAME_FULL)};
+  Name name2 = {p2.GetRawInfo(NAME_FIRST), p2.GetRawInfo(NAME_LAST),
+                p2.GetRawInfo(NAME_FULL)};
 
   const Name* most_recent_name =
       p2.use_date() >= p1.use_date() ? &name2 : &name1;
diff --git a/components/autofill/core/browser/autofill_profile_comparator.h b/components/autofill/core/browser/data_model/autofill_profile_comparator.h
similarity index 95%
rename from components/autofill/core/browser/autofill_profile_comparator.h
rename to components/autofill/core/browser/data_model/autofill_profile_comparator.h
index a2be020..ad5e4c2 100644
--- a/components/autofill/core/browser/autofill_profile_comparator.h
+++ b/components/autofill/core/browser/data_model/autofill_profile_comparator.h
@@ -2,17 +2,17 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_PROFILE_COMPARATOR_H_
-#define COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_PROFILE_COMPARATOR_H_
+#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_AUTOFILL_PROFILE_COMPARATOR_H_
+#define COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_AUTOFILL_PROFILE_COMPARATOR_H_
 
 #include <memory>
 #include <set>
 
 #include "base/strings/string16.h"
 #include "base/strings/string_piece.h"
-#include "components/autofill/core/browser/address.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/contact_info.h"
+#include "components/autofill/core/browser/data_model/address.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/contact_info.h"
 #include "components/autofill/core/common/autofill_l10n_util.h"
 #include "third_party/icu/source/i18n/unicode/translit.h"
 
@@ -234,4 +234,4 @@
 
 }  // namespace autofill
 
-#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_PROFILE_COMPARATOR_H_
+#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_AUTOFILL_PROFILE_COMPARATOR_H_
diff --git a/components/autofill/core/browser/autofill_profile_comparator_unittest.cc b/components/autofill/core/browser/data_model/autofill_profile_comparator_unittest.cc
similarity index 98%
rename from components/autofill/core/browser/autofill_profile_comparator_unittest.cc
rename to components/autofill/core/browser/data_model/autofill_profile_comparator_unittest.cc
index 1ef920c..ae914d44 100644
--- a/components/autofill/core/browser/autofill_profile_comparator_unittest.cc
+++ b/components/autofill/core/browser/data_model/autofill_profile_comparator_unittest.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 "components/autofill/core/browser/autofill_profile_comparator.h"
+#include "components/autofill/core/browser/data_model/autofill_profile_comparator.h"
 
 #include "base/guid.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_feature_list.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/contact_info.h"
 #include "components/autofill/core/browser/country_names.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/contact_info.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/common/autofill_features.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -32,12 +32,12 @@
 using autofill::NAME_FULL;
 using autofill::NAME_LAST;
 using autofill::NAME_MIDDLE;
-using autofill::PHONE_HOME_WHOLE_NUMBER;
-using autofill::PHONE_HOME_EXTENSION;
-using autofill::PHONE_HOME_NUMBER;
+using autofill::PHONE_HOME_CITY_AND_NUMBER;
 using autofill::PHONE_HOME_CITY_CODE;
 using autofill::PHONE_HOME_COUNTRY_CODE;
-using autofill::PHONE_HOME_CITY_AND_NUMBER;
+using autofill::PHONE_HOME_EXTENSION;
+using autofill::PHONE_HOME_NUMBER;
+using autofill::PHONE_HOME_WHOLE_NUMBER;
 
 // Classes, Functions, and other Symbols
 using autofill::Address;
@@ -62,21 +62,21 @@
       : public ::autofill::AutofillProfileComparator {
    public:
     typedef ::autofill::AutofillProfileComparator Super;
-    using Super::Super;
-    using Super::UniqueTokens;
     using Super::CompareTokens;
     using Super::GetNamePartVariants;
-    using Super::IsNameVariantOf;
-    using Super::HaveMergeableNames;
-    using Super::HaveMergeableEmailAddresses;
-    using Super::HaveMergeableCompanyNames;
-    using Super::HaveMergeablePhoneNumbers;
     using Super::HaveMergeableAddresses;
+    using Super::HaveMergeableCompanyNames;
+    using Super::HaveMergeableEmailAddresses;
+    using Super::HaveMergeableNames;
+    using Super::HaveMergeablePhoneNumbers;
+    using Super::IsNameVariantOf;
+    using Super::Super;
+    using Super::UniqueTokens;
 
     using Super::DIFFERENT_TOKENS;
-    using Super::SAME_TOKENS;
     using Super::S1_CONTAINS_S2;
     using Super::S2_CONTAINS_S1;
+    using Super::SAME_TOKENS;
   };
 
   AutofillProfileComparatorTest() {
@@ -336,14 +336,16 @@
             comparator_.NormalizeForComparison(UTF8ToUTF16("まéÖä정")));
 
   // Spaces removed.
-  EXPECT_EQ(UTF8ToUTF16("유재석"), comparator_.NormalizeForComparison(
-      UTF8ToUTF16("유 재석"),
-      AutofillProfileComparator::DISCARD_WHITESPACE));
+  EXPECT_EQ(UTF8ToUTF16("유재석"),
+            comparator_.NormalizeForComparison(
+                UTF8ToUTF16("유 재석"),
+                AutofillProfileComparator::DISCARD_WHITESPACE));
 
   // Punctuation removed, Japanese kana normalized.
-  EXPECT_EQ(UTF8ToUTF16("ヒルケイツ"), comparator_.NormalizeForComparison(
-      UTF8ToUTF16("ビル・ゲイツ"),
-      AutofillProfileComparator::DISCARD_WHITESPACE));
+  EXPECT_EQ(UTF8ToUTF16("ヒルケイツ"),
+            comparator_.NormalizeForComparison(
+                UTF8ToUTF16("ビル・ゲイツ"),
+                AutofillProfileComparator::DISCARD_WHITESPACE));
 }
 
 TEST_F(AutofillProfileComparatorTest, MatchesAfterNormalization) {
@@ -700,7 +702,6 @@
   NameInfo name4 = CreateNameInfo("영호", "", "이", "");
   NameInfo name5 = CreateNameInfo("영호", "", "이", "이 영호");
 
-
   // Mergeable foreign name in Japanese with a 'KATAKANA MIDDLE DOT'.
   NameInfo name6 = CreateNameInfo("", "", "", "ゲイツ・ビル");
   NameInfo name7 = CreateNameInfo("ビル", "", "ゲイツ", "");
diff --git a/components/autofill/core/browser/autofill_profile_unittest.cc b/components/autofill/core/browser/data_model/autofill_profile_unittest.cc
similarity index 94%
rename from components/autofill/core/browser/autofill_profile_unittest.cc
rename to components/autofill/core/browser/data_model/autofill_profile_unittest.cc
index cceee5bd5..96f2c52 100644
--- a/components/autofill/core/browser/autofill_profile_unittest.cc
+++ b/components/autofill/core/browser/data_model/autofill_profile_unittest.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 "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 
 #include <stddef.h>
 
@@ -16,10 +16,10 @@
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_feature_list.h"
-#include "components/autofill/core/browser/autofill_metadata.h"
-#include "components/autofill/core/browser/autofill_profile_comparator.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/autofill_type.h"
+#include "components/autofill/core/browser/data_model/autofill_metadata.h"
+#include "components/autofill/core/browser/data_model/autofill_profile_comparator.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/test_autofill_clock.h"
 #include "components/autofill/core/common/autofill_constants.h"
@@ -74,84 +74,82 @@
   // Case 0a/empty name and address, so the first two fields of the rest of the
   // data is used: "Hollywood, CA"
   AutofillProfile profile00(base::GenerateGUID(), test::kEmptyOrigin);
-  test::SetProfileInfo(&profile00, "", "", "",
-      "johnwayne@me.xyz", "Fox", "", "", "Hollywood", "CA", "91601", "US",
-      "16505678910");
+  test::SetProfileInfo(&profile00, "", "", "", "johnwayne@me.xyz", "Fox", "",
+                       "", "Hollywood", "CA", "91601", "US", "16505678910");
   base::string16 summary00 = GetLabel(&profile00);
   EXPECT_EQ(ASCIIToUTF16("Hollywood, CA"), summary00);
 
   // Case 1: "<address>" without line 2.
   AutofillProfile profile1(base::GenerateGUID(), test::kEmptyOrigin);
-  test::SetProfileInfo(&profile1, "", "", "",
-      "johnwayne@me.xyz", "Fox", "123 Zoo St.", "", "Hollywood", "CA",
-      "91601", "US", "16505678910");
+  test::SetProfileInfo(&profile1, "", "", "", "johnwayne@me.xyz", "Fox",
+                       "123 Zoo St.", "", "Hollywood", "CA", "91601", "US",
+                       "16505678910");
   base::string16 summary1 = GetLabel(&profile1);
   EXPECT_EQ(ASCIIToUTF16("123 Zoo St., Hollywood"), summary1);
 
   // Case 1a: "<address>" with line 2.
   AutofillProfile profile1a(base::GenerateGUID(), test::kEmptyOrigin);
-  test::SetProfileInfo(&profile1a, "", "", "",
-      "johnwayne@me.xyz", "Fox", "123 Zoo St.", "unit 5", "Hollywood", "CA",
-      "91601", "US", "16505678910");
+  test::SetProfileInfo(&profile1a, "", "", "", "johnwayne@me.xyz", "Fox",
+                       "123 Zoo St.", "unit 5", "Hollywood", "CA", "91601",
+                       "US", "16505678910");
   base::string16 summary1a = GetLabel(&profile1a);
   EXPECT_EQ(ASCIIToUTF16("123 Zoo St., unit 5"), summary1a);
 
   // Case 2: "<lastname>"
   AutofillProfile profile2(base::GenerateGUID(), test::kEmptyOrigin);
-  test::SetProfileInfo(&profile2, "", "Mitchell",
-      "Morrison", "johnwayne@me.xyz", "Fox", "", "", "Hollywood", "CA",
-      "91601", "US", "16505678910");
+  test::SetProfileInfo(&profile2, "", "Mitchell", "Morrison",
+                       "johnwayne@me.xyz", "Fox", "", "", "Hollywood", "CA",
+                       "91601", "US", "16505678910");
   base::string16 summary2 = GetLabel(&profile2);
   // Summary includes full name, to the maximal extent available.
   EXPECT_EQ(ASCIIToUTF16("Mitchell Morrison, Hollywood"), summary2);
 
   // Case 3: "<lastname>, <address>"
   AutofillProfile profile3(base::GenerateGUID(), test::kEmptyOrigin);
-  test::SetProfileInfo(&profile3, "", "Mitchell",
-      "Morrison", "johnwayne@me.xyz", "Fox", "123 Zoo St.", "",
-      "Hollywood", "CA", "91601", "US", "16505678910");
+  test::SetProfileInfo(&profile3, "", "Mitchell", "Morrison",
+                       "johnwayne@me.xyz", "Fox", "123 Zoo St.", "",
+                       "Hollywood", "CA", "91601", "US", "16505678910");
   base::string16 summary3 = GetLabel(&profile3);
   EXPECT_EQ(ASCIIToUTF16("Mitchell Morrison, 123 Zoo St."), summary3);
 
   // Case 4: "<firstname>"
   AutofillProfile profile4(base::GenerateGUID(), test::kEmptyOrigin);
-  test::SetProfileInfo(&profile4, "Marion", "Mitchell", "",
-      "johnwayne@me.xyz", "Fox", "", "", "Hollywood", "CA", "91601", "US",
-      "16505678910");
+  test::SetProfileInfo(&profile4, "Marion", "Mitchell", "", "johnwayne@me.xyz",
+                       "Fox", "", "", "Hollywood", "CA", "91601", "US",
+                       "16505678910");
   base::string16 summary4 = GetLabel(&profile4);
   EXPECT_EQ(ASCIIToUTF16("Marion Mitchell, Hollywood"), summary4);
 
   // Case 5: "<firstname>, <address>"
   AutofillProfile profile5(base::GenerateGUID(), test::kEmptyOrigin);
-  test::SetProfileInfo(&profile5, "Marion", "Mitchell", "",
-      "johnwayne@me.xyz", "Fox", "123 Zoo St.", "unit 5", "Hollywood", "CA",
-      "91601", "US", "16505678910");
+  test::SetProfileInfo(&profile5, "Marion", "Mitchell", "", "johnwayne@me.xyz",
+                       "Fox", "123 Zoo St.", "unit 5", "Hollywood", "CA",
+                       "91601", "US", "16505678910");
   base::string16 summary5 = GetLabel(&profile5);
   EXPECT_EQ(ASCIIToUTF16("Marion Mitchell, 123 Zoo St."), summary5);
 
   // Case 6: "<firstname> <lastname>"
   AutofillProfile profile6(base::GenerateGUID(), test::kEmptyOrigin);
-  test::SetProfileInfo(&profile6, "Marion", "Mitchell",
-      "Morrison", "johnwayne@me.xyz", "Fox", "", "", "Hollywood", "CA",
-      "91601", "US", "16505678910");
+  test::SetProfileInfo(&profile6, "Marion", "Mitchell", "Morrison",
+                       "johnwayne@me.xyz", "Fox", "", "", "Hollywood", "CA",
+                       "91601", "US", "16505678910");
   base::string16 summary6 = GetLabel(&profile6);
-  EXPECT_EQ(ASCIIToUTF16("Marion Mitchell Morrison, Hollywood"),
-            summary6);
+  EXPECT_EQ(ASCIIToUTF16("Marion Mitchell Morrison, Hollywood"), summary6);
 
   // Case 7: "<firstname> <lastname>, <address>"
   AutofillProfile profile7(base::GenerateGUID(), test::kEmptyOrigin);
-  test::SetProfileInfo(&profile7, "Marion", "Mitchell",
-      "Morrison", "johnwayne@me.xyz", "Fox", "123 Zoo St.", "unit 5",
-      "Hollywood", "CA", "91601", "US", "16505678910");
+  test::SetProfileInfo(&profile7, "Marion", "Mitchell", "Morrison",
+                       "johnwayne@me.xyz", "Fox", "123 Zoo St.", "unit 5",
+                       "Hollywood", "CA", "91601", "US", "16505678910");
   base::string16 summary7 = GetLabel(&profile7);
   EXPECT_EQ(ASCIIToUTF16("Marion Mitchell Morrison, 123 Zoo St."), summary7);
 
   // Case 7a: "<firstname> <lastname>, <address>" - same as #7, except for
   // e-mail.
   AutofillProfile profile7a(base::GenerateGUID(), test::kEmptyOrigin);
-  test::SetProfileInfo(&profile7a, "Marion", "Mitchell",
-    "Morrison", "marion@me.xyz", "Fox", "123 Zoo St.", "unit 5",
-    "Hollywood", "CA", "91601", "US", "16505678910");
+  test::SetProfileInfo(&profile7a, "Marion", "Mitchell", "Morrison",
+                       "marion@me.xyz", "Fox", "123 Zoo St.", "unit 5",
+                       "Hollywood", "CA", "91601", "US", "16505678910");
   std::vector<AutofillProfile*> profiles;
   profiles.push_back(&profile7);
   profiles.push_back(&profile7a);
@@ -160,10 +158,12 @@
   ASSERT_EQ(profiles.size(), labels.size());
   summary7 = labels[0];
   base::string16 summary7a = labels[1];
-  EXPECT_EQ(ASCIIToUTF16(
-      "Marion Mitchell Morrison, 123 Zoo St., johnwayne@me.xyz"), summary7);
-  EXPECT_EQ(ASCIIToUTF16(
-      "Marion Mitchell Morrison, 123 Zoo St., marion@me.xyz"), summary7a);
+  EXPECT_EQ(
+      ASCIIToUTF16("Marion Mitchell Morrison, 123 Zoo St., johnwayne@me.xyz"),
+      summary7);
+  EXPECT_EQ(
+      ASCIIToUTF16("Marion Mitchell Morrison, 123 Zoo St., marion@me.xyz"),
+      summary7a);
 }
 
 TEST(AutofillProfileTest, AdjustInferredLabels) {
@@ -258,9 +258,11 @@
   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CA"), labels[0]);
   EXPECT_EQ(ASCIIToUTF16("Jane Doe, 123 Letha Shore."), labels[1]);
   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CO, johndoe@hades.com,"
-                         " 16502111111"), labels[2]);
+                         " 16502111111"),
+            labels[2]);
   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CO, johndoe@hades.com,"
-                         " 16504444444"), labels[3]);
+                         " 16504444444"),
+            labels[3]);
   // This one differs from other ones by unique e-mail, so no need for extra
   // information.
   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CO, johndoe@styx.com"),
@@ -277,18 +279,18 @@
                        "CH", "+41 44-668-1800");
   profiles.back()->set_language_code("de_CH");
   static const char* kExpectedLabels[] = {
-    "",
-    "H. R. Giger",
-    "H. R. Giger, Brandschenkestrasse 110",
-    "H. R. Giger, Brandschenkestrasse 110, Zurich",
-    "H. R. Giger, Brandschenkestrasse 110, CH-8002 Zurich",
-    "Beispiel Inc, H. R. Giger, Brandschenkestrasse 110, CH-8002 Zurich",
-    "Beispiel Inc, H. R. Giger, Brandschenkestrasse 110, CH-8002 Zurich, "
-        "Switzerland",
-    "Beispiel Inc, H. R. Giger, Brandschenkestrasse 110, CH-8002 Zurich, "
-        "Switzerland, hrgiger@beispiel.com",
-    "Beispiel Inc, H. R. Giger, Brandschenkestrasse 110, CH-8002 Zurich, "
-        "Switzerland, hrgiger@beispiel.com, +41 44-668-1800",
+      "",
+      "H. R. Giger",
+      "H. R. Giger, Brandschenkestrasse 110",
+      "H. R. Giger, Brandschenkestrasse 110, Zurich",
+      "H. R. Giger, Brandschenkestrasse 110, CH-8002 Zurich",
+      "Beispiel Inc, H. R. Giger, Brandschenkestrasse 110, CH-8002 Zurich",
+      "Beispiel Inc, H. R. Giger, Brandschenkestrasse 110, CH-8002 Zurich, "
+      "Switzerland",
+      "Beispiel Inc, H. R. Giger, Brandschenkestrasse 110, CH-8002 Zurich, "
+      "Switzerland, hrgiger@beispiel.com",
+      "Beispiel Inc, H. R. Giger, Brandschenkestrasse 110, CH-8002 Zurich, "
+      "Switzerland, hrgiger@beispiel.com, +41 44-668-1800",
   };
 
   std::vector<base::string16> labels;
@@ -300,7 +302,6 @@
   }
 }
 
-
 TEST(AutofillProfileTest, CreateInferredLabelsI18n_FR) {
   std::vector<std::unique_ptr<AutofillProfile>> profiles;
   profiles.push_back(std::make_unique<AutofillProfile>(base::GenerateGUID(),
@@ -353,21 +354,21 @@
       "Park Jae-sang, Gangnam Finance Center, 152 Teheran-ro",
       "Park Jae-sang, Gangnam Finance Center, 152 Teheran-ro, Yeoksam-Dong",
       "Park Jae-sang, Gangnam Finance Center, 152 Teheran-ro, Yeoksam-Dong, "
-          "Gangnam-Gu",
+      "Gangnam-Gu",
       "Park Jae-sang, Gangnam Finance Center, 152 Teheran-ro, Yeoksam-Dong, "
-          "Gangnam-Gu, Seoul",
+      "Gangnam-Gu, Seoul",
       "Park Jae-sang, Gangnam Finance Center, 152 Teheran-ro, Yeoksam-Dong, "
-          "Gangnam-Gu, Seoul, 135-984",
+      "Gangnam-Gu, Seoul, 135-984",
       "Park Jae-sang, Yeleul Inc, Gangnam Finance Center, 152 Teheran-ro, "
-          "Yeoksam-Dong, Gangnam-Gu, Seoul, 135-984",
+      "Yeoksam-Dong, Gangnam-Gu, Seoul, 135-984",
       "Park Jae-sang, Yeleul Inc, Gangnam Finance Center, 152 Teheran-ro, "
-          "Yeoksam-Dong, Gangnam-Gu, Seoul, 135-984, South Korea",
+      "Yeoksam-Dong, Gangnam-Gu, Seoul, 135-984, South Korea",
       "Park Jae-sang, Yeleul Inc, Gangnam Finance Center, 152 Teheran-ro, "
-          "Yeoksam-Dong, Gangnam-Gu, Seoul, 135-984, South Korea, "
-          "park@yeleul.com",
+      "Yeoksam-Dong, Gangnam-Gu, Seoul, 135-984, South Korea, "
+      "park@yeleul.com",
       "Park Jae-sang, Yeleul Inc, Gangnam Finance Center, 152 Teheran-ro, "
-          "Yeoksam-Dong, Gangnam-Gu, Seoul, 135-984, South Korea, "
-          "park@yeleul.com, +82-2-531-9000",
+      "Yeoksam-Dong, Gangnam-Gu, Seoul, 135-984, South Korea, "
+      "park@yeleul.com, +82-2-531-9000",
   };
 
   std::vector<base::string16> labels;
@@ -389,22 +390,22 @@
                        "JP", "+81-3-6384-9000");
   profiles.back()->set_language_code("ja_Latn");
   static const char* kExpectedLabels[] = {
-    "",
-    "Miku Hatsune",
-    "Miku Hatsune, Roppongi Hills Mori Tower",
-    "Miku Hatsune, Roppongi Hills Mori Tower, 6-10-1 Roppongi, Minato-ku",
-    "Miku Hatsune, Roppongi Hills Mori Tower, 6-10-1 Roppongi, Minato-ku, "
-        "Tokyo",
-    "Miku Hatsune, Roppongi Hills Mori Tower, 6-10-1 Roppongi, Minato-ku, "
-        "Tokyo, 106-6126",
-    "Miku Hatsune, Rei Inc, Roppongi Hills Mori Tower, 6-10-1 Roppongi, "
-        "Minato-ku, Tokyo, 106-6126",
-    "Miku Hatsune, Rei Inc, Roppongi Hills Mori Tower, 6-10-1 Roppongi, "
-        "Minato-ku, Tokyo, 106-6126, Japan",
-    "Miku Hatsune, Rei Inc, Roppongi Hills Mori Tower, 6-10-1 Roppongi, "
-        "Minato-ku, Tokyo, 106-6126, Japan, miku@rei.com",
-    "Miku Hatsune, Rei Inc, Roppongi Hills Mori Tower, 6-10-1 Roppongi, "
-        "Minato-ku, Tokyo, 106-6126, Japan, miku@rei.com, +81-3-6384-9000",
+      "",
+      "Miku Hatsune",
+      "Miku Hatsune, Roppongi Hills Mori Tower",
+      "Miku Hatsune, Roppongi Hills Mori Tower, 6-10-1 Roppongi, Minato-ku",
+      "Miku Hatsune, Roppongi Hills Mori Tower, 6-10-1 Roppongi, Minato-ku, "
+      "Tokyo",
+      "Miku Hatsune, Roppongi Hills Mori Tower, 6-10-1 Roppongi, Minato-ku, "
+      "Tokyo, 106-6126",
+      "Miku Hatsune, Rei Inc, Roppongi Hills Mori Tower, 6-10-1 Roppongi, "
+      "Minato-ku, Tokyo, 106-6126",
+      "Miku Hatsune, Rei Inc, Roppongi Hills Mori Tower, 6-10-1 Roppongi, "
+      "Minato-ku, Tokyo, 106-6126, Japan",
+      "Miku Hatsune, Rei Inc, Roppongi Hills Mori Tower, 6-10-1 Roppongi, "
+      "Minato-ku, Tokyo, 106-6126, Japan, miku@rei.com",
+      "Miku Hatsune, Rei Inc, Roppongi Hills Mori Tower, 6-10-1 Roppongi, "
+      "Minato-ku, Tokyo, 106-6126, Japan, miku@rei.com, +81-3-6384-9000",
   };
 
   std::vector<base::string16> labels;
@@ -471,10 +472,8 @@
   // Three fields at least - no filter.
   AutofillProfile::CreateInferredLabels(ToRawPointerVector(profiles), nullptr,
                                         UNKNOWN_TYPE, 3, "en-US", &labels);
-  EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., Elysium"),
-            labels[0]);
-  EXPECT_EQ(ASCIIToUTF16("Jane Doe, 123 Letha Shore., Dis"),
-            labels[1]);
+  EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., Elysium"), labels[0]);
+  EXPECT_EQ(ASCIIToUTF16("Jane Doe, 123 Letha Shore., Dis"), labels[1]);
 
   std::vector<ServerFieldType> suggested_fields;
   suggested_fields.push_back(ADDRESS_HOME_CITY);
@@ -648,7 +647,8 @@
   ASSERT_EQ(3U, labels.size());
   EXPECT_EQ(ASCIIToUTF16("John Doe, doe@example.com, Gogole"), labels[0]);
   EXPECT_EQ(ASCIIToUTF16("John Doe, 88 Nowhere Ave., doe@example.com, Ggoole"),
-            labels[1]) << labels[1];
+            labels[1])
+      << labels[1];
   EXPECT_EQ(ASCIIToUTF16("John Doe, john.doe@example.com"), labels[2]);
 }
 
@@ -1091,10 +1091,9 @@
 
 TEST(AutofillProfileTest, AssignmentOperator) {
   AutofillProfile a(base::GenerateGUID(), test::kEmptyOrigin);
-  test::SetProfileInfo(&a, "Marion", "Mitchell", "Morrison",
-                       "marion@me.xyz", "Fox", "123 Zoo St.", "unit 5",
-                       "Hollywood", "CA", "91601", "US",
-                       "12345678910");
+  test::SetProfileInfo(&a, "Marion", "Mitchell", "Morrison", "marion@me.xyz",
+                       "Fox", "123 Zoo St.", "unit 5", "Hollywood", "CA",
+                       "91601", "US", "12345678910");
 
   // Result of assignment should be logically equal to the original profile.
   AutofillProfile b(base::GenerateGUID(), test::kEmptyOrigin);
@@ -1108,10 +1107,9 @@
 
 TEST(AutofillProfileTest, Copy) {
   AutofillProfile a(base::GenerateGUID(), test::kEmptyOrigin);
-  test::SetProfileInfo(&a, "Marion", "Mitchell", "Morrison",
-                       "marion@me.xyz", "Fox", "123 Zoo St.", "unit 5",
-                       "Hollywood", "CA", "91601", "US",
-                       "12345678910");
+  test::SetProfileInfo(&a, "Marion", "Mitchell", "Morrison", "marion@me.xyz",
+                       "Fox", "123 Zoo St.", "unit 5", "Hollywood", "CA",
+                       "91601", "US", "12345678910");
 
   // Clone should be logically equal to the original.
   AutofillProfile b(a);
@@ -1157,8 +1155,7 @@
   // Addresses are compared in full. Regression test for http://crbug.com/375545
   test::SetProfileInfo(&a, "John", nullptr, nullptr, nullptr, nullptr, nullptr,
                        nullptr, nullptr, nullptr, nullptr, nullptr, nullptr);
-  a.SetRawInfo(ADDRESS_HOME_STREET_ADDRESS,
-               ASCIIToUTF16("line one\nline two"));
+  a.SetRawInfo(ADDRESS_HOME_STREET_ADDRESS, ASCIIToUTF16("line one\nline two"));
   test::SetProfileInfo(&b, "John", nullptr, nullptr, nullptr, nullptr, nullptr,
                        nullptr, nullptr, nullptr, nullptr, nullptr, nullptr);
   b.SetRawInfo(ADDRESS_HOME_STREET_ADDRESS,
@@ -1200,9 +1197,8 @@
 TEST(AutofillProfileTest, SetRawInfoPreservesLineBreaks) {
   AutofillProfile profile(base::GenerateGUID(), test::kEmptyOrigin);
 
-  profile.SetRawInfo(ADDRESS_HOME_STREET_ADDRESS,
-                     ASCIIToUTF16("123 Super St.\n"
-                                  "Apt. #42"));
+  profile.SetRawInfo(ADDRESS_HOME_STREET_ADDRESS, ASCIIToUTF16("123 Super St.\n"
+                                                               "Apt. #42"));
   EXPECT_EQ(ASCIIToUTF16("123 Super St.\n"
                          "Apt. #42"),
             profile.GetRawInfo(ADDRESS_HOME_STREET_ADDRESS));
@@ -1241,16 +1237,15 @@
   AutofillProfile profile(base::GenerateGUID(), test::kEmptyOrigin);
   test::SetProfileInfo(&profile, "Marion", "Mitchell", "Morrison",
                        "marion@me.xyz", "Fox", "123 Zoo St.", "unit 5",
-                       "Hollywood", "CA", "91601", "US",
-                       "12345678910");
+                       "Hollywood", "CA", "91601", "US", "12345678910");
 
   AutofillType full_address(HTML_TYPE_FULL_ADDRESS, HTML_MODE_NONE);
-  base::string16 formatted_address(ASCIIToUTF16(
-      "Marion Mitchell Morrison\n"
-      "Fox\n"
-      "123 Zoo St.\n"
-      "unit 5\n"
-      "Hollywood, CA 91601"));
+  base::string16 formatted_address(
+      ASCIIToUTF16("Marion Mitchell Morrison\n"
+                   "Fox\n"
+                   "123 Zoo St.\n"
+                   "unit 5\n"
+                   "Hollywood, CA 91601"));
   EXPECT_EQ(formatted_address, profile.GetInfo(full_address, "en-US"));
   // This should fail and leave the profile unchanged.
   EXPECT_FALSE(profile.SetInfo(full_address, ASCIIToUTF16("foobar"), "en-US"));
@@ -1339,8 +1334,7 @@
   EXPECT_EQ(UTF8ToUTF16("Märion"), a.GetRawInfo(NAME_FIRST));
   EXPECT_EQ(UTF8ToUTF16("Mitchéll"), a.GetRawInfo(NAME_MIDDLE));
   EXPECT_EQ(UTF8ToUTF16("Morrison"), a.GetRawInfo(NAME_LAST));
-  EXPECT_EQ(UTF8ToUTF16("Märion Mitchéll Morrison"),
-            a.GetRawInfo(NAME_FULL));
+  EXPECT_EQ(UTF8ToUTF16("Märion Mitchéll Morrison"), a.GetRawInfo(NAME_FULL));
 }
 
 // Tests that no loss of information happens when SavingAdditionalInfo with a
diff --git a/components/autofill/core/browser/contact_info.cc b/components/autofill/core/browser/data_model/contact_info.cc
similarity index 97%
rename from components/autofill/core/browser/contact_info.cc
rename to components/autofill/core/browser/data_model/contact_info.cc
index 3f8dc70..2f3b4a6 100644
--- a/components/autofill/core/browser/contact_info.cc
+++ b/components/autofill/core/browser/data_model/contact_info.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 "components/autofill/core/browser/contact_info.h"
+#include "components/autofill/core/browser/data_model/contact_info.h"
 
 #include <stddef.h>
 #include <ostream>
@@ -13,8 +13,8 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_type.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/common/autofill_features.h"
 #include "components/autofill/core/common/autofill_l10n_util.h"
 #include "components/autofill/core/common/autofill_regexes.h"
diff --git a/components/autofill/core/browser/contact_info.h b/components/autofill/core/browser/data_model/contact_info.h
similarity index 92%
rename from components/autofill/core/browser/contact_info.h
rename to components/autofill/core/browser/data_model/contact_info.h
index 3bb79c4..b838253 100644
--- a/components/autofill/core/browser/contact_info.h
+++ b/components/autofill/core/browser/data_model/contact_info.h
@@ -2,14 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_CONTACT_INFO_H_
-#define COMPONENTS_AUTOFILL_CORE_BROWSER_CONTACT_INFO_H_
+#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_CONTACT_INFO_H_
+#define COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_CONTACT_INFO_H_
 
 #include <vector>
 
 #include "base/compiler_specific.h"
 #include "base/strings/string16.h"
-#include "components/autofill/core/browser/form_group.h"
+#include "components/autofill/core/browser/data_model/form_group.h"
 
 namespace autofill {
 
@@ -116,4 +116,4 @@
 
 }  // namespace autofill
 
-#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_CONTACT_INFO_H_
+#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_CONTACT_INFO_H_
diff --git a/components/autofill/core/browser/contact_info_unittest.cc b/components/autofill/core/browser/data_model/contact_info_unittest.cc
similarity index 71%
rename from components/autofill/core/browser/contact_info_unittest.cc
rename to components/autofill/core/browser/data_model/contact_info_unittest.cc
index cac7c92..a5e64b41 100644
--- a/components/autofill/core/browser/contact_info_unittest.cc
+++ b/components/autofill/core/browser/data_model/contact_info_unittest.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 "components/autofill/core/browser/contact_info.h"
+#include "components/autofill/core/browser/data_model/contact_info.h"
 
 #include <stddef.h>
 
@@ -12,8 +12,8 @@
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_feature_list.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_type.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/common/autofill_features.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -187,128 +187,124 @@
   std::string starting_names[3];
   std::string additional_names[3];
   bool expected_result;
-  };
+};
 
-  class ParsedNamesAreEqualTest
-      : public testing::TestWithParam<ParsedNamesAreEqualTestCase> {};
+class ParsedNamesAreEqualTest
+    : public testing::TestWithParam<ParsedNamesAreEqualTestCase> {};
 
-  TEST_P(ParsedNamesAreEqualTest, ParsedNamesAreEqual) {
-    auto test_case = GetParam();
+TEST_P(ParsedNamesAreEqualTest, ParsedNamesAreEqual) {
+  auto test_case = GetParam();
 
-    // Construct the starting_profile.
-    NameInfo starting_profile;
-    starting_profile.SetRawInfo(NAME_FIRST,
-                                UTF8ToUTF16(test_case.starting_names[0]));
-    starting_profile.SetRawInfo(NAME_MIDDLE,
-                                UTF8ToUTF16(test_case.starting_names[1]));
-    starting_profile.SetRawInfo(NAME_LAST,
-                                UTF8ToUTF16(test_case.starting_names[2]));
+  // Construct the starting_profile.
+  NameInfo starting_profile;
+  starting_profile.SetRawInfo(NAME_FIRST,
+                              UTF8ToUTF16(test_case.starting_names[0]));
+  starting_profile.SetRawInfo(NAME_MIDDLE,
+                              UTF8ToUTF16(test_case.starting_names[1]));
+  starting_profile.SetRawInfo(NAME_LAST,
+                              UTF8ToUTF16(test_case.starting_names[2]));
 
-    // Construct the additional_profile.
-    NameInfo additional_profile;
-    additional_profile.SetRawInfo(NAME_FIRST,
-                                  UTF8ToUTF16(test_case.additional_names[0]));
-    additional_profile.SetRawInfo(NAME_MIDDLE,
-                                  UTF8ToUTF16(test_case.additional_names[1]));
-    additional_profile.SetRawInfo(NAME_LAST,
-                                  UTF8ToUTF16(test_case.additional_names[2]));
+  // Construct the additional_profile.
+  NameInfo additional_profile;
+  additional_profile.SetRawInfo(NAME_FIRST,
+                                UTF8ToUTF16(test_case.additional_names[0]));
+  additional_profile.SetRawInfo(NAME_MIDDLE,
+                                UTF8ToUTF16(test_case.additional_names[1]));
+  additional_profile.SetRawInfo(NAME_LAST,
+                                UTF8ToUTF16(test_case.additional_names[2]));
 
-    // Verify the test expectations.
-    EXPECT_EQ(test_case.expected_result,
-              starting_profile.ParsedNamesAreEqual(additional_profile));
-  }
+  // Verify the test expectations.
+  EXPECT_EQ(test_case.expected_result,
+            starting_profile.ParsedNamesAreEqual(additional_profile));
+}
 
-  INSTANTIATE_TEST_SUITE_P(
-      ContactInfoTest,
-      ParsedNamesAreEqualTest,
-      testing::Values(
-          // Identical name comparison.
-          ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"},
-                                      {"Marion", "Mitchell", "Morrison"},
-                                      true},
+INSTANTIATE_TEST_SUITE_P(
+    ContactInfoTest,
+    ParsedNamesAreEqualTest,
+    testing::Values(
+        // Identical name comparison.
+        ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"},
+                                    {"Marion", "Mitchell", "Morrison"},
+                                    true},
 
-          // Case-sensitive comparisons.
-          ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"},
-                                      {"Marion", "Mitchell", "MORRISON"},
-                                      false},
-          ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"},
-                                      {"MARION", "Mitchell", "MORRISON"},
-                                      false},
-          ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"},
-                                      {"MARION", "MITCHELL", "MORRISON"},
-                                      false},
-          ParsedNamesAreEqualTestCase{{"Marion", "", "Mitchell Morrison"},
-                                      {"MARION", "", "MITCHELL MORRISON"},
-                                      false},
-          ParsedNamesAreEqualTestCase{{"Marion Mitchell", "", "Morrison"},
-                                      {"MARION MITCHELL", "", "MORRISON"},
-                                      false},
+        // Case-sensitive comparisons.
+        ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"},
+                                    {"Marion", "Mitchell", "MORRISON"},
+                                    false},
+        ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"},
+                                    {"MARION", "Mitchell", "MORRISON"},
+                                    false},
+        ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"},
+                                    {"MARION", "MITCHELL", "MORRISON"},
+                                    false},
+        ParsedNamesAreEqualTestCase{{"Marion", "", "Mitchell Morrison"},
+                                    {"MARION", "", "MITCHELL MORRISON"},
+                                    false},
+        ParsedNamesAreEqualTestCase{{"Marion Mitchell", "", "Morrison"},
+                                    {"MARION MITCHELL", "", "MORRISON"},
+                                    false},
 
-          // Identical full names but different canonical forms.
-          ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"},
-                                      {"Marion", "", "Mitchell Morrison"},
-                                      false},
-          ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"},
-                                      {"Marion Mitchell", "", "MORRISON"},
-                                      false},
+        // Identical full names but different canonical forms.
+        ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"},
+                                    {"Marion", "", "Mitchell Morrison"},
+                                    false},
+        ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"},
+                                    {"Marion Mitchell", "", "MORRISON"},
+                                    false},
 
-          // Different names.
-          ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"},
-                                      {"Marion", "M.", "Morrison"},
-                                      false},
-          ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"},
-                                      {"MARION", "M.", "MORRISON"},
-                                      false},
-          ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"},
-                                      {"David", "Mitchell", "Morrison"},
-                                      false},
+        // Different names.
+        ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"},
+                                    {"Marion", "M.", "Morrison"},
+                                    false},
+        ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"},
+                                    {"MARION", "M.", "MORRISON"},
+                                    false},
+        ParsedNamesAreEqualTestCase{{"Marion", "Mitchell", "Morrison"},
+                                    {"David", "Mitchell", "Morrison"},
+                                    false},
 
-          // Non-ASCII characters.
-          ParsedNamesAreEqualTestCase{
-              {"M\xc3\xa1rion Mitchell", "", "Morrison"},
-              {"M\xc3\xa1rion Mitchell", "", "Morrison"},
-              true}));
+        // Non-ASCII characters.
+        ParsedNamesAreEqualTestCase{{"M\xc3\xa1rion Mitchell", "", "Morrison"},
+                                    {"M\xc3\xa1rion Mitchell", "", "Morrison"},
+                                    true}));
 
-  struct OverwriteNameTestCase {
-    std::string existing_name[4];
-    std::string new_name[4];
-    std::string expected_name[4];
-  };
+struct OverwriteNameTestCase {
+  std::string existing_name[4];
+  std::string new_name[4];
+  std::string expected_name[4];
+};
 
-  class OverwriteNameTest
-      : public testing::TestWithParam<OverwriteNameTestCase> {};
+class OverwriteNameTest : public testing::TestWithParam<OverwriteNameTestCase> {
+};
 
-  TEST_P(OverwriteNameTest, OverwriteName) {
-    auto test_case = GetParam();
-    // Construct the starting_profile.
-    NameInfo existing_name;
-    existing_name.SetRawInfo(NAME_FIRST,
-                             UTF8ToUTF16(test_case.existing_name[0]));
-    existing_name.SetRawInfo(NAME_MIDDLE,
-                             UTF8ToUTF16(test_case.existing_name[1]));
-    existing_name.SetRawInfo(NAME_LAST,
-                             UTF8ToUTF16(test_case.existing_name[2]));
-    existing_name.SetRawInfo(NAME_FULL,
-                             UTF8ToUTF16(test_case.existing_name[3]));
+TEST_P(OverwriteNameTest, OverwriteName) {
+  auto test_case = GetParam();
+  // Construct the starting_profile.
+  NameInfo existing_name;
+  existing_name.SetRawInfo(NAME_FIRST, UTF8ToUTF16(test_case.existing_name[0]));
+  existing_name.SetRawInfo(NAME_MIDDLE,
+                           UTF8ToUTF16(test_case.existing_name[1]));
+  existing_name.SetRawInfo(NAME_LAST, UTF8ToUTF16(test_case.existing_name[2]));
+  existing_name.SetRawInfo(NAME_FULL, UTF8ToUTF16(test_case.existing_name[3]));
 
-    // Construct the additional_profile.
-    NameInfo new_name;
-    new_name.SetRawInfo(NAME_FIRST, UTF8ToUTF16(test_case.new_name[0]));
-    new_name.SetRawInfo(NAME_MIDDLE, UTF8ToUTF16(test_case.new_name[1]));
-    new_name.SetRawInfo(NAME_LAST, UTF8ToUTF16(test_case.new_name[2]));
-    new_name.SetRawInfo(NAME_FULL, UTF8ToUTF16(test_case.new_name[3]));
+  // Construct the additional_profile.
+  NameInfo new_name;
+  new_name.SetRawInfo(NAME_FIRST, UTF8ToUTF16(test_case.new_name[0]));
+  new_name.SetRawInfo(NAME_MIDDLE, UTF8ToUTF16(test_case.new_name[1]));
+  new_name.SetRawInfo(NAME_LAST, UTF8ToUTF16(test_case.new_name[2]));
+  new_name.SetRawInfo(NAME_FULL, UTF8ToUTF16(test_case.new_name[3]));
 
-    existing_name.OverwriteName(new_name);
+  existing_name.OverwriteName(new_name);
 
-    // Verify the test expectations.
-    EXPECT_EQ(UTF8ToUTF16(test_case.expected_name[0]),
-              existing_name.GetRawInfo(NAME_FIRST));
-    EXPECT_EQ(UTF8ToUTF16(test_case.expected_name[1]),
-              existing_name.GetRawInfo(NAME_MIDDLE));
-    EXPECT_EQ(UTF8ToUTF16(test_case.expected_name[2]),
-              existing_name.GetRawInfo(NAME_LAST));
-    EXPECT_EQ(UTF8ToUTF16(test_case.expected_name[3]),
-              existing_name.GetRawInfo(NAME_FULL));
+  // Verify the test expectations.
+  EXPECT_EQ(UTF8ToUTF16(test_case.expected_name[0]),
+            existing_name.GetRawInfo(NAME_FIRST));
+  EXPECT_EQ(UTF8ToUTF16(test_case.expected_name[1]),
+            existing_name.GetRawInfo(NAME_MIDDLE));
+  EXPECT_EQ(UTF8ToUTF16(test_case.expected_name[2]),
+            existing_name.GetRawInfo(NAME_LAST));
+  EXPECT_EQ(UTF8ToUTF16(test_case.expected_name[3]),
+            existing_name.GetRawInfo(NAME_FULL));
 }
 
 INSTANTIATE_TEST_SUITE_P(
@@ -372,22 +368,22 @@
   std::string last;
   std::string full;
   bool expected_result;
-  };
+};
 
-  class NamePartsAreEmptyTest
-      : public testing::TestWithParam<NamePartsAreEmptyTestCase> {};
+class NamePartsAreEmptyTest
+    : public testing::TestWithParam<NamePartsAreEmptyTestCase> {};
 
-  TEST_P(NamePartsAreEmptyTest, NamePartsAreEmpty) {
-    auto test_case = GetParam();
-    // Construct the NameInfo.
-    NameInfo name;
-    name.SetRawInfo(NAME_FIRST, UTF8ToUTF16(test_case.first));
-    name.SetRawInfo(NAME_MIDDLE, UTF8ToUTF16(test_case.middle));
-    name.SetRawInfo(NAME_LAST, UTF8ToUTF16(test_case.last));
-    name.SetRawInfo(NAME_FULL, UTF8ToUTF16(test_case.full));
+TEST_P(NamePartsAreEmptyTest, NamePartsAreEmpty) {
+  auto test_case = GetParam();
+  // Construct the NameInfo.
+  NameInfo name;
+  name.SetRawInfo(NAME_FIRST, UTF8ToUTF16(test_case.first));
+  name.SetRawInfo(NAME_MIDDLE, UTF8ToUTF16(test_case.middle));
+  name.SetRawInfo(NAME_LAST, UTF8ToUTF16(test_case.last));
+  name.SetRawInfo(NAME_FULL, UTF8ToUTF16(test_case.full));
 
-    // Verify the test expectations.
-    EXPECT_EQ(test_case.expected_result, name.NamePartsAreEmpty());
+  // Verify the test expectations.
+  EXPECT_EQ(test_case.expected_result, name.NamePartsAreEmpty());
 }
 
 INSTANTIATE_TEST_SUITE_P(
diff --git a/components/autofill/core/browser/credit_card.cc b/components/autofill/core/browser/data_model/credit_card.cc
similarity index 98%
rename from components/autofill/core/browser/credit_card.cc
rename to components/autofill/core/browser/data_model/credit_card.cc
index 5d0273d..4235a1b0 100644
--- a/components/autofill/core/browser/credit_card.cc
+++ b/components/autofill/core/browser/data_model/credit_card.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 "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 
 #include <stddef.h>
 #include <stdint.h>
@@ -29,9 +29,9 @@
 #include "build/build_config.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
 #include "components/autofill/core/browser/autofill_field.h"
-#include "components/autofill/core/browser/autofill_metadata.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
 #include "components/autofill/core/browser/autofill_type.h"
+#include "components/autofill/core/browser/data_model/autofill_metadata.h"
 #include "components/autofill/core/browser/validation.h"
 #include "components/autofill/core/common/autofill_clock.h"
 #include "components/autofill/core/common/autofill_constants.h"
@@ -391,8 +391,7 @@
   }
 }
 
-void CreditCard::SetRawInfo(ServerFieldType type,
-                            const base::string16& value) {
+void CreditCard::SetRawInfo(ServerFieldType type, const base::string16& value) {
   DCHECK_EQ(CREDIT_CARD, AutofillType(type).group());
   switch (type) {
     case CREDIT_CARD_NAME_FULL:
@@ -472,8 +471,7 @@
   }
 
   int month;
-  if (ConvertMonth(text, app_locale, &month) &&
-      month == expiration_month_) {
+  if (ConvertMonth(text, app_locale, &month) && month == expiration_month_) {
     matching_types->insert(CREDIT_CARD_EXP_MONTH);
   }
 }
@@ -549,7 +547,7 @@
 bool CreditCard::UpdateFromImportedCard(const CreditCard& imported_card,
                                         const std::string& app_locale) {
   if (this->GetInfo(AutofillType(CREDIT_CARD_NUMBER), app_locale) !=
-          imported_card.GetInfo(AutofillType(CREDIT_CARD_NUMBER), app_locale)) {
+      imported_card.GetInfo(AutofillType(CREDIT_CARD_NUMBER), app_locale)) {
     return false;
   }
 
diff --git a/components/autofill/core/browser/credit_card.h b/components/autofill/core/browser/data_model/credit_card.h
similarity index 97%
rename from components/autofill/core/browser/credit_card.h
rename to components/autofill/core/browser/data_model/credit_card.h
index 397ac1bd..0a4c3d6 100644
--- a/components/autofill/core/browser/credit_card.h
+++ b/components/autofill/core/browser/data_model/credit_card.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 COMPONENTS_AUTOFILL_CORE_BROWSER_CREDIT_CARD_H_
-#define COMPONENTS_AUTOFILL_CORE_BROWSER_CREDIT_CARD_H_
+#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_CREDIT_CARD_H_
+#define COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_CREDIT_CARD_H_
 
 #include <iosfwd>
 #include <string>
@@ -15,7 +15,7 @@
 #include "base/strings/string16.h"
 #include "base/strings/string_piece_forward.h"
 #include "build/build_config.h"
-#include "components/autofill/core/browser/autofill_data_model.h"
+#include "components/autofill/core/browser/data_model/autofill_data_model.h"
 
 namespace autofill {
 
@@ -370,4 +370,4 @@
 
 }  // namespace autofill
 
-#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_CREDIT_CARD_H_
+#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_CREDIT_CARD_H_
diff --git a/components/autofill/core/browser/credit_card_unittest.cc b/components/autofill/core/browser/data_model/credit_card_unittest.cc
similarity index 97%
rename from components/autofill/core/browser/credit_card_unittest.cc
rename to components/autofill/core/browser/data_model/credit_card_unittest.cc
index 71153c6..0841bf5 100644
--- a/components/autofill/core/browser/credit_card_unittest.cc
+++ b/components/autofill/core/browser/data_model/credit_card_unittest.cc
@@ -12,10 +12,10 @@
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "components/autofill/core/browser/autofill_experiments.h"
-#include "components/autofill/core/browser/autofill_metadata.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/autofill_type.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_metadata.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/test_autofill_clock.h"
 #include "components/autofill/core/browser/validation.h"
 #include "components/autofill/core/common/autofill_clock.h"
@@ -37,35 +37,23 @@
 
 namespace {
 
-// From https://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_numbers.htm
+// From
+// https://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_numbers.htm
 const char* const kValidNumbers[] = {
-  "378282246310005",
-  "3714 4963 5398 431",
-  "3787-3449-3671-000",
-  "5610591081018250",
-  "3056 9309 0259 04",
-  "3852-0000-0232-37",
-  "6011111111111117",
-  "6011 0009 9013 9424",
-  "3530-1113-3330-0000",
-  "3566002020360505",
-  "5555 5555 5555 4444",
-  "5105-1051-0510-5100",
-  "4111111111111111",
-  "4012 8888 8888 1881",
-  "4222-2222-2222-2",
-  "5019717010103742",
-  "6331101999990016",
-  "6247130048162403",
-  "4532261615476013542",
-  "6362970000457013",
+    "378282246310005",     "3714 4963 5398 431",  "3787-3449-3671-000",
+    "5610591081018250",    "3056 9309 0259 04",   "3852-0000-0232-37",
+    "6011111111111117",    "6011 0009 9013 9424", "3530-1113-3330-0000",
+    "3566002020360505",    "5555 5555 5555 4444", "5105-1051-0510-5100",
+    "4111111111111111",    "4012 8888 8888 1881", "4222-2222-2222-2",
+    "5019717010103742",    "6331101999990016",    "6247130048162403",
+    "4532261615476013542", "6362970000457013",
 };
 
 const char* const kInvalidNumbers[] = {
-  "4111 1111 112", /* too short */
-  "41111111111111111115", /* too long */
-  "4111-1111-1111-1110", /* wrong Luhn checksum */
-  "3056 9309 0259 04aa", /* non-digit characters */
+    "4111 1111 112",        /* too short */
+    "41111111111111111115", /* too long */
+    "4111-1111-1111-1110",  /* wrong Luhn checksum */
+    "3056 9309 0259 04aa",  /* non-digit characters */
 };
 
 }  // namespace
@@ -694,22 +682,16 @@
 TEST(CreditCardTest, IconResourceId) {
   EXPECT_EQ(IDR_AUTOFILL_CC_AMEX,
             CreditCard::IconResourceId(kAmericanExpressCard));
-  EXPECT_EQ(IDR_AUTOFILL_CC_DINERS,
-            CreditCard::IconResourceId(kDinersCard));
+  EXPECT_EQ(IDR_AUTOFILL_CC_DINERS, CreditCard::IconResourceId(kDinersCard));
   EXPECT_EQ(IDR_AUTOFILL_CC_DISCOVER,
             CreditCard::IconResourceId(kDiscoverCard));
-  EXPECT_EQ(IDR_AUTOFILL_CC_ELO,
-            CreditCard::IconResourceId(kEloCard));
-  EXPECT_EQ(IDR_AUTOFILL_CC_JCB,
-            CreditCard::IconResourceId(kJCBCard));
+  EXPECT_EQ(IDR_AUTOFILL_CC_ELO, CreditCard::IconResourceId(kEloCard));
+  EXPECT_EQ(IDR_AUTOFILL_CC_JCB, CreditCard::IconResourceId(kJCBCard));
   EXPECT_EQ(IDR_AUTOFILL_CC_MASTERCARD,
             CreditCard::IconResourceId(kMasterCard));
-  EXPECT_EQ(IDR_AUTOFILL_CC_MIR,
-            CreditCard::IconResourceId(kMirCard));
-  EXPECT_EQ(IDR_AUTOFILL_CC_UNIONPAY,
-            CreditCard::IconResourceId(kUnionPay));
-  EXPECT_EQ(IDR_AUTOFILL_CC_VISA,
-            CreditCard::IconResourceId(kVisaCard));
+  EXPECT_EQ(IDR_AUTOFILL_CC_MIR, CreditCard::IconResourceId(kMirCard));
+  EXPECT_EQ(IDR_AUTOFILL_CC_UNIONPAY, CreditCard::IconResourceId(kUnionPay));
+  EXPECT_EQ(IDR_AUTOFILL_CC_VISA, CreditCard::IconResourceId(kVisaCard));
 }
 
 TEST(CreditCardTest, UpdateFromImportedCard_UpdatedWithNameAndExpirationDate) {
@@ -1078,18 +1060,18 @@
   EXPECT_EQ(ASCIIToUTF16("07"), card.GetRawInfo(CREDIT_CARD_EXP_MONTH));
   EXPECT_EQ(7, card.expiration_month());
 
-  card.SetInfo(
-      AutofillType(CREDIT_CARD_EXP_MONTH), ASCIIToUTF16("January"), "en-US");
+  card.SetInfo(AutofillType(CREDIT_CARD_EXP_MONTH), ASCIIToUTF16("January"),
+               "en-US");
   EXPECT_EQ(ASCIIToUTF16("01"), card.GetRawInfo(CREDIT_CARD_EXP_MONTH));
   EXPECT_EQ(1, card.expiration_month());
 
-  card.SetInfo(
-      AutofillType(CREDIT_CARD_EXP_MONTH), ASCIIToUTF16("Apr"), "en-US");
+  card.SetInfo(AutofillType(CREDIT_CARD_EXP_MONTH), ASCIIToUTF16("Apr"),
+               "en-US");
   EXPECT_EQ(ASCIIToUTF16("04"), card.GetRawInfo(CREDIT_CARD_EXP_MONTH));
   EXPECT_EQ(4, card.expiration_month());
 
-  card.SetInfo(AutofillType(CREDIT_CARD_EXP_MONTH),
-               UTF8ToUTF16("FÉVRIER"), "fr-FR");
+  card.SetInfo(AutofillType(CREDIT_CARD_EXP_MONTH), UTF8ToUTF16("FÉVRIER"),
+               "fr-FR");
   EXPECT_EQ(ASCIIToUTF16("02"), card.GetRawInfo(CREDIT_CARD_EXP_MONTH));
   EXPECT_EQ(2, card.expiration_month());
 }
diff --git a/components/autofill/core/browser/form_group.cc b/components/autofill/core/browser/data_model/form_group.cc
similarity index 92%
rename from components/autofill/core/browser/form_group.cc
rename to components/autofill/core/browser/data_model/form_group.cc
index 4645c24..e6f500b 100644
--- a/components/autofill/core/browser/form_group.cc
+++ b/components/autofill/core/browser/data_model/form_group.cc
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "components/autofill/core/browser/form_group.h"
+#include "components/autofill/core/browser/data_model/form_group.h"
 
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/autofill_profile_comparator.h"
 #include "components/autofill/core/browser/autofill_type.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile_comparator.h"
 #include "components/autofill/core/common/autofill_l10n_util.h"
 
 namespace autofill {
diff --git a/components/autofill/core/browser/form_group.h b/components/autofill/core/browser/data_model/form_group.h
similarity index 94%
rename from components/autofill/core/browser/form_group.h
rename to components/autofill/core/browser/data_model/form_group.h
index b4f75500..290d7bb 100644
--- a/components/autofill/core/browser/form_group.h
+++ b/components/autofill/core/browser/data_model/form_group.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 COMPONENTS_AUTOFILL_CORE_BROWSER_FORM_GROUP_H_
-#define COMPONENTS_AUTOFILL_CORE_BROWSER_FORM_GROUP_H_
+#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_FORM_GROUP_H_
+#define COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_FORM_GROUP_H_
 
 #include <string>
 
@@ -89,4 +89,4 @@
 
 }  // namespace autofill
 
-#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_FORM_GROUP_H_
+#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_FORM_GROUP_H_
diff --git a/components/autofill/core/browser/phone_number.cc b/components/autofill/core/browser/data_model/phone_number.cc
similarity index 98%
rename from components/autofill/core/browser/phone_number.cc
rename to components/autofill/core/browser/data_model/phone_number.cc
index 7498365f..de9cf70 100644
--- a/components/autofill/core/browser/phone_number.cc
+++ b/components/autofill/core/browser/data_model/phone_number.cc
@@ -2,14 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "components/autofill/core/browser/phone_number.h"
+#include "components/autofill/core/browser/data_model/phone_number.h"
 
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_country.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_type.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/phone_number_i18n.h"
 
diff --git a/components/autofill/core/browser/phone_number.h b/components/autofill/core/browser/data_model/phone_number.h
similarity index 92%
rename from components/autofill/core/browser/phone_number.h
rename to components/autofill/core/browser/data_model/phone_number.h
index ab350f3..f2c96bc 100644
--- a/components/autofill/core/browser/phone_number.h
+++ b/components/autofill/core/browser/data_model/phone_number.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 COMPONENTS_AUTOFILL_CORE_BROWSER_PHONE_NUMBER_H_
-#define COMPONENTS_AUTOFILL_CORE_BROWSER_PHONE_NUMBER_H_
+#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_PHONE_NUMBER_H_
+#define COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_PHONE_NUMBER_H_
 
 #include <stddef.h>
 
@@ -11,7 +11,7 @@
 #include <vector>
 
 #include "base/strings/string16.h"
-#include "components/autofill/core/browser/form_group.h"
+#include "components/autofill/core/browser/data_model/form_group.h"
 #include "components/autofill/core/browser/phone_number_i18n.h"
 
 namespace autofill {
@@ -96,4 +96,4 @@
 
 }  // namespace autofill
 
-#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_PHONE_NUMBER_H_
+#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_PHONE_NUMBER_H_
diff --git a/components/autofill/core/browser/phone_number_unittest.cc b/components/autofill/core/browser/data_model/phone_number_unittest.cc
similarity index 98%
rename from components/autofill/core/browser/phone_number_unittest.cc
rename to components/autofill/core/browser/data_model/phone_number_unittest.cc
index 806f5e5c..0d1a665 100644
--- a/components/autofill/core/browser/phone_number_unittest.cc
+++ b/components/autofill/core/browser/data_model/phone_number_unittest.cc
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "components/autofill/core/browser/phone_number.h"
+#include "components/autofill/core/browser/data_model/phone_number.h"
 
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_type.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/phone_number_i18n.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/autofill/core/browser/test_data_creator.cc b/components/autofill/core/browser/data_model/test_data_creator.cc
similarity index 94%
rename from components/autofill/core/browser/test_data_creator.cc
rename to components/autofill/core/browser/data_model/test_data_creator.cc
index 5ef8892..41bdcd75 100644
--- a/components/autofill/core/browser/test_data_creator.cc
+++ b/components/autofill/core/browser/data_model/test_data_creator.cc
@@ -2,12 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "components/autofill/core/browser/test_data_creator.h"
+#include "components/autofill/core/browser/data_model/test_data_creator.h"
+
+#include <inttypes.h>
 
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/common/autofill_clock.h"
 #include "components/autofill/core/common/autofill_features.h"
 
@@ -106,7 +108,8 @@
   profile.SetInfo(NAME_FULL, base::UTF8ToUTF16("Polly Disused"), app_locale_);
   profile.SetInfo(COMPANY_NAME,
                   base::UTF8ToUTF16(base::StringPrintf(
-                      "%lld Inc.", static_cast<long long>(use_date.ToTimeT()))),
+                      "%" PRIu64 " Inc.",
+                      use_date.ToDeltaSinceWindowsEpoch().InMicroseconds())),
                   app_locale_);
   profile.SetInfo(EMAIL_ADDRESS,
                   base::UTF8ToUTF16("polly.disused@fake.chromium.org"),
@@ -131,7 +134,8 @@
   profile.SetInfo(NAME_FULL, base::UTF8ToUTF16("Polly Deletable"), app_locale_);
   profile.SetInfo(COMPANY_NAME,
                   base::UTF8ToUTF16(base::StringPrintf(
-                      "%lld Inc.", static_cast<long long>(use_date.ToTimeT()))),
+                      "%" PRIu64 " Inc.",
+                      use_date.ToDeltaSinceWindowsEpoch().InMicroseconds())),
                   app_locale_);
   profile.SetInfo(EMAIL_ADDRESS,
                   base::UTF8ToUTF16("polly.deletable@fake.chromium.org"),
diff --git a/components/autofill/core/browser/test_data_creator.h b/components/autofill/core/browser/data_model/test_data_creator.h
similarity index 78%
rename from components/autofill/core/browser/test_data_creator.h
rename to components/autofill/core/browser/data_model/test_data_creator.h
index 5a34c16..bdbfed3 100644
--- a/components/autofill/core/browser/test_data_creator.h
+++ b/components/autofill/core/browser/data_model/test_data_creator.h
@@ -2,15 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_TEST_DATA_CREATOR_H_
-#define COMPONENTS_AUTOFILL_CORE_BROWSER_TEST_DATA_CREATOR_H_
+#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_TEST_DATA_CREATOR_H_
+#define COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_TEST_DATA_CREATOR_H_
 
 #include <string>
 #include <vector>
 
 #include "base/callback.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 
 namespace autofill {
 
@@ -49,4 +49,4 @@
 
 }  // namespace autofill
 
-#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_TEST_DATA_CREATOR_H_
\ No newline at end of file
+#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_DATA_MODEL_TEST_DATA_CREATOR_H_
\ No newline at end of file
diff --git a/components/autofill/core/browser/field_filler.cc b/components/autofill/core/browser/field_filler.cc
index 736b6684b..eeaecde 100644
--- a/components/autofill/core/browser/field_filler.cc
+++ b/components/autofill/core/browser/field_filler.cc
@@ -15,15 +15,15 @@
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/address_normalizer.h"
 #include "components/autofill/core/browser/autofill_country.h"
-#include "components/autofill/core/browser/autofill_data_model.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
 #include "components/autofill/core/browser/autofill_field.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_type.h"
 #include "components/autofill/core/browser/country_names.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_data_model.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
+#include "components/autofill/core/browser/data_model/phone_number.h"
 #include "components/autofill/core/browser/field_types.h"
-#include "components/autofill/core/browser/phone_number.h"
 #include "components/autofill/core/browser/state_names.h"
 #include "components/autofill/core/common/autofill_features.h"
 #include "components/autofill/core/common/autofill_l10n_util.h"
diff --git a/components/autofill/core/browser/field_filler_unittest.cc b/components/autofill/core/browser/field_filler_unittest.cc
index 82728e71..11f7630 100644
--- a/components/autofill/core/browser/field_filler_unittest.cc
+++ b/components/autofill/core/browser/field_filler_unittest.cc
@@ -20,11 +20,11 @@
 #include "components/autofill/core/browser/address_normalizer.h"
 #include "components/autofill/core/browser/address_normalizer_impl.h"
 #include "components/autofill/core/browser/autofill_field.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/autofill_type.h"
 #include "components/autofill/core/browser/country_names.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/common/autofill_features.h"
 #include "components/autofill/core/common/autofill_util.h"
diff --git a/components/autofill/core/browser/form_data_importer.cc b/components/autofill/core/browser/form_data_importer.cc
index 93a16220..c66aae3 100644
--- a/components/autofill/core/browser/form_data_importer.cc
+++ b/components/autofill/core/browser/form_data_importer.cc
@@ -22,12 +22,12 @@
 #include "components/autofill/core/browser/autofill_client.h"
 #include "components/autofill/core/browser/autofill_country.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_type.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
+#include "components/autofill/core/browser/data_model/phone_number.h"
 #include "components/autofill/core/browser/form_structure.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
-#include "components/autofill/core/browser/phone_number.h"
 #include "components/autofill/core/browser/phone_number_i18n.h"
 #include "components/autofill/core/browser/validation.h"
 #include "components/autofill/core/common/autofill_features.h"
diff --git a/components/autofill/core/browser/form_data_importer_unittest.cc b/components/autofill/core/browser/form_data_importer_unittest.cc
index e1d3e18b..b599a485 100644
--- a/components/autofill/core/browser/form_data_importer_unittest.cc
+++ b/components/autofill/core/browser/form_data_importer_unittest.cc
@@ -27,9 +27,9 @@
 #include "build/build_config.h"
 #include "components/autofill/core/browser/autofill_experiments.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/form_structure.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/personal_data_manager_observer.h"
diff --git a/components/autofill/core/browser/form_parsing/phone_field.h b/components/autofill/core/browser/form_parsing/phone_field.h
index 9df792b..59f3380 100644
--- a/components/autofill/core/browser/form_parsing/phone_field.h
+++ b/components/autofill/core/browser/form_parsing/phone_field.h
@@ -14,8 +14,8 @@
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
 #include "components/autofill/core/browser/autofill_type.h"
+#include "components/autofill/core/browser/data_model/phone_number.h"
 #include "components/autofill/core/browser/form_parsing/form_field.h"
-#include "components/autofill/core/browser/phone_number.h"
 
 namespace autofill {
 
diff --git a/components/autofill/core/browser/label_formatter.h b/components/autofill/core/browser/label_formatter.h
index 48172fcb..759837e 100644
--- a/components/autofill/core/browser/label_formatter.h
+++ b/components/autofill/core/browser/label_formatter.h
@@ -10,7 +10,7 @@
 #include <vector>
 
 #include "base/strings/string16.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 
 namespace autofill {
diff --git a/components/autofill/core/browser/label_formatter_unittest.cc b/components/autofill/core/browser/label_formatter_unittest.cc
index fc66da06..ee933db 100644
--- a/components/autofill/core/browser/label_formatter_unittest.cc
+++ b/components/autofill/core/browser/label_formatter_unittest.cc
@@ -6,7 +6,7 @@
 
 #include <vector>
 
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/components/autofill/core/browser/label_formatter_utils.cc b/components/autofill/core/browser/label_formatter_utils.cc
index d51212b..bf559d5b2 100644
--- a/components/autofill/core/browser/label_formatter_utils.cc
+++ b/components/autofill/core/browser/label_formatter_utils.cc
@@ -8,6 +8,8 @@
 #include <iterator>
 #include <memory>
 
+#include "base/bind.h"
+#include "base/callback.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/address_i18n.h"
@@ -21,6 +23,38 @@
 #include "ui/base/l10n/l10n_util.h"
 
 namespace autofill {
+namespace {
+
+// Returns true if all |profiles| have the same value for the data retrieved by
+// |get_data|.
+bool HaveSameData(
+    const std::vector<AutofillProfile*>& profiles,
+    const std::string& app_locale,
+    base::RepeatingCallback<base::string16(const AutofillProfile&,
+                                           const std::string&)> get_data,
+    base::RepeatingCallback<bool(const base::string16& str1,
+                                 const base::string16& str2)> matches) {
+  if (profiles.size() <= 1) {
+    return true;
+  }
+
+  const base::string16 first_profile_data =
+      get_data.Run(*profiles[0], app_locale);
+  for (size_t i = 1; i < profiles.size(); ++i) {
+    const base::string16 current_profile_data =
+        get_data.Run(*profiles[i], app_locale);
+    if (!matches.Run(first_profile_data, current_profile_data)) {
+      return false;
+    }
+  }
+  return true;
+}
+
+bool Equals(const base::string16& str1, const base::string16& str2) {
+  return str1 == str2;
+}
+
+}  // namespace
 
 const int kStreetAddressFieldTypes[] = {
     ADDRESS_HOME_LINE1,          ADDRESS_HOME_LINE2,
@@ -126,11 +160,6 @@
   return trimmed_profile;
 }
 
-base::string16 GetLabelName(const AutofillProfile& profile,
-                            const std::string& app_locale) {
-  return profile.GetInfo(AutofillType(NAME_FULL), app_locale);
-}
-
 base::string16 GetLabelForFocusedAddress(
     ServerFieldType focused_field_type,
     bool form_has_street_address,
@@ -197,6 +226,16 @@
   return ConstructLabelLine(label_parts);
 }
 
+base::string16 GetLabelFullName(const AutofillProfile& profile,
+                                const std::string& app_locale) {
+  return profile.GetInfo(AutofillType(NAME_FULL), app_locale);
+}
+
+base::string16 GetLabelFirstName(const AutofillProfile& profile,
+                                 const std::string& app_locale) {
+  return profile.GetInfo(AutofillType(NAME_FIRST), app_locale);
+}
+
 base::string16 GetLabelEmail(const AutofillProfile& profile,
                              const std::string& app_locale) {
   const base::string16 email =
@@ -217,46 +256,35 @@
 
 bool HaveSameEmailAddresses(const std::vector<AutofillProfile*>& profiles,
                             const std::string& app_locale) {
-  bool first_email_found = false;
-  base::string16 first_email;
+  return HaveSameData(profiles, app_locale, base::BindRepeating(&GetLabelEmail),
+                      base::BindRepeating(&Equals));
+}
 
-  for (const AutofillProfile* profile : profiles) {
-    base::string16 email_from_profile = GetLabelEmail(*profile, app_locale);
-
-    if (!first_email_found) {
-      // Store the first email address whether it's empty or not because we
-      // consider "" and "hao.le@aol.com" to be different email addresses.
-      first_email_found = true;
-      first_email = email_from_profile;
-    } else if (email_from_profile != first_email) {
-      return false;
-    }
-  }
-  return true;
+bool HaveSameFirstNames(const std::vector<AutofillProfile*>& profiles,
+                        const std::string& app_locale) {
+  return HaveSameData(profiles, app_locale,
+                      base::BindRepeating(&GetLabelFirstName),
+                      base::BindRepeating(&Equals));
 }
 
 bool HaveSamePhoneNumbers(const std::vector<AutofillProfile*>& profiles,
                           const std::string& app_locale) {
-  bool first_phone_found = false;
-  base::string16 first_phone;
+  // Note that the same country code is used in all comparisons.
+  auto equals = [](const std::string& country_code,
+                   const std::string& app_locale, const base::string16& phone1,
+                   const base::string16& phone2) -> bool {
+    return (phone1.empty() && phone2.empty()) ||
+           i18n::PhoneNumbersMatch(phone1, phone2, country_code, app_locale);
+  };
 
-  for (const AutofillProfile* profile : profiles) {
-    base::string16 phone_from_profile = GetLabelPhone(*profile, app_locale);
-
-    if (!first_phone_found) {
-      // Store the first phone number whether it's empty or not because we
-      // consider "" and "(514) 873-1100" to be different phone numbers.
-      first_phone_found = true;
-      first_phone = phone_from_profile;
-    } else if (!(first_phone.empty() && phone_from_profile.empty()) &&
-               !i18n::PhoneNumbersMatch(first_phone, phone_from_profile,
-                                        base::UTF16ToASCII(profile->GetInfo(
-                                            ADDRESS_HOME_COUNTRY, app_locale)),
-                                        app_locale)) {
-      return false;
-    }
-  }
-  return true;
+  return profiles.size() <= 1
+             ? true
+             : HaveSameData(
+                   profiles, app_locale, base::BindRepeating(&GetLabelPhone),
+                   base::BindRepeating(equals,
+                                       base::UTF16ToASCII(profiles[0]->GetInfo(
+                                           ADDRESS_HOME_COUNTRY, app_locale)),
+                                       app_locale));
 }
 
 }  // namespace autofill
diff --git a/components/autofill/core/browser/label_formatter_utils.h b/components/autofill/core/browser/label_formatter_utils.h
index 4232d74..e4e5c007 100644
--- a/components/autofill/core/browser/label_formatter_utils.h
+++ b/components/autofill/core/browser/label_formatter_utils.h
@@ -10,7 +10,7 @@
 #include <vector>
 
 #include "base/strings/string16.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 
 namespace autofill {
@@ -64,10 +64,6 @@
                                    const std::string& app_locale,
                                    const std::vector<ServerFieldType>& types);
 
-// Returns the full name associated with |profile|.
-base::string16 GetLabelName(const AutofillProfile& profile,
-                            const std::string& app_locale);
-
 // Returns either street-address data or non-street-address data found in
 // |profile|. If |focused_field_type| is a street address field, then returns
 // non-street-address data, e.g. Lowell, MA 01852.
@@ -122,6 +118,16 @@
     const std::vector<ServerFieldType>& types,
     const base::string16& contact_info);
 
+// Returns the full name associated with |profile|, if any; otherwise, returns
+// an empty string.
+base::string16 GetLabelFullName(const AutofillProfile& profile,
+                                const std::string& app_locale);
+
+// Returns the first name associated with |profile|, if any; otherwise, returns
+// an empty string.
+base::string16 GetLabelFirstName(const AutofillProfile& profile,
+                                 const std::string& app_locale);
+
 // Returns the email address associated with |profile|, if any; otherwise,
 // returns an empty string.
 base::string16 GetLabelEmail(const AutofillProfile& profile,
@@ -139,12 +145,17 @@
 bool HaveSameEmailAddresses(const std::vector<AutofillProfile*>& profiles,
                             const std::string& app_locale);
 
+// Returns true if all |profiles| have the same first name. Note that names are
+// compared without normalization, so José and Jose are considered different
+// names.
+bool HaveSameFirstNames(const std::vector<AutofillProfile*>& profiles,
+                        const std::string& app_locale);
+
 // Returns true if all |profiles| have the same phone number after
 // normalization. Note that the absence of a phone number and an actual phone
 // number, e.g. (401) 847-8720, are considered different phone numbers.
 bool HaveSamePhoneNumbers(const std::vector<AutofillProfile*>& profiles,
                           const std::string& app_locale);
-
 }  // namespace autofill
 
 #endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_LABEL_FORMATTER_UTILS_H_
diff --git a/components/autofill/core/browser/label_formatter_utils_unittest.cc b/components/autofill/core/browser/label_formatter_utils_unittest.cc
index 308e943..e3b0e63 100644
--- a/components/autofill/core/browser/label_formatter_utils_unittest.cc
+++ b/components/autofill/core/browser/label_formatter_utils_unittest.cc
@@ -4,13 +4,14 @@
 
 #include "components/autofill/core/browser/label_formatter_utils.h"
 
+#include "base/bind.h"
 #include "base/guid.h"
 #include "base/strings/string16.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/grit/components_scaled_resources.h"
 #include "components/strings/grit/components_strings.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -19,24 +20,73 @@
 namespace autofill {
 namespace {
 
-TEST(LabelFormatterUtilsTest, ConstructLabelLine) {
-  EXPECT_EQ(base::string16(), ConstructLabelLine({}));
+TEST(LabelFormatterUtilsTest, HaveSameFirstNames_OneProfileAndNoFirstName) {
+  AutofillProfile profile =
+      AutofillProfile(base::GenerateGUID(), test::kEmptyOrigin);
+  test::SetProfileInfo(&profile, "", "", "", "", "", "", "", "", "", "", "DE",
+                       "");
+  EXPECT_TRUE(HaveSameFirstNames({&profile}, "de"));
+}
 
-  base::string16 name = base::ASCIIToUTF16("Blaise Pascal");
-  base::string16 phone = base::ASCIIToUTF16("01 53 01 82 00");
-  base::string16 email = base::ASCIIToUTF16("b.pascal@orange.fr");
+TEST(LabelFormatterUtilsTest, HaveSameFirstNames_OneProfileAndFirstName) {
+  AutofillProfile profile =
+      AutofillProfile(base::GenerateGUID(), test::kEmptyOrigin);
+  test::SetProfileInfo(&profile, "Maria", "", "", "", "", "", "", "", "", "",
+                       "DE", "");
+  EXPECT_TRUE(HaveSameFirstNames({&profile}, "de"));
+}
 
-  base::string16 separator =
-      l10n_util::GetStringUTF16(IDS_AUTOFILL_SUGGESTION_LABEL_SEPARATOR);
+TEST(LabelFormatterUtilsTest, HaveSameFirstNames_NoFirstNames) {
+  AutofillProfile profile1 =
+      AutofillProfile(base::GenerateGUID(), test::kEmptyOrigin);
+  test::SetProfileInfo(&profile1, "", "", "Kirch", "", "", "", "", "", "", "",
+                       "DE", "");
+  AutofillProfile profile2 =
+      AutofillProfile(base::GenerateGUID(), test::kEmptyOrigin);
+  test::SetProfileInfo(&profile2, "", "", "Winckelmann", "", "", "", "", "", "",
+                       "", "DE", "");
+  EXPECT_TRUE(HaveSameFirstNames({&profile1, &profile2}, "de"));
+}
 
-  EXPECT_EQ(name, ConstructLabelLine({name}));
-  EXPECT_EQ(base::JoinString({name, separator, phone, separator, email},
-                             base::string16()),
-            ConstructLabelLine({name, phone, email}));
+TEST(LabelFormatterUtilsTest, HaveSameFirstNames_SameFirstNames) {
+  AutofillProfile profile1 =
+      AutofillProfile(base::GenerateGUID(), test::kEmptyOrigin);
+  test::SetProfileInfo(&profile1, "Maria", "", "Kirch", "", "", "", "", "", "",
+                       "", "DE", "");
+  AutofillProfile profile2 =
+      AutofillProfile(base::GenerateGUID(), test::kEmptyOrigin);
+  test::SetProfileInfo(&profile2, "Maria", "", "Winckelmann", "", "", "", "",
+                       "", "", "", "DE", "");
+  EXPECT_TRUE(HaveSameFirstNames({&profile1, &profile2}, "de"));
+}
+
+TEST(LabelFormatterUtilsTest, HaveSameFirstNames_DifferentNonEmptyFirstNames) {
+  AutofillProfile profile1 =
+      AutofillProfile(base::GenerateGUID(), test::kEmptyOrigin);
+  test::SetProfileInfo(&profile1, "Maria", "", "Kirch", "", "", "", "", "", "",
+                       "", "DE", "");
+  AutofillProfile profile2 =
+      AutofillProfile(base::GenerateGUID(), test::kEmptyOrigin);
+  test::SetProfileInfo(&profile2, "Mary", "", "Kirch", "", "", "", "", "", "",
+                       "", "DE", "");
+  EXPECT_FALSE(HaveSameFirstNames({&profile1, &profile2}, "de"));
+}
+
+TEST(LabelFormatterUtilsTest, HaveSameFirstNames_NonEmptyAndEmptyFirstNames) {
+  AutofillProfile profile1 =
+      AutofillProfile(base::GenerateGUID(), test::kEmptyOrigin);
+  test::SetProfileInfo(&profile1, "Maria", "Margaretha", "Kirch", "", "", "",
+                       "", "", "", "", "DE", "");
+  AutofillProfile profile2 =
+      AutofillProfile(base::GenerateGUID(), test::kEmptyOrigin);
+  test::SetProfileInfo(&profile2, "", "Margaretha", "Winckelmann", "", "", "",
+                       "", "", "", "", "DE", "");
+  EXPECT_FALSE(HaveSameFirstNames({&profile1, &profile2}, "de"));
+  EXPECT_FALSE(HaveSameFirstNames({&profile2, &profile1}, "de"));
 }
 
 TEST(LabelFormatterUtilsTest,
-     HaveSameEmailAddressesWithOneProfileAndNoEmailAddress) {
+     HaveSameEmailAddresses_OneProfileAndNoEmailAddress) {
   AutofillProfile profile =
       AutofillProfile(base::GenerateGUID(), test::kEmptyOrigin);
   test::SetProfileInfo(&profile, "Maria", "Margaretha", "Kirch",
@@ -45,7 +95,7 @@
 }
 
 TEST(LabelFormatterUtilsTest,
-     HaveSameEmailAddressesWithOneProfileAndEmailAddress) {
+     HaveSameEmailAddresses_OneProfileAndEmailAddress) {
   AutofillProfile profile =
       AutofillProfile(base::GenerateGUID(), test::kEmptyOrigin);
   test::SetProfileInfo(&profile, "Maria", "Margaretha", "Kirch", "", "", "", "",
@@ -53,8 +103,7 @@
   EXPECT_TRUE(HaveSameEmailAddresses({&profile}, "de"));
 }
 
-TEST(LabelFormatterUtilsTest,
-     HaveSameEmailAddressesWithProfilesAndNoEmailAddresses) {
+TEST(LabelFormatterUtilsTest, HaveSameEmailAddresses_NoEmailAddresses) {
   AutofillProfile profile1 =
       AutofillProfile(base::GenerateGUID(), test::kEmptyOrigin);
   test::SetProfileInfo(&profile1, "Maria", "Margaretha", "Kirch", "", "", "",
@@ -66,8 +115,7 @@
   EXPECT_TRUE(HaveSameEmailAddresses({&profile1, &profile2}, "de"));
 }
 
-TEST(LabelFormatterUtilsTest,
-     HaveSameEmailAddressesWithProfilesAndSameEmailAddresses) {
+TEST(LabelFormatterUtilsTest, HaveSameEmailAddresses_SameEmailAddresses) {
   AutofillProfile profile1 =
       AutofillProfile(base::GenerateGUID(), test::kEmptyOrigin);
   test::SetProfileInfo(&profile1, "Maria", "Margaretha", "Kirch",
@@ -80,7 +128,7 @@
 }
 
 TEST(LabelFormatterUtilsTest,
-     HaveSameEmailAddressesWithProfilesAndDifferentNonEmptyEmailAddresses) {
+     HaveSameEmailAddresses_DifferentNonEmptyEmailAddresses) {
   AutofillProfile profile1 =
       AutofillProfile(base::GenerateGUID(), test::kEmptyOrigin);
   test::SetProfileInfo(&profile1, "Maria", "Margaretha", "Kirch",
@@ -93,7 +141,7 @@
 }
 
 TEST(LabelFormatterUtilsTest,
-     HaveSameEmailAddressesWithProfilesAndNonEmptyAndEmptyEmailAddresses) {
+     HaveSameEmailAddresses_NonEmptyAndEmptyEmailAddresses) {
   AutofillProfile profile1 =
       AutofillProfile(base::GenerateGUID(), test::kEmptyOrigin);
   test::SetProfileInfo(&profile1, "Maria", "Margaretha", "Kirch",
@@ -106,8 +154,7 @@
   EXPECT_FALSE(HaveSameEmailAddresses({&profile2, &profile1}, "de"));
 }
 
-TEST(LabelFormatterUtilsTest,
-     HaveSamePhoneNumbersWithOneProfileAndNoPhoneNumber) {
+TEST(LabelFormatterUtilsTest, HaveSamePhoneNumbers_OneProfileAndNoPhoneNumber) {
   AutofillProfile profile =
       AutofillProfile(base::GenerateGUID(), test::kEmptyOrigin);
   test::SetProfileInfo(&profile, "Maria", "Margaretha", "Kirch", "", "", "", "",
@@ -115,8 +162,7 @@
   EXPECT_TRUE(HaveSamePhoneNumbers({&profile}, "de"));
 }
 
-TEST(LabelFormatterUtilsTest,
-     HaveSamePhoneNumbersWithOneProfileAndPhoneNumber) {
+TEST(LabelFormatterUtilsTest, HaveSamePhoneNumbers_OneProfileAndPhoneNumber) {
   AutofillProfile profile =
       AutofillProfile(base::GenerateGUID(), test::kEmptyOrigin);
   test::SetProfileInfo(&profile, "Maria", "Margaretha", "Kirch", "", "", "", "",
@@ -124,8 +170,7 @@
   EXPECT_TRUE(HaveSamePhoneNumbers({&profile}, "de"));
 }
 
-TEST(LabelFormatterUtilsTest,
-     HaveSamePhoneNumbersWithProfilesAndNoPhoneNumber) {
+TEST(LabelFormatterUtilsTest, HaveSamePhoneNumbers_NoPhoneNumber) {
   AutofillProfile profile1 =
       AutofillProfile(base::GenerateGUID(), test::kEmptyOrigin);
   test::SetProfileInfo(&profile1, "Maria", "Margaretha", "Kirch", "", "", "",
@@ -137,8 +182,7 @@
   EXPECT_TRUE(HaveSamePhoneNumbers({&profile1, &profile2}, "de"));
 }
 
-TEST(LabelFormatterUtilsTest,
-     HaveSamePhoneNumbersWithProfilesAndSamePhoneNumbers) {
+TEST(LabelFormatterUtilsTest, HaveSamePhoneNumbers_SamePhoneNumbers) {
   AutofillProfile profile1 =
       AutofillProfile(base::GenerateGUID(), test::kEmptyOrigin);
   test::SetProfileInfo(&profile1, "Maria", "Margaretha", "Kirch", "", "", "",
@@ -155,7 +199,7 @@
 }
 
 TEST(LabelFormatterUtilsTest,
-     HaveSamePhoneNumbersWithProfilesAndDifferentNonEmptyPhoneNumbers) {
+     HaveSamePhoneNumbers_DifferentNonEmptyPhoneNumbers) {
   AutofillProfile profile1 =
       AutofillProfile(base::GenerateGUID(), test::kEmptyOrigin);
   test::SetProfileInfo(&profile1, "Maria", "Margaretha", "Kirch", "", "", "",
@@ -168,7 +212,7 @@
 }
 
 TEST(LabelFormatterUtilsTest,
-     HaveSamePhoneNumbersWithProfilesAndNonEmptyAndEmptyPhoneNumbers) {
+     HaveSamePhoneNumbers_NonEmptyAndEmptyPhoneNumbers) {
   AutofillProfile profile1 =
       AutofillProfile(base::GenerateGUID(), test::kEmptyOrigin);
   test::SetProfileInfo(&profile1, "Maria", "Margaretha", "Kirch", "", "", "",
diff --git a/components/autofill/core/browser/metrics/address_form_event_logger.h b/components/autofill/core/browser/metrics/address_form_event_logger.h
index 52d467d..072f7c4 100644
--- a/components/autofill/core/browser/metrics/address_form_event_logger.h
+++ b/components/autofill/core/browser/metrics/address_form_event_logger.h
@@ -9,7 +9,7 @@
 
 #include "components/autofill/core/browser/autofill_field.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/form_structure.h"
 #include "components/autofill/core/browser/metrics/form_event_logger_base.h"
 #include "components/autofill/core/browser/metrics/form_events.h"
diff --git a/components/autofill/core/browser/metrics/credit_card_form_event_logger.h b/components/autofill/core/browser/metrics/credit_card_form_event_logger.h
index 05c64a9..aaf867dc 100644
--- a/components/autofill/core/browser/metrics/credit_card_form_event_logger.h
+++ b/components/autofill/core/browser/metrics/credit_card_form_event_logger.h
@@ -10,7 +10,7 @@
 #include "components/autofill/core/browser/autofill_client.h"
 #include "components/autofill/core/browser/autofill_field.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/form_structure.h"
 #include "components/autofill/core/browser/metrics/form_event_logger_base.h"
 #include "components/autofill/core/browser/metrics/form_events.h"
diff --git a/components/autofill/core/browser/payments/autofill_credit_card_filling_infobar_delegate_mobile.cc b/components/autofill/core/browser/payments/autofill_credit_card_filling_infobar_delegate_mobile.cc
index 87895b3..c75dc8dc 100644
--- a/components/autofill/core/browser/payments/autofill_credit_card_filling_infobar_delegate_mobile.cc
+++ b/components/autofill/core/browser/payments/autofill_credit_card_filling_infobar_delegate_mobile.cc
@@ -5,7 +5,7 @@
 #include "components/autofill/core/browser/payments/autofill_credit_card_filling_infobar_delegate_mobile.h"
 
 #include "build/build_config.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/common/autofill_constants.h"
 #include "components/autofill/core/common/autofill_features.h"
 #include "components/grit/components_scaled_resources.h"
diff --git a/components/autofill/core/browser/payments/autofill_save_card_infobar_delegate_mobile.cc b/components/autofill/core/browser/payments/autofill_save_card_infobar_delegate_mobile.cc
index 24e2a81..77c2b44 100644
--- a/components/autofill/core/browser/payments/autofill_save_card_infobar_delegate_mobile.cc
+++ b/components/autofill/core/browser/payments/autofill_save_card_infobar_delegate_mobile.cc
@@ -10,7 +10,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
 #include "components/autofill/core/browser/autofill_experiments.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/payments/legal_message_line.h"
 #include "components/autofill/core/common/autofill_constants.h"
 #include "components/autofill/core/common/autofill_features.h"
diff --git a/components/autofill/core/browser/payments/credit_card_save_manager.cc b/components/autofill/core/browser/payments/credit_card_save_manager.cc
index 73b029a..0cb71b0 100644
--- a/components/autofill/core/browser/payments/credit_card_save_manager.cc
+++ b/components/autofill/core/browser/payments/credit_card_save_manager.cc
@@ -29,9 +29,9 @@
 #include "components/autofill/core/browser/autofill_client.h"
 #include "components/autofill/core/browser/autofill_experiments.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_type.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/form_structure.h"
 #include "components/autofill/core/browser/payments/legacy_strike_database.h"
 #include "components/autofill/core/browser/payments/payments_client.h"
@@ -57,9 +57,9 @@
 // Otherwise, returns |name|.
 //
 // Note that a better way to do this would be to use SplitName from
-// src/components/autofill/core/browser/contact_info.cc. However, for now we
-// want the logic of which variations of names are considered to be the same to
-// exactly match the logic applied on the Payments server.
+// src/components/autofill/core/browser/data_model/contact_info.cc. However, for
+// now we want the logic of which variations of names are considered to be the
+// same to exactly match the logic applied on the Payments server.
 base::string16 RemoveMiddleInitial(const base::string16& name) {
   std::vector<base::StringPiece16> parts =
       base::SplitStringPiece(name, base::kWhitespaceUTF16,
diff --git a/components/autofill/core/browser/payments/credit_card_save_manager.h b/components/autofill/core/browser/payments/credit_card_save_manager.h
index 9e51fa0..f28c34a 100644
--- a/components/autofill/core/browser/payments/credit_card_save_manager.h
+++ b/components/autofill/core/browser/payments/credit_card_save_manager.h
@@ -16,7 +16,7 @@
 #include "build/build_config.h"
 #include "components/autofill/core/browser/autofill_client.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/form_structure.h"
 #include "components/autofill/core/browser/payments/credit_card_save_strike_database.h"
 #include "components/autofill/core/browser/payments/local_card_migration_strike_database.h"
diff --git a/components/autofill/core/browser/payments/credit_card_save_manager_unittest.cc b/components/autofill/core/browser/payments/credit_card_save_manager_unittest.cc
index f750808f..0c29f58 100644
--- a/components/autofill/core/browser/payments/credit_card_save_manager_unittest.cc
+++ b/components/autofill/core/browser/payments/credit_card_save_manager_unittest.cc
@@ -25,9 +25,9 @@
 #include "build/build_config.h"
 #include "components/autofill/core/browser/autofill_experiments.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/mock_autocomplete_history_manager.h"
 #include "components/autofill/core/browser/payments/payments_customer_data.h"
 #include "components/autofill/core/browser/payments/test_credit_card_save_manager.h"
diff --git a/components/autofill/core/browser/payments/full_card_request.cc b/components/autofill/core/browser/payments/full_card_request.cc
index 746db66..d3a489a 100644
--- a/components/autofill/core/browser/payments/full_card_request.cc
+++ b/components/autofill/core/browser/payments/full_card_request.cc
@@ -9,7 +9,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/payments/payments_util.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/common/autofill_clock.h"
diff --git a/components/autofill/core/browser/payments/full_card_request_unittest.cc b/components/autofill/core/browser/payments/full_card_request_unittest.cc
index a1177a2b..e3c33f9 100644
--- a/components/autofill/core/browser/payments/full_card_request_unittest.cc
+++ b/components/autofill/core/browser/payments/full_card_request_unittest.cc
@@ -12,7 +12,7 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/payments/payments_client.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/test_autofill_client.h"
diff --git a/components/autofill/core/browser/payments/local_card_migration_manager.cc b/components/autofill/core/browser/payments/local_card_migration_manager.cc
index 14eb58e..8797fcad8 100644
--- a/components/autofill/core/browser/payments/local_card_migration_manager.cc
+++ b/components/autofill/core/browser/payments/local_card_migration_manager.cc
@@ -16,7 +16,7 @@
 #include "components/autofill/core/browser/autofill_client.h"
 #include "components/autofill/core/browser/autofill_experiments.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/form_data_importer.h"
 #include "components/autofill/core/browser/payments/payments_client.h"
 #include "components/autofill/core/browser/payments/payments_util.h"
diff --git a/components/autofill/core/browser/payments/local_card_migration_manager_unittest.cc b/components/autofill/core/browser/payments/local_card_migration_manager_unittest.cc
index 7ca5804..f95daf3 100644
--- a/components/autofill/core/browser/payments/local_card_migration_manager_unittest.cc
+++ b/components/autofill/core/browser/payments/local_card_migration_manager_unittest.cc
@@ -23,9 +23,9 @@
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/mock_autocomplete_history_manager.h"
 #include "components/autofill/core/browser/payments/payments_customer_data.h"
 #include "components/autofill/core/browser/payments/test_credit_card_save_manager.h"
diff --git a/components/autofill/core/browser/payments/payments_client.cc b/components/autofill/core/browser/payments/payments_client.cc
index 58a9614..bf03a2d9 100644
--- a/components/autofill/core/browser/payments/payments_client.cc
+++ b/components/autofill/core/browser/payments/payments_client.cc
@@ -19,10 +19,10 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
 #include "build/build_config.h"
-#include "components/autofill/core/browser/autofill_data_model.h"
 #include "components/autofill/core/browser/autofill_experiments.h"
 #include "components/autofill/core/browser/autofill_type.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_data_model.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/payments/account_info_getter.h"
 #include "components/autofill/core/browser/payments/local_card_migration_manager.h"
 #include "components/autofill/core/browser/payments/payments_request.h"
diff --git a/components/autofill/core/browser/payments/payments_client.h b/components/autofill/core/browser/payments/payments_client.h
index 9f6d624..048b077 100644
--- a/components/autofill/core/browser/payments/payments_client.h
+++ b/components/autofill/core/browser/payments/payments_client.h
@@ -12,8 +12,8 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "components/autofill/core/browser/autofill_client.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/payments/card_unmask_delegate.h"
 #include "google_apis/gaia/google_service_auth_error.h"
 #include "services/identity/public/cpp/access_token_fetcher.h"
diff --git a/components/autofill/core/browser/payments/payments_util.h b/components/autofill/core/browser/payments/payments_util.h
index 8390b77..95a45af 100644
--- a/components/autofill/core/browser/payments/payments_util.h
+++ b/components/autofill/core/browser/payments/payments_util.h
@@ -8,7 +8,7 @@
 #include <stdint.h>
 #include <vector>
 
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 
 namespace autofill {
 
diff --git a/components/autofill/core/browser/personal_data_manager.cc b/components/autofill/core/browser/personal_data_manager.cc
index a89e682..ef4c213 100644
--- a/components/autofill/core/browser/personal_data_manager.cc
+++ b/components/autofill/core/browser/personal_data_manager.cc
@@ -33,14 +33,14 @@
 #include "components/autofill/core/browser/autofill_experiments.h"
 #include "components/autofill/core/browser/autofill_field.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
-#include "components/autofill/core/browser/autofill_profile_comparator.h"
 #include "components/autofill/core/browser/country_data.h"
 #include "components/autofill/core/browser/country_names.h"
+#include "components/autofill/core/browser/data_model/autofill_profile_comparator.h"
+#include "components/autofill/core/browser/data_model/phone_number.h"
 #include "components/autofill/core/browser/form_structure.h"
 #include "components/autofill/core/browser/label_formatter.h"
 #include "components/autofill/core/browser/label_formatter_utils.h"
 #include "components/autofill/core/browser/personal_data_manager_observer.h"
-#include "components/autofill/core/browser/phone_number.h"
 #include "components/autofill/core/browser/phone_number_i18n.h"
 #include "components/autofill/core/browser/suggestion_selection.h"
 #include "components/autofill/core/browser/validation.h"
@@ -1170,12 +1170,13 @@
   std::unique_ptr<LabelFormatter> formatter;
 
 #if !defined(OS_ANDROID) && !defined(OS_IOS)
-  formatter = base::FeatureList::IsEnabled(
-                  autofill::features::kAutofillUseImprovedLabelDisambiguation)
+  bool use_improved_label_disambiguation = base::FeatureList::IsEnabled(
+      autofill::features::kAutofillUseImprovedLabelDisambiguation);
+  formatter = use_improved_label_disambiguation
                   ? LabelFormatter::Create(app_locale_, type.GetStorableType(),
                                            field_types, unique_matched_profiles)
                   : nullptr;
-#endif
+#endif  // !defined(OS_ANDROID) && !defined(OS_IOS)
 
   // Generate disambiguating labels based on the list of matches.
   std::vector<base::string16> labels;
@@ -1187,9 +1188,8 @@
                                           app_locale_, &labels);
   }
 
-  suggestion_selection::PrepareSuggestions(
-      formatter && data_util::ContainsAddress(formatter->groups()), labels,
-      &unique_suggestions);
+  suggestion_selection::PrepareSuggestions(formatter != nullptr, labels,
+                                           &unique_suggestions);
   return unique_suggestions;
 }
 
diff --git a/components/autofill/core/browser/personal_data_manager.h b/components/autofill/core/browser/personal_data_manager.h
index 24e2e010..8bc45dd6 100644
--- a/components/autofill/core/browser/personal_data_manager.h
+++ b/components/autofill/core/browser/personal_data_manager.h
@@ -19,16 +19,16 @@
 #include "base/observer_list.h"
 #include "base/strings/string16.h"
 #include "build/build_config.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_profile_validator.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
+#include "components/autofill/core/browser/data_model/test_data_creator.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/payments/account_info_getter.h"
 #include "components/autofill/core/browser/payments/payments_customer_data.h"
 #include "components/autofill/core/browser/proto/server.pb.h"
 #include "components/autofill/core/browser/suggestion.h"
 #include "components/autofill/core/browser/sync_utils.h"
-#include "components/autofill/core/browser/test_data_creator.h"
 #include "components/autofill/core/browser/webdata/autofill_change.h"
 #include "components/autofill/core/browser/webdata/autofill_webdata_service.h"
 #include "components/autofill/core/browser/webdata/autofill_webdata_service_observer.h"
diff --git a/components/autofill/core/browser/personal_data_manager_unittest.cc b/components/autofill/core/browser/personal_data_manager_unittest.cc
index 304793f2..36336170 100644
--- a/components/autofill/core/browser/personal_data_manager_unittest.cc
+++ b/components/autofill/core/browser/personal_data_manager_unittest.cc
@@ -33,9 +33,9 @@
 #include "build/build_config.h"
 #include "components/autofill/core/browser/autofill_experiments.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/autofill_profile_comparator.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile_comparator.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/form_structure.h"
 #include "components/autofill/core/browser/label_formatter_utils.h"
@@ -2577,7 +2577,7 @@
 }
 
 #if !defined(OS_ANDROID) && !defined(OS_IOS)
-TEST_F(PersonalDataManagerTest, GetProfileSuggestions_ForContactForm) {
+TEST_F(PersonalDataManagerTest, GetProfileSuggestions_ContactForm) {
   AutofillProfile profile(base::GenerateGUID(), test::kEmptyOrigin);
   test::SetProfileInfo(&profile, "Hoa", "", "Pham", "hoa.pham@comcast.net", "",
                        "401 Merrimack St", "", "Lowell", "MA", "01852", "US",
@@ -2607,7 +2607,7 @@
 #endif  // #if !defined(OS_ANDROID) && !defined(OS_IOS)
 
 #if !defined(OS_ANDROID) && !defined(OS_IOS)
-TEST_F(PersonalDataManagerTest, GetProfileSuggestions_ForAddressForm) {
+TEST_F(PersonalDataManagerTest, GetProfileSuggestions_AddressForm) {
   AutofillProfile profile(base::GenerateGUID(), test::kEmptyOrigin);
   test::SetProfileInfo(&profile, "Hoa", "", "Pham", "hoa.pham@comcast.net", "",
                        "401 Merrimack St", "", "Lowell", "MA", "01852", "US",
@@ -2635,7 +2635,7 @@
 #endif  // #if !defined(OS_ANDROID) && !defined(OS_IOS)
 
 #if !defined(OS_ANDROID) && !defined(OS_IOS)
-TEST_F(PersonalDataManagerTest, GetProfileSuggestions_ForAddressPhoneForm) {
+TEST_F(PersonalDataManagerTest, GetProfileSuggestions_AddressPhoneForm) {
   AutofillProfile profile(base::GenerateGUID(), test::kEmptyOrigin);
   test::SetProfileInfo(&profile, "Hoa", "", "Pham", "hoa.pham@comcast.net", "",
                        "401 Merrimack St", "", "Lowell", "MA", "01852", "US",
@@ -2665,7 +2665,7 @@
 #endif  // #if !defined(OS_ANDROID) && !defined(OS_IOS)
 
 #if !defined(OS_ANDROID) && !defined(OS_IOS)
-TEST_F(PersonalDataManagerTest, GetProfileSuggestions_ForAddressEmailForm) {
+TEST_F(PersonalDataManagerTest, GetProfileSuggestions_AddressEmailForm) {
   AutofillProfile profile(base::GenerateGUID(), test::kEmptyOrigin);
   test::SetProfileInfo(&profile, "Hoa", "", "Pham", "hoa.pham@comcast.net", "",
                        "401 Merrimack St", "", "Lowell", "MA", "01852", "US",
@@ -2724,7 +2724,7 @@
 
 #if !defined(OS_ANDROID) && !defined(OS_IOS)
 TEST_F(PersonalDataManagerTest,
-       GetProfileSuggestions_ForAddressContactFormWithProfiles) {
+       GetProfileSuggestions_AddressContactFormWithProfiles) {
   AutofillProfile profile1(base::GenerateGUID(), test::kEmptyOrigin);
   test::SetProfileInfo(&profile1, "Hoa", "", "Pham", "hoa.pham@comcast.net", "",
                        "401 Merrimack St", "", "Lowell", "MA", "01852", "US",
@@ -2786,6 +2786,30 @@
 }
 #endif  // #if !defined(OS_ANDROID) && !defined(OS_IOS)
 
+#if !defined(OS_ANDROID) && !defined(OS_IOS)
+TEST_F(PersonalDataManagerTest, GetProfileSuggestions_FormWithoutNameField) {
+  AutofillProfile profile(base::GenerateGUID(), test::kEmptyOrigin);
+  test::SetProfileInfo(&profile, "Hoa", "", "Pham", "hoa.pham@comcast.net", "",
+                       "", "", "", "", "01852", "US", "");
+  AddProfileToPersonalDataManager(profile);
+
+  base::test::ScopedFeatureList scoped_features;
+  scoped_features.InitAndEnableFeature(
+      features::kAutofillUseImprovedLabelDisambiguation);
+
+  EXPECT_THAT(personal_data_->GetProfileSuggestions(
+                  AutofillType(ADDRESS_HOME_ZIP), base::string16(), false,
+                  std::vector<ServerFieldType>{ADDRESS_HOME_ZIP, EMAIL_ADDRESS,
+                                               PHONE_HOME_WHOLE_NUMBER}),
+              ElementsAre(AllOf(
+                  testing::Field(&Suggestion::label,
+                                 base::ASCIIToUTF16("hoa.pham@comcast.net")),
+                  testing::Field(&Suggestion::additional_label,
+                                 base::ASCIIToUTF16("hoa.pham@comcast.net")),
+                  testing::Field(&Suggestion::icon, ""))));
+}
+#endif  // #if !defined(OS_ANDROID) && !defined(OS_IOS)
+
 TEST_F(PersonalDataManagerTest, IsKnownCard_MatchesMaskedServerCard) {
   // Add a masked server card.
   std::vector<CreditCard> server_cards;
diff --git a/components/autofill/core/browser/phone_number_i18n.cc b/components/autofill/core/browser/phone_number_i18n.cc
index ecfbe9a..36ce875 100644
--- a/components/autofill/core/browser/phone_number_i18n.cc
+++ b/components/autofill/core/browser/phone_number_i18n.cc
@@ -13,7 +13,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_country.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "third_party/libphonenumber/phonenumber_api.h"
 
 namespace autofill {
diff --git a/components/autofill/core/browser/phone_number_i18n_unittest.cc b/components/autofill/core/browser/phone_number_i18n_unittest.cc
index a65481ec..aca67c5 100644
--- a/components/autofill/core/browser/phone_number_i18n_unittest.cc
+++ b/components/autofill/core/browser/phone_number_i18n_unittest.cc
@@ -9,7 +9,7 @@
 #include "base/macros.h"
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/libphonenumber/phonenumber_api.h"
diff --git a/components/autofill/core/browser/suggestion_selection.cc b/components/autofill/core/browser/suggestion_selection.cc
index 2ffd495f..1640024 100644
--- a/components/autofill/core/browser/suggestion_selection.cc
+++ b/components/autofill/core/browser/suggestion_selection.cc
@@ -13,9 +13,9 @@
 #include "components/autofill/core/browser/address_i18n.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/autofill_profile_comparator.h"
 #include "components/autofill/core/browser/autofill_type.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile_comparator.h"
 #include "components/autofill/core/browser/suggestion.h"
 #include "components/autofill/core/common/autofill_clock.h"
 #include "components/autofill/core/common/autofill_features.h"
@@ -245,7 +245,7 @@
       num_profiles_supressed);
 }
 
-void PrepareSuggestions(bool contains_address,
+void PrepareSuggestions(bool add_profile_icon,
                         const std::vector<base::string16>& labels,
                         std::vector<Suggestion>* suggestions) {
   DCHECK_EQ(suggestions->size(), labels.size());
@@ -255,11 +255,10 @@
     (*suggestions)[i].label = labels[i];
 
 #if !defined(OS_ANDROID) && !defined(OS_IOS)
-    if (base::FeatureList::IsEnabled(
-            autofill::features::kAutofillUseImprovedLabelDisambiguation)) {
+    if (add_profile_icon) {
       (*suggestions)[i].icon = "accountBoxIcon";
     }
-#endif
+#endif  // !defined(OS_ANDROID) && !defined(OS_IOS)
   }
 }
 
diff --git a/components/autofill/core/browser/suggestion_selection.h b/components/autofill/core/browser/suggestion_selection.h
index 319c38e..8ab0c1a 100644
--- a/components/autofill/core/browser/suggestion_selection.h
+++ b/components/autofill/core/browser/suggestion_selection.h
@@ -66,10 +66,9 @@
 
 // Prepares a collection of Suggestions to show to the user. Adds |labels| to
 // their corresponding |suggestions|. A label corresponds to the suggestion with
-// the same index.
-// |contains_address| determines which icon to add to suggestions in the
-//  autofill-use-improved-label-disambiguation experiment.
-void PrepareSuggestions(bool contains_address,
+// the same index. Adds an icon on desktop platforms when |add_profile_icon| is
+// true.
+void PrepareSuggestions(bool add_profile_icon,
                         const std::vector<base::string16>& labels,
                         std::vector<Suggestion>* suggestions);
 
diff --git a/components/autofill/core/browser/suggestion_selection_unittest.cc b/components/autofill/core/browser/suggestion_selection_unittest.cc
index 4d35f953..219fcfc 100644
--- a/components/autofill/core/browser/suggestion_selection_unittest.cc
+++ b/components/autofill/core/browser/suggestion_selection_unittest.cc
@@ -13,8 +13,8 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/time/time.h"
-#include "components/autofill/core/browser/autofill_profile_comparator.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile_comparator.h"
 #include "components/autofill/core/common/autofill_clock.h"
 #include "components/autofill/core/common/autofill_features.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/components/autofill/core/browser/test_address_normalizer.h b/components/autofill/core/browser/test_address_normalizer.h
index bda898d7a..6af6359 100644
--- a/components/autofill/core/browser/test_address_normalizer.h
+++ b/components/autofill/core/browser/test_address_normalizer.h
@@ -9,7 +9,7 @@
 
 #include "base/callback.h"
 #include "components/autofill/core/browser/address_normalizer.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 
 namespace autofill {
 
diff --git a/components/autofill/core/browser/test_personal_data_manager.h b/components/autofill/core/browser/test_personal_data_manager.h
index 0dd399b0..6f7be17 100644
--- a/components/autofill/core/browser/test_personal_data_manager.h
+++ b/components/autofill/core/browser/test_personal_data_manager.h
@@ -8,8 +8,8 @@
 #include <vector>
 
 #include "base/optional.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/payments/payments_customer_data.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/signin/core/browser/account_info.h"
diff --git a/components/autofill/core/browser/ui/payments/card_expiration_date_fix_flow_view_delegate_mobile.cc b/components/autofill/core/browser/ui/payments/card_expiration_date_fix_flow_view_delegate_mobile.cc
index 7a3550a8..692d285 100644
--- a/components/autofill/core/browser/ui/payments/card_expiration_date_fix_flow_view_delegate_mobile.cc
+++ b/components/autofill/core/browser/ui/payments/card_expiration_date_fix_flow_view_delegate_mobile.cc
@@ -9,7 +9,7 @@
 #include "base/logging.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/grit/components_scaled_resources.h"
 #include "components/strings/grit/components_strings.h"
 #include "ui/base/l10n/l10n_util.h"
diff --git a/components/autofill/core/browser/ui/payments/card_expiration_date_fix_flow_view_delegate_mobile.h b/components/autofill/core/browser/ui/payments/card_expiration_date_fix_flow_view_delegate_mobile.h
index fcc6e3af..389bdd1b 100644
--- a/components/autofill/core/browser/ui/payments/card_expiration_date_fix_flow_view_delegate_mobile.h
+++ b/components/autofill/core/browser/ui/payments/card_expiration_date_fix_flow_view_delegate_mobile.h
@@ -11,7 +11,7 @@
 #include "base/macros.h"
 #include "base/strings/string16.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 
 namespace autofill {
 
diff --git a/components/autofill/core/browser/ui/payments/card_unmask_prompt_controller_impl.h b/components/autofill/core/browser/ui/payments/card_unmask_prompt_controller_impl.h
index 6a920e8e..97fb2f9 100644
--- a/components/autofill/core/browser/ui/payments/card_unmask_prompt_controller_impl.h
+++ b/components/autofill/core/browser/ui/payments/card_unmask_prompt_controller_impl.h
@@ -11,7 +11,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/payments/card_unmask_delegate.h"
 #include "components/autofill/core/browser/ui/payments/card_unmask_prompt_controller.h"
 
diff --git a/components/autofill/core/browser/ui/payments/card_unmask_prompt_controller_impl_unittest.cc b/components/autofill/core/browser/ui/payments/card_unmask_prompt_controller_impl_unittest.cc
index c916a47..f068bd83 100644
--- a/components/autofill/core/browser/ui/payments/card_unmask_prompt_controller_impl_unittest.cc
+++ b/components/autofill/core/browser/ui/payments/card_unmask_prompt_controller_impl_unittest.cc
@@ -15,7 +15,7 @@
 #include "components/autofill/core/browser/autofill_client.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/ui/payments/card_unmask_prompt_view.h"
 #include "components/autofill/core/common/autofill_payments_features.h"
 #include "components/autofill/core/common/autofill_prefs.h"
diff --git a/components/autofill/core/browser/validation.cc b/components/autofill/core/browser/validation.cc
index 3b4bf96..d69938e2 100644
--- a/components/autofill/core/browser/validation.cc
+++ b/components/autofill/core/browser/validation.cc
@@ -13,7 +13,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/phone_number_i18n.h"
 #include "components/autofill/core/browser/state_names.h"
diff --git a/components/autofill/core/browser/validation_unittest.cc b/components/autofill/core/browser/validation_unittest.cc
index 2604226..dbaa1e8 100644
--- a/components/autofill/core/browser/validation_unittest.cc
+++ b/components/autofill/core/browser/validation_unittest.cc
@@ -10,7 +10,7 @@
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/strings/grit/components_strings.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/autofill/core/browser/webdata/autofill_change.h b/components/autofill/core/browser/webdata/autofill_change.h
index f23695ad..605ff81 100644
--- a/components/autofill/core/browser/webdata/autofill_change.h
+++ b/components/autofill/core/browser/webdata/autofill_change.h
@@ -9,7 +9,7 @@
 #include <vector>
 
 #include "base/logging.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/webdata/autofill_entry.h"
 
 namespace autofill {
diff --git a/components/autofill/core/browser/webdata/autofill_profile_sync_bridge.cc b/components/autofill/core/browser/webdata/autofill_profile_sync_bridge.cc
index 0e91e96b..6a944a0 100644
--- a/components/autofill/core/browser/webdata/autofill_profile_sync_bridge.cc
+++ b/components/autofill/core/browser/webdata/autofill_profile_sync_bridge.cc
@@ -12,9 +12,9 @@
 #include "base/guid.h"
 #include "base/stl_util.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_profile_sync_util.h"
 #include "components/autofill/core/browser/country_names.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/proto/autofill_sync.pb.h"
 #include "components/autofill/core/browser/webdata/autofill_profile_sync_difference_tracker.h"
diff --git a/components/autofill/core/browser/webdata/autofill_profile_sync_bridge_unittest.cc b/components/autofill/core/browser/webdata/autofill_profile_sync_bridge_unittest.cc
index 4b1986b..53a6a08e 100644
--- a/components/autofill/core/browser/webdata/autofill_profile_sync_bridge_unittest.cc
+++ b/components/autofill/core/browser/webdata/autofill_profile_sync_bridge_unittest.cc
@@ -20,9 +20,9 @@
 #include "base/test/bind_test_util.h"
 #include "base/test/scoped_task_environment.h"
 #include "base/time/time.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_profile_sync_util.h"
 #include "components/autofill/core/browser/country_names.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/test_autofill_clock.h"
 #include "components/autofill/core/browser/webdata/autofill_change.h"
 #include "components/autofill/core/browser/webdata/autofill_table.h"
diff --git a/components/autofill/core/browser/webdata/autofill_profile_sync_difference_tracker.cc b/components/autofill/core/browser/webdata/autofill_profile_sync_difference_tracker.cc
index c5d3a8ee..8f96bb8 100644
--- a/components/autofill/core/browser/webdata/autofill_profile_sync_difference_tracker.cc
+++ b/components/autofill/core/browser/webdata/autofill_profile_sync_difference_tracker.cc
@@ -5,9 +5,9 @@
 #include "components/autofill/core/browser/webdata/autofill_profile_sync_difference_tracker.h"
 
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/autofill_profile_comparator.h"
 #include "components/autofill/core/browser/autofill_profile_sync_util.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile_comparator.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/webdata/autofill_profile_sync_bridge.h"
 #include "components/autofill/core/browser/webdata/autofill_table.h"
diff --git a/components/autofill/core/browser/webdata/autofill_profile_sync_difference_tracker_unittest.cc b/components/autofill/core/browser/webdata/autofill_profile_sync_difference_tracker_unittest.cc
index 779ad92..36dc48f5 100644
--- a/components/autofill/core/browser/webdata/autofill_profile_sync_difference_tracker_unittest.cc
+++ b/components/autofill/core/browser/webdata/autofill_profile_sync_difference_tracker_unittest.cc
@@ -10,9 +10,9 @@
 #include "base/test/mock_callback.h"
 #include "base/test/scoped_task_environment.h"
 #include "base/time/time.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_profile_sync_util.h"
 #include "components/autofill/core/browser/country_names.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/test_autofill_clock.h"
 #include "components/autofill/core/browser/webdata/autofill_table.h"
 #include "components/autofill/core/common/autofill_constants.h"
diff --git a/components/autofill/core/browser/webdata/autofill_profile_syncable_service.cc b/components/autofill/core/browser/webdata/autofill_profile_syncable_service.cc
index 1a6b461..99efc6a4 100644
--- a/components/autofill/core/browser/webdata/autofill_profile_syncable_service.cc
+++ b/components/autofill/core/browser/webdata/autofill_profile_syncable_service.cc
@@ -15,12 +15,12 @@
 #include "base/memory/ptr_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_country.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/autofill_profile_comparator.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile_comparator.h"
 // TODO(crbug.com/904390): Remove when the investigation is over.
 #include "components/autofill/core/browser/autofill_profile_sync_util.h"
 #include "components/autofill/core/browser/country_names.h"
-#include "components/autofill/core/browser/form_group.h"
+#include "components/autofill/core/browser/data_model/form_group.h"
 #include "components/autofill/core/browser/webdata/autofill_table.h"
 #include "components/autofill/core/browser/webdata/autofill_webdata_service.h"
 #include "components/autofill/core/common/autofill_constants.h"
diff --git a/components/autofill/core/browser/webdata/autofill_profile_syncable_service_unittest.cc b/components/autofill/core/browser/webdata/autofill_profile_syncable_service_unittest.cc
index 6291ce17..33446c9 100644
--- a/components/autofill/core/browser/webdata/autofill_profile_syncable_service_unittest.cc
+++ b/components/autofill/core/browser/webdata/autofill_profile_syncable_service_unittest.cc
@@ -13,8 +13,8 @@
 #include "base/memory/ptr_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_task_environment.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/country_names.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/webdata/autofill_change.h"
 #include "components/autofill/core/common/autofill_constants.h"
 #include "components/sync/model/sync_change_processor.h"
diff --git a/components/autofill/core/browser/webdata/autofill_sync_bridge_test_util.h b/components/autofill/core/browser/webdata/autofill_sync_bridge_test_util.h
index a3119a1..892835c 100644
--- a/components/autofill/core/browser/webdata/autofill_sync_bridge_test_util.h
+++ b/components/autofill/core/browser/webdata/autofill_sync_bridge_test_util.h
@@ -7,8 +7,8 @@
 
 #include <string>
 
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/sync/protocol/sync.pb.h"
 
 namespace autofill {
diff --git a/components/autofill/core/browser/webdata/autofill_sync_bridge_util.cc b/components/autofill/core/browser/webdata/autofill_sync_bridge_util.cc
index d7a59194..105805d 100644
--- a/components/autofill/core/browser/webdata/autofill_sync_bridge_util.cc
+++ b/components/autofill/core/browser/webdata/autofill_sync_bridge_util.cc
@@ -9,8 +9,8 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/payments/payments_customer_data.h"
 #include "components/autofill/core/browser/webdata/autofill_table.h"
 #include "components/autofill/core/common/autofill_util.h"
diff --git a/components/autofill/core/browser/webdata/autofill_sync_bridge_util_unittest.cc b/components/autofill/core/browser/webdata/autofill_sync_bridge_util_unittest.cc
index a7650358..0ca087c 100644
--- a/components/autofill/core/browser/webdata/autofill_sync_bridge_util_unittest.cc
+++ b/components/autofill/core/browser/webdata/autofill_sync_bridge_util_unittest.cc
@@ -7,8 +7,8 @@
 #include <vector>
 
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/payments/payments_customer_data.h"
 #include "components/autofill/core/browser/test_autofill_clock.h"
 #include "components/autofill/core/browser/webdata/autofill_sync_bridge_test_util.h"
diff --git a/components/autofill/core/browser/webdata/autofill_table.cc b/components/autofill/core/browser/webdata/autofill_table.cc
index c174b5a4..0754c2e3 100644
--- a/components/autofill/core/browser/webdata/autofill_table.cc
+++ b/components/autofill/core/browser/webdata/autofill_table.cc
@@ -23,10 +23,10 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
 #include "components/autofill/core/browser/autofill_country.h"
-#include "components/autofill/core/browser/autofill_metadata.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_type.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_metadata.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/payments/payments_customer_data.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/webdata/autofill_change.h"
diff --git a/components/autofill/core/browser/webdata/autofill_table_unittest.cc b/components/autofill/core/browser/webdata/autofill_table_unittest.cc
index b2f8812..cada2e22 100644
--- a/components/autofill/core/browser/webdata/autofill_table_unittest.cc
+++ b/components/autofill/core/browser/webdata/autofill_table_unittest.cc
@@ -20,11 +20,11 @@
 #include "base/test/scoped_feature_list.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
-#include "components/autofill/core/browser/autofill_metadata.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/autofill_type.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_metadata.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/payments/payments_customer_data.h"
 #include "components/autofill/core/browser/webdata/autofill_change.h"
 #include "components/autofill/core/browser/webdata/autofill_entry.h"
diff --git a/components/autofill/core/browser/webdata/autofill_wallet_metadata_sync_bridge.cc b/components/autofill/core/browser/webdata/autofill_wallet_metadata_sync_bridge.cc
index cf44869..a86604de 100644
--- a/components/autofill/core/browser/webdata/autofill_wallet_metadata_sync_bridge.cc
+++ b/components/autofill/core/browser/webdata/autofill_wallet_metadata_sync_bridge.cc
@@ -14,9 +14,9 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/optional.h"
 #include "base/pickle.h"
-#include "components/autofill/core/browser/autofill_metadata.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_metadata.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/webdata/autofill_sync_bridge_util.h"
 #include "components/autofill/core/browser/webdata/autofill_table.h"
 #include "components/autofill/core/browser/webdata/autofill_webdata_backend.h"
diff --git a/components/autofill/core/browser/webdata/autofill_wallet_metadata_sync_bridge_unittest.cc b/components/autofill/core/browser/webdata/autofill_wallet_metadata_sync_bridge_unittest.cc
index c887bde4..e5e5db3 100644
--- a/components/autofill/core/browser/webdata/autofill_wallet_metadata_sync_bridge_unittest.cc
+++ b/components/autofill/core/browser/webdata/autofill_wallet_metadata_sync_bridge_unittest.cc
@@ -19,10 +19,10 @@
 #include "base/test/bind_test_util.h"
 #include "base/test/scoped_task_environment.h"
 #include "base/time/time.h"
-#include "components/autofill/core/browser/autofill_metadata.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/country_names.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_metadata.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/test_autofill_clock.h"
 #include "components/autofill/core/browser/webdata/autofill_sync_bridge_test_util.h"
 #include "components/autofill/core/browser/webdata/autofill_sync_bridge_util.h"
diff --git a/components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service.cc b/components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service.cc
index e577d95..b9aa447 100644
--- a/components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service.cc
+++ b/components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service.cc
@@ -17,9 +17,9 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/time/time.h"
-#include "components/autofill/core/browser/autofill_data_model.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_data_model.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/webdata/autofill_change.h"
 #include "components/autofill/core/browser/webdata/autofill_table.h"
 #include "components/autofill/core/browser/webdata/autofill_webdata_backend.h"
diff --git a/components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service_unittest.cc b/components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service_unittest.cc
index 39b72ca..eda11ce 100644
--- a/components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service_unittest.cc
+++ b/components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service_unittest.cc
@@ -16,8 +16,8 @@
 #include "base/macros.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/time/time.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/webdata/autofill_webdata_backend.h"
 #include "components/autofill/core/browser/webdata/mock_autofill_webdata_backend.h"
 #include "components/sync/model/sync_change.h"
diff --git a/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge.cc b/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge.cc
index aa51b2f..bc8177f 100644
--- a/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge.cc
+++ b/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge.cc
@@ -12,9 +12,9 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_profile_sync_util.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/payments/payments_customer_data.h"
 #include "components/autofill/core/browser/webdata/autofill_sync_bridge_util.h"
 #include "components/autofill/core/browser/webdata/autofill_table.h"
diff --git a/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge_unittest.cc b/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge_unittest.cc
index c595c29b..c17da3c7 100644
--- a/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge_unittest.cc
+++ b/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge_unittest.cc
@@ -19,11 +19,11 @@
 #include "base/test/scoped_feature_list.h"
 #include "base/test/scoped_task_environment.h"
 #include "base/time/time.h"
-#include "components/autofill/core/browser/autofill_metadata.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/country_names.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_metadata.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/payments/payments_customer_data.h"
 #include "components/autofill/core/browser/test_autofill_clock.h"
 #include "components/autofill/core/browser/webdata/autofill_sync_bridge_test_util.h"
diff --git a/components/autofill/core/browser/webdata/autofill_wallet_syncable_service.h b/components/autofill/core/browser/webdata/autofill_wallet_syncable_service.h
index 9d3ff000..d9e8065 100644
--- a/components/autofill/core/browser/webdata/autofill_wallet_syncable_service.h
+++ b/components/autofill/core/browser/webdata/autofill_wallet_syncable_service.h
@@ -12,8 +12,8 @@
 #include "base/macros.h"
 #include "base/supports_user_data.h"
 #include "base/threading/thread_checker.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/payments/payments_customer_data.h"
 #include "components/sync/model/syncable_service.h"
 
diff --git a/components/autofill/core/browser/webdata/autofill_wallet_syncable_service_unittest.cc b/components/autofill/core/browser/webdata/autofill_wallet_syncable_service_unittest.cc
index 2530bfc..a3b71ef 100644
--- a/components/autofill/core/browser/webdata/autofill_wallet_syncable_service_unittest.cc
+++ b/components/autofill/core/browser/webdata/autofill_wallet_syncable_service_unittest.cc
@@ -8,8 +8,8 @@
 #include <vector>
 
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/payments/payments_customer_data.h"
 #include "components/autofill/core/browser/test_autofill_clock.h"
 #include "components/autofill/core/browser/webdata/autofill_table.h"
diff --git a/components/autofill/core/browser/webdata/autofill_webdata_backend_impl.cc b/components/autofill/core/browser/webdata/autofill_webdata_backend_impl.cc
index 3d1c708..68fbc53 100644
--- a/components/autofill/core/browser/webdata/autofill_webdata_backend_impl.cc
+++ b/components/autofill/core/browser/webdata/autofill_webdata_backend_impl.cc
@@ -9,8 +9,8 @@
 #include "base/logging.h"
 #include "base/single_thread_task_runner.h"
 #include "components/autofill/core/browser/autofill_country.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/payments/payments_customer_data.h"
 #include "components/autofill/core/browser/webdata/autofill_change.h"
 #include "components/autofill/core/browser/webdata/autofill_entry.h"
diff --git a/components/autofill/core/browser/webdata/autofill_webdata_backend_util.cc b/components/autofill/core/browser/webdata/autofill_webdata_backend_util.cc
index 0af8ed2..f8e85cb 100644
--- a/components/autofill/core/browser/webdata/autofill_webdata_backend_util.cc
+++ b/components/autofill/core/browser/webdata/autofill_webdata_backend_util.cc
@@ -11,9 +11,9 @@
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_country.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/autofill_profile_comparator.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile_comparator.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/payments/payments_customer_data.h"
 #include "components/autofill/core/browser/webdata/autofill_change.h"
 #include "components/autofill/core/browser/webdata/autofill_entry.h"
diff --git a/components/autofill/core/browser/webdata/autofill_webdata_service.cc b/components/autofill/core/browser/webdata/autofill_webdata_service.cc
index 007d48f..08439a5 100644
--- a/components/autofill/core/browser/webdata/autofill_webdata_service.cc
+++ b/components/autofill/core/browser/webdata/autofill_webdata_service.cc
@@ -10,8 +10,8 @@
 #include "base/single_thread_task_runner.h"
 #include "base/stl_util.h"
 #include "components/autofill/core/browser/autofill_country.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/webdata/autofill_change.h"
 #include "components/autofill/core/browser/webdata/autofill_entry.h"
 #include "components/autofill/core/browser/webdata/autofill_table.h"
diff --git a/components/autofill/core/browser/webdata/web_data_service_unittest.cc b/components/autofill/core/browser/webdata/web_data_service_unittest.cc
index b7503bc..44d51668 100644
--- a/components/autofill/core/browser/webdata/web_data_service_unittest.cc
+++ b/components/autofill/core/browser/webdata/web_data_service_unittest.cc
@@ -22,8 +22,8 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "components/autofill/core/browser/autofill_country.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/webdata/autofill_change.h"
 #include "components/autofill/core/browser/webdata/autofill_entry.h"
 #include "components/autofill/core/browser/webdata/autofill_table.h"
diff --git a/components/autofill/core/common/password_form.cc b/components/autofill/core/common/password_form.cc
index fc592740..580c494 100644
--- a/components/autofill/core/common/password_form.cc
+++ b/components/autofill/core/common/password_form.cc
@@ -181,8 +181,8 @@
   return !operator==(form);
 }
 
-bool ArePasswordFormUniqueKeyEqual(const PasswordForm& left,
-                                   const PasswordForm& right) {
+bool ArePasswordFormUniqueKeysEqual(const PasswordForm& left,
+                                    const PasswordForm& right) {
   return (left.signon_realm == right.signon_realm &&
           left.origin == right.origin &&
           left.username_element == right.username_element &&
diff --git a/components/autofill/core/common/password_form.h b/components/autofill/core/common/password_form.h
index db531ee..9ef420e3 100644
--- a/components/autofill/core/common/password_form.h
+++ b/components/autofill/core/common/password_form.h
@@ -355,8 +355,8 @@
 
 // True if the unique keys for the forms are the same. The unique key is
 // (origin, username_element, username_value, password_element, signon_realm).
-bool ArePasswordFormUniqueKeyEqual(const PasswordForm& left,
-                                   const PasswordForm& right);
+bool ArePasswordFormUniqueKeysEqual(const PasswordForm& left,
+                                    const PasswordForm& right);
 
 // A comparator for the unique key.
 struct LessThanUniqueKey {
diff --git a/components/autofill/ios/browser/autofill_agent.mm b/components/autofill/ios/browser/autofill_agent.mm
index 16978e8..04eba5f 100644
--- a/components/autofill/ios/browser/autofill_agent.mm
+++ b/components/autofill/ios/browser/autofill_agent.mm
@@ -23,8 +23,8 @@
 #include "components/autofill/core/browser/autofill_field.h"
 #include "components/autofill/core/browser/autofill_manager.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/keyboard_accessory_metrics_logger.h"
 #include "components/autofill/core/browser/popup_item_ids.h"
 #include "components/autofill/core/common/autofill_constants.h"
diff --git a/components/autofill/ios/browser/credit_card_util.mm b/components/autofill/ios/browser/credit_card_util.mm
index 53880672..e7632c9 100644
--- a/components/autofill/ios/browser/credit_card_util.mm
+++ b/components/autofill/ios/browser/credit_card_util.mm
@@ -6,7 +6,7 @@
 
 #include "base/strings/sys_string_conversions.h"
 #include "components/autofill/core/browser/autofill_type.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
diff --git a/components/autofill_assistant/browser/actions/autofill_action.cc b/components/autofill_assistant/browser/actions/autofill_action.cc
index dc62d46..81b14718 100644
--- a/components/autofill_assistant/browser/actions/autofill_action.cc
+++ b/components/autofill_assistant/browser/actions/autofill_action.cc
@@ -11,8 +11,8 @@
 #include "base/callback.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill_assistant/browser/actions/action_delegate.h"
 #include "components/autofill_assistant/browser/batch_element_checker.h"
 #include "components/autofill_assistant/browser/client_memory.h"
diff --git a/components/autofill_assistant/browser/actions/autofill_action_unittest.cc b/components/autofill_assistant/browser/actions/autofill_action_unittest.cc
index 3462299a..420cad5e2e 100644
--- a/components/autofill_assistant/browser/actions/autofill_action_unittest.cc
+++ b/components/autofill_assistant/browser/actions/autofill_action_unittest.cc
@@ -9,8 +9,8 @@
 #include "base/bind.h"
 #include "base/guid.h"
 #include "build/build_config.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill_assistant/browser/actions/mock_action_delegate.h"
 #include "components/autofill_assistant/browser/client_memory.h"
diff --git a/components/autofill_assistant/browser/actions/get_payment_information_action.cc b/components/autofill_assistant/browser/actions/get_payment_information_action.cc
index 7960da8..c8fac728 100644
--- a/components/autofill_assistant/browser/actions/get_payment_information_action.cc
+++ b/components/autofill_assistant/browser/actions/get_payment_information_action.cc
@@ -11,8 +11,8 @@
 #include "base/callback.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill_assistant/browser/actions/action_delegate.h"
 #include "components/autofill_assistant/browser/client_memory.h"
@@ -52,6 +52,8 @@
       !get_payment_information.shipping_address_name().empty();
   payment_options->request_payment_method =
       get_payment_information.ask_for_payment();
+  payment_options->confirm_button_text =
+      get_payment_information.confirm_button_text();
 
   payment_options->callback =
       base::BindOnce(&GetPaymentInformationAction::OnGetPaymentInformation,
diff --git a/components/autofill_assistant/browser/actions/mock_action_delegate.h b/components/autofill_assistant/browser/actions/mock_action_delegate.h
index 47d585ad..5caf36b 100644
--- a/components/autofill_assistant/browser/actions/mock_action_delegate.h
+++ b/components/autofill_assistant/browser/actions/mock_action_delegate.h
@@ -10,7 +10,7 @@
 #include <vector>
 
 #include "base/callback.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill_assistant/browser/actions/action_delegate.h"
 #include "components/autofill_assistant/browser/service.pb.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/components/autofill_assistant/browser/client_memory.h b/components/autofill_assistant/browser/client_memory.h
index acac4c2f..08036d50 100644
--- a/components/autofill_assistant/browser/client_memory.h
+++ b/components/autofill_assistant/browser/client_memory.h
@@ -9,8 +9,8 @@
 #include <string>
 
 #include "base/optional.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 
 namespace autofill_assistant {
 // Data shared between scripts and actions.
diff --git a/components/autofill_assistant/browser/controller.cc b/components/autofill_assistant/browser/controller.cc
index e9f9d353..7f1c9c8 100644
--- a/components/autofill_assistant/browser/controller.cc
+++ b/components/autofill_assistant/browser/controller.cc
@@ -741,8 +741,12 @@
 
   auto chips = std::make_unique<std::vector<Chip>>();
   chips->emplace_back();
-  chips->back().text =
-      l10n_util::GetStringUTF8(IDS_AUTOFILL_ASSISTANT_PAYMENT_INFO_CONFIRM);
+  if (!payment_request_options_->confirm_button_text.empty()) {
+    chips->back().text = payment_request_options_->confirm_button_text;
+  } else {
+    chips->back().text =
+        l10n_util::GetStringUTF8(IDS_AUTOFILL_ASSISTANT_PAYMENT_INFO_CONFIRM);
+  }
   chips->back().type = HIGHLIGHTED_ACTION;
   chips->back().disabled = !continue_button_enabled;
   if (continue_button_enabled) {
diff --git a/components/autofill_assistant/browser/payment_request.cc b/components/autofill_assistant/browser/payment_request.cc
index 8fb37f6..88ed062 100644
--- a/components/autofill_assistant/browser/payment_request.cc
+++ b/components/autofill_assistant/browser/payment_request.cc
@@ -4,8 +4,8 @@
 
 #include "components/autofill_assistant/browser/payment_request.h"
 
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 
 namespace autofill_assistant {
 
diff --git a/components/autofill_assistant/browser/payment_request.h b/components/autofill_assistant/browser/payment_request.h
index feed28a..8162c3d0 100644
--- a/components/autofill_assistant/browser/payment_request.h
+++ b/components/autofill_assistant/browser/payment_request.h
@@ -54,6 +54,7 @@
   bool request_payment_method = false;
   std::vector<std::string> supported_basic_card_networks;
   std::string default_email;
+  std::string confirm_button_text;
 
   base::OnceCallback<void(std::unique_ptr<PaymentInformation>)> callback;
 };
diff --git a/components/autofill_assistant/browser/script_executor.cc b/components/autofill_assistant/browser/script_executor.cc
index 31340b7b..d3157b2 100644
--- a/components/autofill_assistant/browser/script_executor.cc
+++ b/components/autofill_assistant/browser/script_executor.cc
@@ -14,7 +14,7 @@
 #include "base/single_thread_task_runner.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill_assistant/browser/actions/action.h"
 #include "components/autofill_assistant/browser/batch_element_checker.h"
 #include "components/autofill_assistant/browser/client_memory.h"
diff --git a/components/autofill_assistant/browser/self_delete_full_card_requester.cc b/components/autofill_assistant/browser/self_delete_full_card_requester.cc
index 05a6637..b21d90c 100644
--- a/components/autofill_assistant/browser/self_delete_full_card_requester.cc
+++ b/components/autofill_assistant/browser/self_delete_full_card_requester.cc
@@ -9,8 +9,8 @@
 
 #include "components/autofill/content/browser/content_autofill_driver.h"
 #include "components/autofill/content/browser/content_autofill_driver_factory.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/payments/full_card_request.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
diff --git a/components/autofill_assistant/browser/service.proto b/components/autofill_assistant/browser/service.proto
index d1df06f..aea67cca 100644
--- a/components/autofill_assistant/browser/service.proto
+++ b/components/autofill_assistant/browser/service.proto
@@ -879,6 +879,8 @@
   repeated string supported_basic_card_networks = 6;
   // Contact details that should be gathered.
   optional ContactDetailsProto contact_details = 5;
+  // Override for the text of the confirm button in the payment request.
+  optional string confirm_button_text = 7;
 }
 
 // Resets Autofill Assistant: clears any state and server payload.
diff --git a/components/autofill_assistant/browser/ui_controller.cc b/components/autofill_assistant/browser/ui_controller.cc
index f47db221..3b63564c 100644
--- a/components/autofill_assistant/browser/ui_controller.cc
+++ b/components/autofill_assistant/browser/ui_controller.cc
@@ -4,8 +4,8 @@
 
 #include "components/autofill_assistant/browser/ui_controller.h"
 
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 
 namespace autofill_assistant {
 
diff --git a/components/autofill_assistant/browser/web_controller.cc b/components/autofill_assistant/browser/web_controller.cc
index 632124a..f968eaae 100644
--- a/components/autofill_assistant/browser/web_controller.cc
+++ b/components/autofill_assistant/browser/web_controller.cc
@@ -19,7 +19,7 @@
 #include "build/build_config.h"
 #include "components/autofill/content/browser/content_autofill_driver.h"
 #include "components/autofill/core/browser/autofill_manager.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/common/autofill_constants.h"
 #include "components/autofill/core/common/form_data.h"
 #include "components/autofill_assistant/browser/rectf.h"
diff --git a/components/browsing_data/core/counters/autofill_counter.cc b/components/browsing_data/core/counters/autofill_counter.cc
index 87d7f268..f77ab50 100644
--- a/components/browsing_data/core/counters/autofill_counter.cc
+++ b/components/browsing_data/core/counters/autofill_counter.cc
@@ -10,8 +10,8 @@
 #include <vector>
 
 #include "base/bind.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/webdata/autofill_webdata_service.h"
 #include "components/browsing_data/core/pref_names.h"
 #include "components/sync/driver/sync_service.h"
diff --git a/components/password_manager/content/browser/content_password_manager_driver.cc b/components/password_manager/content/browser/content_password_manager_driver.cc
index 05d65c2..c1bc8b1 100644
--- a/components/password_manager/content/browser/content_password_manager_driver.cc
+++ b/components/password_manager/content/browser/content_password_manager_driver.cc
@@ -300,8 +300,7 @@
 
 void ContentPasswordManagerDriver::FocusedInputChanged(bool is_fillable,
                                                        bool is_password_field) {
-  client_->FocusedInputChanged(render_frame_host_->GetLastCommittedOrigin(),
-                               is_fillable, is_password_field);
+  client_->FocusedInputChanged(this, is_fillable, is_password_field);
 }
 
 void ContentPasswordManagerDriver::LogFirstFillingResult(
diff --git a/components/password_manager/content/common/credential_manager_mojom_traits.cc b/components/password_manager/content/common/credential_manager_mojom_traits.cc
index 97a463e8..09a87af00 100644
--- a/components/password_manager/content/common/credential_manager_mojom_traits.cc
+++ b/components/password_manager/content/common/credential_manager_mojom_traits.cc
@@ -97,6 +97,7 @@
     case blink::mojom::CredentialManagerError::NOT_FOCUSED:
     case blink::mojom::CredentialManagerError::RESIDENT_CREDENTIALS_UNSUPPORTED:
     case blink::mojom::CredentialManagerError::PROTECTION_POLICY_INCONSISTENT:
+    case blink::mojom::CredentialManagerError::ABORT:
     case blink::mojom::CredentialManagerError::UNKNOWN:
       *output = password_manager::CredentialManagerError::UNKNOWN;
       return true;
diff --git a/components/password_manager/core/browser/blacklisted_credentials_cleaner.cc b/components/password_manager/core/browser/blacklisted_credentials_cleaner.cc
index ece8b21f..818c300 100644
--- a/components/password_manager/core/browser/blacklisted_credentials_cleaner.cc
+++ b/components/password_manager/core/browser/blacklisted_credentials_cleaner.cc
@@ -54,7 +54,7 @@
             PasswordStore::FormDigest(*result));
     blacklisted.date_created = result->date_created;
     // In case |blacklisted| and |result| differ, update the store.
-    if (!ArePasswordFormUniqueKeyEqual(blacklisted, *result))
+    if (!ArePasswordFormUniqueKeysEqual(blacklisted, *result))
       store_->UpdateLoginWithPrimaryKey(blacklisted, *result);
     else if (blacklisted != *result)
       store_->UpdateLogin(blacklisted);
diff --git a/components/password_manager/core/browser/form_saver_impl.cc b/components/password_manager/core/browser/form_saver_impl.cc
index ecfe1ed..a2cbc58d 100644
--- a/components/password_manager/core/browser/form_saver_impl.cc
+++ b/components/password_manager/core/browser/form_saver_impl.cc
@@ -53,7 +53,7 @@
   for (const auto* match : matches) {
     DCHECK(pending.preferred);
     if (match->IsFederatedCredential() ||
-        ArePasswordFormUniqueKeyEqual(pending, *match))
+        ArePasswordFormUniqueKeysEqual(pending, *match))
       continue;
     // Delete obsolete empty username credentials.
     const bool same_password = match->password_value == pending.password_value;
diff --git a/components/password_manager/core/browser/new_password_form_manager_unittest.cc b/components/password_manager/core/browser/new_password_form_manager_unittest.cc
index bf4ccff9..303e1c5 100644
--- a/components/password_manager/core/browser/new_password_form_manager_unittest.cc
+++ b/components/password_manager/core/browser/new_password_form_manager_unittest.cc
@@ -61,7 +61,7 @@
 const int kPasswordFieldIndex = 2;
 
 MATCHER_P(FormHasUniqueKey, key, "") {
-  return ArePasswordFormUniqueKeyEqual(arg, key);
+  return ArePasswordFormUniqueKeysEqual(arg, key);
 }
 
 class MockPasswordManagerDriver : public StubPasswordManagerDriver {
@@ -946,7 +946,7 @@
 
   form_manager_->Save();
 
-  EXPECT_TRUE(ArePasswordFormUniqueKeyEqual(saved_match_, updated_form));
+  EXPECT_TRUE(ArePasswordFormUniqueKeysEqual(saved_match_, updated_form));
   EXPECT_TRUE(updated_form.preferred);
   EXPECT_EQ(new_password, updated_form.password_value);
 }
@@ -986,7 +986,7 @@
 
   form_manager_->Save();
 
-  EXPECT_TRUE(ArePasswordFormUniqueKeyEqual(saved_match_, updated_form));
+  EXPECT_TRUE(ArePasswordFormUniqueKeysEqual(saved_match_, updated_form));
   EXPECT_TRUE(updated_form.preferred);
   EXPECT_EQ(new_password, updated_form.password_value);
 }
@@ -1723,7 +1723,7 @@
 
   form_manager_->Update(saved_match_);
 
-  EXPECT_TRUE(ArePasswordFormUniqueKeyEqual(saved_match_, updated_form));
+  EXPECT_TRUE(ArePasswordFormUniqueKeysEqual(saved_match_, updated_form));
   EXPECT_TRUE(updated_form.preferred);
   EXPECT_EQ(new_password, updated_form.password_value);
 }
@@ -1928,7 +1928,7 @@
   form_manager_->Save();
 
   EXPECT_TRUE(
-      ArePasswordFormUniqueKeyEqual(saved_http_auth_form, updated_form));
+      ArePasswordFormUniqueKeysEqual(saved_http_auth_form, updated_form));
   EXPECT_EQ(new_password, updated_form.password_value);
 }
 
diff --git a/components/password_manager/core/browser/password_form_manager.cc b/components/password_manager/core/browser/password_form_manager.cc
index 17604522..6985048 100644
--- a/components/password_manager/core/browser/password_form_manager.cc
+++ b/components/password_manager/core/browser/password_form_manager.cc
@@ -1049,8 +1049,8 @@
     if (!pending_credentials_.IsFederatedCredential()) {
       auto updated_password_it =
           best_matches_.find(pending_credentials_.username_value);
-      DCHECK(best_matches_.end() != updated_password_it);
-      old_password = updated_password_it->second->password_value;
+      if (updated_password_it != best_matches_.end())
+        old_password = updated_password_it->second->password_value;
     }
 
     form_saver_->Update(pending_credentials_, matches, old_password);
diff --git a/components/password_manager/core/browser/password_generation_state_unittest.cc b/components/password_manager/core/browser/password_generation_state_unittest.cc
index 685bbfe9..42e69e32 100644
--- a/components/password_manager/core/browser/password_generation_state_unittest.cc
+++ b/components/password_manager/core/browser/password_generation_state_unittest.cc
@@ -62,7 +62,7 @@
 }
 
 MATCHER_P(FormHasUniqueKey, key, "") {
-  return ArePasswordFormUniqueKeyEqual(arg, key);
+  return ArePasswordFormUniqueKeysEqual(arg, key);
 }
 
 class PasswordGenerationStateTest : public testing::Test {
diff --git a/components/password_manager/core/browser/password_manager_client.cc b/components/password_manager/core/browser/password_manager_client.cc
index 9148b1c..d1160411 100644
--- a/components/password_manager/core/browser/password_manager_client.cc
+++ b/components/password_manager/core/browser/password_manager_client.cc
@@ -2,7 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "base/macros.h"
 #include "components/password_manager/core/browser/password_manager_client.h"
 
 namespace password_manager {
diff --git a/components/password_manager/core/browser/password_manager_client.h b/components/password_manager/core/browser/password_manager_client.h
index 791d341f..45f6c831 100644
--- a/components/password_manager/core/browser/password_manager_client.h
+++ b/components/password_manager/core/browser/password_manager_client.h
@@ -42,6 +42,7 @@
 class LogManager;
 class PasswordFormManagerForUI;
 class PasswordManager;
+class PasswordManagerDriver;
 class PasswordManagerMetricsRecorder;
 class PasswordRequirementsService;
 class PasswordStore;
@@ -126,9 +127,10 @@
 
   // Informs the embedder that the focus changed to a different input in the
   // same frame (e.g. tabbed from email to password field).
-  virtual void FocusedInputChanged(const url::Origin& last_committed_origin,
-                                   bool is_fillable,
-                                   bool is_password_field) = 0;
+  virtual void FocusedInputChanged(
+      password_manager::PasswordManagerDriver* driver,
+      bool is_fillable,
+      bool is_password_field) = 0;
 
   // Informs the embedder of a password forms that the user should choose from.
   // Returns true if the prompt is indeed displayed. If the prompt is not
diff --git a/components/password_manager/core/browser/password_manager_unittest.cc b/components/password_manager/core/browser/password_manager_unittest.cc
index 34deb4b..ca062fa9 100644
--- a/components/password_manager/core/browser/password_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_manager_unittest.cc
@@ -67,7 +67,7 @@
 }
 
 MATCHER_P(FormHasUniqueKey, key, "") {
-  return ArePasswordFormUniqueKeyEqual(arg, key);
+  return ArePasswordFormUniqueKeysEqual(arg, key);
 }
 
 MATCHER_P(FormIgnoreDate, expected, "") {
diff --git a/components/password_manager/core/browser/password_manager_util.cc b/components/password_manager/core/browser/password_manager_util.cc
index 82907a0c..3076281e 100644
--- a/components/password_manager/core/browser/password_manager_util.cc
+++ b/components/password_manager/core/browser/password_manager_util.cc
@@ -95,7 +95,7 @@
     tag_groups->front().push_back(unique_forms.front().get());
   }
   for (auto it = forms->begin() + 1; it != forms->end(); ++it) {
-    if (ArePasswordFormUniqueKeyEqual(**it, *unique_forms.back())) {
+    if (ArePasswordFormUniqueKeysEqual(**it, *unique_forms.back())) {
       if (tag_groups)
         tag_groups->back().push_back(it->get());
       duplicates->push_back(std::move(*it));
@@ -132,6 +132,11 @@
 
 bool ManualPasswordGenerationEnabled(
     password_manager::PasswordManagerDriver* driver) {
+#if defined(OS_ANDROID)
+  if (!base::FeatureList::IsEnabled(
+          password_manager::features::kManualPasswordGenerationAndroid))
+    return false;
+#endif  // defined(OS_ANDROID)
   password_manager::PasswordGenerationFrameHelper* password_generation_manager =
       driver ? driver->GetPasswordGenerationHelper() : nullptr;
   if (!password_generation_manager ||
diff --git a/components/password_manager/core/browser/password_store.cc b/components/password_manager/core/browser/password_store.cc
index 7f4e0a8..2ef4bdc 100644
--- a/components/password_manager/core/browser/password_store.cc
+++ b/components/password_manager/core/browser/password_store.cc
@@ -875,7 +875,7 @@
   std::vector<std::unique_ptr<PasswordForm>> candidates(
       FillMatchingLogins(FormDigest(primary_key)));
   for (auto& candidate : candidates) {
-    if (ArePasswordFormUniqueKeyEqual(*candidate, primary_key) &&
+    if (ArePasswordFormUniqueKeysEqual(*candidate, primary_key) &&
         !candidate->is_public_suffix_match) {
       return std::move(candidate);
     }
diff --git a/components/password_manager/core/browser/stub_password_manager_client.cc b/components/password_manager/core/browser/stub_password_manager_client.cc
index 1c278108..00d25a6 100644
--- a/components/password_manager/core/browser/stub_password_manager_client.cc
+++ b/components/password_manager/core/browser/stub_password_manager_client.cc
@@ -30,7 +30,7 @@
 void StubPasswordManagerClient::HideManualFallbackForSaving() {}
 
 void StubPasswordManagerClient::FocusedInputChanged(
-    const url::Origin& last_committed_origin,
+    password_manager::PasswordManagerDriver* driver,
     bool is_fillable,
     bool is_password_field) {}
 
diff --git a/components/password_manager/core/browser/stub_password_manager_client.h b/components/password_manager/core/browser/stub_password_manager_client.h
index 01a31817..4bd5c19 100644
--- a/components/password_manager/core/browser/stub_password_manager_client.h
+++ b/components/password_manager/core/browser/stub_password_manager_client.h
@@ -32,7 +32,7 @@
       bool has_generated_password,
       bool update_password) override;
   void HideManualFallbackForSaving() override;
-  void FocusedInputChanged(const url::Origin& last_committed_origin,
+  void FocusedInputChanged(password_manager::PasswordManagerDriver* driver,
                            bool is_fillable,
                            bool is_password_field) override;
   bool PromptUserToChooseCredentials(
diff --git a/components/password_manager/core/browser/sync/password_sync_bridge_unittest.cc b/components/password_manager/core/browser/sync/password_sync_bridge_unittest.cc
index 407cefe3..4866f06 100644
--- a/components/password_manager/core/browser/sync/password_sync_bridge_unittest.cc
+++ b/components/password_manager/core/browser/sync/password_sync_bridge_unittest.cc
@@ -150,7 +150,7 @@
  private:
   int GetPrimaryKey(const autofill::PasswordForm& form) const {
     for (const auto& pair : data_) {
-      if (ArePasswordFormUniqueKeyEqual(*pair.second, form)) {
+      if (ArePasswordFormUniqueKeysEqual(*pair.second, form)) {
         return pair.first;
       }
     }
diff --git a/components/password_manager/core/browser/test_password_store.cc b/components/password_manager/core/browser/test_password_store.cc
index b73ec985..ef9385d 100644
--- a/components/password_manager/core/browser/test_password_store.cc
+++ b/components/password_manager/core/browser/test_password_store.cc
@@ -54,7 +54,7 @@
   auto iter = std::find_if(
       passwords_for_signon_realm.begin(), passwords_for_signon_realm.end(),
       [&form](const auto& password) {
-        return ArePasswordFormUniqueKeyEqual(form, password);
+        return ArePasswordFormUniqueKeysEqual(form, password);
       });
 
   if (iter != passwords_for_signon_realm.end()) {
@@ -75,7 +75,7 @@
   std::vector<autofill::PasswordForm>& forms =
       stored_passwords_[form.signon_realm];
   for (auto it = forms.begin(); it != forms.end(); ++it) {
-    if (ArePasswordFormUniqueKeyEqual(form, *it)) {
+    if (ArePasswordFormUniqueKeysEqual(form, *it)) {
       *it = form;
       changes.push_back(PasswordStoreChange(PasswordStoreChange::UPDATE, form));
     }
@@ -90,7 +90,7 @@
       stored_passwords_[form.signon_realm];
   auto it = forms.begin();
   while (it != forms.end()) {
-    if (ArePasswordFormUniqueKeyEqual(form, *it)) {
+    if (ArePasswordFormUniqueKeysEqual(form, *it)) {
       it = forms.erase(it);
       changes.push_back(PasswordStoreChange(PasswordStoreChange::REMOVE, form));
     } else {
diff --git a/components/payments/content/BUILD.gn b/components/payments/content/BUILD.gn
index 51555e0..e39a8b1e 100644
--- a/components/payments/content/BUILD.gn
+++ b/components/payments/content/BUILD.gn
@@ -11,6 +11,8 @@
     "content_payment_request_delegate.h",
     "initialization_task.cc",
     "initialization_task.h",
+    "payment_handler_host.cc",
+    "payment_handler_host.h",
     "payment_request.cc",
     "payment_request.h",
     "payment_request_converter.cc",
diff --git a/components/payments/content/payment_handler_host.cc b/components/payments/content/payment_handler_host.cc
new file mode 100644
index 0000000..3c82c815
--- /dev/null
+++ b/components/payments/content/payment_handler_host.cc
@@ -0,0 +1,128 @@
+// Copyright 2019 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/payment_handler_host.h"
+
+#include <utility>
+
+#include "base/callback.h"
+#include "components/payments/core/error_strings.h"
+#include "content/public/browser/browser_thread.h"
+
+namespace payments {
+namespace {
+
+mojom::PaymentMethodChangeResponsePtr ConvertToPaymentMethodChangeResponse(
+    const mojom::PaymentDetailsPtr& details,
+    const PaymentHandlerHost::MethodChecker& method_checker) {
+  mojom::PaymentMethodChangeResponsePtr response =
+      mojom::PaymentMethodChangeResponse::New();
+  response->error = details->error;
+  response->stringified_payment_method_errors =
+      details->stringified_payment_method_errors;
+
+  if (details->total)
+    response->total = details->total->amount.Clone();
+
+  if (!details->modifiers)
+    return response;
+
+  response->modifiers = std::vector<mojom::PaymentHandlerModifierPtr>();
+
+  for (const auto& merchant : *details->modifiers) {
+    if (!method_checker.Run(merchant->method_data->supported_method)) {
+      continue;
+    }
+
+    mojom::PaymentHandlerModifierPtr mod = mojom::PaymentHandlerModifier::New();
+    mod->method_data = mojom::PaymentHandlerMethodData::New();
+    mod->method_data->method_name = merchant->method_data->supported_method;
+    mod->method_data->stringified_data =
+        merchant->method_data->stringified_data;
+
+    if (merchant->total)
+      mod->total = merchant->total->amount.Clone();
+
+    response->modifiers->emplace_back(std::move(mod));
+  }
+
+  return response;
+}
+
+}  // namespace
+
+PaymentHandlerHost::PaymentHandlerHost(Delegate* delegate)
+    : binding_(this), delegate_(delegate), weak_ptr_factory_(this) {
+  DCHECK(delegate_);
+}
+
+PaymentHandlerHost::~PaymentHandlerHost() {}
+
+void PaymentHandlerHost::UpdateWith(const mojom::PaymentDetailsPtr& details,
+                                    const MethodChecker& method_checker) {
+  if (!change_payment_method_callback_)
+    return;
+
+  std::move(change_payment_method_callback_)
+      .Run(ConvertToPaymentMethodChangeResponse(details, method_checker));
+}
+
+void PaymentHandlerHost::NoUpdatedPaymentDetails() {
+  if (!change_payment_method_callback_)
+    return;
+
+  std::move(change_payment_method_callback_)
+      .Run(mojom::PaymentMethodChangeResponse::New());
+}
+
+void PaymentHandlerHost::Disconnect() {
+  binding_.Close();
+}
+
+void PaymentHandlerHost::ChangePaymentMethod(
+    mojom::PaymentHandlerMethodDataPtr method_data,
+    mojom::PaymentHandlerHost::ChangePaymentMethodCallback callback) {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+  if (!method_data) {
+    mojom::PaymentMethodChangeResponsePtr response =
+        mojom::PaymentMethodChangeResponse::New();
+    response->error = errors::kMethodDataRequired;
+    std::move(callback).Run(std::move(response));
+    return;
+  }
+
+  if (method_data->method_name.empty()) {
+    mojom::PaymentMethodChangeResponsePtr response =
+        mojom::PaymentMethodChangeResponse::New();
+    response->error = errors::kMethodNameRequired;
+    std::move(callback).Run(std::move(response));
+    return;
+  }
+
+  if (!delegate_->ChangePaymentMethod(method_data->method_name,
+                                      method_data->stringified_data)) {
+    mojom::PaymentMethodChangeResponsePtr response =
+        mojom::PaymentMethodChangeResponse::New();
+    response->error = errors::kInvalidState;
+    std::move(callback).Run(std::move(response));
+    return;
+  }
+
+  change_payment_method_callback_ = std::move(callback);
+}
+
+mojom::PaymentHandlerHostPtrInfo PaymentHandlerHost::Bind() {
+  mojom::PaymentHandlerHostPtrInfo host_ptr_info;
+  binding_.Close();
+  binding_.Bind(mojo::MakeRequest(&host_ptr_info));
+
+  // Connection error handler can be set only after the Bind() call.
+  binding_.set_connection_error_handler(base::BindOnce(
+      &PaymentHandlerHost::Disconnect, weak_ptr_factory_.GetWeakPtr()));
+
+  return host_ptr_info;
+}
+
+}  // namespace payments
diff --git a/components/payments/content/payment_handler_host.h b/components/payments/content/payment_handler_host.h
new file mode 100644
index 0000000..3ab02a8
--- /dev/null
+++ b/components/payments/content/payment_handler_host.h
@@ -0,0 +1,81 @@
+// Copyright 2019 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_PAYMENT_HANDLER_HOST_H_
+#define COMPONENTS_PAYMENTS_CONTENT_PAYMENT_HANDLER_HOST_H_
+
+#include <string>
+
+#include "base/callback_forward.h"
+#include "base/macros.h"
+#include "base/memory/weak_ptr.h"
+#include "mojo/public/cpp/bindings/binding.h"
+#include "third_party/blink/public/mojom/payments/payment_handler_host.mojom.h"
+#include "third_party/blink/public/mojom/payments/payment_request.mojom.h"
+
+namespace payments {
+
+// Handles the communication from the payment handler renderer process to the
+// merchant renderer process.
+class PaymentHandlerHost : public mojom::PaymentHandlerHost {
+ public:
+  // The interfce to be implemented by the object that can communicate to the
+  // merchant's renderer process.
+  class Delegate {
+   public:
+    // Notifies the merchant that the payment method has changed. Returns
+    // "false" if the state is invalid.
+    virtual bool ChangePaymentMethod(const std::string& method_name,
+                                     const std::string& stringified_data) = 0;
+  };
+
+  using MethodChecker = base::RepeatingCallback<bool(const std::string&)>;
+
+  // The |delegate| cannot be null and must outlive this object. Typically this
+  // is accomplished by the |delegate| owning this object.
+  explicit PaymentHandlerHost(Delegate* delegate);
+  ~PaymentHandlerHost() override;
+
+  // Binds the payment handler host Mojo IPC connection to an endpoint and
+  // returns it.
+  mojom::PaymentHandlerHostPtrInfo Bind();
+
+  // Notifies the payment handler of the updated details, such as updated total,
+  // in response to the change of the payment method.
+  void UpdateWith(const mojom::PaymentDetailsPtr& details,
+                  const MethodChecker& method_checker);
+
+  // Notifies the payment handler that the merchant did not handle the payment
+  // method change event, so the payment details are unchanged.
+  void NoUpdatedPaymentDetails();
+
+  // Disconnects from the payment handler host.
+  void Disconnect();
+
+ private:
+  // mojom::PaymentHandlerHost
+  void ChangePaymentMethod(
+      mojom::PaymentHandlerMethodDataPtr method_data,
+      mojom::PaymentHandlerHost::ChangePaymentMethodCallback callback) override;
+
+  // The end-point for the payment handler renderer process to call into the
+  // browser process.
+  mojo::Binding<mojom::PaymentHandlerHost> binding_;
+
+  // Payment handler's callback to invoke after merchant responds to the
+  // "payment method change" event.
+  mojom::PaymentHandlerHost::ChangePaymentMethodCallback
+      change_payment_method_callback_;
+
+  // Not null and outlives this object. Owns this object.
+  Delegate* delegate_;
+
+  base::WeakPtrFactory<PaymentHandlerHost> weak_ptr_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(PaymentHandlerHost);
+};
+
+}  // namespace payments
+
+#endif  // COMPONENTS_PAYMENTS_CONTENT_PAYMENT_HANDLER_HOST_H_
diff --git a/components/payments/content/payment_request.cc b/components/payments/content/payment_request.cc
index a1129cd..53686063 100644
--- a/components/payments/content/payment_request.cc
+++ b/components/payments/content/payment_request.cc
@@ -44,44 +44,6 @@
          method_name == kAndroidPayMethodName;
 }
 
-mojom::PaymentMethodChangeResponsePtr ConvertToPaymentMethodChangeResponse(
-    const mojom::PaymentDetailsPtr& details,
-    const PaymentInstrument& invoked_app) {
-  mojom::PaymentMethodChangeResponsePtr response =
-      mojom::PaymentMethodChangeResponse::New();
-  response->error = details->error;
-  response->stringified_payment_method_errors =
-      details->stringified_payment_method_errors;
-
-  if (details->total)
-    response->total = details->total->amount.Clone();
-
-  if (!details->modifiers)
-    return response;
-
-  response->modifiers = std::vector<mojom::PaymentHandlerModifierPtr>();
-
-  for (const auto& merchant : *details->modifiers) {
-    if (!invoked_app.IsValidForPaymentMethodIdentifier(
-            merchant->method_data->supported_method)) {
-      continue;
-    }
-
-    mojom::PaymentHandlerModifierPtr mod = mojom::PaymentHandlerModifier::New();
-    mod->method_data = mojom::PaymentHandlerMethodData::New();
-    mod->method_data->method_name = merchant->method_data->supported_method;
-    mod->method_data->stringified_data =
-        merchant->method_data->stringified_data;
-
-    if (merchant->total)
-      mod->total = merchant->total->amount.Clone();
-
-    response->modifiers->emplace_back(std::move(mod));
-  }
-
-  return response;
-}
-
 }  // namespace
 
 PaymentRequest::PaymentRequest(
@@ -99,7 +61,7 @@
       display_manager_(display_manager),
       display_handle_(nullptr),
       binding_(this, std::move(request)),
-      payment_handler_host_binding_(this),
+      payment_handler_host_(this),
       top_level_origin_(url_formatter::FormatUrlForSecurityDisplay(
           web_contents_->GetLastCommittedURL())),
       frame_origin_(url_formatter::FormatUrlForSecurityDisplay(
@@ -317,11 +279,11 @@
     return;
   }
 
-  if (change_payment_method_callback_) {
-    DCHECK(state()->selected_instrument());
-    std::move(change_payment_method_callback_)
-        .Run(ConvertToPaymentMethodChangeResponse(
-            details, *state()->selected_instrument()));
+  if (state()->selected_instrument() && state()->IsPaymentAppInvoked()) {
+    payment_handler_host_.UpdateWith(
+        details, base::BindRepeating(
+                     &PaymentInstrument::IsValidForPaymentMethodIdentifier,
+                     base::Unretained(state()->selected_instrument())));
   }
 
   bool is_resolving_promise_passed_into_show_method = !spec_->IsInitialized();
@@ -356,10 +318,8 @@
 
   spec_->RecomputeSpecForDetails();
 
-  if (change_payment_method_callback_) {
-    std::move(change_payment_method_callback_)
-        .Run(mojom::PaymentMethodChangeResponse::New());
-  }
+  if (state()->IsPaymentAppInvoked())
+    payment_handler_host_.NoUpdatedPaymentDetails();
 }
 
 void PaymentRequest::Abort() {
@@ -470,37 +430,16 @@
   }
 }
 
-void PaymentRequest::ChangePaymentMethod(
-    mojom::PaymentHandlerMethodDataPtr method_data,
-    mojom::PaymentHandlerHost::ChangePaymentMethodCallback callback) {
+bool PaymentRequest::ChangePaymentMethod(const std::string& method_name,
+                                         const std::string& stringified_data) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  if (!state_ || !state_->IsPaymentAppInvoked() || !client_) {
-    mojom::PaymentMethodChangeResponsePtr response =
-        mojom::PaymentMethodChangeResponse::New();
-    response->error = errors::kInvalidState;
-    std::move(callback).Run(std::move(response));
-    return;
-  }
+  DCHECK(!method_name.empty());
 
-  if (!method_data) {
-    mojom::PaymentMethodChangeResponsePtr response =
-        mojom::PaymentMethodChangeResponse::New();
-    response->error = errors::kMethodDataRequired;
-    std::move(callback).Run(std::move(response));
-    return;
-  }
+  if (!state_ || !state_->IsPaymentAppInvoked() || !client_)
+    return false;
 
-  if (method_data->method_name.empty()) {
-    mojom::PaymentMethodChangeResponsePtr response =
-        mojom::PaymentMethodChangeResponse::New();
-    response->error = errors::kMethodNameRequired;
-    std::move(callback).Run(std::move(response));
-    return;
-  }
-
-  change_payment_method_callback_ = std::move(callback);
-  client_->OnPaymentMethodChange(method_data->method_name,
-                                 method_data->stringified_data);
+  client_->OnPaymentMethodChange(method_name, stringified_data);
+  return true;
 }
 
 void PaymentRequest::AreRequestedMethodsSupportedCallback(
@@ -626,7 +565,7 @@
   // We close all bindings and ask to be destroyed.
   client_.reset();
   binding_.Close();
-  payment_handler_host_binding_.Close();
+  payment_handler_host_.Disconnect();
   if (observer_for_testing_)
     observer_for_testing_->OnConnectionTerminated();
   manager_->DestroyRequest(this);
@@ -647,7 +586,7 @@
   // the binding and the dialog, and ask to be deleted.
   client_.reset();
   binding_.Close();
-  payment_handler_host_binding_.Close();
+  payment_handler_host_.Disconnect();
   delegate_->CloseDialog();
   if (observer_for_testing_)
     observer_for_testing_->OnConnectionTerminated();
@@ -661,7 +600,8 @@
   DCHECK(state_->selected_instrument());
   if (state_->selected_instrument()->type() ==
       PaymentInstrument::Type::SERVICE_WORKER_APP) {
-    BindPaymentHandlerHost();
+    static_cast<ServiceWorkerPaymentInstrument*>(state_->selected_instrument())
+        ->set_payment_handler_host(payment_handler_host_.Bind());
   }
   state_->GeneratePaymentResponse();
 }
@@ -678,24 +618,6 @@
   return delegate_->IsIncognito();
 }
 
-void PaymentRequest::BindPaymentHandlerHost() {
-  mojom::PaymentHandlerHostPtrInfo payment_handler_host;
-  payment_handler_host_binding_.Close();
-  payment_handler_host_binding_.Bind(mojo::MakeRequest(&payment_handler_host));
-
-  // Connection error handler can be set only after the Bind() call.
-  payment_handler_host_binding_.set_connection_error_handler(
-      base::BindOnce(&PaymentRequest::OnPaymentHandlerConnectionTerminated,
-                     weak_ptr_factory_.GetWeakPtr()));
-
-  static_cast<ServiceWorkerPaymentInstrument*>(state()->selected_instrument())
-      ->set_payment_handler_host(std::move(payment_handler_host));
-}
-
-void PaymentRequest::OnPaymentHandlerConnectionTerminated() {
-  payment_handler_host_binding_.Close();
-}
-
 void PaymentRequest::RecordFirstAbortReason(
     JourneyLogger::AbortReason abort_reason) {
   if (!has_recorded_completion_) {
diff --git a/components/payments/content/payment_request.h b/components/payments/content/payment_request.h
index 381b8b22..03eb010 100644
--- a/components/payments/content/payment_request.h
+++ b/components/payments/content/payment_request.h
@@ -11,13 +11,13 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "components/payments/content/developer_console_logger.h"
+#include "components/payments/content/payment_handler_host.h"
 #include "components/payments/content/payment_request_display_manager.h"
 #include "components/payments/content/payment_request_spec.h"
 #include "components/payments/content/payment_request_state.h"
 #include "components/payments/core/journey_logger.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
-#include "third_party/blink/public/mojom/payments/payment_handler_host.mojom.h"
 #include "third_party/blink/public/mojom/payments/payment_request.mojom.h"
 #include "url/gurl.h"
 
@@ -38,7 +38,7 @@
 // PaymentRequestSpec, and the current user selection state (and related data)
 // is stored in PaymentRequestSpec.
 class PaymentRequest : public mojom::PaymentRequest,
-                       public mojom::PaymentHandlerHost,
+                       public PaymentHandlerHost::Delegate,
                        public PaymentRequestSpec::Observer,
                        public PaymentRequestState::Delegate {
  public:
@@ -79,10 +79,9 @@
   void CanMakePayment(bool legacy_mode) override;
   void HasEnrolledInstrument(bool per_method_quota) override;
 
-  // mojom::PaymentHandlerHost
-  void ChangePaymentMethod(
-      mojom::PaymentHandlerMethodDataPtr method_data,
-      mojom::PaymentHandlerHost::ChangePaymentMethodCallback callback) override;
+  // PaymentHandlerHost::Delegate
+  bool ChangePaymentMethod(const std::string& method_name,
+                           const std::string& stringified_data) override;
 
   // PaymentRequestSpec::Observer:
   void OnSpecUpdated() override {}
@@ -136,13 +135,6 @@
   }
 
  private:
-  // Binds itself as the payment handler host for the selected service worker
-  // payment instrument.
-  void BindPaymentHandlerHost();
-
-  // Called when the mojo pipe to the payment handler closed.
-  void OnPaymentHandlerConnectionTerminated();
-
   // Returns true after init() has been called and the mojo connection has been
   // established. If the mojo connection gets later disconnected, this will
   // returns false.
@@ -198,12 +190,7 @@
 
   // The end-point for the payment handler renderer process to call into the
   // browser process.
-  mojo::Binding<mojom::PaymentHandlerHost> payment_handler_host_binding_;
-
-  // Payment handler's callback to invoke after merchant responds to the
-  // "payment method change" event.
-  mojom::PaymentHandlerHost::ChangePaymentMethodCallback
-      change_payment_method_callback_;
+  PaymentHandlerHost payment_handler_host_;
 
   // The RFC 6454 origin of the top level frame that has invoked PaymentRequest
   // API. This is what the user sees in the address bar.
diff --git a/components/payments/content/payment_request_converter.h b/components/payments/content/payment_request_converter.h
index 1e6472c..3ad65c9 100644
--- a/components/payments/content/payment_request_converter.h
+++ b/components/payments/content/payment_request_converter.h
@@ -5,7 +5,7 @@
 #ifndef COMPONENTS_PAYMENTS_CONTENT_PAYMENT_REQUEST_CONVERTER_H_
 #define COMPONENTS_PAYMENTS_CONTENT_PAYMENT_REQUEST_CONVERTER_H_
 
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "third_party/blink/public/mojom/payments/payment_request.mojom.h"
 
 // TODO(crbug.com/760945): Write unit tests for these functions.
diff --git a/components/payments/content/payment_request_spec.h b/components/payments/content/payment_request_spec.h
index a81d0ce..693de31e 100644
--- a/components/payments/content/payment_request_spec.h
+++ b/components/payments/content/payment_request_spec.h
@@ -13,7 +13,7 @@
 #include "base/macros.h"
 #include "base/observer_list.h"
 #include "base/strings/string16.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/payments/content/initialization_task.h"
 #include "components/payments/core/currency_formatter.h"
diff --git a/components/payments/content/payment_request_state.cc b/components/payments/content/payment_request_state.cc
index 0f5d84ac..c383757 100644
--- a/components/payments/content/payment_request_state.cc
+++ b/components/payments/content/payment_request_state.cc
@@ -13,8 +13,8 @@
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_country.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/payments/content/content_payment_request_delegate.h"
 #include "components/payments/content/payment_manifest_web_data_service.h"
diff --git a/components/payments/content/payment_request_state_unittest.cc b/components/payments/content/payment_request_state_unittest.cc
index fb02a9e..0480f440 100644
--- a/components/payments/content/payment_request_state_unittest.cc
+++ b/components/payments/content/payment_request_state_unittest.cc
@@ -11,9 +11,9 @@
 #include "base/memory/weak_ptr.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_feature_list.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/test_personal_data_manager.h"
 #include "components/payments/content/payment_request_spec.h"
 #include "components/payments/content/test_content_payment_request_delegate.h"
diff --git a/components/payments/content/payment_response_helper.h b/components/payments/content/payment_response_helper.h
index 4ca2c12..f0046f1 100644
--- a/components/payments/content/payment_response_helper.h
+++ b/components/payments/content/payment_response_helper.h
@@ -8,7 +8,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "components/autofill/core/browser/address_normalizer.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/payments/core/payment_instrument.h"
 #include "third_party/blink/public/mojom/payments/payment_request.mojom.h"
 
diff --git a/components/payments/content/payment_response_helper_unittest.cc b/components/payments/content/payment_response_helper_unittest.cc
index c28795f9..7a462a7 100644
--- a/components/payments/content/payment_response_helper_unittest.cc
+++ b/components/payments/content/payment_response_helper_unittest.cc
@@ -11,9 +11,9 @@
 
 #include "base/memory/weak_ptr.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/test_personal_data_manager.h"
 #include "components/payments/content/payment_request_spec.h"
 #include "components/payments/core/autofill_payment_instrument.h"
diff --git a/components/payments/core/autofill_payment_instrument.h b/components/payments/core/autofill_payment_instrument.h
index c2dbd1a..b73b560 100644
--- a/components/payments/core/autofill_payment_instrument.h
+++ b/components/payments/core/autofill_payment_instrument.h
@@ -13,8 +13,8 @@
 #include "base/strings/string16.h"
 #include "build/build_config.h"
 #include "components/autofill/core/browser/address_normalizer.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/payments/full_card_request.h"
 #include "components/payments/core/payment_instrument.h"
 
diff --git a/components/payments/core/autofill_payment_instrument_unittest.cc b/components/payments/core/autofill_payment_instrument_unittest.cc
index aff26be..44611c9 100644
--- a/components/payments/core/autofill_payment_instrument_unittest.cc
+++ b/components/payments/core/autofill_payment_instrument_unittest.cc
@@ -10,9 +10,9 @@
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/address_normalizer.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/payments/full_card_request.h"
 #include "components/autofill/core/browser/payments/payments_client.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
diff --git a/components/payments/core/payment_instrument.h b/components/payments/core/payment_instrument.h
index 497479277..7be1dd2 100644
--- a/components/payments/core/payment_instrument.h
+++ b/components/payments/core/payment_instrument.h
@@ -12,7 +12,7 @@
 #include "base/macros.h"
 #include "base/strings/string16.h"
 #include "build/build_config.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "ui/gfx/image/image_skia.h"
 
 namespace payments {
diff --git a/components/payments/core/payment_method_data.h b/components/payments/core/payment_method_data.h
index 1e32ec2..e73b7712 100644
--- a/components/payments/core/payment_method_data.h
+++ b/components/payments/core/payment_method_data.h
@@ -10,7 +10,7 @@
 #include <string>
 #include <vector>
 
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 
 namespace base {
 class DictionaryValue;
diff --git a/components/payments/core/payment_request_data_util.cc b/components/payments/core/payment_request_data_util.cc
index 21006b10..c99294f 100644
--- a/components/payments/core/payment_request_data_util.cc
+++ b/components/payments/core/payment_request_data_util.cc
@@ -12,7 +12,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_country.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/validation.h"
diff --git a/components/payments/core/payment_request_data_util.h b/components/payments/core/payment_request_data_util.h
index f5d8eed..ae29624 100644
--- a/components/payments/core/payment_request_data_util.h
+++ b/components/payments/core/payment_request_data_util.h
@@ -10,7 +10,7 @@
 #include <vector>
 
 #include "base/strings/string16.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/payments/mojom/payment_request_data.mojom.h"
 #include "url/gurl.h"
 
diff --git a/components/payments/core/payment_request_data_util_unittest.cc b/components/payments/core/payment_request_data_util_unittest.cc
index 9186ad1..73c72478 100644
--- a/components/payments/core/payment_request_data_util_unittest.cc
+++ b/components/payments/core/payment_request_data_util_unittest.cc
@@ -10,9 +10,9 @@
 #include "base/macros.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/payments/core/basic_card_response.h"
 #include "components/payments/core/payment_address.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/payments/core/payments_profile_comparator.cc b/components/payments/core/payments_profile_comparator.cc
index dda44679..c4653fb 100644
--- a/components/payments/core/payments_profile_comparator.cc
+++ b/components/payments/core/payments_profile_comparator.cc
@@ -11,7 +11,7 @@
 #include "components/autofill/core/browser/address_i18n.h"
 #include "components/autofill/core/browser/autofill_country.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/validation.h"
 #include "components/payments/core/payment_options_provider.h"
diff --git a/components/payments/core/payments_profile_comparator.h b/components/payments/core/payments_profile_comparator.h
index f7b7ea98..3efea9c 100644
--- a/components/payments/core/payments_profile_comparator.h
+++ b/components/payments/core/payments_profile_comparator.h
@@ -9,7 +9,7 @@
 #include <string>
 #include <vector>
 
-#include "components/autofill/core/browser/autofill_profile_comparator.h"
+#include "components/autofill/core/browser/data_model/autofill_profile_comparator.h"
 
 // Utility functions used for processing and filtering address profiles
 // (AutofillProfile).
diff --git a/components/payments/core/payments_profile_comparator_unittest.cc b/components/payments/core/payments_profile_comparator_unittest.cc
index b686ba06..1321dd7 100644
--- a/components/payments/core/payments_profile_comparator_unittest.cc
+++ b/components/payments/core/payments_profile_comparator_unittest.cc
@@ -9,8 +9,8 @@
 
 #include "base/guid.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/payments/core/payment_options_provider.h"
 #include "components/strings/grit/components_strings.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/payments/core/strings_util.cc b/components/payments/core/strings_util.cc
index 977f8ad..dab1947 100644
--- a/components/payments/core/strings_util.cc
+++ b/components/payments/core/strings_util.cc
@@ -8,7 +8,7 @@
 
 #include "base/logging.h"
 #include "base/stl_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/strings/grit/components_strings.h"
 #include "ui/base/l10n/l10n_util.h"
diff --git a/components/payments/core/strings_util.h b/components/payments/core/strings_util.h
index 0f3dcbbf..efdf5c3 100644
--- a/components/payments/core/strings_util.h
+++ b/components/payments/core/strings_util.h
@@ -10,7 +10,7 @@
 
 #include "base/strings/string16.h"
 #include "build/build_config.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/payments/core/payment_options_provider.h"
 
 namespace autofill {
diff --git a/components/prefs/BUILD.gn b/components/prefs/BUILD.gn
index 99141db2..1954a7f 100644
--- a/components/prefs/BUILD.gn
+++ b/components/prefs/BUILD.gn
@@ -52,6 +52,7 @@
 
   deps = [
     "//base",
+    "//base/util/values:values_util",
   ]
 }
 
diff --git a/components/prefs/pref_service.cc b/components/prefs/pref_service.cc
index fe63fa5..1ef51ec 100644
--- a/components/prefs/pref_service.cc
+++ b/components/prefs/pref_service.cc
@@ -21,6 +21,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/threading/thread_task_runner_handle.h"
+#include "base/util/values/values_util.h"
 #include "base/value_conversions.h"
 #include "build/build_config.h"
 #include "components/prefs/default_pref_store.h"
@@ -491,22 +492,14 @@
 
 void PrefService::SetInt64(const std::string& path, int64_t value) {
   SetUserPrefValue(path,
-                   std::make_unique<base::Value>(base::NumberToString(value)));
+                   base::Value::ToUniquePtrValue(util::Int64ToValue(value)));
 }
 
 int64_t PrefService::GetInt64(const std::string& path) const {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-
   const base::Value* value = GetPreferenceValueChecked(path);
-  if (!value)
-    return 0;
-  std::string result("0");
-  bool rv = value->GetAsString(&result);
-  DCHECK(rv);
-
-  int64_t val;
-  base::StringToInt64(result, &val);
-  return val;
+  base::Optional<int64_t> integer = util::ValueToInt64(value);
+  DCHECK(integer);
+  return integer.value_or(0);
 }
 
 void PrefService::SetUint64(const std::string& path, uint64_t value) {
@@ -530,20 +523,27 @@
 }
 
 void PrefService::SetTime(const std::string& path, base::Time value) {
-  SetInt64(path, value.ToDeltaSinceWindowsEpoch().InMicroseconds());
+  SetUserPrefValue(path,
+                   base::Value::ToUniquePtrValue(util::TimeToValue(value)));
 }
 
 base::Time PrefService::GetTime(const std::string& path) const {
-  return base::Time::FromDeltaSinceWindowsEpoch(
-      base::TimeDelta::FromMicroseconds(GetInt64(path)));
+  const base::Value* value = GetPreferenceValueChecked(path);
+  base::Optional<base::Time> time = util::ValueToTime(value);
+  DCHECK(time);
+  return time.value_or(base::Time());
 }
 
 void PrefService::SetTimeDelta(const std::string& path, base::TimeDelta value) {
-  SetInt64(path, value.InMicroseconds());
+  SetUserPrefValue(
+      path, base::Value::ToUniquePtrValue(util::TimeDeltaToValue(value)));
 }
 
 base::TimeDelta PrefService::GetTimeDelta(const std::string& path) const {
-  return base::TimeDelta::FromMicroseconds(GetInt64(path));
+  const base::Value* value = GetPreferenceValueChecked(path);
+  base::Optional<base::TimeDelta> time_delta = util::ValueToTimeDelta(value);
+  DCHECK(time_delta);
+  return time_delta.value_or(base::TimeDelta());
 }
 
 base::Value* PrefService::GetMutableUserPref(const std::string& path,
diff --git a/components/sessions/content/content_record_task_id_unittest.cc b/components/sessions/content/content_record_task_id_unittest.cc
index e8022815..2e6b26b 100644
--- a/components/sessions/content/content_record_task_id_unittest.cc
+++ b/components/sessions/content/content_record_task_id_unittest.cc
@@ -45,17 +45,15 @@
       test_data::kChildrenTaskIds,
       ContextRecordTaskId::Get(navigation_entry_.get())->children_task_ids());
 
-  ContextRecordTaskId* cloned_context_record_task_id =
-      static_cast<ContextRecordTaskId*>(
-          context_record_task_id->Clone().release());
+  ContextRecordTaskId cloned_context_record_task_id(*context_record_task_id);
 
-  EXPECT_EQ(test_data::kTaskId, cloned_context_record_task_id->task_id());
+  EXPECT_EQ(test_data::kTaskId, cloned_context_record_task_id.task_id());
   EXPECT_EQ(test_data::kParentTaskId,
-            cloned_context_record_task_id->parent_task_id());
+            cloned_context_record_task_id.parent_task_id());
   EXPECT_EQ(test_data::kRootTaskId,
-            cloned_context_record_task_id->root_task_id());
+            cloned_context_record_task_id.root_task_id());
   EXPECT_EQ(test_data::kChildrenTaskIds,
-            cloned_context_record_task_id->children_task_ids());
+            cloned_context_record_task_id.children_task_ids());
 }
 
 }  // namespace sessions
diff --git a/components/sync/driver/profile_sync_service.cc b/components/sync/driver/profile_sync_service.cc
index 2755afa2..a500cd6 100644
--- a/components/sync/driver/profile_sync_service.cc
+++ b/components/sync/driver/profile_sync_service.cc
@@ -484,25 +484,17 @@
   }
   params.sync_manager_factory =
       std::make_unique<SyncManagerFactory>(network_connection_tracker_);
-  params.birthday = sync_prefs_.GetBirthday();
-  params.cache_guid = sync_prefs_.GetCacheGuid();
-  // If either the cache GUID or the birthday are unitialized, it means we
-  // haven't completed a first sync cycle. We regenerate the cache GUID either
-  // way, even if just the birthday is missing, because fetching updates
-  // requires that the request either has a birthday, or there should be no
-  // progress marker.
-  // TODO(crbug.com/923285): This looks questionable here for
-  // |!IsFirstSetupComplete()| but it mimics the old behavior of deleting the
-  // directory via Directory::DeleteDirectoryFiles(). One consecuence is that,
-  // for sync the transport users (without sync-the-feature enabled), the cache
-  // GUID and other fields are reset on every restart.
-  if (params.cache_guid.empty() || params.birthday.empty() ||
-      !user_settings_->IsFirstSetupComplete()) {
+  // The first time we start up the engine we want to ensure we have a clean
+  // directory, so delete any old one that might be there.
+  params.delete_sync_data_folder = !user_settings_->IsFirstSetupComplete();
+  if (params.delete_sync_data_folder) {
+    // This looks questionable here but it mimics the old behavior of deleting
+    // the directory via Directory::DeleteDirectoryFiles(). One consecuence is
+    // that, for sync the transport users (without sync-the-feature enabled),
+    // the cache GUID and other fields are reset on every restart.
+    // TODO(crbug.com/923285): Reconsider the lifetime of the cache GUID and
+    // its persistence depending on StorageOption.
     sync_prefs_.ClearDirectoryConsistencyPreferences();
-    params.cache_guid = GenerateCacheGUID();
-    params.birthday.clear();
-    params.delete_sync_data_folder = true;
-    sync_prefs_.SetCacheGuid(params.cache_guid);
   }
   params.enable_local_sync_backend = sync_prefs_.IsLocalSyncEnabled();
   params.local_sync_backend_folder = sync_client_->GetLocalSyncBackendFolder();
@@ -510,7 +502,12 @@
       sync_prefs_.GetEncryptionBootstrapToken();
   params.restored_keystore_key_for_bootstrapping =
       sync_prefs_.GetKeystoreEncryptionBootstrapToken();
-
+  params.cache_guid = sync_prefs_.GetCacheGuid();
+  if (params.cache_guid.empty()) {
+    params.cache_guid = GenerateCacheGUID();
+    sync_prefs_.SetCacheGuid(params.cache_guid);
+  }
+  params.birthday = sync_prefs_.GetBirthday();
   params.bag_of_chips = sync_prefs_.GetBagOfChips();
   params.engine_components_factory =
       std::make_unique<EngineComponentsFactoryImpl>(
@@ -862,10 +859,6 @@
     return;
   }
 
-  // TODO(crbug.com/923285): The store birthday should be available at this
-  // point, so we should ideally save to prefs, since OnSyncCycleCompleted()
-  // does not get called for the first sync cycle for control types.
-
   sync_js_controller_.AttachJsBackend(js_backend);
 
   if (protocol_event_observers_.might_have_observers()) {
diff --git a/components/sync/engine_impl/loopback_server/loopback_server.cc b/components/sync/engine_impl/loopback_server/loopback_server.cc
index e3d225f..91b7933 100644
--- a/components/sync/engine_impl/loopback_server/loopback_server.cc
+++ b/components/sync/engine_impl/loopback_server/loopback_server.cc
@@ -344,9 +344,9 @@
     std::vector<ModelType> datatypes_to_migrate;
     switch (message.message_contents()) {
       case sync_pb::ClientToServerMessage::GET_UPDATES:
-        success = HandleGetUpdatesRequest(
-            message.get_updates(), message.store_birthday(),
-            response_proto.mutable_get_updates(), &datatypes_to_migrate);
+        success = HandleGetUpdatesRequest(message.get_updates(),
+                                          response_proto.mutable_get_updates(),
+                                          &datatypes_to_migrate);
         break;
       case sync_pb::ClientToServerMessage::COMMIT:
         success = HandleCommitRequest(message.commit(),
@@ -394,25 +394,10 @@
 
 bool LoopbackServer::HandleGetUpdatesRequest(
     const sync_pb::GetUpdatesMessage& get_updates,
-    const std::string& store_birthday,
     sync_pb::GetUpdatesResponse* response,
     std::vector<ModelType>* datatypes_to_migrate) {
   response->set_changes_remaining(0);
 
-  // It's a protocol-level contract that the birthday should only be empty
-  // during the initial sync cycle, which requires all progress markers to be
-  // empty. This is also DCHECK-ed on the client, inside syncer_proto_util.cc,
-  // but we guard against client-side code changes here.
-  if (store_birthday.empty()) {
-    for (const sync_pb::DataTypeProgressMarker& marker :
-         get_updates.from_progress_marker()) {
-      if (!marker.token().empty()) {
-        DLOG(WARNING) << "Non-empty progress marker without birthday";
-        return false;
-      }
-    }
-  }
-
   auto sieve = std::make_unique<UpdateSieve>(get_updates, migration_versions_);
 
   if (sieve->ShouldTriggerMigration(migration_versions_,
diff --git a/components/sync/engine_impl/loopback_server/loopback_server.h b/components/sync/engine_impl/loopback_server/loopback_server.h
index a6129de68f..36ead60 100644
--- a/components/sync/engine_impl/loopback_server/loopback_server.h
+++ b/components/sync/engine_impl/loopback_server/loopback_server.h
@@ -89,7 +89,6 @@
 
   // Processes a GetUpdates call.
   bool HandleGetUpdatesRequest(const sync_pb::GetUpdatesMessage& get_updates,
-                               const std::string& store_birthday,
                                sync_pb::GetUpdatesResponse* response,
                                std::vector<ModelType>* datatypes_to_migrate);
 
diff --git a/components/sync/test/fake_server/fake_server_http_post_provider.cc b/components/sync/test/fake_server/fake_server_http_post_provider.cc
index 0922542..eaba3c65 100644
--- a/components/sync/test/fake_server/fake_server_http_post_provider.cc
+++ b/components/sync/test/fake_server/fake_server_http_post_provider.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/location.h"
+#include "base/time/time.h"
 #include "components/sync/test/fake_server/fake_server.h"
 #include "net/base/net_errors.h"
 
@@ -16,10 +17,6 @@
 // static
 std::atomic_bool FakeServerHttpPostProvider::network_enabled_(true);
 
-// static
-std::atomic<base::TimeDelta> FakeServerHttpPostProvider::network_delay_ = {
-    base::TimeDelta()};
-
 FakeServerHttpPostProviderFactory::FakeServerHttpPostProviderFactory(
     const base::WeakPtr<FakeServer>& fake_server,
     scoped_refptr<base::SequencedTaskRunner> fake_server_task_runner)
@@ -92,17 +89,6 @@
   synchronous_post_completion_.Reset();
   aborted_ = false;
 
-  const base::TimeDelta network_delay = network_delay_.load();
-  if (!network_delay.is_zero()) {
-    // Block the specified time unless Abort() is called meanwhile.
-    synchronous_post_completion_.TimedWait(network_delay);
-    if (aborted_) {
-      *net_error_code = net::ERR_ABORTED;
-      return false;
-    }
-    DCHECK(!synchronous_post_completion_.IsSignaled());
-  }
-
   // It is assumed that a POST is being made to /command.
   int post_status_code = -1;
   std::string post_response;
@@ -174,12 +160,6 @@
   network_enabled_ = true;
 }
 
-// static
-void FakeServerHttpPostProvider::SetNetworkDelay(base::TimeDelta delay) {
-  // Note: This may be called on any thread.
-  network_delay_ = delay;
-}
-
 void FakeServerHttpPostProvider::HandleCommandOnFakeServerThread(
     int* http_status_code,
     std::string* response) {
diff --git a/components/sync/test/fake_server/fake_server_http_post_provider.h b/components/sync/test/fake_server/fake_server_http_post_provider.h
index 7efb3b4..22b8afc 100644
--- a/components/sync/test/fake_server/fake_server_http_post_provider.h
+++ b/components/sync/test/fake_server/fake_server_http_post_provider.h
@@ -15,7 +15,6 @@
 #include "base/sequence_checker.h"
 #include "base/sequenced_task_runner.h"
 #include "base/synchronization/waitable_event.h"
-#include "base/time/time.h"
 #include "components/sync/engine/net/http_post_provider_factory.h"
 #include "components/sync/engine/net/http_post_provider_interface.h"
 
@@ -51,9 +50,6 @@
   // Undoes the effects of DisableNetwork.
   static void EnableNetwork();
 
-  // Mimics a slow network: each request will be blocked for the specified time.
-  static void SetNetworkDelay(base::TimeDelta delay);
-
  protected:
   ~FakeServerHttpPostProvider() override;
 
@@ -64,7 +60,6 @@
                                        std::string* response);
 
   static std::atomic_bool network_enabled_;
-  static std::atomic<base::TimeDelta> network_delay_;
 
   // |fake_server_| should only be dereferenced on the same thread as
   // |fake_server_task_runner_| runs on.
diff --git a/components/ukm/content/source_url_recorder.cc b/components/ukm/content/source_url_recorder.cc
index 106f0b6..7b24ecf 100644
--- a/components/ukm/content/source_url_recorder.cc
+++ b/components/ukm/content/source_url_recorder.cc
@@ -332,6 +332,8 @@
   navigation_data.previous_source_id =
       last_committed_full_navigation_source_id_;
 
+  navigation_data.navigation_time = navigation_handle->NavigationStart();
+
   // If the last_committed_full_navigation_or_same_document_source_id_ isn't
   // equal to the last_committed_full_navigation_source_id_, it indicates the
   // previous source was a same document navigation.
diff --git a/components/ukm/content/source_url_recorder_test.cc b/components/ukm/content/source_url_recorder_test.cc
index 3acc43a..6d30545e 100644
--- a/components/ukm/content/source_url_recorder_test.cc
+++ b/components/ukm/content/source_url_recorder_test.cc
@@ -122,6 +122,7 @@
   EXPECT_FALSE(full_nav_source1.is_same_document_navigation());
   EXPECT_FALSE(full_nav_source1.has_previous_source_id());
   EXPECT_FALSE(full_nav_source1.has_previous_same_document_source_id());
+  EXPECT_TRUE(full_nav_source1.has_navigation_time_msec());
 
   // The second navigation was a same-document navigation to
   // same_document_url1. It should have a previous_source_id that points to
@@ -131,6 +132,7 @@
   EXPECT_TRUE(same_doc_source1.is_same_document_navigation());
   EXPECT_EQ(full_nav_source1.id(), same_doc_source1.previous_source_id());
   EXPECT_FALSE(same_doc_source1.has_previous_same_document_source_id());
+  EXPECT_TRUE(same_doc_source1.has_navigation_time_msec());
 
   // The third navigation was a non-same-document navigation to url2. It should
   // have a previous_source_id pointing to the source for url1, and a
@@ -142,6 +144,7 @@
   EXPECT_EQ(full_nav_source1.id(), full_nav_source2.previous_source_id());
   EXPECT_EQ(same_doc_source1.id(),
             full_nav_source2.previous_same_document_source_id());
+  EXPECT_TRUE(full_nav_source2.has_navigation_time_msec());
 
   // The fourth navigation was a same-document navigation to
   // same_document_url2. It should have a previous_source_id pointing to the
@@ -151,8 +154,17 @@
   EXPECT_TRUE(same_doc_source2.is_same_document_navigation());
   EXPECT_EQ(full_nav_source2.id(), same_doc_source2.previous_source_id());
   EXPECT_FALSE(same_doc_source2.has_previous_same_document_source_id());
+  EXPECT_TRUE(same_doc_source2.has_navigation_time_msec());
 
   EXPECT_EQ(url2, GetAssociatedURLForWebContentsDocument());
+
+  // The recorded time of each navigation should increase monotonically.
+  EXPECT_LE(full_nav_source1.navigation_time_msec(),
+            same_doc_source1.navigation_time_msec());
+  EXPECT_LE(same_doc_source1.navigation_time_msec(),
+            full_nav_source2.navigation_time_msec());
+  EXPECT_LE(full_nav_source2.navigation_time_msec(),
+            same_doc_source2.navigation_time_msec());
 }
 
 TEST_F(SourceUrlRecorderWebContentsObserverTest,
diff --git a/components/viz/test/fake_skia_output_surface.cc b/components/viz/test/fake_skia_output_surface.cc
index b7377eb..01a754ed 100644
--- a/components/viz/test/fake_skia_output_surface.cc
+++ b/components/viz/test/fake_skia_output_surface.cc
@@ -276,6 +276,13 @@
   NOTIMPLEMENTED();
 }
 
+void FakeSkiaOutputSurface::SetOutOfOrderCallbacks(
+    bool out_of_order_callbacks) {
+  TestContextSupport* support =
+      static_cast<TestContextSupport*>(context_provider()->ContextSupport());
+  support->set_out_of_order_callbacks(out_of_order_callbacks);
+}
+
 bool FakeSkiaOutputSurface::GetGrBackendTexture(
     const ResourceMetadata& metadata,
     GrBackendTexture* backend_texture) {
diff --git a/components/viz/test/fake_skia_output_surface.h b/components/viz/test/fake_skia_output_surface.h
index 6a2c039..1bc52cc 100644
--- a/components/viz/test/fake_skia_output_surface.h
+++ b/components/viz/test/fake_skia_output_surface.h
@@ -88,6 +88,10 @@
   // ExternalUseClient implementation:
   void ReleaseCachedResources(const std::vector<ResourceId>& ids) override;
 
+  // If set true, callbacks triggering will be in a reverse order as SignalQuery
+  // calls.
+  void SetOutOfOrderCallbacks(bool out_of_order_callbacks);
+
  private:
   explicit FakeSkiaOutputSurface(
       scoped_refptr<ContextProvider> context_provider);
diff --git a/components/webdata/common/web_database_migration_unittest.cc b/components/webdata/common/web_database_migration_unittest.cc
index eb338ba..fdcf418 100644
--- a/components/webdata/common/web_database_migration_unittest.cc
+++ b/components/webdata/common/web_database_migration_unittest.cc
@@ -17,9 +17,9 @@
 #include "base/time/time.h"
 #include "base/values.h"
 #include "components/autofill/core/browser/autofill_country.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_type.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/webdata/autofill_change.h"
 #include "components/autofill/core/browser/webdata/autofill_entry.h"
 #include "components/autofill/core/browser/webdata/autofill_table.h"
diff --git a/content/browser/accessibility/OWNERS b/content/browser/accessibility/OWNERS
index b6fb1fb..4450a80e 100644
--- a/content/browser/accessibility/OWNERS
+++ b/content/browser/accessibility/OWNERS
@@ -4,5 +4,13 @@
 jdiggs@igalia.com
 mrobinson@igalia.com
 
+# For Windows / UIA
+per-file *_win*=kschmi@microsoft.com
+per-file *_win*=kbabbitt@microsoft.com
+per-file *_win*=iapres@microsoft.com
+per-file *test*=kschmi@microsoft.com
+per-file *test*=kbabbitt@microsoft.com
+per-file *test*=iapres@microsoft.com
+
 # TEAM: chromium-accessibility@chromium.org
 # COMPONENT: UI>Accessibility
diff --git a/content/browser/accessibility/browser_accessibility_manager_win.cc b/content/browser/accessibility/browser_accessibility_manager_win.cc
index e3b0b7f..5ccd856 100644
--- a/content/browser/accessibility/browser_accessibility_manager_win.cc
+++ b/content/browser/accessibility/browser_accessibility_manager_win.cc
@@ -222,6 +222,7 @@
     }
     case ui::AXEventGenerator::Event::ENABLED_CHANGED:
       FireUiaPropertyChangedEvent(UIA_IsEnabledPropertyId, node);
+      aria_properties_events_.insert(node);
       break;
     case ui::AXEventGenerator::Event::FLOW_FROM_CHANGED:
       FireUiaPropertyChangedEvent(UIA_FlowsFromPropertyId, node);
@@ -234,6 +235,7 @@
       break;
     case ui::AXEventGenerator::Event::HIERARCHICAL_LEVEL_CHANGED:
       FireUiaPropertyChangedEvent(UIA_LevelPropertyId, node);
+      aria_properties_events_.insert(node);
       break;
     case ui::AXEventGenerator::Event::IMAGE_ANNOTATION_CHANGED:
       FireWinAccessibilityEvent(EVENT_OBJECT_NAMECHANGE, node);
@@ -271,6 +273,7 @@
       break;
     case ui::AXEventGenerator::Event::LIVE_STATUS_CHANGED:
       FireUiaPropertyChangedEvent(UIA_LiveSettingPropertyId, node);
+      aria_properties_events_.insert(node);
       break;
     case ui::AXEventGenerator::Event::LOAD_COMPLETE:
       FireWinAccessibilityEvent(IA2_EVENT_DOCUMENT_LOAD_COMPLETE, node);
@@ -284,6 +287,7 @@
     case ui::AXEventGenerator::Event::MULTISELECTABLE_STATE_CHANGED:
       FireUiaPropertyChangedEvent(UIA_SelectionCanSelectMultiplePropertyId,
                                   node);
+      aria_properties_events_.insert(node);
       break;
     case ui::AXEventGenerator::Event::NAME_CHANGED:
       FireUiaPropertyChangedEvent(UIA_NamePropertyId, node);
diff --git a/content/browser/accessibility/dump_accessibility_events_browsertest.cc b/content/browser/accessibility/dump_accessibility_events_browsertest.cc
index 8a9dae7ca..ed628db 100644
--- a/content/browser/accessibility/dump_accessibility_events_browsertest.cc
+++ b/content/browser/accessibility/dump_accessibility_events_browsertest.cc
@@ -256,6 +256,11 @@
 }
 
 IN_PROC_BROWSER_TEST_P(DumpAccessibilityEventsTest,
+                       AccessibilityEventsAriaDisabledChanged) {
+  RunEventTest(FILE_PATH_LITERAL("aria-disabled-changed.html"));
+}
+
+IN_PROC_BROWSER_TEST_P(DumpAccessibilityEventsTest,
                        AccessibilityEventsAriaHasPopupChanged) {
   RunEventTest(FILE_PATH_LITERAL("aria-haspopup-changed.html"));
 }
@@ -266,6 +271,16 @@
 }
 
 IN_PROC_BROWSER_TEST_P(DumpAccessibilityEventsTest,
+                       AccessibilityEventsAriaLevelChanged) {
+  RunEventTest(FILE_PATH_LITERAL("aria-level-changed.html"));
+}
+
+IN_PROC_BROWSER_TEST_P(DumpAccessibilityEventsTest,
+                       AccessibilityEventsAriaLiveChanged) {
+  RunEventTest(FILE_PATH_LITERAL("aria-live-changed.html"));
+}
+
+IN_PROC_BROWSER_TEST_P(DumpAccessibilityEventsTest,
                        AccessibilityEventsAriaMultilineChanged) {
   RunEventTest(FILE_PATH_LITERAL("aria-multiline-changed.html"));
 }
diff --git a/content/browser/appcache/appcache_host.cc b/content/browser/appcache/appcache_host.cc
index 5e7c21a2..d6ed8eb6 100644
--- a/content/browser/appcache/appcache_host.cc
+++ b/content/browser/appcache/appcache_host.cc
@@ -19,9 +19,7 @@
 #include "content/browser/appcache/appcache_subresource_url_factory.h"
 #include "content/browser/web_contents/web_contents_impl.h"
 #include "content/common/appcache_interfaces.h"
-#include "content/public/browser/child_process_security_policy.h"
 #include "content/public/common/content_features.h"
-#include "content/public/common/url_constants.h"
 #include "net/url_request/url_request.h"
 #include "services/network/public/cpp/features.h"
 #include "services/network/public/mojom/url_loader_factory.mojom.h"
@@ -139,20 +137,6 @@
     return;
   }
 
-  DCHECK_NE(process_id_, ChildProcessHost::kInvalidUniqueID);
-  auto* security_policy = ChildProcessSecurityPolicy::GetInstance();
-  if (document_url != kAboutSrcDocURL &&
-      !security_policy->CanAccessDataForOrigin(process_id_, document_url)) {
-    mojo::ReportBadMessage("ACH_SELECT_CACHE_DOCUMENT_URL_ACCESS_NOT_ALLOWED");
-    return;
-  }
-
-  if (!manifest_url.is_empty() &&
-      !security_policy->CanAccessDataForOrigin(process_id_, manifest_url)) {
-    mojo::ReportBadMessage("ACH_SELECT_CACHE_MANIFEST_URL_ACCESS_NOT_ALLOWED");
-    return;
-  }
-
   DCHECK(pending_start_update_callback_.is_null() &&
          pending_swap_cache_callback_.is_null() &&
          pending_get_status_callback_.is_null() && !is_selection_pending());
@@ -245,14 +229,6 @@
     return;
   }
 
-  auto* security_policy = ChildProcessSecurityPolicy::GetInstance();
-  if (document_url != kAboutSrcDocURL &&
-      !security_policy->CanAccessDataForOrigin(process_id_, document_url)) {
-    mojo::ReportBadMessage(
-        "ACH_MARK_AS_FOREIGN_ENTRY_DOCUMENT_URL_ACCESS_NOT_ALLOWED");
-    return;
-  }
-
   // The document url is not the resource url in the fallback case.
   storage()->MarkEntryAsForeign(
       main_resource_was_namespace_entry_ ? namespace_entry_url_ : document_url,
diff --git a/content/browser/appcache/appcache_host_unittest.cc b/content/browser/appcache/appcache_host_unittest.cc
index 4b54ca87..fc13cb4 100644
--- a/content/browser/appcache/appcache_host_unittest.cc
+++ b/content/browser/appcache/appcache_host_unittest.cc
@@ -19,8 +19,6 @@
 #include "content/browser/appcache/appcache_request_handler.h"
 #include "content/browser/appcache/mock_appcache_policy.h"
 #include "content/browser/appcache/mock_appcache_service.h"
-#include "content/browser/child_process_security_policy_impl.h"
-#include "content/browser/isolation_context.h"
 #include "content/public/test/test_browser_context.h"
 #include "content/public/test/test_renderer_host.h"
 #include "content/test/test_web_contents.h"
@@ -623,64 +621,4 @@
   }
 }
 
-TEST_F(AppCacheHostTest, SelectCacheURLsForWrongSite) {
-  // Lock process to |kProcessLockURL| so we can only accept URLs from
-  // that site.
-  const GURL kProcessLockURL("http://foo.com");
-  ChildProcessSecurityPolicyImpl::GetInstance()->LockToOrigin(
-      IsolationContext(&browser_context_), kProcessIdForTest, kProcessLockURL);
-
-  AppCacheHost host(kHostIdForTest, kProcessIdForTest, kRenderFrameIdForTest,
-                    nullptr, &service_);
-  host.set_frontend_for_testing(&mock_frontend_);
-  blink::mojom::AppCacheHostPtr host_ptr;
-  host.BindRequest(mojo::MakeRequest(&host_ptr));
-
-  // Verify that a document URL from the wrong site triggers a bad message.
-  {
-    const GURL kDocumentURL("http://whatever/");
-    mojo::test::BadMessageObserver bad_message_observer;
-    host_ptr->SelectCache(kDocumentURL, blink::mojom::kAppCacheNoCacheId,
-                          GURL());
-
-    EXPECT_EQ("ACH_SELECT_CACHE_DOCUMENT_URL_ACCESS_NOT_ALLOWED",
-              bad_message_observer.WaitForBadMessage());
-  }
-
-  // Verify that a document URL from the wrong site triggers a bad message.
-  {
-    const GURL kDocumentURL = kProcessLockURL;
-    const GURL kManifestURL("http://whatever/");
-    mojo::test::BadMessageObserver bad_message_observer;
-    host_ptr->SelectCache(kDocumentURL, blink::mojom::kAppCacheNoCacheId,
-                          kManifestURL);
-
-    EXPECT_EQ("ACH_SELECT_CACHE_MANIFEST_URL_ACCESS_NOT_ALLOWED",
-              bad_message_observer.WaitForBadMessage());
-  }
-}
-
-TEST_F(AppCacheHostTest, ForeignEntryForWrongSite) {
-  // Lock process to |kProcessLockURL| so we can only accept URLs from
-  // that site.
-  const GURL kProcessLockURL("http://foo.com");
-  ChildProcessSecurityPolicyImpl::GetInstance()->LockToOrigin(
-      IsolationContext(&browser_context_), kProcessIdForTest, kProcessLockURL);
-
-  AppCacheHost host(kHostIdForTest, kProcessIdForTest, kRenderFrameIdForTest,
-                    nullptr, &service_);
-  host.set_frontend_for_testing(&mock_frontend_);
-  blink::mojom::AppCacheHostPtr host_ptr;
-  host.BindRequest(mojo::MakeRequest(&host_ptr));
-
-  // Verify that a document URL from the wrong site triggers a bad message.
-  {
-    const GURL kDocumentURL("http://origin/document");
-    mojo::test::BadMessageObserver bad_message_observer;
-    host_ptr->MarkAsForeignEntry(kDocumentURL,
-                                 blink::mojom::kAppCacheNoCacheId);
-    EXPECT_EQ("ACH_MARK_AS_FOREIGN_ENTRY_DOCUMENT_URL_ACCESS_NOT_ALLOWED",
-              bad_message_observer.WaitForBadMessage());
-  }
-}
 }  // namespace content
diff --git a/content/browser/appcache/appcache_storage_impl_unittest.cc b/content/browser/appcache/appcache_storage_impl_unittest.cc
index e98fd1c..c58f47ef 100644
--- a/content/browser/appcache/appcache_storage_impl_unittest.cc
+++ b/content/browser/appcache/appcache_storage_impl_unittest.cc
@@ -36,10 +36,8 @@
 #include "content/browser/appcache/appcache_request_handler.h"
 #include "content/browser/appcache/appcache_service_impl.h"
 #include "content/browser/appcache/appcache_url_loader_request.h"
-#include "content/browser/child_process_security_policy_impl.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/common/content_features.h"
-#include "content/public/test/test_browser_context.h"
 #include "content/public/test/test_browser_thread_bundle.h"
 #include "net/base/net_errors.h"
 #include "net/base/request_priority.h"
@@ -75,8 +73,6 @@
   return GURL("http://mockhost/" + path);
 }
 
-std::unique_ptr<TestBrowserContext> browser_context;
-const int kProcessId = 1;
 std::unique_ptr<base::test::ScopedTaskEnvironment> scoped_task_environment;
 scoped_refptr<base::SingleThreadTaskRunner> io_runner;
 std::unique_ptr<base::Thread> background_thread;
@@ -280,10 +276,6 @@
     scoped_task_environment = std::make_unique<TestBrowserThreadBundle>(
         TestBrowserThreadBundle::REAL_IO_THREAD);
 
-    browser_context = std::make_unique<TestBrowserContext>();
-    ChildProcessSecurityPolicyImpl::GetInstance()->Add(kProcessId,
-                                                       browser_context.get());
-
     io_runner =
         base::CreateSingleThreadTaskRunnerWithTraits({BrowserThread::IO});
 
@@ -297,8 +289,6 @@
   static void TearDownTestCase() {
     io_runner.reset();
     background_thread.reset();
-    ChildProcessSecurityPolicyImpl::GetInstance()->Remove(kProcessId);
-    browser_context.reset();
     scoped_task_environment.reset();
   }
 
@@ -1704,9 +1694,10 @@
   }
 
   void Continue_Reinitialize(ReinitTestCase test_case) {
+    const int kMockProcessId = 1;
     const int kMockRenderFrameId = MSG_ROUTING_NONE;
     backend_ =
-        std::make_unique<AppCacheBackendImpl>(service_.get(), kProcessId);
+        std::make_unique<AppCacheBackendImpl>(service_.get(), kMockProcessId);
 
     if (test_case == CORRUPT_SQL_ON_INSTALL) {
       // Break the db file
@@ -2048,4 +2039,4 @@
 
 // That's all folks!
 
-}  // namespace content
+}  // namespace content
\ No newline at end of file
diff --git a/content/browser/appcache/appcache_update_job_unittest.cc b/content/browser/appcache/appcache_update_job_unittest.cc
index b37d46d..d6820b6 100644
--- a/content/browser/appcache/appcache_update_job_unittest.cc
+++ b/content/browser/appcache/appcache_update_job_unittest.cc
@@ -28,10 +28,8 @@
 #include "content/browser/appcache/appcache_response.h"
 #include "content/browser/appcache/appcache_update_url_loader_request.h"
 #include "content/browser/appcache/mock_appcache_service.h"
-#include "content/browser/child_process_security_policy_impl.h"
 #include "content/browser/url_loader_factory_getter.h"
 #include "content/public/browser/browser_task_traits.h"
-#include "content/public/test/test_browser_context.h"
 #include "content/public/test/test_browser_thread_bundle.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/system/data_pipe.h"
@@ -703,8 +701,7 @@
         expect_non_null_update_time_(false),
         tested_manifest_(NONE),
         tested_manifest_path_override_(nullptr),
-        thread_bundle_(content::TestBrowserThreadBundle::REAL_IO_THREAD),
-        process_id_(123) {
+        thread_bundle_(content::TestBrowserThreadBundle::REAL_IO_THREAD) {
     base::PostTaskWithTraits(
         FROM_HERE, {BrowserThread::IO},
         base::BindOnce(&IOThread::Init, base::Unretained(io_thread_.get())));
@@ -726,14 +723,6 @@
         base::BindOnce(&IOThread::CleanUp, base::Unretained(io_thread_.get())));
   }
 
-  void SetUp() override {
-    ChildProcessSecurityPolicyImpl::GetInstance()->Add(process_id_,
-                                                       &browser_context_);
-  }
-
-  void TearDown() override {
-    ChildProcessSecurityPolicyImpl::GetInstance()->Remove(process_id_);
-  }
   // Use a separate IO thread to run a test. Thread will be destroyed
   // when it goes out of scope.
   template <class Method>
@@ -3513,9 +3502,11 @@
 
   AppCacheHost* MakeHost(int host_id,
                          blink::mojom::AppCacheFrontend* frontend) {
+    constexpr int kProcessIdForTests = 123;
     constexpr int kRenderFrameIdForTests = 456;
-    hosts_.push_back(std::make_unique<AppCacheHost>(
-        host_id, process_id_, kRenderFrameIdForTests, nullptr, service_.get()));
+    hosts_.push_back(std::make_unique<AppCacheHost>(host_id, kProcessIdForTests,
+                                                    kRenderFrameIdForTests,
+                                                    nullptr, service_.get()));
     hosts_.back()->set_frontend_for_testing(frontend);
     return hosts_.back().get();
   }
@@ -3864,8 +3855,6 @@
   MockURLLoaderFactory mock_url_loader_factory_;
   scoped_refptr<URLLoaderFactoryGetter> loader_factory_getter_;
   content::TestBrowserThreadBundle thread_bundle_;
-  content::TestBrowserContext browser_context_;
-  const int process_id_;
 };
 
 TEST_F(AppCacheUpdateJobTest, AlreadyChecking) {
diff --git a/content/browser/browser_context.cc b/content/browser/browser_context.cc
index 655bfae7..46b76d7 100644
--- a/content/browser/browser_context.cc
+++ b/content/browser/browser_context.cc
@@ -510,12 +510,13 @@
     BrowserContext* browser_context,
     const GURL& origin,
     int64_t service_worker_registration_id,
+    const std::string& message_id,
     base::Optional<std::string> payload,
     const base::Callback<void(blink::mojom::PushDeliveryStatus)>& callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   PushMessagingRouter::DeliverMessage(browser_context, origin,
                                       service_worker_registration_id,
-                                      std::move(payload), callback);
+                                      message_id, std::move(payload), callback);
 }
 
 // static
diff --git a/content/browser/devtools/OWNERS b/content/browser/devtools/OWNERS
index d8aa317..2826a8c 100644
--- a/content/browser/devtools/OWNERS
+++ b/content/browser/devtools/OWNERS
@@ -1,3 +1,4 @@
 caseq@chromium.org
+alph@chromium.org
 
 # COMPONENT: Platform>DevTools
diff --git a/content/browser/devtools/devtools_background_services.proto b/content/browser/devtools/devtools_background_services.proto
index 8f4c4549..c51c161 100644
--- a/content/browser/devtools/devtools_background_services.proto
+++ b/content/browser/devtools/devtools_background_services.proto
@@ -16,9 +16,10 @@
   TEST_BACKGROUND_SERVICE = 1;
   BACKGROUND_FETCH = 2;
   BACKGROUND_SYNC = 3;
+  PUSH_MESSAGING = 4;
 
   // Keep as last, must have the largest tag value.
-  COUNT = 4;
+  COUNT = 5;
 }
 
 // A proto for storing the background service event with common metadata for
diff --git a/content/browser/devtools/devtools_background_services_context_impl.cc b/content/browser/devtools/devtools_background_services_context_impl.cc
index ace5f74f..b8931c1 100644
--- a/content/browser/devtools/devtools_background_services_context_impl.cc
+++ b/content/browser/devtools/devtools_background_services_context_impl.cc
@@ -47,6 +47,8 @@
       return devtools::proto::BACKGROUND_FETCH;
     case DevToolsBackgroundService::kBackgroundSync:
       return devtools::proto::BACKGROUND_SYNC;
+    case DevToolsBackgroundService::kPushMessaging:
+      return devtools::proto::PUSH_MESSAGING;
   }
 }
 
diff --git a/content/browser/devtools/protocol/service_worker_handler.cc b/content/browser/devtools/protocol/service_worker_handler.cc
index a60eb434..01b95114 100644
--- a/content/browser/devtools/protocol/service_worker_handler.cc
+++ b/content/browser/devtools/protocol/service_worker_handler.cc
@@ -318,7 +318,8 @@
   if (data.size() > 0)
     payload = data;
   BrowserContext::DeliverPushMessage(
-      browser_context_, GURL(origin), id, std::move(payload),
+      browser_context_, GURL(origin), id, /* push_message_id= */ std::string(),
+      std::move(payload),
       base::BindRepeating([](blink::mojom::PushDeliveryStatus status) {}));
 
   return Response::OK();
diff --git a/content/browser/frame_host/render_widget_host_view_guest.cc b/content/browser/frame_host/render_widget_host_view_guest.cc
index e781dbb1..fa47a994 100644
--- a/content/browser/frame_host/render_widget_host_view_guest.cc
+++ b/content/browser/frame_host/render_widget_host_view_guest.cc
@@ -787,7 +787,7 @@
     // sure other plugins would behave appropriately (i.e. return 'false').
     if (gesture_event.GetType() == blink::WebInputEvent::kGestureScrollUpdate &&
         gesture_event.data.scroll_update.inertial_phase ==
-            blink::WebGestureEvent::kMomentumPhase) {
+            blink::WebGestureEvent::InertialPhaseState::kMomentum) {
       return;
     }
     host()->ForwardGestureEvent(gesture_event);
diff --git a/content/browser/push_messaging/push_messaging_router.cc b/content/browser/push_messaging/push_messaging_router.cc
index 5334502..498f920 100644
--- a/content/browser/push_messaging/push_messaging_router.cc
+++ b/content/browser/push_messaging/push_messaging_router.cc
@@ -9,13 +9,14 @@
 #include "base/bind.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/task/post_task.h"
+#include "content/browser/devtools/devtools_background_services_context_impl.h"
 #include "content/browser/service_worker/service_worker_context_wrapper.h"
 #include "content/browser/service_worker/service_worker_registration.h"
 #include "content/browser/service_worker/service_worker_storage.h"
+#include "content/browser/storage_partition_impl.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
-#include "content/public/browser/storage_partition.h"
 #include "third_party/blink/public/common/service_worker/service_worker_status_code.h"
 #include "third_party/blink/public/mojom/push_messaging/push_messaging_status.mojom.h"
 
@@ -39,6 +40,7 @@
     BrowserContext* browser_context,
     const GURL& origin,
     int64_t service_worker_registration_id,
+    const std::string& message_id,
     base::Optional<std::string> payload,
     const DeliverMessageCallback& deliver_message_callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
@@ -47,20 +49,28 @@
   scoped_refptr<ServiceWorkerContextWrapper> service_worker_context =
       static_cast<ServiceWorkerContextWrapper*>(
           partition->GetServiceWorkerContext());
+  auto devtools_context =
+      base::WrapRefCounted<DevToolsBackgroundServicesContextImpl>(
+          service_worker_context->storage_partition()
+              ->GetDevToolsBackgroundServicesContext());
   base::PostTaskWithTraits(
       FROM_HERE, {BrowserThread::IO},
       base::BindOnce(&PushMessagingRouter::FindServiceWorkerRegistration,
-                     origin, service_worker_registration_id, std::move(payload),
-                     deliver_message_callback, service_worker_context));
+                     std::move(service_worker_context),
+                     std::move(devtools_context), origin,
+                     service_worker_registration_id, message_id,
+                     std::move(payload), deliver_message_callback));
 }
 
 // static
 void PushMessagingRouter::FindServiceWorkerRegistration(
+    scoped_refptr<ServiceWorkerContextWrapper> service_worker_context,
+    scoped_refptr<DevToolsBackgroundServicesContextImpl> devtools_context,
     const GURL& origin,
     int64_t service_worker_registration_id,
+    const std::string& message_id,
     base::Optional<std::string> payload,
-    const DeliverMessageCallback& deliver_message_callback,
-    scoped_refptr<ServiceWorkerContextWrapper> service_worker_context) {
+    const DeliverMessageCallback& deliver_message_callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   // Try to acquire the registration from storage. If it's already live we'll
   // receive it right away. If not, it will be revived from storage.
@@ -68,11 +78,14 @@
       service_worker_registration_id, origin,
       base::BindOnce(
           &PushMessagingRouter::FindServiceWorkerRegistrationCallback,
-          std::move(payload), deliver_message_callback));
+          std::move(devtools_context), message_id, std::move(payload),
+          deliver_message_callback));
 }
 
 // static
 void PushMessagingRouter::FindServiceWorkerRegistrationCallback(
+    scoped_refptr<DevToolsBackgroundServicesContextImpl> devtools_context,
+    const std::string& message_id,
     base::Optional<std::string> payload,
     const DeliverMessageCallback& deliver_message_callback,
     blink::ServiceWorkerStatusCode service_worker_status,
@@ -101,55 +114,77 @@
   version->RunAfterStartWorker(
       ServiceWorkerMetrics::EventType::PUSH,
       base::BindOnce(&PushMessagingRouter::DeliverMessageToWorker,
-                     base::WrapRefCounted(version), service_worker_registration,
+                     base::WrapRefCounted(version),
+                     std::move(service_worker_registration),
+                     std::move(devtools_context), message_id,
                      std::move(payload), deliver_message_callback));
 }
 
 // static
 void PushMessagingRouter::DeliverMessageToWorker(
-    const scoped_refptr<ServiceWorkerVersion>& service_worker,
-    const scoped_refptr<ServiceWorkerRegistration>& service_worker_registration,
+    scoped_refptr<ServiceWorkerVersion> service_worker,
+    scoped_refptr<ServiceWorkerRegistration> service_worker_registration,
+    scoped_refptr<DevToolsBackgroundServicesContextImpl> devtools_context,
+    const std::string& message_id,
     base::Optional<std::string> payload,
     const DeliverMessageCallback& deliver_message_callback,
     blink::ServiceWorkerStatusCode start_worker_status) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   if (start_worker_status != blink::ServiceWorkerStatusCode::kOk) {
-    DeliverMessageEnd(deliver_message_callback, service_worker_registration,
-                      start_worker_status);
+    DeliverMessageEnd(std::move(service_worker),
+                      std::move(service_worker_registration),
+                      std::move(devtools_context), message_id,
+                      deliver_message_callback, start_worker_status);
     return;
   }
 
   int request_id = service_worker->StartRequestWithCustomTimeout(
       ServiceWorkerMetrics::EventType::PUSH,
-      base::BindOnce(&PushMessagingRouter::DeliverMessageEnd,
-                     deliver_message_callback, service_worker_registration),
+      base::BindOnce(&PushMessagingRouter::DeliverMessageEnd, service_worker,
+                     std::move(service_worker_registration), devtools_context,
+                     message_id, deliver_message_callback),
       base::TimeDelta::FromSeconds(blink::mojom::kPushEventTimeoutSeconds),
       ServiceWorkerVersion::KILL_ON_TIMEOUT);
 
   service_worker->endpoint()->DispatchPushEvent(
       payload, service_worker->CreateSimpleEventCallback(request_id));
+
+  if (devtools_context->IsRecording(
+          DevToolsBackgroundService::kPushMessaging)) {
+    devtools_context->LogBackgroundServiceEventOnIO(
+        service_worker->registration_id(), service_worker->script_origin(),
+        DevToolsBackgroundService::kPushMessaging, "Push event dispatched",
+        message_id, {});
+  }
 }
 
 // static
 void PushMessagingRouter::DeliverMessageEnd(
+    scoped_refptr<ServiceWorkerVersion> service_worker,
+    scoped_refptr<ServiceWorkerRegistration> service_worker_registration,
+    scoped_refptr<DevToolsBackgroundServicesContextImpl> devtools_context,
+    const std::string& message_id,
     const DeliverMessageCallback& deliver_message_callback,
-    const scoped_refptr<ServiceWorkerRegistration>& service_worker_registration,
     blink::ServiceWorkerStatusCode service_worker_status) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   UMA_HISTOGRAM_ENUMERATION("PushMessaging.DeliveryStatus.ServiceWorkerEvent",
                             service_worker_status);
   blink::mojom::PushDeliveryStatus delivery_status =
       blink::mojom::PushDeliveryStatus::SERVICE_WORKER_ERROR;
+  std::string status_description;
   switch (service_worker_status) {
     case blink::ServiceWorkerStatusCode::kOk:
       delivery_status = blink::mojom::PushDeliveryStatus::SUCCESS;
+      status_description = "Success";
       break;
     case blink::ServiceWorkerStatusCode::kErrorEventWaitUntilRejected:
       delivery_status =
           blink::mojom::PushDeliveryStatus::EVENT_WAITUNTIL_REJECTED;
+      status_description = "waitUntil Rejected";
       break;
     case blink::ServiceWorkerStatusCode::kErrorTimeout:
       delivery_status = blink::mojom::PushDeliveryStatus::TIMEOUT;
+      status_description = "Timeout";
       break;
     case blink::ServiceWorkerStatusCode::kErrorFailed:
     case blink::ServiceWorkerStatusCode::kErrorAbort:
@@ -177,6 +212,16 @@
       break;
   }
   RunDeliverCallback(deliver_message_callback, delivery_status);
+
+  if (devtools_context->IsRecording(
+          DevToolsBackgroundService::kPushMessaging) &&
+      delivery_status !=
+          blink::mojom::PushDeliveryStatus::SERVICE_WORKER_ERROR) {
+    devtools_context->LogBackgroundServiceEventOnIO(
+        service_worker->registration_id(), service_worker->script_origin(),
+        DevToolsBackgroundService::kPushMessaging, "Push event completed",
+        message_id, {{"Status", status_description}});
+  }
 }
 
 }  // namespace content
diff --git a/content/browser/push_messaging/push_messaging_router.h b/content/browser/push_messaging/push_messaging_router.h
index 253ca88..13b1f10 100644
--- a/content/browser/push_messaging/push_messaging_router.h
+++ b/content/browser/push_messaging/push_messaging_router.h
@@ -9,7 +9,7 @@
 
 #include "base/callback_forward.h"
 #include "base/macros.h"
-#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_refptr.h"
 #include "base/optional.h"
 #include "third_party/blink/public/common/service_worker/service_worker_status_code.h"
 #include "url/gurl.h"
@@ -17,12 +17,13 @@
 namespace blink {
 namespace mojom {
 enum class PushDeliveryStatus;
-}
+}  // namespace mojom
 }  // namespace blink
 
 namespace content {
 
 class BrowserContext;
+class DevToolsBackgroundServicesContextImpl;
 class ServiceWorkerContextWrapper;
 class ServiceWorkerRegistration;
 class ServiceWorkerVersion;
@@ -39,6 +40,7 @@
       BrowserContext* browser_context,
       const GURL& origin,
       int64_t service_worker_registration_id,
+      const std::string& message_id,
       base::Optional<std::string> payload,
       const DeliverMessageCallback& deliver_message_callback);
 
@@ -46,16 +48,20 @@
   // Attempts to find a Service Worker registration so that a push event can be
   // dispatched. Must be called on the IO thread.
   static void FindServiceWorkerRegistration(
+      scoped_refptr<ServiceWorkerContextWrapper> service_worker_context,
+      scoped_refptr<DevToolsBackgroundServicesContextImpl> devtools_context,
       const GURL& origin,
       int64_t service_worker_registration_id,
+      const std::string& message_id,
       base::Optional<std::string> payload,
-      const DeliverMessageCallback& deliver_message_callback,
-      scoped_refptr<ServiceWorkerContextWrapper> service_worker_context);
+      const DeliverMessageCallback& deliver_message_callback);
 
   // If a registration was successfully retrieved, dispatches a push event with
   // |data| on the Service Worker identified by |service_worker_registration|.
   // Must be called on the IO thread.
   static void FindServiceWorkerRegistrationCallback(
+      scoped_refptr<DevToolsBackgroundServicesContextImpl> devtools_context,
+      const std::string& message_id,
       base::Optional<std::string> payload,
       const DeliverMessageCallback& deliver_message_callback,
       blink::ServiceWorkerStatusCode service_worker_status,
@@ -64,9 +70,10 @@
   // Delivers a push message with |data| to a specific |service_worker|.
   // Must be called on the IO thread.
   static void DeliverMessageToWorker(
-      const scoped_refptr<ServiceWorkerVersion>& service_worker,
-      const scoped_refptr<ServiceWorkerRegistration>&
-          service_worker_registration,
+      scoped_refptr<ServiceWorkerVersion> service_worker,
+      scoped_refptr<ServiceWorkerRegistration> service_worker_registration,
+      scoped_refptr<DevToolsBackgroundServicesContextImpl> devtools_context,
+      const std::string& message_id,
       base::Optional<std::string> payload,
       const DeliverMessageCallback& deliver_message_callback,
       blink::ServiceWorkerStatusCode start_worker_status);
@@ -74,9 +81,11 @@
   // Gets called asynchronously after the Service Worker has dispatched the push
   // event. Must be called on the IO thread.
   static void DeliverMessageEnd(
+      scoped_refptr<ServiceWorkerVersion> service_worker,
+      scoped_refptr<ServiceWorkerRegistration> service_worker_registration,
+      scoped_refptr<DevToolsBackgroundServicesContextImpl> devtools_context,
+      const std::string& message_id,
       const DeliverMessageCallback& deliver_message_callback,
-      const scoped_refptr<ServiceWorkerRegistration>&
-          service_worker_registration,
       blink::ServiceWorkerStatusCode service_worker_status);
 
   DISALLOW_IMPLICIT_CONSTRUCTORS(PushMessagingRouter);
diff --git a/content/browser/renderer_host/input/fling_controller.cc b/content/browser/renderer_host/input/fling_controller.cc
index 771162e..0d6fda58 100644
--- a/content/browser/renderer_host/input/fling_controller.cc
+++ b/content/browser/renderer_host/input/fling_controller.cc
@@ -333,11 +333,11 @@
     synthetic_gesture.event.data.scroll_update.delta_x = delta.x();
     synthetic_gesture.event.data.scroll_update.delta_y = delta.y();
     synthetic_gesture.event.data.scroll_update.inertial_phase =
-        WebGestureEvent::kMomentumPhase;
+        WebGestureEvent::InertialPhaseState::kMomentum;
   } else {
     DCHECK_EQ(WebInputEvent::kGestureScrollEnd, type);
     synthetic_gesture.event.data.scroll_end.inertial_phase =
-        WebGestureEvent::kMomentumPhase;
+        WebGestureEvent::InertialPhaseState::kMomentum;
     synthetic_gesture.event.data.scroll_end.generated_by_fling_controller =
         true;
   }
diff --git a/content/browser/renderer_host/input/fling_controller_unittest.cc b/content/browser/renderer_host/input/fling_controller_unittest.cc
index 22ae1a4..fd30a02 100644
--- a/content/browser/renderer_host/input/fling_controller_unittest.cc
+++ b/content/browser/renderer_host/input/fling_controller_unittest.cc
@@ -110,7 +110,7 @@
     scroll_update.data.scroll_update.velocity_x = delta.x();
     scroll_update.data.scroll_update.velocity_y = delta.y();
     scroll_update.data.scroll_update.inertial_phase =
-        WebGestureEvent::kNonMomentumPhase;
+        WebGestureEvent::InertialPhaseState::kNonMomentum;
     scroll_update.data.scroll_update.delta_units =
         blink::WebScrollGranularity::kScrollByPrecisePixel;
     GestureEventWithLatencyInfo scroll_update_with_latency(scroll_update);
@@ -257,7 +257,7 @@
   AdvanceTime();
   ProgressFling(NowTicks());
   ASSERT_EQ(WebInputEvent::kGestureScrollUpdate, last_sent_gesture_.GetType());
-  EXPECT_EQ(WebGestureEvent::kMomentumPhase,
+  EXPECT_EQ(WebGestureEvent::InertialPhaseState::kMomentum,
             last_sent_gesture_.data.scroll_update.inertial_phase);
   EXPECT_GT(last_sent_gesture_.data.scroll_update.delta_x, 0.f);
 
@@ -316,7 +316,7 @@
   while (FlingInProgress()) {
     ASSERT_EQ(WebInputEvent::kGestureScrollUpdate,
               last_sent_gesture_.GetType());
-    EXPECT_EQ(WebGestureEvent::kMomentumPhase,
+    EXPECT_EQ(WebGestureEvent::InertialPhaseState::kMomentum,
               last_sent_gesture_.data.scroll_update.inertial_phase);
     EXPECT_GT(last_sent_gesture_.data.scroll_update.delta_x, 0.f);
     AdvanceTime();
@@ -361,7 +361,7 @@
   AdvanceTime();
   ProgressFling(NowTicks());
   ASSERT_EQ(WebInputEvent::kGestureScrollUpdate, last_sent_gesture_.GetType());
-  EXPECT_EQ(WebGestureEvent::kMomentumPhase,
+  EXPECT_EQ(WebGestureEvent::InertialPhaseState::kMomentum,
             last_sent_gesture_.data.scroll_update.inertial_phase);
   EXPECT_GT(last_sent_gesture_.data.scroll_update.delta_x, 0.f);
 
@@ -405,7 +405,7 @@
   EXPECT_EQ(blink::WebGestureDevice::kTouchscreen,
             last_sent_gesture_.SourceDevice());
   ASSERT_EQ(WebInputEvent::kGestureScrollUpdate, last_sent_gesture_.GetType());
-  EXPECT_EQ(WebGestureEvent::kMomentumPhase,
+  EXPECT_EQ(WebGestureEvent::InertialPhaseState::kMomentum,
             last_sent_gesture_.data.scroll_update.inertial_phase);
   EXPECT_GT(last_sent_gesture_.data.scroll_update.delta_x, 0.f);
 }
@@ -430,7 +430,7 @@
   EXPECT_EQ(blink::WebGestureDevice::kTouchscreen,
             last_sent_gesture_.SourceDevice());
   ASSERT_EQ(WebInputEvent::kGestureScrollUpdate, last_sent_gesture_.GetType());
-  EXPECT_EQ(WebGestureEvent::kMomentumPhase,
+  EXPECT_EQ(WebGestureEvent::InertialPhaseState::kMomentum,
             last_sent_gesture_.data.scroll_update.inertial_phase);
   EXPECT_GT(last_sent_gesture_.data.scroll_update.delta_x, 0.f);
 }
@@ -529,7 +529,7 @@
   AdvanceTime();
   ProgressFling(NowTicks());
   ASSERT_EQ(WebInputEvent::kGestureScrollUpdate, last_sent_gesture_.GetType());
-  EXPECT_EQ(WebGestureEvent::kMomentumPhase,
+  EXPECT_EQ(WebGestureEvent::InertialPhaseState::kMomentum,
             last_sent_gesture_.data.scroll_update.inertial_phase);
   EXPECT_GT(last_sent_gesture_.data.scroll_update.delta_x, 0.f);
 
@@ -570,7 +570,7 @@
   AdvanceTime();
   ProgressFling(NowTicks());
   ASSERT_EQ(WebInputEvent::kGestureScrollUpdate, last_sent_gesture_.GetType());
-  EXPECT_EQ(WebGestureEvent::kMomentumPhase,
+  EXPECT_EQ(WebGestureEvent::InertialPhaseState::kMomentum,
             last_sent_gesture_.data.scroll_update.inertial_phase);
   EXPECT_GT(last_sent_gesture_.data.scroll_update.delta_x, 0.f);
 
diff --git a/content/browser/renderer_host/input/mouse_wheel_event_queue.cc b/content/browser/renderer_host/input/mouse_wheel_event_queue.cc
index 049f46f..1d95936 100644
--- a/content/browser/renderer_host/input/mouse_wheel_event_queue.cc
+++ b/content/browser/renderer_host/input/mouse_wheel_event_queue.cc
@@ -168,11 +168,11 @@
     if (event_sent_for_gesture_ack_->event.momentum_phase !=
         blink::WebMouseWheelEvent::kPhaseNone) {
       scroll_update.data.scroll_update.inertial_phase =
-          WebGestureEvent::kMomentumPhase;
+          WebGestureEvent::InertialPhaseState::kMomentum;
     } else if (event_sent_for_gesture_ack_->event.phase !=
                blink::WebMouseWheelEvent::kPhaseNone) {
       scroll_update.data.scroll_update.inertial_phase =
-          WebGestureEvent::kNonMomentumPhase;
+          WebGestureEvent::InertialPhaseState::kNonMomentum;
     }
     if (event_sent_for_gesture_ack_->event.scroll_by_page) {
       scroll_update.data.scroll_update.delta_units =
@@ -317,7 +317,7 @@
   // blink::WebMouseWheelEvent::kPhaseEnded are generated by the fling
   // controller to terminate touchpad flings.
   if (scroll_end.data.scroll_end.inertial_phase ==
-          WebGestureEvent::kMomentumPhase &&
+          WebGestureEvent::InertialPhaseState::kMomentum &&
       synthetic) {
     scroll_end.data.scroll_end.generated_by_fling_controller = true;
   }
diff --git a/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc b/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc
index d84e025..002441a 100644
--- a/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc
+++ b/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc
@@ -42,34 +42,34 @@
   EXPECT_EQ(kWheelScrollGlobalY, event->PositionInScreen().y);     \
   EXPECT_EQ(scroll_units, event->data.scroll_begin.delta_hint_units);
 
-#define EXPECT_GESTURE_SCROLL_BEGIN(event)          \
-  EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event);          \
-  EXPECT_FALSE(event->data.scroll_begin.synthetic); \
-  EXPECT_EQ(WebGestureEvent::kUnknownMomentumPhase, \
+#define EXPECT_GESTURE_SCROLL_BEGIN(event)                         \
+  EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event);                         \
+  EXPECT_FALSE(event->data.scroll_begin.synthetic);                \
+  EXPECT_EQ(WebGestureEvent::InertialPhaseState::kUnknownMomentum, \
             event->data.scroll_begin.inertial_phase);
 
-#define EXPECT_GESTURE_SCROLL_BEGIN_WITH_PHASE(event) \
-  EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event);            \
-  EXPECT_FALSE(event->data.scroll_begin.synthetic);   \
-  EXPECT_EQ(WebGestureEvent::kNonMomentumPhase,       \
+#define EXPECT_GESTURE_SCROLL_BEGIN_WITH_PHASE(event)          \
+  EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event);                     \
+  EXPECT_FALSE(event->data.scroll_begin.synthetic);            \
+  EXPECT_EQ(WebGestureEvent::InertialPhaseState::kNonMomentum, \
             event->data.scroll_begin.inertial_phase);
 
-#define EXPECT_SYNTHETIC_GESTURE_SCROLL_BEGIN(event) \
-  EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event);           \
-  EXPECT_TRUE(event->data.scroll_begin.synthetic);   \
-  EXPECT_EQ(WebGestureEvent::kNonMomentumPhase,      \
+#define EXPECT_SYNTHETIC_GESTURE_SCROLL_BEGIN(event)           \
+  EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event);                     \
+  EXPECT_TRUE(event->data.scroll_begin.synthetic);             \
+  EXPECT_EQ(WebGestureEvent::InertialPhaseState::kNonMomentum, \
             event->data.scroll_begin.inertial_phase);
 
-#define EXPECT_INERTIAL_GESTURE_SCROLL_BEGIN(event) \
-  EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event);          \
-  EXPECT_FALSE(event->data.scroll_begin.synthetic); \
-  EXPECT_EQ(WebGestureEvent::kMomentumPhase,        \
+#define EXPECT_INERTIAL_GESTURE_SCROLL_BEGIN(event)         \
+  EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event);                  \
+  EXPECT_FALSE(event->data.scroll_begin.synthetic);         \
+  EXPECT_EQ(WebGestureEvent::InertialPhaseState::kMomentum, \
             event->data.scroll_begin.inertial_phase);
 
 #define EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_BEGIN(event) \
   EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event);                    \
   EXPECT_TRUE(event->data.scroll_begin.synthetic);            \
-  EXPECT_EQ(WebGestureEvent::kMomentumPhase,                  \
+  EXPECT_EQ(WebGestureEvent::InertialPhaseState::kMomentum,   \
             event->data.scroll_begin.inertial_phase);
 
 #define EXPECT_GESTURE_SCROLL_UPDATE_IMPL(event)                    \
@@ -80,19 +80,19 @@
   EXPECT_EQ(kWheelScrollGlobalX, event->PositionInScreen().x);      \
   EXPECT_EQ(kWheelScrollGlobalY, event->PositionInScreen().y);
 
-#define EXPECT_GESTURE_SCROLL_UPDATE(event)         \
-  EXPECT_GESTURE_SCROLL_UPDATE_IMPL(event);         \
-  EXPECT_EQ(WebGestureEvent::kUnknownMomentumPhase, \
+#define EXPECT_GESTURE_SCROLL_UPDATE(event)                        \
+  EXPECT_GESTURE_SCROLL_UPDATE_IMPL(event);                        \
+  EXPECT_EQ(WebGestureEvent::InertialPhaseState::kUnknownMomentum, \
             event->data.scroll_update.inertial_phase);
 
-#define EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(event) \
-  EXPECT_GESTURE_SCROLL_UPDATE_IMPL(event);            \
-  EXPECT_EQ(WebGestureEvent::kNonMomentumPhase,        \
+#define EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(event)         \
+  EXPECT_GESTURE_SCROLL_UPDATE_IMPL(event);                    \
+  EXPECT_EQ(WebGestureEvent::InertialPhaseState::kNonMomentum, \
             event->data.scroll_update.inertial_phase);
 
-#define EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(event) \
-  EXPECT_GESTURE_SCROLL_UPDATE_IMPL(event);          \
-  EXPECT_EQ(WebGestureEvent::kMomentumPhase,         \
+#define EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(event)        \
+  EXPECT_GESTURE_SCROLL_UPDATE_IMPL(event);                 \
+  EXPECT_EQ(WebGestureEvent::InertialPhaseState::kMomentum, \
             event->data.scroll_update.inertial_phase);
 
 #define EXPECT_GESTURE_SCROLL_END_IMPL(event)                    \
@@ -103,35 +103,35 @@
   EXPECT_EQ(kWheelScrollGlobalX, event->PositionInScreen().x);   \
   EXPECT_EQ(kWheelScrollGlobalY, event->PositionInScreen().y);
 
-#define EXPECT_GESTURE_SCROLL_END(event)            \
-  EXPECT_GESTURE_SCROLL_END_IMPL(event);            \
-  EXPECT_FALSE(event->data.scroll_end.synthetic);   \
-  EXPECT_EQ(WebGestureEvent::kUnknownMomentumPhase, \
+#define EXPECT_GESTURE_SCROLL_END(event)                           \
+  EXPECT_GESTURE_SCROLL_END_IMPL(event);                           \
+  EXPECT_FALSE(event->data.scroll_end.synthetic);                  \
+  EXPECT_EQ(WebGestureEvent::InertialPhaseState::kUnknownMomentum, \
             event->data.scroll_end.inertial_phase);
 
-#define EXPECT_GESTURE_SCROLL_END_WITH_PHASE(event) \
-  EXPECT_GESTURE_SCROLL_END_IMPL(event);            \
-  EXPECT_FALSE(event->data.scroll_end.synthetic);   \
-  EXPECT_EQ(WebGestureEvent::kNonMomentumPhase,     \
+#define EXPECT_GESTURE_SCROLL_END_WITH_PHASE(event)            \
+  EXPECT_GESTURE_SCROLL_END_IMPL(event);                       \
+  EXPECT_FALSE(event->data.scroll_end.synthetic);              \
+  EXPECT_EQ(WebGestureEvent::InertialPhaseState::kNonMomentum, \
             event->data.scroll_end.inertial_phase);
 
-#define EXPECT_SYNTHETIC_GESTURE_SCROLL_END(event) \
-  EXPECT_GESTURE_SCROLL_END_IMPL(event);           \
-  EXPECT_TRUE(event->data.scroll_end.synthetic);   \
-  EXPECT_EQ(WebGestureEvent::kNonMomentumPhase,    \
+#define EXPECT_SYNTHETIC_GESTURE_SCROLL_END(event)             \
+  EXPECT_GESTURE_SCROLL_END_IMPL(event);                       \
+  EXPECT_TRUE(event->data.scroll_end.synthetic);               \
+  EXPECT_EQ(WebGestureEvent::InertialPhaseState::kNonMomentum, \
             event->data.scroll_end.inertial_phase);
 
-#define EXPECT_INERTIAL_GESTURE_SCROLL_END(event) \
-  EXPECT_GESTURE_SCROLL_END_IMPL(event);          \
-  EXPECT_FALSE(event->data.scroll_end.synthetic); \
-  EXPECT_EQ(WebGestureEvent::kMomentumPhase,      \
+#define EXPECT_INERTIAL_GESTURE_SCROLL_END(event)           \
+  EXPECT_GESTURE_SCROLL_END_IMPL(event);                    \
+  EXPECT_FALSE(event->data.scroll_end.synthetic);           \
+  EXPECT_EQ(WebGestureEvent::InertialPhaseState::kMomentum, \
             event->data.scroll_end.inertial_phase);
 
 #if defined(CHROME_OS)
 #define EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_END(event) \
   EXPECT_GESTURE_SCROLL_END_IMPL(event);                    \
   EXPECT_TRUE(event->data.scroll_end.synthetic);            \
-  EXPECT_EQ(WebGestureEvent::kMomentumPhase,                \
+  EXPECT_EQ(WebGestureEvent::InertialPhaseState::kMomentum, \
             event->data.scroll_end.inertial_phase);         \
   EXPECT_TRUE(event->data.scroll_end.generated_by_fling_controller);
 #endif
diff --git a/content/browser/renderer_host/overscroll_controller.cc b/content/browser/renderer_host/overscroll_controller.cc
index fd2d8bf..f1e3ec1 100644
--- a/content/browser/renderer_host/overscroll_controller.cc
+++ b/content/browser/renderer_host/overscroll_controller.cc
@@ -40,7 +40,7 @@
   const blink::WebGestureEvent& gesture =
       static_cast<const blink::WebGestureEvent&>(event);
   return gesture.data.scroll_update.inertial_phase ==
-         blink::WebGestureEvent::kMomentumPhase;
+         blink::WebGestureEvent::InertialPhaseState::kMomentum;
 }
 
 float ClampAbsoluteValue(float value, float max_abs) {
@@ -266,7 +266,7 @@
     const blink::WebGestureEvent gesture_event =
         static_cast<const blink::WebGestureEvent&>(event);
     if (gesture_event.data.scroll_update.inertial_phase !=
-        blink::WebGestureEvent::kMomentumPhase)
+        blink::WebGestureEvent::InertialPhaseState::kMomentum)
       return false;
   }
 
@@ -278,7 +278,7 @@
     const blink::WebGestureEvent gesture_event =
         static_cast<const blink::WebGestureEvent&>(event);
     if (gesture_event.data.scroll_end.inertial_phase !=
-        blink::WebGestureEvent::kMomentumPhase)
+        blink::WebGestureEvent::InertialPhaseState::kMomentum)
       return false;
   }
 
@@ -358,9 +358,10 @@
       // when the scrolling is in inertial state.
       const blink::WebGestureEvent gesture_event =
           static_cast<const blink::WebGestureEvent&>(event);
-      bool reset_scroll_state = !IsGestureEventFromTouchpad(event) ||
-                                (gesture_event.data.scroll_end.inertial_phase ==
-                                 blink::WebGestureEvent::kMomentumPhase);
+      bool reset_scroll_state =
+          !IsGestureEventFromTouchpad(event) ||
+          (gesture_event.data.scroll_end.inertial_phase ==
+           blink::WebGestureEvent::InertialPhaseState::kMomentum);
 
       if (reset_scroll_state)
         ResetScrollState();
diff --git a/content/browser/renderer_host/overscroll_controller_unittest.cc b/content/browser/renderer_host/overscroll_controller_unittest.cc
index 25c2a238..41407c7 100644
--- a/content/browser/renderer_host/overscroll_controller_unittest.cc
+++ b/content/browser/renderer_host/overscroll_controller_unittest.cc
@@ -73,7 +73,7 @@
     event->SetTimeStamp(timestamp);
     if (inertial_update) {
       event->data.scroll_update.inertial_phase =
-          blink::WebGestureEvent::kMomentumPhase;
+          blink::WebGestureEvent::InertialPhaseState::kMomentum;
     }
     current_event_ = std::move(event);
     return controller_->WillHandleEvent(*current_event_);
diff --git a/content/browser/renderer_host/render_widget_host_input_event_router.cc b/content/browser/renderer_host/render_widget_host_input_event_router.cc
index 1143fee4..4fcdf5f 100644
--- a/content/browser/renderer_host/render_widget_host_input_event_router.cc
+++ b/content/browser/renderer_host/render_widget_host_input_event_router.cc
@@ -1245,7 +1245,7 @@
     case blink::WebInputEvent::kGesturePinchEnd:
       DCHECK_EQ(blink::WebGestureDevice::kTouchscreen, event.SourceDevice());
       scroll_end.data.scroll_end.inertial_phase =
-          blink::WebGestureEvent::kUnknownMomentumPhase;
+          blink::WebGestureEvent::InertialPhaseState::kUnknownMomentum;
       scroll_end.data.scroll_end.delta_units =
           blink::WebScrollGranularity::kScrollByPrecisePixel;
       break;
@@ -1264,7 +1264,7 @@
                                     blink::WebInputEvent::kNoModifiers,
                                     base::TimeTicks::Now(), source_device);
   scroll_end.data.scroll_end.inertial_phase =
-      blink::WebGestureEvent::kUnknownMomentumPhase;
+      blink::WebGestureEvent::InertialPhaseState::kUnknownMomentum;
   scroll_end.data.scroll_end.delta_units =
       blink::WebScrollGranularity::kScrollByPrecisePixel;
   view->ProcessGestureEvent(
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
index ab2373f..e315aba 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -1675,7 +1675,7 @@
       if (gesture_event.GetType() ==
               blink::WebInputEvent::kGestureScrollUpdate &&
           gesture_event.data.scroll_update.inertial_phase ==
-              blink::WebGestureEvent::kMomentumPhase) {
+              blink::WebGestureEvent::InertialPhaseState::kMomentum) {
         host_->StopFling();
       }
 
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 ab248a1..3765d844 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -1001,7 +1001,7 @@
     // https://crbug.com/797855
     if (event_type == blink::WebInputEvent::kGestureScrollUpdate &&
         event.data.scroll_update.inertial_phase ==
-            blink::WebGestureEvent::kMomentumPhase &&
+            blink::WebGestureEvent::InertialPhaseState::kMomentum &&
         overscroll_controller_->overscroll_mode() != OVERSCROLL_NONE) {
       StopFling();
     }
diff --git a/content/browser/renderer_host/render_widget_host_view_base.cc b/content/browser/renderer_host/render_widget_host_view_base.cc
index b065a25..90a2587 100644
--- a/content/browser/renderer_host/render_widget_host_view_base.cc
+++ b/content/browser/renderer_host/render_widget_host_view_base.cc
@@ -111,7 +111,7 @@
   if (!processed &&
       event.GetType() == blink::WebInputEvent::kGestureScrollUpdate &&
       event.data.scroll_update.inertial_phase ==
-          blink::WebGestureEvent::kMomentumPhase &&
+          blink::WebGestureEvent::InertialPhaseState::kMomentum &&
       event.SourceDevice() != blink::WebGestureDevice::kSyntheticAutoscroll) {
     StopFling();
     view_stopped_flinging_for_test_ = true;
diff --git a/content/browser/web_package/signed_exchange_handler_unittest.cc b/content/browser/web_package/signed_exchange_handler_unittest.cc
index e2095ed..b2423f8 100644
--- a/content/browser/web_package/signed_exchange_handler_unittest.cc
+++ b/content/browser/web_package/signed_exchange_handler_unittest.cc
@@ -39,6 +39,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 
 using testing::_;
+using testing::DoAll;
 using testing::ElementsAre;
 using testing::Property;
 using testing::Return;
diff --git a/content/browser/webauth/authenticator_common.cc b/content/browser/webauth/authenticator_common.cc
index 9b695b9..21eca3df 100644
--- a/content/browser/webauth/authenticator_common.cc
+++ b/content/browser/webauth/authenticator_common.cc
@@ -590,7 +590,7 @@
       // requests if cryptotoken sends a new one such that requests from before
       // a navigation event do not prevent new requests. See
       // https://crbug.com/935480.
-      Cancel();
+      CancelWithStatus(blink::mojom::AuthenticatorStatus::NOT_ALLOWED_ERROR);
     } else {
       std::move(callback).Run(
           blink::mojom::AuthenticatorStatus::PENDING_REQUEST, nullptr);
@@ -768,7 +768,7 @@
                      weak_factory_.GetWeakPtr()));
 
   request_delegate_->RegisterActionCallbacks(
-      base::BindOnce(&AuthenticatorCommon::Cancel,
+      base::BindOnce(&AuthenticatorCommon::OnCancelFromUI,
                      weak_factory_.GetWeakPtr()) /* cancel_callback */,
       base::BindRepeating(
           &device::FidoRequestHandlerBase::StartAuthenticatorRequest,
@@ -800,7 +800,7 @@
       // requests if cryptotoken sends a new one such that requests from before
       // a navigation event do not prevent new requests. See
       // https://crbug.com/935480.
-      Cancel();
+      CancelWithStatus(blink::mojom::AuthenticatorStatus::NOT_ALLOWED_ERROR);
     } else {
       std::move(callback).Run(
           blink::mojom::AuthenticatorStatus::PENDING_REQUEST, nullptr);
@@ -911,7 +911,7 @@
                      weak_factory_.GetWeakPtr()));
 
   request_delegate_->RegisterActionCallbacks(
-      base::BindOnce(&AuthenticatorCommon::Cancel,
+      base::BindOnce(&AuthenticatorCommon::OnCancelFromUI,
                      weak_factory_.GetWeakPtr()) /* cancel_callback */,
       base::BindRepeating(
           &device::FidoRequestHandlerBase::StartAuthenticatorRequest,
@@ -978,6 +978,10 @@
 #endif
 }
 
+void AuthenticatorCommon::Cancel() {
+  CancelWithStatus(blink::mojom::AuthenticatorStatus::ABORT_ERROR);
+}
+
 // Callback to handle the async registration response from a U2fDevice.
 void AuthenticatorCommon::OnRegisterResponse(
     device::FidoReturnCode status_code,
@@ -1340,22 +1344,9 @@
     request_->CancelActiveAuthenticators();
     return;
   }
-
-  FailWithErrorAndCleanup();
+  CancelWithStatus(error_awaiting_user_acknowledgement_);
 }  // namespace content
 
-void AuthenticatorCommon::FailWithErrorAndCleanup() {
-  DCHECK(make_credential_response_callback_ ||
-         get_assertion_response_callback_);
-  if (make_credential_response_callback_) {
-    InvokeCallbackAndCleanup(std::move(make_credential_response_callback_),
-                             error_awaiting_user_acknowledgement_);
-  } else if (get_assertion_response_callback_) {
-    InvokeCallbackAndCleanup(std::move(get_assertion_response_callback_),
-                             error_awaiting_user_acknowledgement_);
-  }
-}
-
 // TODO(crbug.com/814418): Add web tests to verify timeouts are
 // indistinguishable from NOT_ALLOWED_ERROR cases.
 void AuthenticatorCommon::OnTimeout() {
@@ -1370,12 +1361,22 @@
       AuthenticatorRequestClientDelegate::InterestingFailureReason::kTimeout);
 }
 
-void AuthenticatorCommon::Cancel() {
+void AuthenticatorCommon::CancelWithStatus(
+    blink::mojom::AuthenticatorStatus status) {
   // If response callback is invoked already, then ignore cancel request.
   if (!make_credential_response_callback_ && !get_assertion_response_callback_)
     return;
+  if (make_credential_response_callback_) {
+    InvokeCallbackAndCleanup(std::move(make_credential_response_callback_),
+                             status);
+  } else if (get_assertion_response_callback_) {
+    InvokeCallbackAndCleanup(std::move(get_assertion_response_callback_),
+                             status);
+  }
+}
 
-  FailWithErrorAndCleanup();
+void AuthenticatorCommon::OnCancelFromUI() {
+  CancelWithStatus(error_awaiting_user_acknowledgement_);
 }
 
 void AuthenticatorCommon::InvokeCallbackAndCleanup(
diff --git a/content/browser/webauth/authenticator_common.h b/content/browser/webauth/authenticator_common.h
index b7b600d..9bd5a10b 100644
--- a/content/browser/webauth/authenticator_common.h
+++ b/content/browser/webauth/authenticator_common.h
@@ -83,6 +83,7 @@
   void IsUserVerifyingPlatformAuthenticatorAvailable(
       blink::mojom::Authenticator::
           IsUserVerifyingPlatformAuthenticatorAvailableCallback callback);
+  void Cancel();
 
   // Synchronous implementation of
   // IsUserVerifyingPlatformAuthenticatorAvailable.
@@ -149,12 +150,12 @@
           response_data,
       base::Optional<device::FidoTransportProtocol> transport_used);
 
-  void FailWithErrorAndCleanup();
-
   // Runs when timer expires and cancels all issued requests to a U2fDevice.
   void OnTimeout();
+  // Cancels the currently pending request (if any) with the supplied status.
+  void CancelWithStatus(blink::mojom::AuthenticatorStatus status);
   // Runs when the user cancels WebAuthN request via UI dialog.
-  void Cancel();
+  void OnCancelFromUI();
 
   // Called when a GetAssertion has completed, either because an allow_list was
   // used and so an answer is returned directly, or because the user selected an
diff --git a/content/browser/webauth/authenticator_impl.cc b/content/browser/webauth/authenticator_impl.cc
index 3b1488d..fa58ff2 100644
--- a/content/browser/webauth/authenticator_impl.cc
+++ b/content/browser/webauth/authenticator_impl.cc
@@ -77,6 +77,10 @@
       std::move(callback));
 }
 
+void AuthenticatorImpl::Cancel() {
+  authenticator_common_->Cancel();
+}
+
 void AuthenticatorImpl::DidFinishNavigation(
     NavigationHandle* navigation_handle) {
   // If the RenderFrameHost itself is navigated then this function will cause
diff --git a/content/browser/webauth/authenticator_impl.h b/content/browser/webauth/authenticator_impl.h
index aaf01bd..1f1a0af 100644
--- a/content/browser/webauth/authenticator_impl.h
+++ b/content/browser/webauth/authenticator_impl.h
@@ -79,6 +79,7 @@
                     GetAssertionCallback callback) override;
   void IsUserVerifyingPlatformAuthenticatorAvailable(
       IsUserVerifyingPlatformAuthenticatorAvailableCallback callback) override;
+  void Cancel() override;
 
   // WebContentsObserver:
   void DidFinishNavigation(NavigationHandle* navigation_handle) override;
diff --git a/content/browser/webauth/webauth_browsertest.cc b/content/browser/webauth/webauth_browsertest.cc
index 3d48996..138f417d 100644
--- a/content/browser/webauth/webauth_browsertest.cc
+++ b/content/browser/webauth/webauth_browsertest.cc
@@ -97,6 +97,9 @@
     "webauth: InvalidStateError: The user attempted to use an authenticator "
     "that recognized none of the provided credentials.";
 
+constexpr char kAbortErrorMessage[] =
+    "webauth: AbortError: The user aborted a request.";
+
 // Templates to be used with base::ReplaceStringPlaceholders. Can be
 // modified to include up to 9 replacements. The default values for
 // any additional replacements added should also be added to the
@@ -123,6 +126,29 @@
     "         e => window.domAutomationController.send("
     "                  'webauth: ' + e.toString()));";
 
+constexpr char kCreatePublicKeyWithAbortSignalTemplate[] =
+    "navigator.credentials.create({ publicKey: {"
+    "  challenge: new TextEncoder().encode('climb a mountain'),"
+    "  rp: { id: '$3', name: 'Acme', icon: '$7'},"
+    "  user: { "
+    "    id: new TextEncoder().encode('1098237235409872'),"
+    "    name: 'avery.a.jones@example.com',"
+    "    displayName: 'Avery A. Jones', "
+    "    icon: '$8'},"
+    "  pubKeyCredParams: [{ type: 'public-key', alg: '$4'}],"
+    "  timeout: 1000,"
+    "  excludeCredentials: [],"
+    "  authenticatorSelection: {"
+    "     requireResidentKey: $1,"
+    "     userVerification: '$2',"
+    "     authenticatorAttachment: '$5',"
+    "  },"
+    "  attestation: '$6',"
+    "}, signal: $9}"
+    ").then(c => window.domAutomationController.send('webauth: OK'),"
+    "       e => window.domAutomationController.send("
+    "                'webauth: ' + e.toString()));";
+
 constexpr char kPlatform[] = "platform";
 constexpr char kCrossPlatform[] = "cross-platform";
 constexpr char kPreferredVerification[] = "preferred";
@@ -138,6 +164,7 @@
   const char* attestation = "none";
   const char* rp_icon = "https://pics.acme.com/00/p/aBjjjpqPb.png";
   const char* user_icon = "https://pics.acme.com/00/p/aBjjjpqPb.png";
+  const char* signal = "";
 };
 
 std::string BuildCreateCallWithParameters(const CreateParameters& parameters) {
@@ -150,8 +177,13 @@
   substitutions.push_back(parameters.attestation);
   substitutions.push_back(parameters.rp_icon);
   substitutions.push_back(parameters.user_icon);
-  return base::ReplaceStringPlaceholders(kCreatePublicKeyTemplate,
-                                         substitutions, nullptr);
+  if (strlen(parameters.signal) == 0) {
+    return base::ReplaceStringPlaceholders(kCreatePublicKeyTemplate,
+                                           substitutions, nullptr);
+  }
+  substitutions.push_back(parameters.signal);
+  return base::ReplaceStringPlaceholders(
+      kCreatePublicKeyWithAbortSignalTemplate, substitutions, nullptr);
 }
 
 constexpr char kGetPublicKeyTemplate[] =
@@ -165,6 +197,17 @@
     "        e => window.domAutomationController.send("
     "                  'webauth: ' + e.toString()));";
 
+constexpr char kGetPublicKeyWithAbortSignalTemplate[] =
+    "navigator.credentials.get({ publicKey: {"
+    "  challenge: new TextEncoder().encode('climb a mountain'),"
+    "  rpId: 'acme.com',"
+    "  timeout: 1000,"
+    "  userVerification: '$1',"
+    "  $2},"
+    "  signal: $3"
+    "}).catch(c => window.domAutomationController.send("
+    "                  'webauth: ' + c.toString()));";
+
 // Default values for kGetPublicKeyTemplate.
 struct GetParameters {
   const char* user_verification = kPreferredVerification;
@@ -172,14 +215,20 @@
       "allowCredentials: [{ type: 'public-key',"
       "     id: new TextEncoder().encode('allowedCredential'),"
       "     transports: ['usb', 'nfc', 'ble']}]";
+  const char* signal = "";
 };
 
 std::string BuildGetCallWithParameters(const GetParameters& parameters) {
-  std::vector<std::string> substititions;
-  substititions.push_back(parameters.user_verification);
-  substititions.push_back(parameters.allow_credentials);
-  return base::ReplaceStringPlaceholders(kGetPublicKeyTemplate, substititions,
-                                         nullptr);
+  std::vector<std::string> substitutions;
+  substitutions.push_back(parameters.user_verification);
+  substitutions.push_back(parameters.allow_credentials);
+  if (strlen(parameters.signal) == 0) {
+    return base::ReplaceStringPlaceholders(kGetPublicKeyTemplate, substitutions,
+                                           nullptr);
+  }
+  substitutions.push_back(parameters.signal);
+  return base::ReplaceStringPlaceholders(kGetPublicKeyWithAbortSignalTemplate,
+                                         substitutions, nullptr);
 }
 
 // Helper class that executes the given |closure| the very last moment before
@@ -825,6 +874,63 @@
     ASSERT_EQ(kTimeoutErrorMessage, result);
   }
 }
+// Tests that when navigator.credentials.create() is called with abort
+// signal's aborted flag not set, we get a SUCCESS.
+IN_PROC_BROWSER_TEST_F(WebAuthJavascriptClientBrowserTest,
+                       CreatePublicKeyCredentialWithAbortNotSet) {
+  for (const auto protocol : kAllProtocols) {
+    device::test::ScopedVirtualFidoDevice virtual_device;
+    virtual_device.SetSupportedProtocol(protocol);
+
+    CreateParameters parameters;
+    parameters.signal = "authAbortSignal";
+    std::string result;
+    std::string script =
+        "authAbortController = new AbortController();"
+        "authAbortSignal = authAbortController.signal;" +
+        BuildCreateCallWithParameters(parameters);
+
+    ASSERT_TRUE(content::ExecuteScriptAndExtractString(
+        shell()->web_contents()->GetMainFrame(), script, &result));
+    ASSERT_EQ("webauth: OK", result);
+  }
+}
+
+// Tests that when navigator.credentials.create() is called with abort
+// signal's aborted flag set before sending request, we get an AbortError.
+IN_PROC_BROWSER_TEST_F(WebAuthJavascriptClientBrowserTest,
+                       CreatePublicKeyCredentialWithAbortSetBeforeCreate) {
+  CreateParameters parameters;
+  parameters.signal = "authAbortSignal";
+  std::string result;
+  std::string script =
+      "authAbortController = new AbortController();"
+      "authAbortSignal = authAbortController.signal;"
+      "authAbortController.abort();" +
+      BuildCreateCallWithParameters(parameters);
+
+  ASSERT_TRUE(content::ExecuteScriptAndExtractString(
+      shell()->web_contents()->GetMainFrame(), script, &result));
+  ASSERT_EQ(kAbortErrorMessage, result.substr(0, strlen(kAbortErrorMessage)));
+}
+
+// Tests that when navigator.credentials.create() is called with abort
+// signal's aborted flag set after sending request, we get an AbortError.
+IN_PROC_BROWSER_TEST_F(WebAuthJavascriptClientBrowserTest,
+                       CreatePublicKeyCredentialWithAbortSetAfterCreate) {
+  CreateParameters parameters;
+  parameters.signal = "authAbortSignal";
+  std::string result;
+  std::string script =
+      "authAbortController = new AbortController();"
+      "authAbortSignal = authAbortController.signal;" +
+      BuildCreateCallWithParameters(parameters) +
+      "authAbortController.abort();";
+
+  ASSERT_TRUE(content::ExecuteScriptAndExtractString(
+      shell()->web_contents()->GetMainFrame(), script, &result));
+  ASSERT_EQ(kAbortErrorMessage, result.substr(0, strlen(kAbortErrorMessage)));
+}
 
 // Tests that when navigator.credentials.get() is called with user verification
 // required, we get an InvalidStateError because the virtual device isn't
@@ -861,6 +967,64 @@
   ASSERT_EQ(kResidentCredentialsErrorMessage, result);
 }
 
+// Tests that when navigator.credentials.get() is called with abort
+// signal's aborted flag not set, we get a kInvalidStateError, because the
+// virtual device does not have any registered credentials.
+IN_PROC_BROWSER_TEST_F(WebAuthJavascriptClientBrowserTest,
+                       GetPublicKeyCredentialWithAbortNotSet) {
+  for (const auto protocol : kAllProtocols) {
+    device::test::ScopedVirtualFidoDevice virtual_device;
+    virtual_device.SetSupportedProtocol(protocol);
+
+    GetParameters parameters;
+    parameters.signal = "authAbortSignal";
+    std::string result;
+    std::string script =
+        "authAbortController = new AbortController();"
+        "authAbortSignal = authAbortController.signal;" +
+        BuildGetCallWithParameters(parameters);
+
+    ASSERT_TRUE(content::ExecuteScriptAndExtractString(
+        shell()->web_contents()->GetMainFrame(), script, &result));
+    ASSERT_EQ(kInvalidStateError, result);
+  }
+}
+
+// Tests that when navigator.credentials.get() is called with abort
+// signal's aborted flag set before sending request, we get an AbortError.
+IN_PROC_BROWSER_TEST_F(WebAuthJavascriptClientBrowserTest,
+                       GetPublicKeyCredentialWithAbortSetBeforeGet) {
+  GetParameters parameters;
+  parameters.signal = "authAbortSignal";
+  std::string result;
+  std::string script =
+      "authAbortController = new AbortController();"
+      "authAbortSignal = authAbortController.signal;"
+      "authAbortController.abort();" +
+      BuildGetCallWithParameters(parameters);
+
+  ASSERT_TRUE(content::ExecuteScriptAndExtractString(
+      shell()->web_contents()->GetMainFrame(), script, &result));
+  ASSERT_EQ(kAbortErrorMessage, result.substr(0, strlen(kAbortErrorMessage)));
+}
+
+// Tests that when navigator.credentials.get() is called with abort
+// signal's aborted flag set after sending request, we get an AbortError.
+IN_PROC_BROWSER_TEST_F(WebAuthJavascriptClientBrowserTest,
+                       GetPublicKeyCredentialWithAbortSetAfterGet) {
+  GetParameters parameters;
+  parameters.signal = "authAbortSignal";
+  std::string result;
+  std::string script =
+      "authAbortController = new AbortController();"
+      "authAbortSignal = authAbortController.signal;" +
+      BuildGetCallWithParameters(parameters) + "authAbortController.abort();";
+
+  ASSERT_TRUE(content::ExecuteScriptAndExtractString(
+      shell()->web_contents()->GetMainFrame(), script, &result));
+  ASSERT_EQ(kAbortErrorMessage, result.substr(0, strlen(kAbortErrorMessage)));
+}
+
 // WebAuthBrowserBleDisabledTest
 // ----------------------------------------------
 
diff --git a/content/child/BUILD.gn b/content/child/BUILD.gn
index 46d8180..d696471 100644
--- a/content/child/BUILD.gn
+++ b/content/child/BUILD.gn
@@ -128,18 +128,15 @@
     "//v8",
   ]
 
-  if (!use_default_render_theme) {
-    sources -= [
-      "webthemeengine_impl_default.cc",
-      "webthemeengine_impl_default.h",
-    ]
-  }
-
   if (is_android) {
     deps += [ "//third_party/android_sdk:cpu_features" ]
     if (notouch_build) {
       configs += [ ":notouch_config" ]
     }
+    sources -= [
+      "webthemeengine_impl_default.cc",
+      "webthemeengine_impl_default.h",
+    ]
   }
 
   if (is_linux) {
diff --git a/content/child/blink_platform_impl.cc b/content/child/blink_platform_impl.cc
index e65e362..3acf8c7 100644
--- a/content/child/blink_platform_impl.cc
+++ b/content/child/blink_platform_impl.cc
@@ -52,6 +52,16 @@
 #include "ui/base/layout.h"
 #include "ui/events/gestures/blink/web_gesture_curve_impl.h"
 
+#if defined(OS_ANDROID)
+#include "content/child/webthemeengine_impl_android.h"
+#else
+#include "content/child/webthemeengine_impl_default.h"
+#endif
+
+#if defined(OS_MACOSX)
+#include "content/child/webthemeengine_impl_mac.h"
+#endif
+
 using blink::WebData;
 using blink::WebLocalizedString;
 using blink::WebString;
@@ -61,7 +71,19 @@
 
 namespace content {
 
-static int ToMessageID(WebLocalizedString::Name name) {
+namespace {
+
+std::unique_ptr<blink::WebThemeEngine> GetWebThemeEngine() {
+#if defined(OS_ANDROID)
+  return std::make_unique<WebThemeEngineAndroid>();
+#elif defined(OS_MACOSX)
+  return std::make_unique<WebThemeEngineMac>();
+#else
+  return std::make_unique<WebThemeEngineDefault>();
+#endif
+}
+
+int ToMessageID(WebLocalizedString::Name name) {
   switch (name) {
     case WebLocalizedString::kAXAMPMFieldText:
       return IDS_AX_AM_PM_FIELD_TEXT;
@@ -319,30 +341,6 @@
   return -1;
 }
 
-// TODO(skyostil): Ensure that we always have an active task runner when
-// constructing the platform.
-BlinkPlatformImpl::BlinkPlatformImpl()
-    : BlinkPlatformImpl(base::ThreadTaskRunnerHandle::IsSet()
-                            ? base::ThreadTaskRunnerHandle::Get()
-                            : nullptr,
-                        nullptr) {}
-
-BlinkPlatformImpl::BlinkPlatformImpl(
-    scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner,
-    scoped_refptr<base::SingleThreadTaskRunner> io_thread_task_runner)
-    : main_thread_task_runner_(std::move(main_thread_task_runner)),
-      io_thread_task_runner_(std::move(io_thread_task_runner)) {}
-
-BlinkPlatformImpl::~BlinkPlatformImpl() {
-}
-
-void BlinkPlatformImpl::RecordAction(const blink::UserMetricsAction& name) {
-  if (ChildThread* child_thread = ChildThread::Get())
-    child_thread->RecordComputedAction(name.Action());
-}
-
-namespace {
-
 WebData loadAudioSpatializationResource(const char* name) {
 #ifdef IDR_AUDIO_SPATIALIZATION_COMPOSITE
   if (!strcmp(name, "Composite")) {
@@ -529,6 +527,28 @@
 
 }  // namespace
 
+// TODO(skyostil): Ensure that we always have an active task runner when
+// constructing the platform.
+BlinkPlatformImpl::BlinkPlatformImpl()
+    : BlinkPlatformImpl(base::ThreadTaskRunnerHandle::IsSet()
+                            ? base::ThreadTaskRunnerHandle::Get()
+                            : nullptr,
+                        nullptr) {}
+
+BlinkPlatformImpl::BlinkPlatformImpl(
+    scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner,
+    scoped_refptr<base::SingleThreadTaskRunner> io_thread_task_runner)
+    : main_thread_task_runner_(std::move(main_thread_task_runner)),
+      io_thread_task_runner_(std::move(io_thread_task_runner)),
+      native_theme_engine_(GetWebThemeEngine()) {}
+
+BlinkPlatformImpl::~BlinkPlatformImpl() {}
+
+void BlinkPlatformImpl::RecordAction(const blink::UserMetricsAction& name) {
+  if (ChildThread* child_thread = ChildThread::Get())
+    child_thread->RecordComputedAction(name.Action());
+}
+
 WebData BlinkPlatformImpl::GetDataResource(const char* name) {
   // Some clients will call into this method with an empty |name| when they have
   // optional resources.  For example, the PopupMenuChromium code can have icons
@@ -626,7 +646,7 @@
 }
 
 WebThemeEngine* BlinkPlatformImpl::ThemeEngine() {
-  return &native_theme_engine_;
+  return native_theme_engine_.get();
 }
 
 base::File BlinkPlatformImpl::DatabaseOpenFile(
diff --git a/content/child/blink_platform_impl.h b/content/child/blink_platform_impl.h
index aa60edd..f114331 100644
--- a/content/child/blink_platform_impl.h
+++ b/content/child/blink_platform_impl.h
@@ -23,16 +23,6 @@
 #include "third_party/blink/public/public_buildflags.h"
 #include "ui/base/layout.h"
 
-#if BUILDFLAG(USE_DEFAULT_RENDER_THEME)
-#include "content/child/webthemeengine_impl_default.h"
-#elif defined(OS_WIN)
-#include "content/child/webthemeengine_impl_win.h"
-#elif defined(OS_MACOSX)
-#include "content/child/webthemeengine_impl_mac.h"
-#elif defined(OS_ANDROID)
-#include "content/child/webthemeengine_impl_android.h"
-#endif
-
 namespace content {
 
 class WebCryptoImpl;
@@ -86,7 +76,7 @@
  private:
   scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_;
   scoped_refptr<base::SingleThreadTaskRunner> io_thread_task_runner_;
-  WebThemeEngineImpl native_theme_engine_;
+  std::unique_ptr<blink::WebThemeEngine> native_theme_engine_;
   webcrypto::WebCryptoImpl web_crypto_;
   media::WebMediaCapabilitiesClientImpl media_capabilities_client_;
 };
diff --git a/content/child/webthemeengine_impl_android.cc b/content/child/webthemeengine_impl_android.cc
index f4602f53..e767d24 100644
--- a/content/child/webthemeengine_impl_android.cc
+++ b/content/child/webthemeengine_impl_android.cc
@@ -166,7 +166,9 @@
   }
 }
 
-blink::WebSize WebThemeEngineImpl::GetSize(WebThemeEngine::Part part) {
+WebThemeEngineAndroid::~WebThemeEngineAndroid() = default;
+
+blink::WebSize WebThemeEngineAndroid::GetSize(WebThemeEngine::Part part) {
   switch (part) {
     case WebThemeEngine::kPartScrollbarHorizontalThumb:
     case WebThemeEngine::kPartScrollbarVerticalThumb: {
@@ -184,7 +186,7 @@
   }
 }
 
-void WebThemeEngineImpl::GetOverlayScrollbarStyle(ScrollbarStyle* style) {
+void WebThemeEngineAndroid::GetOverlayScrollbarStyle(ScrollbarStyle* style) {
   // TODO(bokan): Android scrollbars on non-composited scrollers don't
   // currently fade out so the fadeOutDuration and Delay  Now that this has
   // been added into Blink for other platforms we should plumb that through for
@@ -202,7 +204,7 @@
   }
 }
 
-void WebThemeEngineImpl::Paint(
+void WebThemeEngineAndroid::Paint(
     cc::PaintCanvas* canvas,
     WebThemeEngine::Part part,
     WebThemeEngine::State state,
diff --git a/content/child/webthemeengine_impl_android.h b/content/child/webthemeengine_impl_android.h
index ede02ba..9fb867bf 100644
--- a/content/child/webthemeengine_impl_android.h
+++ b/content/child/webthemeengine_impl_android.h
@@ -9,9 +9,10 @@
 
 namespace content {
 
-class WebThemeEngineImpl : public blink::WebThemeEngine {
+class WebThemeEngineAndroid : public blink::WebThemeEngine {
  public:
   // WebThemeEngine methods:
+  ~WebThemeEngineAndroid() override;
   blink::WebSize GetSize(blink::WebThemeEngine::Part) override;
   void GetOverlayScrollbarStyle(
       blink::WebThemeEngine::ScrollbarStyle*) override;
diff --git a/content/child/webthemeengine_impl_default.cc b/content/child/webthemeengine_impl_default.cc
index ecda4fe..9aba2a5 100644
--- a/content/child/webthemeengine_impl_default.cc
+++ b/content/child/webthemeengine_impl_default.cc
@@ -203,7 +203,9 @@
   }
 }
 
-blink::WebSize WebThemeEngineImpl::GetSize(WebThemeEngine::Part part) {
+WebThemeEngineDefault::~WebThemeEngineDefault() = default;
+
+blink::WebSize WebThemeEngineDefault::GetSize(WebThemeEngine::Part part) {
   ui::NativeTheme::ExtraParams extra;
   ui::NativeTheme::Part native_theme_part = NativeThemePart(part);
 #if defined(OS_WIN)
@@ -228,7 +230,7 @@
       native_theme_part, ui::NativeTheme::kNormal, extra);
 }
 
-void WebThemeEngineImpl::Paint(
+void WebThemeEngineDefault::Paint(
     cc::PaintCanvas* canvas,
     WebThemeEngine::Part part,
     WebThemeEngine::State state,
@@ -242,7 +244,7 @@
       native_theme_extra_params);
 }
 
-void WebThemeEngineImpl::GetOverlayScrollbarStyle(ScrollbarStyle* style) {
+void WebThemeEngineDefault::GetOverlayScrollbarStyle(ScrollbarStyle* style) {
   style->fade_out_delay = ui::kOverlayScrollbarFadeDelay;
   style->fade_out_duration = ui::kOverlayScrollbarFadeDuration;
   // The other fields in this struct are used only on Android to draw solid
@@ -250,24 +252,24 @@
   // NativeTheme so these fields are unused.
 }
 
-bool WebThemeEngineImpl::SupportsNinePatch(Part part) const {
+bool WebThemeEngineDefault::SupportsNinePatch(Part part) const {
   return ui::NativeTheme::GetInstanceForWeb()->SupportsNinePatch(
       NativeThemePart(part));
 }
 
-blink::WebSize WebThemeEngineImpl::NinePatchCanvasSize(Part part) const {
+blink::WebSize WebThemeEngineDefault::NinePatchCanvasSize(Part part) const {
   return ui::NativeTheme::GetInstanceForWeb()->GetNinePatchCanvasSize(
       NativeThemePart(part));
 }
 
-blink::WebRect WebThemeEngineImpl::NinePatchAperture(Part part) const {
+blink::WebRect WebThemeEngineDefault::NinePatchAperture(Part part) const {
   return ui::NativeTheme::GetInstanceForWeb()->GetNinePatchAperture(
       NativeThemePart(part));
 }
 
 #if defined(OS_WIN)
 // static
-void WebThemeEngineImpl::cacheScrollBarMetrics(
+void WebThemeEngineDefault::cacheScrollBarMetrics(
     int32_t vertical_scroll_bar_width,
     int32_t horizontal_scroll_bar_height,
     int32_t vertical_arrow_bitmap_height,
diff --git a/content/child/webthemeengine_impl_default.h b/content/child/webthemeengine_impl_default.h
index ebe4c36..51e07200 100644
--- a/content/child/webthemeengine_impl_default.h
+++ b/content/child/webthemeengine_impl_default.h
@@ -12,9 +12,10 @@
 
 namespace content {
 
-class WebThemeEngineImpl : public blink::WebThemeEngine {
+class WebThemeEngineDefault : public blink::WebThemeEngine {
  public:
   // WebThemeEngine methods:
+  ~WebThemeEngineDefault() override;
   blink::WebSize GetSize(blink::WebThemeEngine::Part) override;
   void Paint(cc::PaintCanvas* canvas,
              blink::WebThemeEngine::Part part,
diff --git a/content/child/webthemeengine_impl_mac.h b/content/child/webthemeengine_impl_mac.h
index e63b62f..29e31609 100644
--- a/content/child/webthemeengine_impl_mac.h
+++ b/content/child/webthemeengine_impl_mac.h
@@ -9,7 +9,9 @@
 
 namespace content {
 
-class WebThemeEngineImpl : public blink::WebThemeEngine {
+class WebThemeEngineMac : public blink::WebThemeEngine {
+ public:
+  ~WebThemeEngineMac() override {}
 };
 
 }  // namespace content
diff --git a/content/common/input_messages.h b/content/common/input_messages.h
index 1c8d34d..d27d912 100644
--- a/content/common/input_messages.h
+++ b/content/common/input_messages.h
@@ -74,9 +74,8 @@
                           blink::WebGestureDevice::kMaxValue)
 IPC_ENUM_TRAITS_MAX_VALUE(blink::WebInputEvent::DispatchType,
                           blink::WebInputEvent::DispatchType::kLastDispatchType)
-IPC_ENUM_TRAITS_MAX_VALUE(
-    blink::WebGestureEvent::InertialPhaseState,
-    blink::WebGestureEvent::InertialPhaseState::kLastPhase)
+IPC_ENUM_TRAITS_MAX_VALUE(blink::WebGestureEvent::InertialPhaseState,
+                          blink::WebGestureEvent::InertialPhaseState::kMaxValue)
 IPC_ENUM_TRAITS_MAX_VALUE(blink::WebTouchPoint::State,
                           blink::WebTouchPoint::State::kStateMax)
 IPC_ENUM_TRAITS_MAX_VALUE(
diff --git a/content/public/browser/browser_context.h b/content/public/browser/browser_context.h
index c7ea6276..9a7d9d2 100644
--- a/content/public/browser/browser_context.h
+++ b/content/public/browser/browser_context.h
@@ -181,6 +181,7 @@
       BrowserContext* browser_context,
       const GURL& origin,
       int64_t service_worker_registration_id,
+      const std::string& message_id,
       base::Optional<std::string> payload,
       const base::Callback<void(blink::mojom::PushDeliveryStatus)>& callback);
 
diff --git a/content/public/browser/devtools_background_services_context.h b/content/public/browser/devtools_background_services_context.h
index 1752397..b85e14a 100644
--- a/content/public/browser/devtools_background_services_context.h
+++ b/content/public/browser/devtools_background_services_context.h
@@ -21,9 +21,10 @@
 enum class DevToolsBackgroundService {
   kBackgroundFetch = 2,
   kBackgroundSync = 3,
+  kPushMessaging = 4,
 
   // Keep at the end.
-  kMaxValue = kBackgroundSync,
+  kMaxValue = kPushMessaging,
 };
 
 // This class is responsible for persisting the debugging events for the
diff --git a/content/renderer/media/webrtc/rtc_video_encoder.cc b/content/renderer/media/webrtc/rtc_video_encoder.cc
index e9b5604..f2e58cf 100644
--- a/content/renderer/media/webrtc/rtc_video_encoder.cc
+++ b/content/renderer/media/webrtc/rtc_video_encoder.cc
@@ -87,8 +87,6 @@
   for (size_t i = 0; i < nalu_vector.size(); ++i) {
     header->fragmentationOffset[i] = nalu_vector[i].data - data;
     header->fragmentationLength[i] = nalu_vector[i].size;
-    header->fragmentationPlType[i] = 0;
-    header->fragmentationTimeDiff[i] = 0;
   }
   return true;
 }
@@ -785,8 +783,6 @@
       header.VerifyAndAllocateFragmentationHeader(1);
       header.fragmentationOffset[0] = 0;
       header.fragmentationLength[0] = image.size();
-      header.fragmentationPlType[0] = 0;
-      header.fragmentationTimeDiff[0] = 0;
       break;
     case webrtc::kVideoCodecH264:
       if (!GetRTPFragmentationHeaderH264(&header, image.data(), image.size())) {
diff --git a/content/renderer/render_view_win.cc b/content/renderer/render_view_win.cc
index 5fe672aa..40bf7a6 100644
--- a/content/renderer/render_view_win.cc
+++ b/content/renderer/render_view_win.cc
@@ -42,7 +42,7 @@
 }
 
 void RenderViewImpl::UpdateThemePrefs() {
-  WebThemeEngineImpl::cacheScrollBarMetrics(
+  WebThemeEngineDefault::cacheScrollBarMetrics(
       renderer_preferences_.vertical_scroll_bar_width_in_dips,
       renderer_preferences_.horizontal_scroll_bar_height_in_dips,
       renderer_preferences_.arrow_bitmap_height_vertical_scroll_bar_in_dips,
diff --git a/content/shell/test_runner/mock_web_theme_engine.h b/content/shell/test_runner/mock_web_theme_engine.h
index eb0fc5a..1a56a5cf 100644
--- a/content/shell/test_runner/mock_web_theme_engine.h
+++ b/content/shell/test_runner/mock_web_theme_engine.h
@@ -12,7 +12,7 @@
 
 class MockWebThemeEngine : public blink::WebThemeEngine {
  public:
-  virtual ~MockWebThemeEngine() {}
+  ~MockWebThemeEngine() override {}
 
 #if !defined(OS_MACOSX)
   // blink::WebThemeEngine:
diff --git a/content/test/data/accessibility/event/aria-disabled-changed-expected-uia-win.txt b/content/test/data/accessibility/event/aria-disabled-changed-expected-uia-win.txt
new file mode 100644
index 0000000..699b788
--- /dev/null
+++ b/content/test/data/accessibility/event/aria-disabled-changed-expected-uia-win.txt
@@ -0,0 +1,16 @@
+AriaProperties changed on role=checkbox, name=checkbox1
+AriaProperties changed on role=checkbox, name=checkbox2
+AriaProperties changed on role=group, name=fieldset0
+AriaProperties changed on role=group, name=fieldset1
+AriaProperties changed on role=radio, name=radio0
+AriaProperties changed on role=radio, name=radio1
+IsEnabled changed on role=checkbox, name=checkbox1
+IsEnabled changed on role=checkbox, name=checkbox2
+IsEnabled changed on role=group, name=fieldset0
+IsEnabled changed on role=group, name=fieldset1
+IsEnabled changed on role=radio, name=radio0
+IsEnabled changed on role=radio, name=radio1
+ValueIsReadOnly changed on role=checkbox, name=checkbox1
+ValueIsReadOnly changed on role=checkbox, name=checkbox2
+ValueIsReadOnly changed on role=radio, name=radio0
+ValueIsReadOnly changed on role=radio, name=radio1
diff --git a/content/test/data/accessibility/event/aria-disabled-changed-expected-win.txt b/content/test/data/accessibility/event/aria-disabled-changed-expected-win.txt
index 88f48223..09bc419 100644
--- a/content/test/data/accessibility/event/aria-disabled-changed-expected-win.txt
+++ b/content/test/data/accessibility/event/aria-disabled-changed-expected-win.txt
@@ -1,3 +1,6 @@
-EVENT_OBJECT_STATECHANGE on role=ROLE_SYSTEM_CHECKBUTTON UNAVAILABLE IA2_STATE_CHECKABLE
-EVENT_OBJECT_STATECHANGE on role=ROLE_SYSTEM_RADIOBUTTON IA2_STATE_CHECKABLE
-EVENT_OBJECT_STATECHANGE on role=ROLE_SYSTEM_GROUPING
\ No newline at end of file
+EVENT_OBJECT_STATECHANGE on <div#checkbox1> role=ROLE_SYSTEM_CHECKBUTTON name="checkbox1" UNAVAILABLE IA2_STATE_CHECKABLE
+EVENT_OBJECT_STATECHANGE on <div#checkbox2> role=ROLE_SYSTEM_CHECKBUTTON name="checkbox2" IA2_STATE_CHECKABLE
+EVENT_OBJECT_STATECHANGE on <div#radio0> role=ROLE_SYSTEM_RADIOBUTTON name="radio0" IA2_STATE_CHECKABLE PosInSet=1 SetSize=1
+EVENT_OBJECT_STATECHANGE on <div#radio1> role=ROLE_SYSTEM_RADIOBUTTON name="radio1" IA2_STATE_CHECKABLE PosInSet=1 SetSize=1
+EVENT_OBJECT_STATECHANGE on <fieldset#fieldset0> role=ROLE_SYSTEM_GROUPING name="fieldset0"
+EVENT_OBJECT_STATECHANGE on <fieldset#fieldset1> role=ROLE_SYSTEM_GROUPING name="fieldset1"
diff --git a/content/test/data/accessibility/event/aria-disabled-changed.html b/content/test/data/accessibility/event/aria-disabled-changed.html
index 6c2e443..6b6debd 100644
--- a/content/test/data/accessibility/event/aria-disabled-changed.html
+++ b/content/test/data/accessibility/event/aria-disabled-changed.html
@@ -1,18 +1,49 @@
-<!DOCTYPE html>
 <!--
 @MAC-ALLOW:AXEnabled*
 @WIN-ALLOW:UNAVAILABLE
 -->
+<!DOCTYPE html>
 <form>
-  <div role="checkbox"></div>
-  <fieldset aria-disabled="true">
-    <div role="radio" aria-disabled="true"></div>
+  <div id="checkbox0" aria-label="checkbox0" role="checkbox"></div>
+  <div id="checkbox1" aria-label="checkbox1" role="checkbox"></div>
+  <div id="checkbox2" aria-label="checkbox2" role="checkbox" aria-disabled="true"></div>
+  <fieldset id="fieldset0" aria-label="fieldset0" aria-disabled="true">
+    <div id="radio0" aria-label="radio0" role="radio" aria-disabled="true"></div>
+  </fieldset>
+  <fieldset id="fieldset1" aria-label="fieldset1" aria-disabled="true">
+    <div id="radio1" aria-label="radio1" role="radio" aria-disabled="true"></div>
+  </fieldset>
+  <fieldset id="fieldset2" aria-label="fieldset2">
+    <div id="radio2" aria-label="radio2" role="radio"></div>
   </fieldset>
 </form>
 <script>
   function go() {
-    document.querySelector('div[role=checkbox]').setAttribute('aria-disabled', true);
-    document.querySelector('div[role=radio]').setAttribute('aria-disabled', false);
-    document.querySelector('fieldset').setAttribute('aria-disabled', false);
+    // Set aria-disabled on checkbox from default false->false; should not fire an event.
+    document.getElementById('checkbox0').setAttribute('aria-disabled', false);
+
+    // Set aria-disabled on checkbox from default false->true; should fire an event.
+    document.getElementById('checkbox1').setAttribute('aria-disabled', true);
+
+    // Set aria-disabled on checkbox from true->[removed]; should fire an event.
+    document.getElementById('checkbox2').removeAttribute('aria-disabled');
+
+    // Set aria-disabled on radio from true->false; should fire an event.
+    document.getElementById('radio0').setAttribute('aria-disabled', false);
+
+    // Set aria-disabled on fieldset from true->false; should fire an event.
+    document.getElementById('fieldset0').setAttribute('aria-disabled', false);
+
+    // Set aria-disabled on radio from true->[removed]; should fire an event.
+    document.getElementById('radio1').setAttribute('aria-disabled', false);
+
+    // Set aria-disabled on fieldset from true->[removed]; should fire an event.
+    document.getElementById('fieldset1').setAttribute('aria-disabled', false);
+
+    // Set aria-disabled on radio from default false->false; should not fire an event.
+    document.getElementById('radio2').setAttribute('aria-disabled', false);
+
+    // Set aria-disabled on fieldset from default false->false; should not fire an event.
+    document.getElementById('fieldset2').setAttribute('aria-disabled', false);
   }
 </script>
diff --git a/content/test/data/accessibility/event/aria-level-changed-expected-uia-win.txt b/content/test/data/accessibility/event/aria-level-changed-expected-uia-win.txt
new file mode 100644
index 0000000..4d4f9cb
--- /dev/null
+++ b/content/test/data/accessibility/event/aria-level-changed-expected-uia-win.txt
@@ -0,0 +1,6 @@
+AriaProperties changed on role=heading, name=Item2
+AriaProperties changed on role=heading, name=Item3
+AriaProperties changed on role=heading, name=Item4
+Level changed on role=heading, name=Item2
+Level changed on role=heading, name=Item3
+Level changed on role=heading, name=Item4
diff --git a/content/test/data/accessibility/event/aria-level-changed-expected-uia-win7.txt b/content/test/data/accessibility/event/aria-level-changed-expected-uia-win7.txt
new file mode 100644
index 0000000..073c1f8
--- /dev/null
+++ b/content/test/data/accessibility/event/aria-level-changed-expected-uia-win7.txt
@@ -0,0 +1,3 @@
+AriaProperties changed on role=heading, name=Item2
+AriaProperties changed on role=heading, name=Item3
+AriaProperties changed on role=heading, name=Item4
diff --git a/content/test/data/accessibility/event/aria-level-changed.html b/content/test/data/accessibility/event/aria-level-changed.html
new file mode 100644
index 0000000..93ebc35
--- /dev/null
+++ b/content/test/data/accessibility/event/aria-level-changed.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<body>
+  <div id="d1" role="heading">Item1</div>
+  <div id="d2" role="heading">Item2</div>
+  <div id="d3" role="heading" aria-level="3">Item3</div>
+  <div id="d4" role="heading" aria-level="3">Item4</div>
+  <script>
+    function go() {
+      // Set aria-level from default '2'->'2'; should not fire an event.
+      document.getElementById('d1').setAttribute('aria-level', '2');
+
+      // Set aria-level from default '2'->'3'; should fire an event.
+      document.getElementById('d2').setAttribute('aria-level', '3');
+
+      // Set aria-level from '3'->'2'; should fire an event.
+      document.getElementById('d3').setAttribute('aria-level', '2');
+
+      // Set aria-level from '3'->[removed]; should fire an event.
+      document.getElementById('d4').removeAttribute('aria-level');
+    }
+  </script>
+</body>
+</html>
diff --git a/content/test/data/accessibility/event/aria-live-changed-expected-uia-win.txt b/content/test/data/accessibility/event/aria-live-changed-expected-uia-win.txt
new file mode 100644
index 0000000..a0de0e38
--- /dev/null
+++ b/content/test/data/accessibility/event/aria-live-changed-expected-uia-win.txt
@@ -0,0 +1,6 @@
+AriaProperties changed on role=heading, name=Item2
+AriaProperties changed on role=heading, name=Item3
+AriaProperties changed on role=heading, name=Item4
+LiveSetting changed on role=heading, name=Item2
+LiveSetting changed on role=heading, name=Item3
+LiveSetting changed on role=heading, name=Item4
diff --git a/content/test/data/accessibility/event/aria-live-changed-expected-uia-win7.txt b/content/test/data/accessibility/event/aria-live-changed-expected-uia-win7.txt
new file mode 100644
index 0000000..073c1f8
--- /dev/null
+++ b/content/test/data/accessibility/event/aria-live-changed-expected-uia-win7.txt
@@ -0,0 +1,3 @@
+AriaProperties changed on role=heading, name=Item2
+AriaProperties changed on role=heading, name=Item3
+AriaProperties changed on role=heading, name=Item4
diff --git a/content/test/data/accessibility/event/aria-live-changed.html b/content/test/data/accessibility/event/aria-live-changed.html
new file mode 100644
index 0000000..40a01b9
--- /dev/null
+++ b/content/test/data/accessibility/event/aria-live-changed.html
@@ -0,0 +1,30 @@
+<!--
+@UIA-WIN-DENY:*
+@UIA-WIN-ALLOW:AriaProperties*
+@UIA-WIN-ALLOW:LiveSetting*
+-->
+<!DOCTYPE html>
+<html>
+<body>
+  <h4 id="d1" aria-live="off">Item1</h4>
+  <h4 id="d2" aria-live="polite">Item2</h4>
+  <h4 id="d3" aria-live="polite">Item3</h4>
+  <h4 id="d4">Item4</h4>
+  <button onclick="go()">go</button>
+  <script>
+    function go() {
+      // set live from 'off' to 'off', so this shouldn't fire an event
+      document.getElementById('d1').setAttribute('aria-live', 'off');
+
+      // set live from 'polite'->'assertive'; should fire an event
+      document.getElementById('d2').setAttribute('aria-live', 'assertive');
+
+      // set live from 'polite'->[removed]; should fire event
+      document.getElementById('d3').removeAttribute('aria-live');
+
+      // set live to 'polite'; should fire an event
+      document.getElementById('d4').setAttribute('aria-live', 'polite');
+    }
+  </script>
+</body>
+</html>
diff --git a/content/test/data/accessibility/event/aria-multiselectable-changed-expected-uia-win.txt b/content/test/data/accessibility/event/aria-multiselectable-changed-expected-uia-win.txt
index 19f0e77..e161f1e 100644
--- a/content/test/data/accessibility/event/aria-multiselectable-changed-expected-uia-win.txt
+++ b/content/test/data/accessibility/event/aria-multiselectable-changed-expected-uia-win.txt
@@ -1,3 +1,8 @@
+AriaProperties changed on role=grid
+AriaProperties changed on role=listbox
+AriaProperties changed on role=tablist
+AriaProperties changed on role=tree
+AriaProperties changed on role=treegrid
 SelectionCanSelectMultiple changed on role=grid
 SelectionCanSelectMultiple changed on role=listbox
 SelectionCanSelectMultiple changed on role=tablist
diff --git a/content/test/data/accessibility/event/live-region-add-live-attribute-expected-uia-win.txt b/content/test/data/accessibility/event/live-region-add-live-attribute-expected-uia-win.txt
index 48f39cb..8d147043 100644
--- a/content/test/data/accessibility/event/live-region-add-live-attribute-expected-uia-win.txt
+++ b/content/test/data/accessibility/event/live-region-add-live-attribute-expected-uia-win.txt
@@ -1,2 +1,3 @@
+AriaProperties changed on role=group
 LiveRegionChanged on role=group
 LiveSetting changed on role=group
diff --git a/content/test/data/accessibility/event/live-region-add-live-attribute-expected-uia-win7.txt b/content/test/data/accessibility/event/live-region-add-live-attribute-expected-uia-win7.txt
index 4d65b611..20d199f 100644
--- a/content/test/data/accessibility/event/live-region-add-live-attribute-expected-uia-win7.txt
+++ b/content/test/data/accessibility/event/live-region-add-live-attribute-expected-uia-win7.txt
@@ -1 +1,2 @@
+AriaProperties changed on role=group
 LiveRegionChanged on role=group
diff --git a/content/test/data/accessibility/event/live-region-add-live-attribute.html b/content/test/data/accessibility/event/live-region-add-live-attribute.html
index e4f5ba5..b718f71 100644
--- a/content/test/data/accessibility/event/live-region-add-live-attribute.html
+++ b/content/test/data/accessibility/event/live-region-add-live-attribute.html
@@ -1,5 +1,6 @@
 <!--
 @UIA-WIN-DENY:*
+@UIA-WIN-ALLOW:AriaProperties*
 @UIA-WIN-ALLOW:LiveRegion*
 @UIA-WIN-ALLOW:LiveSetting*
 -->
diff --git a/content/test/data/accessibility/event/range-value-is-readonly-changed-expected-uia-win.txt b/content/test/data/accessibility/event/range-value-is-readonly-changed-expected-uia-win.txt
index 8ed156f..3f2feb2 100644
--- a/content/test/data/accessibility/event/range-value-is-readonly-changed-expected-uia-win.txt
+++ b/content/test/data/accessibility/event/range-value-is-readonly-changed-expected-uia-win.txt
@@ -1,6 +1,8 @@
+AriaProperties changed on role=slider
 IsEnabled changed on role=slider
 RangeValueIsReadOnly changed on role=slider
 === Start Continuation ===
+AriaProperties changed on role=slider
 IsEnabled changed on role=slider
 RangeValueIsReadOnly changed on role=slider
 === Start Continuation ===
@@ -8,8 +10,10 @@
 === Start Continuation ===
 RangeValueIsReadOnly changed on role=slider
 === Start Continuation ===
+AriaProperties changed on role=slider
 IsEnabled changed on role=slider
 RangeValueIsReadOnly changed on role=slider
 === Start Continuation ===
+AriaProperties changed on role=slider
 IsEnabled changed on role=slider
 RangeValueIsReadOnly changed on role=slider
diff --git a/content/test/data/accessibility/event/value-is-readonly-changed-expected-uia-win.txt b/content/test/data/accessibility/event/value-is-readonly-changed-expected-uia-win.txt
index 29a38f0..5e7b21e5 100644
--- a/content/test/data/accessibility/event/value-is-readonly-changed-expected-uia-win.txt
+++ b/content/test/data/accessibility/event/value-is-readonly-changed-expected-uia-win.txt
@@ -1,6 +1,8 @@
+AriaProperties changed on role=textbox
 IsEnabled changed on role=textbox
 ValueIsReadOnly changed on role=textbox
 === Start Continuation ===
+AriaProperties changed on role=textbox
 IsEnabled changed on role=textbox
 ValueIsReadOnly changed on role=textbox
 === Start Continuation ===
@@ -12,8 +14,10 @@
 === Start Continuation ===
 ValueIsReadOnly changed on role=textbox
 === Start Continuation ===
+AriaProperties changed on role=textbox
 IsEnabled changed on role=textbox
 ValueIsReadOnly changed on role=textbox
 === Start Continuation ===
+AriaProperties changed on role=textbox
 IsEnabled changed on role=textbox
 ValueIsReadOnly changed on role=textbox
diff --git a/content/test/gpu/power_measurement_results/win10_intel_hd_630/build_4132_4369.csv b/content/test/gpu/power_measurement_results/win10_intel_hd_630/build_4132_4369.csv
new file mode 100644
index 0000000..bd4c4da
--- /dev/null
+++ b/content/test/gpu/power_measurement_results/win10_intel_hd_630/build_4132_4369.csv
@@ -0,0 +1,239 @@
+Basic_DRAM,Basic_GT,Basic_IA,Video_720_MP4_DRAM,Video_720_MP4_Fullscreen_DRAM,Video_720_MP4_Fullscreen_GT,Video_720_MP4_Fullscreen_IA,Video_720_MP4_GT,Video_720_MP4_IA,Video_720_MP4_Underlay_DRAM,Video_720_MP4_Underlay_Fullscreen_DRAM,Video_720_MP4_Underlay_Fullscreen_GT,Video_720_MP4_Underlay_Fullscreen_IA,Video_720_MP4_Underlay_GT,Video_720_MP4_Underlay_IA,bot,build

+0.6068494983277595,0.018812709030100336,3.5557692307692306,0.7390367892976588,0.7375050167224083,0.13655518394648827,6.405548494983279,0.14097993311036802,6.335003344481605,0.7998260869565218,0.7430836120401343,0.1446622073578596,6.659428093645483,0.2869230769230772,7.053688963210702,BUILD154-A9,4369

+0.6071906354515052,0.03288294314381269,3.2457023411371217,0.7431337792642148,0.7403187919463086,0.09521812080536916,5.775677852348996,0.09660869565217395,5.638324414715715,0.8062575250836121,0.7545752508361204,0.09916053511705684,5.897187290969904,0.20584949832775926,6.005561872909699,BUILD182-A9,4368

+0.6010535117056858,0.03132441471571905,3.2086120401337794,0.7415117056856191,0.7400769230769235,0.09204347826086967,5.632755852842813,0.09304682274247494,5.616675585284283,0.7965953177257524,0.7513946488294316,0.09887959866220748,5.785324414715719,0.20512709030100354,5.85499331103679,BUILD182-A9,4367

+0.60066889632107,0.029829431438127073,3.8393578595317712,0.7478996655518401,0.7389397993311043,0.12823411371237467,6.8667491638795966,0.13032775919732448,6.889438127090299,0.7944866666666667,0.7509866220735787,0.13532775919732445,7.146418060200667,0.2750866666666671,7.160306666666664,BUILD174-A9,4366

+0.6018327759197322,0.016210702341137122,3.8603043478260908,0.7424180602006694,0.7490266666666666,0.1301433333333334,6.5901966666666665,0.12936789297658866,6.582919732441469,0.8013812709030103,0.7467826086956526,0.1340334448160536,6.587702341137121,0.2616555183946489,7.020826086956522,BUILD164-A9,4365

+0.6064060402684562,0.03058389261744964,3.7511610738255032,0.746892976588629,0.7511906354515052,0.11764548494983278,6.487190635451507,0.12097993311036795,6.393301003344478,0.7972173913043478,0.7534882943143817,0.122076923076923,6.2537491638795935,0.2564983277591972,6.654789297658861,BUILD169-A9,4364

+0.6101040268456372,0.030489932885906023,3.477530201342282,0.7419498327759206,0.7564932885906045,0.09451342281879198,5.851003355704697,0.09489632107023416,5.819107023411375,0.8061711409395972,0.747384615384616,0.1032842809364548,5.820478260869566,0.20653691275167785,6.12470134228188,BUILD182-A9,4363

+0.6038859060402685,0.030100671140939565,3.909211409395973,0.7417157190635453,0.740852842809365,0.11937792642140477,6.563709030100331,0.12025418060200672,6.634374581939798,0.8167391304347831,0.7471404682274253,0.12995986622073571,6.7082073578595285,0.26244147157190645,6.852200668896326,BUILD120-A9,4362

+0.6046287625418064,0.03329765886287623,3.7343745819397984,0.7412508361204015,0.7398628762541815,0.10955852842809367,6.784565217391302,0.11093311036789297,6.8350869565217405,0.8043846153846158,0.7477959866220741,0.11628093645484958,6.847311036789297,0.23446822742474924,7.060468227424754,BUILD181-A9,4361

+0.6051170568561873,0.03205351170568558,3.8255016722408026,0.741515050167225,0.7393277591973249,0.1421103678929766,6.748448160535117,0.142066889632107,6.7327759197324415,0.7982775919732441,0.7441605351170567,0.1468494983277592,6.825351170568566,0.29192307692307695,6.993214046822742,BUILD179-A9,4360

+0.6010033557046979,0.037842281879194584,4.42454697986577,0.7450268456375843,0.7408929765886288,0.11479933110367894,7.62063545150502,0.11539932885906035,7.757580536912755,0.797989966555184,0.7464633333333337,0.12705999999999995,7.586693333333331,0.24897324414715724,7.944612040133776,BUILD125-A9,4359

+0.6214899328859063,0.04365436241610738,4.1975167785234895,0.7454515050167225,0.7411672240802681,0.10944147157190635,6.401795986622073,0.11245150501672248,6.232571906354517,0.8134983277591972,0.7548963210702344,0.11907692307692302,6.582538461538463,0.27796321070234165,7.120096989966557,BUILD170-A9,4358

+0.6017416107382557,0.014234899328859052,3.970818791946309,0.7421070234113719,0.7424581939799334,0.12349163879598657,7.002458193979935,0.12282274247491647,7.29115719063545,0.8030234113712367,0.744839464882943,0.1267926421404682,7.131193979933115,0.24650167224080252,7.274020066889633,BUILD119-A9,4357

+0.5984280936454849,0.011458193979933109,3.681264214046824,0.7413444816053514,0.7390568561872907,0.14180936454849496,6.524692307692307,0.14109030100334444,6.502735785953178,0.8077023411371236,0.7434749163879596,0.15801003344481607,6.560832775919729,0.3118929765886287,6.848060200668892,BUILD154-A9,4356

+0.5932541806020071,0.023093645484949802,3.725946488294312,0.7473355704697986,0.741397993311037,0.11381605351170557,7.057999999999999,0.1100436241610738,6.95894630872483,0.804742474916388,0.7546220735785953,0.12296989966555182,7.177351170568565,0.2622675585284281,7.357789297658865,BUILD177-A9,4355

+0.5975919732441468,0.011545150501672236,3.6374715719063575,0.7417391304347829,0.737996655518395,0.12570234113712364,6.435036789297659,0.12476588628762537,6.434096989966557,0.8059832775919733,0.7432675585284286,0.13671906354515043,6.444745819397991,0.27376923076923076,6.574829431438124,BUILD183-A9,4354

+0.6064798657718116,0.02613087248322143,3.341191275167786,0.7393745819397997,0.7393879598662204,0.093752508361204,5.6163645484949845,0.09782274247491639,5.606454849498331,0.8027123745819396,0.7467892976588634,0.10071906354515045,5.663113712374579,0.21468227424749167,5.661979933110366,BUILD172-A9,4353

+0.6013926174496647,0.035204697986577146,3.325825503355706,0.7433545150501668,0.7398294314381266,0.09960535117056857,5.79538461538462,0.10203678929765882,5.662478260869571,0.7956822742474917,0.7440936454849503,0.10574247491638791,5.698183946488294,0.23795317725752507,6.045816053511711,BUILD170-A9,4352

+0.6123444816053512,0.03338127090301,3.4062842809364553,0.7434816053511709,0.7433154362416116,0.10228187919463087,5.732208053691271,0.10219397993311043,5.615438127090301,0.8061705685618729,0.7461304347826092,0.1076321070234114,5.607872909698997,0.25089966555183946,5.717003344481607,BUILD127-A9,4351

+0.6026912751677851,0.035503355704697946,3.194647651006713,0.7403478260869565,0.7396421404682276,0.10244481605351173,5.66841137123746,0.10238127090301002,5.550337792642145,0.8079498327759201,0.7490200668896324,0.11029431438127094,5.941484949832773,0.2188929765886288,6.0571137123745835,BUILD153-A9,4350

+0.6024765100671143,0.03877516778523486,3.6104463087248324,0.7581582491582494,0.7398093645484953,0.13140802675585297,6.413655518394648,0.13903367003367004,6.660720538720539,0.7964381270903008,0.7462341137123758,0.14068896321070237,6.6512976588628785,0.2787056856187294,6.594779264214043,BUILD142-A9,4349

+0.6036053511705686,0.027130434782608678,4.0524749163879585,0.7394916387959868,0.7418862876254185,0.11748160535117055,7.160779264214046,0.12096989966555187,7.1617525083612055,0.7960501672240797,0.7441772575250839,0.12645150501672248,7.271712374581937,0.244732441471572,7.379762541806014,BUILD141-A9,4348

+0.6012617449664428,0.03543959731543621,3.8820436241610743,0.7543210702341135,0.737882943143813,0.12899665551839468,6.500347826086953,0.13192976588628758,6.792327759197326,0.8046354515050166,0.744672240802676,0.14705016722408035,6.588692307692306,0.2647023411371239,6.668816053511705,BUILD168-A9,4347

+0.6056020066889632,0.031698996655518355,3.3551204013377918,0.7386120401337793,0.7399866220735793,0.09858862876254179,5.962374581939802,0.09974247491638807,5.8934180602006645,0.7960735785953182,0.7548929765886286,0.10199665551839471,6.435618729096996,0.2170802675585286,6.299652173913044,BUILD129-A9,4346

+0.6007751677852349,0.029238255033557016,3.0864865771812053,0.7417324414715727,0.7481739130434785,0.09602341137123745,5.77018060200669,0.09797993311036798,5.732585284280936,0.7980769230769232,0.7444515050167225,0.1013177257525083,5.9465886287625445,0.20724414715719047,5.961127090301005,BUILD182-A9,4345

+0.6045872483221476,0.03620469798657715,3.5506711409395963,0.7476321070234114,0.7396755852842809,0.1366989966555184,6.446110367892977,0.13623745819397992,6.495929765886288,0.7949130434782613,0.7371638795986626,0.1410468227424748,6.358729096989968,0.28241471571906374,6.694939799331103,BUILD154-A9,4344

+0.6028087248322151,0.030446308724832203,3.9266778523489907,0.7489230769230776,0.7393478260869567,0.09659531772575249,6.812712374581936,0.09613712374581937,6.78560869565217,0.7991806020066886,0.7549832775919731,0.10813043478260863,6.773070234113715,0.22104347826086965,6.901739130434782,BUILD132-A9,4343

+0.6052181208053689,0.03165436241610735,3.2472214765100675,0.7457591973244148,0.7428795986622074,0.13358193979933108,5.798381270903004,0.13103678929765886,5.663254180602002,0.8064481605351171,0.7537725752508362,0.14229431438127077,5.903846153846153,0.2691605351170571,6.238913043478256,BUILD156-A9,4342

+0.6092751677852348,0.036315436241610696,3.7427248322147664,0.7414381270903007,0.7389565217391308,0.12754180602006684,6.214755852842808,0.12799999999999995,6.2483812709030095,0.7969331103678926,0.7484548494983279,0.13817056856187293,6.29308695652174,0.2582073578595316,6.427765886287629,BUILD146-A9,4341

+0.6063624161073825,0.03378859060402681,3.6690134228187903,0.7491304347826088,0.7373578595317732,0.12869565217391304,6.2925986622073635,0.1303879598662208,6.322826086956519,0.8068428093645479,0.754304347826087,0.1381939799331104,6.59423076923077,0.2669063545150503,6.549066889632111,BUILD168-A9,4340

+0.6012140468227422,0.030331103678929727,3.69022408026756,0.7488260869565228,0.7365752508361209,0.12261538461538464,6.3708528428093665,0.12258528428093647,6.444324414715722,0.8074314381270906,0.7604882943143817,0.13330100334448158,6.90097993311037,0.2648260869565218,6.606177257525084,BUILD120-A9,4339

+0.6030267558528425,0.033946488294314375,3.277428093645486,0.7507725752508357,0.7398561872909698,0.11516387959866224,5.353749163879598,0.11647491638795981,5.4514983277591975,0.8070301003344478,0.7502006688963214,0.12641137123745808,5.623454849498324,0.24645484949832747,5.869113712374584,BUILD161-A9,4338

+0.6069765100671144,0.03426845637583886,3.7895939597315436,0.7864747474747478,0.7593657718120814,0.11345302013422819,7.633694630872495,0.11823905723905723,10.543791245791246,0.8143712374581942,0.7459598662207362,0.11817725752508369,6.472026755852843,0.23791973244147177,7.100558528428095,BUILD126-A9,4337

+0.6020100334448164,0.012628762541806013,3.506367892976587,0.7396789297658866,0.7509464882943148,0.09258528428093651,6.041036789297655,0.09406020066889634,5.957752508361197,0.8032040133779265,0.7447558528428102,0.09591638795986628,6.100886287625422,0.2077725752508362,6.249933110367896,BUILD129-A9,4336

+0.5979397993311034,0.010545150501672233,3.140478260869564,0.7386020066889634,0.7527759197324426,0.10821404682274241,5.626892976588629,0.10906354515050162,5.588120401337791,0.806715719063545,0.7423745819397991,0.11504682274247496,5.8168729096989935,0.2599264214046824,5.956923076923075,BUILD170-A9,4335

+0.6035919732441468,0.015468227424749159,3.3310535117056848,0.7503010033444827,0.7375133333333337,0.1272099999999999,5.807436666666663,0.12858193979933105,6.370735785953175,0.8045886287625421,0.7441705685618736,0.1330334448160535,5.935324414715719,0.26178260869565223,6.124518394648829,BUILD162-A9,4334

+0.6083053691275165,0.03761073825503351,3.584828859060404,0.742197324414716,0.7497123745819398,0.12860535117056854,5.70833779264214,0.13144816053511704,5.6996220735786,0.7956354515050168,0.7456889632107024,0.1394949832775919,5.748742474916386,0.2665585284280937,5.836324414715723,BUILD162-A9,4333

+0.6104261744966443,0.03689932885906036,3.936234899328858,0.7386755852842811,0.7361505016722405,0.13262207357859523,6.370177257525085,0.13695317725752512,6.511555183946482,0.7946120401337794,0.7435652173913039,0.14358193979933118,6.478628762541805,0.288886287625418,6.609719063545155,BUILD124-A9,4332

+0.6003745819398002,0.03186287625418057,3.8628193979933094,0.7396789297658868,0.7462307692307687,0.13546153846153836,7.015585284280933,0.13589297658862873,7.07873578595318,0.7943545150501674,0.7460434782608697,0.14264214046822746,7.317598662207359,0.28275250836120436,7.369836120401332,BUILD158-A9,4331

+0.6084597315436235,0.032899328859060405,3.5483993288590625,0.745123745819398,0.7390836120401342,0.130571906354515,5.855906354515051,0.13117056856187304,5.909301003344478,0.7972107023411373,0.745809364548495,0.13838127090300997,6.252722408026755,0.2674515050167225,6.172936454849495,BUILD133-A9,4330

+0.6058929765886286,0.032314381270902984,3.93273578595318,0.7465250836120402,0.7385551839464891,0.12243478260869561,6.78580936454849,0.1179565217391304,6.800224080267563,0.8038695652173914,0.7437357859531779,0.1270969899665551,7.00778929765886,0.2549197324414714,7.1142508361204015,BUILD119-A9,4329

+0.6210869565217388,0.02301003344481604,4.748959866220736,0.7464147157190629,0.7525585284280935,0.11724414715719063,8.17933110367893,0.11720735785953183,7.3992274247491645,0.815595317725753,0.7458662207357858,0.12799331103678935,7.609652173913045,0.28413043478260885,7.849331103678934,BUILD175-A9,4328

+0.6109429530201346,0.03018120805369125,3.9073355704697956,0.7416722408026755,0.7484816053511707,0.11126421404682281,6.420387959866222,0.11278595317725759,6.4820702341137135,0.8042240802675586,0.7454214046822745,0.12372240802675581,6.542588628762542,0.24661204013377902,6.744518394648832,BUILD175-A9,4327

+0.595597315436242,0.023671140939597293,3.0497785234899335,0.7399197324414715,0.7394715719063545,0.09780267558528428,5.531284280936454,0.09945150501672244,5.561785953177261,0.7974046822742474,0.744809364548495,0.10467558528428095,5.497367892976587,0.21634782608695668,5.654133779264213,BUILD172-A9,4326

+0.6092508361204005,0.036411371237458155,3.446826086956522,0.74428093645485,0.8016476510067119,0.13119798657718115,7.927369127516781,0.130304347826087,5.922812709030098,0.7965351170568559,0.7442809364548496,0.1342775919732442,6.0529498327759175,0.26318394648829413,6.106973244147157,BUILD133-A9,4325

+0.5984046822742471,0.02707692307692304,3.905491638795986,0.7450334448160528,0.7501036789297655,0.11318394648829432,7.151882943143814,0.113819397993311,7.284505016722413,0.8064180602006691,0.7430301003344483,0.1170702341137124,7.385257525083613,0.23878929765886286,7.44463210702341,BUILD137-A9,4324

+0.6070367892976593,0.03188628762541803,3.4418193979933114,0.7410903010033449,0.7398294314381273,0.12390301003344478,5.811565217391306,0.12635785953177267,5.830742474916385,0.8017190635451504,0.7460500000000005,0.12680666666666673,5.791680000000001,0.25014046822742475,6.174571906354514,BUILD159-A9,4323

+0.6067147651006712,0.02823154362416105,3.832842281879192,0.7484782608695659,0.7391103678929769,0.11588963210702342,6.384712374581942,0.11984615384615388,6.443525083612038,0.7985451505016721,0.7541939799331108,0.12215719063545165,6.315036789297657,0.24035451505016708,6.569775919732436,BUILD155-A9,4322

+0.6043143812709035,0.03620066889632102,4.076668896321072,0.8075838926174498,0.7348494983277595,0.12122408026755861,6.765177257525081,0.12235570469798654,9.41841275167786,0.7922240802675589,0.7498361204013378,0.12884949832775922,6.930969899665551,0.26476254180602016,7.097484949832772,BUILD180-A9,4321

+0.6074395973154363,0.030422818791946263,3.327996644295301,0.7388929765886286,0.7484949832775926,0.1309732441471572,5.746508361204019,0.13259197324414698,5.620578595317724,0.8032842809364548,0.7467157190635455,0.1382307692307693,5.877899665551838,0.27216722408026756,5.978163879598661,BUILD156-A9,4320

+0.6029264214046823,0.019347826086956524,3.2624581939799326,0.7356086956521737,0.7352006688963209,0.1528595317725752,5.851612040133774,0.15592642140468224,5.80542474916388,0.7892943143812714,0.7546956521739125,0.1614080267558528,5.969852842809361,0.33816387959866206,6.112856187290972,BUILD148-A9,4319

+0.6036020066889636,0.014418060200668876,3.1366220735785935,0.741063333333334,0.7497090301003345,0.12105016722408016,5.450692307692307,0.12151000000000006,5.410596666666665,0.8056622073578596,0.7433311036789303,0.12640802675585286,5.477578595317726,0.2530234113712373,5.617270903010036,BUILD161-A9,4318

+0.6080268456375838,0.03374832214765097,3.1300536912751675,0.7467725752508373,0.7396387959866235,0.11327759197324419,5.324287625418057,0.11838795986622079,5.540147157190629,0.7988929765886292,0.7431939799331111,0.12164214046822748,5.513327759197326,0.2436856187290969,5.803424749163878,BUILD161-A9,4317

+0.6051371237458193,0.011458193979933107,3.019321070234113,0.7415117056856191,0.7404782608695651,0.1353344481605351,5.614973244147156,0.13681270903010032,5.65369565217391,0.7978160535117059,0.7462508361204012,0.14262876254180604,5.7307591973244145,0.27302341137123765,5.864093645484957,BUILD147-A9,4316

+0.6079297658862877,0.042712374581939765,3.448899665551839,0.7454046822742483,0.7351270903010035,0.1480234113712374,5.924270903010034,0.14943143812709023,5.871986622073579,0.7925852842809368,0.7471739130434784,0.15854515050167228,6.412070234113713,0.33249498327759214,6.389381270903008,BUILD148-A9,4315

+0.6009295302013425,0.03682885906040265,3.687070469798658,0.7411438127090304,0.7380401337792639,0.1306588628762542,6.283227424749163,0.1365250836120401,6.454755852842812,0.7970568561872913,0.7437591973244151,0.14384280936454852,6.461956521739138,0.29133110367893006,6.586377926421404,BUILD142-A9,4314

+0.6066275167785229,0.029785234899328838,3.489258389261745,0.7489364548494986,0.7985469798657723,0.1053255033557048,7.7500604026845625,0.10785618729097005,5.9950735785953215,0.795056856187291,0.7462173913043484,0.11857525083612043,5.9333812709030065,0.24553846153846137,6.054367892976592,BUILD118-A9,4313

+0.6019297658862879,0.031183946488294267,4.3477491638795955,0.7414147157190639,0.7466889632107024,0.1176588628762542,7.491882943143814,0.11563879598662201,7.448678929765884,0.7977056856187289,0.7486979865771816,0.12715771812080529,8.119359060402683,0.2545217391304349,7.817414715719067,BUILD125-A9,4312

+0.6087090301003343,0.01515384615384615,3.2053511705685604,0.7396789297658861,0.7464515050167224,0.1001137123745819,5.803618729096991,0.10275250836120403,5.445725752508362,0.7961471571906353,0.754220735785953,0.10754849498327758,5.760033444816055,0.21933110367892986,5.8294214046822725,BUILD136-A9,4311

+0.6018093645484948,0.029762541806020046,3.432839464882941,0.755530201342282,0.7497926421404684,0.09857525083612037,6.532836120401339,0.09812080536912755,6.681234899328862,0.8029397993311027,0.7481638795986623,0.10704013377926422,6.343377926421404,0.22865217391304343,6.498692307692308,BUILD163-A9,4310

+0.6088187919463082,0.030238255033557013,3.9875167785234913,0.7440200668896324,0.7505384615384615,0.123608695652174,6.659705685618728,0.1265250836120402,6.657217391304346,0.7956622073578588,0.745013377926422,0.1327491638795986,6.733244147157195,0.250561872909699,6.904515050167227,BUILD123-A9,4309

+0.6065436241610739,0.02976845637583888,3.27539932885906,0.738946488294315,0.7442742474916387,0.09980602006688967,5.68807023411371,0.10362207357859526,5.607474916387959,0.8078528428093641,0.7448963210702342,0.10516387959866216,5.87096655518395,0.21896989966555186,5.928879598662205,BUILD136-A9,4308

+0.6053110367892978,0.031173913043478243,3.9089264214046846,0.7487157190635454,0.7383545150501672,0.13089297658862864,7.001043478260869,0.13082608695652173,7.133317725752506,0.7962742474916387,0.745657718120806,0.13472818791946312,7.416597315436242,0.2718695652173915,7.2464749163879585,BUILD173-A9,4307

+0.5976476510067117,0.030194630872483207,3.192553691275169,0.7538461538461537,0.7528929765886291,0.1187525083612041,5.523722408026755,0.1191003344481606,5.607628762541806,0.8084247491638799,0.7451137123745821,0.1250535117056856,5.448899665551838,0.24551839464882938,5.628625418060199,BUILD161-A9,4306

+0.6043624161073822,0.036916107382550294,3.6678758389261725,0.7400000000000005,0.7421438127090304,0.13464548494983278,6.276742474916384,0.13163545150501674,6.4828428093645485,0.792080267558528,0.7413478260869574,0.14314715719063545,6.334973244147155,0.2857391304347826,6.5116588628762555,BUILD124-A9,4305

+0.6016510067114094,0.02745637583892616,3.4624731543624154,0.7404347826086957,0.7370769230769234,0.10944147157190635,5.998428093645484,0.1137725752508362,5.967103678929767,0.8170602006688966,0.7457993311036796,0.11355518394648835,6.056989966555181,0.24529765886287638,6.212424749163881,BUILD118-A9,4304

+0.606063545150501,0.02794314381270899,3.8185117056856206,0.741488294314381,0.7386688963210699,0.12425418060200667,6.693953177257526,0.12759531772575244,6.686515050167221,0.8091872909698996,0.7456254180602008,0.13322073578595314,6.996675585284276,0.2549832775919732,7.071759197324412,BUILD123-A9,4303

+0.6041275167785232,0.03298993288590601,3.4339362416107417,0.7437633333333337,0.7396053511705688,0.10326421404682272,5.9100234113712355,0.10244666666666673,6.054550000000003,0.797926421404682,0.7449230769230767,0.10710367892976588,6.001143812709029,0.2192441471571906,6.169254180602006,BUILD140-A9,4302

+0.6554932432432432,0.025249999999999957,6.571787162162162,0.7396254180602008,0.7481270903010034,0.1206588628762543,7.039779264214047,0.12352173913043475,7.089444816053512,0.796739130434783,0.7442575250836125,0.12743478260869562,7.183769230769225,0.24583946488294314,7.270949832775918,BUILD141-A9,4301

+0.6075050167224079,0.0307224080267558,3.272969899665556,0.74051839464883,0.7461672240802679,0.14212709030100343,5.643010033444815,0.14297324414715717,5.684511705685621,0.7962107023411377,0.743635451505017,0.14098327759197316,5.81646488294315,0.27507357859531784,5.872732441471575,BUILD147-A9,4300

+0.6067953020134226,0.03311744966442949,3.263536912751678,0.7419866220735789,0.7404013377926428,0.10015384615384615,5.547240802675584,0.1003210702341137,5.592451505016723,0.7983645484949834,0.7548829431438128,0.1038494983277593,5.954173913043478,0.2181070234113712,5.748311036789298,BUILD153-A9,4299

+0.6042684563758387,0.034385906040268435,3.853036912751676,0.7450234113712373,0.7375752508361204,0.12222073578595316,6.582113712374581,0.12398327759197343,6.615344481605353,0.8019632107023412,0.7475852842809373,0.13495652173913036,6.724909698996655,0.2530267558528428,7.126595317725751,BUILD157-A9,4298

+0.6018489932885908,0.02603020134228185,3.240379194630871,0.7493444816053513,0.739702341137124,0.12759197324414717,5.684678929765891,0.12863879598662198,5.640397993311038,0.8008762541806023,0.7539096989966557,0.1344548494983278,5.713655518394653,0.25445484949832775,6.0827458193979895,BUILD159-A9,4297

+0.5956722408026758,0.010227424749163877,3.56116053511706,0.7509063545150504,0.744882943143813,0.12426421404682275,6.516090301003342,0.11890635451505016,6.443581939799333,0.8059798657718118,0.7465685618729095,0.12505016722408038,6.432040133779263,0.26474161073825525,6.693080536912754,BUILD155-A9,4296

+0.6007424749163875,0.029478260869565193,4.35380602006689,0.7428461538461542,0.7473143812709033,0.11659531772575252,7.530357859531776,0.11626086956521738,7.499040133779263,0.7986254180602007,0.7524682274247495,0.12201672240802675,7.517006688963212,0.2517123745819396,7.892200668896324,BUILD125-A9,4295

+0.5964765100671143,0.02378523489932884,4.023724832214766,0.7384849498327762,0.7465652173913039,0.10904347826086949,6.917247491638796,0.11005351170568568,7.022635451505021,0.7940100334448156,0.7413511705685626,0.11518729096989963,6.9905518394648825,0.2456889632107023,7.104906354515049,BUILD165-A9,4294

+0.6079598662207355,0.028993311036789288,3.579050167224083,0.750020066889632,0.7387725752508362,0.1201270903010034,5.866080267558526,0.12120735785953182,5.899939799331107,0.8052006688963207,0.7451872909699001,0.138515050167224,5.868555183946486,0.25076923076923074,6.060729096989962,BUILD143-A9,4293

+0.6042341137123752,0.03648160535117054,4.687665551839466,0.7441404682274249,0.7733946488294314,0.18809030100334462,8.638214046822736,0.15669230769230774,7.752357859531772,0.8091973244147156,0.7441872909699,0.16640133779264227,7.996889632107024,0.3351973244147156,8.558568561872912,BUILD135-A9,4292

+0.6108896321070234,0.028200668896321054,3.4899030100334447,0.7479597315436242,0.7386454849498333,0.09558862876254183,5.749006688963214,0.09668456375838931,5.619563758389262,0.8066006711409397,0.7443076923076926,0.10204682274247488,5.822625418060201,0.21010738255033556,5.900436241610743,BUILD153-A9,4291

+0.601953177257525,0.027454849498327747,4.537040133779266,0.7407023411371242,0.7400334448160536,0.10568227424749164,8.024762541806021,0.10455852842809372,7.889321070234116,0.7964949832775916,0.7461137123745823,0.11140468227424748,8.13568227424749,0.2352040133779263,8.384167224080269,BUILD125-A9,4290

+0.6600303030303026,0.036831649831649785,5.689562289562288,0.7409598662207364,0.7404180602006689,0.12256856187290968,6.500548494983277,0.12748160535117065,6.451257525083613,0.7987357859531774,0.7436153846153845,0.13173913043478272,6.473073578595315,0.2574080267558527,6.6419933110367895,BUILD168-A9,4289

+0.6618361204013375,0.03274247491638794,5.684933110367896,0.7762040133779259,0.7384715719063549,0.12022408026755851,6.3974214046822775,0.11683612040133776,9.852478260869562,0.7953892617449659,0.7448561872909706,0.127418060200669,6.44745819397994,0.25649328859060416,6.675848993288591,BUILD120-A9,4288

+0.5959999999999995,0.026734899328859044,3.0628221476510076,0.7444548494983279,0.7394949832775922,0.10688294314381273,5.412053511705682,0.10854180602006698,5.468411371237458,0.8052040133779264,0.7437190635451503,0.11255183946488284,5.433404682274248,0.22463879598662204,5.810471571906353,BUILD172-A9,4287

+0.6059464882943143,0.03294314381270901,4.159033444816052,0.7384816053511707,0.7384113712374581,0.1109665551839464,7.2418060200668855,0.11288963210702345,7.243451505016725,0.8056956521739131,0.7554046822742478,0.12152842809364557,7.462414715719067,0.24101337792642147,7.65592642140468,BUILD137-A9,4286

+0.6039832775919732,0.03900668896321064,4.5300635451505,0.7392408026755859,0.7451605351170562,0.15045819397993324,7.43346488294314,0.15180602006688965,7.799451505016723,0.8010769230769235,0.7420301003344482,0.1625083612040134,7.54750501672241,0.3299264214046822,7.9256789297658825,BUILD135-A9,4285

+0.601264214046823,0.024732441471571852,3.9889732441471564,0.7452842809364544,0.7408127090301005,0.10922742474916393,6.8088829431438125,0.11097993311036781,7.049909698996655,0.796234113712375,0.7450233333333333,0.11598333333333331,6.8999166666666705,0.23852508361203992,7.0530167224080325,BUILD119-A9,4284

+0.6060838926174489,0.030778523489932853,3.8152147651006696,0.7489933110367897,0.7401170568561871,0.11509030100334448,6.617739130434786,0.11976254180602011,7.04219732441472,0.7954080267558532,0.7579530201342288,0.12463087248322155,6.9434161073825535,0.24697658862876226,6.905086956521738,BUILD169-A9,4283

+0.6065418060200666,0.03260535117056854,3.5117023411371218,0.7395551839464892,0.7457725752508371,0.10866889632107032,5.880197324414722,0.10967558528428091,5.970846153846157,0.8044381270903008,0.746294314381271,0.1168528428093645,6.3251739130434785,0.2464715719063544,6.293558528428093,BUILD170-A9,4282

+0.6073221476510072,0.03534228187919463,3.6939597315436234,0.7446387959866223,0.7389765886287628,0.13563879598662212,6.335655518394647,0.1418795986622073,6.3917625418060195,0.7953812709030098,0.7477725752508364,0.1518494983277592,6.793892976588628,0.3053745819397994,6.640344481605346,BUILD139-A9,4281

+0.6114949832775923,0.014672240802675578,4.393618729096991,0.7390533333333335,0.7369197324414715,0.11440802675585296,7.500729096989966,0.11583333333333339,7.496910000000001,0.7950836120401336,0.7530702341137127,0.1220836120401339,7.408498327759191,0.2458227424749164,7.764889632107021,BUILD137-A9,4280

+0.623260869565218,0.03136454849498324,4.477588628762543,0.7374548494983278,0.7404682274247496,0.10276923076923081,6.420401337792644,0.10250501672240803,6.446117056856188,0.7954581939799329,0.7535117056856191,0.1093177257525083,6.493892976588628,0.22493311036789287,6.70776923076923,BUILD151-A9,4279

+0.6015183946488293,0.03823745819397993,3.7289732441471592,0.7457290969899667,0.7463812709030107,0.1457892976588628,6.470752508361202,0.14590301003344483,6.40772575250836,0.7960301003344477,0.7434749163879603,0.15564214046822739,6.705167224080266,0.3015016722408028,6.858635451505015,BUILD154-A9,4278

+0.6009060402684564,0.02906040268456374,3.2225100671140945,0.7443612040133782,0.7383545150501681,0.11734448160535126,5.7262207357859545,0.1219197324414715,5.670441471571908,0.8054648829431431,0.7465819397993312,0.12661538461538457,5.831297658862876,0.24453846153846157,5.9294882943143845,BUILD143-A9,4277

+0.6085469798657719,0.029258389261744934,3.570959731543625,0.7418160535117054,0.7415719063545151,0.12122408026755854,6.02003678929766,0.1217892976588628,6.031053511705687,0.8064180602006692,0.7468060200668896,0.12947826086956515,6.199939799331104,0.2540167224080266,6.368270903010036,BUILD21-B1,4276

+0.6044648829431443,0.03684615384615379,3.727752508361204,0.7407993311036792,0.7384046822742475,0.12942140468227417,6.613852842809365,0.13109364548494987,6.629839464882944,0.7962307692307686,0.7438561872909698,0.13613377926421413,6.90191304347826,0.2792508361204013,6.886421404682278,BUILD142-A9,4275

+0.6007625418060201,0.014963210702341122,3.4337959866220764,0.7472474916387964,0.7417290969899676,0.1221270903010032,6.13423411371238,0.12313377926421405,6.168622073578598,0.7989030100334452,0.7631571906354513,0.13670568561872903,6.254371237458192,0.25700334448160544,6.41620735785953,BUILD21-B1,4274

+0.6058795986622072,0.03359866220735782,3.8080535117056855,0.7429163879598664,0.7471270903010033,0.11308361204013384,6.835454849498325,0.11825083612040131,6.614538461538463,0.7996321070234121,0.7545250836120404,0.11707023411371237,6.809267558528433,0.23693645484949827,6.85056856187291,BUILD181-A9,4273

+0.6028120805369129,0.02999328859060397,4.33745637583893,0.7396555183946489,0.7393578595317727,0.12281605351170567,7.374287625418061,0.12738461538461537,7.430297658862877,0.7952207357859533,0.7445953177257526,0.13129096989966557,7.3041605351170595,0.27851505016722433,7.708571906354513,BUILD149-A9,4272

+0.6061644295302018,0.03752684563758384,3.819899328859061,0.7383210702341134,0.7357625418060201,0.14203678929765878,6.531474916387961,0.14682943143812704,6.440903010033445,0.7966555183946493,0.7414983277591971,0.15290969899665555,6.760150501672239,0.29704013377926414,6.76790301003345,BUILD154-A9,4271

+0.6099899665551838,0.022498327759197276,3.5025117056856194,0.7444381270903012,0.7404682274247488,0.14447491638795987,5.800143812709032,0.14359531772575249,5.885789297658864,0.8179866220735784,0.7535819397993315,0.15690301003344484,5.935715719063545,0.30569565217391315,6.065006688963209,BUILD147-A9,4270

+0.604909698996656,0.015234113712374575,3.4964046822742456,0.7394481605351165,0.7471471571906352,0.11893311036789293,6.563923076923077,0.11814715719063552,6.205006688963207,0.7966555183946491,0.74276254180602,0.12297993311036783,6.520274247491639,0.26236454849498336,6.655230769230771,BUILD163-A9,4269

+0.6013076923076923,0.014324414715719056,3.700802675585286,0.7399598662207362,0.7389832775919732,0.1137190635451505,6.277361204013379,0.11479264214046825,6.382618729096988,0.8027491638795986,0.7545284280936457,0.11945484949832776,6.310789297658861,0.23874916387959874,6.478571906354513,BUILD126-A9,4268

+0.6043557046979866,0.03614429530201339,4.711033557046978,0.7397248322147654,0.7430969899665553,0.11177591973244151,8.093274247491646,0.10864093959731547,7.869738255033564,0.8643221476510069,0.744307692307692,0.11770903010033437,7.914063545150504,0.24819798657718123,10.881714765100671,BUILD125-A9,4267

+0.612989932885906,0.02848322147651002,4.074355704697986,0.7411571906354514,0.7396588628762544,0.1098461538461539,6.428351170568559,0.1044013377926422,6.441739130434784,0.7968494983277591,0.7532709030100332,0.11031438127090307,6.584789297658864,0.2257993311036788,6.63952508361204,BUILD178-A9,4266

+0.6078993288590605,0.027389261744966403,4.42068456375839,0.7654395973154361,0.7614481605351172,0.14848494983277596,7.893745819397989,0.12753691275167783,8.260768456375839,0.8031973244147159,0.7452073578595312,0.13115050167224077,7.426515050167222,0.27839130434782605,7.730755852842816,BUILD149-A9,4265

+0.6017157190635452,0.031882943143812674,3.7442675585284304,0.7365785953177263,0.7344448160535123,0.13177257525083613,6.423712374581936,0.13334448160535117,6.364989966555184,0.793518394648829,0.7408160535117057,0.1400301003344481,6.544939799331104,0.30007023411371236,6.712765886287629,BUILD139-A9,4264

+0.6052140468227425,0.02810033444816051,3.4954247491638792,0.7410100334448169,0.7359632107023416,0.09242140468227428,6.0775384615384604,0.09487959866220731,6.0827224080267515,0.7975819397993308,0.7428026755852848,0.09563545150501682,5.973571906354512,0.21058528428093665,6.091327759197323,BUILD129-A9,4263

+0.6089632107023407,0.03485618729096986,3.6282341137123733,0.7472374581939809,0.7395503355704701,0.12290939597315435,5.813557046979863,0.12292307692307677,5.614090301003346,0.7973311036789301,0.743508361204014,0.12858193979933105,5.57117391304348,0.24289297658862852,5.679274247491642,BUILD160-A9,4262

+0.606174496644295,0.024875838926174475,4.066489932885909,0.7468020134228188,0.7632809364548497,0.13727090301003328,6.932237458193983,0.11451342281879197,6.975070469798657,0.7942575250836118,0.7440468227424749,0.1200635451505018,6.863541806020064,0.23909364548494966,6.918712374581939,BUILD144-A9,4261

+0.5954916387959873,0.032311036789297636,3.146515050167225,0.7387391304347829,0.7371070234113709,0.12076588628762547,5.6935384615384645,0.12588963210702342,5.7718829431438134,0.7963913043478259,0.7439364548494983,0.1282140468227424,5.929688963210698,0.2649163879598663,6.018311036789297,BUILD133-A9,4260

+0.6024481605351167,0.035618729096989925,3.253033444816053,0.7392508361204015,0.7360602006688971,0.08890635451505013,5.530782608695652,0.08912374581939796,5.611688963210705,0.7950969899665553,0.7420267558528435,0.0953444816053512,5.718217391304347,0.2031137123745821,5.746448160535118,BUILD153-A9,4259

+0.5990402684563759,0.03116442953020132,3.838046979865773,0.7478595317725759,0.7358528428093649,0.11541471571906359,7.111230769230765,0.12146488294314388,7.1501438127090315,0.8051438127090305,0.7519397993311043,0.12638127090301007,7.2829698996655505,0.24732441471571884,7.469568561872908,BUILD130-A9,4258

+0.6050268456375838,0.03443959731543623,3.4951543624161068,0.7445585284280941,0.737214046822743,0.12952508361204013,6.1285183946488315,0.13558193979933128,6.151381270903011,0.7959632107023411,0.7432508361204017,0.1358595317725753,6.387381270903009,0.25900668896321105,6.334424749163875,BUILD146-A9,4257

+0.6068657718120799,0.033278523489932856,3.90169798657718,0.7386688963210704,0.7453311036789304,0.15102341137123743,6.332494983277591,0.1540501672240802,6.385391304347828,0.7964046822742478,0.7419264214046827,0.1615284280936456,6.46963879598662,0.30491638795986625,6.692030100334448,BUILD154-A9,4256

+0.6041170568561873,0.028050167224080227,3.9629331103678926,0.7611610738255036,0.7575852842809371,0.14833444816053526,6.573046822742479,0.1257751677852349,6.908674496644293,0.7945351170568562,0.7453511705685619,0.1270434782608696,6.501354515050164,0.25138795986622076,6.657023411371232,BUILD169-A9,4255

+0.6014113712374582,0.015193979933110372,3.642143812709026,0.7381404682274257,0.7433812709030101,0.1134013377926422,6.118314381270904,0.10915050167224086,6.086374581939799,0.7950568561872909,0.7457725752508363,0.11816387959866224,6.252220735785957,0.24003678929765887,6.345153846153845,BUILD126-A9,4254

+0.599057046979866,0.024194630872483216,3.446694630872484,0.7420836120401335,0.7376454849498327,0.1083110367892976,6.013856187290969,0.11092307692307696,6.1592474916388,0.7971137123745813,0.7407792642140467,0.11454180602006696,5.922197324414717,0.24344481605351145,6.120939799331103,BUILD118-A9,4253

+0.6096442953020131,0.03432885906040263,4.037748322147649,0.7377023411371243,0.7371872909698999,0.11430769230769235,6.061163879598668,0.11420401337792642,6.071588628762536,0.7935618729096992,0.7438127090301014,0.1202107023411371,6.192705685618727,0.24385284280936442,6.287043478260872,BUILD126-A9,4252

+0.604328859060403,0.030177852348993273,3.697687919463088,0.7459130434782613,0.7411571906354518,0.10780602006688976,6.610688963210708,0.1104046822742475,6.7247692307692315,0.7950869565217388,0.7438093645484952,0.11579933110367896,6.72457859531772,0.23649163879598667,6.915789297658861,BUILD123-A9,4251

+0.6120535117056854,0.03309364548494981,3.4513344481605346,0.7722876254180605,0.7668282828282823,0.11388888888888887,6.525397306397308,0.10793645484949832,6.875,0.794625418060201,0.7434983277591973,0.11447157190635453,5.487608695652174,0.23323411371237437,5.701214046822743,BUILD138-A9,4250

+0.6072550335570468,0.03032550335570466,3.828704697986577,0.7488829431438135,0.7452006688963213,0.10781939799331096,6.361789297658861,0.10929096989966554,6.530625418060206,0.7971066666666669,0.74494983277592,0.11443478260869556,6.581484949832775,0.23225333333333326,6.781956666666664,BUILD178-A9,4249

+0.6051006711409396,0.027671140939597286,3.4007315436241625,0.738598662207359,0.7378862876254177,0.09710033444816045,5.562535117056856,0.09566555183946486,5.742896321070235,0.7943010033444815,0.7443244147157199,0.10463210702341141,5.676264214046825,0.21809030100334453,5.7807759197324415,BUILD145-A9,4248

+0.5953355704697985,0.025751677852348952,3.126087248322146,0.7401003344481607,0.74676254180602,0.12756856187290977,5.59579264214047,0.12428428093645492,5.531963210702344,0.7967692307692312,0.7584581939799333,0.1341772575250837,5.502374581939799,0.25347157190635444,5.717381270903012,BUILD160-A9,4247

+0.6003712374581938,0.027301003344481576,3.633063545150502,0.7504046822742474,0.7382976588628761,0.10102341137123742,6.304387959866221,0.10459866220735788,6.412608695652174,0.8011137123745818,0.7468227424749161,0.10460535117056854,6.319545150501676,0.22883277591973247,6.7297491638796,BUILD175-A9,4246

+0.6061571906354515,0.03592642140468223,3.2326220735785935,0.7466789297658863,0.7370836120401341,0.10802675585284285,5.452023411371239,0.11030100334448159,5.54361204013378,0.8013110367892979,0.799265993265994,0.11199326599326605,7.31187542087542,0.22911036789297642,5.745234113712373,BUILD138-A9,4245

+0.6084849498327752,0.017565217391304337,3.5072341137123746,0.7427290969899671,0.7495033333333339,0.14791333333333326,6.6483933333333285,0.14538461538461545,6.289424749163881,0.802086956521739,0.749969899665552,0.15154515050167236,6.58438461538461,0.30076923076923096,6.691822742474917,BUILD154-A9,4244

+0.5971070234113711,0.029290969899665526,3.7147257525083606,0.7384448160535124,0.7417658862876255,0.1080301003344482,6.742762541806017,0.11041806020066897,6.493354515050164,0.7996409395973154,0.7448428093645487,0.11749832775919722,6.603949832775919,0.24168791946308715,7.170291946308726,BUILD144-A9,4243

+0.6004715719063546,0.01684280936454849,3.832882943143817,0.7362107023411373,0.7438695652173914,0.13249832775919723,6.762177257525084,0.13469565217391294,6.708852842809364,0.7933344481605349,0.7427658862876255,0.1384147157190635,6.8574782608695655,0.27714046822742466,7.034341137123746,BUILD142-A9,4242

+0.6141939799331105,0.032779264214046824,4.341200668896317,0.7423166666666673,0.7377391304347831,0.13757190635451508,6.560277591973239,0.14111,6.695590000000001,0.8025551839464882,0.7525819397993314,0.14627424749163873,6.77220066889632,0.2884983277591975,6.910010033444814,BUILD179-A9,4241

+0.5964429530201344,0.029120805369127496,3.9307281879194638,0.7384648829431439,0.757040133779264,0.11427759197324411,7.1342742474916365,0.11331438127090294,7.020133779264208,0.7974648829431442,0.7436655518394646,0.11809364548494977,6.91536454849498,0.23718060200668903,7.290735785953173,BUILD132-A9,4240

+0.60596644295302,0.036634228187919435,4.223697986577183,0.7393612040133785,0.7372675585284283,0.1325551839464882,7.012056856187288,0.1316321070234114,6.960484949832776,0.8041308724832216,0.7582307692307697,0.1364615384615385,7.214491638795985,0.25826510067114083,7.34370469798658,BUILD141-A9,4239

+0.6013799999999999,0.016553333333333326,3.6870033333333354,0.7384381270903012,0.7355852842809361,0.12540468227424745,6.286123745819394,0.1228829431438127,6.444632107023413,0.7942575250836119,0.744070234113713,0.13470568561872903,6.425602006688961,0.28731103678929776,6.614859531772576,BUILD139-A9,4238

+0.6023120805369125,0.03363422818791943,3.426526845637583,0.7383712374581942,0.7478461538461542,0.1230969899665553,5.796140468227421,0.12204347826086948,5.761749163879598,0.7953277591973247,0.743157190635452,0.128314381270903,5.932976588628763,0.24914715719063532,5.971364548494982,BUILD133-A9,4237

+0.6057525083612039,0.03519397993311033,3.5967591973244133,0.7387759197324419,0.7421036789297656,0.12399665551839475,6.318541806020071,0.12360200668896329,6.119608695652172,0.8052693602693606,0.7457826086956525,0.1272240802675586,6.4734381270903,0.2513973063973065,7.172676767676766,BUILD169-A9,4236

+0.6011711409395969,0.0342919463087248,3.0564228187919475,0.7386521739130433,0.7368361204013377,0.1130401337792643,5.316204013377928,0.11193979933110375,5.173511705685616,0.7952173913043474,0.7582441471571908,0.12342140468227425,5.654819397993308,0.24329096989966545,5.5331505016722415,BUILD161-A9,4235

+0.6094731543624161,0.028302013422818777,3.5815469798657693,0.7463913043478265,0.7500267558528436,0.090056856187291,5.830558528428091,0.09505685618729098,5.78338795986622,0.7986321070234114,0.7473678929765885,0.094438127090301,6.079665551839463,0.20309698996655526,6.021775919732438,BUILD182-A9,4234

+0.5996510067114096,0.025912751677852314,3.560550335570467,0.7397926421404686,0.7375050167224084,0.10911371237458196,6.392451505016726,0.10946153846153849,6.4222173913043505,0.8125217391304345,0.7476956521739134,0.11754849498327763,6.8957826086956535,0.24796321070234092,7.02304347826087,BUILD151-A9,4233

+0.6047281879194631,0.026456375838926148,3.392885906040269,0.7385752508361201,0.7491073825503353,0.09166442953020135,6.10142617449664,0.08931438127090303,6.033030100334445,0.815208053691275,0.7938080808080809,0.10071043771043776,7.665117845117846,0.22932214765100672,6.543006711409398,BUILD129-A9,4232

+0.6000134228187919,0.035620805369127484,3.5738221476510055,0.7400668896321071,0.7379665551839465,0.12193645484949822,6.307943143812711,0.12218394648829432,6.3048996655518375,0.7947257525083615,0.7542441471571905,0.12994648829431432,6.568946488294316,0.25766889632107026,6.617354515050167,BUILD168-A9,4231

+0.6057483221476507,0.028557046979865747,3.5636644295302013,0.7549732441471576,0.7391872909698994,0.1205919732441471,6.39754180602007,0.12505016722408027,6.6694648829431395,0.8051806020066886,0.756553691275168,0.1297248322147652,6.735073825503356,0.2547926421404684,6.697270903010034,BUILD164-A9,4230

+0.6074161073825501,0.030046979865771768,3.5207080536912763,0.7393578595317726,0.7538862876254185,0.10536454849498327,5.8951571906354525,0.10992976588628767,6.022749163879591,0.803498327759197,0.7537658862876256,0.1104882943143813,5.876317725752508,0.239010033444816,6.107836120401339,BUILD118-A9,4229

+0.6015785953177256,0.03332775919732439,3.4020468227424727,0.7466956521739135,0.7529096989966562,0.1226220735785953,5.903364548494985,0.12204682274247498,5.761357859531772,0.804321070234114,0.7536387959866232,0.13109364548494978,5.701765886287622,0.260304347826087,6.209260869565218,BUILD156-A9,4228

+0.606523489932886,0.02655369127516776,4.1258422818791916,0.7405484949832778,0.7456421404682283,0.11586287625418068,6.879294314381275,0.11588963210702345,6.793341137123751,0.8040836120401336,0.7453712374581944,0.11936789297658862,6.738792642140471,0.23948829431438132,7.022207357859535,BUILD181-A9,4227

+0.6031845637583891,0.029355704697986557,3.609889261744966,0.7420635451505019,0.7510668896321071,0.12197324414715717,6.03674247491639,0.12335785953177263,6.137110367892982,0.7979397993311039,0.7479130434782614,0.13260200668896327,6.059294314381269,0.25614715719063547,6.215658862876251,BUILD21-B1,4226

+0.6114865771812079,0.03329865771812077,3.8882046979865756,0.7379765886287628,0.7442307692307694,0.12857859531772584,6.331742474916391,0.1297123745819399,6.322561872909702,0.7923712374581943,0.7564715719063546,0.13737123745819405,6.5448829431438105,0.2936187290969901,6.637959866220736,BUILD139-A9,4225

+0.6031103678929765,0.030809364548494964,3.357391304347824,0.7399565217391314,0.7401438127090304,0.12243812709030104,5.69794983277592,0.1254882943143813,5.603254180602008,0.7988729096989972,0.7602441471571909,0.13794983277591963,5.962404682274247,0.24645150501672228,5.662628762541808,BUILD160-A9,4224

+0.6060704697986581,0.031157718120805315,3.751184563758391,0.7434849498327759,0.7385618729096994,0.12382943143812718,6.527892976588627,0.12775919732441474,6.510816053511703,0.7951103678929773,0.7515986622073573,0.12886956521739135,6.656100334448163,0.26648160535117055,6.746688963210701,BUILD120-A9,4223

+0.606846153846154,0.031230769230769194,3.2037224080267577,0.7377090301003347,0.7445752508361209,0.10938795986622077,5.679832775919732,0.10880267558528424,5.693153846153848,0.7956555183946489,0.7448896321070236,0.11489966555183947,5.780856187290973,0.2199331103678931,5.8172173913043475,BUILD136-A9,4222

+0.6052147651006708,0.028701342281879167,3.184342281879196,0.738056856187291,0.7393666666666668,0.11331999999999996,5.46363,0.11348829431438129,5.484963210702344,0.8012341137123752,0.7434280936454852,0.11986287625418057,5.526167224080273,0.22658528428093624,5.874675585284279,BUILD172-A9,4221

+0.6101845637583896,0.02723154362416108,3.7051308724832204,0.7488120805369127,0.7403946488294318,0.09439799331103683,6.082237458193979,0.09559060402684559,6.163120805369125,0.7982976588628764,0.7563411371237458,0.09812709030100346,6.074648829431437,0.20124414715719066,6.050903010033443,BUILD182-A9,4220

+0.6050535117056863,0.030933110367892914,3.686297658862877,0.7486488294314384,0.736488294314382,0.11508695652173916,6.188224080267562,0.11975585284280937,6.335127090301006,0.7958461538461542,0.7433812709030103,0.1242842809364549,6.507538461538459,0.2375752508361201,6.3521270903010025,BUILD126-A9,4219

+0.6147625418060199,0.014471571906354511,3.3463645484949853,0.7366655518394645,0.736401337792642,0.10999665551839462,5.70402341137124,0.11322742474916396,5.537377926421401,0.7976053511705686,0.7445752508361202,0.11906688963210697,5.748511705685619,0.22827090301003336,5.81897658862876,BUILD138-A9,4218

+0.6056127946127943,0.03399326599326594,3.4382558922558926,0.7381237458193982,0.7369498327759205,0.1150969899665552,5.603688963210705,0.11342474916387953,5.530083612040135,0.7975484949832782,0.7482775919732443,0.11841137123745822,5.761006688963208,0.22931103678929754,5.659505016722412,BUILD138-A9,4217

+0.6231818181818187,0.026020202020201996,3.9774478114478127,0.7387123745819405,0.7430234113712375,0.09955852842809362,5.596745819397996,0.09605685618729104,5.52646822742475,0.8030869565217393,0.7598127090301007,0.09978595317725761,5.636200668896323,0.20792307692307704,5.70466889632107,BUILD127-A9,4216

+0.6080869565217385,0.033846153846153804,3.4920936454849483,0.7391103678929768,0.7369030100334455,0.13197658862876244,5.581943143812712,0.1362408026755852,5.703769230769228,0.8148929765886291,0.7416555183946489,0.14218060200668897,5.6538628762541805,0.25621070234113696,5.649494983277595,BUILD160-A9,4215

+0.6057617449664433,0.027510067114093914,3.821697986577178,0.7402709030100341,0.7431237458193982,0.11909698996655516,6.877521739130439,0.11826421404682273,6.9039030100334475,0.7991404682274247,0.7615752508361204,0.12990635451505017,7.140354515050167,0.2397859531772575,7.075642140468229,BUILD181-A9,4214

+0.5998929765886292,0.015030100334448168,3.945765886287625,0.7503478260869565,0.7366521739130439,0.13295652173913047,7.0467391304347835,0.13435785953177254,6.952237458193977,0.805642140468227,0.7438127090301007,0.13947157190635448,7.186478260869567,0.26529431438127105,7.211461538461539,BUILD173-A9,4213

+0.6109866220735787,0.010153846153846156,3.683886287625418,0.7377123745819406,0.7375551839464884,0.13127090301003344,6.699705685618725,0.1324648829431438,6.729498327759199,0.7965317725752512,0.7497993311036794,0.139505016722408,6.764521739130435,0.2628528428093648,6.822190635451505,BUILD168-A9,4212

+0.6068255033557051,0.028694630872483216,3.589973154362416,0.7389197324414715,0.7417147651006712,0.10159060402684571,6.795644295302007,0.10466889632107028,6.466397993311034,0.8033779264214046,0.743946488294314,0.10903678929765882,6.6320668896321076,0.22812040133779277,6.511000000000001,BUILD175-A9,4211

+0.6029431438127089,0.03685284280936452,4.678404682274247,0.7434214046822746,0.7372408026755858,0.11937792642140478,8.02827424749164,0.11853846153846158,8.06324080267558,0.8022140468227416,0.7522642140468222,0.1258428093645485,8.383010033444819,0.24414381270903,8.52675585284281,BUILD125-A9,4210

+0.6073120805369127,0.03615436241610734,3.9381476510067093,0.7383277591973253,0.7436321070234113,0.1408896321070236,7.115317725752507,0.14470903010033445,7.010769230769228,0.7982408026755852,0.7430066889632104,0.14155518394648822,7.36077257525084,0.269916387959866,7.252050167224081,BUILD173-A9,4209

+0.601010067114094,0.026704697986577153,3.6286610738255014,0.740103678929766,0.7362508361204017,0.11486287625418068,6.907317725752511,0.11371237458193985,6.7315719063545165,0.799250836120401,0.7442675585284275,0.12219732441471584,7.068204013377928,0.23802341137123745,7.0456020066889575,BUILD144-A9,4208

+0.6037792642140465,0.03335117056856183,3.892321070234115,0.741013377926422,0.7370033444816056,0.14360200668896314,6.821444816053519,0.14565886287625424,6.547923076923081,0.7986789297658863,0.7534180602006686,0.16979598662207368,6.9608896321070235,0.28615050167224115,6.962618729096988,BUILD179-A9,4207

+0.6024949832775922,0.02600668896321068,3.894183946488295,0.7432516778523492,0.7354147157190639,0.12760200668896324,6.712939799331099,0.13247651006711414,7.00352348993288,0.7974515050167219,0.7431371237458192,0.14048829431438117,6.855979933110366,0.2522073578595317,6.773501672240801,BUILD157-A9,4206

+0.6020635451505016,0.015474916387959857,4.145364548494983,0.74658,0.7380702341137124,0.12795986622073582,7.419953177257523,0.12880333333333327,7.568616666666667,0.7962374581939804,0.7439698996655526,0.13818060200668897,7.650297658862865,0.2511505016722407,7.561394648829431,BUILD130-A9,4205

+0.6045436241610737,0.033080536912751646,3.9569328859060384,0.7378762541806023,0.7369999999999998,0.11716387959866224,6.740872909698997,0.12137458193979934,6.965678929765886,0.7959732441471572,0.7480668896321071,0.12295652173913049,7.083441471571905,0.2384949832775919,6.901100334448161,BUILD181-A9,4204

+0.6018829431438122,0.014595317725752505,3.07331772575251,0.7387290969899668,0.7436889632107024,0.11538127090301004,5.661913043478266,0.11909364548494979,5.531147157190635,0.8043779264214043,0.7504080267558537,0.12427090301003346,5.623438127090296,0.23188963210702343,5.634809364548489,BUILD172-A9,4203

+0.6089197324414714,0.01409364548494983,3.8713645484949835,0.7368662207357857,0.7365250836120404,0.1456555183946488,7.258806020066895,0.14525083612040135,7.065688963210704,0.7973210702341138,0.7489799331103679,0.1590635451505016,7.348923076923071,0.28428428093645497,7.445715719063546,BUILD158-A9,4202

+0.6071040268456378,0.03604697986577179,3.545355704697986,0.7395551839464882,0.7459464882943146,0.13585618729096993,5.630602006688962,0.13468227424749163,5.699314381270906,0.797180602006689,0.7437458193979924,0.14294983277591966,5.6835150501672285,0.2607090301003346,5.741668896321068,BUILD162-A9,4201

+0.6022207357859529,0.0319498327759197,3.145237458193979,0.7396321070234115,0.7411638795986618,0.09371237458193984,5.620709030100333,0.09615384615384619,5.601826086956522,0.7975953177257525,0.7440501672240807,0.10274247491638801,5.5011438127090315,0.20987959866220743,5.527973244147164,BUILD127-A9,4200

+0.6077986577181208,0.03306040268456373,3.458731543624159,0.7405785953177262,0.7405016722408023,0.12835785953177262,5.885471571906352,0.13154515050167223,5.831675585284276,0.7972408026755853,0.8057046979865772,0.1368355704697987,7.769130872483219,0.2526321070234114,5.931227424749163,BUILD159-A9,4199

+0.6041946308724835,0.03007718120805367,4.240359060402684,0.7398628762541803,0.743872909698997,0.09527759197324417,6.268906354515046,0.0977224080267559,6.130561872909703,0.7976120401337791,0.745625418060201,0.0996521739130435,6.325130434782609,0.20905685618729122,6.390852842809363,BUILD129-A9,4198

+0.6032642140468228,0.014879598662207349,3.688408026755852,0.7393979933110366,0.7372240802675586,0.12115384615384614,6.628551839464886,0.12306354515050169,6.561327759197322,0.8039464882943147,0.7445183946488301,0.1277558528428094,6.776448160535116,0.2494615384615385,6.863371237458194,BUILD169-A9,4197

+0.6102642140468222,0.013408026755852839,3.665351170568562,0.7579230769230773,0.7380702341137124,0.1047056856187291,6.664799331103675,0.10660869565217389,7.0421973244147145,0.8009060402684566,0.7439698996655516,0.11053846153846157,6.763899665551839,0.21894966442953015,6.955402684563757,BUILD178-A9,4196

+0.6011505016722405,0.016515050167224075,3.5623678929765883,0.7362307692307702,0.7404615384615387,0.13704682274247487,6.734588628762544,0.13366889632107026,6.625244147157189,0.8007190635451498,0.7410267558528428,0.14433110367892973,6.768936454849499,0.29015384615384604,6.938471571906356,BUILD139-A9,4195

+0.613771812080537,0.031093959731543584,3.9193859060402705,0.738394648829432,0.7451103678929772,0.11718729096989977,6.2886220735785985,0.1184247491638796,6.421816053511705,0.8004530201342273,0.750979933110368,0.12583277591973244,6.564107023411373,0.24044966442952995,6.8606946308724845,BUILD126-A9,4194

+0.606153846153846,0.0326755852842809,4.193063545150501,0.7400033557046988,0.7438060200668896,0.1358729096989966,7.2678862876254176,0.14026510067114098,7.143661073825507,0.8079130434782602,0.7502006688963209,0.1535652173913044,7.331672240802674,0.31293979933110366,7.452334448160541,BUILD180-A9,4193

+0.6059063545150498,0.030969899665551814,3.8334180602006698,0.7414314381270906,0.7383946488294315,0.11314381270902997,6.886424749163876,0.1155852842809364,6.832418060200666,0.7976053511705686,0.7433812709030103,0.11733110367892982,7.125712374581942,0.23370903010033436,7.005448160535115,BUILD128-A9,4192

+0.6130234113712375,0.03608695652173911,3.4239264214046825,0.7378829431438129,0.7373076923076922,0.1287357859531773,5.554401337792642,0.1273612040133779,5.597090301003346,0.7978896321070237,0.7432274247491635,0.13512040133779268,5.630588628762543,0.24838795986622073,5.733096989966554,BUILD160-A9,4191

+0.6193724832214769,0.024355704697986556,4.587842281879191,0.7556622073578594,0.7395418060200664,0.13854180602006702,6.656923076923082,0.14012374581939796,7.5815585284281015,0.808371237458194,0.7568294314381271,0.14230434782608706,6.841307692307695,0.2704247491638796,6.829046822742471,BUILD164-A9,4190

+0.606852842809365,0.03652842809364544,3.3872943143812746,0.7385451505016722,0.7407491638795989,0.1147257525083612,5.625662207357856,0.11407357859531776,5.725775919732438,0.7965250836120398,0.7526020066889625,0.11893311036789303,5.694725752508363,0.2241304347826088,5.763090301003348,BUILD136-A9,4189

+0.6053657718120808,0.030265100671140924,3.821241610738256,0.7476755852842808,0.7379331103678934,0.12024749163879599,6.503545150501674,0.11929765886287623,6.612588628762545,0.796377926421404,0.7470334448160537,0.1244147157190636,6.6401906354515,0.24661204013377902,6.738635451505016,BUILD123-A9,4188

+0.6013590604026846,0.02638926174496642,3.2458456375838933,0.7390936454849505,0.7381404682274246,0.12334782608695657,5.783926421404683,0.12129096989966555,5.775150501672242,0.8035785953177259,0.743598662207358,0.12961204013377922,5.886311036789305,0.2455384615384613,5.910678929765889,BUILD176-A9,4187

+0.6081471571906353,0.015451505016722406,3.9454280936454857,0.7350836120401343,0.7363344481605355,0.13466555183946488,6.961080267558526,0.13668896321070229,7.041033444816051,0.8018628762541803,0.745933110367893,0.14267224080267557,7.589016722408027,0.2708394648829432,7.291812709030099,BUILD180-A9,4186

+0.6033444816053511,0.025698996655518357,3.9065451505016737,0.7535451505016726,0.760247491638796,0.12635785953177264,7.07252508361204,0.10691304347826085,7.403381270903014,0.8060635451505014,0.7422608695652178,0.11597658862876253,6.99107357859531,0.23295986622073556,7.255117056856189,BUILD128-A9,4185

+0.6069966442953021,0.030382550335570434,3.420895973154364,0.7394782608695663,0.7371906354515053,0.10030100334448158,5.568906354515049,0.0981304347826087,5.671056856187291,0.7971571906354513,0.7481170568561872,0.1061438127090301,5.512063545150499,0.21352842809364556,5.608464882943146,BUILD127-A9,4184

+0.6019565217391306,0.016401337792642134,3.685304347826087,0.7381571906354516,0.7371471571906358,0.13640133779264219,6.771244147157191,0.13930434782608692,6.673030100334448,0.7970802675585282,0.748752508361204,0.14617391304347824,7.110806020066889,0.27305685618729103,7.0084448160535135,BUILD142-A9,4183

+0.6034194630872486,0.036852348993288556,3.596466442953018,0.7360702341137132,0.7400301003344479,0.1490468227424749,5.903254180602007,0.15412709030100333,6.085478260869563,0.7901739130434778,0.7418963210702345,0.1614247491638796,6.2882140468227385,0.32511371237458203,6.179301003344479,BUILD148-A9,4182

+0.5989362416107387,0.025630872483221434,3.33060067114094,0.7385050167224081,0.7458093645484956,0.09552173913043475,6.003046822742478,0.09742474916387968,6.185083612040135,0.7967692307692316,0.7455217391304357,0.10010367892976592,6.174812709030097,0.20741471571906375,6.159277591973245,BUILD129-A9,4181

+0.6023612040133776,0.03242140468227423,3.7393745819397974,0.7391438127090305,0.7374548494983283,0.11576254180602004,6.423819397993313,0.11626421404682273,6.484839464882943,0.795458193979933,0.749484949832776,0.1205484949832776,6.305742474916392,0.23653511705685606,6.438030100334448,BUILD126-A9,4180

+0.6068087248322149,0.032738255033557,3.1334328859060423,0.7473444816053516,0.7370301003344488,0.09591638795986628,5.485003344481605,0.0969096989966555,5.4411739130434755,0.796120401337792,0.7427357859531776,0.11113712374581941,5.6653177257525105,0.20856521739130443,5.5088227424749165,BUILD127-A9,4179

+0.6094113712374584,0.023525083612040112,5.040712374581943,0.7387424749163878,0.7409030100334453,0.11655183946488296,8.077709030100333,0.11462876254180605,7.767678929765885,0.7981270903010032,0.7403377926421404,0.12325083612040133,8.112571906354516,0.23673578595317724,8.075367892976592,BUILD151-A9,4178

+0.6027080536912751,0.03224832214765097,3.895822147651008,0.7377725752508362,0.7376722408026759,0.13197658862876252,7.101240802675589,0.1363578595317725,7.034023411371241,0.7981705685618724,0.7437859531772579,0.14055518394648825,7.367535117056855,0.2709030100334451,7.14784949832776,BUILD121-A9,4177

+0.607792642140468,0.03323745819397992,4.022829431438121,0.7457859531772575,0.7514381270903011,0.11514715719063544,6.705247491638797,0.11558862876254183,6.920913043478256,0.7974682274247492,0.7518494983277589,0.11900000000000001,6.865454849498326,0.2333545150501671,6.885585284280933,BUILD128-A9,4176

+0.6025167785234898,0.03251677852348988,4.010312080536911,0.7426287625418061,0.7378662207357858,0.11775585284280943,7.242110367892975,0.12241471571906347,7.324916387959867,0.7983478260869562,0.7513043478260871,0.12491973244147155,7.18786287625418,0.23850167224080276,7.441612040133775,BUILD119-A9,4175

+0.5978489932885905,0.03182885906040265,3.4909496644295284,0.7406521739130434,0.7461270903010037,0.12412709030100336,6.156177257525081,0.13491304347826083,6.2357224080267555,0.803859531772575,0.7451036789297666,0.13721070234113708,6.159498327759196,0.2522541806020066,6.442826086956523,BUILD21-B1,4174

+0.6008963210702343,0.026913043478260807,3.168076923076926,0.7372909698996655,0.7373645484949835,0.107314381270903,5.579093645484952,0.10935451505016729,5.619518394648827,0.8032040133779264,0.7562541806020076,0.11551839464882946,5.830929765886285,0.22004013377926437,5.853421404682273,BUILD136-A9,4173

+0.6070802675585281,0.033050167224080225,3.9110802675585306,0.7462006688963213,0.7373043478260864,0.11823411371237458,6.826712374581943,0.12178595317725756,6.879441471571914,0.7981605351170569,0.7436454849498331,0.12444481605351176,7.006976588628762,0.23567558528428098,7.080083612040134,BUILD132-A9,4172

+0.6018187919463087,0.03151006711409394,3.9918791946308714,0.7357491638795999,0.7357993311036787,0.14554515050167238,7.156759197324412,0.14761872909699003,7.08502341137123,0.8161839464882942,0.7432675585284284,0.1569632107023411,7.39515719063545,0.29171906354515076,7.469959866220737,BUILD158-A9,4171

+0.5956241610738253,0.02871140939597314,3.574895973154363,0.7477123745819398,0.7360702341137125,0.1253010033444816,6.7364381270903015,0.12805685618729093,6.660996655518395,0.7999096989966561,0.7538929765886284,0.13707692307692318,6.98740468227425,0.2550501672240802,6.99569899665552,BUILD157-A9,4170

+0.5908724832214761,0.03386241610738252,4.464731543624163,0.7090735785953177,0.7066421404682275,0.13267558528428103,7.286668896321069,0.13578260869565217,7.311096989966554,0.7764749163879598,0.7289096989966553,0.14066889632107016,8.033454849498336,0.2682909698996655,7.593451505016718,BUILD142-A9,4169

+0.5990033557046976,0.02625167785234897,3.284258389261745,0.7391505016722412,0.7451404682274254,0.11207357859531769,6.335943143812709,0.1122173913043478,6.090046822742474,0.8761812080536916,0.750053511705686,0.1165117056856188,6.350090301003339,0.2436442953020136,8.302969798657713,BUILD118-A9,4168

+0.6051912751677849,0.029822147651006665,3.4785805369127516,0.7382274247491639,0.788605351170569,0.08740133779264216,7.860204013377927,0.09296989966555189,6.007107023411373,0.8355551839464882,0.7461471571906357,0.09706354515050167,5.943872909698993,0.19857525083612035,9.345906354515044,BUILD182-A9,4167

+0.6014515050167228,0.014521739130434782,3.4382943143812716,0.7489264214046825,0.7368494983277593,0.12597993311036787,6.272327759197321,0.1288227424749163,6.250816053511705,0.7965050167224085,0.7590367892976593,0.13941137123745823,6.53985618729097,0.2521973244147157,6.4895083612040105,BUILD169-A9,4166

+0.6067491638795989,0.013819397993311026,4.216311036789298,0.7426789297658867,0.7386789297658864,0.12001003344481613,7.070943143812709,0.1221003344481606,7.047010033444816,0.810906040268456,0.7467725752508361,0.13163879598662204,7.264695652173909,0.24282550335570474,7.637942953020142,BUILD177-A9,4165

+0.6078691275167784,0.034016778523489916,3.3649026845637575,0.740903010033445,0.737448160535117,0.11171906354515054,5.541929765886287,0.11609698996655521,5.617916387959867,0.7977926421404686,0.7421633333333334,0.11810000000000005,5.519480000000003,0.2301237458193979,5.586100334448156,BUILD172-A9,4164

+0.608063758389262,0.02955033557046978,3.782073825503358,0.7377257525083614,0.7519866220735792,0.13207692307692304,6.300909698996652,0.1340100334448161,6.241277591973244,0.7971371237458202,0.7426153846153851,0.13702006688963195,6.364976588628765,0.2624682274247492,6.374555183946487,BUILD163-A9,4163

+0.6048154362416106,0.036201342281879184,3.6729362416107363,0.7511070234113716,0.7491672240802683,0.12638795986622078,5.9796923076923045,0.1286722408026757,6.08772240802676,0.8053311036789302,0.750715719063546,0.130428093645485,6.239899665551841,0.2587759197324416,6.321638795986621,BUILD131-A9,4162

+0.5983110367892978,0.033257525083612016,3.1860802675585296,0.7454515050167224,0.7379096989966559,0.14533779264214045,6.074307692307692,0.1475351170568562,5.969989966555184,0.7972976588628763,0.7466789297658866,0.15285953177257525,6.150207357859532,0.2739230769230772,6.229311036789295,BUILD147-A9,4161

+0.607578595317726,0.014772575250836117,3.770836120401339,0.7387826086956525,0.7404849498327758,0.12182943143812704,6.573839464882943,0.12347157190635454,6.528949832775921,0.7981237458193976,0.7516387959866222,0.1356153846153846,6.460575250836119,0.24741471571906337,6.6912508361204,BUILD169-A9,4160

+0.6043892617449668,0.0320167785234899,3.4837583892617427,0.7398127090301009,0.7388428093645486,0.09756856187290969,6.301297658862878,0.09856521739130442,6.1160301003344495,0.8030503355704696,0.7457959866220734,0.10266889632107028,6.5009364548495,0.2113020134228188,6.667597315436245,BUILD129-A9,4159

+0.6036140939597312,0.03680536912751673,3.9380570469798664,0.7501739130434779,0.7448327759197321,0.1171638795986622,7.1491839464883,0.11741137123745828,7.222448160535116,0.796782608695653,0.743030100334448,0.1257859531772577,7.286371237458189,0.24396989966555185,7.298672240802672,BUILD119-A9,4158

+0.5965150501672243,0.03126755852842806,3.8899264214046827,0.738257525083612,0.7383913043478266,0.13748494983277595,6.951655518394644,0.1393578595317725,7.1206287625418065,0.7951705685618727,0.7555317725752507,0.1428628762541806,7.12149163879599,0.2844816053511705,7.144190635451503,BUILD173-A9,4157

+0.6052608695652179,0.03393979933110364,3.9798260869565203,0.7561839464882949,0.7398160535117065,0.1250301003344482,6.895739130434779,0.12793979933110358,6.949725752508362,0.7998087248322149,0.7433511705685616,0.13003678929765888,7.004083612040134,0.24172483221476512,7.228469798657716,BUILD181-A9,4156

+0.6020535117056853,0.034157190635451494,3.509341137123744,0.7494214046822746,0.738548494983278,0.12281605351170567,6.025324414715724,0.1234682274247492,6.151247491638797,0.8076187290969903,0.7532608695652175,0.13670568561872914,5.973428093645483,0.2428227424749164,6.142377926421409,BUILD133-A9,4155

+0.608607382550335,0.03390939597315434,3.493161073825505,0.7450735785953181,0.7434046822742474,0.14444481605351178,5.959013377926427,0.14490301003344488,6.173515050167227,0.7970401337792642,0.7528595317725753,0.16015719063545156,5.938083612040132,0.28343812709030103,5.930906354515044,BUILD147-A9,4154

+0.6028260869565215,0.0324849498327759,4.099010033444818,0.74275585284281,0.7459498327759203,0.11296321070234117,6.97842474916388,0.12018394648829428,7.280033444816054,0.7988795986622078,0.7440066889632111,0.12057859531772565,6.922896321070232,0.23728428093645482,7.000939799331108,BUILD128-A9,4153

+0.6031711409395976,0.03657382550335568,3.696661073825506,0.7497090301003345,0.7394581939799335,0.13489297658862887,6.672909698996657,0.13967224080267565,6.712434782608696,0.804578595317726,0.7444280936454857,0.14787625418060193,6.761662207357861,0.2579397993311036,6.8766856187291046,BUILD155-A9,4152

+0.6063020134228188,0.038429530201342266,3.99168791946309,0.7385117056856195,0.736491638795987,0.14959197324414708,6.734341137123753,0.14880602006688964,6.84944481605351,0.8040702341137124,0.814442953020135,0.15777852348993285,9.337614093959733,0.2945819397993315,7.011538461538464,BUILD179-A9,4151

+0.5967684563758392,0.029181208053691256,3.776305369127515,0.7473444816053522,0.7378394648829435,0.1408093645484949,7.358702341137124,0.14029765886287623,7.172344481605351,0.8090434782608693,0.7440635451505015,0.14708026755852838,7.456769230769235,0.2589933110367893,7.541525083612039,BUILD141-A9,4150

+0.6116187290969901,0.013983277591973238,3.2883779264214037,0.7376354515050169,0.7381304347826086,0.09571237458193983,5.724929765886291,0.09747157190635451,5.619605351170563,0.7939698996655523,0.750795986622074,0.09905351170568556,5.82977926421405,0.2047558528428093,5.868170568561873,BUILD153-A9,4149

+0.6068154362416109,0.029869127516778518,3.714664429530202,0.7464314381270902,0.738257525083613,0.13051170568561868,6.634976588628763,0.13162876254180594,6.836163879598661,0.7961103678929756,0.7454949832775926,0.13860200668896316,6.724193979933107,0.25495317725752503,6.755404682274247,BUILD164-A9,4148

+0.62115100671141,0.03495973154362412,5.827922818791945,0.7360802675585287,0.6921638795986619,0.13262207357859523,12.642826086956527,0.1380066889632108,7.594953177257528,0.7947224080267559,0.737234113712375,0.13876923076923078,7.92179264214047,0.27714715719063576,8.033862876254183,BUILD166-A9,4147

+0.6106287625418058,0.030491638795986584,3.42128093645485,0.7384381270903009,0.7415418060200671,0.14415050167224078,5.94754180602007,0.14818729096989958,5.843973244147155,0.7985872483221476,0.7435685618729097,0.15368896321070238,6.037488294314378,0.2720201342281882,6.065557046979865,BUILD147-A9,4146

+0.6061404682274251,0.030548494983277552,3.321451505016724,0.7410570469798659,0.7377792642140467,0.12946488294314382,6.009949832775922,0.12761744966442962,6.225046979865773,0.8003545150501674,0.7445451505016727,0.13401337792642137,6.122193979933113,0.2474581939799331,6.273745819397995,BUILD140-A9,4145

+0.6065805369127516,0.03587583892617446,4.088889261744967,0.7407525083612043,0.7387324414715718,0.13726086956521752,7.112715719063542,0.1400234113712374,7.234468227424748,0.7999096989966551,0.7452474916387958,0.14519063545150507,7.028314381270899,0.27825083612040147,7.379698996655522,BUILD121-A9,4144

+0.5968456375838924,0.02956040268456373,3.5951375838926176,0.7392742474916386,0.7377424749163882,0.15356187290969894,6.596528428093648,0.15810367892976576,6.660882943143811,0.7949665551839463,0.7420501672240803,0.1628461538461538,6.743672240802677,0.293836120401338,6.884588628762545,BUILD154-A9,4143

+0.5823993288590604,0.03453355704697981,3.423442953020137,0.7186622073578594,0.7236488294314378,0.13855518394648828,6.368508361204014,0.13939130434782612,6.380839464882943,0.781254180602006,0.7212608695652173,0.14772909698996645,6.489806020066891,0.271377926421405,6.601284280936457,BUILD142-A9,4142

+0.5777658862876248,0.034381270903009985,2.8099431438127103,0.7195217391304355,0.717675585284281,0.13060869565217395,5.367839464882944,0.13108695652173907,5.38424080267559,0.7801973244147156,0.7220602006688962,0.13950167224080268,5.294411371237461,0.24702006688963218,5.547267558528429,BUILD160-A9,4141

+0.6128791946308726,0.03797651006711408,4.772120805369129,0.7501003344481606,0.7464013377926426,0.13212040133779268,7.058832775919731,0.1340066889632106,7.294976588628765,0.7990100334448159,0.7521103678929769,0.1381237458193981,7.2385618729097,0.2690668896321074,7.3101672240802715,BUILD121-A9,4140

+0.6058428093645485,0.0300602006688963,3.1675250836120408,0.7376688963210707,0.737936454849499,0.11492307692307695,5.533347826086954,0.11633444816053519,5.577735785953172,0.7974347826086958,0.7527123745819397,0.11727759197324414,5.723785953177254,0.23210033444816042,5.684802675585284,BUILD138-A9,4139

+0.6014395973154361,0.03355704697986575,3.7081677852348998,0.7367558528428096,0.7377892976588631,0.14779598662207355,6.632926421404678,0.15010033444816062,6.61527424749163,0.8027257525083619,0.7432775919732444,0.154695652173913,6.954632107023412,0.28350501672240785,6.770317725752503,BUILD179-A9,4138

+0.604304347826087,0.029411371237458152,3.7421872909698988,0.7425050167224083,0.7453913043478263,0.11870234113712372,6.12904347826087,0.1236086956521739,6.1917324414715695,0.8117826086956521,0.7487625418060203,0.12799999999999992,6.1550367892976565,0.24646822742474903,6.1860100334448145,BUILD131-A9,4137

+0.6054999999999993,0.03370469798657714,3.7793355704697986,0.7470903010033451,0.741341137123746,0.13784280936454857,6.630859531772577,0.1390735785953178,6.624137123745819,0.8026454849498329,0.7401003344481616,0.14328428093645496,6.667892976588629,0.27426421404682283,6.6378461538461515,BUILD142-A9,4136

+0.6051174496644294,0.03285234899328856,3.7933557046979844,0.7402341137123747,0.7372943143812712,0.14383612040133778,7.128167224080267,0.14055518394648844,7.034220735785952,0.8064347826086955,0.7429096989966566,0.1468628762541805,7.289280936454854,0.2597023411371238,7.307581939799332,BUILD141-A9,4135

+0.6042173913043474,0.03345150501672236,3.7865284280936455,0.7448829431438132,0.7390501672240801,0.13594314381270906,7.068411371237462,0.1362274247491639,6.927150501672245,0.7966655518394646,0.746026755852843,0.1405083612040133,7.24333444816054,0.265444816053512,7.185521739130432,BUILD173-A9,4134

+0.5758628762541806,0.03318729096989964,2.9963411371237467,0.7164916387959869,0.7254581939799333,0.12377926421404674,6.312989966555184,0.11933444816053498,6.361234113712374,0.796515050167224,0.7253478260869569,0.12507692307692309,6.642153846153843,0.26046822742474945,6.733187290969901,BUILD123-A9,4133

+0.5682943143812711,0.010645484949832772,3.2202742474916404,0.722377926421405,0.757100671140939,0.1405469798657718,8.247070469798663,0.1407023411371237,6.864715719063549,0.788849498327759,0.7234682274247491,0.1444816053511707,6.806297658862874,0.27827759197324425,6.862297658862874,BUILD141-A9,4132

diff --git a/content/test/gpu/power_measurement_results/win10_intel_hd_630/build_4132_4369.json b/content/test/gpu/power_measurement_results/win10_intel_hd_630/build_4132_4369.json
new file mode 100644
index 0000000..4f03c00b
--- /dev/null
+++ b/content/test/gpu/power_measurement_results/win10_intel_hd_630/build_4132_4369.json
@@ -0,0 +1,12142 @@
+{
+  "builds": [
+    {
+      "bot": "BUILD154-A9",
+      "number": 4369,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6068494983277595,
+          "GT Power_0": 0.018812709030100336,
+          "IA Power_0": 3.5557692307692306,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.877545150501673,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7390367892976588,
+          "GT Power_0": 0.14097993311036802,
+          "IA Power_0": 6.335003344481605,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.780254180602001,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7375050167224083,
+          "GT Power_0": 0.13655518394648827,
+          "IA Power_0": 6.405548494983279,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.852143812709029,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7998260869565218,
+          "GT Power_0": 0.2869230769230772,
+          "IA Power_0": 7.053688963210702,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.6618695652173985,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7430836120401343,
+          "GT Power_0": 0.1446622073578596,
+          "IA Power_0": 6.659428093645483,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.078571906354515,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD182-A9",
+      "number": 4368,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6071906354515052,
+          "GT Power_0": 0.03288294314381269,
+          "IA Power_0": 3.2457023411371217,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.612913043478261,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7431337792642148,
+          "GT Power_0": 0.09660869565217395,
+          "IA Power_0": 5.638324414715715,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.050836120401339,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7403187919463086,
+          "GT Power_0": 0.09521812080536916,
+          "IA Power_0": 5.775677852348996,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.198288590604027,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.8062575250836121,
+          "GT Power_0": 0.20584949832775926,
+          "IA Power_0": 6.005561872909699,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.567073578595319,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7545752508361204,
+          "GT Power_0": 0.09916053511705684,
+          "IA Power_0": 5.897187290969904,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.367143812709026,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD182-A9",
+      "number": 4367,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6010535117056858,
+          "GT Power_0": 0.03132441471571905,
+          "IA Power_0": 3.2086120401337794,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.519321070234116,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7415117056856191,
+          "GT Power_0": 0.09304682274247494,
+          "IA Power_0": 5.616675585284283,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.033702341137123,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7400769230769235,
+          "GT Power_0": 0.09204347826086967,
+          "IA Power_0": 5.632755852842813,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.032846153846155,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7965953177257524,
+          "GT Power_0": 0.20512709030100354,
+          "IA Power_0": 5.85499331103679,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.367023411371242,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7513946488294316,
+          "GT Power_0": 0.09887959866220748,
+          "IA Power_0": 5.785324414715719,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.243083612040132,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD174-A9",
+      "number": 4366,
+      "tests": [
+        {
+          "DRAM Power_0": 0.60066889632107,
+          "GT Power_0": 0.029829431438127073,
+          "IA Power_0": 3.8393578595317712,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.18472575250836,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7478996655518401,
+          "GT Power_0": 0.13032775919732448,
+          "IA Power_0": 6.889438127090299,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.362280936454845,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7389397993311043,
+          "GT Power_0": 0.12823411371237467,
+          "IA Power_0": 6.8667491638795966,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.307662207357857,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7944866666666667,
+          "GT Power_0": 0.2750866666666671,
+          "IA Power_0": 7.160306666666664,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.770593333333329,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 300
+        },
+        {
+          "DRAM Power_0": 0.7509866220735787,
+          "GT Power_0": 0.13532775919732445,
+          "IA Power_0": 7.146418060200667,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.66434448160535,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD164-A9",
+      "number": 4365,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6018327759197322,
+          "GT Power_0": 0.016210702341137122,
+          "IA Power_0": 3.8603043478260908,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.152715719063544,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7424180602006694,
+          "GT Power_0": 0.12936789297658866,
+          "IA Power_0": 6.582919732441469,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.0250033444816085,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7490266666666666,
+          "GT Power_0": 0.1301433333333334,
+          "IA Power_0": 6.5901966666666665,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.092393333333331,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 300
+        },
+        {
+          "DRAM Power_0": 0.8013812709030103,
+          "GT Power_0": 0.2616555183946489,
+          "IA Power_0": 7.020826086956522,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.631224080267557,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7467826086956526,
+          "GT Power_0": 0.1340334448160536,
+          "IA Power_0": 6.587702341137121,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.008505016722405,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD169-A9",
+      "number": 4364,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6064060402684562,
+          "GT Power_0": 0.03058389261744964,
+          "IA Power_0": 3.7511610738255032,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.110211409395975,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.746892976588629,
+          "GT Power_0": 0.12097993311036795,
+          "IA Power_0": 6.393301003344478,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.877163879598662,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7511906354515052,
+          "GT Power_0": 0.11764548494983278,
+          "IA Power_0": 6.487190635451507,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.113903010033444,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7972173913043478,
+          "GT Power_0": 0.2564983277591972,
+          "IA Power_0": 6.654789297658861,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.217381270903004,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7534882943143817,
+          "GT Power_0": 0.122076923076923,
+          "IA Power_0": 6.2537491638795935,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.733180602006693,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD182-A9",
+      "number": 4363,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6101040268456372,
+          "GT Power_0": 0.030489932885906023,
+          "IA Power_0": 3.477530201342282,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.8483020134228214,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7419498327759206,
+          "GT Power_0": 0.09489632107023416,
+          "IA Power_0": 5.819107023411375,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.256715719063544,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7564932885906045,
+          "GT Power_0": 0.09451342281879198,
+          "IA Power_0": 5.851003355704697,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.359721476510064,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.8061711409395972,
+          "GT Power_0": 0.20653691275167785,
+          "IA Power_0": 6.12470134228188,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.739291946308723,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.747384615384616,
+          "GT Power_0": 0.1032842809364548,
+          "IA Power_0": 5.820478260869566,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.2371872909699,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD120-A9",
+      "number": 4362,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6038859060402685,
+          "GT Power_0": 0.030100671140939565,
+          "IA Power_0": 3.909211409395973,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.21813422818792,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7417157190635453,
+          "GT Power_0": 0.12025418060200672,
+          "IA Power_0": 6.634374581939798,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.051290969899668,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.740852842809365,
+          "GT Power_0": 0.11937792642140477,
+          "IA Power_0": 6.563709030100331,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.001317725752507,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8167391304347831,
+          "GT Power_0": 0.26244147157190645,
+          "IA Power_0": 6.852200668896326,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.60039130434783,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7471404682274253,
+          "GT Power_0": 0.12995986622073571,
+          "IA Power_0": 6.7082073578595285,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.147889632107024,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD181-A9",
+      "number": 4361,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6046287625418064,
+          "GT Power_0": 0.03329765886287623,
+          "IA Power_0": 3.7343745819397984,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.053113712374585,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7412508361204015,
+          "GT Power_0": 0.11093311036789297,
+          "IA Power_0": 6.8350869565217405,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.251113712374577,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7398628762541815,
+          "GT Power_0": 0.10955852842809367,
+          "IA Power_0": 6.784565217391302,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.2007257525083626,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8043846153846158,
+          "GT Power_0": 0.23446822742474924,
+          "IA Power_0": 7.060468227424754,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.729682274247493,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7477959866220741,
+          "GT Power_0": 0.11628093645484958,
+          "IA Power_0": 6.847311036789297,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.274749163879603,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD179-A9",
+      "number": 4360,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6051170568561873,
+          "GT Power_0": 0.03205351170568558,
+          "IA Power_0": 3.8255016722408026,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.186929765886285,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.741515050167225,
+          "GT Power_0": 0.142066889632107,
+          "IA Power_0": 6.7327759197324415,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.1832207357859525,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7393277591973249,
+          "GT Power_0": 0.1421103678929766,
+          "IA Power_0": 6.748448160535117,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.189140468227426,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7982775919732441,
+          "GT Power_0": 0.29192307692307695,
+          "IA Power_0": 6.993214046822742,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.637886287625415,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7441605351170567,
+          "GT Power_0": 0.1468494983277592,
+          "IA Power_0": 6.825351170568566,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.280197324414718,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD125-A9",
+      "number": 4359,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6010033557046979,
+          "GT Power_0": 0.037842281879194584,
+          "IA Power_0": 4.42454697986577,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.716476510067115,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7450268456375843,
+          "GT Power_0": 0.11539932885906035,
+          "IA Power_0": 7.757580536912755,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.202499999999999,
+          "name": "Video_720_MP4",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7408929765886288,
+          "GT Power_0": 0.11479933110367894,
+          "IA Power_0": 7.62063545150502,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.052712374581946,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.797989966555184,
+          "GT Power_0": 0.24897324414715724,
+          "IA Power_0": 7.944612040133776,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.493959866220747,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7464633333333337,
+          "GT Power_0": 0.12705999999999995,
+          "IA Power_0": 7.586693333333331,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.989659999999996,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 300
+        }
+      ]
+    },
+    {
+      "bot": "BUILD170-A9",
+      "number": 4358,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6214899328859063,
+          "GT Power_0": 0.04365436241610738,
+          "IA Power_0": 4.1975167785234895,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.570456375838925,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7454515050167225,
+          "GT Power_0": 0.11245150501672248,
+          "IA Power_0": 6.232571906354517,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.713197324414718,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7411672240802681,
+          "GT Power_0": 0.10944147157190635,
+          "IA Power_0": 6.401795986622073,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.8916488294314355,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8134983277591972,
+          "GT Power_0": 0.27796321070234165,
+          "IA Power_0": 7.120096989966557,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.814103678929764,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7548963210702344,
+          "GT Power_0": 0.11907692307692302,
+          "IA Power_0": 6.582538461538463,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.137464882943145,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD119-A9",
+      "number": 4357,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6017416107382557,
+          "GT Power_0": 0.014234899328859052,
+          "IA Power_0": 3.970818791946309,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.2501107382550325,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7421070234113719,
+          "GT Power_0": 0.12282274247491647,
+          "IA Power_0": 7.29115719063545,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.714839464882945,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7424581939799334,
+          "GT Power_0": 0.12349163879598657,
+          "IA Power_0": 7.002458193979935,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.4970066889632125,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8030234113712367,
+          "GT Power_0": 0.24650167224080252,
+          "IA Power_0": 7.274020066889633,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.8751538461538475,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.744839464882943,
+          "GT Power_0": 0.1267926421404682,
+          "IA Power_0": 7.131193979933115,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.555484949832771,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD154-A9",
+      "number": 4356,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5984280936454849,
+          "GT Power_0": 0.011458193979933109,
+          "IA Power_0": 3.681264214046824,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.974541806020063,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7413444816053514,
+          "GT Power_0": 0.14109030100334444,
+          "IA Power_0": 6.502735785953178,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.9638093645485,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7390568561872907,
+          "GT Power_0": 0.14180936454849496,
+          "IA Power_0": 6.524692307692307,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.964394648829431,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8077023411371236,
+          "GT Power_0": 0.3118929765886287,
+          "IA Power_0": 6.848060200668892,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.482806020066886,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7434749163879596,
+          "GT Power_0": 0.15801003344481607,
+          "IA Power_0": 6.560832775919729,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.996304347826086,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD177-A9",
+      "number": 4355,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5932541806020071,
+          "GT Power_0": 0.023093645484949802,
+          "IA Power_0": 3.725946488294312,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.008070234113712,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7473355704697986,
+          "GT Power_0": 0.1100436241610738,
+          "IA Power_0": 6.95894630872483,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.456624161073829,
+          "name": "Video_720_MP4",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.741397993311037,
+          "GT Power_0": 0.11381605351170557,
+          "IA Power_0": 7.057999999999999,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.470585284280935,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.804742474916388,
+          "GT Power_0": 0.2622675585284281,
+          "IA Power_0": 7.357789297658865,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.947903010033443,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7546220735785953,
+          "GT Power_0": 0.12296989966555182,
+          "IA Power_0": 7.177351170568565,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.680113712374578,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD183-A9",
+      "number": 4354,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5975919732441468,
+          "GT Power_0": 0.011545150501672236,
+          "IA Power_0": 3.6374715719063575,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.9085217391304368,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7417391304347829,
+          "GT Power_0": 0.12476588628762537,
+          "IA Power_0": 6.434096989966557,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.858515050167221,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.737996655518395,
+          "GT Power_0": 0.12570234113712364,
+          "IA Power_0": 6.435036789297659,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.850742474916392,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8059832775919733,
+          "GT Power_0": 0.27376923076923076,
+          "IA Power_0": 6.574829431438124,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.234852842809365,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7432675585284286,
+          "GT Power_0": 0.13671906354515043,
+          "IA Power_0": 6.444745819397991,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.885073578595317,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD172-A9",
+      "number": 4353,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6064798657718116,
+          "GT Power_0": 0.02613087248322143,
+          "IA Power_0": 3.341191275167786,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.7007248322147683,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7393745819397997,
+          "GT Power_0": 0.09782274247491639,
+          "IA Power_0": 5.606454849498331,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.01386956521739,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7393879598662204,
+          "GT Power_0": 0.093752508361204,
+          "IA Power_0": 5.6163645484949845,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.024478260869568,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8027123745819396,
+          "GT Power_0": 0.21468227424749167,
+          "IA Power_0": 5.661979933110366,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.269056856187293,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7467892976588634,
+          "GT Power_0": 0.10071906354515045,
+          "IA Power_0": 5.663113712374579,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.083454849498331,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD170-A9",
+      "number": 4352,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6013926174496647,
+          "GT Power_0": 0.035204697986577146,
+          "IA Power_0": 3.325825503355706,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.6626946308724833,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7433545150501668,
+          "GT Power_0": 0.10203678929765882,
+          "IA Power_0": 5.662478260869571,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.139197324414713,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7398294314381266,
+          "GT Power_0": 0.09960535117056857,
+          "IA Power_0": 5.79538461538462,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.2260100334448145,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7956822742474917,
+          "GT Power_0": 0.23795317725752507,
+          "IA Power_0": 6.045816053511711,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.6157257525083635,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7440936454849503,
+          "GT Power_0": 0.10574247491638791,
+          "IA Power_0": 5.698183946488294,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.133284280936453,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD127-A9",
+      "number": 4351,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6123444816053512,
+          "GT Power_0": 0.03338127090301,
+          "IA Power_0": 3.4062842809364553,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.7698528428093634,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7434816053511709,
+          "GT Power_0": 0.10219397993311043,
+          "IA Power_0": 5.615438127090301,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.019615384615386,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7433154362416116,
+          "GT Power_0": 0.10228187919463087,
+          "IA Power_0": 5.732208053691271,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.143255033557043,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.8061705685618729,
+          "GT Power_0": 0.25089966555183946,
+          "IA Power_0": 5.717003344481607,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.317565217391307,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7461304347826092,
+          "GT Power_0": 0.1076321070234114,
+          "IA Power_0": 5.607872909698997,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.039371237458194,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD153-A9",
+      "number": 4350,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6026912751677851,
+          "GT Power_0": 0.035503355704697946,
+          "IA Power_0": 3.194647651006713,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.511684563758389,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7403478260869565,
+          "GT Power_0": 0.10238127090301002,
+          "IA Power_0": 5.550337792642145,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.963016722408032,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7396421404682276,
+          "GT Power_0": 0.10244481605351173,
+          "IA Power_0": 5.66841137123746,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.071391304347825,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8079498327759201,
+          "GT Power_0": 0.2188929765886288,
+          "IA Power_0": 6.0571137123745835,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.677394648829435,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7490200668896324,
+          "GT Power_0": 0.11029431438127094,
+          "IA Power_0": 5.941484949832773,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.359913043478258,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD142-A9",
+      "number": 4349,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6024765100671143,
+          "GT Power_0": 0.03877516778523486,
+          "IA Power_0": 3.6104463087248324,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.9210469798657717,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7581582491582494,
+          "GT Power_0": 0.13903367003367004,
+          "IA Power_0": 6.660720538720539,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.327808080808085,
+          "name": "Video_720_MP4",
+          "samples": 297
+        },
+        {
+          "DRAM Power_0": 0.7398093645484953,
+          "GT Power_0": 0.13140802675585297,
+          "IA Power_0": 6.413655518394648,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.8258260869565195,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7964381270903008,
+          "GT Power_0": 0.2787056856187294,
+          "IA Power_0": 6.594779264214043,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.189103678929766,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7462341137123758,
+          "GT Power_0": 0.14068896321070237,
+          "IA Power_0": 6.6512976588628785,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.108528428093648,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD141-A9",
+      "number": 4348,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6036053511705686,
+          "GT Power_0": 0.027130434782608678,
+          "IA Power_0": 4.0524749163879585,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.400130434782608,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7394916387959868,
+          "GT Power_0": 0.12096989966555187,
+          "IA Power_0": 7.1617525083612055,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.58091973244148,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7418862876254185,
+          "GT Power_0": 0.11748160535117055,
+          "IA Power_0": 7.160779264214046,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.56941806020067,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7960501672240797,
+          "GT Power_0": 0.244732441471572,
+          "IA Power_0": 7.379762541806014,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.967438127090303,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7441772575250839,
+          "GT Power_0": 0.12645150501672248,
+          "IA Power_0": 7.271712374581937,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.689157190635453,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD168-A9",
+      "number": 4347,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6012617449664428,
+          "GT Power_0": 0.03543959731543621,
+          "IA Power_0": 3.8820436241610743,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.183177852348992,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7543210702341135,
+          "GT Power_0": 0.13192976588628758,
+          "IA Power_0": 6.792327759197326,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.3186956521739175,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.737882943143813,
+          "GT Power_0": 0.12899665551839468,
+          "IA Power_0": 6.500347826086953,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.9306655518394615,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8046354515050166,
+          "GT Power_0": 0.2647023411371239,
+          "IA Power_0": 6.668816053511705,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.319387959866225,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.744672240802676,
+          "GT Power_0": 0.14705016722408035,
+          "IA Power_0": 6.588692307692306,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.020986622073581,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD129-A9",
+      "number": 4346,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6056020066889632,
+          "GT Power_0": 0.031698996655518355,
+          "IA Power_0": 3.3551204013377918,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.6769264214046804,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7386120401337793,
+          "GT Power_0": 0.09974247491638807,
+          "IA Power_0": 5.8934180602006645,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.315505016722412,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7399866220735793,
+          "GT Power_0": 0.09858862876254179,
+          "IA Power_0": 5.962374581939802,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.367411371237462,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7960735785953182,
+          "GT Power_0": 0.2170802675585286,
+          "IA Power_0": 6.299652173913044,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.849230769230774,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7548929765886286,
+          "GT Power_0": 0.10199665551839471,
+          "IA Power_0": 6.435618729096996,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.85005685618729,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD182-A9",
+      "number": 4345,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6007751677852349,
+          "GT Power_0": 0.029238255033557016,
+          "IA Power_0": 3.0864865771812053,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.4438255033557055,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7417324414715727,
+          "GT Power_0": 0.09797993311036798,
+          "IA Power_0": 5.732585284280936,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.137558528428091,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7481739130434785,
+          "GT Power_0": 0.09602341137123745,
+          "IA Power_0": 5.77018060200669,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.221284280936455,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7980769230769232,
+          "GT Power_0": 0.20724414715719047,
+          "IA Power_0": 5.961127090301005,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.490665551839463,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7444515050167225,
+          "GT Power_0": 0.1013177257525083,
+          "IA Power_0": 5.9465886287625445,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.349668896321069,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD154-A9",
+      "number": 4344,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6045872483221476,
+          "GT Power_0": 0.03620469798657715,
+          "IA Power_0": 3.5506711409395963,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.890651006711408,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7476321070234114,
+          "GT Power_0": 0.13623745819397992,
+          "IA Power_0": 6.495929765886288,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.004026755852839,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7396755852842809,
+          "GT Power_0": 0.1366989966555184,
+          "IA Power_0": 6.446110367892977,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.904996655518404,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7949130434782613,
+          "GT Power_0": 0.28241471571906374,
+          "IA Power_0": 6.694939799331103,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.344575250836118,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7371638795986626,
+          "GT Power_0": 0.1410468227424748,
+          "IA Power_0": 6.358729096989968,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.807535117056859,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD132-A9",
+      "number": 4343,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6028087248322151,
+          "GT Power_0": 0.030446308724832203,
+          "IA Power_0": 3.9266778523489907,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.225046979865771,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7489230769230776,
+          "GT Power_0": 0.09613712374581937,
+          "IA Power_0": 6.78560869565217,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.24385618729097,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7393478260869567,
+          "GT Power_0": 0.09659531772575249,
+          "IA Power_0": 6.812712374581936,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.212361204013378,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7991806020066886,
+          "GT Power_0": 0.22104347826086965,
+          "IA Power_0": 6.901739130434782,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.40569230769231,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7549832775919731,
+          "GT Power_0": 0.10813043478260863,
+          "IA Power_0": 6.773070234113715,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.270839464882945,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD156-A9",
+      "number": 4342,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6052181208053689,
+          "GT Power_0": 0.03165436241610735,
+          "IA Power_0": 3.2472214765100675,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.618476510067115,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7457591973244148,
+          "GT Power_0": 0.13103678929765886,
+          "IA Power_0": 5.663254180602002,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.188033444816056,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7428795986622074,
+          "GT Power_0": 0.13358193979933108,
+          "IA Power_0": 5.798381270903004,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.246451505016722,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8064481605351171,
+          "GT Power_0": 0.2691605351170571,
+          "IA Power_0": 6.238913043478256,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.8771872909699,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7537725752508362,
+          "GT Power_0": 0.14229431438127077,
+          "IA Power_0": 5.903846153846153,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.408775919732441,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD146-A9",
+      "number": 4341,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6092751677852348,
+          "GT Power_0": 0.036315436241610696,
+          "IA Power_0": 3.7427248322147664,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.113550335570471,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7414381270903007,
+          "GT Power_0": 0.12799999999999995,
+          "IA Power_0": 6.2483812709030095,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.666926421404685,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7389565217391308,
+          "GT Power_0": 0.12754180602006684,
+          "IA Power_0": 6.214755852842808,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.65119397993311,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7969331103678926,
+          "GT Power_0": 0.2582073578595316,
+          "IA Power_0": 6.427765886287629,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.004103678929768,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7484548494983279,
+          "GT Power_0": 0.13817056856187293,
+          "IA Power_0": 6.29308695652174,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.675618729096993,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD168-A9",
+      "number": 4340,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6063624161073825,
+          "GT Power_0": 0.03378859060402681,
+          "IA Power_0": 3.6690134228187903,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.9983255033557046,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7491304347826088,
+          "GT Power_0": 0.1303879598662208,
+          "IA Power_0": 6.322826086956519,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.7938160535117085,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7373578595317732,
+          "GT Power_0": 0.12869565217391304,
+          "IA Power_0": 6.2925986622073635,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.735518394648831,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8068428093645479,
+          "GT Power_0": 0.2669063545150503,
+          "IA Power_0": 6.549066889632111,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.23071571906354,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.754304347826087,
+          "GT Power_0": 0.1381939799331104,
+          "IA Power_0": 6.59423076923077,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.068331103678926,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD120-A9",
+      "number": 4339,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6012140468227422,
+          "GT Power_0": 0.030331103678929727,
+          "IA Power_0": 3.69022408026756,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.9970301003344493,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7488260869565228,
+          "GT Power_0": 0.12258528428093647,
+          "IA Power_0": 6.444324414715722,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.006892976588629,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7365752508361209,
+          "GT Power_0": 0.12261538461538464,
+          "IA Power_0": 6.3708528428093665,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.778715719063544,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8074314381270906,
+          "GT Power_0": 0.2648260869565218,
+          "IA Power_0": 6.606177257525084,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.465983277591976,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7604882943143817,
+          "GT Power_0": 0.13330100334448158,
+          "IA Power_0": 6.90097993311037,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.51476588628763,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD161-A9",
+      "number": 4338,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6030267558528425,
+          "GT Power_0": 0.033946488294314375,
+          "IA Power_0": 3.277428093645486,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.5929163879598667,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7507725752508357,
+          "GT Power_0": 0.11647491638795981,
+          "IA Power_0": 5.4514983277591975,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.929598662207358,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7398561872909698,
+          "GT Power_0": 0.11516387959866224,
+          "IA Power_0": 5.353749163879598,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.775297658862873,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8070301003344478,
+          "GT Power_0": 0.24645484949832747,
+          "IA Power_0": 5.869113712374584,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.446257525083612,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7502006688963214,
+          "GT Power_0": 0.12641137123745808,
+          "IA Power_0": 5.623454849498324,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.071682274247491,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD126-A9",
+      "number": 4337,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6069765100671144,
+          "GT Power_0": 0.03426845637583886,
+          "IA Power_0": 3.7895939597315436,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.152016778523491,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7864747474747478,
+          "GT Power_0": 0.11823905723905723,
+          "IA Power_0": 10.543791245791246,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 10.93910437710438,
+          "name": "Video_720_MP4",
+          "samples": 297
+        },
+        {
+          "DRAM Power_0": 0.7593657718120814,
+          "GT Power_0": 0.11345302013422819,
+          "IA Power_0": 7.633694630872495,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.135845637583895,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.8143712374581942,
+          "GT Power_0": 0.23791973244147177,
+          "IA Power_0": 7.100558528428095,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.745602006688961,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7459598662207362,
+          "GT Power_0": 0.11817725752508369,
+          "IA Power_0": 6.472026755852843,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.883591973244146,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD129-A9",
+      "number": 4336,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6020100334448164,
+          "GT Power_0": 0.012628762541806013,
+          "IA Power_0": 3.506367892976587,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.80274247491639,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7396789297658866,
+          "GT Power_0": 0.09406020066889634,
+          "IA Power_0": 5.957752508361197,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.35638461538461,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7509464882943148,
+          "GT Power_0": 0.09258528428093651,
+          "IA Power_0": 6.041036789297655,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.481752508361207,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8032040133779265,
+          "GT Power_0": 0.2077725752508362,
+          "IA Power_0": 6.249933110367896,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.830264214046819,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7447558528428102,
+          "GT Power_0": 0.09591638795986628,
+          "IA Power_0": 6.100886287625422,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.524438127090294,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD170-A9",
+      "number": 4335,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5979397993311034,
+          "GT Power_0": 0.010545150501672233,
+          "IA Power_0": 3.140478260869564,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.4371538461538447,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7386020066889634,
+          "GT Power_0": 0.10906354515050162,
+          "IA Power_0": 5.588120401337791,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.02754180602007,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7527759197324426,
+          "GT Power_0": 0.10821404682274241,
+          "IA Power_0": 5.626892976588629,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.1491404682274275,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.806715719063545,
+          "GT Power_0": 0.2599264214046824,
+          "IA Power_0": 5.956923076923075,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.55507023411371,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7423745819397991,
+          "GT Power_0": 0.11504682274247496,
+          "IA Power_0": 5.8168729096989935,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.251578595317718,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD162-A9",
+      "number": 4334,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6035919732441468,
+          "GT Power_0": 0.015468227424749159,
+          "IA Power_0": 3.3310535117056848,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.6274816053511696,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7503010033444827,
+          "GT Power_0": 0.12858193979933105,
+          "IA Power_0": 6.370735785953175,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.825551839464888,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7375133333333337,
+          "GT Power_0": 0.1272099999999999,
+          "IA Power_0": 5.807436666666663,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.25689333333333,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 300
+        },
+        {
+          "DRAM Power_0": 0.8045886287625421,
+          "GT Power_0": 0.26178260869565223,
+          "IA Power_0": 6.124518394648829,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.765307692307692,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7441705685618736,
+          "GT Power_0": 0.1330334448160535,
+          "IA Power_0": 5.935324414715719,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.384775919732448,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD162-A9",
+      "number": 4333,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6083053691275165,
+          "GT Power_0": 0.03761073825503351,
+          "IA Power_0": 3.584828859060404,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.9171308724832232,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.742197324414716,
+          "GT Power_0": 0.13144816053511704,
+          "IA Power_0": 5.6996220735786,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.145846153846159,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7497123745819398,
+          "GT Power_0": 0.12860535117056854,
+          "IA Power_0": 5.70833779264214,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.230394648829433,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7956354515050168,
+          "GT Power_0": 0.2665585284280937,
+          "IA Power_0": 5.836324414715723,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.433364548494982,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7456889632107024,
+          "GT Power_0": 0.1394949832775919,
+          "IA Power_0": 5.748742474916386,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.2148695652173895,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD124-A9",
+      "number": 4332,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6104261744966443,
+          "GT Power_0": 0.03689932885906036,
+          "IA Power_0": 3.936234899328858,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.304093959731541,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7386755852842811,
+          "GT Power_0": 0.13695317725752512,
+          "IA Power_0": 6.511555183946482,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.943404682274252,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7361505016722405,
+          "GT Power_0": 0.13262207357859523,
+          "IA Power_0": 6.370177257525085,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.8042976588628745,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7946120401337794,
+          "GT Power_0": 0.288886287625418,
+          "IA Power_0": 6.609719063545155,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.23669899665552,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7435652173913039,
+          "GT Power_0": 0.14358193979933118,
+          "IA Power_0": 6.478628762541805,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.935494983277593,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD158-A9",
+      "number": 4331,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6003745819398002,
+          "GT Power_0": 0.03186287625418057,
+          "IA Power_0": 3.8628193979933094,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.174434782608696,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7396789297658868,
+          "GT Power_0": 0.13589297658862873,
+          "IA Power_0": 7.07873578595318,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.528073578595317,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7462307692307687,
+          "GT Power_0": 0.13546153846153836,
+          "IA Power_0": 7.015585284280933,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.510474916387955,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7943545150501674,
+          "GT Power_0": 0.28275250836120436,
+          "IA Power_0": 7.369836120401332,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.979729096989966,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7460434782608697,
+          "GT Power_0": 0.14264214046822746,
+          "IA Power_0": 7.317598662207359,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.765849498327764,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD133-A9",
+      "number": 4330,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6084597315436235,
+          "GT Power_0": 0.032899328859060405,
+          "IA Power_0": 3.5483993288590625,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.9161543624161084,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.745123745819398,
+          "GT Power_0": 0.13117056856187304,
+          "IA Power_0": 5.909301003344478,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.362578595317724,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7390836120401342,
+          "GT Power_0": 0.130571906354515,
+          "IA Power_0": 5.855906354515051,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.295103678929763,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7972107023411373,
+          "GT Power_0": 0.2674515050167225,
+          "IA Power_0": 6.172936454849495,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.7763779264214055,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.745809364548495,
+          "GT Power_0": 0.13838127090300997,
+          "IA Power_0": 6.252722408026755,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.708150501672242,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD119-A9",
+      "number": 4329,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6058929765886286,
+          "GT Power_0": 0.032314381270902984,
+          "IA Power_0": 3.93273578595318,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.2781404682274236,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7465250836120402,
+          "GT Power_0": 0.1179565217391304,
+          "IA Power_0": 6.800224080267563,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.234331103678931,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7385551839464891,
+          "GT Power_0": 0.12243478260869561,
+          "IA Power_0": 6.78580936454849,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.219802675585278,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8038695652173914,
+          "GT Power_0": 0.2549197324414714,
+          "IA Power_0": 7.1142508361204015,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.748749163879604,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7437357859531779,
+          "GT Power_0": 0.1270969899665551,
+          "IA Power_0": 7.00778929765886,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.445742474916388,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD175-A9",
+      "number": 4328,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6210869565217388,
+          "GT Power_0": 0.02301003344481604,
+          "IA Power_0": 4.748959866220736,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.103769230769234,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7464147157190629,
+          "GT Power_0": 0.11720735785953183,
+          "IA Power_0": 7.3992274247491645,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.869260869565224,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7525585284280935,
+          "GT Power_0": 0.11724414715719063,
+          "IA Power_0": 8.17933110367893,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.604020066889637,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.815595317725753,
+          "GT Power_0": 0.28413043478260885,
+          "IA Power_0": 7.849331103678934,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.514745819397998,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7458662207357858,
+          "GT Power_0": 0.12799331103678935,
+          "IA Power_0": 7.609652173913045,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.099334448160532,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD175-A9",
+      "number": 4327,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6109429530201346,
+          "GT Power_0": 0.03018120805369125,
+          "IA Power_0": 3.9073355704697956,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.27693959731544,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7416722408026755,
+          "GT Power_0": 0.11278595317725759,
+          "IA Power_0": 6.4820702341137135,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.913903010033442,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7484816053511707,
+          "GT Power_0": 0.11126421404682281,
+          "IA Power_0": 6.420387959866222,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.937816053511712,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8042240802675586,
+          "GT Power_0": 0.24661204013377902,
+          "IA Power_0": 6.744518394648832,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.330113712374582,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7454214046822745,
+          "GT Power_0": 0.12372240802675581,
+          "IA Power_0": 6.542588628762542,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.979986622073579,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD172-A9",
+      "number": 4326,
+      "tests": [
+        {
+          "DRAM Power_0": 0.595597315436242,
+          "GT Power_0": 0.023671140939597293,
+          "IA Power_0": 3.0497785234899335,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.3757315436241595,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7399197324414715,
+          "GT Power_0": 0.09945150501672244,
+          "IA Power_0": 5.561785953177261,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.968688963210698,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7394715719063545,
+          "GT Power_0": 0.09780267558528428,
+          "IA Power_0": 5.531284280936454,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.931508361204009,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7974046822742474,
+          "GT Power_0": 0.21634782608695668,
+          "IA Power_0": 5.654133779264213,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.211739130434784,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.744809364548495,
+          "GT Power_0": 0.10467558528428095,
+          "IA Power_0": 5.497367892976587,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.903926421404684,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD133-A9",
+      "number": 4325,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6092508361204005,
+          "GT Power_0": 0.036411371237458155,
+          "IA Power_0": 3.446826086956522,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.826571906354514,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.74428093645485,
+          "GT Power_0": 0.130304347826087,
+          "IA Power_0": 5.922812709030098,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.3606555183946485,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8016476510067119,
+          "GT Power_0": 0.13119798657718115,
+          "IA Power_0": 7.927369127516781,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.365624161073827,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7965351170568559,
+          "GT Power_0": 0.26318394648829413,
+          "IA Power_0": 6.106973244147157,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.708070234113712,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7442809364548496,
+          "GT Power_0": 0.1342775919732442,
+          "IA Power_0": 6.0529498327759175,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.498026755852842,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD137-A9",
+      "number": 4324,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5984046822742471,
+          "GT Power_0": 0.02707692307692304,
+          "IA Power_0": 3.905491638795986,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.2055484949832795,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7450334448160528,
+          "GT Power_0": 0.113819397993311,
+          "IA Power_0": 7.284505016722413,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.727859531772578,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7501036789297655,
+          "GT Power_0": 0.11318394648829432,
+          "IA Power_0": 7.151882943143814,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.72096321070234,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8064180602006691,
+          "GT Power_0": 0.23878929765886286,
+          "IA Power_0": 7.44463210702341,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.226113712374584,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7430301003344483,
+          "GT Power_0": 0.1170702341137124,
+          "IA Power_0": 7.385257525083613,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.821123745819401,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD159-A9",
+      "number": 4323,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6070367892976593,
+          "GT Power_0": 0.03188628762541803,
+          "IA Power_0": 3.4418193979933114,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.7837357859531795,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7410903010033449,
+          "GT Power_0": 0.12635785953177267,
+          "IA Power_0": 5.830742474916385,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.275889632107026,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7398294314381273,
+          "GT Power_0": 0.12390301003344478,
+          "IA Power_0": 5.811565217391306,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.246709030100334,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8017190635451504,
+          "GT Power_0": 0.25014046822742475,
+          "IA Power_0": 6.174571906354514,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.769675585284278,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7460500000000005,
+          "GT Power_0": 0.12680666666666673,
+          "IA Power_0": 5.791680000000001,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.213539999999996,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 300
+        }
+      ]
+    },
+    {
+      "bot": "BUILD155-A9",
+      "number": 4322,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6067147651006712,
+          "GT Power_0": 0.02823154362416105,
+          "IA Power_0": 3.832842281879192,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.156751677852346,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7484782608695659,
+          "GT Power_0": 0.11984615384615388,
+          "IA Power_0": 6.443525083612038,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.904752508361205,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7391103678929769,
+          "GT Power_0": 0.11588963210702342,
+          "IA Power_0": 6.384712374581942,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.8246220735786,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7985451505016721,
+          "GT Power_0": 0.24035451505016708,
+          "IA Power_0": 6.569775919732436,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.138030100334451,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7541939799331108,
+          "GT Power_0": 0.12215719063545165,
+          "IA Power_0": 6.315036789297657,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.85358862876254,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD180-A9",
+      "number": 4321,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6043143812709035,
+          "GT Power_0": 0.03620066889632102,
+          "IA Power_0": 4.076668896321072,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.382033444816054,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8075838926174498,
+          "GT Power_0": 0.12235570469798654,
+          "IA Power_0": 9.41841275167786,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 9.863020134228185,
+          "name": "Video_720_MP4",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7348494983277595,
+          "GT Power_0": 0.12122408026755861,
+          "IA Power_0": 6.765177257525081,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.21684615384615,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7922240802675589,
+          "GT Power_0": 0.26476254180602016,
+          "IA Power_0": 7.097484949832772,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.69664548494983,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7498361204013378,
+          "GT Power_0": 0.12884949832775922,
+          "IA Power_0": 6.930969899665551,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.408006688963211,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD156-A9",
+      "number": 4320,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6074395973154363,
+          "GT Power_0": 0.030422818791946263,
+          "IA Power_0": 3.327996644295301,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.665731543624161,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7388929765886286,
+          "GT Power_0": 0.13259197324414698,
+          "IA Power_0": 5.620578595317724,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.085070234113712,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7484949832775926,
+          "GT Power_0": 0.1309732441471572,
+          "IA Power_0": 5.746508361204019,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.215488294314382,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8032842809364548,
+          "GT Power_0": 0.27216722408026756,
+          "IA Power_0": 5.978163879598661,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.601802675585281,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7467157190635455,
+          "GT Power_0": 0.1382307692307693,
+          "IA Power_0": 5.877899665551838,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.306147157190633,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD148-A9",
+      "number": 4319,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6029264214046823,
+          "GT Power_0": 0.019347826086956524,
+          "IA Power_0": 3.2624581939799326,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.566505016722408,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7356086956521737,
+          "GT Power_0": 0.15592642140468224,
+          "IA Power_0": 5.80542474916388,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.279899665551835,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7352006688963209,
+          "GT Power_0": 0.1528595317725752,
+          "IA Power_0": 5.851612040133774,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.3343110367892965,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7892943143812714,
+          "GT Power_0": 0.33816387959866206,
+          "IA Power_0": 6.112856187290972,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.811234113712376,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7546956521739125,
+          "GT Power_0": 0.1614080267558528,
+          "IA Power_0": 5.969852842809361,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.6765050167224045,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD161-A9",
+      "number": 4318,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6036020066889636,
+          "GT Power_0": 0.014418060200668876,
+          "IA Power_0": 3.1366220735785935,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.449648829431437,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.741063333333334,
+          "GT Power_0": 0.12151000000000006,
+          "IA Power_0": 5.410596666666665,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.855410000000001,
+          "name": "Video_720_MP4",
+          "samples": 300
+        },
+        {
+          "DRAM Power_0": 0.7497090301003345,
+          "GT Power_0": 0.12105016722408016,
+          "IA Power_0": 5.450692307692307,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.003806020066889,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8056622073578596,
+          "GT Power_0": 0.2530234113712373,
+          "IA Power_0": 5.617270903010036,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.255876254180604,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7433311036789303,
+          "GT Power_0": 0.12640802675585286,
+          "IA Power_0": 5.477578595317726,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.910147157190635,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD161-A9",
+      "number": 4317,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6080268456375838,
+          "GT Power_0": 0.03374832214765097,
+          "IA Power_0": 3.1300536912751675,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.4981040268456414,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7467725752508373,
+          "GT Power_0": 0.11838795986622079,
+          "IA Power_0": 5.540147157190629,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.011040133779268,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7396387959866235,
+          "GT Power_0": 0.11327759197324419,
+          "IA Power_0": 5.324287625418057,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.752531772575255,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7988929765886292,
+          "GT Power_0": 0.2436856187290969,
+          "IA Power_0": 5.803424749163878,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.3843010033444845,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7431939799331111,
+          "GT Power_0": 0.12164214046822748,
+          "IA Power_0": 5.513327759197326,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.943618729096991,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD147-A9",
+      "number": 4316,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6051371237458193,
+          "GT Power_0": 0.011458193979933107,
+          "IA Power_0": 3.019321070234113,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.360501672240803,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7415117056856191,
+          "GT Power_0": 0.13681270903010032,
+          "IA Power_0": 5.65369565217391,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.082210702341134,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7404782608695651,
+          "GT Power_0": 0.1353344481605351,
+          "IA Power_0": 5.614973244147156,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.061588628762542,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7978160535117059,
+          "GT Power_0": 0.27302341137123765,
+          "IA Power_0": 5.864093645484957,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.456638795986622,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7462508361204012,
+          "GT Power_0": 0.14262876254180604,
+          "IA Power_0": 5.7307591973244145,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.18805016722408,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD148-A9",
+      "number": 4315,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6079297658862877,
+          "GT Power_0": 0.042712374581939765,
+          "IA Power_0": 3.448899665551839,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.8258160535117076,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7454046822742483,
+          "GT Power_0": 0.14943143812709023,
+          "IA Power_0": 5.871986622073579,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.37919397993311,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7351270903010035,
+          "GT Power_0": 0.1480234113712374,
+          "IA Power_0": 5.924270903010034,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.3913110367893,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7925852842809368,
+          "GT Power_0": 0.33249498327759214,
+          "IA Power_0": 6.389381270903008,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.0684414715719095,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7471739130434784,
+          "GT Power_0": 0.15854515050167228,
+          "IA Power_0": 6.412070234113713,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.904150501672234,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD142-A9",
+      "number": 4314,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6009295302013425,
+          "GT Power_0": 0.03682885906040265,
+          "IA Power_0": 3.687070469798658,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.997124161073827,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7411438127090304,
+          "GT Power_0": 0.1365250836120401,
+          "IA Power_0": 6.454755852842812,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.908434782608697,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7380401337792639,
+          "GT Power_0": 0.1306588628762542,
+          "IA Power_0": 6.283227424749163,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.725244147157193,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7970568561872913,
+          "GT Power_0": 0.29133110367893006,
+          "IA Power_0": 6.586377926421404,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.1932374581939795,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7437591973244151,
+          "GT Power_0": 0.14384280936454852,
+          "IA Power_0": 6.461956521739138,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.913752508361204,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD118-A9",
+      "number": 4313,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6066275167785229,
+          "GT Power_0": 0.029785234899328838,
+          "IA Power_0": 3.489258389261745,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.8269563758389245,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7489364548494986,
+          "GT Power_0": 0.10785618729097005,
+          "IA Power_0": 5.9950735785953215,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.482839464882941,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7985469798657723,
+          "GT Power_0": 0.1053255033557048,
+          "IA Power_0": 7.7500604026845625,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.18880201342282,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.795056856187291,
+          "GT Power_0": 0.24553846153846137,
+          "IA Power_0": 6.054367892976592,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.6144180602006735,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7462173913043484,
+          "GT Power_0": 0.11857525083612043,
+          "IA Power_0": 5.9333812709030065,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.3302709030100335,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD125-A9",
+      "number": 4312,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6019297658862879,
+          "GT Power_0": 0.031183946488294267,
+          "IA Power_0": 4.3477491638795955,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.651695652173913,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7414147157190639,
+          "GT Power_0": 0.11563879598662201,
+          "IA Power_0": 7.448678929765884,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.834147157190632,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7466889632107024,
+          "GT Power_0": 0.1176588628762542,
+          "IA Power_0": 7.491882943143814,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.983294314381275,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7977056856187289,
+          "GT Power_0": 0.2545217391304349,
+          "IA Power_0": 7.817414715719067,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.395832775919738,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7486979865771816,
+          "GT Power_0": 0.12715771812080529,
+          "IA Power_0": 8.119359060402683,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.54378187919463,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 298
+        }
+      ]
+    },
+    {
+      "bot": "BUILD136-A9",
+      "number": 4311,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6087090301003343,
+          "GT Power_0": 0.01515384615384615,
+          "IA Power_0": 3.2053511705685604,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.55710367892977,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7396789297658861,
+          "GT Power_0": 0.10275250836120403,
+          "IA Power_0": 5.445725752508362,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.865157190635455,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7464515050167224,
+          "GT Power_0": 0.1001137123745819,
+          "IA Power_0": 5.803618729096991,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.222301003344478,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7961471571906353,
+          "GT Power_0": 0.21933110367892986,
+          "IA Power_0": 5.8294214046822725,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.379876254180603,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.754220735785953,
+          "GT Power_0": 0.10754849498327758,
+          "IA Power_0": 5.760033444816055,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.269993311036795,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD163-A9",
+      "number": 4310,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6018093645484948,
+          "GT Power_0": 0.029762541806020046,
+          "IA Power_0": 3.432839464882941,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.730280936454849,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.755530201342282,
+          "GT Power_0": 0.09812080536912755,
+          "IA Power_0": 6.681234899328862,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.1457315436241515,
+          "name": "Video_720_MP4",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7497926421404684,
+          "GT Power_0": 0.09857525083612037,
+          "IA Power_0": 6.532836120401339,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.968264214046829,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8029397993311027,
+          "GT Power_0": 0.22865217391304343,
+          "IA Power_0": 6.498692307692308,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.109150501672238,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7481638795986623,
+          "GT Power_0": 0.10704013377926422,
+          "IA Power_0": 6.343377926421404,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.785605351170569,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD123-A9",
+      "number": 4309,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6088187919463082,
+          "GT Power_0": 0.030238255033557013,
+          "IA Power_0": 3.9875167785234913,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.332765100671141,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7440200668896324,
+          "GT Power_0": 0.1265250836120402,
+          "IA Power_0": 6.657217391304346,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.126712374581937,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7505384615384615,
+          "GT Power_0": 0.123608695652174,
+          "IA Power_0": 6.659705685618728,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.268675585284281,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7956622073578588,
+          "GT Power_0": 0.250561872909699,
+          "IA Power_0": 6.904515050167227,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.493501672240799,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.745013377926422,
+          "GT Power_0": 0.1327491638795986,
+          "IA Power_0": 6.733244147157195,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.178003344481605,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD136-A9",
+      "number": 4308,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6065436241610739,
+          "GT Power_0": 0.02976845637583888,
+          "IA Power_0": 3.27539932885906,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.6139597315436256,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.738946488294315,
+          "GT Power_0": 0.10362207357859526,
+          "IA Power_0": 5.607474916387959,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.030612040133776,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7442742474916387,
+          "GT Power_0": 0.09980602006688967,
+          "IA Power_0": 5.68807023411371,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.164993311036785,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8078528428093641,
+          "GT Power_0": 0.21896989966555186,
+          "IA Power_0": 5.928879598662205,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.6014615384615345,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7448963210702342,
+          "GT Power_0": 0.10516387959866216,
+          "IA Power_0": 5.87096655518395,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.308933110367897,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD173-A9",
+      "number": 4307,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6053110367892978,
+          "GT Power_0": 0.031173913043478243,
+          "IA Power_0": 3.9089264214046846,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.2818628762541815,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7487157190635454,
+          "GT Power_0": 0.13082608695652173,
+          "IA Power_0": 7.133317725752506,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.621127090301002,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7383545150501672,
+          "GT Power_0": 0.13089297658862864,
+          "IA Power_0": 7.001043478260869,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.4230969899665515,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7962742474916387,
+          "GT Power_0": 0.2718695652173915,
+          "IA Power_0": 7.2464749163879585,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.841260869565222,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.745657718120806,
+          "GT Power_0": 0.13472818791946312,
+          "IA Power_0": 7.416597315436242,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.864194630872479,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 298
+        }
+      ]
+    },
+    {
+      "bot": "BUILD161-A9",
+      "number": 4306,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5976476510067117,
+          "GT Power_0": 0.030194630872483207,
+          "IA Power_0": 3.192553691275169,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.5064765100671136,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7538461538461537,
+          "GT Power_0": 0.1191003344481606,
+          "IA Power_0": 5.607628762541806,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.187471571906356,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7528929765886291,
+          "GT Power_0": 0.1187525083612041,
+          "IA Power_0": 5.523722408026755,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.141862876254179,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8084247491638799,
+          "GT Power_0": 0.24551839464882938,
+          "IA Power_0": 5.628625418060199,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.279474916387956,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7451137123745821,
+          "GT Power_0": 0.1250535117056856,
+          "IA Power_0": 5.448899665551838,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.895591973244145,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD124-A9",
+      "number": 4305,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6043624161073822,
+          "GT Power_0": 0.036916107382550294,
+          "IA Power_0": 3.6678758389261725,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.01281879194631,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7400000000000005,
+          "GT Power_0": 0.13163545150501674,
+          "IA Power_0": 6.4828428093645485,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.922989966555183,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7421438127090304,
+          "GT Power_0": 0.13464548494983278,
+          "IA Power_0": 6.276742474916384,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.746113712374586,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.792080267558528,
+          "GT Power_0": 0.2857391304347826,
+          "IA Power_0": 6.5116588628762555,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.1423377926421425,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7413478260869574,
+          "GT Power_0": 0.14314715719063545,
+          "IA Power_0": 6.334973244147155,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.789441471571905,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD118-A9",
+      "number": 4304,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6016510067114094,
+          "GT Power_0": 0.02745637583892616,
+          "IA Power_0": 3.4624731543624154,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.8297718120805384,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7404347826086957,
+          "GT Power_0": 0.1137725752508362,
+          "IA Power_0": 5.967103678929767,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.392267558528426,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7370769230769234,
+          "GT Power_0": 0.10944147157190635,
+          "IA Power_0": 5.998428093645484,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.421103678929769,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8170602006688966,
+          "GT Power_0": 0.24529765886287638,
+          "IA Power_0": 6.212424749163881,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.881277591973244,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7457993311036796,
+          "GT Power_0": 0.11355518394648835,
+          "IA Power_0": 6.056989966555181,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.54659531772575,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD123-A9",
+      "number": 4303,
+      "tests": [
+        {
+          "DRAM Power_0": 0.606063545150501,
+          "GT Power_0": 0.02794314381270899,
+          "IA Power_0": 3.8185117056856206,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.140311036789299,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.741488294314381,
+          "GT Power_0": 0.12759531772575244,
+          "IA Power_0": 6.686515050167221,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.131692307692302,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7386688963210699,
+          "GT Power_0": 0.12425418060200667,
+          "IA Power_0": 6.693953177257526,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.155424749163878,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8091872909698996,
+          "GT Power_0": 0.2549832775919732,
+          "IA Power_0": 7.071759197324412,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.730110367892979,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7456254180602008,
+          "GT Power_0": 0.13322073578595314,
+          "IA Power_0": 6.996675585284276,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.412438127090303,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD140-A9",
+      "number": 4302,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6041275167785232,
+          "GT Power_0": 0.03298993288590601,
+          "IA Power_0": 3.4339362416107417,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.7382583892617447,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7437633333333337,
+          "GT Power_0": 0.10244666666666673,
+          "IA Power_0": 6.054550000000003,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.468680000000001,
+          "name": "Video_720_MP4",
+          "samples": 300
+        },
+        {
+          "DRAM Power_0": 0.7396053511705688,
+          "GT Power_0": 0.10326421404682272,
+          "IA Power_0": 5.9100234113712355,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.329451505016722,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.797926421404682,
+          "GT Power_0": 0.2192441471571906,
+          "IA Power_0": 6.169254180602006,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.713100334448164,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7449230769230767,
+          "GT Power_0": 0.10710367892976588,
+          "IA Power_0": 6.001143812709029,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.44746488294314,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD141-A9",
+      "number": 4301,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6554932432432432,
+          "GT Power_0": 0.025249999999999957,
+          "IA Power_0": 6.571787162162162,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.9136182432432465,
+          "name": "Basic",
+          "samples": 296
+        },
+        {
+          "DRAM Power_0": 0.7396254180602008,
+          "GT Power_0": 0.12352173913043475,
+          "IA Power_0": 7.089444816053512,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.5043043478260865,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7481270903010034,
+          "GT Power_0": 0.1206588628762543,
+          "IA Power_0": 7.039779264214047,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.53501672240802,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.796739130434783,
+          "GT Power_0": 0.24583946488294314,
+          "IA Power_0": 7.270949832775918,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.836779264214045,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7442575250836125,
+          "GT Power_0": 0.12743478260869562,
+          "IA Power_0": 7.183769230769225,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.611207357859526,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD147-A9",
+      "number": 4300,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6075050167224079,
+          "GT Power_0": 0.0307224080267558,
+          "IA Power_0": 3.272969899665556,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.6051505016722403,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.74051839464883,
+          "GT Power_0": 0.14297324414715717,
+          "IA Power_0": 5.684511705685621,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.14608026755853,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7461672240802679,
+          "GT Power_0": 0.14212709030100343,
+          "IA Power_0": 5.643010033444815,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.14850836120401,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7962107023411377,
+          "GT Power_0": 0.27507357859531784,
+          "IA Power_0": 5.872732441471575,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.463257525083609,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.743635451505017,
+          "GT Power_0": 0.14098327759197316,
+          "IA Power_0": 5.81646488294315,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.267163879598664,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD153-A9",
+      "number": 4299,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6067953020134226,
+          "GT Power_0": 0.03311744966442949,
+          "IA Power_0": 3.263536912751678,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.602046979865773,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7419866220735789,
+          "GT Power_0": 0.1003210702341137,
+          "IA Power_0": 5.592451505016723,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.02648829431438,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7404013377926428,
+          "GT Power_0": 0.10015384615384615,
+          "IA Power_0": 5.547240802675584,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.979280936454851,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7983645484949834,
+          "GT Power_0": 0.2181070234113712,
+          "IA Power_0": 5.748311036789298,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.32008026755853,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7548829431438128,
+          "GT Power_0": 0.1038494983277593,
+          "IA Power_0": 5.954173913043478,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.432949832775927,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD157-A9",
+      "number": 4298,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6042684563758387,
+          "GT Power_0": 0.034385906040268435,
+          "IA Power_0": 3.853036912751676,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.179040268456379,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7450234113712373,
+          "GT Power_0": 0.12398327759197343,
+          "IA Power_0": 6.615344481605353,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.069692307692307,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7375752508361204,
+          "GT Power_0": 0.12222073578595316,
+          "IA Power_0": 6.582113712374581,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.025167224080272,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8019632107023412,
+          "GT Power_0": 0.2530267558528428,
+          "IA Power_0": 7.126595317725751,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.715638795986618,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7475852842809373,
+          "GT Power_0": 0.13495652173913036,
+          "IA Power_0": 6.724909698996655,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.162023411371235,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD159-A9",
+      "number": 4297,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6018489932885908,
+          "GT Power_0": 0.02603020134228185,
+          "IA Power_0": 3.240379194630871,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.6296812080536944,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7493444816053513,
+          "GT Power_0": 0.12863879598662198,
+          "IA Power_0": 5.640397993311038,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.147468227424747,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.739702341137124,
+          "GT Power_0": 0.12759197324414717,
+          "IA Power_0": 5.684678929765891,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.116879598662205,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8008762541806023,
+          "GT Power_0": 0.25445484949832775,
+          "IA Power_0": 6.0827458193979895,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.667772575250837,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7539096989966557,
+          "GT Power_0": 0.1344548494983278,
+          "IA Power_0": 5.713655518394653,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.243852842809363,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD155-A9",
+      "number": 4296,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5956722408026758,
+          "GT Power_0": 0.010227424749163877,
+          "IA Power_0": 3.56116053511706,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.847735785953178,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7509063545150504,
+          "GT Power_0": 0.11890635451505016,
+          "IA Power_0": 6.443581939799333,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.96278929765887,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.744882943143813,
+          "GT Power_0": 0.12426421404682275,
+          "IA Power_0": 6.516090301003342,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.943050167224084,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8059798657718118,
+          "GT Power_0": 0.26474161073825525,
+          "IA Power_0": 6.693080536912754,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.2994731543624205,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7465685618729095,
+          "GT Power_0": 0.12505016722408038,
+          "IA Power_0": 6.432040133779263,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.890956521739125,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD125-A9",
+      "number": 4295,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6007424749163875,
+          "GT Power_0": 0.029478260869565193,
+          "IA Power_0": 4.35380602006689,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.68028762541806,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7428461538461542,
+          "GT Power_0": 0.11626086956521738,
+          "IA Power_0": 7.499040133779263,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.919779264214049,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7473143812709033,
+          "GT Power_0": 0.11659531772575252,
+          "IA Power_0": 7.530357859531776,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.053414715719063,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7986254180602007,
+          "GT Power_0": 0.2517123745819396,
+          "IA Power_0": 7.892200668896324,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.483123745819404,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7524682274247495,
+          "GT Power_0": 0.12201672240802675,
+          "IA Power_0": 7.517006688963212,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.006274247491648,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD165-A9",
+      "number": 4294,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5964765100671143,
+          "GT Power_0": 0.02378523489932884,
+          "IA Power_0": 4.023724832214766,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.314057046979862,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7384849498327762,
+          "GT Power_0": 0.11005351170568568,
+          "IA Power_0": 7.022635451505021,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.4407591973244145,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7465652173913039,
+          "GT Power_0": 0.10904347826086949,
+          "IA Power_0": 6.917247491638796,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.392929765886287,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7940100334448156,
+          "GT Power_0": 0.2456889632107023,
+          "IA Power_0": 7.104906354515049,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.680337792642141,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7413511705685626,
+          "GT Power_0": 0.11518729096989963,
+          "IA Power_0": 6.9905518394648825,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.4144581939799385,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD143-A9",
+      "number": 4293,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6079598662207355,
+          "GT Power_0": 0.028993311036789288,
+          "IA Power_0": 3.579050167224083,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.924227424749165,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.750020066889632,
+          "GT Power_0": 0.12120735785953182,
+          "IA Power_0": 5.899939799331107,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.368909698996655,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7387725752508362,
+          "GT Power_0": 0.1201270903010034,
+          "IA Power_0": 5.866080267558526,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.285923076923074,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8052006688963207,
+          "GT Power_0": 0.25076923076923074,
+          "IA Power_0": 6.060729096989962,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.723976588628762,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7451872909699001,
+          "GT Power_0": 0.138515050167224,
+          "IA Power_0": 5.868555183946486,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.305755852842813,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD135-A9",
+      "number": 4292,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6042341137123752,
+          "GT Power_0": 0.03648160535117054,
+          "IA Power_0": 4.687665551839466,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.990337792642139,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7441404682274249,
+          "GT Power_0": 0.15669230769230774,
+          "IA Power_0": 7.752357859531772,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.221709030100339,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7733946488294314,
+          "GT Power_0": 0.18809030100334462,
+          "IA Power_0": 8.638214046822736,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 9.211675585284269,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8091973244147156,
+          "GT Power_0": 0.3351973244147156,
+          "IA Power_0": 8.558568561872912,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 9.508872909698995,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7441872909699,
+          "GT Power_0": 0.16640133779264227,
+          "IA Power_0": 7.996889632107024,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.464404682274248,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD153-A9",
+      "number": 4291,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6108896321070234,
+          "GT Power_0": 0.028200668896321054,
+          "IA Power_0": 3.4899030100334447,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.8370468227424737,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7479597315436242,
+          "GT Power_0": 0.09668456375838931,
+          "IA Power_0": 5.619563758389262,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.113255033557047,
+          "name": "Video_720_MP4",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7386454849498333,
+          "GT Power_0": 0.09558862876254183,
+          "IA Power_0": 5.749006688963214,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.15863545150502,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8066006711409397,
+          "GT Power_0": 0.21010738255033556,
+          "IA Power_0": 5.900436241610743,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.481600671140938,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7443076923076926,
+          "GT Power_0": 0.10204682274247488,
+          "IA Power_0": 5.822625418060201,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.2329230769230755,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD125-A9",
+      "number": 4290,
+      "tests": [
+        {
+          "DRAM Power_0": 0.601953177257525,
+          "GT Power_0": 0.027454849498327747,
+          "IA Power_0": 4.537040133779266,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.879123745819397,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7407023411371242,
+          "GT Power_0": 0.10455852842809372,
+          "IA Power_0": 7.889321070234116,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.27408026755853,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7400334448160536,
+          "GT Power_0": 0.10568227424749164,
+          "IA Power_0": 8.024762541806021,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.433056856187298,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7964949832775916,
+          "GT Power_0": 0.2352040133779263,
+          "IA Power_0": 8.384167224080269,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.951494983277598,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7461137123745823,
+          "GT Power_0": 0.11140468227424748,
+          "IA Power_0": 8.13568227424749,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.57082608695652,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD168-A9",
+      "number": 4289,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6600303030303026,
+          "GT Power_0": 0.036831649831649785,
+          "IA Power_0": 5.689562289562288,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.019653198653199,
+          "name": "Basic",
+          "samples": 297
+        },
+        {
+          "DRAM Power_0": 0.7409598662207364,
+          "GT Power_0": 0.12748160535117065,
+          "IA Power_0": 6.451257525083613,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.896812709030096,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7404180602006689,
+          "GT Power_0": 0.12256856187290968,
+          "IA Power_0": 6.500548494983277,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.919809364548497,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7987357859531774,
+          "GT Power_0": 0.2574080267558527,
+          "IA Power_0": 6.6419933110367895,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.245531772575253,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7436153846153845,
+          "GT Power_0": 0.13173913043478272,
+          "IA Power_0": 6.473073578595315,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.894434782608697,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD120-A9",
+      "number": 4288,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6618361204013375,
+          "GT Power_0": 0.03274247491638794,
+          "IA Power_0": 5.684933110367896,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.045153846153843,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7762040133779259,
+          "GT Power_0": 0.11683612040133776,
+          "IA Power_0": 9.852478260869562,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 10.276043478260874,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7384715719063549,
+          "GT Power_0": 0.12022408026755851,
+          "IA Power_0": 6.3974214046822775,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.820461538461537,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7953892617449659,
+          "GT Power_0": 0.25649328859060416,
+          "IA Power_0": 6.675848993288591,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.27601677852349,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7448561872909706,
+          "GT Power_0": 0.127418060200669,
+          "IA Power_0": 6.44745819397994,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.887264214046821,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD172-A9",
+      "number": 4287,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5959999999999995,
+          "GT Power_0": 0.026734899328859044,
+          "IA Power_0": 3.0628221476510076,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.4293993288590587,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7444548494983279,
+          "GT Power_0": 0.10854180602006698,
+          "IA Power_0": 5.468411371237458,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.8769364548495,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7394949832775922,
+          "GT Power_0": 0.10688294314381273,
+          "IA Power_0": 5.412053511705682,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.842575250836123,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8052040133779264,
+          "GT Power_0": 0.22463879598662204,
+          "IA Power_0": 5.810471571906353,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.414230769230764,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7437190635451503,
+          "GT Power_0": 0.11255183946488284,
+          "IA Power_0": 5.433404682274248,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.876334448160535,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD137-A9",
+      "number": 4286,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6059464882943143,
+          "GT Power_0": 0.03294314381270901,
+          "IA Power_0": 4.159033444816052,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.490117056856188,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7384816053511707,
+          "GT Power_0": 0.11288963210702345,
+          "IA Power_0": 7.243451505016725,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.685013377926418,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7384113712374581,
+          "GT Power_0": 0.1109665551839464,
+          "IA Power_0": 7.2418060200668855,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.675759197324414,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8056956521739131,
+          "GT Power_0": 0.24101337792642147,
+          "IA Power_0": 7.65592642140468,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.345973244147158,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7554046822742478,
+          "GT Power_0": 0.12152842809364557,
+          "IA Power_0": 7.462414715719067,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.143822742474915,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD135-A9",
+      "number": 4285,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6039832775919732,
+          "GT Power_0": 0.03900668896321064,
+          "IA Power_0": 4.5300635451505,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.831143812709027,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7392408026755859,
+          "GT Power_0": 0.15180602006688965,
+          "IA Power_0": 7.799451505016723,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.249494983277593,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7451605351170562,
+          "GT Power_0": 0.15045819397993324,
+          "IA Power_0": 7.43346488294314,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.967842809364554,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8010769230769235,
+          "GT Power_0": 0.3299264214046822,
+          "IA Power_0": 7.9256789297658825,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.66619732441471,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7420301003344482,
+          "GT Power_0": 0.1625083612040134,
+          "IA Power_0": 7.54750501672241,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.000214046822746,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD119-A9",
+      "number": 4284,
+      "tests": [
+        {
+          "DRAM Power_0": 0.601264214046823,
+          "GT Power_0": 0.024732441471571852,
+          "IA Power_0": 3.9889732441471564,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.295548494983278,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7452842809364544,
+          "GT Power_0": 0.11097993311036781,
+          "IA Power_0": 7.049909698996655,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.520384615384607,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7408127090301005,
+          "GT Power_0": 0.10922742474916393,
+          "IA Power_0": 6.8088829431438125,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.219347826086957,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.796234113712375,
+          "GT Power_0": 0.23852508361203992,
+          "IA Power_0": 7.0530167224080325,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.613782608695653,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7450233333333333,
+          "GT Power_0": 0.11598333333333331,
+          "IA Power_0": 6.8999166666666705,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.3358633333333305,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 300
+        }
+      ]
+    },
+    {
+      "bot": "BUILD169-A9",
+      "number": 4283,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6060838926174489,
+          "GT Power_0": 0.030778523489932853,
+          "IA Power_0": 3.8152147651006696,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.146798657718123,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7489933110367897,
+          "GT Power_0": 0.11976254180602011,
+          "IA Power_0": 7.04219732441472,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.479953177257522,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7401170568561871,
+          "GT Power_0": 0.11509030100334448,
+          "IA Power_0": 6.617739130434786,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.042488294314382,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7954080267558532,
+          "GT Power_0": 0.24697658862876226,
+          "IA Power_0": 6.905086956521738,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.505220735785951,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7579530201342288,
+          "GT Power_0": 0.12463087248322155,
+          "IA Power_0": 6.9434161073825535,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.6055872483221485,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 298
+        }
+      ]
+    },
+    {
+      "bot": "BUILD170-A9",
+      "number": 4282,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6065418060200666,
+          "GT Power_0": 0.03260535117056854,
+          "IA Power_0": 3.5117023411371218,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.8700702341137125,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7395551839464892,
+          "GT Power_0": 0.10967558528428091,
+          "IA Power_0": 5.970846153846157,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.393290969899663,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7457725752508371,
+          "GT Power_0": 0.10866889632107032,
+          "IA Power_0": 5.880197324414722,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.344441471571908,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8044381270903008,
+          "GT Power_0": 0.2464715719063544,
+          "IA Power_0": 6.293558528428093,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.968585284280937,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.746294314381271,
+          "GT Power_0": 0.1168528428093645,
+          "IA Power_0": 6.3251739130434785,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.751361204013369,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD139-A9",
+      "number": 4281,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6073221476510072,
+          "GT Power_0": 0.03534228187919463,
+          "IA Power_0": 3.6939597315436234,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.06569463087248,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7446387959866223,
+          "GT Power_0": 0.1418795986622073,
+          "IA Power_0": 6.3917625418060195,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.896444816053513,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7389765886287628,
+          "GT Power_0": 0.13563879598662212,
+          "IA Power_0": 6.335655518394647,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.787618729096992,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7953812709030098,
+          "GT Power_0": 0.3053745819397994,
+          "IA Power_0": 6.640344481605346,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.2933043478260835,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7477725752508364,
+          "GT Power_0": 0.1518494983277592,
+          "IA Power_0": 6.793892976588628,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.2519397993311046,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD137-A9",
+      "number": 4280,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6114949832775923,
+          "GT Power_0": 0.014672240802675578,
+          "IA Power_0": 4.393618729096991,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.788036789297657,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7390533333333335,
+          "GT Power_0": 0.11583333333333339,
+          "IA Power_0": 7.496910000000001,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.92181000000001,
+          "name": "Video_720_MP4",
+          "samples": 300
+        },
+        {
+          "DRAM Power_0": 0.7369197324414715,
+          "GT Power_0": 0.11440802675585296,
+          "IA Power_0": 7.500729096989966,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.898464882943142,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7950836120401336,
+          "GT Power_0": 0.2458227424749164,
+          "IA Power_0": 7.764889632107021,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.32949163879599,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7530702341137127,
+          "GT Power_0": 0.1220836120401339,
+          "IA Power_0": 7.408498327759191,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.911214046822738,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD151-A9",
+      "number": 4279,
+      "tests": [
+        {
+          "DRAM Power_0": 0.623260869565218,
+          "GT Power_0": 0.03136454849498324,
+          "IA Power_0": 4.477588628762543,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.795555183946488,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7374548494983278,
+          "GT Power_0": 0.10250501672240803,
+          "IA Power_0": 6.446117056856188,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.852879598662208,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7404682274247496,
+          "GT Power_0": 0.10276923076923081,
+          "IA Power_0": 6.420401337792644,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.823357859531774,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7954581939799329,
+          "GT Power_0": 0.22493311036789287,
+          "IA Power_0": 6.70776923076923,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.265317725752507,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7535117056856191,
+          "GT Power_0": 0.1093177257525083,
+          "IA Power_0": 6.493892976588628,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.967224080267558,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD154-A9",
+      "number": 4278,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6015183946488293,
+          "GT Power_0": 0.03823745819397993,
+          "IA Power_0": 3.7289732441471592,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.029715719063543,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7457290969899667,
+          "GT Power_0": 0.14590301003344483,
+          "IA Power_0": 6.40772575250836,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.9337157190635486,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7463812709030107,
+          "GT Power_0": 0.1457892976588628,
+          "IA Power_0": 6.470752508361202,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.943829431438127,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7960301003344477,
+          "GT Power_0": 0.3015016722408028,
+          "IA Power_0": 6.858635451505015,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.492020066889625,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7434749163879603,
+          "GT Power_0": 0.15564214046822739,
+          "IA Power_0": 6.705167224080266,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.1665083612040075,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD143-A9",
+      "number": 4277,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6009060402684564,
+          "GT Power_0": 0.02906040268456374,
+          "IA Power_0": 3.2225100671140945,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.52230201342282,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7443612040133782,
+          "GT Power_0": 0.1219197324414715,
+          "IA Power_0": 5.670441471571908,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.125461538461536,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7383545150501681,
+          "GT Power_0": 0.11734448160535126,
+          "IA Power_0": 5.7262207357859545,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.159143812709031,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8054648829431431,
+          "GT Power_0": 0.24453846153846157,
+          "IA Power_0": 5.9294882943143845,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.572625418060201,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7465819397993312,
+          "GT Power_0": 0.12661538461538457,
+          "IA Power_0": 5.831297658862876,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.276959866220734,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD21-B1",
+      "number": 4276,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6085469798657719,
+          "GT Power_0": 0.029258389261744934,
+          "IA Power_0": 3.570959731543625,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.174647651006713,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7418160535117054,
+          "GT Power_0": 0.1217892976588628,
+          "IA Power_0": 6.031053511705687,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.6431237458193975,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7415719063545151,
+          "GT Power_0": 0.12122408026755854,
+          "IA Power_0": 6.02003678929766,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.654080267558529,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8064180602006692,
+          "GT Power_0": 0.2540167224080266,
+          "IA Power_0": 6.368270903010036,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.205063545150509,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7468060200668896,
+          "GT Power_0": 0.12947826086956515,
+          "IA Power_0": 6.199939799331104,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.828535117056865,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD142-A9",
+      "number": 4275,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6044648829431443,
+          "GT Power_0": 0.03684615384615379,
+          "IA Power_0": 3.727752508361204,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.072066889632109,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7407993311036792,
+          "GT Power_0": 0.13109364548494987,
+          "IA Power_0": 6.629839464882944,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.070812709030098,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7384046822742475,
+          "GT Power_0": 0.12942140468227417,
+          "IA Power_0": 6.613852842809365,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.0507926421404665,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7962307692307686,
+          "GT Power_0": 0.2792508361204013,
+          "IA Power_0": 6.886421404682278,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.4908829431438155,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7438561872909698,
+          "GT Power_0": 0.13613377926421413,
+          "IA Power_0": 6.90191304347826,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.342311036789294,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD21-B1",
+      "number": 4274,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6007625418060201,
+          "GT Power_0": 0.014963210702341122,
+          "IA Power_0": 3.4337959866220764,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.913929765886287,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7472474916387964,
+          "GT Power_0": 0.12313377926421405,
+          "IA Power_0": 6.168622073578598,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.856321070234106,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7417290969899676,
+          "GT Power_0": 0.1221270903010032,
+          "IA Power_0": 6.13423411371238,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.776371237458199,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7989030100334452,
+          "GT Power_0": 0.25700334448160544,
+          "IA Power_0": 6.41620735785953,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.178381270903005,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7631571906354513,
+          "GT Power_0": 0.13670568561872903,
+          "IA Power_0": 6.254371237458192,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.985578595317724,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD181-A9",
+      "number": 4273,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6058795986622072,
+          "GT Power_0": 0.03359866220735782,
+          "IA Power_0": 3.8080535117056855,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.137200668896322,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7429163879598664,
+          "GT Power_0": 0.11825083612040131,
+          "IA Power_0": 6.614538461538463,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.059344481605349,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7471270903010033,
+          "GT Power_0": 0.11308361204013384,
+          "IA Power_0": 6.835454849498325,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.250321070234117,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7996321070234121,
+          "GT Power_0": 0.23693645484949827,
+          "IA Power_0": 6.85056856187291,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.442525083612041,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7545250836120404,
+          "GT Power_0": 0.11707023411371237,
+          "IA Power_0": 6.809267558528433,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.327622073578595,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD149-A9",
+      "number": 4272,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6028120805369129,
+          "GT Power_0": 0.02999328859060397,
+          "IA Power_0": 4.33745637583893,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.641560402684567,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7396555183946489,
+          "GT Power_0": 0.12738461538461537,
+          "IA Power_0": 7.430297658862877,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.855665551839467,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7393578595317727,
+          "GT Power_0": 0.12281605351170567,
+          "IA Power_0": 7.374287625418061,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.817307692307689,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7952207357859533,
+          "GT Power_0": 0.27851505016722433,
+          "IA Power_0": 7.708571906354513,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.314956521739129,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7445953177257526,
+          "GT Power_0": 0.13129096989966557,
+          "IA Power_0": 7.3041605351170595,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.743752508361203,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD154-A9",
+      "number": 4271,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6061644295302018,
+          "GT Power_0": 0.03752684563758384,
+          "IA Power_0": 3.819899328859061,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.186389261744965,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7383210702341134,
+          "GT Power_0": 0.14682943143812704,
+          "IA Power_0": 6.440903010033445,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.919762541806016,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7357625418060201,
+          "GT Power_0": 0.14203678929765878,
+          "IA Power_0": 6.531474916387961,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.973163879598658,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7966555183946493,
+          "GT Power_0": 0.29704013377926414,
+          "IA Power_0": 6.76790301003345,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.405230769230764,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7414983277591971,
+          "GT Power_0": 0.15290969899665555,
+          "IA Power_0": 6.760150501672239,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.214916387959864,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD147-A9",
+      "number": 4270,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6099899665551838,
+          "GT Power_0": 0.022498327759197276,
+          "IA Power_0": 3.5025117056856194,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.834127090301003,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7444381270903012,
+          "GT Power_0": 0.14359531772575249,
+          "IA Power_0": 5.885789297658864,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.343481605351172,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7404682274247488,
+          "GT Power_0": 0.14447491638795987,
+          "IA Power_0": 5.800143812709032,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.260996655518394,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8179866220735784,
+          "GT Power_0": 0.30569565217391315,
+          "IA Power_0": 6.065006688963209,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.931200668896327,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7535819397993315,
+          "GT Power_0": 0.15690301003344484,
+          "IA Power_0": 5.935715719063545,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.465140468227425,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD163-A9",
+      "number": 4269,
+      "tests": [
+        {
+          "DRAM Power_0": 0.604909698996656,
+          "GT Power_0": 0.015234113712374575,
+          "IA Power_0": 3.4964046822742456,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.836110367892973,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7394481605351165,
+          "GT Power_0": 0.11814715719063552,
+          "IA Power_0": 6.205006688963207,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.665822742474916,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7471471571906352,
+          "GT Power_0": 0.11893311036789293,
+          "IA Power_0": 6.563923076923077,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.991665551839457,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7966555183946491,
+          "GT Power_0": 0.26236454849498336,
+          "IA Power_0": 6.655230769230771,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.241719063545142,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.74276254180602,
+          "GT Power_0": 0.12297993311036783,
+          "IA Power_0": 6.520274247491639,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.95250501672241,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD126-A9",
+      "number": 4268,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6013076923076923,
+          "GT Power_0": 0.014324414715719056,
+          "IA Power_0": 3.700802675585286,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.995324414715717,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7399598662207362,
+          "GT Power_0": 0.11479264214046825,
+          "IA Power_0": 6.382618729096988,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.78936120401338,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7389832775919732,
+          "GT Power_0": 0.1137190635451505,
+          "IA Power_0": 6.277361204013379,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.67816387959866,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8027491638795986,
+          "GT Power_0": 0.23874916387959874,
+          "IA Power_0": 6.478571906354513,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.1346956521739155,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7545284280936457,
+          "GT Power_0": 0.11945484949832776,
+          "IA Power_0": 6.310789297658861,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.826896321070228,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD125-A9",
+      "number": 4267,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6043557046979866,
+          "GT Power_0": 0.03614429530201339,
+          "IA Power_0": 4.711033557046978,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.037083892617449,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7397248322147654,
+          "GT Power_0": 0.10864093959731547,
+          "IA Power_0": 7.869738255033564,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.28496979865772,
+          "name": "Video_720_MP4",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7430969899665553,
+          "GT Power_0": 0.11177591973244151,
+          "IA Power_0": 8.093274247491646,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.508615384615386,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8643221476510069,
+          "GT Power_0": 0.24819798657718123,
+          "IA Power_0": 10.881714765100671,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 11.555315436241607,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.744307692307692,
+          "GT Power_0": 0.11770903010033437,
+          "IA Power_0": 7.914063545150504,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.324598662207352,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD178-A9",
+      "number": 4266,
+      "tests": [
+        {
+          "DRAM Power_0": 0.612989932885906,
+          "GT Power_0": 0.02848322147651002,
+          "IA Power_0": 4.074355704697986,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.442127516778525,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7411571906354514,
+          "GT Power_0": 0.1044013377926422,
+          "IA Power_0": 6.441739130434784,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.86314381270903,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7396588628762544,
+          "GT Power_0": 0.1098461538461539,
+          "IA Power_0": 6.428351170568559,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.831615384615387,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7968494983277591,
+          "GT Power_0": 0.2257993311036788,
+          "IA Power_0": 6.63952508361204,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.200591973244147,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7532709030100332,
+          "GT Power_0": 0.11031438127090307,
+          "IA Power_0": 6.584789297658864,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.0778628762541835,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD149-A9",
+      "number": 4265,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6078993288590605,
+          "GT Power_0": 0.027389261744966403,
+          "IA Power_0": 4.42068456375839,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.7723288590604005,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7654395973154361,
+          "GT Power_0": 0.12753691275167783,
+          "IA Power_0": 8.260768456375839,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.770506711409388,
+          "name": "Video_720_MP4",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7614481605351172,
+          "GT Power_0": 0.14848494983277596,
+          "IA Power_0": 7.893745819397989,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.355872909699,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8031973244147159,
+          "GT Power_0": 0.27839130434782605,
+          "IA Power_0": 7.730755852842816,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.408598662207357,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7452073578595312,
+          "GT Power_0": 0.13115050167224077,
+          "IA Power_0": 7.426515050167222,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.841170568561864,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD139-A9",
+      "number": 4264,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6017157190635452,
+          "GT Power_0": 0.031882943143812674,
+          "IA Power_0": 3.7442675585284304,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.049762541806022,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7365785953177263,
+          "GT Power_0": 0.13334448160535117,
+          "IA Power_0": 6.364989966555184,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.811588628762544,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7344448160535123,
+          "GT Power_0": 0.13177257525083613,
+          "IA Power_0": 6.423712374581936,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.86972575250836,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.793518394648829,
+          "GT Power_0": 0.30007023411371236,
+          "IA Power_0": 6.712765886287629,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.342441471571908,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7408160535117057,
+          "GT Power_0": 0.1400301003344481,
+          "IA Power_0": 6.544939799331104,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.019264214046819,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD129-A9",
+      "number": 4263,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6052140468227425,
+          "GT Power_0": 0.02810033444816051,
+          "IA Power_0": 3.4954247491638792,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.8558628762541804,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7410100334448169,
+          "GT Power_0": 0.09487959866220731,
+          "IA Power_0": 6.0827224080267515,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.498625418060205,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7359632107023416,
+          "GT Power_0": 0.09242140468227428,
+          "IA Power_0": 6.0775384615384604,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.463013377926427,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7975819397993308,
+          "GT Power_0": 0.21058528428093665,
+          "IA Power_0": 6.091327759197323,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.629484949832775,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7428026755852848,
+          "GT Power_0": 0.09563545150501682,
+          "IA Power_0": 5.973571906354512,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.386120401337794,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD160-A9",
+      "number": 4262,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6089632107023407,
+          "GT Power_0": 0.03485618729096986,
+          "IA Power_0": 3.6282341137123733,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.9458528428093604,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7472374581939809,
+          "GT Power_0": 0.12292307692307677,
+          "IA Power_0": 5.614090301003346,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.09017725752508,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7395503355704701,
+          "GT Power_0": 0.12290939597315435,
+          "IA Power_0": 5.813557046979863,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.240389261744964,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7973311036789301,
+          "GT Power_0": 0.24289297658862852,
+          "IA Power_0": 5.679274247491642,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.254799331103678,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.743508361204014,
+          "GT Power_0": 0.12858193979933105,
+          "IA Power_0": 5.57117391304348,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.0097491638795955,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD144-A9",
+      "number": 4261,
+      "tests": [
+        {
+          "DRAM Power_0": 0.606174496644295,
+          "GT Power_0": 0.024875838926174475,
+          "IA Power_0": 4.066489932885909,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.431751677852351,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7468020134228188,
+          "GT Power_0": 0.11451342281879197,
+          "IA Power_0": 6.975070469798657,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.399728187919462,
+          "name": "Video_720_MP4",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7632809364548497,
+          "GT Power_0": 0.13727090301003328,
+          "IA Power_0": 6.932237458193983,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.395494983277591,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7942575250836118,
+          "GT Power_0": 0.23909364548494966,
+          "IA Power_0": 6.918712374581939,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.47771906354515,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7440468227424749,
+          "GT Power_0": 0.1200635451505018,
+          "IA Power_0": 6.863541806020064,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.296321070234111,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD133-A9",
+      "number": 4260,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5954916387959873,
+          "GT Power_0": 0.032311036789297636,
+          "IA Power_0": 3.146515050167225,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.4578729096989975,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7387391304347829,
+          "GT Power_0": 0.12588963210702342,
+          "IA Power_0": 5.7718829431438134,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.192414715719066,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7371070234113709,
+          "GT Power_0": 0.12076588628762547,
+          "IA Power_0": 5.6935384615384645,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.139418060200671,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7963913043478259,
+          "GT Power_0": 0.2649163879598663,
+          "IA Power_0": 6.018311036789297,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.589685618729096,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7439364548494983,
+          "GT Power_0": 0.1282140468227424,
+          "IA Power_0": 5.929688963210698,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.358775919732443,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD153-A9",
+      "number": 4259,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6024481605351167,
+          "GT Power_0": 0.035618729096989925,
+          "IA Power_0": 3.253033444816053,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.5605785953177267,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7392508361204015,
+          "GT Power_0": 0.08912374581939796,
+          "IA Power_0": 5.611688963210705,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.0123110367892965,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7360602006688971,
+          "GT Power_0": 0.08890635451505013,
+          "IA Power_0": 5.530782608695652,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.936806020066893,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7950969899665553,
+          "GT Power_0": 0.2031137123745821,
+          "IA Power_0": 5.746448160535118,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.284896321070236,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7420267558528435,
+          "GT Power_0": 0.0953444816053512,
+          "IA Power_0": 5.718217391304347,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.129110367892972,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD130-A9",
+      "number": 4258,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5990402684563759,
+          "GT Power_0": 0.03116442953020132,
+          "IA Power_0": 3.838046979865773,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.208580536912751,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7478595317725759,
+          "GT Power_0": 0.12146488294314388,
+          "IA Power_0": 7.1501438127090315,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.60978595317725,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7358528428093649,
+          "GT Power_0": 0.11541471571906359,
+          "IA Power_0": 7.111230769230765,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.532227424749161,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8051438127090305,
+          "GT Power_0": 0.24732441471571884,
+          "IA Power_0": 7.469568561872908,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.085919732441468,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7519397993311043,
+          "GT Power_0": 0.12638127090301007,
+          "IA Power_0": 7.2829698996655505,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.720682274247499,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD146-A9",
+      "number": 4257,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6050268456375838,
+          "GT Power_0": 0.03443959731543623,
+          "IA Power_0": 3.4951543624161068,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.8559966442953026,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7445585284280941,
+          "GT Power_0": 0.13558193979933128,
+          "IA Power_0": 6.151381270903011,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.57749163879599,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.737214046822743,
+          "GT Power_0": 0.12952508361204013,
+          "IA Power_0": 6.1285183946488315,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.564103678929771,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7959632107023411,
+          "GT Power_0": 0.25900668896321105,
+          "IA Power_0": 6.334424749163875,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.906792642140469,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7432508361204017,
+          "GT Power_0": 0.1358595317725753,
+          "IA Power_0": 6.387381270903009,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.8435585284280895,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD154-A9",
+      "number": 4256,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6068657718120799,
+          "GT Power_0": 0.033278523489932856,
+          "IA Power_0": 3.90169798657718,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.247590604026846,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7386688963210704,
+          "GT Power_0": 0.1540501672240802,
+          "IA Power_0": 6.385391304347828,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.848287625418062,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7453311036789304,
+          "GT Power_0": 0.15102341137123743,
+          "IA Power_0": 6.332494983277591,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.87592642140468,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7964046822742478,
+          "GT Power_0": 0.30491638795986625,
+          "IA Power_0": 6.692030100334448,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.3257926421404695,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7419264214046827,
+          "GT Power_0": 0.1615284280936456,
+          "IA Power_0": 6.46963879598662,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.939521739130434,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD169-A9",
+      "number": 4255,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6041170568561873,
+          "GT Power_0": 0.028050167224080227,
+          "IA Power_0": 3.9629331103678926,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.273247491638795,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7611610738255036,
+          "GT Power_0": 0.1257751677852349,
+          "IA Power_0": 6.908674496644293,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.424355704697986,
+          "name": "Video_720_MP4",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7575852842809371,
+          "GT Power_0": 0.14833444816053526,
+          "IA Power_0": 6.573046822742479,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.04676254180602,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7945351170568562,
+          "GT Power_0": 0.25138795986622076,
+          "IA Power_0": 6.657023411371232,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.239013377926423,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7453511705685619,
+          "GT Power_0": 0.1270434782608696,
+          "IA Power_0": 6.501354515050164,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.9175083612040105,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD126-A9",
+      "number": 4254,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6014113712374582,
+          "GT Power_0": 0.015193979933110372,
+          "IA Power_0": 3.642143812709026,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.9321070234113713,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7381404682274257,
+          "GT Power_0": 0.10915050167224086,
+          "IA Power_0": 6.086374581939799,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.51191973244147,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7433812709030101,
+          "GT Power_0": 0.1134013377926422,
+          "IA Power_0": 6.118314381270904,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.61394983277592,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7950568561872909,
+          "GT Power_0": 0.24003678929765887,
+          "IA Power_0": 6.345153846153845,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.906230769230767,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7457725752508363,
+          "GT Power_0": 0.11816387959866224,
+          "IA Power_0": 6.252220735785957,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.68531772575251,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD118-A9",
+      "number": 4253,
+      "tests": [
+        {
+          "DRAM Power_0": 0.599057046979866,
+          "GT Power_0": 0.024194630872483216,
+          "IA Power_0": 3.446694630872484,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.78606375838926,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7420836120401335,
+          "GT Power_0": 0.11092307692307696,
+          "IA Power_0": 6.1592474916388,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.608053511705684,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7376454849498327,
+          "GT Power_0": 0.1083110367892976,
+          "IA Power_0": 6.013856187290969,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.4333578595317755,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7971137123745813,
+          "GT Power_0": 0.24344481605351145,
+          "IA Power_0": 6.120939799331103,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.688795986622076,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7407792642140467,
+          "GT Power_0": 0.11454180602006696,
+          "IA Power_0": 5.922197324414717,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.356752508361204,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD126-A9",
+      "number": 4252,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6096442953020131,
+          "GT Power_0": 0.03432885906040263,
+          "IA Power_0": 4.037748322147649,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.34579865771812,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7377023411371243,
+          "GT Power_0": 0.11420401337792642,
+          "IA Power_0": 6.071588628762536,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.492926421404682,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7371872909698999,
+          "GT Power_0": 0.11430769230769235,
+          "IA Power_0": 6.061163879598668,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.482969899665557,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7935618729096992,
+          "GT Power_0": 0.24385284280936442,
+          "IA Power_0": 6.287043478260872,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.878795986622076,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7438127090301014,
+          "GT Power_0": 0.1202107023411371,
+          "IA Power_0": 6.192705685618727,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.618287625418065,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD123-A9",
+      "number": 4251,
+      "tests": [
+        {
+          "DRAM Power_0": 0.604328859060403,
+          "GT Power_0": 0.030177852348993273,
+          "IA Power_0": 3.697687919463088,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.022634228187922,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7459130434782613,
+          "GT Power_0": 0.1104046822742475,
+          "IA Power_0": 6.7247692307692315,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.183906354515051,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7411571906354518,
+          "GT Power_0": 0.10780602006688976,
+          "IA Power_0": 6.610688963210708,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.078304347826084,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7950869565217388,
+          "GT Power_0": 0.23649163879598667,
+          "IA Power_0": 6.915789297658861,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.475484949832776,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7438093645484952,
+          "GT Power_0": 0.11579933110367896,
+          "IA Power_0": 6.72457859531772,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.156678929765887,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD138-A9",
+      "number": 4250,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6120535117056854,
+          "GT Power_0": 0.03309364548494981,
+          "IA Power_0": 3.4513344481605346,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.824404682274244,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7722876254180605,
+          "GT Power_0": 0.10793645484949832,
+          "IA Power_0": 6.875,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.306441471571901,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7668282828282823,
+          "GT Power_0": 0.11388888888888887,
+          "IA Power_0": 6.525397306397308,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.03041077441077,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 297
+        },
+        {
+          "DRAM Power_0": 0.794625418060201,
+          "GT Power_0": 0.23323411371237437,
+          "IA Power_0": 5.701214046822743,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.270642140468229,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7434983277591973,
+          "GT Power_0": 0.11447157190635453,
+          "IA Power_0": 5.487608695652174,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.923224080267562,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD178-A9",
+      "number": 4249,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6072550335570468,
+          "GT Power_0": 0.03032550335570466,
+          "IA Power_0": 3.828704697986577,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.1692147651006675,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7488829431438135,
+          "GT Power_0": 0.10929096989966554,
+          "IA Power_0": 6.530625418060206,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.962304347826089,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7452006688963213,
+          "GT Power_0": 0.10781939799331096,
+          "IA Power_0": 6.361789297658861,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.880357859531769,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7971066666666669,
+          "GT Power_0": 0.23225333333333326,
+          "IA Power_0": 6.781956666666664,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.34867,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 300
+        },
+        {
+          "DRAM Power_0": 0.74494983277592,
+          "GT Power_0": 0.11443478260869556,
+          "IA Power_0": 6.581484949832775,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.011682274247492,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD145-A9",
+      "number": 4248,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6051006711409396,
+          "GT Power_0": 0.027671140939597286,
+          "IA Power_0": 3.4007315436241625,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.757110738255033,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.738598662207359,
+          "GT Power_0": 0.09566555183946486,
+          "IA Power_0": 5.742896321070235,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.148521739130436,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7378862876254177,
+          "GT Power_0": 0.09710033444816045,
+          "IA Power_0": 5.562535117056856,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.988551839464878,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7943010033444815,
+          "GT Power_0": 0.21809030100334453,
+          "IA Power_0": 5.7807759197324415,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.353819397993308,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7443244147157199,
+          "GT Power_0": 0.10463210702341141,
+          "IA Power_0": 5.676264214046825,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.104719063545151,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD160-A9",
+      "number": 4247,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5953355704697985,
+          "GT Power_0": 0.025751677852348952,
+          "IA Power_0": 3.126087248322146,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.4376174496644296,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7401003344481607,
+          "GT Power_0": 0.12428428093645492,
+          "IA Power_0": 5.531963210702344,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.964548494983278,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.74676254180602,
+          "GT Power_0": 0.12756856187290977,
+          "IA Power_0": 5.59579264214047,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.090829431438126,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7967692307692312,
+          "GT Power_0": 0.25347157190635444,
+          "IA Power_0": 5.717381270903012,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.322765886287626,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7584581939799333,
+          "GT Power_0": 0.1341772575250837,
+          "IA Power_0": 5.502374581939799,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.105377926421401,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD175-A9",
+      "number": 4246,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6003712374581938,
+          "GT Power_0": 0.027301003344481576,
+          "IA Power_0": 3.633063545150502,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.9642809364548492,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7504046822742474,
+          "GT Power_0": 0.10459866220735788,
+          "IA Power_0": 6.412608695652174,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.916715719063542,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7382976588628761,
+          "GT Power_0": 0.10102341137123742,
+          "IA Power_0": 6.304387959866221,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.718010033444816,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8011137123745818,
+          "GT Power_0": 0.22883277591973247,
+          "IA Power_0": 6.7297491638796,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.298474916387962,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7468227424749161,
+          "GT Power_0": 0.10460535117056854,
+          "IA Power_0": 6.319545150501676,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.74771906354515,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD138-A9",
+      "number": 4245,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6061571906354515,
+          "GT Power_0": 0.03592642140468223,
+          "IA Power_0": 3.2326220735785935,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.5723712374581944,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7466789297658863,
+          "GT Power_0": 0.11030100334448159,
+          "IA Power_0": 5.54361204013378,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.00417056856187,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7370836120401341,
+          "GT Power_0": 0.10802675585284285,
+          "IA Power_0": 5.452023411371239,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.864210702341139,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8013110367892979,
+          "GT Power_0": 0.22911036789297642,
+          "IA Power_0": 5.745234113712373,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.359133779264214,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.799265993265994,
+          "GT Power_0": 0.11199326599326605,
+          "IA Power_0": 7.31187542087542,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.746508417508421,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 297
+        }
+      ]
+    },
+    {
+      "bot": "BUILD154-A9",
+      "number": 4244,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6084849498327752,
+          "GT Power_0": 0.017565217391304337,
+          "IA Power_0": 3.5072341137123746,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.8519130434782616,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7427290969899671,
+          "GT Power_0": 0.14538461538461545,
+          "IA Power_0": 6.289424749163881,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.776130434782604,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7495033333333339,
+          "GT Power_0": 0.14791333333333326,
+          "IA Power_0": 6.6483933333333285,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.146229999999997,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 300
+        },
+        {
+          "DRAM Power_0": 0.802086956521739,
+          "GT Power_0": 0.30076923076923096,
+          "IA Power_0": 6.691822742474917,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.3737558528428115,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.749969899665552,
+          "GT Power_0": 0.15154515050167236,
+          "IA Power_0": 6.58438461538461,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.089301003344486,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD144-A9",
+      "number": 4243,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5971070234113711,
+          "GT Power_0": 0.029290969899665526,
+          "IA Power_0": 3.7147257525083606,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.018605351170569,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7384448160535124,
+          "GT Power_0": 0.11041806020066897,
+          "IA Power_0": 6.493354515050164,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.915,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7417658862876255,
+          "GT Power_0": 0.1080301003344482,
+          "IA Power_0": 6.742762541806017,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.153070234113714,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7996409395973154,
+          "GT Power_0": 0.24168791946308715,
+          "IA Power_0": 7.170291946308726,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.734560402684567,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7448428093645487,
+          "GT Power_0": 0.11749832775919722,
+          "IA Power_0": 6.603949832775919,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.03127090301003,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD142-A9",
+      "number": 4242,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6004715719063546,
+          "GT Power_0": 0.01684280936454849,
+          "IA Power_0": 3.832882943143817,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.127143812709029,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7362107023411373,
+          "GT Power_0": 0.13469565217391294,
+          "IA Power_0": 6.708852842809364,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.1408561872909715,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7438695652173914,
+          "GT Power_0": 0.13249832775919723,
+          "IA Power_0": 6.762177257525084,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.266117056856186,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7933344481605349,
+          "GT Power_0": 0.27714046822742466,
+          "IA Power_0": 7.034341137123746,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.630274247491635,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7427658862876255,
+          "GT Power_0": 0.1384147157190635,
+          "IA Power_0": 6.8574782608695655,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.297237458193976,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD179-A9",
+      "number": 4241,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6141939799331105,
+          "GT Power_0": 0.032779264214046824,
+          "IA Power_0": 4.341200668896317,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.703695652173912,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7423166666666673,
+          "GT Power_0": 0.14111,
+          "IA Power_0": 6.695590000000001,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.152706666666663,
+          "name": "Video_720_MP4",
+          "samples": 300
+        },
+        {
+          "DRAM Power_0": 0.7377391304347831,
+          "GT Power_0": 0.13757190635451508,
+          "IA Power_0": 6.560277591973239,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.996464882943145,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8025551839464882,
+          "GT Power_0": 0.2884983277591975,
+          "IA Power_0": 6.910010033444814,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.56570568561873,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7525819397993314,
+          "GT Power_0": 0.14627424749163873,
+          "IA Power_0": 6.77220066889632,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.3170133779264175,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD132-A9",
+      "number": 4240,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5964429530201344,
+          "GT Power_0": 0.029120805369127496,
+          "IA Power_0": 3.9307281879194638,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.2116845637583875,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7384648829431439,
+          "GT Power_0": 0.11331438127090294,
+          "IA Power_0": 7.020133779264208,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.432026755852846,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.757040133779264,
+          "GT Power_0": 0.11427759197324411,
+          "IA Power_0": 7.1342742474916365,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.769491638795982,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7974648829431442,
+          "GT Power_0": 0.23718060200668903,
+          "IA Power_0": 7.290735785953173,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.84914715719063,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7436655518394646,
+          "GT Power_0": 0.11809364548494977,
+          "IA Power_0": 6.91536454849498,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.335658862876257,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD141-A9",
+      "number": 4239,
+      "tests": [
+        {
+          "DRAM Power_0": 0.60596644295302,
+          "GT Power_0": 0.036634228187919435,
+          "IA Power_0": 4.223697986577183,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.554104026845638,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7393612040133785,
+          "GT Power_0": 0.1316321070234114,
+          "IA Power_0": 6.960484949832776,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.413789297658864,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7372675585284283,
+          "GT Power_0": 0.1325551839464882,
+          "IA Power_0": 7.012056856187288,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.454076923076922,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8041308724832216,
+          "GT Power_0": 0.25826510067114083,
+          "IA Power_0": 7.34370469798658,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.979318791946307,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7582307692307697,
+          "GT Power_0": 0.1364615384615385,
+          "IA Power_0": 7.214491638795985,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.751150501672241,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD139-A9",
+      "number": 4238,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6013799999999999,
+          "GT Power_0": 0.016553333333333326,
+          "IA Power_0": 3.6870033333333354,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.9775833333333335,
+          "name": "Basic",
+          "samples": 300
+        },
+        {
+          "DRAM Power_0": 0.7384381270903012,
+          "GT Power_0": 0.1228829431438127,
+          "IA Power_0": 6.444632107023413,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.87361872909699,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7355852842809361,
+          "GT Power_0": 0.12540468227424745,
+          "IA Power_0": 6.286123745819394,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.733879598662206,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7942575250836119,
+          "GT Power_0": 0.28731103678929776,
+          "IA Power_0": 6.614859531772576,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.244675585284279,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.744070234113713,
+          "GT Power_0": 0.13470568561872903,
+          "IA Power_0": 6.425602006688961,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.85419397993311,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD133-A9",
+      "number": 4237,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6023120805369125,
+          "GT Power_0": 0.03363422818791943,
+          "IA Power_0": 3.426526845637583,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.7101208053691237,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7383712374581942,
+          "GT Power_0": 0.12204347826086948,
+          "IA Power_0": 5.761749163879598,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.204555183946492,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7478461538461542,
+          "GT Power_0": 0.1230969899665553,
+          "IA Power_0": 5.796140468227421,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.2958060200668875,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7953277591973247,
+          "GT Power_0": 0.24914715719063532,
+          "IA Power_0": 5.971364548494982,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.55803678929766,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.743157190635452,
+          "GT Power_0": 0.128314381270903,
+          "IA Power_0": 5.932976588628763,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.3750066889632055,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD169-A9",
+      "number": 4236,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6057525083612039,
+          "GT Power_0": 0.03519397993311033,
+          "IA Power_0": 3.5967591973244133,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.9643277591973254,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7387759197324419,
+          "GT Power_0": 0.12360200668896329,
+          "IA Power_0": 6.119608695652172,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.560147157190632,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7421036789297656,
+          "GT Power_0": 0.12399665551839475,
+          "IA Power_0": 6.318541806020071,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.768371237458189,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8052693602693606,
+          "GT Power_0": 0.2513973063973065,
+          "IA Power_0": 7.172676767676766,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.773804713804712,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 297
+        },
+        {
+          "DRAM Power_0": 0.7457826086956525,
+          "GT Power_0": 0.1272240802675586,
+          "IA Power_0": 6.4734381270903,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.916775919732442,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD161-A9",
+      "number": 4235,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6011711409395969,
+          "GT Power_0": 0.0342919463087248,
+          "IA Power_0": 3.0564228187919475,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.3724832214765073,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7386521739130433,
+          "GT Power_0": 0.11193979933110375,
+          "IA Power_0": 5.173511705685616,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.611020066889629,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7368361204013377,
+          "GT Power_0": 0.1130401337792643,
+          "IA Power_0": 5.316204013377928,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.733578595317729,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7952173913043474,
+          "GT Power_0": 0.24329096989966545,
+          "IA Power_0": 5.5331505016722415,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.111458193979932,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7582441471571908,
+          "GT Power_0": 0.12342140468227425,
+          "IA Power_0": 5.654819397993308,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.156862876254185,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD182-A9",
+      "number": 4234,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6094731543624161,
+          "GT Power_0": 0.028302013422818777,
+          "IA Power_0": 3.5815469798657693,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.8886275167785262,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7463913043478265,
+          "GT Power_0": 0.09505685618729098,
+          "IA Power_0": 5.78338795986622,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.2464715719063495,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7500267558528436,
+          "GT Power_0": 0.090056856187291,
+          "IA Power_0": 5.830558528428091,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.291829431438123,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7986321070234114,
+          "GT Power_0": 0.20309698996655526,
+          "IA Power_0": 6.021775919732438,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.560478260869559,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7473678929765885,
+          "GT Power_0": 0.094438127090301,
+          "IA Power_0": 6.079665551839463,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.486301003344483,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD151-A9",
+      "number": 4233,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5996510067114096,
+          "GT Power_0": 0.025912751677852314,
+          "IA Power_0": 3.560550335570467,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.8570805369127528,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7397926421404686,
+          "GT Power_0": 0.10946153846153849,
+          "IA Power_0": 6.4222173913043505,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.820903010033444,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7375050167224084,
+          "GT Power_0": 0.10911371237458196,
+          "IA Power_0": 6.392451505016726,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.811869565217394,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8125217391304345,
+          "GT Power_0": 0.24796321070234092,
+          "IA Power_0": 7.02304347826087,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.81220401337793,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7476956521739134,
+          "GT Power_0": 0.11754849498327763,
+          "IA Power_0": 6.8957826086956535,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.303324414715716,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD129-A9",
+      "number": 4232,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6047281879194631,
+          "GT Power_0": 0.026456375838926148,
+          "IA Power_0": 3.392885906040269,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.753087248322148,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7385752508361201,
+          "GT Power_0": 0.08931438127090303,
+          "IA Power_0": 6.033030100334445,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.4240501672240855,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7491073825503353,
+          "GT Power_0": 0.09166442953020135,
+          "IA Power_0": 6.10142617449664,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.541979865771815,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.815208053691275,
+          "GT Power_0": 0.22932214765100672,
+          "IA Power_0": 6.543006711409398,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.1085771812080525,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7938080808080809,
+          "GT Power_0": 0.10071043771043776,
+          "IA Power_0": 7.665117845117846,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.090986531986534,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 297
+        }
+      ]
+    },
+    {
+      "bot": "BUILD168-A9",
+      "number": 4231,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6000134228187919,
+          "GT Power_0": 0.035620805369127484,
+          "IA Power_0": 3.5738221476510055,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.88488255033557,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7400668896321071,
+          "GT Power_0": 0.12218394648829432,
+          "IA Power_0": 6.3048996655518375,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.7432976588628755,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7379665551839465,
+          "GT Power_0": 0.12193645484949822,
+          "IA Power_0": 6.307943143812711,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.754331103678931,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7947257525083615,
+          "GT Power_0": 0.25766889632107026,
+          "IA Power_0": 6.617354515050167,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.227217391304351,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7542441471571905,
+          "GT Power_0": 0.12994648829431432,
+          "IA Power_0": 6.568946488294316,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.09127090301003,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD164-A9",
+      "number": 4230,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6057483221476507,
+          "GT Power_0": 0.028557046979865747,
+          "IA Power_0": 3.5636644295302013,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.9031006711409373,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7549732441471576,
+          "GT Power_0": 0.12505016722408027,
+          "IA Power_0": 6.6694648829431395,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.147287625418059,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7391872909698994,
+          "GT Power_0": 0.1205919732441471,
+          "IA Power_0": 6.39754180602007,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.831966555183945,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8051806020066886,
+          "GT Power_0": 0.2547926421404684,
+          "IA Power_0": 6.697270903010034,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.306755852842813,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.756553691275168,
+          "GT Power_0": 0.1297248322147652,
+          "IA Power_0": 6.735073825503356,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.261674496644291,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 298
+        }
+      ]
+    },
+    {
+      "bot": "BUILD118-A9",
+      "number": 4229,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6074161073825501,
+          "GT Power_0": 0.030046979865771768,
+          "IA Power_0": 3.5207080536912763,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.8709362416107376,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7393578595317726,
+          "GT Power_0": 0.10992976588628767,
+          "IA Power_0": 6.022749163879591,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.437317725752505,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7538862876254185,
+          "GT Power_0": 0.10536454849498327,
+          "IA Power_0": 5.8951571906354525,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.49870568561873,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.803498327759197,
+          "GT Power_0": 0.239010033444816,
+          "IA Power_0": 6.107836120401339,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.750678929765889,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7537658862876256,
+          "GT Power_0": 0.1104882943143813,
+          "IA Power_0": 5.876317725752508,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.390658862876253,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD156-A9",
+      "number": 4228,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6015785953177256,
+          "GT Power_0": 0.03332775919732439,
+          "IA Power_0": 3.4020468227424727,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.71927424749164,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7466956521739135,
+          "GT Power_0": 0.12204682274247498,
+          "IA Power_0": 5.761357859531772,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.23555518394649,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7529096989966562,
+          "GT Power_0": 0.1226220735785953,
+          "IA Power_0": 5.903364548494985,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.3909531772575265,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.804321070234114,
+          "GT Power_0": 0.260304347826087,
+          "IA Power_0": 6.209260869565218,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.8020033444816095,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7536387959866232,
+          "GT Power_0": 0.13109364548494978,
+          "IA Power_0": 5.701765886287622,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.1908160535117025,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD181-A9",
+      "number": 4227,
+      "tests": [
+        {
+          "DRAM Power_0": 0.606523489932886,
+          "GT Power_0": 0.02655369127516776,
+          "IA Power_0": 4.1258422818791916,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.4504597315436225,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7405484949832778,
+          "GT Power_0": 0.11588963210702345,
+          "IA Power_0": 6.793341137123751,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.212916387959866,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7456421404682283,
+          "GT Power_0": 0.11586287625418068,
+          "IA Power_0": 6.879294314381275,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.327712374581936,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8040836120401336,
+          "GT Power_0": 0.23948829431438132,
+          "IA Power_0": 7.022207357859535,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.628688963210704,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7453712374581944,
+          "GT Power_0": 0.11936789297658862,
+          "IA Power_0": 6.738792642140471,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.196066889632101,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD21-B1",
+      "number": 4226,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6031845637583891,
+          "GT Power_0": 0.029355704697986557,
+          "IA Power_0": 3.609889261744966,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.120392617449671,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7420635451505019,
+          "GT Power_0": 0.12335785953177263,
+          "IA Power_0": 6.137110367892982,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.752632107023415,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7510668896321071,
+          "GT Power_0": 0.12197324414715717,
+          "IA Power_0": 6.03674247491639,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.692896321070231,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7979397993311039,
+          "GT Power_0": 0.25614715719063547,
+          "IA Power_0": 6.215658862876251,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.9895719063545245,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7479130434782614,
+          "GT Power_0": 0.13260200668896327,
+          "IA Power_0": 6.059294314381269,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.6989832775919815,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD139-A9",
+      "number": 4225,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6114865771812079,
+          "GT Power_0": 0.03329865771812077,
+          "IA Power_0": 3.8882046979865756,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.29441946308725,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7379765886287628,
+          "GT Power_0": 0.1297123745819399,
+          "IA Power_0": 6.322561872909702,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.769692307692308,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7442307692307694,
+          "GT Power_0": 0.12857859531772584,
+          "IA Power_0": 6.331742474916391,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.84299331103679,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7923712374581943,
+          "GT Power_0": 0.2936187290969901,
+          "IA Power_0": 6.637959866220736,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.26099331103679,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7564715719063546,
+          "GT Power_0": 0.13737123745819405,
+          "IA Power_0": 6.5448829431438105,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.149648829431441,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD160-A9",
+      "number": 4224,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6031103678929765,
+          "GT Power_0": 0.030809364548494964,
+          "IA Power_0": 3.357391304347824,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.6693478260869563,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7399565217391314,
+          "GT Power_0": 0.1254882943143813,
+          "IA Power_0": 5.603254180602008,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.046939799331106,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7401438127090304,
+          "GT Power_0": 0.12243812709030104,
+          "IA Power_0": 5.69794983277592,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.13336120401338,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7988729096989972,
+          "GT Power_0": 0.24645150501672228,
+          "IA Power_0": 5.662628762541808,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.255953177257528,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7602441471571909,
+          "GT Power_0": 0.13794983277591963,
+          "IA Power_0": 5.962404682274247,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.386080267558531,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD120-A9",
+      "number": 4223,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6060704697986581,
+          "GT Power_0": 0.031157718120805315,
+          "IA Power_0": 3.751184563758391,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.124583892617447,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7434849498327759,
+          "GT Power_0": 0.12775919732441474,
+          "IA Power_0": 6.510816053511703,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.993979933110369,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7385618729096994,
+          "GT Power_0": 0.12382943143812718,
+          "IA Power_0": 6.527892976588627,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.945351170568563,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7951103678929773,
+          "GT Power_0": 0.26648160535117055,
+          "IA Power_0": 6.746688963210701,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.32018060200669,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7515986622073573,
+          "GT Power_0": 0.12886956521739135,
+          "IA Power_0": 6.656100334448163,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.145672240802676,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD136-A9",
+      "number": 4222,
+      "tests": [
+        {
+          "DRAM Power_0": 0.606846153846154,
+          "GT Power_0": 0.031230769230769194,
+          "IA Power_0": 3.2037224080267577,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.5650836120401337,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7377090301003347,
+          "GT Power_0": 0.10880267558528424,
+          "IA Power_0": 5.693153846153848,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.105498327759194,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7445752508361209,
+          "GT Power_0": 0.10938795986622077,
+          "IA Power_0": 5.679832775919732,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.122876254180603,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7956555183946489,
+          "GT Power_0": 0.2199331103678931,
+          "IA Power_0": 5.8172173913043475,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.395260869565214,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7448896321070236,
+          "GT Power_0": 0.11489966555183947,
+          "IA Power_0": 5.780856187290973,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.211474916387959,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD172-A9",
+      "number": 4221,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6052147651006708,
+          "GT Power_0": 0.028701342281879167,
+          "IA Power_0": 3.184342281879196,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.5439966442952993,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.738056856187291,
+          "GT Power_0": 0.11348829431438129,
+          "IA Power_0": 5.484963210702344,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.909033444816051,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7393666666666668,
+          "GT Power_0": 0.11331999999999996,
+          "IA Power_0": 5.46363,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.914939999999999,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 300
+        },
+        {
+          "DRAM Power_0": 0.8012341137123752,
+          "GT Power_0": 0.22658528428093624,
+          "IA Power_0": 5.874675585284279,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.44751170568562,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7434280936454852,
+          "GT Power_0": 0.11986287625418057,
+          "IA Power_0": 5.526167224080273,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.974759197324413,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD182-A9",
+      "number": 4220,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6101845637583896,
+          "GT Power_0": 0.02723154362416108,
+          "IA Power_0": 3.7051308724832204,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.0401375838926175,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7488120805369127,
+          "GT Power_0": 0.09559060402684559,
+          "IA Power_0": 6.163120805369125,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.610436241610739,
+          "name": "Video_720_MP4",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7403946488294318,
+          "GT Power_0": 0.09439799331103683,
+          "IA Power_0": 6.082237458193979,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.507605351170565,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7982976588628764,
+          "GT Power_0": 0.20124414715719066,
+          "IA Power_0": 6.050903010033443,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.596030100334448,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7563411371237458,
+          "GT Power_0": 0.09812709030100346,
+          "IA Power_0": 6.074648829431437,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.528294314381275,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD126-A9",
+      "number": 4219,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6050535117056863,
+          "GT Power_0": 0.030933110367892914,
+          "IA Power_0": 3.686297658862877,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.048478260869568,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7486488294314384,
+          "GT Power_0": 0.11975585284280937,
+          "IA Power_0": 6.335127090301006,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.812250836120402,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.736488294314382,
+          "GT Power_0": 0.11508695652173916,
+          "IA Power_0": 6.188224080267562,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.603367892976584,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7958461538461542,
+          "GT Power_0": 0.2375752508361201,
+          "IA Power_0": 6.3521270903010025,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.886060200668891,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7433812709030103,
+          "GT Power_0": 0.1242842809364549,
+          "IA Power_0": 6.507538461538459,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.948190635451502,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD138-A9",
+      "number": 4218,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6147625418060199,
+          "GT Power_0": 0.014471571906354511,
+          "IA Power_0": 3.3463645484949853,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.7098127090300976,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7366655518394645,
+          "GT Power_0": 0.11322742474916396,
+          "IA Power_0": 5.537377926421401,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.952789297658866,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.736401337792642,
+          "GT Power_0": 0.10999665551839462,
+          "IA Power_0": 5.70402341137124,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.10980602006689,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7976053511705686,
+          "GT Power_0": 0.22827090301003336,
+          "IA Power_0": 5.81897658862876,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.388086956521735,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7445752508361202,
+          "GT Power_0": 0.11906688963210697,
+          "IA Power_0": 5.748511705685619,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.172491638795981,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD138-A9",
+      "number": 4217,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6056127946127943,
+          "GT Power_0": 0.03399326599326594,
+          "IA Power_0": 3.4382558922558926,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.743370370370371,
+          "name": "Basic",
+          "samples": 297
+        },
+        {
+          "DRAM Power_0": 0.7381237458193982,
+          "GT Power_0": 0.11342474916387953,
+          "IA Power_0": 5.530083612040135,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.970652173913043,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7369498327759205,
+          "GT Power_0": 0.1150969899665552,
+          "IA Power_0": 5.603688963210705,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.038548494983277,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7975484949832782,
+          "GT Power_0": 0.22931103678929754,
+          "IA Power_0": 5.659505016722412,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.228200668896318,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7482775919732443,
+          "GT Power_0": 0.11841137123745822,
+          "IA Power_0": 5.761006688963208,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.223123745819399,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD127-A9",
+      "number": 4216,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6231818181818187,
+          "GT Power_0": 0.026020202020201996,
+          "IA Power_0": 3.9774478114478127,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.3066531986531995,
+          "name": "Basic",
+          "samples": 297
+        },
+        {
+          "DRAM Power_0": 0.7387123745819405,
+          "GT Power_0": 0.09605685618729104,
+          "IA Power_0": 5.52646822742475,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.930063545150506,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7430234113712375,
+          "GT Power_0": 0.09955852842809362,
+          "IA Power_0": 5.596745819397996,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.030872909698996,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8030869565217393,
+          "GT Power_0": 0.20792307692307704,
+          "IA Power_0": 5.70466889632107,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.2815317725752555,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7598127090301007,
+          "GT Power_0": 0.09978595317725761,
+          "IA Power_0": 5.636200668896323,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.112518394648826,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD160-A9",
+      "number": 4215,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6080869565217385,
+          "GT Power_0": 0.033846153846153804,
+          "IA Power_0": 3.4920936454849483,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.865729096989966,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7391103678929768,
+          "GT Power_0": 0.1362408026755852,
+          "IA Power_0": 5.703769230769228,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.123117056856189,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7369030100334455,
+          "GT Power_0": 0.13197658862876244,
+          "IA Power_0": 5.581943143812712,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.021769230769231,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8148929765886291,
+          "GT Power_0": 0.25621070234113696,
+          "IA Power_0": 5.649494983277595,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.454929765886286,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7416555183946489,
+          "GT Power_0": 0.14218060200668897,
+          "IA Power_0": 5.6538628762541805,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.098889632107021,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD181-A9",
+      "number": 4214,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6057617449664433,
+          "GT Power_0": 0.027510067114093914,
+          "IA Power_0": 3.821697986577178,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.184416107382552,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7402709030100341,
+          "GT Power_0": 0.11826421404682273,
+          "IA Power_0": 6.9039030100334475,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.319545150501672,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7431237458193982,
+          "GT Power_0": 0.11909698996655516,
+          "IA Power_0": 6.877521739130439,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.307591973244146,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7991404682274247,
+          "GT Power_0": 0.2397859531772575,
+          "IA Power_0": 7.075642140468229,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.636103678929763,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7615752508361204,
+          "GT Power_0": 0.12990635451505017,
+          "IA Power_0": 7.140354515050167,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.823916387959862,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD173-A9",
+      "number": 4213,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5998929765886292,
+          "GT Power_0": 0.015030100334448168,
+          "IA Power_0": 3.945765886287625,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.242220735785953,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7503478260869565,
+          "GT Power_0": 0.13435785953177254,
+          "IA Power_0": 6.952237458193977,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.473919732441471,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7366521739130439,
+          "GT Power_0": 0.13295652173913047,
+          "IA Power_0": 7.0467391304347835,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.4854816053511675,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.805642140468227,
+          "GT Power_0": 0.26529431438127105,
+          "IA Power_0": 7.211461538461539,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.850899665551842,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7438127090301007,
+          "GT Power_0": 0.13947157190635448,
+          "IA Power_0": 7.186478260869567,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.635294314381268,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD168-A9",
+      "number": 4212,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6109866220735787,
+          "GT Power_0": 0.010153846153846156,
+          "IA Power_0": 3.683886287625418,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.1876120401337795,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7377123745819406,
+          "GT Power_0": 0.1324648829431438,
+          "IA Power_0": 6.729498327759199,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.164304347826086,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7375551839464884,
+          "GT Power_0": 0.13127090301003344,
+          "IA Power_0": 6.699705685618725,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.15336120401338,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7965317725752512,
+          "GT Power_0": 0.2628528428093648,
+          "IA Power_0": 6.822190635451505,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.445913043478264,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7497993311036794,
+          "GT Power_0": 0.139505016722408,
+          "IA Power_0": 6.764521739130435,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.268973244147159,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD175-A9",
+      "number": 4211,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6068255033557051,
+          "GT Power_0": 0.028694630872483216,
+          "IA Power_0": 3.589973154362416,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.901171140939595,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7389197324414715,
+          "GT Power_0": 0.10466889632107028,
+          "IA Power_0": 6.466397993311034,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.886244147157191,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7417147651006712,
+          "GT Power_0": 0.10159060402684571,
+          "IA Power_0": 6.795644295302007,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.199127516778521,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.8033779264214046,
+          "GT Power_0": 0.22812040133779277,
+          "IA Power_0": 6.511000000000001,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.159424749163878,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.743946488294314,
+          "GT Power_0": 0.10903678929765882,
+          "IA Power_0": 6.6320668896321076,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.059314381270903,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD125-A9",
+      "number": 4210,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6029431438127089,
+          "GT Power_0": 0.03685284280936452,
+          "IA Power_0": 4.678404682274247,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.981966555183947,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7434214046822746,
+          "GT Power_0": 0.11853846153846158,
+          "IA Power_0": 8.06324080267558,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.54405685618729,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7372408026755858,
+          "GT Power_0": 0.11937792642140478,
+          "IA Power_0": 8.02827424749164,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.42642474916388,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8022140468227416,
+          "GT Power_0": 0.24414381270903,
+          "IA Power_0": 8.52675585284281,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 9.140351170568561,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7522642140468222,
+          "GT Power_0": 0.1258428093645485,
+          "IA Power_0": 8.383010033444819,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.833896321070227,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD173-A9",
+      "number": 4209,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6073120805369127,
+          "GT Power_0": 0.03615436241610734,
+          "IA Power_0": 3.9381476510067093,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.318986577181209,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7383277591973253,
+          "GT Power_0": 0.14470903010033445,
+          "IA Power_0": 7.010769230769228,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.456782608695649,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7436321070234113,
+          "GT Power_0": 0.1408896321070236,
+          "IA Power_0": 7.115317725752507,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.633401337792639,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7982408026755852,
+          "GT Power_0": 0.269916387959866,
+          "IA Power_0": 7.252050167224081,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.852284280936454,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7430066889632104,
+          "GT Power_0": 0.14155518394648822,
+          "IA Power_0": 7.36077257525084,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.80526755852843,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD144-A9",
+      "number": 4208,
+      "tests": [
+        {
+          "DRAM Power_0": 0.601010067114094,
+          "GT Power_0": 0.026704697986577153,
+          "IA Power_0": 3.6286610738255014,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.929617449664429,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.740103678929766,
+          "GT Power_0": 0.11371237458193985,
+          "IA Power_0": 6.7315719063545165,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.156484949832773,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7362508361204017,
+          "GT Power_0": 0.11486287625418068,
+          "IA Power_0": 6.907317725752511,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.342769230769227,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.799250836120401,
+          "GT Power_0": 0.23802341137123745,
+          "IA Power_0": 7.0456020066889575,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.606869565217387,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7442675585284275,
+          "GT Power_0": 0.12219732441471584,
+          "IA Power_0": 7.068204013377928,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.4914046822742435,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD179-A9",
+      "number": 4207,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6037792642140465,
+          "GT Power_0": 0.03335117056856183,
+          "IA Power_0": 3.892321070234115,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.219387959866219,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.741013377926422,
+          "GT Power_0": 0.14565886287625424,
+          "IA Power_0": 6.547923076923081,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.023227424749157,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7370033444816056,
+          "GT Power_0": 0.14360200668896314,
+          "IA Power_0": 6.821444816053519,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.271468227424751,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7986789297658863,
+          "GT Power_0": 0.28615050167224115,
+          "IA Power_0": 6.962618729096988,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.579016722408029,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7534180602006686,
+          "GT Power_0": 0.16979598662207368,
+          "IA Power_0": 6.9608896321070235,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.431244147157193,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD157-A9",
+      "number": 4206,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6024949832775922,
+          "GT Power_0": 0.02600668896321068,
+          "IA Power_0": 3.894183946488295,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.258444816053516,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7432516778523492,
+          "GT Power_0": 0.13247651006711414,
+          "IA Power_0": 7.00352348993288,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.422228187919462,
+          "name": "Video_720_MP4",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7354147157190639,
+          "GT Power_0": 0.12760200668896324,
+          "IA Power_0": 6.712939799331099,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.143408026755851,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7974515050167219,
+          "GT Power_0": 0.2522073578595317,
+          "IA Power_0": 6.773501672240801,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.365632107023413,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7431371237458192,
+          "GT Power_0": 0.14048829431438117,
+          "IA Power_0": 6.855979933110366,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.273976588628764,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD130-A9",
+      "number": 4205,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6020635451505016,
+          "GT Power_0": 0.015474916387959857,
+          "IA Power_0": 4.145364548494983,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.422571906354515,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.74658,
+          "GT Power_0": 0.12880333333333327,
+          "IA Power_0": 7.568616666666667,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.072713333333327,
+          "name": "Video_720_MP4",
+          "samples": 300
+        },
+        {
+          "DRAM Power_0": 0.7380702341137124,
+          "GT Power_0": 0.12795986622073582,
+          "IA Power_0": 7.419953177257523,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.847224080267562,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7962374581939804,
+          "GT Power_0": 0.2511505016722407,
+          "IA Power_0": 7.561394648829431,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.129685618729095,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7439698996655526,
+          "GT Power_0": 0.13818060200668897,
+          "IA Power_0": 7.650297658862865,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.103491638795985,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD181-A9",
+      "number": 4204,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6045436241610737,
+          "GT Power_0": 0.033080536912751646,
+          "IA Power_0": 3.9569328859060384,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.310114093959731,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7378762541806023,
+          "GT Power_0": 0.12137458193979934,
+          "IA Power_0": 6.965678929765886,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.39692642140468,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7369999999999998,
+          "GT Power_0": 0.11716387959866224,
+          "IA Power_0": 6.740872909698997,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.1695752508361235,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7959732441471572,
+          "GT Power_0": 0.2384949832775919,
+          "IA Power_0": 6.901100334448161,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.47554849498328,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7480668896321071,
+          "GT Power_0": 0.12295652173913049,
+          "IA Power_0": 7.083441471571905,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.5308026755852815,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD172-A9",
+      "number": 4203,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6018829431438122,
+          "GT Power_0": 0.014595317725752505,
+          "IA Power_0": 3.07331772575251,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.3758327759197324,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7387290969899668,
+          "GT Power_0": 0.11909364548494979,
+          "IA Power_0": 5.531147157190635,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.94942474916388,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7436889632107024,
+          "GT Power_0": 0.11538127090301004,
+          "IA Power_0": 5.661913043478266,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.095140468227428,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8043779264214043,
+          "GT Power_0": 0.23188963210702343,
+          "IA Power_0": 5.634809364548489,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.231993311036787,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7504080267558537,
+          "GT Power_0": 0.12427090301003346,
+          "IA Power_0": 5.623438127090296,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.124133779264214,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD158-A9",
+      "number": 4202,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6089197324414714,
+          "GT Power_0": 0.01409364548494983,
+          "IA Power_0": 3.8713645484949835,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.2299063545150535,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7368662207357857,
+          "GT Power_0": 0.14525083612040135,
+          "IA Power_0": 7.065688963210704,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.528615384615386,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7365250836120404,
+          "GT Power_0": 0.1456555183946488,
+          "IA Power_0": 7.258806020066895,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.693752508361209,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7973210702341138,
+          "GT Power_0": 0.28428428093645497,
+          "IA Power_0": 7.445715719063546,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.057150501672234,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7489799331103679,
+          "GT Power_0": 0.1590635451505016,
+          "IA Power_0": 7.348923076923071,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.881344481605356,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD162-A9",
+      "number": 4201,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6071040268456378,
+          "GT Power_0": 0.03604697986577179,
+          "IA Power_0": 3.545355704697986,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.861416107382549,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7395551839464882,
+          "GT Power_0": 0.13468227424749163,
+          "IA Power_0": 5.699314381270906,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.158983277591975,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7459464882943146,
+          "GT Power_0": 0.13585618729096993,
+          "IA Power_0": 5.630602006688962,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.12189632107024,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.797180602006689,
+          "GT Power_0": 0.2607090301003346,
+          "IA Power_0": 5.741668896321068,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.309986622073581,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7437458193979924,
+          "GT Power_0": 0.14294983277591966,
+          "IA Power_0": 5.6835150501672285,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.153170568561873,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD127-A9",
+      "number": 4200,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6022207357859529,
+          "GT Power_0": 0.0319498327759197,
+          "IA Power_0": 3.145237458193979,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.453739130434784,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7396321070234115,
+          "GT Power_0": 0.09615384615384619,
+          "IA Power_0": 5.601826086956522,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.982016722408027,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7411638795986618,
+          "GT Power_0": 0.09371237458193984,
+          "IA Power_0": 5.620709030100333,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.011458193979937,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7975953177257525,
+          "GT Power_0": 0.20987959866220743,
+          "IA Power_0": 5.527973244147164,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.075852842809363,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7440501672240807,
+          "GT Power_0": 0.10274247491638801,
+          "IA Power_0": 5.5011438127090315,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.050033444816058,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD159-A9",
+      "number": 4199,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6077986577181208,
+          "GT Power_0": 0.03306040268456373,
+          "IA Power_0": 3.458731543624159,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.8388657718120798,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7405785953177262,
+          "GT Power_0": 0.13154515050167223,
+          "IA Power_0": 5.831675585284276,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.281424749163881,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7405016722408023,
+          "GT Power_0": 0.12835785953177262,
+          "IA Power_0": 5.885471571906352,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.341508361204017,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7972408026755853,
+          "GT Power_0": 0.2526321070234114,
+          "IA Power_0": 5.931227424749163,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.5321638795986585,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8057046979865772,
+          "GT Power_0": 0.1368355704697987,
+          "IA Power_0": 7.769130872483219,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.210912751677858,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 298
+        }
+      ]
+    },
+    {
+      "bot": "BUILD129-A9",
+      "number": 4198,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6041946308724835,
+          "GT Power_0": 0.03007718120805367,
+          "IA Power_0": 4.240359060402684,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.587000000000008,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7398628762541803,
+          "GT Power_0": 0.0977224080267559,
+          "IA Power_0": 6.130561872909703,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.541762541806017,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.743872909698997,
+          "GT Power_0": 0.09527759197324417,
+          "IA Power_0": 6.268906354515046,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.758458193979935,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7976120401337791,
+          "GT Power_0": 0.20905685618729122,
+          "IA Power_0": 6.390852842809363,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.934046822742469,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.745625418060201,
+          "GT Power_0": 0.0996521739130435,
+          "IA Power_0": 6.325130434782609,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.7430434782608675,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD169-A9",
+      "number": 4197,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6032642140468228,
+          "GT Power_0": 0.014879598662207349,
+          "IA Power_0": 3.688408026755852,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.9921906354515064,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7393979933110366,
+          "GT Power_0": 0.12306354515050169,
+          "IA Power_0": 6.561327759197322,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.016715719063545,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7372240802675586,
+          "GT Power_0": 0.12115384615384614,
+          "IA Power_0": 6.628551839464886,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.0680100334448195,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8039464882943147,
+          "GT Power_0": 0.2494615384615385,
+          "IA Power_0": 6.863371237458194,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.513481605351175,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7445183946488301,
+          "GT Power_0": 0.1277558528428094,
+          "IA Power_0": 6.776448160535116,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.215160535117047,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD178-A9",
+      "number": 4196,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6102642140468222,
+          "GT Power_0": 0.013408026755852839,
+          "IA Power_0": 3.665351170568562,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.0080501672240745,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7579230769230773,
+          "GT Power_0": 0.10660869565217389,
+          "IA Power_0": 7.0421973244147145,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.503936454849495,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7380702341137124,
+          "GT Power_0": 0.1047056856187291,
+          "IA Power_0": 6.664799331103675,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.056662207357864,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8009060402684566,
+          "GT Power_0": 0.21894966442953015,
+          "IA Power_0": 6.955402684563757,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.497986577181202,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7439698996655516,
+          "GT Power_0": 0.11053846153846157,
+          "IA Power_0": 6.763899665551839,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.204795986622079,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD139-A9",
+      "number": 4195,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6011505016722405,
+          "GT Power_0": 0.016515050167224075,
+          "IA Power_0": 3.5623678929765883,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.8638361204013325,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7362307692307702,
+          "GT Power_0": 0.13366889632107026,
+          "IA Power_0": 6.625244147157189,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.073625418060202,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7404615384615387,
+          "GT Power_0": 0.13704682274247487,
+          "IA Power_0": 6.734588628762544,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.243769230769232,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8007190635451498,
+          "GT Power_0": 0.29015384615384604,
+          "IA Power_0": 6.938471571906356,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.5654715719063566,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7410267558528428,
+          "GT Power_0": 0.14433110367892973,
+          "IA Power_0": 6.768936454849499,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.22242809364548,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD126-A9",
+      "number": 4194,
+      "tests": [
+        {
+          "DRAM Power_0": 0.613771812080537,
+          "GT Power_0": 0.031093959731543584,
+          "IA Power_0": 3.9193859060402705,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.328520134228186,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.738394648829432,
+          "GT Power_0": 0.1184247491638796,
+          "IA Power_0": 6.421816053511705,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.850565217391303,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7451103678929772,
+          "GT Power_0": 0.11718729096989977,
+          "IA Power_0": 6.2886220735785985,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.784605351170569,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8004530201342273,
+          "GT Power_0": 0.24044966442952995,
+          "IA Power_0": 6.8606946308724845,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.423882550335572,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.750979933110368,
+          "GT Power_0": 0.12583277591973244,
+          "IA Power_0": 6.564107023411373,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.092999999999995,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD180-A9",
+      "number": 4193,
+      "tests": [
+        {
+          "DRAM Power_0": 0.606153846153846,
+          "GT Power_0": 0.0326755852842809,
+          "IA Power_0": 4.193063545150501,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.535140468227425,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7400033557046988,
+          "GT Power_0": 0.14026510067114098,
+          "IA Power_0": 7.143661073825507,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.6475369127516775,
+          "name": "Video_720_MP4",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7438060200668896,
+          "GT Power_0": 0.1358729096989966,
+          "IA Power_0": 7.2678862876254176,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.797428093645485,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8079130434782602,
+          "GT Power_0": 0.31293979933110366,
+          "IA Power_0": 7.452334448160541,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.166267558528425,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7502006688963209,
+          "GT Power_0": 0.1535652173913044,
+          "IA Power_0": 7.331672240802674,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.872879598662215,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD128-A9",
+      "number": 4192,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6059063545150498,
+          "GT Power_0": 0.030969899665551814,
+          "IA Power_0": 3.8334180602006698,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.177418060200667,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7414314381270906,
+          "GT Power_0": 0.1155852842809364,
+          "IA Power_0": 6.832418060200666,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.2553143812709,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7383946488294315,
+          "GT Power_0": 0.11314381270902997,
+          "IA Power_0": 6.886424749163876,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.3307424749163825,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7976053511705686,
+          "GT Power_0": 0.23370903010033436,
+          "IA Power_0": 7.005448160535115,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.567214046822749,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7433812709030103,
+          "GT Power_0": 0.11733110367892982,
+          "IA Power_0": 7.125712374581942,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.516719063545145,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD160-A9",
+      "number": 4191,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6130234113712375,
+          "GT Power_0": 0.03608695652173911,
+          "IA Power_0": 3.4239264214046825,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.799581939799331,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7378829431438129,
+          "GT Power_0": 0.1273612040133779,
+          "IA Power_0": 5.597090301003346,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.03649498327759,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7373076923076922,
+          "GT Power_0": 0.1287357859531773,
+          "IA Power_0": 5.554401337792642,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.005849498327764,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7978896321070237,
+          "GT Power_0": 0.24838795986622073,
+          "IA Power_0": 5.733096989966554,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.324357859531775,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7432274247491635,
+          "GT Power_0": 0.13512040133779268,
+          "IA Power_0": 5.630588628762543,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.08991638795987,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD164-A9",
+      "number": 4190,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6193724832214769,
+          "GT Power_0": 0.024355704697986556,
+          "IA Power_0": 4.587842281879191,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.92740268456376,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7556622073578594,
+          "GT Power_0": 0.14012374581939796,
+          "IA Power_0": 7.5815585284281015,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.006899665551833,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7395418060200664,
+          "GT Power_0": 0.13854180602006702,
+          "IA Power_0": 6.656923076923082,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.076826086956523,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.808371237458194,
+          "GT Power_0": 0.2704247491638796,
+          "IA Power_0": 6.829046822742471,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.5970936454849465,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7568294314381271,
+          "GT Power_0": 0.14230434782608706,
+          "IA Power_0": 6.841307692307695,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.309903010033444,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD136-A9",
+      "number": 4189,
+      "tests": [
+        {
+          "DRAM Power_0": 0.606852842809365,
+          "GT Power_0": 0.03652842809364544,
+          "IA Power_0": 3.3872943143812746,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.763989966555184,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7385451505016722,
+          "GT Power_0": 0.11407357859531776,
+          "IA Power_0": 5.725775919732438,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.163290969899666,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7407491638795989,
+          "GT Power_0": 0.1147257525083612,
+          "IA Power_0": 5.625662207357856,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.05073578595318,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7965250836120398,
+          "GT Power_0": 0.2241304347826088,
+          "IA Power_0": 5.763090301003348,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.323170568561876,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7526020066889625,
+          "GT Power_0": 0.11893311036789303,
+          "IA Power_0": 5.694725752508363,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.192341137123743,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD123-A9",
+      "number": 4188,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6053657718120808,
+          "GT Power_0": 0.030265100671140924,
+          "IA Power_0": 3.821241610738256,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.134939597315436,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7476755852842808,
+          "GT Power_0": 0.11929765886287623,
+          "IA Power_0": 6.612588628762545,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.0776789297658915,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7379331103678934,
+          "GT Power_0": 0.12024749163879599,
+          "IA Power_0": 6.503545150501674,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.944842809364549,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.796377926421404,
+          "GT Power_0": 0.24661204013377902,
+          "IA Power_0": 6.738635451505016,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.300842809364548,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7470334448160537,
+          "GT Power_0": 0.1244147157190636,
+          "IA Power_0": 6.6401906354515,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.069906354515047,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD176-A9",
+      "number": 4187,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6013590604026846,
+          "GT Power_0": 0.02638926174496642,
+          "IA Power_0": 3.2458456375838933,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.5549530201342274,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7390936454849505,
+          "GT Power_0": 0.12129096989966555,
+          "IA Power_0": 5.775150501672242,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.215645484949831,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7381404682274246,
+          "GT Power_0": 0.12334782608695657,
+          "IA Power_0": 5.783926421404683,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.217732441471575,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8035785953177259,
+          "GT Power_0": 0.2455384615384613,
+          "IA Power_0": 5.910678929765889,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.520026755852845,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.743598662207358,
+          "GT Power_0": 0.12961204013377922,
+          "IA Power_0": 5.886311036789305,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.303488294314377,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD180-A9",
+      "number": 4186,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6081471571906353,
+          "GT Power_0": 0.015451505016722406,
+          "IA Power_0": 3.9454280936454857,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.251675585284281,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7350836120401343,
+          "GT Power_0": 0.13668896321070229,
+          "IA Power_0": 7.041033444816051,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.475862876254187,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7363344481605355,
+          "GT Power_0": 0.13466555183946488,
+          "IA Power_0": 6.961080267558526,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.3768762541805994,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8018628762541803,
+          "GT Power_0": 0.2708394648829432,
+          "IA Power_0": 7.291812709030099,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.984210702341137,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.745933110367893,
+          "GT Power_0": 0.14267224080267557,
+          "IA Power_0": 7.589016722408027,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.059705685618738,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD128-A9",
+      "number": 4185,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6033444816053511,
+          "GT Power_0": 0.025698996655518357,
+          "IA Power_0": 3.9065451505016737,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.195869565217391,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7535451505016726,
+          "GT Power_0": 0.10691304347826085,
+          "IA Power_0": 7.403381270903014,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.807943143812716,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.760247491638796,
+          "GT Power_0": 0.12635785953177264,
+          "IA Power_0": 7.07252508361204,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.518799331103681,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8060635451505014,
+          "GT Power_0": 0.23295986622073556,
+          "IA Power_0": 7.255117056856189,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.906093645484948,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7422608695652178,
+          "GT Power_0": 0.11597658862876253,
+          "IA Power_0": 6.99107357859531,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.431227424749157,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD127-A9",
+      "number": 4184,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6069966442953021,
+          "GT Power_0": 0.030382550335570434,
+          "IA Power_0": 3.420895973154364,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.7399060402684556,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7394782608695663,
+          "GT Power_0": 0.0981304347826087,
+          "IA Power_0": 5.671056856187291,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.086515050167224,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7371906354515053,
+          "GT Power_0": 0.10030100334448158,
+          "IA Power_0": 5.568906354515049,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.975478260869565,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7971571906354513,
+          "GT Power_0": 0.21352842809364556,
+          "IA Power_0": 5.608464882943146,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.164090301003346,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7481170568561872,
+          "GT Power_0": 0.1061438127090301,
+          "IA Power_0": 5.512063545150499,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.960692307692311,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD142-A9",
+      "number": 4183,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6019565217391306,
+          "GT Power_0": 0.016401337792642134,
+          "IA Power_0": 3.685304347826087,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.9664314381270933,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7381571906354516,
+          "GT Power_0": 0.13930434782608692,
+          "IA Power_0": 6.673030100334448,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.127591973244149,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7371471571906358,
+          "GT Power_0": 0.13640133779264219,
+          "IA Power_0": 6.771244147157191,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.234187290969905,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7970802675585282,
+          "GT Power_0": 0.27305685618729103,
+          "IA Power_0": 7.0084448160535135,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.614515050167234,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.748752508361204,
+          "GT Power_0": 0.14617391304347824,
+          "IA Power_0": 7.110806020066889,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.5838762541806055,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD148-A9",
+      "number": 4182,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6034194630872486,
+          "GT Power_0": 0.036852348993288556,
+          "IA Power_0": 3.596466442953018,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.9189731543624164,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7360702341137132,
+          "GT Power_0": 0.15412709030100333,
+          "IA Power_0": 6.085478260869563,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.554143812709037,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7400301003344479,
+          "GT Power_0": 0.1490468227424749,
+          "IA Power_0": 5.903254180602007,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.430377926421403,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7901739130434778,
+          "GT Power_0": 0.32511371237458203,
+          "IA Power_0": 6.179301003344479,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.827729096989963,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7418963210702345,
+          "GT Power_0": 0.1614247491638796,
+          "IA Power_0": 6.2882140468227385,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.757642140468224,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD129-A9",
+      "number": 4181,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5989362416107387,
+          "GT Power_0": 0.025630872483221434,
+          "IA Power_0": 3.33060067114094,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.6613020134228194,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7385050167224081,
+          "GT Power_0": 0.09742474916387968,
+          "IA Power_0": 6.185083612040135,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.586836120401337,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7458093645484956,
+          "GT Power_0": 0.09552173913043475,
+          "IA Power_0": 6.003046822742478,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.455575250836121,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7967692307692316,
+          "GT Power_0": 0.20741471571906375,
+          "IA Power_0": 6.159277591973245,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.700745819397999,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7455217391304357,
+          "GT Power_0": 0.10010367892976592,
+          "IA Power_0": 6.174812709030097,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.587983277591973,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD126-A9",
+      "number": 4180,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6023612040133776,
+          "GT Power_0": 0.03242140468227423,
+          "IA Power_0": 3.7393745819397974,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.040364548494986,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7391438127090305,
+          "GT Power_0": 0.11626421404682273,
+          "IA Power_0": 6.484839464882943,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.905658862876256,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7374548494983283,
+          "GT Power_0": 0.11576254180602004,
+          "IA Power_0": 6.423819397993313,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.823227424749166,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.795458193979933,
+          "GT Power_0": 0.23653511705685606,
+          "IA Power_0": 6.438030100334448,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.9601204013377895,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.749484949832776,
+          "GT Power_0": 0.1205484949832776,
+          "IA Power_0": 6.305742474916392,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.79201337792642,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD127-A9",
+      "number": 4179,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6068087248322149,
+          "GT Power_0": 0.032738255033557,
+          "IA Power_0": 3.1334328859060423,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.4774127516778526,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7473444816053516,
+          "GT Power_0": 0.0969096989966555,
+          "IA Power_0": 5.4411739130434755,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.910431438127094,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7370301003344488,
+          "GT Power_0": 0.09591638795986628,
+          "IA Power_0": 5.485003344481605,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.867822742474915,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.796120401337792,
+          "GT Power_0": 0.20856521739130443,
+          "IA Power_0": 5.5088227424749165,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.060327759197323,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7427357859531776,
+          "GT Power_0": 0.11113712374581941,
+          "IA Power_0": 5.6653177257525105,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.056046822742472,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD151-A9",
+      "number": 4178,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6094113712374584,
+          "GT Power_0": 0.023525083612040112,
+          "IA Power_0": 5.040712374581943,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.39696321070234,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7387424749163878,
+          "GT Power_0": 0.11462876254180605,
+          "IA Power_0": 7.767678929765885,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.226043478260866,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7409030100334453,
+          "GT Power_0": 0.11655183946488296,
+          "IA Power_0": 8.077709030100333,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.622842809364546,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7981270903010032,
+          "GT Power_0": 0.23673578595317724,
+          "IA Power_0": 8.075367892976592,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.692571906354518,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7403377926421404,
+          "GT Power_0": 0.12325083612040133,
+          "IA Power_0": 8.112571906354516,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.601381270903016,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD121-A9",
+      "number": 4177,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6027080536912751,
+          "GT Power_0": 0.03224832214765097,
+          "IA Power_0": 3.895822147651008,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.234909395973154,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7377725752508362,
+          "GT Power_0": 0.1363578595317725,
+          "IA Power_0": 7.034023411371241,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.478438127090299,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7376722408026759,
+          "GT Power_0": 0.13197658862876252,
+          "IA Power_0": 7.101240802675589,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.528304347826095,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7981705685618724,
+          "GT Power_0": 0.2709030100334451,
+          "IA Power_0": 7.14784949832776,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.766879598662207,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7437859531772579,
+          "GT Power_0": 0.14055518394648825,
+          "IA Power_0": 7.367535117056855,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.7963712374581915,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD128-A9",
+      "number": 4176,
+      "tests": [
+        {
+          "DRAM Power_0": 0.607792642140468,
+          "GT Power_0": 0.03323745819397992,
+          "IA Power_0": 4.022829431438121,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.37218060200669,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7457859531772575,
+          "GT Power_0": 0.11558862876254183,
+          "IA Power_0": 6.920913043478256,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.486551839464884,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7514381270903011,
+          "GT Power_0": 0.11514715719063544,
+          "IA Power_0": 6.705247491638797,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.269856187290969,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7974682274247492,
+          "GT Power_0": 0.2333545150501671,
+          "IA Power_0": 6.885585284280933,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.455538461538462,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7518494983277589,
+          "GT Power_0": 0.11900000000000001,
+          "IA Power_0": 6.865454849498326,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.33557525083612,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD119-A9",
+      "number": 4175,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6025167785234898,
+          "GT Power_0": 0.03251677852348988,
+          "IA Power_0": 4.010312080536911,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.338476510067112,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7426287625418061,
+          "GT Power_0": 0.12241471571906347,
+          "IA Power_0": 7.324916387959867,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.770494983277594,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7378662207357858,
+          "GT Power_0": 0.11775585284280943,
+          "IA Power_0": 7.242110367892975,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.639484949832775,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7983478260869562,
+          "GT Power_0": 0.23850167224080276,
+          "IA Power_0": 7.441612040133775,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.996598662207349,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7513043478260871,
+          "GT Power_0": 0.12491973244147155,
+          "IA Power_0": 7.18786287625418,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.646739130434775,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD21-B1",
+      "number": 4174,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5978489932885905,
+          "GT Power_0": 0.03182885906040265,
+          "IA Power_0": 3.4909496644295284,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.9913724832214745,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7406521739130434,
+          "GT Power_0": 0.13491304347826083,
+          "IA Power_0": 6.2357224080267555,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.828,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7461270903010037,
+          "GT Power_0": 0.12412709030100336,
+          "IA Power_0": 6.156177257525081,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.8531705685618665,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.803859531772575,
+          "GT Power_0": 0.2522541806020066,
+          "IA Power_0": 6.442826086956523,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.23458528428094,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7451036789297666,
+          "GT Power_0": 0.13721070234113708,
+          "IA Power_0": 6.159498327759196,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.76807692307692,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD136-A9",
+      "number": 4173,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6008963210702343,
+          "GT Power_0": 0.026913043478260807,
+          "IA Power_0": 3.168076923076926,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.486204013377924,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7372909698996655,
+          "GT Power_0": 0.10935451505016729,
+          "IA Power_0": 5.619518394648827,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.040615384615383,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7373645484949835,
+          "GT Power_0": 0.107314381270903,
+          "IA Power_0": 5.579093645484952,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.003515050167229,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8032040133779264,
+          "GT Power_0": 0.22004013377926437,
+          "IA Power_0": 5.853421404682273,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.490193979933106,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7562541806020076,
+          "GT Power_0": 0.11551839464882946,
+          "IA Power_0": 5.830929765886285,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.454561872909696,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD132-A9",
+      "number": 4172,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6070802675585281,
+          "GT Power_0": 0.033050167224080225,
+          "IA Power_0": 3.9110802675585306,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.2443311036789275,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7462006688963213,
+          "GT Power_0": 0.12178595317725756,
+          "IA Power_0": 6.879441471571914,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.40321739130435,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7373043478260864,
+          "GT Power_0": 0.11823411371237458,
+          "IA Power_0": 6.826712374581943,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.254010033444818,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7981605351170569,
+          "GT Power_0": 0.23567558528428098,
+          "IA Power_0": 7.080083612040134,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.633006688963207,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7436454849498331,
+          "GT Power_0": 0.12444481605351176,
+          "IA Power_0": 7.006976588628762,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.447849498327758,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD158-A9",
+      "number": 4171,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6018187919463087,
+          "GT Power_0": 0.03151006711409394,
+          "IA Power_0": 3.9918791946308714,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.304536912751677,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7357491638795999,
+          "GT Power_0": 0.14761872909699003,
+          "IA Power_0": 7.08502341137123,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.5448896321070285,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7357993311036787,
+          "GT Power_0": 0.14554515050167238,
+          "IA Power_0": 7.156759197324412,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.601040133779266,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8161839464882942,
+          "GT Power_0": 0.29171906354515076,
+          "IA Power_0": 7.469959866220737,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.211478260869564,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7432675585284284,
+          "GT Power_0": 0.1569632107023411,
+          "IA Power_0": 7.39515719063545,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.86863545150502,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD157-A9",
+      "number": 4170,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5956241610738253,
+          "GT Power_0": 0.02871140939597314,
+          "IA Power_0": 3.574895973154363,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.8734362416107433,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7477123745819398,
+          "GT Power_0": 0.12805685618729093,
+          "IA Power_0": 6.660996655518395,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.156200668896323,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7360702341137125,
+          "GT Power_0": 0.1253010033444816,
+          "IA Power_0": 6.7364381270903015,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.127903010033448,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7999096989966561,
+          "GT Power_0": 0.2550501672240802,
+          "IA Power_0": 6.99569899665552,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.605856187290968,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7538929765886284,
+          "GT Power_0": 0.13707692307692318,
+          "IA Power_0": 6.98740468227425,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.514324414715719,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD142-A9",
+      "number": 4169,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5908724832214761,
+          "GT Power_0": 0.03386241610738252,
+          "IA Power_0": 4.464731543624163,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.8063221476510085,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7090735785953177,
+          "GT Power_0": 0.13578260869565217,
+          "IA Power_0": 7.311096989966554,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.745585284280933,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7066421404682275,
+          "GT Power_0": 0.13267558528428103,
+          "IA Power_0": 7.286668896321069,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.703866220735789,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7764749163879598,
+          "GT Power_0": 0.2682909698996655,
+          "IA Power_0": 7.593451505016718,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.267591973244143,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7289096989966553,
+          "GT Power_0": 0.14066889632107016,
+          "IA Power_0": 8.033454849498336,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.47778595317726,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD118-A9",
+      "number": 4168,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5990033557046976,
+          "GT Power_0": 0.02625167785234897,
+          "IA Power_0": 3.284258389261745,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.6308355704697988,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7391505016722412,
+          "GT Power_0": 0.1122173913043478,
+          "IA Power_0": 6.090046822742474,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.519986622073578,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7451404682274254,
+          "GT Power_0": 0.11207357859531769,
+          "IA Power_0": 6.335943143812709,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.837023411371234,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8761812080536916,
+          "GT Power_0": 0.2436442953020136,
+          "IA Power_0": 8.302969798657713,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 9.023983221476517,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.750053511705686,
+          "GT Power_0": 0.1165117056856188,
+          "IA Power_0": 6.350090301003339,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.84467892976589,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD182-A9",
+      "number": 4167,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6051912751677849,
+          "GT Power_0": 0.029822147651006665,
+          "IA Power_0": 3.4785805369127516,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.8084496644295274,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7382274247491639,
+          "GT Power_0": 0.09296989966555189,
+          "IA Power_0": 6.007107023411373,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.4186354515050175,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.788605351170569,
+          "GT Power_0": 0.08740133779264216,
+          "IA Power_0": 7.860204013377927,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.283518394648825,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8355551839464882,
+          "GT Power_0": 0.19857525083612035,
+          "IA Power_0": 9.345906354515044,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 9.920511705685625,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7461471571906357,
+          "GT Power_0": 0.09706354515050167,
+          "IA Power_0": 5.943872909698993,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.368030100334443,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD169-A9",
+      "number": 4166,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6014515050167228,
+          "GT Power_0": 0.014521739130434782,
+          "IA Power_0": 3.4382943143812716,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.7497190635451503,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7489264214046825,
+          "GT Power_0": 0.1288227424749163,
+          "IA Power_0": 6.250816053511705,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.767829431438126,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7368494983277593,
+          "GT Power_0": 0.12597993311036787,
+          "IA Power_0": 6.272327759197321,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.718735785953178,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7965050167224085,
+          "GT Power_0": 0.2521973244147157,
+          "IA Power_0": 6.4895083612040105,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.091200668896322,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7590367892976593,
+          "GT Power_0": 0.13941137123745823,
+          "IA Power_0": 6.53985618729097,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.194652173913044,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD177-A9",
+      "number": 4165,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6067491638795989,
+          "GT Power_0": 0.013819397993311026,
+          "IA Power_0": 4.216311036789298,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.5178494983277595,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7426789297658867,
+          "GT Power_0": 0.1221003344481606,
+          "IA Power_0": 7.047010033444816,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.518040133779265,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7386789297658864,
+          "GT Power_0": 0.12001003344481613,
+          "IA Power_0": 7.070943143812709,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.496856187290968,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.810906040268456,
+          "GT Power_0": 0.24282550335570474,
+          "IA Power_0": 7.637942953020142,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.269738255033552,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7467725752508361,
+          "GT Power_0": 0.13163879598662204,
+          "IA Power_0": 7.264695652173909,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.725441471571905,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD172-A9",
+      "number": 4164,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6078691275167784,
+          "GT Power_0": 0.034016778523489916,
+          "IA Power_0": 3.3649026845637575,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.7226778523489923,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.740903010033445,
+          "GT Power_0": 0.11609698996655521,
+          "IA Power_0": 5.617916387959867,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.057244147157189,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.737448160535117,
+          "GT Power_0": 0.11171906354515054,
+          "IA Power_0": 5.541929765886287,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.985230769230768,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7977926421404686,
+          "GT Power_0": 0.2301237458193979,
+          "IA Power_0": 5.586100334448156,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.166481605351167,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7421633333333334,
+          "GT Power_0": 0.11810000000000005,
+          "IA Power_0": 5.519480000000003,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.942616666666664,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 300
+        }
+      ]
+    },
+    {
+      "bot": "BUILD163-A9",
+      "number": 4163,
+      "tests": [
+        {
+          "DRAM Power_0": 0.608063758389262,
+          "GT Power_0": 0.02955033557046978,
+          "IA Power_0": 3.782073825503358,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.120637583892617,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7377257525083614,
+          "GT Power_0": 0.1340100334448161,
+          "IA Power_0": 6.241277591973244,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.666498327759196,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7519866220735792,
+          "GT Power_0": 0.13207692307692304,
+          "IA Power_0": 6.300909698996652,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.978866220735778,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7971371237458202,
+          "GT Power_0": 0.2624682274247492,
+          "IA Power_0": 6.374555183946487,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.966826086956524,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7426153846153851,
+          "GT Power_0": 0.13702006688963195,
+          "IA Power_0": 6.364976588628765,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.808040133779261,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD131-A9",
+      "number": 4162,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6048154362416106,
+          "GT Power_0": 0.036201342281879184,
+          "IA Power_0": 3.6729362416107363,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.9136241610738254,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7511070234113716,
+          "GT Power_0": 0.1286722408026757,
+          "IA Power_0": 6.08772240802676,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.5499230769230765,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7491672240802683,
+          "GT Power_0": 0.12638795986622078,
+          "IA Power_0": 5.9796923076923045,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.442889632107029,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8053311036789302,
+          "GT Power_0": 0.2587759197324416,
+          "IA Power_0": 6.321638795986621,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.84579598662207,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.750715719063546,
+          "GT Power_0": 0.130428093645485,
+          "IA Power_0": 6.239899665551841,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.663304347826088,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD147-A9",
+      "number": 4161,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5983110367892978,
+          "GT Power_0": 0.033257525083612016,
+          "IA Power_0": 3.1860802675585296,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.493384615384617,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7454515050167224,
+          "GT Power_0": 0.1475351170568562,
+          "IA Power_0": 5.969989966555184,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.4906856187290956,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7379096989966559,
+          "GT Power_0": 0.14533779264214045,
+          "IA Power_0": 6.074307692307692,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.549143812709026,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7972976588628763,
+          "GT Power_0": 0.2739230769230772,
+          "IA Power_0": 6.229311036789295,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.84719732441472,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7466789297658866,
+          "GT Power_0": 0.15285953177257525,
+          "IA Power_0": 6.150207357859532,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.624986622073575,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD169-A9",
+      "number": 4160,
+      "tests": [
+        {
+          "DRAM Power_0": 0.607578595317726,
+          "GT Power_0": 0.014772575250836117,
+          "IA Power_0": 3.770836120401339,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.1139665551839455,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7387826086956525,
+          "GT Power_0": 0.12347157190635454,
+          "IA Power_0": 6.528949832775921,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.959678929765885,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7404849498327758,
+          "GT Power_0": 0.12182943143812704,
+          "IA Power_0": 6.573839464882943,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.0028494983277545,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7981237458193976,
+          "GT Power_0": 0.24741471571906337,
+          "IA Power_0": 6.6912508361204,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.279719063545146,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7516387959866222,
+          "GT Power_0": 0.1356153846153846,
+          "IA Power_0": 6.460575250836119,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.948595317725752,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD129-A9",
+      "number": 4159,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6043892617449668,
+          "GT Power_0": 0.0320167785234899,
+          "IA Power_0": 3.4837583892617427,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.829389261744965,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7398127090301009,
+          "GT Power_0": 0.09856521739130442,
+          "IA Power_0": 6.1160301003344495,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.526889632107024,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7388428093645486,
+          "GT Power_0": 0.09756856187290969,
+          "IA Power_0": 6.301297658862878,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.689541806020064,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8030503355704696,
+          "GT Power_0": 0.2113020134228188,
+          "IA Power_0": 6.667597315436245,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.218661073825504,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7457959866220734,
+          "GT Power_0": 0.10266889632107028,
+          "IA Power_0": 6.5009364548495,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.933695652173912,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD119-A9",
+      "number": 4158,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6036140939597312,
+          "GT Power_0": 0.03680536912751673,
+          "IA Power_0": 3.9380570469798664,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.248523489932888,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7501739130434779,
+          "GT Power_0": 0.11741137123745828,
+          "IA Power_0": 7.222448160535116,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.778846153846155,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7448327759197321,
+          "GT Power_0": 0.1171638795986622,
+          "IA Power_0": 7.1491839464883,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.658173913043475,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.796782608695653,
+          "GT Power_0": 0.24396989966555185,
+          "IA Power_0": 7.298672240802672,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.864662207357855,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.743030100334448,
+          "GT Power_0": 0.1257859531772577,
+          "IA Power_0": 7.286371237458189,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.711494983277585,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD173-A9",
+      "number": 4157,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5965150501672243,
+          "GT Power_0": 0.03126755852842806,
+          "IA Power_0": 3.8899264214046827,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.186224080267558,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.738257525083612,
+          "GT Power_0": 0.1393578595317725,
+          "IA Power_0": 7.1206287625418065,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.544280936454848,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7383913043478266,
+          "GT Power_0": 0.13748494983277595,
+          "IA Power_0": 6.951655518394644,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.399183946488303,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7951705685618727,
+          "GT Power_0": 0.2844816053511705,
+          "IA Power_0": 7.144190635451503,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.720187290969901,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7555317725752507,
+          "GT Power_0": 0.1428628762541806,
+          "IA Power_0": 7.12149163879599,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.7852976588628815,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD181-A9",
+      "number": 4156,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6052608695652179,
+          "GT Power_0": 0.03393979933110364,
+          "IA Power_0": 3.9798260869565203,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.286397993311037,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7561839464882949,
+          "GT Power_0": 0.12793979933110358,
+          "IA Power_0": 6.949725752508362,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.588608695652171,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7398160535117065,
+          "GT Power_0": 0.1250301003344482,
+          "IA Power_0": 6.895739130434779,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.328598662207359,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7998087248322149,
+          "GT Power_0": 0.24172483221476512,
+          "IA Power_0": 7.228469798657716,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.799224832214762,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7433511705685616,
+          "GT Power_0": 0.13003678929765888,
+          "IA Power_0": 7.004083612040134,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.44230434782609,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD133-A9",
+      "number": 4155,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6020535117056853,
+          "GT Power_0": 0.034157190635451494,
+          "IA Power_0": 3.509341137123744,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.8192575250836107,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7494214046822746,
+          "GT Power_0": 0.1234682274247492,
+          "IA Power_0": 6.151247491638797,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.7043110367892975,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.738548494983278,
+          "GT Power_0": 0.12281605351170567,
+          "IA Power_0": 6.025324414715724,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.45179933110368,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8076187290969903,
+          "GT Power_0": 0.2428227424749164,
+          "IA Power_0": 6.142377926421409,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.802438127090303,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7532608695652175,
+          "GT Power_0": 0.13670568561872914,
+          "IA Power_0": 5.973428093645483,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.453177257525081,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD147-A9",
+      "number": 4154,
+      "tests": [
+        {
+          "DRAM Power_0": 0.608607382550335,
+          "GT Power_0": 0.03390939597315434,
+          "IA Power_0": 3.493161073825505,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.854241610738256,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7450735785953181,
+          "GT Power_0": 0.14490301003344488,
+          "IA Power_0": 6.173515050167227,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.626755852842805,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7434046822742474,
+          "GT Power_0": 0.14444481605351178,
+          "IA Power_0": 5.959013377926427,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.4612775919732375,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7970401337792642,
+          "GT Power_0": 0.28343812709030103,
+          "IA Power_0": 5.930906354515044,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.523147157190636,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7528595317725753,
+          "GT Power_0": 0.16015719063545156,
+          "IA Power_0": 5.938083612040132,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.51407023411371,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD128-A9",
+      "number": 4153,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6028260869565215,
+          "GT Power_0": 0.0324849498327759,
+          "IA Power_0": 4.099010033444818,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.396872909698995,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.74275585284281,
+          "GT Power_0": 0.12018394648829428,
+          "IA Power_0": 7.280033444816054,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.670816053511709,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7459498327759203,
+          "GT Power_0": 0.11296321070234117,
+          "IA Power_0": 6.97842474916388,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.458618729096993,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7988795986622078,
+          "GT Power_0": 0.23728428093645482,
+          "IA Power_0": 7.000939799331108,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.565033444816054,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7440066889632111,
+          "GT Power_0": 0.12057859531772565,
+          "IA Power_0": 6.922896321070232,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.346083612040136,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD155-A9",
+      "number": 4152,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6031711409395976,
+          "GT Power_0": 0.03657382550335568,
+          "IA Power_0": 3.696661073825506,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.009426174496645,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7497090301003345,
+          "GT Power_0": 0.13967224080267565,
+          "IA Power_0": 6.712434782608696,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.239916387959871,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7394581939799335,
+          "GT Power_0": 0.13489297658862887,
+          "IA Power_0": 6.672909698996657,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.110056856187286,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.804578595317726,
+          "GT Power_0": 0.2579397993311036,
+          "IA Power_0": 6.8766856187291046,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.50865217391305,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7444280936454857,
+          "GT Power_0": 0.14787625418060193,
+          "IA Power_0": 6.761662207357861,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.2383210702341145,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD179-A9",
+      "number": 4151,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6063020134228188,
+          "GT Power_0": 0.038429530201342266,
+          "IA Power_0": 3.99168791946309,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.344661073825503,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7385117056856195,
+          "GT Power_0": 0.14880602006688964,
+          "IA Power_0": 6.84944481605351,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.307254180602012,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.736491638795987,
+          "GT Power_0": 0.14959197324414708,
+          "IA Power_0": 6.734341137123753,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.1846856187290955,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8040702341137124,
+          "GT Power_0": 0.2945819397993315,
+          "IA Power_0": 7.011538461538464,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.659073578595321,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.814442953020135,
+          "GT Power_0": 0.15777852348993285,
+          "IA Power_0": 9.337614093959733,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 9.814442953020137,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 298
+        }
+      ]
+    },
+    {
+      "bot": "BUILD141-A9",
+      "number": 4150,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5967684563758392,
+          "GT Power_0": 0.029181208053691256,
+          "IA Power_0": 3.776305369127515,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.059617449664428,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7473444816053522,
+          "GT Power_0": 0.14029765886287623,
+          "IA Power_0": 7.172344481605351,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.655143812709031,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7378394648829435,
+          "GT Power_0": 0.1408093645484949,
+          "IA Power_0": 7.358702341137124,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.768107023411378,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8090434782608693,
+          "GT Power_0": 0.2589933110367893,
+          "IA Power_0": 7.541525083612039,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.289214046822744,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7440635451505015,
+          "GT Power_0": 0.14708026755852838,
+          "IA Power_0": 7.456769230769235,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.909608695652172,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD153-A9",
+      "number": 4149,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6116187290969901,
+          "GT Power_0": 0.013983277591973238,
+          "IA Power_0": 3.2883779264214037,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.648130434782609,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7376354515050169,
+          "GT Power_0": 0.09747157190635451,
+          "IA Power_0": 5.619605351170563,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.039762541806022,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7381304347826086,
+          "GT Power_0": 0.09571237458193983,
+          "IA Power_0": 5.724929765886291,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.127468227424752,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7939698996655523,
+          "GT Power_0": 0.2047558528428093,
+          "IA Power_0": 5.868170568561873,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.402608695652178,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.750795986622074,
+          "GT Power_0": 0.09905351170568556,
+          "IA Power_0": 5.82977926421405,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.312538461538463,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD164-A9",
+      "number": 4148,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6068154362416109,
+          "GT Power_0": 0.029869127516778518,
+          "IA Power_0": 3.714664429530202,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.049667785234896,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7464314381270902,
+          "GT Power_0": 0.13162876254180594,
+          "IA Power_0": 6.836163879598661,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.277033444816054,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.738257525083613,
+          "GT Power_0": 0.13051170568561868,
+          "IA Power_0": 6.634976588628763,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.0736421404682295,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7961103678929756,
+          "GT Power_0": 0.25495317725752503,
+          "IA Power_0": 6.755404682274247,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.338956521739135,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7454949832775926,
+          "GT Power_0": 0.13860200668896316,
+          "IA Power_0": 6.724193979933107,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.187397993311039,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD166-A9",
+      "number": 4147,
+      "tests": [
+        {
+          "DRAM Power_0": 0.62115100671141,
+          "GT Power_0": 0.03495973154362412,
+          "IA Power_0": 5.827922818791945,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.211996644295298,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7360802675585287,
+          "GT Power_0": 0.1380066889632108,
+          "IA Power_0": 7.594953177257528,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.102799331103684,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.6921638795986619,
+          "GT Power_0": 0.13262207357859523,
+          "IA Power_0": 12.642826086956527,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 13.077327759197326,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7947224080267559,
+          "GT Power_0": 0.27714715719063576,
+          "IA Power_0": 8.033862876254183,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.693525083612036,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.737234113712375,
+          "GT Power_0": 0.13876923076923078,
+          "IA Power_0": 7.92179264214047,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.45045150501672,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD147-A9",
+      "number": 4146,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6106287625418058,
+          "GT Power_0": 0.030491638795986584,
+          "IA Power_0": 3.42128093645485,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.787859531772574,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7384381270903009,
+          "GT Power_0": 0.14818729096989958,
+          "IA Power_0": 5.843973244147155,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.323508361204009,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7415418060200671,
+          "GT Power_0": 0.14415050167224078,
+          "IA Power_0": 5.94754180602007,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.429518394648833,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7985872483221476,
+          "GT Power_0": 0.2720201342281882,
+          "IA Power_0": 6.065557046979865,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.6688422818792,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7435685618729097,
+          "GT Power_0": 0.15368896321070238,
+          "IA Power_0": 6.037488294314378,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.496080267558532,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD140-A9",
+      "number": 4145,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6061404682274251,
+          "GT Power_0": 0.030548494983277552,
+          "IA Power_0": 3.321451505016724,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.68712040133779,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7410570469798659,
+          "GT Power_0": 0.12761744966442962,
+          "IA Power_0": 6.225046979865773,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.66979194630873,
+          "name": "Video_720_MP4",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7377792642140467,
+          "GT Power_0": 0.12946488294314382,
+          "IA Power_0": 6.009949832775922,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.470819397993311,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8003545150501674,
+          "GT Power_0": 0.2474581939799331,
+          "IA Power_0": 6.273745819397995,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.819364548494982,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7445451505016727,
+          "GT Power_0": 0.13401337792642137,
+          "IA Power_0": 6.122193979933113,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.585595317725749,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD121-A9",
+      "number": 4144,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6065805369127516,
+          "GT Power_0": 0.03587583892617446,
+          "IA Power_0": 4.088889261744967,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.458986577181208,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7407525083612043,
+          "GT Power_0": 0.1400234113712374,
+          "IA Power_0": 7.234468227424748,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.672367892976583,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7387324414715718,
+          "GT Power_0": 0.13726086956521752,
+          "IA Power_0": 7.112715719063542,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.563140468227425,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7999096989966551,
+          "GT Power_0": 0.27825083612040147,
+          "IA Power_0": 7.379698996655522,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.992120401337793,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7452474916387958,
+          "GT Power_0": 0.14519063545150507,
+          "IA Power_0": 7.028314381270899,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.47834448160535,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD154-A9",
+      "number": 4143,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5968456375838924,
+          "GT Power_0": 0.02956040268456373,
+          "IA Power_0": 3.5951375838926176,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.892557046979867,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7392742474916386,
+          "GT Power_0": 0.15810367892976576,
+          "IA Power_0": 6.660882943143811,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.133538461538464,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7377424749163882,
+          "GT Power_0": 0.15356187290969894,
+          "IA Power_0": 6.596528428093648,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.068080267558525,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7949665551839463,
+          "GT Power_0": 0.293836120401338,
+          "IA Power_0": 6.884588628762545,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.498735785953178,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7420501672240803,
+          "GT Power_0": 0.1628461538461538,
+          "IA Power_0": 6.743672240802677,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.2223210702341145,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD142-A9",
+      "number": 4142,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5823993288590604,
+          "GT Power_0": 0.03453355704697981,
+          "IA Power_0": 3.423442953020137,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.753077181208052,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7186622073578594,
+          "GT Power_0": 0.13939130434782612,
+          "IA Power_0": 6.380839464882943,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.830113712374581,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7236488294314378,
+          "GT Power_0": 0.13855518394648828,
+          "IA Power_0": 6.368508361204014,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.88389966555184,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.781254180602006,
+          "GT Power_0": 0.271377926421405,
+          "IA Power_0": 6.601284280936457,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.196200668896323,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7212608695652173,
+          "GT Power_0": 0.14772909698996645,
+          "IA Power_0": 6.489806020066891,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.929782608695652,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD160-A9",
+      "number": 4141,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5777658862876248,
+          "GT Power_0": 0.034381270903009985,
+          "IA Power_0": 2.8099431438127103,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.112267558528428,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7195217391304355,
+          "GT Power_0": 0.13108695652173907,
+          "IA Power_0": 5.38424080267559,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.836545150501672,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.717675585284281,
+          "GT Power_0": 0.13060869565217395,
+          "IA Power_0": 5.367839464882944,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.805073578595313,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7801973244147156,
+          "GT Power_0": 0.24702006688963218,
+          "IA Power_0": 5.547267558528429,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.126555183946486,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7220602006688962,
+          "GT Power_0": 0.13950167224080268,
+          "IA Power_0": 5.294411371237461,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.746889632107027,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD121-A9",
+      "number": 4140,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6128791946308726,
+          "GT Power_0": 0.03797651006711408,
+          "IA Power_0": 4.772120805369129,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.106862416107382,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7501003344481606,
+          "GT Power_0": 0.1340066889632106,
+          "IA Power_0": 7.294976588628765,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.814856187290967,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7464013377926426,
+          "GT Power_0": 0.13212040133779268,
+          "IA Power_0": 7.058832775919731,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.596755852842809,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7990100334448159,
+          "GT Power_0": 0.2690668896321074,
+          "IA Power_0": 7.3101672240802715,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.860769230769225,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7521103678929769,
+          "GT Power_0": 0.1381237458193981,
+          "IA Power_0": 7.2385618729097,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.771745819397991,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD138-A9",
+      "number": 4139,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6058428093645485,
+          "GT Power_0": 0.0300602006688963,
+          "IA Power_0": 3.1675250836120408,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.5360769230769233,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7376688963210707,
+          "GT Power_0": 0.11633444816053519,
+          "IA Power_0": 5.577735785953172,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.019103678929765,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.737936454849499,
+          "GT Power_0": 0.11492307692307695,
+          "IA Power_0": 5.533347826086954,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 5.970441471571905,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7974347826086958,
+          "GT Power_0": 0.23210033444816042,
+          "IA Power_0": 5.684802675585284,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.26122742474916,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7527123745819397,
+          "GT Power_0": 0.11727759197324414,
+          "IA Power_0": 5.723785953177254,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.219397993311038,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD179-A9",
+      "number": 4138,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6014395973154361,
+          "GT Power_0": 0.03355704697986575,
+          "IA Power_0": 3.7081677852348998,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.0135973154362405,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7367558528428096,
+          "GT Power_0": 0.15010033444816062,
+          "IA Power_0": 6.61527424749163,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.102698996655514,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7377892976588631,
+          "GT Power_0": 0.14779598662207355,
+          "IA Power_0": 6.632926421404678,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.084729096989966,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8027257525083619,
+          "GT Power_0": 0.28350501672240785,
+          "IA Power_0": 6.770317725752503,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.467344481605349,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7432775919732444,
+          "GT Power_0": 0.154695652173913,
+          "IA Power_0": 6.954632107023412,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.4061906354515035,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD131-A9",
+      "number": 4137,
+      "tests": [
+        {
+          "DRAM Power_0": 0.604304347826087,
+          "GT Power_0": 0.029411371237458152,
+          "IA Power_0": 3.7421872909698988,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.0046254180602014,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7425050167224083,
+          "GT Power_0": 0.1236086956521739,
+          "IA Power_0": 6.1917324414715695,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.57902341137124,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7453913043478263,
+          "GT Power_0": 0.11870234113712372,
+          "IA Power_0": 6.12904347826087,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.510107023411365,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8117826086956521,
+          "GT Power_0": 0.24646822742474903,
+          "IA Power_0": 6.1860100334448145,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.755879598662208,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7487625418060203,
+          "GT Power_0": 0.12799999999999992,
+          "IA Power_0": 6.1550367892976565,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.527926421404685,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD142-A9",
+      "number": 4136,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6054999999999993,
+          "GT Power_0": 0.03370469798657714,
+          "IA Power_0": 3.7793355704697986,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.149127516778523,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7470903010033451,
+          "GT Power_0": 0.1390735785953178,
+          "IA Power_0": 6.624137123745819,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.154652173913045,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.741341137123746,
+          "GT Power_0": 0.13784280936454857,
+          "IA Power_0": 6.630859531772577,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.1244247491638815,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8026454849498329,
+          "GT Power_0": 0.27426421404682283,
+          "IA Power_0": 6.6378461538461515,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.264163879598653,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7401003344481616,
+          "GT Power_0": 0.14328428093645496,
+          "IA Power_0": 6.667892976588629,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.120591973244148,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD141-A9",
+      "number": 4135,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6051174496644294,
+          "GT Power_0": 0.03285234899328856,
+          "IA Power_0": 3.7933557046979844,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.131251677852351,
+          "name": "Basic",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.7402341137123747,
+          "GT Power_0": 0.14055518394648844,
+          "IA Power_0": 7.034220735785952,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.468257525083618,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7372943143812712,
+          "GT Power_0": 0.14383612040133778,
+          "IA Power_0": 7.128167224080267,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.568836120401341,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.8064347826086955,
+          "GT Power_0": 0.2597023411371238,
+          "IA Power_0": 7.307581939799332,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.019046822742474,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7429096989966566,
+          "GT Power_0": 0.1468628762541805,
+          "IA Power_0": 7.289280936454854,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.725702341137124,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD173-A9",
+      "number": 4134,
+      "tests": [
+        {
+          "DRAM Power_0": 0.6042173913043474,
+          "GT Power_0": 0.03345150501672236,
+          "IA Power_0": 3.7865284280936455,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 4.107782608695651,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7448829431438132,
+          "GT Power_0": 0.1362274247491639,
+          "IA Power_0": 6.927150501672245,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.435739130434785,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7390501672240801,
+          "GT Power_0": 0.13594314381270906,
+          "IA Power_0": 7.068411371237462,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.524066889632108,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7966655518394646,
+          "GT Power_0": 0.265444816053512,
+          "IA Power_0": 7.185521739130432,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.781127090301012,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.746026755852843,
+          "GT Power_0": 0.1405083612040133,
+          "IA Power_0": 7.24333444816054,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.6762474916388,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD123-A9",
+      "number": 4133,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5758628762541806,
+          "GT Power_0": 0.03318729096989964,
+          "IA Power_0": 2.9963411371237467,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.2960501672240796,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7164916387959869,
+          "GT Power_0": 0.11933444816053498,
+          "IA Power_0": 6.361234113712374,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.77804347826087,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7254581939799333,
+          "GT Power_0": 0.12377926421404674,
+          "IA Power_0": 6.312989966555184,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 6.829581939799331,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.796515050167224,
+          "GT Power_0": 0.26046822742474945,
+          "IA Power_0": 6.733187290969901,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.37816387959866,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7253478260869569,
+          "GT Power_0": 0.12507692307692309,
+          "IA Power_0": 6.642153846153843,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.086762541806019,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    },
+    {
+      "bot": "BUILD141-A9",
+      "number": 4132,
+      "tests": [
+        {
+          "DRAM Power_0": 0.5682943143812711,
+          "GT Power_0": 0.010645484949832772,
+          "IA Power_0": 3.2202742474916404,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 3.4879665551839505,
+          "name": "Basic",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.722377926421405,
+          "GT Power_0": 0.1407023411371237,
+          "IA Power_0": 6.864715719063549,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.309354515050171,
+          "name": "Video_720_MP4",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.757100671140939,
+          "GT Power_0": 0.1405469798657718,
+          "IA Power_0": 8.247070469798663,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 8.660926174496637,
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": 298
+        },
+        {
+          "DRAM Power_0": 0.788849498327759,
+          "GT Power_0": 0.27827759197324425,
+          "IA Power_0": 6.862297658862874,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.478772575250836,
+          "name": "Video_720_MP4_Underlay",
+          "samples": 299
+        },
+        {
+          "DRAM Power_0": 0.7234682274247491,
+          "GT Power_0": 0.1444816053511707,
+          "IA Power_0": 6.806297658862874,
+          "Package Power Limit_0": 65.0,
+          "Processor Power_0": 7.247989966555185,
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": 299
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/content/test/gpu/power_measurement_results/win10_intel_hd_630/build_4370_4425_repeat3.json b/content/test/gpu/power_measurement_results/win10_intel_hd_630/build_4370_4425_repeat3.json
new file mode 100644
index 0000000..89dcece
--- /dev/null
+++ b/content/test/gpu/power_measurement_results/win10_intel_hd_630/build_4370_4425_repeat3.json
@@ -0,0 +1,9409 @@
+{
+  "builds": [
+    {
+      "bot": "BUILD151-A9",
+      "number": 4425,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6059533333333331,
+            0.6119599999999996,
+            0.5979666666666662
+          ],
+          "GT Power_0": [
+            0.030166666666666658,
+            0.013706666666666667,
+            0.014026666666666665
+          ],
+          "IA Power_0": [
+            4.046633333333333,
+            3.670619999999999,
+            4.006120000000002
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.3478266666666645,
+            4.099286666666666,
+            4.245900000000002
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7510666666666663,
+            0.75387417218543,
+            0.7398466666666664
+          ],
+          "GT Power_0": [
+            0.10328666666666667,
+            0.10989403973509934,
+            0.10628666666666671
+          ],
+          "IA Power_0": [
+            6.323999999999999,
+            6.417589403973515,
+            7.15069333333334
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.825793333333332,
+            6.942649006622514,
+            7.510126666666666
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7343666666666667,
+            0.7336688741721848,
+            0.7349266666666665
+          ],
+          "GT Power_0": [
+            0.10666,
+            0.10443708609271532,
+            0.10371333333333337
+          ],
+          "IA Power_0": [
+            6.482886666666668,
+            6.4280662251655665,
+            6.540373333333336
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.829733333333333,
+            6.810251655629134,
+            6.909833333333332
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7925000000000003,
+            0.8098133333333335,
+            0.8156000000000002
+          ],
+          "GT Power_0": [
+            0.22833333333333333,
+            0.23080666666666672,
+            0.2482666666666667
+          ],
+          "IA Power_0": [
+            6.72464,
+            6.895526666666668,
+            6.9380266666666675
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.24249333333333,
+            7.540426666666666,
+            7.598773333333334
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7379072847682115,
+            0.75214,
+            0.7373199999999995
+          ],
+          "GT Power_0": [
+            0.11159602649006627,
+            0.11059333333333335,
+            0.10814000000000004
+          ],
+          "IA Power_0": [
+            6.505145695364238,
+            6.810873333333331,
+            6.541193333333333
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.920761589403971,
+            7.24751333333333,
+            6.9189533333333335
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD130-A9",
+      "number": 4424,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6067350993377479,
+            0.5971125827814567,
+            0.5965033112582779
+          ],
+          "GT Power_0": [
+            0.04444370860927149,
+            0.014993377483443707,
+            0.01480794701986755
+          ],
+          "IA Power_0": [
+            4.208026490066228,
+            4.3103046357615895,
+            3.953423841059605
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.516668874172185,
+            4.553059602649007,
+            4.209145695364241
+          ],
+          "name": "Basic",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7362185430463574,
+            0.7422933333333329,
+            0.7328933333333327
+          ],
+          "GT Power_0": [
+            0.1237549668874172,
+            0.12464666666666668,
+            0.12045333333333337
+          ],
+          "IA Power_0": [
+            7.2400927152317855,
+            7.522206666666666,
+            7.190420000000004
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.594629139072848,
+            8.012239999999998,
+            7.548286666666666
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7455266666666662,
+            0.7334900662251655,
+            0.7371523178807944
+          ],
+          "GT Power_0": [
+            0.11943333333333325,
+            0.11930463576158934,
+            0.12460927152317877
+          ],
+          "IA Power_0": [
+            7.174340000000001,
+            7.0238344370860935,
+            7.323701986754968
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.600033333333334,
+            7.440649006622516,
+            7.69761589403973
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7934066666666673,
+            0.7951400000000005,
+            0.7919266666666673
+          ],
+          "GT Power_0": [
+            0.25088000000000005,
+            0.2503400000000001,
+            0.2506600000000001
+          ],
+          "IA Power_0": [
+            7.716326666666663,
+            7.564366666666668,
+            7.44269333333333
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            8.284413333333333,
+            8.044826666666669,
+            7.974746666666666
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7580728476821191,
+            0.7402800000000002,
+            0.7409133333333329
+          ],
+          "GT Power_0": [
+            0.13318543046357623,
+            0.13277999999999995,
+            0.12999333333333332
+          ],
+          "IA Power_0": [
+            7.666490066225169,
+            7.244446666666668,
+            7.262160000000001
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            8.131649006622517,
+            7.621073333333337,
+            7.632639999999999
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD178-A9",
+      "number": 4423,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6158199999999999,
+            0.597278145695364,
+            0.5985761589403974
+          ],
+          "GT Power_0": [
+            0.034806666666666666,
+            0.012576158940397354,
+            0.012576158940397347
+          ],
+          "IA Power_0": [
+            4.454206666666667,
+            3.476245033112583,
+            3.5754304635761605
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.733373333333335,
+            3.7034105960264903,
+            3.814609271523177
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7427152317880792,
+            0.7388666666666663,
+            0.7349199999999996
+          ],
+          "GT Power_0": [
+            0.1060331125827815,
+            0.08950000000000001,
+            0.0853666666666667
+          ],
+          "IA Power_0": [
+            7.073953642384108,
+            6.657339999999994,
+            6.205206666666668
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.362192052980137,
+            7.0330533333333305,
+            6.550953333333336
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.736246666666666,
+            0.7343377483443708,
+            0.7520199999999995
+          ],
+          "GT Power_0": [
+            0.08229999999999998,
+            0.08551655629139071,
+            0.08782000000000002
+          ],
+          "IA Power_0": [
+            6.145893333333334,
+            6.476178807947023,
+            6.135320000000002
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.4719333333333315,
+            6.7825695364238445,
+            6.705620000000002
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7908344370860931,
+            0.790446666666667,
+            0.8362133333333331
+          ],
+          "GT Power_0": [
+            0.19705960264900665,
+            0.19657999999999998,
+            0.2001133333333333
+          ],
+          "IA Power_0": [
+            6.442271523178807,
+            6.775586666666666,
+            6.469086666666667
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.9129403973509955,
+            7.226713333333327,
+            7.371266666666663
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.738291390728477,
+            0.7556556291390721,
+            0.74028476821192
+          ],
+          "GT Power_0": [
+            0.09060927152317881,
+            0.09175496688741724,
+            0.09056291390728476
+          ],
+          "IA Power_0": [
+            6.2451059602649,
+            6.202291390728476,
+            6.2379735099337745
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.569072847682122,
+            6.687695364238411,
+            6.581304635761589
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD177-A9",
+      "number": 4422,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.5957933333333331,
+            0.5950200000000003,
+            0.6162266666666665
+          ],
+          "GT Power_0": [
+            0.014159999999999997,
+            0.014560000000000002,
+            0.013473333333333332
+          ],
+          "IA Power_0": [
+            3.8121933333333335,
+            3.9778800000000025,
+            3.928893333333334
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.042806666666666,
+            4.182359999999998,
+            4.253353333333334
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7329466666666665,
+            0.6401523178807946,
+            0.7438266666666666
+          ],
+          "GT Power_0": [
+            0.11140666666666671,
+            0.43235099337748334,
+            0.12324
+          ],
+          "IA Power_0": [
+            6.672053333333336,
+            7.667490066225167,
+            6.780833333333334
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.037293333333333,
+            8.30082119205298,
+            7.255060000000003
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7319266666666667,
+            0.7349533333333333,
+            0.7346158940397348
+          ],
+          "GT Power_0": [
+            0.11139333333333337,
+            0.11013333333333333,
+            0.11383443708609278
+          ],
+          "IA Power_0": [
+            6.742379999999998,
+            7.456566666666666,
+            6.844304635761589
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.105173333333334,
+            7.7957,
+            7.249390728476819
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.789266666666667,
+            0.9219666666666672,
+            0.7973000000000002
+          ],
+          "GT Power_0": [
+            0.2441333333333333,
+            0.24647999999999995,
+            0.26826666666666665
+          ],
+          "IA Power_0": [
+            7.093559999999999,
+            11.755666666666668,
+            7.157880000000003
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.582799999999999,
+            12.395146666666662,
+            7.712766666666666
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7364999999999993,
+            0.73669536423841,
+            0.7364999999999997
+          ],
+          "GT Power_0": [
+            0.11922000000000002,
+            0.11968211920529806,
+            0.11699333333333341
+          ],
+          "IA Power_0": [
+            7.174806666666668,
+            6.950198675496689,
+            6.890833333333333
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.543599999999998,
+            7.289900662251655,
+            7.270306666666666
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD120-A9",
+      "number": 4421,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.5981266666666661,
+            0.5983533333333327,
+            0.6125430463576156
+          ],
+          "GT Power_0": [
+            0.015559999999999994,
+            0.015906666666666666,
+            0.015450331125827813
+          ],
+          "IA Power_0": [
+            3.587233333333334,
+            3.6513600000000004,
+            3.6445165562913915
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            3.853993333333334,
+            3.889040000000001,
+            3.932317880794705
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7402533333333325,
+            0.7399599999999997,
+            0.7381266666666665
+          ],
+          "GT Power_0": [
+            0.12650666666666666,
+            0.1277666666666667,
+            0.1238733333333334
+          ],
+          "IA Power_0": [
+            6.716820000000002,
+            6.8600666666666665,
+            6.442519999999999
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.056320000000004,
+            7.2339333333333355,
+            6.835193333333332
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7330794701986751,
+            0.7332866666666663,
+            0.7352799999999995
+          ],
+          "GT Power_0": [
+            0.12704635761589406,
+            0.12663333333333324,
+            0.12528000000000003
+          ],
+          "IA Power_0": [
+            6.640026490066226,
+            6.448166666666667,
+            6.355926666666668
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.028973509933777,
+            6.779946666666666,
+            6.7160133333333345
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7921200000000006,
+            0.7913400000000005,
+            0.8128666666666671
+          ],
+          "GT Power_0": [
+            0.2620866666666669,
+            0.2650266666666667,
+            0.26688000000000006
+          ],
+          "IA Power_0": [
+            6.592533333333335,
+            6.567246666666664,
+            6.848706666666667
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.16968666666667,
+            7.109586666666662,
+            7.717406666666669
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7387333333333327,
+            0.7395866666666667,
+            0.7400794701986754
+          ],
+          "GT Power_0": [
+            0.12989333333333333,
+            0.1302666666666667,
+            0.13745033112582786
+          ],
+          "IA Power_0": [
+            6.473879999999998,
+            6.502726666666667,
+            6.765463576158943
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.861886666666669,
+            6.8662399999999995,
+            7.1263642384105985
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD137-A9",
+      "number": 4420,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6053333333333331,
+            0.5990399999999996,
+            0.6138940397350988
+          ],
+          "GT Power_0": [
+            0.043566666666666656,
+            0.014853333333333338,
+            0.014980132450331127
+          ],
+          "IA Power_0": [
+            4.218273333333333,
+            4.4121466666666675,
+            4.139715231788079
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.56486,
+            4.66852,
+            4.4790198675496695
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7339933333333335,
+            0.7444533333333329,
+            0.735553333333333
+          ],
+          "GT Power_0": [
+            0.10984666666666675,
+            0.11736000000000006,
+            0.11206666666666668
+          ],
+          "IA Power_0": [
+            7.297113333333334,
+            7.7067999999999985,
+            7.545793333333338
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.640046666666667,
+            8.157359999999995,
+            7.8797666666666695
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.752733333333333,
+            0.7614238410596028,
+            0.7350866666666661
+          ],
+          "GT Power_0": [
+            0.10666000000000002,
+            0.12180794701986761,
+            0.11097333333333331
+          ],
+          "IA Power_0": [
+            8.131313333333337,
+            7.479264900662254,
+            7.416486666666665
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            8.411086666666659,
+            8.333609271523178,
+            7.720726666666669
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7899866666666674,
+            0.8018741721854311,
+            0.80412
+          ],
+          "GT Power_0": [
+            0.2400266666666666,
+            0.2406953642384106,
+            0.23836666666666667
+          ],
+          "IA Power_0": [
+            8.084533333333333,
+            7.8474238410596024,
+            7.779806666666665
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            8.541406666666667,
+            8.375596026490063,
+            8.49282
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7532251655629136,
+            0.7389466666666664,
+            0.7747933333333333
+          ],
+          "GT Power_0": [
+            0.11725165562913906,
+            0.11680000000000007,
+            0.11866000000000002
+          ],
+          "IA Power_0": [
+            7.736953642384109,
+            7.444726666666664,
+            7.454220000000002
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            8.206099337748343,
+            7.804613333333333,
+            8.16587333333333
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD165-A9",
+      "number": 4419,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6010133333333333,
+            0.6037733333333334,
+            0.5997399999999999
+          ],
+          "GT Power_0": [
+            0.03513333333333331,
+            0.014999999999999998,
+            0.016019999999999993
+          ],
+          "IA Power_0": [
+            4.14396,
+            4.386020000000001,
+            4.02612
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.397140000000002,
+            4.634326666666668,
+            4.236926666666668
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7349066666666667,
+            0.7372266666666667,
+            0.7458333333333328
+          ],
+          "GT Power_0": [
+            0.1085733333333334,
+            0.11249333333333335,
+            0.10848000000000006
+          ],
+          "IA Power_0": [
+            6.958026666666666,
+            6.910106666666664,
+            7.040653333333336
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.34053333333333,
+            7.286566666666665,
+            7.434019999999998
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7568799999999998,
+            0.7604799999999995,
+            0.7541466666666661
+          ],
+          "GT Power_0": [
+            0.10831999999999999,
+            0.11222666666666671,
+            0.11154000000000008
+          ],
+          "IA Power_0": [
+            6.945800000000002,
+            7.032026666666664,
+            6.932726666666667
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.610286666666667,
+            7.586319999999999,
+            7.412646666666666
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7926225165562917,
+            0.802393333333334,
+            0.8003533333333334
+          ],
+          "GT Power_0": [
+            0.25009933774834436,
+            0.25118000000000007,
+            0.2533933333333333
+          ],
+          "IA Power_0": [
+            7.671847682119204,
+            8.112799999999995,
+            7.319626666666668
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            8.212006622516556,
+            8.615933333333338,
+            7.839066666666665
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7409133333333332,
+            0.7555533333333335,
+            0.7425866666666663
+          ],
+          "GT Power_0": [
+            0.11748666666666667,
+            0.11948,
+            0.11909333333333336
+          ],
+          "IA Power_0": [
+            7.443379999999998,
+            8.242366666666669,
+            7.019599999999997
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.84332666666667,
+            8.59826,
+            7.367413333333334
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD138-A9",
+      "number": 4418,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6028533333333328,
+            0.6151324503311256,
+            0.5970728476821192
+          ],
+          "GT Power_0": [
+            0.044273333333333297,
+            0.014569536423841055,
+            0.015344370860927154
+          ],
+          "IA Power_0": [
+            3.048233333333334,
+            3.163072847682119,
+            3.039172185430463
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            3.3550133333333334,
+            3.47594701986755,
+            3.2910794701986776
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7355066666666664,
+            0.7452600000000001,
+            0.734953333333333
+          ],
+          "GT Power_0": [
+            0.10445333333333337,
+            0.10784666666666666,
+            0.1045066666666667
+          ],
+          "IA Power_0": [
+            5.485160000000002,
+            5.458333333333331,
+            5.323106666666668
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            5.821433333333332,
+            5.859760000000002,
+            5.687626666666668
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7482847682119201,
+            0.7332847682119203,
+            0.742066666666666
+          ],
+          "GT Power_0": [
+            0.10661589403973512,
+            0.10498013245033111,
+            0.10424666666666667
+          ],
+          "IA Power_0": [
+            5.261715231788078,
+            5.290529801324505,
+            5.332406666666669
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            5.717536423841057,
+            5.695013245033111,
+            5.754573333333334
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            151,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7931000000000006,
+            0.7939266666666676,
+            0.7916600000000006
+          ],
+          "GT Power_0": [
+            0.2291066666666667,
+            0.2302600000000001,
+            0.23089333333333328
+          ],
+          "IA Power_0": [
+            5.580593333333334,
+            5.5110399999999995,
+            5.535800000000002
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.082219999999999,
+            6.032200000000002,
+            6.068293333333331
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7467999999999994,
+            0.7764765100671138,
+            0.750973509933775
+          ],
+          "GT Power_0": [
+            0.11353333333333342,
+            0.11434899328859058,
+            0.12342384105960261
+          ],
+          "IA Power_0": [
+            5.74654666666667,
+            6.691859060402686,
+            5.515867549668872
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.15778,
+            7.0310939597315425,
+            5.969132450331124
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            149,
+            151
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD121-A9",
+      "number": 4417,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6305167785234895,
+            0.6125199999999998,
+            0.6004172185430461
+          ],
+          "GT Power_0": [
+            0.02875167785234898,
+            0.01481333333333333,
+            0.0165364238410596
+          ],
+          "IA Power_0": [
+            5.606791946308728,
+            3.8528933333333337,
+            3.8866423841059596
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            5.968838926174498,
+            4.294033333333334,
+            4.103013245033113
+          ],
+          "name": "Basic",
+          "samples": [
+            149,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7387999999999996,
+            0.7381266666666664,
+            0.74282
+          ],
+          "GT Power_0": [
+            0.11665999999999994,
+            0.11717999999999996,
+            0.11578666666666663
+          ],
+          "IA Power_0": [
+            7.284946666666662,
+            6.837640000000001,
+            6.874073333333334
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.572633333333333,
+            7.197826666666671,
+            7.1973
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.737526666666666,
+            0.7558066666666664,
+            0.7379733333333334
+          ],
+          "GT Power_0": [
+            0.11533333333333343,
+            0.11377333333333339,
+            0.12084
+          ],
+          "IA Power_0": [
+            6.806353333333331,
+            7.005073333333335,
+            7.14028
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.157286666666666,
+            7.4948466666666675,
+            7.440146666666668
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7929800000000004,
+            0.8110993377483446,
+            0.7969602649006624
+          ],
+          "GT Power_0": [
+            0.25133333333333324,
+            0.2538874172185432,
+            0.253933774834437
+          ],
+          "IA Power_0": [
+            7.175553333333328,
+            7.189172185430462,
+            7.459185430463579
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.647500000000004,
+            7.801880794701984,
+            7.954735099337753
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7666333333333332,
+            0.7439266666666668,
+            0.7607799999999997
+          ],
+          "GT Power_0": [
+            0.12009333333333336,
+            0.12307333333333335,
+            0.12302000000000007
+          ],
+          "IA Power_0": [
+            6.935700000000003,
+            6.925846666666663,
+            7.287346666666669
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.56571333333333,
+            7.357700000000003,
+            7.820546666666669
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD148-A9",
+      "number": 4416,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.5966490066225165,
+            0.5925033112582777,
+            0.6062933333333332
+          ],
+          "GT Power_0": [
+            0.05843708609271522,
+            0.029079470198675485,
+            0.03323999999999998
+          ],
+          "IA Power_0": [
+            5.79199337748344,
+            6.140112582781455,
+            6.351793333333332
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.2464900662251654,
+            6.467218543046357,
+            6.762653333333329
+          ],
+          "name": "Basic",
+          "samples": [
+            151,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7337284768211918,
+            0.7115099337748342,
+            0.7415695364238408
+          ],
+          "GT Power_0": [
+            0.1620927152317881,
+            0.15958940397350987,
+            0.15972185430463573
+          ],
+          "IA Power_0": [
+            8.21237086092715,
+            8.294119205298015,
+            9.11066887417218
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            9.042609271523183,
+            8.782874172185435,
+            9.740900662251656
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7239599999999998,
+            0.7121059602649003,
+            0.7109801324503312
+          ],
+          "GT Power_0": [
+            0.16117333333333334,
+            0.15827152317880785,
+            0.1606026490066225
+          ],
+          "IA Power_0": [
+            8.61384,
+            8.288059602649012,
+            8.658913907284772
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            9.168979999999992,
+            8.81635099337748,
+            9.164456953642382
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7841854304635768,
+            0.8134701986754973,
+            0.8162999999999998
+          ],
+          "GT Power_0": [
+            0.40707284768211927,
+            0.40213245033112593,
+            0.41127333333333327
+          ],
+          "IA Power_0": [
+            9.014105960264898,
+            8.968966887417224,
+            8.571053333333333
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            9.770860927152313,
+            9.762264900662249,
+            9.423913333333335
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            151,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7180397350993373,
+            0.7239006622516555,
+            0.7543973509933773
+          ],
+          "GT Power_0": [
+            0.17986092715231788,
+            0.1844834437086093,
+            0.180066225165563
+          ],
+          "IA Power_0": [
+            8.642847682119202,
+            8.930218543046358,
+            8.842708609271517
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            9.172655629139086,
+            9.398933774834434,
+            9.382364238410595
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD129-A9",
+      "number": 4415,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6058733333333334,
+            0.59824,
+            0.5987417218543044
+          ],
+          "GT Power_0": [
+            0.039446666666666644,
+            0.012693333333333329,
+            0.013509933774834438
+          ],
+          "IA Power_0": [
+            3.434353333333335,
+            3.441646666666665,
+            3.448814569536422
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            3.7916866666666653,
+            3.6513266666666677,
+            3.6753642384105962
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7606133333333327,
+            0.749313333333333,
+            0.7356533333333327
+          ],
+          "GT Power_0": [
+            0.09035333333333331,
+            0.09414666666666666,
+            0.0912
+          ],
+          "IA Power_0": [
+            6.000846666666666,
+            6.954493333333332,
+            6.057506666666668
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.491173333333333,
+            7.33862666666667,
+            6.391113333333333
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7355099337748341,
+            0.7443666666666664,
+            0.7549999999999997
+          ],
+          "GT Power_0": [
+            0.10662251655629143,
+            0.08666666666666668,
+            0.08695333333333341
+          ],
+          "IA Power_0": [
+            6.14184105960265,
+            6.412706666666666,
+            6.008313333333332
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.451920529801326,
+            6.8233066666666655,
+            6.5103133333333325
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7939866666666673,
+            0.7924105960264902,
+            0.7973266666666669
+          ],
+          "GT Power_0": [
+            0.2065533333333334,
+            0.2071920529801325,
+            0.2025266666666667
+          ],
+          "IA Power_0": [
+            6.405493333333333,
+            6.516794701986753,
+            6.3190800000000005
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.88962,
+            6.996251655629136,
+            6.807780000000001
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7412933333333329,
+            0.7412913907284767,
+            0.7385466666666665
+          ],
+          "GT Power_0": [
+            0.09287333333333338,
+            0.09191390728476823,
+            0.09462000000000005
+          ],
+          "IA Power_0": [
+            6.469953333333331,
+            6.143344370860926,
+            6.052946666666665
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.80877333333333,
+            6.469304635761589,
+            6.392873333333331
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD128-A9",
+      "number": 4414,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6125066666666665,
+            0.5977152317880794,
+            0.5964437086092713
+          ],
+          "GT Power_0": [
+            0.014526666666666662,
+            0.014662251655629139,
+            0.014794701986754965
+          ],
+          "IA Power_0": [
+            3.9591600000000016,
+            4.207496688741724,
+            3.8996556291390747
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.212786666666668,
+            4.425490066225167,
+            4.104079470198674
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7321866666666662,
+            0.7327682119205297,
+            0.7477947019867544
+          ],
+          "GT Power_0": [
+            0.11352000000000007,
+            0.11478145695364239,
+            0.11557615894039738
+          ],
+          "IA Power_0": [
+            6.773680000000001,
+            7.1418940397350985,
+            6.82524503311258
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.170953333333335,
+            7.546066225165562,
+            7.250278145695364
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7323466666666659,
+            0.7494733333333327,
+            0.7335333333333328
+          ],
+          "GT Power_0": [
+            0.11018666666666665,
+            0.10952666666666667,
+            0.11238000000000002
+          ],
+          "IA Power_0": [
+            6.853233333333333,
+            6.876586666666664,
+            6.825026666666666
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.181426666666663,
+            7.332706666666668,
+            7.191146666666667
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7907600000000005,
+            0.7918333333333338,
+            0.791741721854305
+          ],
+          "GT Power_0": [
+            0.2411133333333332,
+            0.24104000000000003,
+            0.24329801324503325
+          ],
+          "IA Power_0": [
+            7.104546666666665,
+            7.05552,
+            7.180304635761586
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.659366666666665,
+            7.574873333333336,
+            7.686046357615899
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7420066666666665,
+            0.8330671140939596,
+            0.7382733333333329
+          ],
+          "GT Power_0": [
+            0.11935333333333344,
+            0.11800000000000005,
+            0.11714000000000006
+          ],
+          "IA Power_0": [
+            7.228813333333334,
+            9.00703355704698,
+            6.927320000000004
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.577066666666666,
+            10.10604026845637,
+            7.283740000000001
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            149,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD153-A9",
+      "number": 4413,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.624476821192053,
+            0.5973533333333331,
+            0.6106199999999997
+          ],
+          "GT Power_0": [
+            0.014390728476821196,
+            0.013566666666666671,
+            0.014066666666666672
+          ],
+          "IA Power_0": [
+            3.240152317880797,
+            3.155720000000001,
+            3.223133333333334
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            3.822642384105959,
+            3.4142,
+            3.5858466666666673
+          ],
+          "name": "Basic",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.735413333333333,
+            0.755393333333333,
+            0.7361721854304634
+          ],
+          "GT Power_0": [
+            0.10534000000000004,
+            0.10278666666666668,
+            0.10248344370860928
+          ],
+          "IA Power_0": [
+            5.5686399999999985,
+            5.923846666666669,
+            5.630317880794701
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            5.959653333333333,
+            6.497173333333331,
+            6.003476821192053
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7337814569536419,
+            0.7342933333333331,
+            0.7334066666666662
+          ],
+          "GT Power_0": [
+            0.10133112582781466,
+            0.09672666666666667,
+            0.09941333333333337
+          ],
+          "IA Power_0": [
+            5.552397350993379,
+            5.769040000000003,
+            5.624593333333334
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            5.9119801324503305,
+            6.149806666666667,
+            5.9704066666666655
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7917400000000006,
+            0.8069000000000007,
+            0.8141866666666666
+          ],
+          "GT Power_0": [
+            0.2189400000000001,
+            0.21804666666666678,
+            0.21546666666666667
+          ],
+          "IA Power_0": [
+            5.699480000000001,
+            5.73738,
+            5.858293333333333
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.264213333333334,
+            6.445053333333334,
+            6.47042
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7387350993377481,
+            0.7536026490066224,
+            0.7420800000000001
+          ],
+          "GT Power_0": [
+            0.10494701986754967,
+            0.10843046357615894,
+            0.10808666666666669
+          ],
+          "IA Power_0": [
+            5.848450331125829,
+            5.6706953642384095,
+            5.688566666666665
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.245596026490065,
+            6.104463576158938,
+            6.040660000000001
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            151,
+            151,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD177-A9",
+      "number": 4412,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.59994,
+            0.5995066666666663,
+            0.5988133333333329
+          ],
+          "GT Power_0": [
+            0.014306666666666665,
+            0.014359999999999996,
+            0.015293333333333334
+          ],
+          "IA Power_0": [
+            4.3300800000000015,
+            3.99442,
+            3.923100000000001
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.560913333333332,
+            4.223160000000003,
+            4.168806666666666
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7357466666666663,
+            0.7345133333333331,
+            0.7359801324503306
+          ],
+          "GT Power_0": [
+            0.10782666666666668,
+            0.10581999999999998,
+            0.11098013245033117
+          ],
+          "IA Power_0": [
+            6.9960666666666675,
+            6.9628466666666675,
+            7.088788079470195
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.301366666666667,
+            7.292259999999996,
+            7.467172185430463
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7408211920529797,
+            0.731913333333333,
+            0.7338466666666662
+          ],
+          "GT Power_0": [
+            0.1079403973509934,
+            0.11175333333333337,
+            0.10845333333333332
+          ],
+          "IA Power_0": [
+            6.971364238410596,
+            7.0521600000000015,
+            7.333506666666666
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.425483443708607,
+            7.369753333333332,
+            7.662046666666667
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.8058266666666672,
+            0.8060533333333338,
+            0.8144466666666673
+          ],
+          "GT Power_0": [
+            0.24334000000000008,
+            0.24485333333333328,
+            0.2462066666666666
+          ],
+          "IA Power_0": [
+            7.302733333333337,
+            7.2957333333333345,
+            7.926739999999997
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.93939333333334,
+            8.009006666666663,
+            8.805946666666669
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7563533333333328,
+            0.7588533333333329,
+            0.7395866666666665
+          ],
+          "GT Power_0": [
+            0.11959999999999998,
+            0.12053333333333334,
+            0.12199333333333333
+          ],
+          "IA Power_0": [
+            7.092066666666672,
+            7.076373333333335,
+            7.4451800000000015
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.554313333333333,
+            7.614919999999997,
+            7.79510666666667
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD147-A9",
+      "number": 4411,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6079266666666668,
+            0.5983178807947016,
+            0.5987019867549664
+          ],
+          "GT Power_0": [
+            0.04690666666666665,
+            0.01633112582781457,
+            0.015496688741721854
+          ],
+          "IA Power_0": [
+            3.390586666666666,
+            3.248668874172186,
+            3.233013245033115
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            3.7128133333333326,
+            3.512721854304636,
+            3.475814569536422
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7635333333333332,
+            0.7440066666666663,
+            0.7508211920529799
+          ],
+          "GT Power_0": [
+            0.1346933333333334,
+            0.13885333333333327,
+            0.14380794701986754
+          ],
+          "IA Power_0": [
+            6.007300000000004,
+            5.777486666666667,
+            5.760443708609273
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.797266666666663,
+            6.185986666666665,
+            6.300231788079471
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.736278145695364,
+            0.7386933333333325,
+            0.7464733333333331
+          ],
+          "GT Power_0": [
+            0.13703311258278147,
+            0.13840000000000008,
+            0.13461333333333333
+          ],
+          "IA Power_0": [
+            6.090854304635761,
+            6.156773333333333,
+            5.7690933333333305
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.458940397350995,
+            6.575333333333331,
+            6.200073333333335
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7947066666666669,
+            0.792260000000001,
+            0.7928800000000006
+          ],
+          "GT Power_0": [
+            0.26646000000000003,
+            0.2677466666666665,
+            0.2687066666666667
+          ],
+          "IA Power_0": [
+            6.410380000000003,
+            5.964673333333336,
+            6.0025933333333334
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.966280000000003,
+            6.5284800000000045,
+            6.577493333333334
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7483133333333333,
+            0.7412715231788076,
+            0.7407199999999997
+          ],
+          "GT Power_0": [
+            0.14589333333333332,
+            0.14235099337748347,
+            0.14175333333333337
+          ],
+          "IA Power_0": [
+            5.937826666666666,
+            5.864463576158946,
+            5.853486666666665
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.319346666666662,
+            6.2545430463576155,
+            6.2650999999999994
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD179-A9",
+      "number": 4410,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.600344370860927,
+            0.5978609271523174,
+            0.5986291390728475
+          ],
+          "GT Power_0": [
+            0.03394701986754965,
+            0.017158940397350993,
+            0.018066225165562916
+          ],
+          "IA Power_0": [
+            3.8787748344370874,
+            3.9157682119205304,
+            3.8322781456953656
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.123503311258277,
+            4.152059602649007,
+            4.08700662251656
+          ],
+          "name": "Basic",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7348666666666659,
+            0.7535894039735095,
+            0.7529933774834432
+          ],
+          "GT Power_0": [
+            0.1363999999999999,
+            0.13628476821192057,
+            0.14416556291390728
+          ],
+          "IA Power_0": [
+            6.699320000000003,
+            6.965410596026492,
+            6.878682119205297
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.120033333333334,
+            7.49549668874172,
+            7.3550794701986755
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7358543046357611,
+            0.7535430463576158,
+            0.7342516556291391
+          ],
+          "GT Power_0": [
+            0.13927152317880787,
+            0.13984768211920529,
+            0.13827152317880798
+          ],
+          "IA Power_0": [
+            6.729841059602647,
+            7.108231788079467,
+            6.785490066225163
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.156529801324503,
+            7.65672847682119,
+            7.172304635761591
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7903400000000006,
+            0.7915800000000004,
+            0.7904800000000005
+          ],
+          "GT Power_0": [
+            0.29209999999999997,
+            0.2957199999999999,
+            0.29843333333333333
+          ],
+          "IA Power_0": [
+            7.053586666666669,
+            7.043553333333335,
+            7.039986666666666
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.589819999999998,
+            7.593339999999999,
+            7.626019999999999
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7427549668874169,
+            0.7482599999999997,
+            0.7666400000000001
+          ],
+          "GT Power_0": [
+            0.14974172185430468,
+            0.15742666666666666,
+            0.1589066666666668
+          ],
+          "IA Power_0": [
+            7.236960264900662,
+            6.918493333333332,
+            6.859493333333335
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.6332119205298,
+            7.420340000000001,
+            7.603046666666666
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD133-A9",
+      "number": 4409,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6079271523178805,
+            0.6062847682119201,
+            0.6003112582781454
+          ],
+          "GT Power_0": [
+            0.04287417218543045,
+            0.016953642384105957,
+            0.01549006622516556
+          ],
+          "IA Power_0": [
+            3.463364238410595,
+            3.400920529801325,
+            3.4170860927152313
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            3.8298476821192056,
+            3.7323576158940406,
+            3.673192052980133
+          ],
+          "name": "Basic",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7361655629139073,
+            0.7390999999999996,
+            0.7358666666666664
+          ],
+          "GT Power_0": [
+            0.12678807947019877,
+            0.1271066666666667,
+            0.13443333333333335
+          ],
+          "IA Power_0": [
+            6.208099337748346,
+            5.946533333333332,
+            5.930220000000001
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.592145695364242,
+            6.357426666666668,
+            6.285893333333332
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7345799999999998,
+            0.7352781456953638,
+            0.6392200000000003
+          ],
+          "GT Power_0": [
+            0.1315600000000001,
+            0.12958940397350993,
+            0.5512866666666667
+          ],
+          "IA Power_0": [
+            6.025739999999998,
+            5.87666225165563,
+            6.03744
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.442273333333332,
+            6.290046357615895,
+            6.819306666666671
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7905761589403975,
+            0.8052582781456953,
+            0.7936800000000004
+          ],
+          "GT Power_0": [
+            0.260317880794702,
+            0.2574370860927152,
+            0.2629666666666666
+          ],
+          "IA Power_0": [
+            6.155900662251657,
+            6.140516556291387,
+            6.434153333333336
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.658410596026489,
+            6.723410596026492,
+            6.9726000000000035
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            151,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7436423841059597,
+            0.7678333333333328,
+            0.754213333333333
+          ],
+          "GT Power_0": [
+            0.14777483443708608,
+            0.13882,
+            0.13862666666666662
+          ],
+          "IA Power_0": [
+            6.22066225165563,
+            6.0835199999999965,
+            6.2228733333333315
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.578503311258275,
+            6.896606666666667,
+            6.663846666666666
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD143-A9",
+      "number": 4408,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6178199999999996,
+            0.5992466666666664,
+            0.6126291390728472
+          ],
+          "GT Power_0": [
+            0.04547333333333332,
+            0.014740000000000005,
+            0.014980132450331128
+          ],
+          "IA Power_0": [
+            3.7627599999999983,
+            3.278766666666667,
+            3.2478940397350993
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.104313333333335,
+            3.541273333333333,
+            3.612536423841059
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7366291390728475,
+            0.7348066666666664,
+            0.7371192052980131
+          ],
+          "GT Power_0": [
+            0.11618543046357618,
+            0.11490666666666667,
+            0.11757615894039739
+          ],
+          "IA Power_0": [
+            5.570814569536421,
+            5.862966666666669,
+            5.805668874172183
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            5.977688741721856,
+            6.230953333333334,
+            6.196304635761591
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            151,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.8552483221476508,
+            0.7359599999999996,
+            0.7357284768211919
+          ],
+          "GT Power_0": [
+            0.11381208053691275,
+            0.11838000000000003,
+            0.1160662251655629
+          ],
+          "IA Power_0": [
+            9.234000000000002,
+            5.9832866666666655,
+            5.646556291390729
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            9.67611409395973,
+            6.305573333333336,
+            6.045880794701986
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            149,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7923066666666673,
+            0.7918940397350995,
+            0.7915933333333338
+          ],
+          "GT Power_0": [
+            0.24647999999999995,
+            0.24873509933774846,
+            0.24704666666666653
+          ],
+          "IA Power_0": [
+            5.864646666666668,
+            5.9560264900662245,
+            5.868139999999996
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.410026666666668,
+            6.455456953642385,
+            6.423053333333335
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7479006622516556,
+            0.7408079470198675,
+            0.741960264900662
+          ],
+          "GT Power_0": [
+            0.12862251655629145,
+            0.12599999999999995,
+            0.12443708609271532
+          ],
+          "IA Power_0": [
+            5.790496688741721,
+            5.714516556291392,
+            5.798701986754966
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.258483443708611,
+            6.152529801324504,
+            6.1842185430463585
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD125-A9",
+      "number": 4407,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6001390728476818,
+            0.6000666666666661,
+            0.5974999999999996
+          ],
+          "GT Power_0": [
+            0.0426026490066225,
+            0.017220000000000003,
+            0.015013333333333335
+          ],
+          "IA Power_0": [
+            4.497735099337747,
+            4.436400000000001,
+            4.339179999999996
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.727225165562913,
+            4.651913333333334,
+            4.545146666666664
+          ],
+          "name": "Basic",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7355799999999996,
+            0.7645999999999998,
+            0.7336599999999999
+          ],
+          "GT Power_0": [
+            0.11545333333333334,
+            0.11792666666666664,
+            0.11815999999999997
+          ],
+          "IA Power_0": [
+            7.988326666666668,
+            8.201200000000002,
+            7.628180000000005
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            8.31296666666667,
+            8.731486666666667,
+            7.969086666666662
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7360533333333329,
+            0.7476225165562912,
+            0.7404304635761582
+          ],
+          "GT Power_0": [
+            0.11702,
+            0.11973509933774838,
+            0.11600662251655625
+          ],
+          "IA Power_0": [
+            7.991520000000003,
+            7.628827814569532,
+            7.6606821192053
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            8.343340000000001,
+            8.073576158940396,
+            8.091827814569541
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7907466666666675,
+            0.874556291390729,
+            0.806553333333334
+          ],
+          "GT Power_0": [
+            0.25394666666666665,
+            0.254701986754967,
+            0.25316
+          ],
+          "IA Power_0": [
+            7.952333333333333,
+            11.297629139072844,
+            7.932240000000002
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            8.445239999999997,
+            11.823218543046355,
+            8.578453333333341
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.741576158940397,
+            0.7386666666666662,
+            0.7434333333333333
+          ],
+          "GT Power_0": [
+            0.1252980132450331,
+            0.12178666666666667,
+            0.12236000000000002
+          ],
+          "IA Power_0": [
+            7.7218741721854345,
+            7.681113333333336,
+            8.633906666666665
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            8.062079470198675,
+            8.05999333333333,
+            8.951359999999994
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD129-A9",
+      "number": 4406,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6067066666666666,
+            0.5996688741721853,
+            0.599573333333333
+          ],
+          "GT Power_0": [
+            0.03783999999999999,
+            0.013463576158940394,
+            0.012846666666666668
+          ],
+          "IA Power_0": [
+            3.463413333333333,
+            3.429278145695364,
+            3.7527533333333327
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            3.822139999999999,
+            3.6799470198675497,
+            4.000906666666665
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7551399999999998,
+            0.7525695364238404,
+            0.7691059602649004
+          ],
+          "GT Power_0": [
+            0.0879866666666667,
+            0.09259602649006622,
+            0.09134437086092714
+          ],
+          "IA Power_0": [
+            5.979939999999997,
+            6.056231788079471,
+            6.0611059602648965
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.465526666666669,
+            6.531682119205301,
+            6.94171523178808
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7346199999999992,
+            0.7349799999999993,
+            0.7479735099337745
+          ],
+          "GT Power_0": [
+            0.08908666666666669,
+            0.08805333333333336,
+            0.08635761589403973
+          ],
+          "IA Power_0": [
+            6.030340000000002,
+            6.285019999999996,
+            5.966662251655626
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.375053333333335,
+            6.631866666666669,
+            6.407728476821195
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.8083933333333335,
+            0.7915133333333336,
+            0.791853333333334
+          ],
+          "GT Power_0": [
+            0.20529999999999998,
+            0.21023999999999993,
+            0.2066733333333334
+          ],
+          "IA Power_0": [
+            6.194699999999999,
+            6.487633333333337,
+            6.180159999999998
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.738119999999999,
+            6.9683600000000006,
+            6.709126666666665
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7819133333333332,
+            0.739133333333333,
+            0.7405231788079469
+          ],
+          "GT Power_0": [
+            0.1096000000000001,
+            0.09435333333333339,
+            0.09617880794701987
+          ],
+          "IA Power_0": [
+            6.098253333333334,
+            6.396200000000002,
+            6.095357615894043
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.7171666666666665,
+            6.749126666666663,
+            6.453417218543047
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD128-A9",
+      "number": 4405,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6136666666666666,
+            0.5996866666666663,
+            0.5989133333333332
+          ],
+          "GT Power_0": [
+            0.03645333333333331,
+            0.014639999999999995,
+            0.01447333333333333
+          ],
+          "IA Power_0": [
+            4.847659999999998,
+            3.9104933333333336,
+            3.9054933333333355
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            5.089753333333335,
+            4.16132666666667,
+            4.1711066666666685
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7371399999999998,
+            0.7534866666666669,
+            0.7516490066225161
+          ],
+          "GT Power_0": [
+            0.11163333333333342,
+            0.11442666666666665,
+            0.11166887417218542
+          ],
+          "IA Power_0": [
+            7.227406666666667,
+            6.913993333333331,
+            6.84117880794702
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.564253333333338,
+            7.307033333333332,
+            7.349999999999998
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7363533333333331,
+            0.7377466666666664,
+            0.7350666666666663
+          ],
+          "GT Power_0": [
+            0.10927333333333335,
+            0.11279333333333336,
+            0.11538000000000001
+          ],
+          "IA Power_0": [
+            6.863553333333336,
+            6.935793333333331,
+            7.062840000000001
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.290586666666666,
+            7.2685933333333335,
+            7.4499333333333375
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7931125827814574,
+            0.8118333333333337,
+            0.7923245033112586
+          ],
+          "GT Power_0": [
+            0.24360264900662257,
+            0.2414333333333333,
+            0.24109271523178794
+          ],
+          "IA Power_0": [
+            7.113814569536425,
+            7.058840000000002,
+            7.515059602649003
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.636927152317882,
+            7.877833333333334,
+            7.990543046357611
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            151,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7415066666666666,
+            0.7394133333333331,
+            0.7418476821192049
+          ],
+          "GT Power_0": [
+            0.12027333333333333,
+            0.12186666666666665,
+            0.1208145695364239
+          ],
+          "IA Power_0": [
+            6.913353333333333,
+            6.924606666666666,
+            7.253410596026491
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.31502,
+            7.3052133333333344,
+            7.6124370860927115
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD162-A9",
+      "number": 4404,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6011066666666661,
+            0.6156399999999997,
+            0.6014866666666662
+          ],
+          "GT Power_0": [
+            0.015193333333333333,
+            0.015313333333333328,
+            0.01622666666666667
+          ],
+          "IA Power_0": [
+            3.241420000000001,
+            3.2372666666666667,
+            3.2676866666666666
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            3.529193333333335,
+            3.561326666666668,
+            3.5156999999999994
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7552533333333331,
+            0.7400066666666664,
+            0.7380933333333332
+          ],
+          "GT Power_0": [
+            0.13147333333333333,
+            0.1286533333333334,
+            0.12760000000000007
+          ],
+          "IA Power_0": [
+            5.773946666666668,
+            5.964219999999996,
+            5.719053333333335
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.29440666666667,
+            6.3508133333333365,
+            6.105026666666669
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7438066666666661,
+            0.745406666666666,
+            0.7368466666666668
+          ],
+          "GT Power_0": [
+            0.12927333333333332,
+            0.13821333333333327,
+            0.1295
+          ],
+          "IA Power_0": [
+            5.822093333333336,
+            6.027773333333334,
+            5.692519999999998
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.208806666666667,
+            6.502046666666665,
+            6.0711266666666655
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.794946666666667,
+            0.7926333333333336,
+            0.7914000000000001
+          ],
+          "GT Power_0": [
+            0.26418000000000014,
+            0.2674866666666668,
+            0.26256000000000007
+          ],
+          "IA Power_0": [
+            5.962233333333334,
+            5.924106666666664,
+            5.912319999999999
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.51388,
+            6.48788,
+            6.45741333333333
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7455165562913907,
+            0.7423774834437082,
+            0.7569133333333328
+          ],
+          "GT Power_0": [
+            0.1394900662251656,
+            0.1397814569536424,
+            0.13978666666666673
+          ],
+          "IA Power_0": [
+            6.107649006622523,
+            5.794774834437088,
+            5.788053333333332
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.500112582781458,
+            6.196152317880793,
+            6.314113333333335
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            151,
+            151,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD155-A9",
+      "number": 4403,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6017152317880791,
+            0.6124900662251654,
+            0.6126357615894036
+          ],
+          "GT Power_0": [
+            0.014139072847682115,
+            0.014397350993377482,
+            0.014735099337748345
+          ],
+          "IA Power_0": [
+            3.761794701986756,
+            3.971384105960264,
+            3.5848410596026494
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            3.992927152317881,
+            4.271900662251654,
+            3.907721854304637
+          ],
+          "name": "Basic",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7518599999999998,
+            0.7358999999999997,
+            0.7381788079470195
+          ],
+          "GT Power_0": [
+            0.12949333333333335,
+            0.11842666666666668,
+            0.11492052980132456
+          ],
+          "IA Power_0": [
+            6.292959999999999,
+            6.304859999999997,
+            6.350324503311261
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.867919999999998,
+            6.656326666666667,
+            6.709132450331127
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7373733333333331,
+            0.7381133333333331,
+            0.7520199999999996
+          ],
+          "GT Power_0": [
+            0.11248000000000007,
+            0.11458666666666673,
+            0.11172666666666664
+          ],
+          "IA Power_0": [
+            6.3044533333333295,
+            6.445586666666667,
+            6.391286666666668
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.674346666666666,
+            6.7938399999999985,
+            6.8745866666666675
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7931200000000006,
+            0.8187600000000006,
+            0.7921800000000003
+          ],
+          "GT Power_0": [
+            0.2413533333333333,
+            0.2422466666666667,
+            0.24196666666666677
+          ],
+          "IA Power_0": [
+            6.936433333333333,
+            6.638153333333334,
+            6.576380000000003
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.4577,
+            7.534973333333334,
+            7.13078
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7437999999999997,
+            0.7615266666666666,
+            0.7649072847682116
+          ],
+          "GT Power_0": [
+            0.11992666666666665,
+            0.1211133333333333,
+            0.11790728476821198
+          ],
+          "IA Power_0": [
+            6.772526666666666,
+            6.535986666666667,
+            6.4168278145695385
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.1492400000000025,
+            7.077153333333337,
+            7.053258278145694
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD182-A9",
+      "number": 4402,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6085099337748343,
+            0.6002466666666664,
+            0.6001266666666664
+          ],
+          "GT Power_0": [
+            0.03418543046357614,
+            0.013513333333333334,
+            0.013120000000000001
+          ],
+          "IA Power_0": [
+            3.3131059602649007,
+            3.2961666666666676,
+            3.2788533333333345
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            3.5848807947019874,
+            3.5493133333333335,
+            3.520986666666666
+          ],
+          "name": "Basic",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7592666666666663,
+            0.7627599999999998,
+            0.7388476821192048
+          ],
+          "GT Power_0": [
+            0.09758666666666668,
+            0.09830000000000005,
+            0.09396688741721855
+          ],
+          "IA Power_0": [
+            5.652166666666671,
+            6.0322266666666655,
+            5.747033112582783
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.201526666666665,
+            6.62217333333333,
+            6.101463576158941
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7479139072847681,
+            0.7378609271523178,
+            0.75154
+          ],
+          "GT Power_0": [
+            0.09180132450331123,
+            0.0898940397350993,
+            0.09287333333333334
+          ],
+          "IA Power_0": [
+            5.856026490066228,
+            5.969172185430465,
+            5.7440200000000035
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.209317880794699,
+            6.312807947019866,
+            6.144226666666668
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            151,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.796306666666667,
+            0.7936133333333341,
+            0.8037133333333341
+          ],
+          "GT Power_0": [
+            0.20484666666666668,
+            0.20167333333333326,
+            0.20286666666666672
+          ],
+          "IA Power_0": [
+            5.955779999999999,
+            5.947793333333336,
+            5.916233333333331
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.450973333333329,
+            6.427413333333334,
+            6.4989866666666645
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7572666666666666,
+            0.7439666666666664,
+            0.7431799999999997
+          ],
+          "GT Power_0": [
+            0.09616666666666672,
+            0.09678666666666669,
+            0.09728666666666673
+          ],
+          "IA Power_0": [
+            6.025080000000003,
+            5.819679999999999,
+            5.861913333333332
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.485793333333333,
+            6.15464666666667,
+            6.1732733333333325
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD181-A9",
+      "number": 4401,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.60224,
+            0.600456953642384,
+            0.6150799999999998
+          ],
+          "GT Power_0": [
+            0.03205999999999999,
+            0.014443708609271523,
+            0.014713333333333335
+          ],
+          "IA Power_0": [
+            4.169186666666667,
+            3.783470198675496,
+            4.4113400000000045
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.422246666666666,
+            4.0186754966887435,
+            4.743653333333333
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7373266666666667,
+            0.7371986754966886,
+            0.7565733333333332
+          ],
+          "GT Power_0": [
+            0.11448666666666668,
+            0.11378145695364236,
+            0.11239333333333335
+          ],
+          "IA Power_0": [
+            6.4768533333333345,
+            6.484794701986754,
+            6.913086666666668
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.841213333333335,
+            6.84439735099338,
+            7.424713333333334
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7379666666666663,
+            0.7557799999999998,
+            0.7380066666666666
+          ],
+          "GT Power_0": [
+            0.11349999999999995,
+            0.11050000000000004,
+            0.13060000000000005
+          ],
+          "IA Power_0": [
+            6.451106666666663,
+            6.63913333333333,
+            6.861040000000003
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.834366666666663,
+            7.152306666666662,
+            7.200113333333335
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7932866666666673,
+            0.8209200000000002,
+            0.794113333333334
+          ],
+          "GT Power_0": [
+            0.23650666666666667,
+            0.25453333333333333,
+            0.23684666666666648
+          ],
+          "IA Power_0": [
+            6.778073333333333,
+            6.812046666666664,
+            6.79214
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.282713333333336,
+            7.6407066666666665,
+            7.280666666666666
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7522733333333327,
+            0.7613973509933776,
+            0.7453046357615887
+          ],
+          "GT Power_0": [
+            0.11528666666666666,
+            0.11613907284768216,
+            0.12035099337748348
+          ],
+          "IA Power_0": [
+            6.625193333333333,
+            6.932125827814566,
+            6.576430463576156
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.038206666666668,
+            7.459582781456956,
+            6.966841059602649
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD163-A9",
+      "number": 4400,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.612794701986755,
+            0.5990198675496682,
+            0.5992052980132448
+          ],
+          "GT Power_0": [
+            0.041132450331125815,
+            0.015245033112582776,
+            0.014847682119205298
+          ],
+          "IA Power_0": [
+            3.920192052980132,
+            3.407423841059604,
+            3.4300596026490062
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.197741721854304,
+            3.6468807947019872,
+            3.69274834437086
+          ],
+          "name": "Basic",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7381399999999995,
+            0.738273333333333,
+            0.7338199999999996
+          ],
+          "GT Power_0": [
+            0.10475333333333336,
+            0.10168000000000003,
+            0.10607333333333333
+          ],
+          "IA Power_0": [
+            6.558646666666669,
+            6.120493333333335,
+            6.17192
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.886113333333338,
+            6.469686666666666,
+            6.452539999999999
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7472066666666665,
+            0.735253333333333,
+            0.7480533333333332
+          ],
+          "GT Power_0": [
+            0.09775333333333336,
+            0.09615333333333333,
+            0.0992
+          ],
+          "IA Power_0": [
+            6.4382999999999955,
+            6.110413333333332,
+            6.129639999999999
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.882686666666668,
+            6.464013333333332,
+            6.548146666666668
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.8248344370860932,
+            0.7921390728476826,
+            0.8019000000000007
+          ],
+          "GT Power_0": [
+            0.24773509933774834,
+            0.22675496688741742,
+            0.23309333333333346
+          ],
+          "IA Power_0": [
+            6.729794701986755,
+            6.38813907284768,
+            7.184846666666671
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.711145695364237,
+            6.902953642384106,
+            7.709353333333336
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            151,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7395999999999999,
+            0.7431986754966885,
+            0.7585799999999998
+          ],
+          "GT Power_0": [
+            0.10327333333333338,
+            0.10419867549668878,
+            0.10071999999999999
+          ],
+          "IA Power_0": [
+            6.261173333333331,
+            6.324642384105958,
+            6.631426666666664
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.59974666666667,
+            6.638708609271525,
+            7.116466666666665
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD119-A9",
+      "number": 4399,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6300728476821195,
+            0.7267852348993288,
+            0.593437086092715
+          ],
+          "GT Power_0": [
+            0.022735099337748338,
+            0.025040268456375837,
+            0.021086092715231788
+          ],
+          "IA Power_0": [
+            5.020801324503309,
+            9.031651006711405,
+            6.986596026490062
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            5.261384105960264,
+            9.269409395973152,
+            7.2952450331125815
+          ],
+          "name": "Basic",
+          "samples": [
+            151,
+            149,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7414370860927151,
+            0.7210728476821188,
+            0.7213708609271516
+          ],
+          "GT Power_0": [
+            0.12023841059602645,
+            0.12119867549668885,
+            0.1187880794701987
+          ],
+          "IA Power_0": [
+            9.104807947019872,
+            9.246609271523178,
+            9.363576158940399
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            9.728092715231785,
+            9.656947019867545,
+            9.795509933774829
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7204172185430462,
+            0.7160198675496683,
+            0.7351324503311253
+          ],
+          "GT Power_0": [
+            0.1190728476821192,
+            0.11818543046357619,
+            0.12176158940397351
+          ],
+          "IA Power_0": [
+            9.288317880794699,
+            9.693112582781456,
+            9.590410596026489
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            9.645953642384113,
+            10.155192052980135,
+            10.337781456953646
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.8045266666666672,
+            0.7977399999999997,
+            0.7987483443708616
+          ],
+          "GT Power_0": [
+            0.27071333333333336,
+            0.27545333333333344,
+            0.2863907284768213
+          ],
+          "IA Power_0": [
+            9.622993333333337,
+            13.557466666666667,
+            11.136900662251653
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            10.240133333333333,
+            14.086899999999998,
+            11.72481456953642
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7417400000000002,
+            0.7404333333333328,
+            0.7409199999999998
+          ],
+          "GT Power_0": [
+            0.1286733333333334,
+            0.12436000000000004,
+            0.12499333333333337
+          ],
+          "IA Power_0": [
+            6.949306666666668,
+            7.094466666666664,
+            7.270706666666662
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.349599999999996,
+            7.428026666666669,
+            7.693213333333334
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD172-A9",
+      "number": 4398,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6070666666666664,
+            0.6125761589403972,
+            0.5986026490066221
+          ],
+          "GT Power_0": [
+            0.02794666666666666,
+            0.013741721854304634,
+            0.013986754966887418
+          ],
+          "IA Power_0": [
+            3.2159733333333325,
+            3.2996556291390733,
+            3.0733377483443705
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            3.558739999999999,
+            3.642152317880794,
+            3.3139403973509927
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7520266666666666,
+            0.7406599999999995,
+            0.7357880794701983
+          ],
+          "GT Power_0": [
+            0.09635333333333337,
+            0.09744000000000003,
+            0.09517218543046356
+          ],
+          "IA Power_0": [
+            5.369700000000003,
+            5.891186666666665,
+            5.4079205298013235
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            5.875900000000001,
+            6.264573333333333,
+            5.7190198675496715
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7367682119205299,
+            0.7367666666666666,
+            0.7376066666666665
+          ],
+          "GT Power_0": [
+            0.09764238410596031,
+            0.09686000000000003,
+            0.09549333333333333
+          ],
+          "IA Power_0": [
+            5.352132450331126,
+            5.617753333333334,
+            5.325619999999998
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            5.724509933774834,
+            6.023633333333333,
+            5.679273333333333
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.8064400000000004,
+            0.80658940397351,
+            0.815423841059603
+          ],
+          "GT Power_0": [
+            0.2136866666666668,
+            0.2199801324503312,
+            0.21650331125827815
+          ],
+          "IA Power_0": [
+            5.609640000000002,
+            5.665754966887417,
+            5.547139072847682
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.2596133333333315,
+            6.290894039735098,
+            6.4679933774834435
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7572913907284762,
+            0.7667733333333334,
+            0.7423576158940391
+          ],
+          "GT Power_0": [
+            0.10378807947019868,
+            0.10087333333333337,
+            0.1010066225165563
+          ],
+          "IA Power_0": [
+            5.411304635761589,
+            5.8228333333333335,
+            5.417410596026489
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            5.92925165562914,
+            6.315493333333332,
+            5.825172185430462
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            151,
+            150,
+            151
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD174-A9",
+      "number": 4397,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.5994503311258276,
+            0.6162980132450327,
+            0.5999205298013239
+          ],
+          "GT Power_0": [
+            0.016099337748344367,
+            0.017894039735099336,
+            0.017112582781456952
+          ],
+          "IA Power_0": [
+            3.9159337748344396,
+            3.927185430463577,
+            3.926470198675498
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.156033112582779,
+            4.2500331125827815,
+            4.170198675496687
+          ],
+          "name": "Basic",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7356291390728471,
+            0.7352133333333329,
+            0.7362052980132445
+          ],
+          "GT Power_0": [
+            0.12984105960264905,
+            0.13126000000000004,
+            0.12657615894039734
+          ],
+          "IA Power_0": [
+            6.8133973509933785,
+            7.11634,
+            6.878960264900662
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.22605298013245,
+            7.492540000000001,
+            7.250543046357618
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            151,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7439199999999996,
+            0.7344199999999995,
+            0.7536533333333325
+          ],
+          "GT Power_0": [
+            0.1271666666666667,
+            0.12766000000000005,
+            0.1278733333333334
+          ],
+          "IA Power_0": [
+            6.873979999999999,
+            7.20756,
+            6.9143399999999975
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.301953333333335,
+            7.562859999999999,
+            7.425940000000001
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.8073066666666676,
+            0.7916026490066229,
+            0.7994039735099345
+          ],
+          "GT Power_0": [
+            0.27402666666666675,
+            0.27319205298013255,
+            0.27472847682119195
+          ],
+          "IA Power_0": [
+            7.231426666666663,
+            7.440635761589402,
+            7.236774834437087
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.9920333333333335,
+            8.040549668874176,
+            7.876092715231787
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7401589403973508,
+            0.7386933333333328,
+            0.7496400000000004
+          ],
+          "GT Power_0": [
+            0.14031125827814572,
+            0.14138,
+            0.13667333333333334
+          ],
+          "IA Power_0": [
+            6.919006622516554,
+            7.04506,
+            7.022786666666668
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.315887417218543,
+            7.4050933333333315,
+            7.421253333333328
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD145-A9",
+      "number": 4396,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6096799999999996,
+            0.6017218543046354,
+            0.6001599999999998
+          ],
+          "GT Power_0": [
+            0.03313333333333331,
+            0.013562913907284766,
+            0.013813333333333334
+          ],
+          "IA Power_0": [
+            3.391740000000001,
+            3.3996490066225173,
+            3.327946666666666
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            3.7640000000000002,
+            3.656311258278146,
+            3.578546666666666
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7382847682119205,
+            0.7546754966887417,
+            0.7375999999999997
+          ],
+          "GT Power_0": [
+            0.10054304635761595,
+            0.10110596026490065,
+            0.10312000000000003
+          ],
+          "IA Power_0": [
+            5.970947019867549,
+            5.667834437086095,
+            5.701613333333333
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.363006622516559,
+            6.121920529801324,
+            6.050079999999998
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            151,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7459,
+            0.7350264900662249,
+            0.7506953642384103
+          ],
+          "GT Power_0": [
+            0.09942666666666672,
+            0.09857615894039737,
+            0.10018543046357614
+          ],
+          "IA Power_0": [
+            6.054820000000001,
+            5.711112582781458,
+            5.7376556291390735
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.497066666666665,
+            6.061834437086093,
+            6.244807947019865
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.8067533333333337,
+            0.8074133333333333,
+            0.819606666666667
+          ],
+          "GT Power_0": [
+            0.23433333333333328,
+            0.22028666666666666,
+            0.21702666666666665
+          ],
+          "IA Power_0": [
+            6.070046666666664,
+            6.026246666666667,
+            6.339153333333334
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.598513333333331,
+            6.651139999999997,
+            6.963946666666668
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7662715231788076,
+            0.7576466666666665,
+            0.7424799999999997
+          ],
+          "GT Power_0": [
+            0.10500000000000004,
+            0.11947333333333338,
+            0.10423333333333334
+          ],
+          "IA Power_0": [
+            5.7465695364238405,
+            5.830459999999999,
+            6.009593333333331
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.2604635761589424,
+            6.263066666666666,
+            6.3942533333333325
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD157-A9",
+      "number": 4395,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6013245033112581,
+            0.6005298013245028,
+            0.6032715231788078
+          ],
+          "GT Power_0": [
+            0.015821192052980125,
+            0.015052980132450326,
+            0.015655629139072844
+          ],
+          "IA Power_0": [
+            3.75685430463576,
+            3.703099337748344,
+            3.832079470198675
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            3.985841059602648,
+            3.927774834437084,
+            4.037900662251656
+          ],
+          "name": "Basic",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7433576158940395,
+            0.7464799999999996,
+            0.7370933333333329
+          ],
+          "GT Power_0": [
+            0.12051655629139073,
+            0.12599333333333335,
+            0.12393333333333326
+          ],
+          "IA Power_0": [
+            6.5378675496688725,
+            6.797653333333329,
+            6.456813333333334
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.888165562913911,
+            7.332793333333334,
+            6.822500000000001
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7340794701986751,
+            0.7348476821192047,
+            0.7359602649006616
+          ],
+          "GT Power_0": [
+            0.1234569536423842,
+            0.12788079470198674,
+            0.12132450331125832
+          ],
+          "IA Power_0": [
+            6.365364238410596,
+            6.904966887417218,
+            6.527456953642383
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.735119205298014,
+            7.207827814569537,
+            6.892225165562914
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7911000000000005,
+            0.8013466666666671,
+            0.7923066666666672
+          ],
+          "GT Power_0": [
+            0.2547933333333334,
+            0.25505333333333335,
+            0.2563266666666667
+          ],
+          "IA Power_0": [
+            6.833700000000002,
+            6.78686,
+            6.778266666666666
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.377153333333332,
+            7.460673333333336,
+            7.283953333333337
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7422999999999996,
+            0.7612333333333329,
+            0.7536999999999995
+          ],
+          "GT Power_0": [
+            0.1279866666666666,
+            0.12833999999999993,
+            0.13058666666666666
+          ],
+          "IA Power_0": [
+            6.959159999999997,
+            6.580066666666667,
+            6.583699999999999
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.326099999999999,
+            7.14358,
+            7.017679999999998
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD154-A9",
+      "number": 4394,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6045,
+            0.5987682119205294,
+            0.600039735099337
+          ],
+          "GT Power_0": [
+            0.04585333333333331,
+            0.017609271523178805,
+            0.01719867549668874
+          ],
+          "IA Power_0": [
+            3.913686666666666,
+            3.6686092715231804,
+            3.7299536423841078
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.2592533333333344,
+            3.900761589403971,
+            3.9662582781456943
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7343443708609276,
+            0.7642799999999997,
+            0.731886666666666
+          ],
+          "GT Power_0": [
+            0.13958940397350994,
+            0.1393866666666667,
+            0.13632666666666673
+          ],
+          "IA Power_0": [
+            6.703205298013242,
+            6.451653333333334,
+            6.354139999999998
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.1171788079470195,
+            7.195646666666665,
+            6.773260000000003
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.731576158940397,
+            0.7353112582781455,
+            0.7338013245033109
+          ],
+          "GT Power_0": [
+            0.1346887417218543,
+            0.13394701986754967,
+            0.13586092715231787
+          ],
+          "IA Power_0": [
+            6.338827814569538,
+            6.535304635761588,
+            6.733430463576158
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.748311258278145,
+            6.924827814569534,
+            7.119913907284767
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7892266666666673,
+            0.7889933774834442,
+            0.7889006622516558
+          ],
+          "GT Power_0": [
+            0.2827733333333333,
+            0.2873112582781457,
+            0.2878874172185431
+          ],
+          "IA Power_0": [
+            6.757886666666668,
+            6.800192052980134,
+            6.968013245033111
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.3449599999999995,
+            7.342112582781459,
+            7.5360331125827775
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7389733333333331,
+            0.7437733333333331,
+            0.7393245033112582
+          ],
+          "GT Power_0": [
+            0.1439133333333333,
+            0.14048000000000005,
+            0.1448278145695364
+          ],
+          "IA Power_0": [
+            6.5262733333333305,
+            6.580046666666668,
+            6.839410596026495
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.851133333333332,
+            7.059839999999998,
+            7.235026490066227
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD177-A9",
+      "number": 4393,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6070866666666664,
+            0.6163999999999996,
+            0.6021799999999996
+          ],
+          "GT Power_0": [
+            0.04237999999999999,
+            0.014686666666666669,
+            0.013926666666666667
+          ],
+          "IA Power_0": [
+            4.209886666666666,
+            4.070693333333333,
+            4.423926666666668
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.5664266666666675,
+            4.406993333333332,
+            4.6345866666666655
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.8423112582781458,
+            0.7358999999999993,
+            0.7368724832214766
+          ],
+          "GT Power_0": [
+            0.10805298013245039,
+            0.11046000000000002,
+            0.11217449664429531
+          ],
+          "IA Power_0": [
+            19.237145695364227,
+            6.935373333333332,
+            7.371456375838927
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            19.48021854304635,
+            7.270006666666668,
+            7.685020134228191
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            151,
+            150,
+            149
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7356199999999998,
+            0.7390066666666661,
+            0.7373333333333332
+          ],
+          "GT Power_0": [
+            0.10653333333333337,
+            0.11170000000000009,
+            0.10872
+          ],
+          "IA Power_0": [
+            6.888893333333331,
+            7.641373333333334,
+            6.919233333333334
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.26986666666667,
+            8.007460000000002,
+            7.2913200000000025
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7914304635761598,
+            0.7994866666666673,
+            0.7904933333333334
+          ],
+          "GT Power_0": [
+            0.24409933774834444,
+            0.24640666666666666,
+            0.24773333333333325
+          ],
+          "IA Power_0": [
+            7.304754966887421,
+            7.644080000000002,
+            7.260080000000001
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.790026490066229,
+            8.143213333333334,
+            7.784406666666672
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7747733333333329,
+            0.7416133333333333,
+            0.7522000000000003
+          ],
+          "GT Power_0": [
+            0.12485333333333337,
+            0.11720666666666661,
+            0.11554000000000002
+          ],
+          "IA Power_0": [
+            7.0855733333333335,
+            7.491566666666674,
+            7.107993333333331
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            8.036686666666668,
+            7.83644,
+            7.615173333333336
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD125-A9",
+      "number": 4392,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6093533333333334,
+            0.6140397350993375,
+            0.6003377483443705
+          ],
+          "GT Power_0": [
+            0.039986666666666636,
+            0.015463576158940397,
+            0.016788079470198676
+          ],
+          "IA Power_0": [
+            4.600446666666665,
+            4.765602649006622,
+            4.373860927152318
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            5.007420000000002,
+            5.136827814569535,
+            4.604198675496689
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.754635761589404,
+            0.7432666666666667,
+            0.7387466666666667
+          ],
+          "GT Power_0": [
+            0.1139470198675497,
+            0.11325333333333336,
+            0.11381333333333335
+          ],
+          "IA Power_0": [
+            7.71937748344371,
+            8.189499999999999,
+            7.5949199999999975
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            8.309867549668876,
+            8.521566666666661,
+            7.942826666666671
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7381466666666664,
+            0.7390333333333331,
+            0.7384333333333334
+          ],
+          "GT Power_0": [
+            0.11061333333333337,
+            0.10962666666666673,
+            0.10965333333333338
+          ],
+          "IA Power_0": [
+            8.039753333333335,
+            7.7239200000000015,
+            7.592293333333332
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            8.346046666666659,
+            8.060106666666664,
+            7.937353333333334
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.8113466666666667,
+            0.8002200000000005,
+            0.7955761589403976
+          ],
+          "GT Power_0": [
+            0.24683333333333318,
+            0.2452200000000001,
+            0.2441721854304637
+          ],
+          "IA Power_0": [
+            8.341866666666666,
+            8.324726666666669,
+            8.104211920529805
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            9.06201333333333,
+            8.785146666666671,
+            8.610728476821194
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7604437086092716,
+            0.7433841059602652,
+            0.742397350993377
+          ],
+          "GT Power_0": [
+            0.12532450331125825,
+            0.12050331125827818,
+            0.12098013245033111
+          ],
+          "IA Power_0": [
+            7.766774834437087,
+            7.792814569536421,
+            8.23237748344371
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            8.447331125827814,
+            8.151973509933773,
+            8.592264900662247
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD123-A9",
+      "number": 4390,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6067333333333328,
+            0.6000662251655625,
+            0.6007152317880792
+          ],
+          "GT Power_0": [
+            0.035906666666666635,
+            0.015728476821192054,
+            0.015827814569536424
+          ],
+          "IA Power_0": [
+            4.144726666666667,
+            3.8104768211920543,
+            3.7651456953642386
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.505300000000004,
+            4.035807947019866,
+            4.032291390728476
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7551333333333332,
+            0.738443708609271,
+            0.7376133333333328
+          ],
+          "GT Power_0": [
+            0.12263333333333333,
+            0.12283443708609272,
+            0.11830666666666668
+          ],
+          "IA Power_0": [
+            7.161446666666667,
+            6.685185430463576,
+            6.784113333333335
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.59494666666667,
+            7.083662251655629,
+            7.143620000000001
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7367466666666662,
+            0.736344370860927,
+            0.7356887417218537
+          ],
+          "GT Power_0": [
+            0.11828666666666673,
+            0.12119867549668865,
+            0.11743046357615898
+          ],
+          "IA Power_0": [
+            6.682453333333334,
+            6.75092715231788,
+            7.071456953642385
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.056826666666666,
+            7.112238410596024,
+            7.447158940397352
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7933774834437088,
+            0.7931721854304637,
+            0.7935827814569536
+          ],
+          "GT Power_0": [
+            0.2530860927152318,
+            0.26147019867549676,
+            0.25098675496688744
+          ],
+          "IA Power_0": [
+            7.031754966887417,
+            7.081821192052983,
+            7.346715231788076
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.543437086092715,
+            7.573781456953639,
+            7.875377483443706
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7437483443708607,
+            0.7488278145695363,
+            0.7596887417218542
+          ],
+          "GT Power_0": [
+            0.13031125827814563,
+            0.12858940397350999,
+            0.12907284768211916
+          ],
+          "IA Power_0": [
+            6.870238410596028,
+            6.995125827814567,
+            7.656443708609272
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.232549668874171,
+            7.364781456953643,
+            8.074158940397355
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD128-A9",
+      "number": 4389,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6076999999999999,
+            0.6001733333333333,
+            0.5995733333333333
+          ],
+          "GT Power_0": [
+            0.034926666666666654,
+            0.014453333333333332,
+            0.014353333333333336
+          ],
+          "IA Power_0": [
+            3.9927266666666665,
+            3.9169866666666673,
+            4.272626666666666
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.2869333333333355,
+            4.146966666666666,
+            4.500353333333332
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7525133333333329,
+            0.7529799999999996,
+            0.7375799999999993
+          ],
+          "GT Power_0": [
+            0.1089866666666667,
+            0.10720000000000003,
+            0.11096666666666671
+          ],
+          "IA Power_0": [
+            6.831579999999999,
+            6.873279999999999,
+            6.853726666666668
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.283733333333336,
+            7.282126666666667,
+            7.193479999999999
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7537599999999995,
+            0.7522466666666667,
+            0.7384599999999997
+          ],
+          "GT Power_0": [
+            0.10603333333333329,
+            0.11983333333333336,
+            0.10567333333333333
+          ],
+          "IA Power_0": [
+            6.850713333333331,
+            7.1826733333333355,
+            6.950813333333331
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.350073333333338,
+            7.714426666666662,
+            7.231553333333333
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.8079602649006626,
+            0.802953333333334,
+            0.791506666666667
+          ],
+          "GT Power_0": [
+            0.2346622516556292,
+            0.23754666666666666,
+            0.23678666666666676
+          ],
+          "IA Power_0": [
+            7.204443708609272,
+            7.4660866666666665,
+            7.095913333333335
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.8895894039735115,
+            8.023173333333332,
+            7.614913333333332
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7424799999999995,
+            0.7448733333333333,
+            0.7427086092715229
+          ],
+          "GT Power_0": [
+            0.11262666666666671,
+            0.11221333333333336,
+            0.11345695364238415
+          ],
+          "IA Power_0": [
+            6.891693333333336,
+            7.533946666666667,
+            7.0137086092715215
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.260906666666665,
+            7.8914066666666685,
+            7.314947019867551
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD177-A9",
+      "number": 4388,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6062733333333331,
+            0.6010599999999997,
+            0.6005364238410595
+          ],
+          "GT Power_0": [
+            0.04202666666666666,
+            0.013873333333333333,
+            0.015026490066225166
+          ],
+          "IA Power_0": [
+            3.993159999999998,
+            3.9179266666666663,
+            3.929443708609271
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.276353333333334,
+            4.164553333333333,
+            4.178139072847683
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.757233333333333,
+            0.7529066666666666,
+            0.7404799999999998
+          ],
+          "GT Power_0": [
+            0.10716000000000006,
+            0.10584,
+            0.10296000000000002
+          ],
+          "IA Power_0": [
+            6.722919999999998,
+            7.115346666666669,
+            7.072880000000001
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.597213333333334,
+            7.6167399999999965,
+            7.453933333333328
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7363133333333329,
+            0.7731599999999995,
+            0.7530066666666664
+          ],
+          "GT Power_0": [
+            0.10884666666666667,
+            0.10655333333333332,
+            0.10826000000000002
+          ],
+          "IA Power_0": [
+            6.731120000000001,
+            8.099739999999999,
+            6.789159999999996
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.120400000000001,
+            8.572266666666666,
+            7.2989600000000046
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.8203800000000006,
+            0.7944666666666667,
+            0.7948533333333335
+          ],
+          "GT Power_0": [
+            0.242346666666667,
+            0.2416666666666666,
+            0.23984000000000005
+          ],
+          "IA Power_0": [
+            7.23595333333333,
+            7.21897333333333,
+            7.163633333333331
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.885846666666665,
+            7.724606666666668,
+            7.698206666666667
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7445364238410594,
+            0.76412,
+            0.7413733333333328
+          ],
+          "GT Power_0": [
+            0.11605960264900661,
+            0.12441999999999998,
+            0.11706000000000003
+          ],
+          "IA Power_0": [
+            7.322019867549668,
+            7.007213333333335,
+            6.914186666666669
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.671801324503312,
+            7.685006666666664,
+            7.252266666666666
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD164-A9",
+      "number": 4387,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6086599999999996,
+            0.6125466666666668,
+            0.6149470198675495
+          ],
+          "GT Power_0": [
+            0.03295999999999999,
+            0.014773333333333334,
+            0.015059602649006623
+          ],
+          "IA Power_0": [
+            3.8010266666666683,
+            4.014073333333332,
+            3.720867549668875
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.132746666666666,
+            4.31715333333333,
+            4.042536423841059
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7388145695364233,
+            0.7382266666666665,
+            0.7517417218543045
+          ],
+          "GT Power_0": [
+            0.1255827814569536,
+            0.12664666666666657,
+            0.12917880794701986
+          ],
+          "IA Power_0": [
+            6.439900662251659,
+            6.426793333333332,
+            6.396781456953642
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.823139072847683,
+            6.794813333333333,
+            6.909125827814571
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            151,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.73914,
+            0.7569199999999998,
+            0.7541599999999999
+          ],
+          "GT Power_0": [
+            0.12952000000000005,
+            0.1277466666666667,
+            0.1289733333333334
+          ],
+          "IA Power_0": [
+            6.7384,
+            6.6038733333333335,
+            6.4549133333333355
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.135139999999995,
+            7.119873333333332,
+            6.890533333333336
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7927800000000008,
+            0.8072266666666671,
+            0.8134400000000007
+          ],
+          "GT Power_0": [
+            0.26199999999999996,
+            0.2664666666666667,
+            0.26385333333333344
+          ],
+          "IA Power_0": [
+            7.012806666666665,
+            6.952393333333331,
+            6.850566666666662
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.543266666666664,
+            7.638240000000002,
+            7.529446666666668
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.745213333333333,
+            0.7504900662251657,
+            0.7444666666666662
+          ],
+          "GT Power_0": [
+            0.13992666666666667,
+            0.14057615894039735,
+            0.1399733333333334
+          ],
+          "IA Power_0": [
+            6.879213333333331,
+            6.728940397350997,
+            6.551773333333334
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.272553333333334,
+            7.112940397350991,
+            6.88748
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD119-A9",
+      "number": 4386,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6011333333333333,
+            0.6132185430463574,
+            0.6036225165562913
+          ],
+          "GT Power_0": [
+            0.03550666666666665,
+            0.015006622516556288,
+            0.014231788079470198
+          ],
+          "IA Power_0": [
+            3.9550199999999993,
+            3.7715231788079455,
+            3.8612516556291396
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.193633333333333,
+            4.12676821192053,
+            4.172238410596027
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7365562913907284,
+            0.7519866666666665,
+            0.7713733333333328
+          ],
+          "GT Power_0": [
+            0.11472847682119207,
+            0.11471333333333333,
+            0.12085333333333334
+          ],
+          "IA Power_0": [
+            7.039688741721855,
+            6.741886666666662,
+            6.862279999999999
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.414251655629134,
+            7.147413333333331,
+            7.672113333333338
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7467814569536422,
+            0.7375827814569532,
+            0.7394666666666663
+          ],
+          "GT Power_0": [
+            0.11906622516556288,
+            0.11432450331125829,
+            0.11205333333333338
+          ],
+          "IA Power_0": [
+            7.068132450331127,
+            6.800105960264901,
+            6.913266666666665
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.57893377483444,
+            7.160913907284764,
+            7.262646666666665
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            151,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.8095960264900672,
+            0.7930866666666665,
+            0.7946866666666671
+          ],
+          "GT Power_0": [
+            0.23794039735099348,
+            0.24192666666666673,
+            0.24574666666666672
+          ],
+          "IA Power_0": [
+            7.00573509933775,
+            7.053713333333335,
+            7.127746666666665
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.737483443708613,
+            7.575660000000001,
+            7.691886666666668
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7426066666666664,
+            0.7429271523178809,
+            0.7485799999999998
+          ],
+          "GT Power_0": [
+            0.1192666666666666,
+            0.11971523178807945,
+            0.11752666666666672
+          ],
+          "IA Power_0": [
+            6.870240000000002,
+            6.911311258278149,
+            8.005440000000005
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.242899999999998,
+            7.30930463576159,
+            8.338399999999998
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD132-A9",
+      "number": 4385,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.610576158940397,
+            0.6068543046357616,
+            0.6113377483443706
+          ],
+          "GT Power_0": [
+            0.03191390728476819,
+            0.013165562913907282,
+            0.013847682119205298
+          ],
+          "IA Power_0": [
+            4.159887417218541,
+            3.786768211920529,
+            3.7934768211920527
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.59143046357616,
+            4.078033112582781,
+            4.098549668874171
+          ],
+          "name": "Basic",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7521390728476818,
+            0.7523907284768204,
+            0.7690266666666662
+          ],
+          "GT Power_0": [
+            0.09274834437086091,
+            0.09604635761589407,
+            0.09340666666666674
+          ],
+          "IA Power_0": [
+            7.041125827814568,
+            6.8399801324503295,
+            7.287239999999999
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.495688741721857,
+            7.3259139072847645,
+            7.770000000000003
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            151,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7365599999999995,
+            0.7354999999999998,
+            0.7404832214765096
+          ],
+          "GT Power_0": [
+            0.09494666666666668,
+            0.09477333333333342,
+            0.09351677852348993
+          ],
+          "IA Power_0": [
+            6.808613333333334,
+            6.773106666666666,
+            7.458114093959732
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.153346666666663,
+            7.11988,
+            7.803234899328857
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            150,
+            149
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7942200000000007,
+            0.792513333333334,
+            0.7946688741721858
+          ],
+          "GT Power_0": [
+            0.21220000000000003,
+            0.21097333333333332,
+            0.21310596026490078
+          ],
+          "IA Power_0": [
+            7.06912,
+            7.017966666666666,
+            7.344701986754962
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.5581533333333315,
+            7.508313333333335,
+            7.824854304635761
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7416466666666663,
+            0.7432266666666661,
+            0.7649666666666666
+          ],
+          "GT Power_0": [
+            0.10149333333333337,
+            0.10324666666666674,
+            0.10269333333333336
+          ],
+          "IA Power_0": [
+            6.893426666666666,
+            6.94007333333333,
+            6.872293333333333
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.226480000000004,
+            7.287653333333336,
+            7.754500000000001
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD154-A9",
+      "number": 4384,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.5988344370860925,
+            0.6001466666666664,
+            0.6203774834437085
+          ],
+          "GT Power_0": [
+            0.017768211920529794,
+            0.01809333333333333,
+            0.01781456953642384
+          ],
+          "IA Power_0": [
+            3.5647615894039735,
+            3.6206400000000016,
+            3.659350993377483
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            3.82125165562914,
+            3.8537933333333347,
+            4.183317880794703
+          ],
+          "name": "Basic",
+          "samples": [
+            151,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7354768211920535,
+            0.7397086092715224,
+            0.7531920529801323
+          ],
+          "GT Power_0": [
+            0.15016556291390723,
+            0.1487549668874172,
+            0.14122516556291395
+          ],
+          "IA Power_0": [
+            6.389384105960263,
+            6.602450331125829,
+            6.360741721854303
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.72673509933775,
+            7.001132450331123,
+            6.948781456953643
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7366622516556292,
+            0.7371258278145691,
+            0.7362999999999997
+          ],
+          "GT Power_0": [
+            0.14149668874172183,
+            0.13450993377483447,
+            0.13500666666666666
+          ],
+          "IA Power_0": [
+            6.355695364238408,
+            6.758827814569537,
+            6.41262
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.718622516556289,
+            7.094907284768206,
+            6.795446666666667
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            151,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7920666666666671,
+            0.8033666666666669,
+            0.7912582781456955
+          ],
+          "GT Power_0": [
+            0.2940133333333333,
+            0.3008466666666667,
+            0.2881523178807947
+          ],
+          "IA Power_0": [
+            6.744126666666669,
+            6.672953333333336,
+            6.6906225165562905
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.313319999999999,
+            7.3652066666666665,
+            7.267741721854305
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7444635761589402,
+            0.761706666666666,
+            0.7415298013245029
+          ],
+          "GT Power_0": [
+            0.14633112582781466,
+            0.14426666666666663,
+            0.14690066225165566
+          ],
+          "IA Power_0": [
+            6.854350993377483,
+            6.654346666666667,
+            6.4497947019867565
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.243152317880794,
+            7.1967733333333355,
+            6.86805298013245
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            151,
+            150,
+            151
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD164-A9",
+      "number": 4383,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.5990599999999999,
+            0.6100860927152318,
+            0.6108199999999997
+          ],
+          "GT Power_0": [
+            0.042439999999999985,
+            0.015682119205298013,
+            0.015286666666666667
+          ],
+          "IA Power_0": [
+            3.72006,
+            3.9467152317880827,
+            3.7545599999999997
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            3.967206666666669,
+            4.268092715231787,
+            4.075213333333334
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7372450331125826,
+            0.748604026845637,
+            0.7419199999999994
+          ],
+          "GT Power_0": [
+            0.12709271523178808,
+            0.12510738255033566,
+            0.12450666666666665
+          ],
+          "IA Power_0": [
+            6.420907284768213,
+            7.048436241610737,
+            6.547926666666664
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.820039735099339,
+            7.44826845637584,
+            6.968959999999995
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            151,
+            149,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.739417218543046,
+            0.7377999999999993,
+            0.7528933333333332
+          ],
+          "GT Power_0": [
+            0.12727814569536414,
+            0.12997333333333333,
+            0.1286533333333334
+          ],
+          "IA Power_0": [
+            6.388430463576157,
+            6.849453333333331,
+            6.505966666666667
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.791523178807945,
+            7.225946666666669,
+            6.940180000000001
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.8071800000000007,
+            0.8092466666666671,
+            0.7932866666666671
+          ],
+          "GT Power_0": [
+            0.2633,
+            0.2634200000000001,
+            0.27390666666666663
+          ],
+          "IA Power_0": [
+            6.753999999999999,
+            6.697686666666666,
+            6.790533333333332
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.381993333333332,
+            7.336640000000001,
+            7.284786666666669
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7532333333333331,
+            0.7433799999999996,
+            0.752166666666666
+          ],
+          "GT Power_0": [
+            0.14176000000000005,
+            0.14429333333333336,
+            0.13862
+          ],
+          "IA Power_0": [
+            6.937013333333335,
+            6.610593333333334,
+            6.569293333333338
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.431026666666665,
+            6.976246666666669,
+            6.954026666666666
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD21-B1",
+      "number": 4382,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6053399999999995,
+            0.601553333333333,
+            0.6008874172185428
+          ],
+          "GT Power_0": [
+            0.04971333333333332,
+            0.01578666666666667,
+            0.015801324503311256
+          ],
+          "IA Power_0": [
+            3.4253466666666683,
+            3.7964933333333346,
+            3.4378013245033117
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.960186666666664,
+            5.200026666666668,
+            4.902423841059601
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7742866666666663,
+            0.7524026845637577,
+            0.7412399999999996
+          ],
+          "GT Power_0": [
+            0.11864000000000006,
+            0.127,
+            0.1271266666666667
+          ],
+          "IA Power_0": [
+            6.649073333333333,
+            6.81258389261745,
+            6.05227333333333
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            8.38623333333333,
+            8.496046979865767,
+            7.613713333333333
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            149,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7400266666666665,
+            0.7393973509933773,
+            0.7768133333333334
+          ],
+          "GT Power_0": [
+            0.12130666666666673,
+            0.126794701986755,
+            0.12012000000000003
+          ],
+          "IA Power_0": [
+            5.969853333333332,
+            5.975721854304632,
+            7.691293333333334
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.528239999999995,
+            7.569801324503311,
+            9.408426666666664
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7970466666666673,
+            0.8107000000000006,
+            0.8108666666666667
+          ],
+          "GT Power_0": [
+            0.2596066666666666,
+            0.2603066666666667,
+            0.26945333333333343
+          ],
+          "IA Power_0": [
+            6.5278066666666685,
+            6.190233333333333,
+            6.344833333333332
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            8.237553333333334,
+            8.06625333333333,
+            8.178206666666664
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.74766,
+            0.7443933333333327,
+            0.7456733333333332
+          ],
+          "GT Power_0": [
+            0.13588666666666682,
+            0.13912666666666662,
+            0.13094666666666663
+          ],
+          "IA Power_0": [
+            6.434753333333331,
+            6.141873333333331,
+            6.115819999999997
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.9979799999999965,
+            7.677639999999995,
+            7.661646666666661
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD175-A9",
+      "number": 4381,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6031533333333332,
+            0.6004066666666665,
+            0.5987333333333331
+          ],
+          "GT Power_0": [
+            0.03386666666666664,
+            0.014986666666666665,
+            0.014113333333333337
+          ],
+          "IA Power_0": [
+            3.8125199999999997,
+            3.587873333333332,
+            3.49718
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.116526666666668,
+            3.817386666666668,
+            3.767233333333331
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7390866666666663,
+            0.7504533333333332,
+            0.7365999999999999
+          ],
+          "GT Power_0": [
+            0.11654,
+            0.10928666666666674,
+            0.11411333333333327
+          ],
+          "IA Power_0": [
+            6.303899999999998,
+            6.39688,
+            6.514166666666667
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.678173333333334,
+            6.827653333333336,
+            6.866040000000003
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7374066666666664,
+            0.7378211920529799,
+            0.7658211920529798
+          ],
+          "GT Power_0": [
+            0.11263999999999998,
+            0.10927152317880796,
+            0.10515231788079474
+          ],
+          "IA Power_0": [
+            6.3023533333333335,
+            6.26813907284768,
+            6.692688741721853
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.631113333333334,
+            6.640768211920529,
+            7.22187417218543
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7957933333333336,
+            0.8143066666666666,
+            0.7931333333333341
+          ],
+          "GT Power_0": [
+            0.23876000000000006,
+            0.2398799999999999,
+            0.23884666666666665
+          ],
+          "IA Power_0": [
+            6.575659999999999,
+            6.609033333333332,
+            6.897133333333332
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.084846666666669,
+            7.249940000000003,
+            7.399900000000002
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7445866666666664,
+            0.7443133333333329,
+            0.7441599999999996
+          ],
+          "GT Power_0": [
+            0.11738666666666672,
+            0.11494666666666674,
+            0.11160000000000002
+          ],
+          "IA Power_0": [
+            6.411113333333334,
+            6.413386666666668,
+            6.481866666666665
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.791486666666665,
+            6.8037199999999975,
+            6.838926666666671
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD145-A9",
+      "number": 4380,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6070933333333333,
+            0.600311258278145,
+            0.6125629139072845
+          ],
+          "GT Power_0": [
+            0.04131999999999999,
+            0.014602649006622514,
+            0.013629139072847681
+          ],
+          "IA Power_0": [
+            3.3697933333333348,
+            3.26025165562914,
+            3.23390728476821
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            3.6342533333333344,
+            3.4917947019867555,
+            3.536662251655629
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.739893333333333,
+            0.7373841059602649,
+            0.7534900662251652
+          ],
+          "GT Power_0": [
+            0.10152666666666663,
+            0.10323178807947023,
+            0.10485430463576159
+          ],
+          "IA Power_0": [
+            5.9061400000000015,
+            5.549860927152321,
+            5.69560927152318
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.3133866666666645,
+            5.954456953642387,
+            6.144735099337747
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7437733333333331,
+            0.7344799999999997,
+            0.7371399999999998
+          ],
+          "GT Power_0": [
+            0.1025466666666667,
+            0.10140000000000005,
+            0.10376000000000007
+          ],
+          "IA Power_0": [
+            6.093966666666664,
+            5.605419999999998,
+            5.632579999999999
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.486406666666665,
+            5.974086666666665,
+            6.000219999999998
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7966400000000001,
+            0.7950933333333338,
+            0.7925466666666672
+          ],
+          "GT Power_0": [
+            0.2243733333333333,
+            0.24922000000000002,
+            0.2221
+          ],
+          "IA Power_0": [
+            6.339986666666665,
+            5.835899999999997,
+            5.822679999999999
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.9032066666666685,
+            6.331266666666669,
+            6.350859999999998
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7672733333333333,
+            0.7475666666666664,
+            0.7427133333333332
+          ],
+          "GT Power_0": [
+            0.1092533333333334,
+            0.10842666666666666,
+            0.10758666666666668
+          ],
+          "IA Power_0": [
+            5.8035533333333325,
+            5.815293333333336,
+            6.018106666666667
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.505446666666667,
+            6.212926666666666,
+            6.3599
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD157-A9",
+      "number": 4379,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.5985364238410592,
+            0.6000860927152318,
+            0.6001390728476815
+          ],
+          "GT Power_0": [
+            0.04011920529801322,
+            0.015205298013245033,
+            0.015847682119205297
+          ],
+          "IA Power_0": [
+            3.6189999999999998,
+            3.6252384105960256,
+            4.020721854304636
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            3.86773509933775,
+            3.854920529801324,
+            4.268523178807948
+          ],
+          "name": "Basic",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7368476821192049,
+            0.7699533333333334,
+            0.7361199999999994
+          ],
+          "GT Power_0": [
+            0.1259470198675497,
+            0.12076666666666667,
+            0.12357333333333341
+          ],
+          "IA Power_0": [
+            6.343900662251657,
+            6.626393333333336,
+            6.4081199999999985
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.744781456953644,
+            7.1208133333333326,
+            6.788066666666667
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7548199999999998,
+            0.7409127516778521,
+            0.739733333333333
+          ],
+          "GT Power_0": [
+            0.12565999999999997,
+            0.1201543624161074,
+            0.12134000000000005
+          ],
+          "IA Power_0": [
+            6.406126666666668,
+            7.13210067114094,
+            6.591106666666663
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.894059999999998,
+            7.4960671140939565,
+            6.932619999999999
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            149,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7941721854304639,
+            0.7956556291390728,
+            0.7929006622516558
+          ],
+          "GT Power_0": [
+            0.25769536423841055,
+            0.2588410596026492,
+            0.25543046357615906
+          ],
+          "IA Power_0": [
+            6.739000000000001,
+            6.96450331125828,
+            6.665523178807947
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.255536423841059,
+            7.538543046357615,
+            7.211933774834435
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7633178807947021,
+            0.7433311258278144,
+            0.7535666666666666
+          ],
+          "GT Power_0": [
+            0.13375496688741723,
+            0.13144370860927154,
+            0.13457333333333335
+          ],
+          "IA Power_0": [
+            6.570278145695366,
+            6.580304635761589,
+            6.443580000000001
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.05731125827815,
+            6.911986754966892,
+            6.871193333333332
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            151,
+            151,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD149-A9",
+      "number": 4378,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6069599999999995,
+            0.6045533333333332,
+            0.6002066666666664
+          ],
+          "GT Power_0": [
+            0.040313333333333305,
+            0.015126666666666665,
+            0.01661333333333333
+          ],
+          "IA Power_0": [
+            4.067559999999999,
+            4.079786666666667,
+            4.379133333333331
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.431706666666663,
+            4.321606666666669,
+            4.622486666666667
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7395933333333331,
+            0.7520733333333329,
+            0.7388133333333332
+          ],
+          "GT Power_0": [
+            0.1176466666666667,
+            0.11800666666666665,
+            0.12213333333333332
+          ],
+          "IA Power_0": [
+            7.131333333333337,
+            7.16994666666667,
+            7.160606666666666
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.486406666666671,
+            7.665913333333335,
+            7.569226666666665
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7521733333333329,
+            0.7371733333333329,
+            0.7490266666666665
+          ],
+          "GT Power_0": [
+            0.11759333333333333,
+            0.11694000000000003,
+            0.11947333333333328
+          ],
+          "IA Power_0": [
+            7.09815333333333,
+            7.464666666666667,
+            7.162066666666668
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.644073333333332,
+            7.808313333333331,
+            7.701153333333335
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.8141533333333341,
+            0.8044666666666671,
+            0.806106666666667
+          ],
+          "GT Power_0": [
+            0.27294000000000007,
+            0.2793200000000002,
+            0.27286
+          ],
+          "IA Power_0": [
+            7.46675333333333,
+            7.869766666666669,
+            7.530466666666666
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            8.267966666666668,
+            8.55835333333333,
+            8.237266666666665
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7422781456953644,
+            0.7429533333333332,
+            0.7654733333333333
+          ],
+          "GT Power_0": [
+            0.1282913907284768,
+            0.12866666666666668,
+            0.12790666666666672
+          ],
+          "IA Power_0": [
+            7.219615894039732,
+            7.668239999999999,
+            7.282313333333332
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.6123245033112585,
+            8.012773333333335,
+            8.038559999999999
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD175-A9",
+      "number": 4377,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6007748344370856,
+            0.6019271523178804,
+            0.5986933333333332
+          ],
+          "GT Power_0": [
+            0.014662251655629142,
+            0.015761589403973507,
+            0.01409333333333333
+          ],
+          "IA Power_0": [
+            3.5451456953642393,
+            3.5960993377483454,
+            3.4688333333333343
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            3.797894039735098,
+            3.883867549668874,
+            3.7437533333333346
+          ],
+          "name": "Basic",
+          "samples": [
+            151,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7381799999999998,
+            0.7471133333333335,
+            0.7391399999999996
+          ],
+          "GT Power_0": [
+            0.10821333333333333,
+            0.10548666666666667,
+            0.11250000000000007
+          ],
+          "IA Power_0": [
+            6.277286666666668,
+            6.619793333333334,
+            6.301059999999999
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.6336666666666675,
+            7.066186666666669,
+            6.6530133333333366
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7475599999999997,
+            0.7526933333333333,
+            0.7388533333333331
+          ],
+          "GT Power_0": [
+            0.10699333333333333,
+            0.10927333333333342,
+            0.10853333333333337
+          ],
+          "IA Power_0": [
+            6.783413333333336,
+            6.716246666666665,
+            6.261026666666665
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.178146666666667,
+            7.148453333333332,
+            6.625779999999997
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.793526666666667,
+            0.8055333333333337,
+            0.7955333333333343
+          ],
+          "GT Power_0": [
+            0.23747333333333326,
+            0.23853333333333349,
+            0.24220000000000014
+          ],
+          "IA Power_0": [
+            6.5694199999999965,
+            6.5973066666666655,
+            6.576159999999998
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.098380000000001,
+            7.190433333333332,
+            7.0982866666666675
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7551933333333336,
+            0.7586423841059602,
+            0.7579666666666662
+          ],
+          "GT Power_0": [
+            0.11570666666666668,
+            0.11762913907284768,
+            0.11373333333333333
+          ],
+          "IA Power_0": [
+            6.437040000000001,
+            6.4968874172185425,
+            6.472920000000004
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.9288799999999995,
+            7.114172185430464,
+            6.896733333333332
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD131-A9",
+      "number": 4376,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6034266666666664,
+            0.6044768211920528,
+            0.6020993377483438
+          ],
+          "GT Power_0": [
+            0.04745333333333333,
+            0.015741721854304624,
+            0.015390728476821191
+          ],
+          "IA Power_0": [
+            3.9274199999999997,
+            3.918463576158938,
+            3.828403973509935
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.118613333333333,
+            4.111781456953643,
+            4.019529801324502
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7617748344370857,
+            0.7409470198675494,
+            0.7425333333333332
+          ],
+          "GT Power_0": [
+            0.11321854304635758,
+            0.11028476821192053,
+            0.1126866666666667
+          ],
+          "IA Power_0": [
+            6.146741721854307,
+            6.4449801324503335,
+            6.379026666666668
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.7318940397351,
+            6.76440397350993,
+            6.711373333333334
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            151,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7558533333333332,
+            0.7403266666666668,
+            0.7406688741721851
+          ],
+          "GT Power_0": [
+            0.1268133333333333,
+            0.10759333333333333,
+            0.11399337748344374
+          ],
+          "IA Power_0": [
+            6.7197066666666645,
+            6.502026666666664,
+            6.170788079470199
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.997379999999998,
+            6.8166933333333315,
+            6.517344370860933
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.8016821192052985,
+            0.8008399999999999,
+            0.8064666666666671
+          ],
+          "GT Power_0": [
+            0.24409933774834447,
+            0.24357333333333345,
+            0.2401200000000001
+          ],
+          "IA Power_0": [
+            6.421973509933772,
+            6.354606666666667,
+            6.613613333333335
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.899986754966888,
+            6.844786666666669,
+            7.073039999999998
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7638066666666664,
+            0.7641390728476817,
+            0.7557066666666666
+          ],
+          "GT Power_0": [
+            0.11970666666666659,
+            0.11739735099337753,
+            0.11854666666666672
+          ],
+          "IA Power_0": [
+            6.5761,
+            6.33628476821192,
+            6.302273333333334
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.013173333333333,
+            6.7324370860927125,
+            6.682219999999999
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD141-A9",
+      "number": 4375,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.609225165562914,
+            0.5994370860927153,
+            0.600847682119205
+          ],
+          "GT Power_0": [
+            0.0354437086092715,
+            0.014880794701986751,
+            0.015437086092715229
+          ],
+          "IA Power_0": [
+            4.04239072847682,
+            4.009986754966886,
+            3.9772913907284755
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.441788079470199,
+            4.221357615894039,
+            4.253668874172186
+          ],
+          "name": "Basic",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7513973509933772,
+            0.7391125827814571,
+            0.7374266666666666
+          ],
+          "GT Power_0": [
+            0.12121854304635762,
+            0.11513907284768211,
+            0.11716666666666671
+          ],
+          "IA Power_0": [
+            7.175668874172186,
+            7.328046357615891,
+            7.114026666666666
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.691304635761593,
+            7.713860927152315,
+            7.429119999999999
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            151,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7409466666666671,
+            0.7349933774834432,
+            0.7386291390728473
+          ],
+          "GT Power_0": [
+            0.11487333333333333,
+            0.11385430463576166,
+            0.11525165562913904
+          ],
+          "IA Power_0": [
+            7.111966666666666,
+            7.352443708609269,
+            6.997536423841062
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.437873333333334,
+            7.707178807947018,
+            7.397748344370861
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.8286533333333335,
+            0.7940533333333335,
+            0.7965099337748348
+          ],
+          "GT Power_0": [
+            0.24261999999999995,
+            0.23946666666666677,
+            0.23883443708609273
+          ],
+          "IA Power_0": [
+            7.3232,
+            7.557233333333332,
+            7.557993377483444
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            8.460119999999998,
+            8.032440000000001,
+            8.010013245033116
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.760980132450331,
+            0.7431733333333335,
+            0.7435430463576156
+          ],
+          "GT Power_0": [
+            0.1218145695364239,
+            0.1259000000000001,
+            0.11827152317880799
+          ],
+          "IA Power_0": [
+            7.211145695364234,
+            7.203300000000004,
+            7.225662251655628
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.671033112582782,
+            7.5434800000000015,
+            7.537642384105957
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            151,
+            150,
+            151
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD182-A9",
+      "number": 4374,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6073266666666665,
+            0.5999072847682116,
+            0.5984999999999998
+          ],
+          "GT Power_0": [
+            0.03085333333333331,
+            0.013529801324503307,
+            0.01398
+          ],
+          "IA Power_0": [
+            3.207100000000001,
+            3.4835894039735096,
+            3.135746666666667
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            3.544459999999999,
+            3.727834437086095,
+            3.389433333333334
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7480399999999999,
+            0.7404133333333329,
+            0.7371199999999997
+          ],
+          "GT Power_0": [
+            0.09930000000000004,
+            0.10250000000000001,
+            0.09912000000000001
+          ],
+          "IA Power_0": [
+            5.9546199999999985,
+            5.603793333333332,
+            5.709319999999999
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.358273333333333,
+            5.987500000000003,
+            6.048633333333331
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7509735099337741,
+            0.7377133333333333,
+            0.7370999999999998
+          ],
+          "GT Power_0": [
+            0.09283443708609275,
+            0.0963466666666667,
+            0.09492666666666669
+          ],
+          "IA Power_0": [
+            5.905165562913906,
+            5.621960000000004,
+            5.631159999999998
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.319688741721855,
+            5.999786666666667,
+            6.010226666666662
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.796346666666667,
+            0.8091000000000002,
+            0.8056845637583898
+          ],
+          "GT Power_0": [
+            0.20792000000000002,
+            0.20922666666666676,
+            0.20756375838926164
+          ],
+          "IA Power_0": [
+            6.218613333333332,
+            6.198126666666665,
+            6.77160402684564
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.723246666666665,
+            6.791613333333334,
+            7.2532617449664425
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            149
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7586533333333332,
+            0.743529801324503,
+            0.743813333333333
+          ],
+          "GT Power_0": [
+            0.10161333333333336,
+            0.10888079470198682,
+            0.1034466666666667
+          ],
+          "IA Power_0": [
+            5.809900000000002,
+            5.865635761589403,
+            6.037000000000002
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.175879999999996,
+            6.178245033112583,
+            6.416086666666669
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD139-A9",
+      "number": 4373,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6090999999999999,
+            0.6146953642384102,
+            0.6153178807947016
+          ],
+          "GT Power_0": [
+            0.041446666666666625,
+            0.016437086092715235,
+            0.017615894039735094
+          ],
+          "IA Power_0": [
+            3.728466666666666,
+            3.6505496688741728,
+            3.683582781456953
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.006353333333334,
+            4.059284768211921,
+            3.998668874172187
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7450794701986753,
+            0.7360860927152317,
+            0.7365799999999997
+          ],
+          "GT Power_0": [
+            0.12564238410596024,
+            0.1258344370860927,
+            0.1290066666666667
+          ],
+          "IA Power_0": [
+            6.430198675496688,
+            6.40098013245033,
+            6.506193333333335
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.844099337748349,
+            6.7591788079470225,
+            6.9169599999999996
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            151,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7568733333333327,
+            0.7351059602649007,
+            0.7358013245033114
+          ],
+          "GT Power_0": [
+            0.12896000000000005,
+            0.12604635761589408,
+            0.12976158940397348
+          ],
+          "IA Power_0": [
+            6.376200000000004,
+            6.6318145695364255,
+            6.362251655629139
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.961513333333337,
+            7.028668874172183,
+            6.753251655629141
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.8014238410596028,
+            0.7905000000000004,
+            0.7946066666666677
+          ],
+          "GT Power_0": [
+            0.2925562913907284,
+            0.2863266666666667,
+            0.28953333333333325
+          ],
+          "IA Power_0": [
+            6.691245033112585,
+            6.961553333333336,
+            6.853486666666669
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.300026490066226,
+            7.5067666666666675,
+            7.400053333333333
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7480866666666663,
+            0.743317880794702,
+            0.7422066666666663
+          ],
+          "GT Power_0": [
+            0.14548000000000005,
+            0.1323377483443709,
+            0.13207999999999998
+          ],
+          "IA Power_0": [
+            6.613786666666666,
+            7.107145695364241,
+            6.455073333333335
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.987159999999998,
+            7.627264900662253,
+            6.852466666666671
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD179-A9",
+      "number": 4372,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.5995496688741719,
+            0.6141324503311257,
+            0.5988940397350986
+          ],
+          "GT Power_0": [
+            0.040463576158940376,
+            0.017284768211920522,
+            0.017609271523178805
+          ],
+          "IA Power_0": [
+            3.795728476821191,
+            4.086158940397347,
+            3.780463576158941
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.052430463576157,
+            4.448649006622514,
+            3.996105960264902
+          ],
+          "name": "Basic",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7675533333333333,
+            0.7483199999999994,
+            0.7370133333333329
+          ],
+          "GT Power_0": [
+            0.14202000000000004,
+            0.14182666666666663,
+            0.1398599999999999
+          ],
+          "IA Power_0": [
+            7.202720000000001,
+            6.675393333333338,
+            6.581906666666666
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.74261333333333,
+            7.170986666666666,
+            6.972600000000001
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            150,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7480860927152315,
+            0.7363642384105955,
+            0.735053333333333
+          ],
+          "GT Power_0": [
+            0.1363841059602649,
+            0.14888079470198673,
+            0.1361333333333334
+          ],
+          "IA Power_0": [
+            6.640841059602649,
+            6.562364238410595,
+            6.573233333333333
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.129112582781458,
+            6.976907284768211,
+            6.96094666666667
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            151,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.8093841059602654,
+            0.808622516556292,
+            0.7928866666666674
+          ],
+          "GT Power_0": [
+            0.28927814569536425,
+            0.29223178807947026,
+            0.29253333333333337
+          ],
+          "IA Power_0": [
+            7.144218543046361,
+            6.835238410596024,
+            6.881946666666663
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.822370860927151,
+            7.558695364238411,
+            7.451386666666669
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            151,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7442847682119202,
+            0.7438874172185427,
+            0.7681059602649003
+          ],
+          "GT Power_0": [
+            0.148112582781457,
+            0.16465562913907283,
+            0.15446357615894038
+          ],
+          "IA Power_0": [
+            6.955741721854303,
+            6.751721854304637,
+            6.732337748344375
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            7.375953642384106,
+            7.1707417218542995,
+            7.306046357615887
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD131-A9",
+      "number": 4371,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.611132450331126,
+            0.6129666666666661,
+            0.60369536423841
+          ],
+          "GT Power_0": [
+            0.04266225165562912,
+            0.014446666666666668,
+            0.016609271523178808
+          ],
+          "IA Power_0": [
+            3.786423841059602,
+            3.9435533333333326,
+            3.761993377483443
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            4.039721854304635,
+            4.170639999999999,
+            3.915576158940398
+          ],
+          "name": "Basic",
+          "samples": [
+            151,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7573311258278145,
+            0.7565960264900657,
+            0.7433112582781455
+          ],
+          "GT Power_0": [
+            0.11682781456953646,
+            0.11653642384105964,
+            0.11186754966887424
+          ],
+          "IA Power_0": [
+            5.956741721854307,
+            6.323801324503313,
+            6.116417218543047
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.386556291390727,
+            6.6612516556291395,
+            6.435317880794702
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            151,
+            151,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7585894039735099,
+            0.741359999999999,
+            0.7405629139072849
+          ],
+          "GT Power_0": [
+            0.11244370860927151,
+            0.11544666666666664,
+            0.11405298013245041
+          ],
+          "IA Power_0": [
+            6.048490066225164,
+            6.400626666666665,
+            6.0683245033112625
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.449284768211923,
+            6.71677333333333,
+            6.366278145695362
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            151,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.8032533333333337,
+            0.8075199999999996,
+            0.8132185430463579
+          ],
+          "GT Power_0": [
+            0.2436866666666667,
+            0.24258666666666662,
+            0.24627814569536424
+          ],
+          "IA Power_0": [
+            6.352953333333336,
+            6.315673333333336,
+            6.317774834437084
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.842366666666667,
+            6.859379999999998,
+            6.926675496688741
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7453973509933773,
+            0.7461799999999998,
+            0.7645866666666661
+          ],
+          "GT Power_0": [
+            0.12198675496688736,
+            0.12226000000000002,
+            0.12536000000000005
+          ],
+          "IA Power_0": [
+            6.458317880794701,
+            6.324839999999999,
+            6.123813333333335
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.787337748344372,
+            6.628086666666665,
+            6.578006666666668
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        }
+      ]
+    },
+    {
+      "bot": "BUILD145-A9",
+      "number": 4370,
+      "tests": [
+        {
+          "DRAM Power_0": [
+            0.6122933333333335,
+            0.6180463576158935,
+            0.6137933333333333
+          ],
+          "GT Power_0": [
+            0.029099999999999984,
+            0.014245033112582782,
+            0.014259999999999995
+          ],
+          "IA Power_0": [
+            3.611086666666666,
+            3.335377483443708,
+            3.7880599999999998
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            3.9570999999999996,
+            3.6562582781456965,
+            4.046633333333332
+          ],
+          "name": "Basic",
+          "samples": [
+            150,
+            151,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7456556291390726,
+            0.7371666666666665,
+            0.7458933333333327
+          ],
+          "GT Power_0": [
+            0.1013112582781457,
+            0.10270000000000001,
+            0.09828666666666667
+          ],
+          "IA Power_0": [
+            6.135331125827816,
+            5.678266666666666,
+            5.762766666666666
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.461218543046354,
+            6.072253333333335,
+            6.168426666666668
+          ],
+          "name": "Video_720_MP4",
+          "samples": [
+            151,
+            150,
+            150
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7639799999999997,
+            0.752533333333333,
+            0.7456225165562915
+          ],
+          "GT Power_0": [
+            0.0969266666666667,
+            0.10263333333333341,
+            0.09888079470198678
+          ],
+          "IA Power_0": [
+            5.938973333333333,
+            5.704066666666669,
+            6.458218543046356
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.767099999999999,
+            6.109180000000004,
+            6.8249271523178825
+          ],
+          "name": "Video_720_MP4_Fullscreen",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.802746666666667,
+            0.7935266666666668,
+            0.7948807947019875
+          ],
+          "GT Power_0": [
+            0.22629999999999992,
+            0.21853333333333333,
+            0.21982781456953654
+          ],
+          "IA Power_0": [
+            6.4401933333333305,
+            5.863193333333332,
+            5.8522516556291375
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.983660000000003,
+            6.398879999999998,
+            6.37480132450331
+          ],
+          "name": "Video_720_MP4_Underlay",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        },
+        {
+          "DRAM Power_0": [
+            0.7422466666666663,
+            0.7418866666666659,
+            0.741509933774834
+          ],
+          "GT Power_0": [
+            0.10478,
+            0.10322666666666674,
+            0.10470198675496685
+          ],
+          "IA Power_0": [
+            5.783240000000003,
+            5.718759999999997,
+            6.02598013245033
+          ],
+          "Package Power Limit_0": [
+            65.0,
+            65.0,
+            65.0
+          ],
+          "Processor Power_0": [
+            6.138493333333333,
+            6.139393333333334,
+            6.3845695364238395
+          ],
+          "name": "Video_720_MP4_Underlay_Fullscreen",
+          "samples": [
+            150,
+            150,
+            151
+          ]
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/docs/android_dynamic_feature_modules.md b/docs/android_dynamic_feature_modules.md
index 7401805b..70c8401f 100644
--- a/docs/android_dynamic_feature_modules.md
+++ b/docs/android_dynamic_feature_modules.md
@@ -245,13 +245,19 @@
 To make Foo useful, let's add some Java code to it. This section will walk you
 through the required steps.
 
-First, define a module interface in the new file
+First, define a module interface for Foo. This is accomplished by adding the
+`@ModuleInterface` annotation to the Foo interface. This annotation
+automatically creates a `FooModule` class that can be used later to install and
+access the module. To do this, add the following in the new file
 `//chrome/android/features/foo/public/java/src/org/chromium/chrome/features/foo/Foo.java`:
 
 ```java
 package org.chromium.chrome.features.foo;
 
+import org.chromium.components.module_installer.ModuleInterface;
+
 /** Interface to call into Foo feature. */
+@ModuleInterface(module = "foo", impl = "org.chromium.chrome.features.FooImpl")
 public interface Foo {
     /** Magical function. */
     void bar();
@@ -271,7 +277,9 @@
 package org.chromium.chrome.features.foo;
 
 import org.chromium.base.Log;
+import org.chromium.base.annotations.UsedByReflection;
 
+@UsedByReflection("FooModule")
 public class FooImpl implements Foo {
     @Override
     public void bar() {
@@ -280,58 +288,25 @@
 }
 ```
 
-In order to get the Foo implementation depending on whether the Foo DFM
-is present, we will add a module provider class handling that logic. For
-this, create the file
-`//chrome/android/features/foo/public/java/src/org/chromium/chrome/features/foo/FooModuleProvider.java`
-and add:
-
-```java
-package org.chromium.chrome.features.foo;
-
-/** Provides the Foo implementation. */
-public class FooModuleProvider {
-    private static Foo sFoo;
-
-    /**
-     * Returns Foo implementation or null if Foo module is not installed.
-     */
-    public static Foo getFoo {
-        if (sFoo == null) {
-            try {
-                sFoo = (Foo) Class
-                    .forName("org.chromium.chrome.features.foo.FooImpl")
-                    .newInstance();
-            } catch (ClassNotFoundException | InstantiationException
-                    | IllegalAccessException | IllegalArgumentException e) {
-                // Foo module is not installed. Leave sFoo as null.
-            }
-        }
-        return sFoo;
-    }
-}
-```
-
 You can then use this provider to access the module if it is installed. To test
 that, instantiate Foo and call `bar()` somewhere in Chrome:
 
 ```java
-if (FooModuleProvider.getFoo() != null) {
-    FooModuleProvider.getFoo().bar();
+if (FooModule.isInstalled()) {
+    FooModule.getImpl().bar();
 } else {
     Log.i("FOO", "module not installed");
 }
 ```
 
-The interface and module provider have to be available regardless of whether the
-Foo DFM is present. Therefore, put those classes into the base module. For this
-create a list of those Java files in
+The interface has to be available regardless of whether the Foo DFM is present.
+Therefore, put those classes into the base module. For this create a list of
+those Java files in
 `//chrome/android/features/foo/public/foo_public_java_sources.gni`:
 
 ```gn
 foo_public_java_sources = [
   "//chrome/android/features/foo/public/java/src/org/chromium/chrome/features/foo/Foo.java",
-  "//chrome/android/features/foo/public/java/src/org/chromium/chrome/features/foo/FooModuleProvider.java",
 ]
 ```
 
@@ -516,8 +491,10 @@
 
 import org.chromium.base.ContextUtils;
 import org.chromium.base.Log;
+import org.chromium.base.annotations.UsedByReflection;
 import org.chromium.chrome.features.foo.R;
 
+@UsedByReflection("FooModule")
 public class FooImpl implements Foo {
     @Override
     public void bar() {
@@ -551,41 +528,19 @@
 module as soon as possible regardless of whether the user is on a metered
 connection or whether they have turned updates off in the Play Store app.
 
-To request a module on-demand we can make use of the `ModuleInstaller` from
-`//components/module_installer/`. For this add, the following function to
-`FooModuleProvider` in
-`//chrome/android/features/foo/public/java/src/org/chromium/chrome/foo/FooModuleProvider.java`:
+You can use the autogenerated module class to on-demand install the module like
+so:
 
 ```java
-/**
- * On-demand install Foo module.
- * @param onFinishedListener listener to be called when install has finished.
- */
-public static installModule(
-        OnModuleInstallFinishedListener onFinishedListener) {
-    ModuleInstaller.install("foo", (success) -> {
-        if (success) {
-            assert getFoo() != null;
-        }
-        onFinishedListener.onFinished(success);
-    });
-}
-```
-
-Then, use this new function to request the module and call `bar()` on install
-completion:
-
-```java
-// Need to call init before accessing any modules. Can be called multiple times.
-ModuleInstaller.init();
-FooModuleProvider.installModule((success) -> {
-    FooModuleProvider.getFoo().bar();
+FooModule.install((success) -> {
+    if (success) {
+        FooModule.getImpl().bar();
+    }
 });
 ```
 
 **Optionally**, you can show UI telling the user about the install flow. For
-this, add the function below to `FooModuleProvider`. Then use
-`installModuleWithUi(...)` instead of `installModule(...)`. Note, it is possible
+this, add a function like the one below. Note, it is possible
 to only show either one of the  install, failure and success UI or any
 combination of the three.
 
@@ -609,7 +564,7 @@
                     });
     // At the time of writing, shows toast informing user about install start.
     ui.showInstallStartUi();
-    installModule(
+    FooModule.install(
             (success) -> {
                 if (!success) {
                     // At the time of writing, shows infobar allowing user
@@ -657,7 +612,7 @@
 To defer install Foo do the following:
 
 ```java
-ModuleInstaller.installDeferred("foo");
+FooModule.installDeferred();
 ```
 
 
diff --git a/extensions/browser/api/execute_code_function.cc b/extensions/browser/api/execute_code_function.cc
index 14afed3..0e77ada9 100644
--- a/extensions/browser/api/execute_code_function.cc
+++ b/extensions/browser/api/execute_code_function.cc
@@ -230,7 +230,7 @@
   // DCHECK.
   bool might_require_localization = ShouldInsertCSS() && !extension_id.empty();
 
-  ComponentExtensionResourceInfo resource_info;
+  int resource_id = 0;
   const ComponentExtensionResourceManager*
       component_extension_resource_manager =
           ExtensionsBrowserClient::Get()
@@ -238,11 +238,10 @@
   if (component_extension_resource_manager &&
       component_extension_resource_manager->IsComponentExtensionResource(
           resource_.extension_root(), resource_.relative_path(),
-          &resource_info)) {
-    DCHECK(!resource_info.gzipped);
+          &resource_id)) {
+    DCHECK(!ui::ResourceBundle::GetSharedInstance().IsGzipped(resource_id));
     base::StringPiece resource =
-        ui::ResourceBundle::GetSharedInstance().GetRawDataResource(
-            resource_info.resource_id);
+        ui::ResourceBundle::GetSharedInstance().GetRawDataResource(resource_id);
     std::unique_ptr<std::string> data(
         new std::string(resource.data(), resource.size()));
 
diff --git a/extensions/browser/component_extension_resource_manager.h b/extensions/browser/component_extension_resource_manager.h
index 605fc6fc..b8a1f55 100644
--- a/extensions/browser/component_extension_resource_manager.h
+++ b/extensions/browser/component_extension_resource_manager.h
@@ -15,17 +15,6 @@
 
 namespace extensions {
 
-// Information about a bundled component extension resource.
-struct ComponentExtensionResourceInfo {
-  // The resource's ID.
-  int resource_id = 0;
-
-  // Whether the resource is stored gzipped. Note that only serving from the
-  // chrome-extensions:// scheme can support gzipped resources. User scripts,
-  // injected scripts and images may not be gzipped.
-  bool gzipped = false;
-};
-
 // This class manages which extension resources actually come from
 // the resource bundle.
 class ComponentExtensionResourceManager {
@@ -39,7 +28,7 @@
   virtual bool IsComponentExtensionResource(
       const base::FilePath& extension_path,
       const base::FilePath& resource_path,
-      ComponentExtensionResourceInfo* resource_info) const = 0;
+      int* resource_id) const = 0;
 
   // Returns the i18n template replacements for a component extension if they
   // exist, or nullptr otherwise. If non-null, the returned value must remain
diff --git a/extensions/browser/extension_protocols.cc b/extensions/browser/extension_protocols.cc
index 9732e5e..2e03d9d8 100644
--- a/extensions/browser/extension_protocols.cc
+++ b/extensions/browser/extension_protocols.cc
@@ -47,7 +47,6 @@
 #include "content/public/common/resource_type.h"
 #include "crypto/secure_hash.h"
 #include "crypto/sha2.h"
-#include "extensions/browser/component_extension_resource_manager.h"
 #include "extensions/browser/content_verifier.h"
 #include "extensions/browser/content_verify_job.h"
 #include "extensions/browser/extension_navigation_ui_data.h"
@@ -870,13 +869,13 @@
 
     // Component extension resources may be part of the embedder's resource
     // files, for example component_extension_resources.pak in Chrome.
-    ComponentExtensionResourceInfo resource_info;
+    int resource_id = 0;
     const base::FilePath bundle_resource_path =
         ExtensionsBrowserClient::Get()->GetBundleResourcePath(
-            request, directory_path, &resource_info);
+            request, directory_path, &resource_id);
     if (!bundle_resource_path.empty()) {
       ExtensionsBrowserClient::Get()->LoadResourceFromResourceBundle(
-          request, std::move(loader), bundle_resource_path, resource_info,
+          request, std::move(loader), bundle_resource_path, resource_id,
           content_security_policy, std::move(client), send_cors_header);
       return;
     }
diff --git a/extensions/browser/extension_user_script_loader.cc b/extensions/browser/extension_user_script_loader.cc
index 3c95b804..9d9e9b1b 100644
--- a/extensions/browser/extension_user_script_loader.cc
+++ b/extensions/browser/extension_user_script_loader.cc
@@ -95,15 +95,15 @@
       script_file->extension_root(), script_file->relative_path(),
       ExtensionResource::SYMLINKS_MUST_RESOLVE_WITHIN_ROOT);
   if (path.empty()) {
-    ComponentExtensionResourceInfo resource_info;
+    int resource_id = 0;
     if (ExtensionsBrowserClient::Get()
             ->GetComponentExtensionResourceManager()
             ->IsComponentExtensionResource(script_file->extension_root(),
                                            script_file->relative_path(),
-                                           &resource_info)) {
-      DCHECK(!resource_info.gzipped);
+                                           &resource_id)) {
       const ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
-      content = rb.GetRawDataResource(resource_info.resource_id).as_string();
+      DCHECK(!rb.IsGzipped(resource_id));
+      content = rb.GetRawDataResource(resource_id).as_string();
     } else {
       LOG(WARNING) << "Failed to get file path to "
                    << script_file->relative_path().value() << " from "
diff --git a/extensions/browser/extensions_browser_client.h b/extensions/browser/extensions_browser_client.h
index 6d34f2d..366c593b 100644
--- a/extensions/browser/extensions_browser_client.h
+++ b/extensions/browser/extensions_browser_client.h
@@ -57,7 +57,6 @@
 
 namespace extensions {
 
-struct ComponentExtensionResourceInfo;
 class ComponentExtensionResourceManager;
 class Extension;
 class ExtensionCache;
@@ -169,7 +168,7 @@
   virtual base::FilePath GetBundleResourcePath(
       const network::ResourceRequest& request,
       const base::FilePath& extension_resources_path,
-      ComponentExtensionResourceInfo* resource_info) const = 0;
+      int* resource_id) const = 0;
 
   // Creates and starts a URLLoader to load an extension resource from the
   // embedder's resource bundle (.pak) files. Used for component extensions.
@@ -177,7 +176,7 @@
       const network::ResourceRequest& request,
       network::mojom::URLLoaderRequest loader,
       const base::FilePath& resource_relative_path,
-      const ComponentExtensionResourceInfo& resource_info,
+      int resource_id,
       const std::string& content_security_policy,
       network::mojom::URLLoaderClientPtr client,
       bool send_cors_header) = 0;
diff --git a/extensions/browser/image_loader.cc b/extensions/browser/image_loader.cc
index 45aecaa..ae4efad 100644
--- a/extensions/browser/image_loader.cc
+++ b/extensions/browser/image_loader.cc
@@ -111,16 +111,16 @@
     DCHECK(it->resource.relative_path().empty() ||
            extension->path() == it->resource.extension_root());
 
-    ComponentExtensionResourceInfo resource_info;
+    int resource_id = 0;
     if (extension->location() == Manifest::COMPONENT) {
       const extensions::ComponentExtensionResourceManager* manager =
           extensions::ExtensionsBrowserClient::Get()
               ->GetComponentExtensionResourceManager();
-      if (manager && manager->IsComponentExtensionResource(
-                         extension->path(), it->resource.relative_path(),
-                         &resource_info)) {
-        DCHECK(!resource_info.gzipped);
-        LoadResourceOnUIThread(resource_info.resource_id, &bitmaps[i]);
+      if (manager &&
+          manager->IsComponentExtensionResource(
+              extension->path(), it->resource.relative_path(), &resource_id)) {
+        DCHECK(!ui::ResourceBundle::GetSharedInstance().IsGzipped(resource_id));
+        LoadResourceOnUIThread(resource_id, &bitmaps[i]);
       }
     }
   }
diff --git a/extensions/browser/test_extensions_browser_client.cc b/extensions/browser/test_extensions_browser_client.cc
index e604f44..0f2af5b4 100644
--- a/extensions/browser/test_extensions_browser_client.cc
+++ b/extensions/browser/test_extensions_browser_client.cc
@@ -7,7 +7,6 @@
 #include "base/values.h"
 #include "build/build_config.h"
 #include "content/public/browser/browser_context.h"
-#include "extensions/browser/component_extension_resource_manager.h"
 #include "extensions/browser/extension_host_delegate.h"
 #include "extensions/browser/test_runtime_api_delegate.h"
 #include "extensions/browser/updater/null_extension_cache.h"
@@ -136,8 +135,8 @@
 base::FilePath TestExtensionsBrowserClient::GetBundleResourcePath(
     const network::ResourceRequest& request,
     const base::FilePath& extension_resources_path,
-    ComponentExtensionResourceInfo* resource_info) const {
-  *resource_info = {};
+    int* resource_id) const {
+  *resource_id = 0;
   return base::FilePath();
 }
 
@@ -145,7 +144,7 @@
     const network::ResourceRequest& request,
     network::mojom::URLLoaderRequest loader,
     const base::FilePath& resource_relative_path,
-    const ComponentExtensionResourceInfo& resource_info,
+    int resource_id,
     const std::string& content_security_policy,
     network::mojom::URLLoaderClientPtr client,
     bool send_cors_header) {
diff --git a/extensions/browser/test_extensions_browser_client.h b/extensions/browser/test_extensions_browser_client.h
index f2df500..10810a5 100644
--- a/extensions/browser/test_extensions_browser_client.h
+++ b/extensions/browser/test_extensions_browser_client.h
@@ -90,12 +90,12 @@
   base::FilePath GetBundleResourcePath(
       const network::ResourceRequest& request,
       const base::FilePath& extension_resources_path,
-      ComponentExtensionResourceInfo* resource_info) const override;
+      int* resource_id) const override;
   void LoadResourceFromResourceBundle(
       const network::ResourceRequest& request,
       network::mojom::URLLoaderRequest loader,
       const base::FilePath& resource_relative_path,
-      const ComponentExtensionResourceInfo& resource_info,
+      int resource_id,
       const std::string& content_security_policy,
       network::mojom::URLLoaderClientPtr client,
       bool send_cors_header) override;
diff --git a/extensions/browser/updater/extension_downloader.cc b/extensions/browser/updater/extension_downloader.cc
index eb5df4d..f6d4cbb 100644
--- a/extensions/browser/updater/extension_downloader.cc
+++ b/extensions/browser/updater/extension_downloader.cc
@@ -274,7 +274,19 @@
   // Use a zero version to ensure that a pending extension will always
   // be updated, and thus installed (assuming all extensions have
   // non-zero versions).
-  base::Version version("0.0.0.0");
+  return AddPendingExtensionWithVersion(
+      id, update_url, install_location, is_corrupt_reinstall, request_id,
+      fetch_priority, base::Version("0.0.0.0"));
+}
+
+bool ExtensionDownloader::AddPendingExtensionWithVersion(
+    const std::string& id,
+    const GURL& update_url,
+    Manifest::Location install_location,
+    bool is_corrupt_reinstall,
+    int request_id,
+    ManifestFetchData::FetchPriority fetch_priority,
+    base::Version version) {
   DCHECK(version.IsValid());
   ExtraParams extra;
   if (is_corrupt_reinstall)
diff --git a/extensions/browser/updater/extension_downloader.h b/extensions/browser/updater/extension_downloader.h
index e30f5a88..05f7ffb1 100644
--- a/extensions/browser/updater/extension_downloader.h
+++ b/extensions/browser/updater/extension_downloader.h
@@ -99,6 +99,14 @@
                     int request_id,
                     ManifestFetchData::FetchPriority fetch_priority);
 
+  // Check AddPendingExtensionWithVersion with the version set as "0.0.0.0".
+  bool AddPendingExtension(const std::string& id,
+                           const GURL& update_url,
+                           Manifest::Location install_source,
+                           bool is_corrupt_reinstall,
+                           int request_id,
+                           ManifestFetchData::FetchPriority fetch_priority);
+
   // Adds extension |id| to the list of extensions to check for updates.
   // Returns false if the |id| can't be updated due to invalid details.
   // In that case, no callbacks will be performed on the |delegate_|.
@@ -108,13 +116,17 @@
   // parameter is used to indicate in the request that we detected corruption in
   // the local copy of the extension and we want to perform a reinstall of it.
   // |fetch_priority| parameter notifies the downloader the priority of this
-  // extension update (either foreground or background).
-  bool AddPendingExtension(const std::string& id,
-                           const GURL& update_url,
-                           Manifest::Location install_source,
-                           bool is_corrupt_reinstall,
-                           int request_id,
-                           ManifestFetchData::FetchPriority fetch_priority);
+  // extension update (either foreground or background). The |version|
+  // parameter specifies the version of the downloaded crx file,
+  // equals to 0.0.0.0 if there is no crx file.
+  bool AddPendingExtensionWithVersion(
+      const std::string& id,
+      const GURL& update_url,
+      Manifest::Location install_source,
+      bool is_corrupt_reinstall,
+      int request_id,
+      ManifestFetchData::FetchPriority fetch_priority,
+      base::Version version);
 
   // Schedules a fetch of the manifest of all the extensions added with
   // AddExtension() and AddPendingExtension().
diff --git a/extensions/browser/updater/extension_downloader_unittest.cc b/extensions/browser/updater/extension_downloader_unittest.cc
index b52d13c..32dcbc1 100644
--- a/extensions/browser/updater/extension_downloader_unittest.cc
+++ b/extensions/browser/updater/extension_downloader_unittest.cc
@@ -13,6 +13,7 @@
 
 using testing::_;
 using testing::AnyNumber;
+using testing::DoAll;
 using testing::Return;
 using testing::Sequence;
 using testing::SetArgPointee;
diff --git a/extensions/shell/browser/shell_extensions_browser_client.cc b/extensions/shell/browser/shell_extensions_browser_client.cc
index f6f77b7..13531dc 100644
--- a/extensions/shell/browser/shell_extensions_browser_client.cc
+++ b/extensions/shell/browser/shell_extensions_browser_client.cc
@@ -18,7 +18,6 @@
 #include "content/public/browser/resource_request_info.h"
 #include "content/public/common/user_agent.h"
 #include "extensions/browser/api/extensions_api_client.h"
-#include "extensions/browser/component_extension_resource_manager.h"
 #include "extensions/browser/core_extensions_browser_api_provider.h"
 #include "extensions/browser/event_router.h"
 #include "extensions/browser/mojo/interface_registration.h"
@@ -134,8 +133,8 @@
 base::FilePath ShellExtensionsBrowserClient::GetBundleResourcePath(
     const network::ResourceRequest& request,
     const base::FilePath& extension_resources_path,
-    ComponentExtensionResourceInfo* resource_info) const {
-  *resource_info = {};
+    int* resource_id) const {
+  *resource_id = 0;
   return base::FilePath();
 }
 
@@ -143,7 +142,7 @@
     const network::ResourceRequest& request,
     network::mojom::URLLoaderRequest loader,
     const base::FilePath& resource_relative_path,
-    const ComponentExtensionResourceInfo& resource_info,
+    int resource_id,
     const std::string& content_security_policy,
     network::mojom::URLLoaderClientPtr client,
     bool send_cors_header) {
diff --git a/extensions/shell/browser/shell_extensions_browser_client.h b/extensions/shell/browser/shell_extensions_browser_client.h
index 11e86b9..7005ae2 100644
--- a/extensions/shell/browser/shell_extensions_browser_client.h
+++ b/extensions/shell/browser/shell_extensions_browser_client.h
@@ -62,12 +62,12 @@
   base::FilePath GetBundleResourcePath(
       const network::ResourceRequest& request,
       const base::FilePath& extension_resources_path,
-      ComponentExtensionResourceInfo* resource_info) const override;
+      int* resource_id) const override;
   void LoadResourceFromResourceBundle(
       const network::ResourceRequest& request,
       network::mojom::URLLoaderRequest loader,
       const base::FilePath& resource_relative_path,
-      const ComponentExtensionResourceInfo& resource_info,
+      int resource_id,
       const std::string& content_security_policy,
       network::mojom::URLLoaderClientPtr client,
       bool send_cors_header) override;
diff --git a/gpu/command_buffer/client/transfer_buffer_unittest.cc b/gpu/command_buffer/client/transfer_buffer_unittest.cc
index 002bda4..8ca8609 100644
--- a/gpu/command_buffer/client/transfer_buffer_unittest.cc
+++ b/gpu/command_buffer/client/transfer_buffer_unittest.cc
@@ -20,6 +20,7 @@
 
 using ::testing::_;
 using ::testing::AtMost;
+using ::testing::DoAll;
 using ::testing::Invoke;
 using ::testing::Return;
 using ::testing::SetArgPointee;
diff --git a/gpu/command_buffer/service/command_buffer_service_unittest.cc b/gpu/command_buffer/service/command_buffer_service_unittest.cc
index 9237e0b..fc94e3db 100644
--- a/gpu/command_buffer/service/command_buffer_service_unittest.cc
+++ b/gpu/command_buffer/service/command_buffer_service_unittest.cc
@@ -17,6 +17,7 @@
 namespace gpu {
 
 using testing::_;
+using testing::DoAll;
 using testing::Mock;
 using testing::Return;
 using testing::Sequence;
diff --git a/headless/OWNERS b/headless/OWNERS
index 4686edf..d6a1011 100644
--- a/headless/OWNERS
+++ b/headless/OWNERS
@@ -5,6 +5,8 @@
 dgozman@chromium.org
 pfeldman@chromium.org
 caseq@chromium.org
+johannes@chromium.org
+kvitekp@chromium.org
 
 # Emeritus:
 altimin@chromium.org
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd
index ea434d3..b4bf6a4 100644
--- a/ios/chrome/app/strings/ios_strings.grd
+++ b/ios/chrome/app/strings/ios_strings.grd
@@ -1478,7 +1478,7 @@
       <message name="IDS_IOS_SHARE_MENU_REQUEST_DESKTOP_SITE" desc="Text label to the Request Desktop Site action in the extension menu that request the desktop version of the current page. [iOS only]">
         Request Desktop Site
       </message>
-      <message name="IDS_IOS_SHARE_MENU_REQUEST_MOBILE_SITE" desc="Text label to the Request Desktop Site action in the extension menu that request the desktop version of the current page. [iOS only]">
+      <message name="IDS_IOS_SHARE_MENU_REQUEST_MOBILE_SITE" desc="Text label to the Request Mobile Site action in the extension menu that request the mobile version of the current page. [iOS only]">
         Request Mobile Site
       </message>
       <message name="IDS_IOS_SHARE_MESSAGES_COMPLETE" desc="Message shown when message share has been sent. [Length: Unknown. Keep it short.] [iOS only]">
diff --git a/ios/chrome/browser/about_flags.mm b/ios/chrome/browser/about_flags.mm
index dcd496c..7f399f6 100644
--- a/ios/chrome/browser/about_flags.mm
+++ b/ios/chrome/browser/about_flags.mm
@@ -586,6 +586,9 @@
     {"lock-bottom-toolbar", flag_descriptions::kLockBottomToolbarName,
      flag_descriptions::kLockBottomToolbarDescription, flags_ui::kOsIos,
      FEATURE_VALUE_TYPE(fullscreen::features::kLockBottomToolbar)},
+    {"identity-disc", flag_descriptions::kIdentityDiscName,
+     flag_descriptions::kIdentityDiscDescription, flags_ui::kOsIos,
+     FEATURE_VALUE_TYPE(kIdentityDisc)},
 };
 
 // Add all switches from experimental flags to |command_line|.
diff --git a/ios/chrome/browser/autofill/form_suggestion_label.mm b/ios/chrome/browser/autofill/form_suggestion_label.mm
index 603a65d..658473b6 100644
--- a/ios/chrome/browser/autofill/form_suggestion_label.mm
+++ b/ios/chrome/browser/autofill/form_suggestion_label.mm
@@ -13,7 +13,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/sys_string_conversions.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #import "components/autofill/ios/browser/form_suggestion.h"
 #import "ios/chrome/browser/autofill/form_suggestion_client.h"
 #include "ios/chrome/browser/ui/util/ui_util.h"
diff --git a/ios/chrome/browser/browser_about_rewriter.cc b/ios/chrome/browser/browser_about_rewriter.cc
index 3145942..0b8bce8 100644
--- a/ios/chrome/browser/browser_about_rewriter.cc
+++ b/ios/chrome/browser/browser_about_rewriter.cc
@@ -36,7 +36,10 @@
   *url = url_formatter::FixupURL(url->possibly_invalid_spec(), std::string());
 
   // Check that about: URLs are fixed up to chrome: by url_formatter::FixupURL.
-  DCHECK((*url == url::kAboutBlankURL) || !url->SchemeIs(url::kAboutScheme));
+  // 'about:blank' is special-cased in various places in the code so it
+  // shouldn't be transformed.
+  DCHECK(!url->SchemeIs(url::kAboutScheme) ||
+         (url->path() == url::kAboutBlankPath));
 
   // url_formatter::FixupURL translates about:foo into chrome://foo/.
   if (!url->SchemeIs(kChromeUIScheme))
diff --git a/ios/chrome/browser/browser_about_rewriter_unittest.cc b/ios/chrome/browser/browser_about_rewriter_unittest.cc
index 6d25552..2ce189cc 100644
--- a/ios/chrome/browser/browser_about_rewriter_unittest.cc
+++ b/ios/chrome/browser/browser_about_rewriter_unittest.cc
@@ -20,7 +20,8 @@
   EXPECT_FALSE(WillHandleWebBrowserAboutURL(&url, nil));
 }
 
-// Test that about|chrome://about is rewritten to chrome-urls.
+// Test that about|chrome://about is rewritten to chrome-urls and about:blank
+// is not.
 TEST_F(BrowserAboutRewriterTest, AboutTest) {
   GURL url = GURL("about:about");
   EXPECT_FALSE(WillHandleWebBrowserAboutURL(&url, /*browser_state=*/nullptr));
@@ -29,6 +30,10 @@
   url = GURL("chrome://about/");
   EXPECT_FALSE(WillHandleWebBrowserAboutURL(&url, /*browser_state=*/nullptr));
   EXPECT_EQ(url, GURL("chrome://chrome-urls/"));
+
+  url = GURL("about:blank?for=");
+  EXPECT_FALSE(WillHandleWebBrowserAboutURL(&url, /*browser_state=*/nullptr));
+  EXPECT_EQ(url, GURL("about:blank?for="));
 }
 
 // Test that about|chrome://sync is rewritten to sync-internals.
diff --git a/ios/chrome/browser/ios_chrome_flag_descriptions.cc b/ios/chrome/browser/ios_chrome_flag_descriptions.cc
index 835ebdf..b7fceb4 100644
--- a/ios/chrome/browser/ios_chrome_flag_descriptions.cc
+++ b/ios/chrome/browser/ios_chrome_flag_descriptions.cc
@@ -278,6 +278,10 @@
     "When enabled History inserts and deletes history items in the same "
     "BatchUpdates block.";
 
+const char kIdentityDiscName[] = "Identity Disc";
+const char kIdentityDiscDescription[] =
+    "Enables Identity Disc, profile avatar icon button in toolbar.";
+
 const char kInfobarUIRebootName[] = "Infobar UI Reboot";
 const char kInfobarUIRebootDescription[] =
     "When enabled, Infobar will use the new UI.";
diff --git a/ios/chrome/browser/ios_chrome_flag_descriptions.h b/ios/chrome/browser/ios_chrome_flag_descriptions.h
index cf6c92bb..3e07954 100644
--- a/ios/chrome/browser/ios_chrome_flag_descriptions.h
+++ b/ios/chrome/browser/ios_chrome_flag_descriptions.h
@@ -227,6 +227,11 @@
 extern const char kHistoryBatchUpdatesFilterName[];
 extern const char kHistoryBatchUpdatesFilterDescription[];
 
+// Title and description for the flag to display current user identity on
+// New Tab Page.
+extern const char kIdentityDiscName[];
+extern const char kIdentityDiscDescription[];
+
 // Title and description for the flag to enable the new UI Reboot on Infobars.
 extern const char kInfobarUIRebootName[];
 extern const char kInfobarUIRebootDescription[];
diff --git a/ios/chrome/browser/passwords/ios_chrome_password_manager_client.h b/ios/chrome/browser/passwords/ios_chrome_password_manager_client.h
index de74a1a..db5097a 100644
--- a/ios/chrome/browser/passwords/ios_chrome_password_manager_client.h
+++ b/ios/chrome/browser/passwords/ios_chrome_password_manager_client.h
@@ -20,6 +20,7 @@
 
 namespace password_manager {
 class PasswordFormManagerForUI;
+class PasswordManagerDriver;
 }
 
 namespace web {
@@ -73,7 +74,7 @@
       bool has_generated_password,
       bool is_update) override;
   void HideManualFallbackForSaving() override;
-  void FocusedInputChanged(const url::Origin& last_committed_origin,
+  void FocusedInputChanged(password_manager::PasswordManagerDriver* driver,
                            bool is_fillable,
                            bool is_password_field) override;
   bool PromptUserToChooseCredentials(
diff --git a/ios/chrome/browser/passwords/ios_chrome_password_manager_client.mm b/ios/chrome/browser/passwords/ios_chrome_password_manager_client.mm
index e86b33a4..3199286 100644
--- a/ios/chrome/browser/passwords/ios_chrome_password_manager_client.mm
+++ b/ios/chrome/browser/passwords/ios_chrome_password_manager_client.mm
@@ -15,6 +15,7 @@
 #include "components/password_manager/core/browser/password_form_manager_for_ui.h"
 #include "components/password_manager/core/browser/password_manager.h"
 #include "components/password_manager/core/browser/password_manager_constants.h"
+#include "components/password_manager/core/browser/password_manager_driver.h"
 #include "components/password_manager/core/browser/password_manager_internals_service.h"
 #include "components/password_manager/core/browser/password_manager_util.h"
 #include "components/password_manager/core/browser/password_requirements_service.h"
@@ -121,7 +122,7 @@
 }
 
 void IOSChromePasswordManagerClient::FocusedInputChanged(
-    const url::Origin& last_committed_origin,
+    password_manager::PasswordManagerDriver* driver,
     bool is_fillable,
     bool is_password_field) {
   NOTIMPLEMENTED();
diff --git a/ios/chrome/browser/payments/payment_request.h b/ios/chrome/browser/payments/payment_request.h
index 46a87e4..c6427a9 100644
--- a/ios/chrome/browser/payments/payment_request.h
+++ b/ios/chrome/browser/payments/payment_request.h
@@ -15,7 +15,7 @@
 #include "base/memory/weak_ptr.h"
 #include "components/autofill/core/browser/address_normalization_manager.h"
 #include "components/autofill/core/browser/address_normalizer_impl.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/payments/core/journey_logger.h"
 #include "components/payments/core/payment_instrument.h"
 #include "components/payments/core/payment_options_provider.h"
diff --git a/ios/chrome/browser/payments/payment_request.mm b/ios/chrome/browser/payments/payment_request.mm
index 03ffd65a..86824cd4 100644
--- a/ios/chrome/browser/payments/payment_request.mm
+++ b/ios/chrome/browser/payments/payment_request.mm
@@ -13,7 +13,7 @@
 #include "base/logging.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/region_data_loader_impl.h"
 #include "components/autofill/core/browser/validation.h"
diff --git a/ios/chrome/browser/payments/payment_request_util.mm b/ios/chrome/browser/payments/payment_request_util.mm
index aecf6768..c3d4eb6 100644
--- a/ios/chrome/browser/payments/payment_request_util.mm
+++ b/ios/chrome/browser/payments/payment_request_util.mm
@@ -9,8 +9,8 @@
 #include "base/strings/string_split.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/phone_number_i18n.h"
diff --git a/ios/chrome/browser/payments/payment_response_helper.h b/ios/chrome/browser/payments/payment_response_helper.h
index 21afcd1..9398ecb9 100644
--- a/ios/chrome/browser/payments/payment_response_helper.h
+++ b/ios/chrome/browser/payments/payment_response_helper.h
@@ -11,7 +11,7 @@
 
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/payments/core/payment_instrument.h"
 #include "components/payments/core/payment_response.h"
 #include "components/payments/core/web_payment_request.h"
diff --git a/ios/chrome/browser/payments/payment_response_helper_unittest.mm b/ios/chrome/browser/payments/payment_response_helper_unittest.mm
index 0eb5d55..8cd7f317a 100644
--- a/ios/chrome/browser/payments/payment_response_helper_unittest.mm
+++ b/ios/chrome/browser/payments/payment_response_helper_unittest.mm
@@ -13,9 +13,9 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_task_environment.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/test_personal_data_manager.h"
 #include "components/payments/core/basic_card_response.h"
 #include "components/payments/core/payment_request_data_util.h"
diff --git a/ios/chrome/browser/reading_list/offline_page_tab_helper.mm b/ios/chrome/browser/reading_list/offline_page_tab_helper.mm
index 6bec2f8..e843132 100644
--- a/ios/chrome/browser/reading_list/offline_page_tab_helper.mm
+++ b/ios/chrome/browser/reading_list/offline_page_tab_helper.mm
@@ -133,10 +133,9 @@
   }
   DCHECK(mime);
   presenting_offline_page_ = true;
-  NSString* ns_data = base::SysUTF8ToNSString(data);
+  NSData* ns_data = [NSData dataWithBytes:data.c_str() length:data.size()];
   offline_navigation_triggered_ = url;
-  web_state_->LoadData([ns_data dataUsingEncoding:NSUTF8StringEncoding], mime,
-                       url);
+  web_state_->LoadData(ns_data, mime, url);
 }
 
 void OfflinePageTabHelper::DidStartNavigation(web::WebState* web_state,
diff --git a/ios/chrome/browser/signin/feature_flags.h b/ios/chrome/browser/signin/feature_flags.h
index dc82b280..00237400 100644
--- a/ios/chrome/browser/signin/feature_flags.h
+++ b/ios/chrome/browser/signin/feature_flags.h
@@ -10,4 +10,7 @@
 // Feature flag to enable NSURLSession for GAIAAuthFetcherIOS.
 extern const base::Feature kUseNSURLSessionForGaiaSigninRequests;
 
+// Feature flag to enable display of current user identity on New Tab Page.
+extern const base::Feature kIdentityDisc;
+
 #endif  // IOS_CHROME_BROWSER_SIGNIN_FEATURE_FLAGS_H_
diff --git a/ios/chrome/browser/signin/feature_flags.mm b/ios/chrome/browser/signin/feature_flags.mm
index 6374db8..efdcec4 100644
--- a/ios/chrome/browser/signin/feature_flags.mm
+++ b/ios/chrome/browser/signin/feature_flags.mm
@@ -13,3 +13,6 @@
 // See: http://crbug.com/939508.
 const base::Feature kUseNSURLSessionForGaiaSigninRequests{
     "UseNSURLSessionForGaiaSigninRequests", base::FEATURE_DISABLED_BY_DEFAULT};
+
+const base::Feature kIdentityDisc{"IdentityDisc",
+                                  base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/address_coordinator.mm b/ios/chrome/browser/ui/autofill/manual_fill/address_coordinator.mm
index 9e0f015..59bba62 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/address_coordinator.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/address_coordinator.mm
@@ -6,7 +6,7 @@
 
 #include "base/memory/ref_counted.h"
 #include "base/strings/sys_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/ios/browser/autofill_driver_ios.h"
 #import "components/autofill/ios/browser/personal_data_manager_observer_bridge.h"
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/address_form.mm b/ios/chrome/browser/ui/autofill/manual_fill/address_form.mm
index 8fc22e4..818842a 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/address_form.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/address_form.mm
@@ -6,7 +6,7 @@
 
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "ios/chrome/browser/application_context.h"
 #include "url/gurl.h"
 
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/address_form_unittest.mm b/ios/chrome/browser/ui/autofill/manual_fill/address_form_unittest.mm
index 7e68c8b..d5c15af7 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/address_form_unittest.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/address_form_unittest.mm
@@ -6,8 +6,8 @@
 
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/country_names.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "ios/chrome/browser/application_context.h"
 #include "testing/platform_test.h"
 #include "url/gurl.h"
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/address_mediator.mm b/ios/chrome/browser/ui/autofill/manual_fill/address_mediator.mm
index 2b87d06a..cdd8491 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/address_mediator.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/address_mediator.mm
@@ -7,7 +7,7 @@
 #include <vector>
 
 #include "base/metrics/user_metrics.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #import "ios/chrome/browser/ui/autofill/manual_fill/action_cell.h"
 #import "ios/chrome/browser/ui/autofill/manual_fill/address.h"
 #import "ios/chrome/browser/ui/autofill/manual_fill/address_consumer.h"
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/card_coordinator.mm b/ios/chrome/browser/ui/autofill/manual_fill/card_coordinator.mm
index cea7351..ff7bef2 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/card_coordinator.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/card_coordinator.mm
@@ -5,7 +5,7 @@
 #import "ios/chrome/browser/ui/autofill/manual_fill/card_coordinator.h"
 
 #include "base/memory/ref_counted.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/ios/browser/autofill_driver_ios.h"
 #import "components/autofill/ios/browser/personal_data_manager_observer_bridge.h"
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/card_mediator.mm b/ios/chrome/browser/ui/autofill/manual_fill/card_mediator.mm
index 12522ec..5369ee1 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/card_mediator.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/card_mediator.mm
@@ -10,7 +10,7 @@
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_manager.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #import "ios/chrome/browser/ui/autofill/manual_fill/action_cell.h"
 #import "ios/chrome/browser/ui/autofill/manual_fill/card_consumer.h"
 #import "ios/chrome/browser/ui/autofill/manual_fill/card_list_delegate.h"
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/card_view_controller_egtest.mm b/ios/chrome/browser/ui/autofill/manual_fill/card_view_controller_egtest.mm
index 2f71fe0f..e3748a0 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/card_view_controller_egtest.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/card_view_controller_egtest.mm
@@ -10,7 +10,7 @@
 #include "base/strings/utf_string_conversions.h"
 #import "base/test/ios/wait_util.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/common/autofill_features.h"
 #include "components/keyed_service/core/service_access_type.h"
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/credit_card_form.mm b/ios/chrome/browser/ui/autofill/manual_fill/credit_card_form.mm
index 6916af3..055a5f6 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/credit_card_form.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/credit_card_form.mm
@@ -7,7 +7,7 @@
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #import "components/autofill/ios/browser/credit_card_util.h"
 #include "ios/chrome/browser/application_context.h"
 #include "url/gurl.h"
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/credit_card_form_unittest.mm b/ios/chrome/browser/ui/autofill/manual_fill/credit_card_form_unittest.mm
index f91ba28..8b5c3c6 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/credit_card_form_unittest.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/credit_card_form_unittest.mm
@@ -6,7 +6,7 @@
 
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "testing/platform_test.h"
 #include "url/gurl.h"
 
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/full_card_request_result_delegate_bridge.h b/ios/chrome/browser/ui/autofill/manual_fill/full_card_request_result_delegate_bridge.h
index 4599928..70dbf671 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/full_card_request_result_delegate_bridge.h
+++ b/ios/chrome/browser/ui/autofill/manual_fill/full_card_request_result_delegate_bridge.h
@@ -11,7 +11,7 @@
 #include <vector>
 
 #include "base/macros.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/payments/full_card_request.h"
 
 // Obj-C delegate to receive the success or failure result, when asking credit
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/full_card_request_result_delegate_bridge.mm b/ios/chrome/browser/ui/autofill/manual_fill/full_card_request_result_delegate_bridge.mm
index 5efbf09..5aa41ed6 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/full_card_request_result_delegate_bridge.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/full_card_request_result_delegate_bridge.mm
@@ -7,7 +7,7 @@
 #include "base/containers/adapters.h"
 #include "base/strings/string16.h"
 #include "components/autofill/core/browser/autofill_manager.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/form_structure.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/full_card_requester.mm b/ios/chrome/browser/ui/autofill/manual_fill/full_card_requester.mm
index 6ccce5b..6b4ec62 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/full_card_requester.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/full_card_requester.mm
@@ -6,7 +6,7 @@
 
 #include <vector>
 
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/ios/browser/autofill_driver_ios.h"
 #import "ios/chrome/browser/ui/autofill/manual_fill/full_card_request_result_delegate_bridge.h"
 #include "ios/chrome/browser/ui/payments/full_card_requester.h"
diff --git a/ios/chrome/browser/ui/infobars/BUILD.gn b/ios/chrome/browser/ui/infobars/BUILD.gn
index b1639ad..f279795c 100644
--- a/ios/chrome/browser/ui/infobars/BUILD.gn
+++ b/ios/chrome/browser/ui/infobars/BUILD.gn
@@ -30,6 +30,7 @@
 
 source_set("public") {
   sources = [
+    "infobar_container.h",
     "infobar_positioner.h",
   ]
 }
diff --git a/ios/chrome/browser/ui/infobars/coordinators/BUILD.gn b/ios/chrome/browser/ui/infobars/coordinators/BUILD.gn
index 12eb5e1..079f018 100644
--- a/ios/chrome/browser/ui/infobars/coordinators/BUILD.gn
+++ b/ios/chrome/browser/ui/infobars/coordinators/BUILD.gn
@@ -24,6 +24,7 @@
     "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
     "//ios/chrome/browser/ui/fullscreen",
     "//ios/chrome/browser/ui/infobars:infobars_ui",
+    "//ios/chrome/browser/ui/infobars:public",
     "//ios/chrome/browser/ui/infobars/banners",
     "//ios/chrome/browser/ui/infobars/modals",
     "//ios/chrome/browser/ui/infobars/presentation",
diff --git a/ios/chrome/browser/ui/infobars/coordinators/infobar_confirm_coordinator.mm b/ios/chrome/browser/ui/infobars/coordinators/infobar_confirm_coordinator.mm
index 3362ff8b..b80eb69 100644
--- a/ios/chrome/browser/ui/infobars/coordinators/infobar_confirm_coordinator.mm
+++ b/ios/chrome/browser/ui/infobars/coordinators/infobar_confirm_coordinator.mm
@@ -9,6 +9,7 @@
 #include "ios/chrome/browser/infobars/infobar_controller_delegate.h"
 #import "ios/chrome/browser/ui/infobars/banners/infobar_banner_view_controller.h"
 #import "ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator_implementation.h"
+#import "ios/chrome/browser/ui/infobars/infobar_container.h"
 #import "ios/chrome/browser/ui/infobars/modals/infobar_modal_view_controller.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
@@ -63,6 +64,8 @@
     // RemoveInfoBar() will delete the InfobarIOS that owns this Coordinator
     // from memory.
     self.delegate->RemoveInfoBar();
+    _confirmInfobarDelegate = nil;
+    [self.infobarContainer childCoordinatorStopped];
   }
 }
 
diff --git a/ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator.h b/ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator.h
index ddd8665..5acb747 100644
--- a/ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator.h
+++ b/ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator.h
@@ -13,6 +13,7 @@
 
 @protocol ApplicationCommands;
 @protocol InfobarBadgeUIDelegate;
+@protocol InfobarContainer;
 
 @class InfobarBannerTransitionDriver;
 @class InfobarBannerViewController;
@@ -84,6 +85,9 @@
 // The dispatcher for this Coordinator.
 @property(nonatomic, weak) id<ApplicationCommands> dispatcher;
 
+// The InfobarContainer for this InfobarCoordinator.
+@property(nonatomic, weak) id<InfobarContainer> infobarContainer;
+
 // YES if an InfobarBanner is being presented.
 @property(nonatomic, assign, getter=isPresentingInfobarBanner)
     BOOL presentingInfobarBanner;
diff --git a/ios/chrome/browser/ui/infobars/coordinators/infobar_password_coordinator.mm b/ios/chrome/browser/ui/infobars/coordinators/infobar_password_coordinator.mm
index 1d87991..0a9afd07 100644
--- a/ios/chrome/browser/ui/infobars/coordinators/infobar_password_coordinator.mm
+++ b/ios/chrome/browser/ui/infobars/coordinators/infobar_password_coordinator.mm
@@ -12,6 +12,7 @@
 #import "ios/chrome/browser/ui/infobars/banners/infobar_banner_view_controller.h"
 #import "ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator_implementation.h"
 #import "ios/chrome/browser/ui/infobars/infobar_badge_ui_delegate.h"
+#import "ios/chrome/browser/ui/infobars/infobar_container.h"
 #import "ios/chrome/browser/ui/infobars/modals/infobar_password_modal_delegate.h"
 #import "ios/chrome/browser/ui/infobars/modals/infobar_password_table_view_controller.h"
 
@@ -87,6 +88,8 @@
     // RemoveInfoBar() will delete the InfobarIOS that owns this Coordinator
     // from memory.
     self.delegate->RemoveInfoBar();
+    _passwordInfoBarDelegate = nil;
+    [self.infobarContainer childCoordinatorStopped];
   }
 }
 
diff --git a/ios/chrome/browser/ui/infobars/infobar_container.h b/ios/chrome/browser/ui/infobars/infobar_container.h
new file mode 100644
index 0000000..e34834fd
--- /dev/null
+++ b/ios/chrome/browser/ui/infobars/infobar_container.h
@@ -0,0 +1,22 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_UI_INFOBARS_INFOBAR_CONTAINER_H_
+#define IOS_CHROME_BROWSER_UI_INFOBARS_INFOBAR_CONTAINER_H_
+
+#import <Foundation/Foundation.h>
+
+// Protocol for the InfobarCoordinators to communicate with the InfobarContainer
+// Coordinator.
+@protocol InfobarContainer
+
+// Informs the InfobarContainer Coordinator that its child coordinator has
+// stopped.
+// TODO(crbug.com/961343): Add support to indicate which Coordinator has
+// stopped.
+- (void)childCoordinatorStopped;
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_UI_INFOBARS_INFOBAR_CONTAINER_H_
diff --git a/ios/chrome/browser/ui/infobars/infobar_container_coordinator.mm b/ios/chrome/browser/ui/infobars/infobar_container_coordinator.mm
index 0a96a79..baa3abd 100644
--- a/ios/chrome/browser/ui/infobars/infobar_container_coordinator.mm
+++ b/ios/chrome/browser/ui/infobars/infobar_container_coordinator.mm
@@ -13,6 +13,7 @@
 #import "ios/chrome/browser/ui/fullscreen/fullscreen_controller_factory.h"
 #import "ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator.h"
 #import "ios/chrome/browser/ui/infobars/infobar_constants.h"
+#import "ios/chrome/browser/ui/infobars/infobar_container.h"
 #import "ios/chrome/browser/ui/infobars/infobar_container_consumer.h"
 #include "ios/chrome/browser/ui/infobars/infobar_container_mediator.h"
 #import "ios/chrome/browser/ui/infobars/infobar_feature.h"
@@ -24,7 +25,8 @@
 #error "This file requires ARC support."
 #endif
 
-@interface InfobarContainerCoordinator () <InfobarContainerConsumer>
+@interface InfobarContainerCoordinator () <InfobarContainer,
+                                           InfobarContainerConsumer>
 
 @property(nonatomic, assign) WebStateList* webStateList;
 
@@ -176,6 +178,7 @@
   infobarCoordinator.browserState = self.browserState;
   infobarCoordinator.baseViewController = self.baseViewController;
   infobarCoordinator.dispatcher = self.dispatcher;
+  infobarCoordinator.infobarContainer = self;
   if (!infobarCoordinator.bannerWasPresented)
     [infobarCoordinator presentInfobarBannerAnimated:YES completion:nil];
   self.infobarViewController = infobarCoordinator.bannerViewController;
@@ -203,6 +206,15 @@
   // since we use autolayout for the contained Infobars.
 }
 
+#pragma mark InfobarContainer
+
+- (void)childCoordinatorStopped {
+  DCHECK(IsInfobarUIRebootEnabled());
+  // TODO(crbug.com/961343): When more than one InfobarCoordinator can exist
+  // concurrently, delete only the one that stopped.
+  [self.childCoordinators removeAllObjects];
+}
+
 #pragma mark - InfobarCommands
 
 - (void)displayModalInfobar {
diff --git a/ios/chrome/browser/ui/infobars/infobar_container_coordinator_unittest.mm b/ios/chrome/browser/ui/infobars/infobar_container_coordinator_unittest.mm
index 1341263..ccbc304 100644
--- a/ios/chrome/browser/ui/infobars/infobar_container_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/infobars/infobar_container_coordinator_unittest.mm
@@ -328,3 +328,30 @@
       }));
   ASSERT_FALSE([infobar_container_coordinator_ isPresentingInfobarBanner]);
 }
+
+// Tests that the ChildCoordinator is deleted once it stops.
+// TODO(crbug.com/961343): Update test when more than one Child Coordinator is
+// supported.
+TEST_F(InfobarContainerCoordinatorTest, TestInfobarChildCoordinatorCount) {
+  AddInfobar();
+
+  EXPECT_TRUE(base::test::ios::WaitUntilConditionOrTimeout(
+      base::test::ios::kWaitForUIElementTimeout, ^bool {
+        return [infobar_container_coordinator_ isPresentingInfobarBanner];
+      }));
+  ASSERT_TRUE([infobar_container_coordinator_ isPresentingInfobarBanner]);
+
+  ASSERT_EQ(NSUInteger(1),
+            infobar_container_coordinator_.childCoordinators.count);
+  ASSERT_TRUE([infobar_container_coordinator_ isPresentingInfobarBanner]);
+
+  web_state_list_->CloseWebStateAt(0, 0);
+
+  ASSERT_TRUE(base::test::ios::WaitUntilConditionOrTimeout(
+      base::test::ios::kWaitForUIElementTimeout, ^bool {
+        return ![infobar_container_coordinator_ isPresentingInfobarBanner];
+      }));
+  ASSERT_FALSE([infobar_container_coordinator_ isPresentingInfobarBanner]);
+  ASSERT_EQ(NSUInteger(0),
+            infobar_container_coordinator_.childCoordinators.count);
+}
diff --git a/ios/chrome/browser/ui/payments/address_edit_coordinator.mm b/ios/chrome/browser/ui/payments/address_edit_coordinator.mm
index fd174ec4..5e560d3 100644
--- a/ios/chrome/browser/ui/payments/address_edit_coordinator.mm
+++ b/ios/chrome/browser/ui/payments/address_edit_coordinator.mm
@@ -8,8 +8,8 @@
 #include "base/logging.h"
 #include "base/strings/sys_string_conversions.h"
 #include "components/autofill/core/browser/autofill_country.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_type.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/common/autofill_constants.h"
 #include "ios/chrome/browser/payments/payment_request.h"
diff --git a/ios/chrome/browser/ui/payments/address_edit_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/address_edit_coordinator_unittest.mm
index b51b1129..fed9823 100644
--- a/ios/chrome/browser/ui/payments/address_edit_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/payments/address_edit_coordinator_unittest.mm
@@ -10,9 +10,9 @@
 #include "base/mac/foundation_util.h"
 #include "base/strings/utf_string_conversions.h"
 #import "base/test/ios/wait_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/country_names.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/test_personal_data_manager.h"
 #include "components/autofill/core/browser/test_region_data_loader.h"
 #include "ios/chrome/browser/payments/payment_request_test_util.h"
diff --git a/ios/chrome/browser/ui/payments/address_edit_mediator.mm b/ios/chrome/browser/ui/payments/address_edit_mediator.mm
index e2faceba..852ea86 100644
--- a/ios/chrome/browser/ui/payments/address_edit_mediator.mm
+++ b/ios/chrome/browser/ui/payments/address_edit_mediator.mm
@@ -16,9 +16,9 @@
 #include "components/autofill/core/browser/address_i18n.h"
 #include "components/autofill/core/browser/autofill_address_util.h"
 #include "components/autofill/core/browser/autofill_country.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_type.h"
 #include "components/autofill/core/browser/country_combobox_model.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/phone_number_i18n.h"
diff --git a/ios/chrome/browser/ui/payments/address_edit_mediator_unittest.mm b/ios/chrome/browser/ui/payments/address_edit_mediator_unittest.mm
index 6a63f29f..1c7c5986 100644
--- a/ios/chrome/browser/ui/payments/address_edit_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/payments/address_edit_mediator_unittest.mm
@@ -5,9 +5,9 @@
 #import "ios/chrome/browser/ui/payments/address_edit_mediator.h"
 
 #include "base/mac/foundation_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/country_names.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/test_region_data_loader.h"
 #include "components/strings/grit/components_strings.h"
 #import "ios/chrome/browser/payments/payment_request_unittest_base.h"
diff --git a/ios/chrome/browser/ui/payments/billing_address_selection_coordinator.mm b/ios/chrome/browser/ui/payments/billing_address_selection_coordinator.mm
index 3298c233..1fa4372 100644
--- a/ios/chrome/browser/ui/payments/billing_address_selection_coordinator.mm
+++ b/ios/chrome/browser/ui/payments/billing_address_selection_coordinator.mm
@@ -7,7 +7,7 @@
 #include <vector>
 
 #include "base/logging.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/strings/grit/components_strings.h"
 #include "ios/chrome/browser/payments/payment_request.h"
 #include "ios/chrome/browser/ui/payments/billing_address_selection_mediator.h"
diff --git a/ios/chrome/browser/ui/payments/billing_address_selection_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/billing_address_selection_coordinator_unittest.mm
index 7daa3ce..4006925 100644
--- a/ios/chrome/browser/ui/payments/billing_address_selection_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/payments/billing_address_selection_coordinator_unittest.mm
@@ -6,9 +6,9 @@
 
 #include "base/mac/foundation_util.h"
 #import "base/test/ios/wait_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/autofill_type.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/test_region_data_loader.h"
 #include "ios/chrome/browser/payments/payment_request_test_util.h"
diff --git a/ios/chrome/browser/ui/payments/billing_address_selection_mediator.mm b/ios/chrome/browser/ui/payments/billing_address_selection_mediator.mm
index 326f5d1..7ba787f 100644
--- a/ios/chrome/browser/ui/payments/billing_address_selection_mediator.mm
+++ b/ios/chrome/browser/ui/payments/billing_address_selection_mediator.mm
@@ -8,7 +8,7 @@
 
 #include "base/logging.h"
 #include "base/strings/sys_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/strings/grit/components_strings.h"
 #include "ios/chrome/browser/payments/payment_request.h"
 #import "ios/chrome/browser/payments/payment_request_util.h"
diff --git a/ios/chrome/browser/ui/payments/billing_address_selection_mediator_unittest.mm b/ios/chrome/browser/ui/payments/billing_address_selection_mediator_unittest.mm
index 7194cf6b..46e8242 100644
--- a/ios/chrome/browser/ui/payments/billing_address_selection_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/payments/billing_address_selection_mediator_unittest.mm
@@ -5,8 +5,8 @@
 #import "ios/chrome/browser/ui/payments/billing_address_selection_mediator.h"
 
 #include "base/mac/foundation_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #import "ios/chrome/browser/payments/payment_request_unittest_base.h"
 #import "ios/chrome/browser/payments/payment_request_util.h"
 #import "ios/chrome/browser/ui/payments/cells/autofill_profile_item.h"
diff --git a/ios/chrome/browser/ui/payments/contact_info_edit_coordinator.mm b/ios/chrome/browser/ui/payments/contact_info_edit_coordinator.mm
index e72c087..ae744be 100644
--- a/ios/chrome/browser/ui/payments/contact_info_edit_coordinator.mm
+++ b/ios/chrome/browser/ui/payments/contact_info_edit_coordinator.mm
@@ -8,8 +8,8 @@
 #include "base/logging.h"
 #include "base/strings/sys_string_conversions.h"
 #include "components/autofill/core/browser/autofill_country.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_type.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/validation.h"
 #include "components/autofill/core/common/autofill_constants.h"
diff --git a/ios/chrome/browser/ui/payments/contact_info_edit_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/contact_info_edit_coordinator_unittest.mm
index ff260598..a01f217 100644
--- a/ios/chrome/browser/ui/payments/contact_info_edit_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/payments/contact_info_edit_coordinator_unittest.mm
@@ -10,8 +10,8 @@
 #include "base/mac/foundation_util.h"
 #include "base/strings/utf_string_conversions.h"
 #import "base/test/ios/wait_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/test_personal_data_manager.h"
 #include "components/autofill/core/browser/test_region_data_loader.h"
 #include "ios/chrome/browser/payments/payment_request_test_util.h"
diff --git a/ios/chrome/browser/ui/payments/contact_info_edit_mediator.mm b/ios/chrome/browser/ui/payments/contact_info_edit_mediator.mm
index efdff5e..55cfdcd 100644
--- a/ios/chrome/browser/ui/payments/contact_info_edit_mediator.mm
+++ b/ios/chrome/browser/ui/payments/contact_info_edit_mediator.mm
@@ -7,8 +7,8 @@
 #include "base/logging.h"
 #include "base/strings/sys_string_conversions.h"
 #include "components/autofill/core/browser/autofill_country.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_type.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/phone_number_i18n.h"
 #include "components/autofill/core/browser/validation.h"
diff --git a/ios/chrome/browser/ui/payments/contact_info_edit_mediator_unittest.mm b/ios/chrome/browser/ui/payments/contact_info_edit_mediator_unittest.mm
index ed4f15a6..045397b1 100644
--- a/ios/chrome/browser/ui/payments/contact_info_edit_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/payments/contact_info_edit_mediator_unittest.mm
@@ -5,8 +5,8 @@
 #import "ios/chrome/browser/ui/payments/contact_info_edit_mediator.h"
 
 #include "base/mac/foundation_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/strings/grit/components_strings.h"
 #include "ios/chrome/browser/payments/payment_request_test_util.h"
 #import "ios/chrome/browser/payments/payment_request_unittest_base.h"
diff --git a/ios/chrome/browser/ui/payments/contact_info_selection_coordinator.mm b/ios/chrome/browser/ui/payments/contact_info_selection_coordinator.mm
index 8d831ea7..16f670a 100644
--- a/ios/chrome/browser/ui/payments/contact_info_selection_coordinator.mm
+++ b/ios/chrome/browser/ui/payments/contact_info_selection_coordinator.mm
@@ -5,7 +5,7 @@
 #import "ios/chrome/browser/ui/payments/contact_info_selection_coordinator.h"
 
 #include "base/strings/sys_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/payments/core/strings_util.h"
 #include "components/strings/grit/components_strings.h"
 #include "ios/chrome/browser/payments/payment_request.h"
diff --git a/ios/chrome/browser/ui/payments/contact_info_selection_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/contact_info_selection_coordinator_unittest.mm
index 5846a7b..cfa311d2 100644
--- a/ios/chrome/browser/ui/payments/contact_info_selection_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/payments/contact_info_selection_coordinator_unittest.mm
@@ -6,8 +6,8 @@
 
 #include "base/mac/foundation_util.h"
 #import "base/test/ios/wait_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "ios/chrome/browser/payments/payment_request_test_util.h"
 #import "ios/chrome/browser/payments/payment_request_unittest_base.h"
 #import "ios/chrome/browser/ui/payments/payment_request_selector_view_controller.h"
diff --git a/ios/chrome/browser/ui/payments/contact_info_selection_mediator.mm b/ios/chrome/browser/ui/payments/contact_info_selection_mediator.mm
index 63230b45..4f50a5b9 100644
--- a/ios/chrome/browser/ui/payments/contact_info_selection_mediator.mm
+++ b/ios/chrome/browser/ui/payments/contact_info_selection_mediator.mm
@@ -7,7 +7,7 @@
 #import "ios/chrome/browser/ui/payments/contact_info_selection_mediator.h"
 
 #include "base/logging.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/payments/core/payments_profile_comparator.h"
 #include "components/strings/grit/components_strings.h"
 #include "ios/chrome/browser/payments/payment_request.h"
diff --git a/ios/chrome/browser/ui/payments/contact_info_selection_mediator_unittest.mm b/ios/chrome/browser/ui/payments/contact_info_selection_mediator_unittest.mm
index 5ba2d37..8577b92b 100644
--- a/ios/chrome/browser/ui/payments/contact_info_selection_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/payments/contact_info_selection_mediator_unittest.mm
@@ -6,8 +6,8 @@
 
 #include "base/mac/foundation_util.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "ios/chrome/browser/payments/payment_request_test_util.h"
 #import "ios/chrome/browser/payments/payment_request_unittest_base.h"
 #import "ios/chrome/browser/payments/payment_request_util.h"
diff --git a/ios/chrome/browser/ui/payments/credit_card_edit_coordinator.mm b/ios/chrome/browser/ui/payments/credit_card_edit_coordinator.mm
index ee61c85..f80d597a 100644
--- a/ios/chrome/browser/ui/payments/credit_card_edit_coordinator.mm
+++ b/ios/chrome/browser/ui/payments/credit_card_edit_coordinator.mm
@@ -9,7 +9,7 @@
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_type.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/common/autofill_constants.h"
 #import "components/autofill/ios/browser/credit_card_util.h"
diff --git a/ios/chrome/browser/ui/payments/credit_card_edit_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/credit_card_edit_coordinator_unittest.mm
index 4d3b018..73b16e5 100644
--- a/ios/chrome/browser/ui/payments/credit_card_edit_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/payments/credit_card_edit_coordinator_unittest.mm
@@ -10,7 +10,7 @@
 #include "base/mac/foundation_util.h"
 #include "base/strings/utf_string_conversions.h"
 #import "base/test/ios/wait_util.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/test_personal_data_manager.h"
 #include "components/payments/core/autofill_payment_instrument.h"
 #include "components/payments/core/payment_instrument.h"
diff --git a/ios/chrome/browser/ui/payments/credit_card_edit_mediator.mm b/ios/chrome/browser/ui/payments/credit_card_edit_mediator.mm
index 8d9fc60..71607a3 100644
--- a/ios/chrome/browser/ui/payments/credit_card_edit_mediator.mm
+++ b/ios/chrome/browser/ui/payments/credit_card_edit_mediator.mm
@@ -7,8 +7,8 @@
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/validation.h"
 #include "components/autofill/core/common/autofill_clock.h"
diff --git a/ios/chrome/browser/ui/payments/payment_method_selection_coordinator.mm b/ios/chrome/browser/ui/payments/payment_method_selection_coordinator.mm
index b624de4..6a6cc9b 100644
--- a/ios/chrome/browser/ui/payments/payment_method_selection_coordinator.mm
+++ b/ios/chrome/browser/ui/payments/payment_method_selection_coordinator.mm
@@ -7,7 +7,7 @@
 #include <vector>
 
 #include "base/logging.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/payments/core/autofill_payment_instrument.h"
 #include "components/payments/core/payment_instrument.h"
 #include "components/strings/grit/components_strings.h"
diff --git a/ios/chrome/browser/ui/payments/payment_method_selection_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/payment_method_selection_coordinator_unittest.mm
index 0df82085..420409f 100644
--- a/ios/chrome/browser/ui/payments/payment_method_selection_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/payments/payment_method_selection_coordinator_unittest.mm
@@ -7,9 +7,9 @@
 #include "base/mac/foundation_util.h"
 #import "base/test/ios/wait_util.h"
 #include "base/test/scoped_task_environment.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/payments/core/payment_instrument.h"
 #include "ios/chrome/browser/payments/payment_request_test_util.h"
 #import "ios/chrome/browser/payments/payment_request_unittest_base.h"
diff --git a/ios/chrome/browser/ui/payments/payment_method_selection_mediator.mm b/ios/chrome/browser/ui/payments/payment_method_selection_mediator.mm
index 68fd1a02..f891de6 100644
--- a/ios/chrome/browser/ui/payments/payment_method_selection_mediator.mm
+++ b/ios/chrome/browser/ui/payments/payment_method_selection_mediator.mm
@@ -8,8 +8,8 @@
 
 #include "base/strings/string16.h"
 #include "base/strings/sys_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/payments/core/autofill_payment_instrument.h"
 #include "components/payments/core/payment_instrument.h"
diff --git a/ios/chrome/browser/ui/payments/payment_method_selection_mediator_unittest.mm b/ios/chrome/browser/ui/payments/payment_method_selection_mediator_unittest.mm
index 98139fe6..d6a8479a 100644
--- a/ios/chrome/browser/ui/payments/payment_method_selection_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/payments/payment_method_selection_mediator_unittest.mm
@@ -6,9 +6,9 @@
 
 #include "base/mac/foundation_util.h"
 #include "base/strings/sys_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/field_types.h"
 #import "ios/chrome/browser/payments/payment_request_unittest_base.h"
 #import "ios/chrome/browser/payments/payment_request_util.h"
diff --git a/ios/chrome/browser/ui/payments/payment_request_accessibility_egtest.mm b/ios/chrome/browser/ui/payments/payment_request_accessibility_egtest.mm
index 9b7e9b5..e77554b 100644
--- a/ios/chrome/browser/ui/payments/payment_request_accessibility_egtest.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_accessibility_egtest.mm
@@ -5,8 +5,8 @@
 #import <EarlGrey/EarlGrey.h>
 
 #include "base/strings/sys_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/strings/grit/components_strings.h"
 #include "ios/chrome/browser/payments/payment_request_util.h"
 #import "ios/chrome/browser/ui/payments/payment_request_egtest_base.h"
diff --git a/ios/chrome/browser/ui/payments/payment_request_can_make_payment_egtest.mm b/ios/chrome/browser/ui/payments/payment_request_can_make_payment_egtest.mm
index 14656a8..b6e5a0d 100644
--- a/ios/chrome/browser/ui/payments/payment_request_can_make_payment_egtest.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_can_make_payment_egtest.mm
@@ -6,7 +6,7 @@
 
 #include "base/ios/ios_util.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/payments/core/payment_prefs.h"
 #include "components/prefs/pref_service.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
diff --git a/ios/chrome/browser/ui/payments/payment_request_cancel_pay_abort_egtest.mm b/ios/chrome/browser/ui/payments/payment_request_cancel_pay_abort_egtest.mm
index d225e71..4f25283 100644
--- a/ios/chrome/browser/ui/payments/payment_request_cancel_pay_abort_egtest.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_cancel_pay_abort_egtest.mm
@@ -7,9 +7,9 @@
 #include <vector>
 
 #include "base/ios/ios_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/strings/grit/components_strings.h"
 #include "ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.h"
 #import "ios/chrome/browser/ui/payments/payment_request_egtest_base.h"
diff --git a/ios/chrome/browser/ui/payments/payment_request_coordinator.mm b/ios/chrome/browser/ui/payments/payment_request_coordinator.mm
index fc3872f..3eb3950 100644
--- a/ios/chrome/browser/ui/payments/payment_request_coordinator.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_coordinator.mm
@@ -7,8 +7,8 @@
 #include <memory>
 
 #include "base/json/json_reader.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/payments/core/autofill_payment_instrument.h"
 #include "components/payments/core/payment_address.h"
 #include "components/payments/core/payment_details.h"
diff --git a/ios/chrome/browser/ui/payments/payment_request_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/payment_request_coordinator_unittest.mm
index f0fbd35..ae253c04 100644
--- a/ios/chrome/browser/ui/payments/payment_request_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_coordinator_unittest.mm
@@ -9,9 +9,9 @@
 #include "base/mac/foundation_util.h"
 #include "base/strings/utf_string_conversions.h"
 #import "base/test/ios/wait_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/payments/core/autofill_payment_instrument.h"
 #include "components/payments/core/payment_address.h"
 #include "components/payments/core/payment_instrument.h"
diff --git a/ios/chrome/browser/ui/payments/payment_request_debit_egtest.mm b/ios/chrome/browser/ui/payments/payment_request_debit_egtest.mm
index b637d41b..5e08225cb 100644
--- a/ios/chrome/browser/ui/payments/payment_request_debit_egtest.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_debit_egtest.mm
@@ -9,9 +9,9 @@
 
 #include "base/strings/sys_string_conversions.h"
 #include "base/test/scoped_feature_list.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/payments/core/features.h"
 #include "components/payments/core/payment_prefs.h"
diff --git a/ios/chrome/browser/ui/payments/payment_request_egtest_base.mm b/ios/chrome/browser/ui/payments/payment_request_egtest_base.mm
index 2936e218..40a74480 100644
--- a/ios/chrome/browser/ui/payments/payment_request_egtest_base.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_egtest_base.mm
@@ -14,8 +14,8 @@
 #include "base/strings/stringprintf.h"
 #include "base/strings/sys_string_conversions.h"
 #import "base/test/ios/wait_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/strings/grit/components_strings.h"
 #include "ios/chrome/browser/autofill/personal_data_manager_factory.h"
diff --git a/ios/chrome/browser/ui/payments/payment_request_journey_logger_egtest.mm b/ios/chrome/browser/ui/payments/payment_request_journey_logger_egtest.mm
index d3bfec4..0209489 100644
--- a/ios/chrome/browser/ui/payments/payment_request_journey_logger_egtest.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_journey_logger_egtest.mm
@@ -5,8 +5,8 @@
 #import <EarlGrey/EarlGrey.h>
 
 #include "base/ios/ios_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/payments/core/journey_logger.h"
 #include "components/strings/grit/components_strings.h"
 #import "ios/chrome/browser/ui/payments/payment_request_egtest_base.h"
diff --git a/ios/chrome/browser/ui/payments/payment_request_manager.mm b/ios/chrome/browser/ui/payments/payment_request_manager.mm
index f2396aa1..72f2d192 100644
--- a/ios/chrome/browser/ui/payments/payment_request_manager.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_manager.mm
@@ -21,7 +21,7 @@
 #include "base/strings/utf_string_conversions.h"
 #import "base/values.h"
 #include "components/autofill/core/browser/autofill_manager.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/ios/browser/autofill_driver_ios.h"
 #include "components/omnibox/browser/location_bar_model.h"
diff --git a/ios/chrome/browser/ui/payments/payment_request_mediator.mm b/ios/chrome/browser/ui/payments/payment_request_mediator.mm
index 52c36d3f..f27e8cc4 100644
--- a/ios/chrome/browser/ui/payments/payment_request_mediator.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_mediator.mm
@@ -9,8 +9,8 @@
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/payments/core/autofill_payment_instrument.h"
 #include "components/payments/core/currency_formatter.h"
diff --git a/ios/chrome/browser/ui/payments/payment_request_mediator_unittest.mm b/ios/chrome/browser/ui/payments/payment_request_mediator_unittest.mm
index 0d9401aa..c5cf4b9 100644
--- a/ios/chrome/browser/ui/payments/payment_request_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_mediator_unittest.mm
@@ -8,9 +8,9 @@
 
 #include "base/mac/foundation_util.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/payments/core/payment_instrument.h"
 #include "components/payments/core/payment_prefs.h"
 #include "components/payments/core/payment_shipping_option.h"
diff --git a/ios/chrome/browser/ui/payments/payment_request_payment_response_egtest.mm b/ios/chrome/browser/ui/payments/payment_request_payment_response_egtest.mm
index 7a52850..cecb277d 100644
--- a/ios/chrome/browser/ui/payments/payment_request_payment_response_egtest.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_payment_response_egtest.mm
@@ -7,9 +7,9 @@
 #include <vector>
 
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/strings/grit/components_strings.h"
 #import "ios/chrome/browser/payments/payment_request_cache.h"
diff --git a/ios/chrome/browser/ui/payments/payment_request_use_stats_egtest.mm b/ios/chrome/browser/ui/payments/payment_request_use_stats_egtest.mm
index eaaa728..677234f3 100644
--- a/ios/chrome/browser/ui/payments/payment_request_use_stats_egtest.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_use_stats_egtest.mm
@@ -5,9 +5,9 @@
 #import <EarlGrey/EarlGrey.h>
 
 #include "base/time/time.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/test_autofill_clock.h"
 #include "components/strings/grit/components_strings.h"
diff --git a/ios/chrome/browser/ui/payments/payment_request_view_controller_unittest.mm b/ios/chrome/browser/ui/payments/payment_request_view_controller_unittest.mm
index 44e43a8..89800bd 100644
--- a/ios/chrome/browser/ui/payments/payment_request_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_view_controller_unittest.mm
@@ -8,9 +8,9 @@
 
 #include "base/mac/foundation_util.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/strings/grit/components_strings.h"
 #include "ios/chrome/browser/payments/payment_request_test_util.h"
 #import "ios/chrome/browser/payments/payment_request_unittest_base.h"
diff --git a/ios/chrome/browser/ui/payments/shipping_address_selection_coordinator.mm b/ios/chrome/browser/ui/payments/shipping_address_selection_coordinator.mm
index 321a5ecd..34ba111f1 100644
--- a/ios/chrome/browser/ui/payments/shipping_address_selection_coordinator.mm
+++ b/ios/chrome/browser/ui/payments/shipping_address_selection_coordinator.mm
@@ -8,7 +8,7 @@
 
 #include "base/logging.h"
 #include "base/strings/sys_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "ios/chrome/browser/payments/payment_request.h"
 #import "ios/chrome/browser/payments/payment_request_util.h"
 #import "ios/chrome/browser/ui/payments/cells/autofill_profile_item.h"
diff --git a/ios/chrome/browser/ui/payments/shipping_address_selection_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/shipping_address_selection_coordinator_unittest.mm
index 14c27f8..eceb126 100644
--- a/ios/chrome/browser/ui/payments/shipping_address_selection_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/payments/shipping_address_selection_coordinator_unittest.mm
@@ -6,9 +6,9 @@
 
 #include "base/mac/foundation_util.h"
 #import "base/test/ios/wait_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/autofill_type.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/test_region_data_loader.h"
 #include "ios/chrome/browser/payments/payment_request_test_util.h"
diff --git a/ios/chrome/browser/ui/payments/shipping_address_selection_mediator.mm b/ios/chrome/browser/ui/payments/shipping_address_selection_mediator.mm
index e10a592..2e4bbe62 100644
--- a/ios/chrome/browser/ui/payments/shipping_address_selection_mediator.mm
+++ b/ios/chrome/browser/ui/payments/shipping_address_selection_mediator.mm
@@ -7,7 +7,7 @@
 #import "ios/chrome/browser/ui/payments/shipping_address_selection_mediator.h"
 
 #include "base/strings/sys_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/payments/core/strings_util.h"
 #include "components/strings/grit/components_strings.h"
 #include "ios/chrome/browser/payments/payment_request.h"
diff --git a/ios/chrome/browser/ui/payments/shipping_address_selection_mediator_unittest.mm b/ios/chrome/browser/ui/payments/shipping_address_selection_mediator_unittest.mm
index 444b13d..883ed16d5 100644
--- a/ios/chrome/browser/ui/payments/shipping_address_selection_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/payments/shipping_address_selection_mediator_unittest.mm
@@ -5,8 +5,8 @@
 #import "ios/chrome/browser/ui/payments/shipping_address_selection_mediator.h"
 
 #include "base/mac/foundation_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #import "ios/chrome/browser/payments/payment_request_unittest_base.h"
 #import "ios/chrome/browser/payments/payment_request_util.h"
 #import "ios/chrome/browser/ui/payments/cells/autofill_profile_item.h"
diff --git a/ios/chrome/browser/ui/payments/shipping_option_selection_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/shipping_option_selection_coordinator_unittest.mm
index f4d810a..7a4c7f7 100644
--- a/ios/chrome/browser/ui/payments/shipping_option_selection_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/payments/shipping_option_selection_coordinator_unittest.mm
@@ -6,8 +6,8 @@
 
 #include "base/mac/foundation_util.h"
 #import "base/test/ios/wait_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/payments/core/payment_shipping_option.h"
 #include "ios/chrome/browser/payments/payment_request_test_util.h"
 #import "ios/chrome/browser/payments/payment_request_unittest_base.h"
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_edit_table_view_controller.mm b/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_edit_table_view_controller.mm
index 542e14b..29da5461 100644
--- a/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_edit_table_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_edit_table_view_controller.mm
@@ -10,7 +10,7 @@
 #include "base/mac/scoped_block.h"
 #include "base/strings/sys_string_conversions.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/payments/payments_service_url.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_settings_egtest.mm b/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_settings_egtest.mm
index f83a0c0..fbea7916 100644
--- a/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_settings_egtest.mm
+++ b/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_settings_egtest.mm
@@ -8,7 +8,7 @@
 #include "base/strings/sys_string_conversions.h"
 #import "base/test/ios/wait_util.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/strings/grit/components_strings.h"
 #include "ios/chrome/browser/autofill/personal_data_manager_factory.h"
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_table_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_table_view_controller_unittest.mm
index a2ef5694..3995fdb 100644
--- a/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_table_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_table_view_controller_unittest.mm
@@ -8,7 +8,7 @@
 #include "base/mac/foundation_util.h"
 #include "base/strings/utf_string_conversions.h"
 #import "base/test/ios/wait_util.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "ios/chrome/browser/autofill/personal_data_manager_factory.h"
 #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_profile_edit_table_view_controller.mm b/ios/chrome/browser/ui/settings/autofill/autofill_profile_edit_table_view_controller.mm
index 4d2364b..1b2f441 100644
--- a/ios/chrome/browser/ui/settings/autofill/autofill_profile_edit_table_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/autofill/autofill_profile_edit_table_view_controller.mm
@@ -7,7 +7,7 @@
 #include "base/mac/foundation_util.h"
 #include "base/stl_util.h"
 #include "base/strings/sys_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/payments/payments_service_url.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_profile_edit_table_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/autofill/autofill_profile_edit_table_view_controller_unittest.mm
index 45951422..0cba285 100644
--- a/ios/chrome/browser/ui/settings/autofill/autofill_profile_edit_table_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/settings/autofill/autofill_profile_edit_table_view_controller_unittest.mm
@@ -9,7 +9,7 @@
 #include "base/guid.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "ios/chrome/browser/application_context.h"
 #include "ios/chrome/browser/autofill/personal_data_manager_factory.h"
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_profile_settings_egtest.mm b/ios/chrome/browser/ui/settings/autofill/autofill_profile_settings_egtest.mm
index 6a3fa0f..4ae16af 100644
--- a/ios/chrome/browser/ui/settings/autofill/autofill_profile_settings_egtest.mm
+++ b/ios/chrome/browser/ui/settings/autofill/autofill_profile_settings_egtest.mm
@@ -7,8 +7,8 @@
 
 #include "base/ios/ios_util.h"
 #import "base/test/ios/wait_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/strings/grit/components_strings.h"
 #include "ios/chrome/browser/autofill/personal_data_manager_factory.h"
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_profile_table_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/autofill/autofill_profile_table_view_controller_unittest.mm
index 44c2d63..9988295b3 100644
--- a/ios/chrome/browser/ui/settings/autofill/autofill_profile_table_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/settings/autofill/autofill_profile_table_view_controller_unittest.mm
@@ -8,7 +8,7 @@
 #include "base/mac/foundation_util.h"
 #include "base/strings/utf_string_conversions.h"
 #import "base/test/ios/wait_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/strings/grit/components_strings.h"
 #include "ios/chrome/browser/autofill/personal_data_manager_factory.h"
diff --git a/ios/chrome/browser/ui/settings/google_services/advanced_signin_settings_coordinator.mm b/ios/chrome/browser/ui/settings/google_services/advanced_signin_settings_coordinator.mm
index 7ccbf7c7..a2558c50 100644
--- a/ios/chrome/browser/ui/settings/google_services/advanced_signin_settings_coordinator.mm
+++ b/ios/chrome/browser/ui/settings/google_services/advanced_signin_settings_coordinator.mm
@@ -10,8 +10,12 @@
 #include "base/metrics/user_metrics.h"
 #include "components/signin/core/browser/signin_metrics.h"
 #include "components/strings/grit/components_strings.h"
+#include "components/sync/driver/sync_service.h"
+#include "components/unified_consent/unified_consent_metrics.h"
+#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #import "ios/chrome/browser/signin/authentication_service.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
+#include "ios/chrome/browser/sync/profile_sync_service_factory.h"
 #include "ios/chrome/browser/sync/sync_setup_service.h"
 #include "ios/chrome/browser/sync/sync_setup_service_factory.h"
 #import "ios/chrome/browser/ui/alert_coordinator/alert_coordinator.h"
@@ -102,9 +106,13 @@
   SyncSetupService* syncSetupService =
       SyncSetupServiceFactory::GetForBrowserState(self.browserState);
   switch (result) {
-    case AdvancedSyncSettingsCoordinatorResultConfirm:
+    case AdvancedSyncSettingsCoordinatorResultConfirm: {
       base::RecordAction(
           base::UserMetricsAction("Signin_Signin_ConfirmAdvancedSyncSettings"));
+      syncer::SyncService* syncService =
+          ProfileSyncServiceFactory::GetForBrowserState(self.browserState);
+      unified_consent::metrics::RecordSyncSetupDataTypesHistrogam(
+          syncService->GetUserSettings(), self.browserState->GetPrefs());
       if (syncSetupService->IsSyncEnabled()) {
         // FirstSetupComplete flag should be only turned on when the user agrees
         // to start Sync.
@@ -112,6 +120,7 @@
         syncSetupService->SetFirstSetupComplete();
       }
       break;
+    }
     case AdvancedSigninSettingsCoordinatorResultCancel:
       base::RecordAction(base::UserMetricsAction(
           "Signin_Signin_ConfirmCancelAdvancedSyncSettings"));
diff --git a/ios/chrome/browser/ui/settings/material_cell_catalog_view_controller.mm b/ios/chrome/browser/ui/settings/material_cell_catalog_view_controller.mm
index 7d68699a..421fadf 100644
--- a/ios/chrome/browser/ui/settings/material_cell_catalog_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/material_cell_catalog_view_controller.mm
@@ -8,7 +8,7 @@
 
 #import "base/mac/foundation_util.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/grit/components_scaled_resources.h"
 #import "ios/chrome/browser/ui/authentication/cells/legacy_account_control_item.h"
 #import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.h"
diff --git a/ios/chrome/browser/web/page_placeholder_tab_helper.h b/ios/chrome/browser/web/page_placeholder_tab_helper.h
index b688796..574d41df 100644
--- a/ios/chrome/browser/web/page_placeholder_tab_helper.h
+++ b/ios/chrome/browser/web/page_placeholder_tab_helper.h
@@ -14,6 +14,9 @@
 
 // Displays placeholder to cover what WebState is actually displaying. Can be
 // used to display the cached image of the web page during the Tab restoration.
+// The placeholder is added as a subview on the WebState's view. Properly
+// positioning the placeholder requires that the WebState's view is in a view
+// hierarchy that has the Content Area named guide.
 class PagePlaceholderTabHelper
     : public web::WebStateUserData<PagePlaceholderTabHelper>,
       public web::WebStateObserver {
@@ -22,7 +25,8 @@
 
   // Displays placeholder between DidStartNavigation and PageLoaded
   // WebStateObserver callbacks. If navigation takes too long, then placeholder
-  // will be removed before navigation is finished.
+  // will be removed before navigation is finished. The placeholder is only ever
+  // displayed when the tab is visible.
   void AddPlaceholderForNextNavigation();
 
   // Cancels displaying placeholder during the next navigation. If placeholder
@@ -56,7 +60,9 @@
   void AddPlaceholder();
   void RemovePlaceholder();
 
-  // Adds the given |snapshot| image to the |web_state_|'s view.
+  // Adds the given |snapshot| image to the |web_state_|'s view. The
+  // |web_state_|'s view must be visible, and it must be in a view hierarchy
+  // that has the Content Area named guide.
   void DisplaySnapshotImage(UIImage* snapshot);
 
   // WebState this tab helper is attached to.
diff --git a/ios/chrome/browser/web/page_placeholder_tab_helper.mm b/ios/chrome/browser/web/page_placeholder_tab_helper.mm
index 3b0ce744..6990eade 100644
--- a/ios/chrome/browser/web/page_placeholder_tab_helper.mm
+++ b/ios/chrome/browser/web/page_placeholder_tab_helper.mm
@@ -46,6 +46,7 @@
 
 void PagePlaceholderTabHelper::WasShown(web::WebState* web_state) {
   if (add_placeholder_for_next_navigation_) {
+    add_placeholder_for_next_navigation_ = false;
     AddPlaceholder();
   }
 }
@@ -58,7 +59,7 @@
     web::WebState* web_state,
     web::NavigationContext* navigation_context) {
   DCHECK_EQ(web_state_, web_state);
-  if (add_placeholder_for_next_navigation_) {
+  if (add_placeholder_for_next_navigation_ && web_state->IsVisible()) {
     add_placeholder_for_next_navigation_ = false;
     AddPlaceholder();
   }
@@ -112,11 +113,16 @@
 }
 
 void PagePlaceholderTabHelper::DisplaySnapshotImage(UIImage* snapshot) {
+  DCHECK(web_state_->IsVisible())
+      << "The WebState must be visible to display a page placeholder.";
+  UIView* web_state_view = web_state_->GetView();
+  NamedGuide* guide = [NamedGuide guideWithName:kContentAreaGuide
+                                           view:web_state_view];
+  DCHECK(guide) << "The ContentArea named guide must be in the WebState view's "
+                   "hierarchy to properly position the page placeholder.";
   placeholder_view_.image = snapshot;
-  [web_state_->GetView() addSubview:placeholder_view_];
-  AddSameConstraints([NamedGuide guideWithName:kContentAreaGuide
-                                          view:placeholder_view_],
-                     placeholder_view_);
+  [web_state_view addSubview:placeholder_view_];
+  AddSameConstraints(guide, placeholder_view_);
 }
 
 void PagePlaceholderTabHelper::RemovePlaceholder() {
diff --git a/ios/chrome/browser/web/page_placeholder_tab_helper_unittest.mm b/ios/chrome/browser/web/page_placeholder_tab_helper_unittest.mm
index a26990e..1a240b2 100644
--- a/ios/chrome/browser/web/page_placeholder_tab_helper_unittest.mm
+++ b/ios/chrome/browser/web/page_placeholder_tab_helper_unittest.mm
@@ -76,7 +76,7 @@
   EXPECT_TRUE(tab_helper()->will_add_placeholder_for_next_navigation());
   web_state_->WasShown();
   EXPECT_TRUE(tab_helper()->displaying_placeholder());
-  EXPECT_TRUE(tab_helper()->will_add_placeholder_for_next_navigation());
+  EXPECT_FALSE(tab_helper()->will_add_placeholder_for_next_navigation());
 }
 
 // Tests that placeholder is removed after WasHidden().
@@ -116,6 +116,7 @@
 // Tests that placeholder is shown between DidStartNavigation/PageLoaded
 // WebStateObserver callbacks.
 TEST_F(PagePlaceholderTabHelperTest, Shown) {
+  web_state_->WasShown();
   ASSERT_FALSE(tab_helper()->will_add_placeholder_for_next_navigation());
   tab_helper()->AddPlaceholderForNextNavigation();
   ASSERT_FALSE(tab_helper()->displaying_placeholder());
@@ -130,8 +131,24 @@
   EXPECT_FALSE(tab_helper()->will_add_placeholder_for_next_navigation());
 }
 
+// Tests that placeholder is not shown if the tab is not visible at
+// DidStartNavigation
+TEST_F(PagePlaceholderTabHelperTest, NotShownIfTabNotVisible) {
+  ASSERT_FALSE(tab_helper()->will_add_placeholder_for_next_navigation());
+  tab_helper()->AddPlaceholderForNextNavigation();
+  ASSERT_FALSE(tab_helper()->displaying_placeholder());
+  EXPECT_TRUE(tab_helper()->will_add_placeholder_for_next_navigation());
+
+  web_state_->OnNavigationStarted(nullptr);
+  EXPECT_FALSE(tab_helper()->displaying_placeholder());
+  web_state_->WasShown();
+  EXPECT_TRUE(tab_helper()->displaying_placeholder());
+  EXPECT_FALSE(tab_helper()->will_add_placeholder_for_next_navigation());
+}
+
 // Tests that placeholder is removed if cancelled while presented.
 TEST_F(PagePlaceholderTabHelperTest, RemovedIfCancelledWhileShown) {
+  web_state_->WasShown();
   ASSERT_FALSE(tab_helper()->will_add_placeholder_for_next_navigation());
   tab_helper()->AddPlaceholderForNextNavigation();
   ASSERT_FALSE(tab_helper()->displaying_placeholder());
@@ -147,6 +164,7 @@
 
 // Tests that destructing WebState removes the placeholder.
 TEST_F(PagePlaceholderTabHelperTest, DestructWebStateWhenShowingPlaceholder) {
+  web_state_->WasShown();
   ASSERT_FALSE(tab_helper()->will_add_placeholder_for_next_navigation());
   tab_helper()->AddPlaceholderForNextNavigation();
   ASSERT_FALSE(tab_helper()->displaying_placeholder());
diff --git a/ios/chrome/browser/web/sad_tab_tab_helper_unittest.mm b/ios/chrome/browser/web/sad_tab_tab_helper_unittest.mm
index ac2a464..9079f926 100644
--- a/ios/chrome/browser/web/sad_tab_tab_helper_unittest.mm
+++ b/ios/chrome/browser/web/sad_tab_tab_helper_unittest.mm
@@ -94,8 +94,9 @@
   SadTabTabHelperTestDelegate* sad_tab_delegate_;
 };
 
-// Tests that SadTab is not presented for not shown web states and navigation
-// item is reloaded once web state was shown.
+// Tests that SadTab is not presented for not shown web states. Navigation
+// item is reloaded once web state was shown, and displays the page placeholder
+// during the load.
 TEST_F(SadTabTabHelperTest, ReloadedWhenWebStateWasShown) {
   OCMStub([application_ applicationState]).andReturn(UIApplicationStateActive);
   web_state_.WasHidden();
@@ -110,11 +111,12 @@
   EXPECT_FALSE(tab_helper()->is_showing_sad_tab());
   EXPECT_FALSE(sad_tab_delegate_.showingSadTab);
 
-  // Navigation item must be reloaded once web state is shown.
+  // Navigation item must be reloaded once web state is shown, while displaying
+  // the page placeholder during the load.
   EXPECT_FALSE(navigation_manager_->LoadIfNecessaryWasCalled());
   web_state_.WasShown();
   EXPECT_TRUE(PagePlaceholderTabHelper::FromWebState(&web_state_)
-                  ->will_add_placeholder_for_next_navigation());
+                  ->displaying_placeholder());
   EXPECT_TRUE(navigation_manager_->LoadIfNecessaryWasCalled());
 }
 
diff --git a/ios/web_view/internal/autofill/cwv_autofill_data_manager_unittest.mm b/ios/web_view/internal/autofill/cwv_autofill_data_manager_unittest.mm
index 6b35d308..3ea5aca 100644
--- a/ios/web_view/internal/autofill/cwv_autofill_data_manager_unittest.mm
+++ b/ios/web_view/internal/autofill/cwv_autofill_data_manager_unittest.mm
@@ -9,9 +9,9 @@
 #include "base/run_loop.h"
 #include "base/strings/sys_string_conversions.h"
 #import "base/test/ios/wait_util.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/test_personal_data_manager.h"
 #include "ios/web/public/test/test_web_thread_bundle.h"
 #import "ios/web_view/internal/autofill/cwv_autofill_profile_internal.h"
diff --git a/ios/web_view/internal/autofill/cwv_autofill_profile.mm b/ios/web_view/internal/autofill/cwv_autofill_profile.mm
index b237e24..e540500 100644
--- a/ios/web_view/internal/autofill/cwv_autofill_profile.mm
+++ b/ios/web_view/internal/autofill/cwv_autofill_profile.mm
@@ -5,8 +5,8 @@
 #import "ios/web_view/internal/autofill/cwv_autofill_profile_internal.h"
 
 #include "base/strings/sys_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_type.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "ios/web_view/internal/app/application_context.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/web_view/internal/autofill/cwv_autofill_profile_unittest.mm b/ios/web_view/internal/autofill/cwv_autofill_profile_unittest.mm
index d7fcaab2..0a9f2b9 100644
--- a/ios/web_view/internal/autofill/cwv_autofill_profile_unittest.mm
+++ b/ios/web_view/internal/autofill/cwv_autofill_profile_unittest.mm
@@ -8,10 +8,10 @@
 #include <string>
 
 #include "base/strings/sys_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/autofill_type.h"
 #include "components/autofill/core/browser/country_names.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #import "testing/gtest_mac.h"
 #include "testing/platform_test.h"
diff --git a/ios/web_view/internal/autofill/cwv_autofill_suggestion.mm b/ios/web_view/internal/autofill/cwv_autofill_suggestion.mm
index bb42904..fa4d99e 100644
--- a/ios/web_view/internal/autofill/cwv_autofill_suggestion.mm
+++ b/ios/web_view/internal/autofill/cwv_autofill_suggestion.mm
@@ -5,7 +5,7 @@
 #import "ios/web_view/internal/autofill/cwv_autofill_suggestion_internal.h"
 
 #include "base/strings/sys_string_conversions.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/popup_item_ids.h"
 #import "components/autofill/ios/browser/form_suggestion.h"
 #include "ui/base/resource/resource_bundle.h"
diff --git a/ios/web_view/internal/autofill/cwv_credit_card.mm b/ios/web_view/internal/autofill/cwv_credit_card.mm
index 62d9201..c3dd578 100644
--- a/ios/web_view/internal/autofill/cwv_credit_card.mm
+++ b/ios/web_view/internal/autofill/cwv_credit_card.mm
@@ -5,7 +5,7 @@
 #import "ios/web_view/internal/autofill/cwv_credit_card_internal.h"
 
 #include "base/strings/sys_string_conversions.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "ios/web_view/internal/app/application_context.h"
 #include "ui/base/resource/resource_bundle.h"
 
diff --git a/ios/web_view/internal/autofill/cwv_credit_card_unittest.mm b/ios/web_view/internal/autofill/cwv_credit_card_unittest.mm
index 21fcf34..a84e84c 100644
--- a/ios/web_view/internal/autofill/cwv_credit_card_unittest.mm
+++ b/ios/web_view/internal/autofill/cwv_credit_card_unittest.mm
@@ -11,7 +11,7 @@
 #include "base/path_service.h"
 #include "base/strings/sys_string_conversions.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #import "testing/gtest_mac.h"
 #include "testing/platform_test.h"
diff --git a/ios/web_view/internal/autofill/cwv_credit_card_verifier.mm b/ios/web_view/internal/autofill/cwv_credit_card_verifier.mm
index 4ed9497..a2a9a8d 100644
--- a/ios/web_view/internal/autofill/cwv_credit_card_verifier.mm
+++ b/ios/web_view/internal/autofill/cwv_credit_card_verifier.mm
@@ -7,7 +7,7 @@
 #include <memory>
 
 #include "base/strings/sys_string_conversions.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/ui/payments/card_unmask_prompt_controller_impl.h"
 #include "components/autofill/core/browser/ui/payments/card_unmask_prompt_view.h"
 #import "ios/web_view/internal/autofill/cwv_credit_card_internal.h"
diff --git a/ios/web_view/internal/autofill/cwv_credit_card_verifier_unittest.mm b/ios/web_view/internal/autofill/cwv_credit_card_verifier_unittest.mm
index cdb1a0e..66fa8b4 100644
--- a/ios/web_view/internal/autofill/cwv_credit_card_verifier_unittest.mm
+++ b/ios/web_view/internal/autofill/cwv_credit_card_verifier_unittest.mm
@@ -19,7 +19,7 @@
 #import "base/test/ios/wait_util.h"
 #include "base/test/scoped_feature_list.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/payments/card_unmask_delegate.h"
 #include "components/autofill/core/common/autofill_payments_features.h"
 #include "components/autofill/core/common/autofill_prefs.h"
diff --git a/ios/web_view/internal/passwords/web_view_password_manager_client.h b/ios/web_view/internal/passwords/web_view_password_manager_client.h
index b6bcf30..4741e6b 100644
--- a/ios/web_view/internal/passwords/web_view_password_manager_client.h
+++ b/ios/web_view/internal/passwords/web_view_password_manager_client.h
@@ -18,6 +18,7 @@
 
 namespace password_manager {
 class PasswordFormManagerForUI;
+class PasswordManagerDriver;
 }
 
 @protocol CWVPasswordManagerClientDelegate
@@ -64,7 +65,7 @@
       bool has_generated_password,
       bool is_update) override;
   void HideManualFallbackForSaving() override;
-  void FocusedInputChanged(const url::Origin& last_committed_origin,
+  void FocusedInputChanged(password_manager::PasswordManagerDriver* driver,
                            bool is_fillable,
                            bool is_password_field) override;
   bool PromptUserToChooseCredentials(
diff --git a/ios/web_view/internal/passwords/web_view_password_manager_client.mm b/ios/web_view/internal/passwords/web_view_password_manager_client.mm
index a6a8a96..c926d9f 100644
--- a/ios/web_view/internal/passwords/web_view_password_manager_client.mm
+++ b/ios/web_view/internal/passwords/web_view_password_manager_client.mm
@@ -12,6 +12,7 @@
 #include "components/password_manager/core/browser/log_manager.h"
 #include "components/password_manager/core/browser/password_form_manager_for_ui.h"
 #include "components/password_manager/core/browser/password_manager.h"
+#include "components/password_manager/core/browser/password_manager_driver.h"
 #include "components/password_manager/core/browser/password_manager_internals_service.h"
 #include "components/password_manager/core/browser/password_manager_util.h"
 #include "components/password_manager/core/common/password_manager_pref_names.h"
@@ -92,7 +93,7 @@
 }
 
 void WebViewPasswordManagerClient::FocusedInputChanged(
-    const url::Origin& last_committed_origin,
+    password_manager::PasswordManagerDriver* driver,
     bool is_fillable,
     bool is_password_field) {
   NOTIMPLEMENTED();
diff --git a/media/base/android/media_codec_loop_unittest.cc b/media/base/android/media_codec_loop_unittest.cc
index 1e2eb8c..7e9a579e 100644
--- a/media/base/android/media_codec_loop_unittest.cc
+++ b/media/base/android/media_codec_loop_unittest.cc
@@ -17,6 +17,7 @@
 
 using ::testing::_;
 using ::testing::AtLeast;
+using ::testing::DoAll;
 using ::testing::Eq;
 using ::testing::Field;
 using ::testing::InSequence;
diff --git a/media/filters/dav1d_video_decoder.cc b/media/filters/dav1d_video_decoder.cc
index b533e99..7122005 100644
--- a/media/filters/dav1d_video_decoder.cc
+++ b/media/filters/dav1d_video_decoder.cc
@@ -176,10 +176,12 @@
 
   // Compute the ideal thread count values. We'll then clamp these based on the
   // maximum number of recommended threads (using number of processors, etc).
+  //
+  // dav1d will spawn |n_tile_threads| per frame thread.
   s.n_tile_threads = GetDecoderTileThreadCount(config);
   s.n_frame_threads = GetDecoderFrameThreadCount(config);
   const int max_threads = VideoDecoder::GetRecommendedThreadCount(
-      s.n_tile_threads + s.n_frame_threads);
+      s.n_frame_threads * s.n_tile_threads);
 
   // First clamp tile threads to the allowed maximum. We prefer tile threads
   // over frame threads since dav1d folk indicate they are more efficient. In an
@@ -188,19 +190,30 @@
   // https://bugzilla.mozilla.org/show_bug.cgi?id=1536783#c0
   s.n_tile_threads = std::min(max_threads, s.n_tile_threads);
 
-  // Now clamp frame threads based on the number of remaining threads after tile
-  // threads have been allocated. A thread count of 1 generates no additional
-  // threads since the calling thread (this thread) is counted as a thread.
+  // Now clamp frame threads based on the number of total threads that would be
+  // created with the given |n_tile_threads| value. Note: A thread count of 1
+  // generates no additional threads since the calling thread (this thread) is
+  // counted as a thread.
   //
   // We only want 1 frame thread in low delay mode, since otherwise we'll
   // require at least two buffers before the first frame can be output.
   //
-  // 2 frame threads seems desirable even on low core machines:
-  // https://crbug.com/957511
+  // If a system has the cores for it, we'll end up using the following:
+  // <300p: 2 tile threads, 2 frame threads = 4 total threads.
+  // <700p: 3 tile threads, 2 frame threads = 6 total threads.
+  //
+  // For higher resolutions we hit limits::kMaxVideoThreads (16):
+  // <1000p: 5 tile threads, 3 frame thread = 15 total threads.
+  // >1000p: 8 tile threads, 2 frame threads = 16 total threads.
+  //
+  // Due to the (surprising) performance issues which occurred when setting
+  // |n_frame_threads|=1 (https://crbug.com/957511) the minimum total number of
+  // threads is 4 (two tile and two frame) regardless of core count. The maximum
+  // is min(2 * base::SysInfo::NumberOfProcessors(), limits::kMaxVideoThreads).
   if (low_delay)
     s.n_frame_threads = 1;
-  else if (s.n_frame_threads > max_threads - s.n_tile_threads)
-    s.n_frame_threads = std::max(2, max_threads - s.n_tile_threads);
+  else if (s.n_frame_threads * s.n_tile_threads > max_threads)
+    s.n_frame_threads = std::max(2, max_threads / s.n_tile_threads);
 
   // Route dav1d internal logs through Chrome's DLOG system.
   s.logger = {nullptr, &LogDav1dMessage};
diff --git a/net/cert/trial_comparison_cert_verifier_unittest.cc b/net/cert/trial_comparison_cert_verifier_unittest.cc
index 894b53e..946523b 100644
--- a/net/cert/trial_comparison_cert_verifier_unittest.cc
+++ b/net/cert/trial_comparison_cert_verifier_unittest.cc
@@ -29,6 +29,7 @@
 using net::test::IsError;
 using net::test::IsOk;
 using testing::_;
+using testing::DoAll;
 using testing::Return;
 using testing::SetArgPointee;
 
diff --git a/net/quic/quic_flags_list.h b/net/quic/quic_flags_list.h
index c396147..188edde8 100644
--- a/net/quic/quic_flags_list.h
+++ b/net/quic/quic_flags_list.h
@@ -199,7 +199,7 @@
 // connection, such that version negotiation is not supported in connection.
 QUIC_FLAG(bool,
           FLAGS_quic_restart_flag_quic_no_server_conn_ver_negotiation2,
-          false)
+          true)
 
 // If true, enable QUIC version 46.
 QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_enable_version_46, true)
@@ -230,7 +230,7 @@
 // reconnection.
 QUIC_FLAG(bool,
           FLAGS_quic_reloadable_flag_quic_no_client_conn_ver_negotiation,
-          false)
+          true)
 
 // If true, public reset packets sent from GFE will include a kEPID tag.
 QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_fix_spurious_ack_alarm, false)
diff --git a/net/socket/udp_socket_unittest.cc b/net/socket/udp_socket_unittest.cc
index efb36062..b89b518b 100644
--- a/net/socket/udp_socket_unittest.cc
+++ b/net/socket/udp_socket_unittest.cc
@@ -49,6 +49,7 @@
 
 using net::test::IsError;
 using net::test::IsOk;
+using testing::DoAll;
 using testing::Not;
 
 namespace net {
diff --git a/remoting/protocol/webrtc_dummy_video_encoder.cc b/remoting/protocol/webrtc_dummy_video_encoder.cc
index b937b08..c4b3e76f 100644
--- a/remoting/protocol/webrtc_dummy_video_encoder.cc
+++ b/remoting/protocol/webrtc_dummy_video_encoder.cc
@@ -215,8 +215,6 @@
     header.VerifyAndAllocateFragmentationHeader(1);
     header.fragmentationOffset[0] = 0;
     header.fragmentationLength[0] = buffer_size;
-    header.fragmentationPlType[0] = 0;
-    header.fragmentationTimeDiff[0] = 0;
   }
 
   DCHECK(encoded_callback_);
diff --git a/services/metrics/public/cpp/ukm_source.cc b/services/metrics/public/cpp/ukm_source.cc
index e9f0aa4..6ebf48f6 100644
--- a/services/metrics/public/cpp/ukm_source.cc
+++ b/services/metrics/public/cpp/ukm_source.cc
@@ -64,6 +64,7 @@
   sanitized_navigation_data.tab_id = tab_id;
   sanitized_navigation_data.is_same_document_navigation =
       is_same_document_navigation;
+  sanitized_navigation_data.navigation_time = navigation_time;
   return sanitized_navigation_data;
 }
 
@@ -129,6 +130,11 @@
 
   if (navigation_data_.is_same_document_navigation)
     proto_source->set_is_same_document_navigation(true);
+
+  if (navigation_data_.navigation_time) {
+    proto_source->set_navigation_time_msec(
+        navigation_data_.navigation_time->since_origin().InMilliseconds());
+  }
 }
 
 }  // namespace ukm
diff --git a/services/metrics/public/cpp/ukm_source.h b/services/metrics/public/cpp/ukm_source.h
index 0a7a1d76..431a579 100644
--- a/services/metrics/public/cpp/ukm_source.h
+++ b/services/metrics/public/cpp/ukm_source.h
@@ -79,6 +79,10 @@
     // document navigations are fragment navigations, pushState/replaceState,
     // and same page history navigation.
     bool is_same_document_navigation = false;
+
+    // The navigation start time relative to session start. The navigation
+    // time within session should be monotonically increasing.
+    base::Optional<base::TimeTicks> navigation_time;
   };
 
   UkmSource(SourceId id, const GURL& url);
diff --git a/services/resource_coordinator/public/mojom/coordination_unit.mojom b/services/resource_coordinator/public/mojom/coordination_unit.mojom
index 316bd4d..2c94ac0 100644
--- a/services/resource_coordinator/public/mojom/coordination_unit.mojom
+++ b/services/resource_coordinator/public/mojom/coordination_unit.mojom
@@ -49,7 +49,7 @@
 // resource management to the embedder.
 interface DocumentCoordinationUnit {
   // Property signals.
-  SetNetworkAlmostIdle(bool idle);
+  SetNetworkAlmostIdle();
   SetLifecycleState(LifecycleState state);
   SetHasNonEmptyBeforeUnload(bool has_nonempty_beforeunload);
   SetInterventionPolicy(PolicyControlledIntervention intervention,
diff --git a/services/tracing/public/cpp/perfetto/perfetto_config.cc b/services/tracing/public/cpp/perfetto/perfetto_config.cc
index 4f85779..84fbef7 100644
--- a/services/tracing/public/cpp/perfetto/perfetto_config.cc
+++ b/services/tracing/public/cpp/perfetto/perfetto_config.cc
@@ -14,6 +14,25 @@
 
 namespace tracing {
 
+namespace {
+
+perfetto::TraceConfig::DataSource* AddDataSourceConfig(
+    perfetto::TraceConfig* perfetto_config,
+    const char* name,
+    const std::string& chrome_config_string,
+    bool privacy_filtering_enabled) {
+  auto* data_source = perfetto_config->add_data_sources();
+  auto* source_config = data_source->mutable_config();
+  source_config->set_name(name);
+  source_config->set_target_buffer(0);
+  auto* chrome_config = source_config->mutable_chrome_config();
+  chrome_config->set_trace_config(chrome_config_string);
+  chrome_config->set_privacy_filtering_enabled(privacy_filtering_enabled);
+  return data_source;
+}
+
+}  // namespace
+
 perfetto::TraceConfig GetDefaultPerfettoConfig(
     const base::trace_event::TraceConfig& chrome_config,
     bool privacy_filtering_enabled) {
@@ -32,15 +51,6 @@
   builtin_data_sources->set_disable_trace_config(privacy_filtering_enabled);
   builtin_data_sources->set_disable_system_info(privacy_filtering_enabled);
 
-  // Capture actual trace events.
-  auto* trace_event_data_source = perfetto_config.add_data_sources();
-  for (auto& enabled_pid :
-       chrome_config.process_filter_config().included_process_ids()) {
-    *trace_event_data_source->add_producer_name_filter() = base::StrCat(
-        {mojom::kPerfettoProducerNamePrefix,
-         base::NumberToString(static_cast<uint32_t>(enabled_pid))});
-  }
-
   // We strip the process filter from the config string we send to Perfetto,
   // so perfetto doesn't reject it from a future
   // TracingService::ChangeTraceConfig call due to being an unsupported
@@ -50,44 +60,33 @@
       base::trace_event::TraceConfig::ProcessFilterConfig());
   std::string chrome_config_string = processfilter_stripped_config.ToString();
 
-  auto* trace_event_config = trace_event_data_source->mutable_config();
-  trace_event_config->set_name(tracing::mojom::kTraceEventDataSourceName);
-  trace_event_config->set_target_buffer(0);
-  auto* chrome_proto_config = trace_event_config->mutable_chrome_config();
-  chrome_proto_config->set_trace_config(chrome_config_string);
-  chrome_proto_config->set_privacy_filtering_enabled(privacy_filtering_enabled);
+  // Capture actual trace events.
+  auto* trace_event_data_source = AddDataSourceConfig(
+      &perfetto_config, tracing::mojom::kTraceEventDataSourceName,
+      chrome_config_string, privacy_filtering_enabled);
+  for (auto& enabled_pid :
+       chrome_config.process_filter_config().included_process_ids()) {
+    *trace_event_data_source->add_producer_name_filter() = base::StrCat(
+        {mojom::kPerfettoProducerNamePrefix,
+         base::NumberToString(static_cast<uint32_t>(enabled_pid))});
+  }
 
 // Capture system trace events if supported and enabled. The datasources will
 // only emit events if system tracing is enabled in |chrome_config|.
 #if defined(OS_CHROMEOS) || (defined(IS_CHROMECAST) && defined(OS_LINUX))
-  auto* system_trace_config =
-      perfetto_config.add_data_sources()->mutable_config();
-  system_trace_config->set_name(tracing::mojom::kSystemTraceDataSourceName);
-  system_trace_config->set_target_buffer(0);
-  auto* system_chrome_config = system_trace_config->mutable_chrome_config();
-  system_chrome_config->set_trace_config(chrome_config_string);
-  system_chrome_config->set_privacy_filtering_enabled(
-      privacy_filtering_enabled);
+  AddDataSourceConfig(&perfetto_config,
+                      tracing::mojom::kSystemTraceDataSourceName,
+                      chrome_config_string, privacy_filtering_enabled);
 #endif
 
 #if defined(OS_CHROMEOS)
-  auto* arc_trace_config = perfetto_config.add_data_sources()->mutable_config();
-  arc_trace_config->set_name(tracing::mojom::kArcTraceDataSourceName);
-  arc_trace_config->set_target_buffer(0);
-  auto* arc_chrome_config = arc_trace_config->mutable_chrome_config();
-  arc_chrome_config->set_trace_config(chrome_config_string);
-  arc_chrome_config->set_privacy_filtering_enabled(privacy_filtering_enabled);
+  AddDataSourceConfig(&perfetto_config, tracing::mojom::kArcTraceDataSourceName,
+                      chrome_config_string, privacy_filtering_enabled);
 #endif
 
   // Also capture global metadata.
-  auto* trace_metadata_config =
-      perfetto_config.add_data_sources()->mutable_config();
-  trace_metadata_config->set_name(tracing::mojom::kMetaDataSourceName);
-  trace_metadata_config->set_target_buffer(0);
-  auto* metadata_chrome_config = trace_metadata_config->mutable_chrome_config();
-  metadata_chrome_config->set_trace_config(chrome_config_string);
-  metadata_chrome_config->set_privacy_filtering_enabled(
-      privacy_filtering_enabled);
+  AddDataSourceConfig(&perfetto_config, tracing::mojom::kMetaDataSourceName,
+                      chrome_config_string, privacy_filtering_enabled);
 
   return perfetto_config;
 }
diff --git a/testing/buildbot/chromium.chrome.json b/testing/buildbot/chromium.chrome.json
index 450a435b..1753530 100644
--- a/testing/buildbot/chromium.chrome.json
+++ b/testing/buildbot/chromium.chrome.json
@@ -1713,53 +1713,17 @@
     "additional_compile_targets": [
       "chrome",
       "chrome/installer/linux"
-    ],
-    "isolated_scripts": [
-      {
-        "isolate_name": "chrome_sizes",
-        "merge": {
-          "script": "//tools/perf/process_perf_results.py"
-        },
-        "name": "chrome_sizes",
-        "swarming": {
-          "can_use_on_swarming_builders": true
-        }
-      }
     ]
   },
   "mac-google-rel": {
     "additional_compile_targets": [
       "chrome"
-    ],
-    "isolated_scripts": [
-      {
-        "isolate_name": "chrome_sizes",
-        "merge": {
-          "script": "//tools/perf/process_perf_results.py"
-        },
-        "name": "chrome_sizes",
-        "swarming": {
-          "can_use_on_swarming_builders": true
-        }
-      }
     ]
   },
   "win-google-rel": {
     "additional_compile_targets": [
       "chrome",
       "chrome_official_builder"
-    ],
-    "isolated_scripts": [
-      {
-        "isolate_name": "chrome_sizes",
-        "merge": {
-          "script": "//tools/perf/process_perf_results.py"
-        },
-        "name": "chrome_sizes",
-        "swarming": {
-          "can_use_on_swarming_builders": true
-        }
-      }
     ]
   }
 }
diff --git a/testing/buildbot/filters/fuchsia.gfx_unittests.filter b/testing/buildbot/filters/fuchsia.gfx_unittests.filter
index 5864370..9320cca 100644
--- a/testing/buildbot/filters/fuchsia.gfx_unittests.filter
+++ b/testing/buildbot/filters/fuchsia.gfx_unittests.filter
@@ -1,18 +1,2 @@
-# https://crbug.com/952652 - Fail due to missing fonts.
--FontListTest.FirstAvailableOrFirst
--FontListTest.Fonts_*
--FontTest.LoadArial*
--FontTest.GetActualFontNameForTesting
--PlatformFontSkiaTest.DefaultFont
--RenderTextTest.HarfBuzz_BreakRunsByEmojiVariationSelectors
--RenderTextTest.HarfBuzz_FontListFallback
--RenderTextTest.HarfBuzz_UnicodeFallback
--RenderTextTest.SetFontList
--RenderTextTest.StringSizeBoldWidth
--RenderTextTest.StringSizeRespectsFontListMetrics
--RenderTextTest.StylePropagated
--RenderTextTest.SubpixelRenderingSuppressed
--RenderTextTest.TextDoesntClip
-
 # https://crbug.com/952652 - GpuMemoryBufferHandle Mojo struct traits.
 -StructTraitsTest.GpuMemoryBufferHandle
diff --git a/testing/buildbot/filters/webui_html_imports_polyfill_browser_tests.filter b/testing/buildbot/filters/webui_html_imports_polyfill_browser_tests.filter
index c1683dd..7a5753bc 100644
--- a/testing/buildbot/filters/webui_html_imports_polyfill_browser_tests.filter
+++ b/testing/buildbot/filters/webui_html_imports_polyfill_browser_tests.filter
@@ -3,10 +3,6 @@
 # HTML imports feature turned off, before the Blink team disables the feature by
 # default.
 
-# TODO(rbpotter): Restore this test to the list of tests below, after failures
-# on Mac 10.13 have been fixed.
--CrExtensionsManagerTestWithMultipleExtensionTypesInstalled.*
-
 CrExtensionsSidebarTest.*
 CrExtensionsToolbarTest.*
 CrExtensionsItemsTest.*
@@ -20,6 +16,7 @@
 CrExtensionsLoadErrorTest.*
 CrExtensionsManagerUnitTest.*
 CrExtensionsManagerUnitTestWithActivityLogFlag.*
+CrExtensionsManagerTestWithMultipleExtensionTypesInstalled.*
 CrExtensionsManagerTestWithIdQueryParam.*
 CrExtensionsManagerTestWithActivityLogFlag.*
 CrExtensionsShortcutTest.*
diff --git a/testing/buildbot/gn_isolate_map.pyl b/testing/buildbot/gn_isolate_map.pyl
index 31b79d23..e3a6f0d 100644
--- a/testing/buildbot/gn_isolate_map.pyl
+++ b/testing/buildbot/gn_isolate_map.pyl
@@ -602,11 +602,6 @@
     "label": "//sandbox/linux:chrome_sandbox",
     "type": "additional_compile_target",
   },
-  "chrome_sizes": {
-    "label": "//chrome/test:chrome_sizes",
-    "type": "generated_script",
-    "script": "bin/chrome_sizes",
-  },
   "chromedriver": {
     "label": "//chrome/test/chromedriver:chromedriver",
     "type": "additional_compile_target",
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl
index 8585edd..ff919409 100644
--- a/testing/buildbot/test_suites.pyl
+++ b/testing/buildbot/test_suites.pyl
@@ -203,14 +203,6 @@
       },
     },
 
-    'chrome_sizes': {
-      'chrome_sizes': {
-        'merge': {
-          'script': '//tools/perf/process_perf_results.py',
-        },
-      },
-    },
-
     'chromedriver_py_tests_isolated_scripts': {
       'chromedriver_py_tests': {
         "args": [
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl
index f0bfaf9..809b854c 100644
--- a/testing/buildbot/waterfalls.pyl
+++ b/testing/buildbot/waterfalls.pyl
@@ -679,26 +679,17 @@
           'chrome',
           'chrome/installer/linux',
         ],
-        'test_suites': {
-          'isolated_scripts': 'chrome_sizes',
-        },
       },
       'mac-google-rel': {
         'additional_compile_targets': [
           'chrome',
         ],
-        'test_suites': {
-          'isolated_scripts': 'chrome_sizes',
-        },
       },
       'win-google-rel': {
         'additional_compile_targets': [
           'chrome',
           'chrome_official_builder',
         ],
-        'test_suites': {
-          'isolated_scripts': 'chrome_sizes',
-        },
       },
     },
   },
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 4291741..1c0ea828 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -1095,6 +1095,25 @@
             ]
         }
     ],
+    "BlinkLayoutNG": [
+        {
+            "platforms": [
+                "android",
+                "chromeos",
+                "linux",
+                "mac",
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "LayoutNG"
+                    ]
+                }
+            ]
+        }
+    ],
     "BlinkSchedulerDedicatedWorkerThrottling": [
         {
             "platforms": [
@@ -4466,24 +4485,6 @@
             ]
         }
     ],
-    "SearchReadyOmnibox": [
-        {
-            "platforms": [
-                "android"
-            ],
-            "experiments": [
-                {
-                    "name": "EnabledCopyIcon",
-                    "params": {
-                        "variation": "copy_icon"
-                    },
-                    "enable_features": [
-                        "SearchReadyOmnibox"
-                    ]
-                }
-            ]
-        }
-    ],
     "ServiceWorkerAggressiveCodeCache": [
         {
             "platforms": [
@@ -5366,25 +5367,6 @@
             ]
         }
     ],
-    "V8HugeMaxOldGenerationSize": [
-        {
-            "platforms": [
-                "android",
-                "chromeos",
-                "linux",
-                "mac",
-                "windows"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "V8HugeMaxOldGenerationSize"
-                    ]
-                }
-            ]
-        }
-    ],
     "V8Ignition": [
         {
             "platforms": [
diff --git a/third_party/blink/SECURITY_OWNERS b/third_party/blink/SECURITY_OWNERS
new file mode 100644
index 0000000..42c5a78
--- /dev/null
+++ b/third_party/blink/SECURITY_OWNERS
@@ -0,0 +1,5 @@
+# Blink/OWP Security reviewers
+dcheng@chromium.org
+mkwst@chromium.org
+palmer@chromium.org
+vogelheim@chromium.org
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc
index 3b387d8..625676a 100644
--- a/third_party/blink/common/features.cc
+++ b/third_party/blink/common/features.cc
@@ -263,6 +263,11 @@
 #endif
 };
 
+// Enabled to block programmatic focus in subframes when not triggered by user
+// activation (see htpps://crbug.com/954349).
+const base::Feature kBlockingFocusWithoutUserActivation{
+    "BlockingFocusWithoutUserActivation", base::FEATURE_DISABLED_BY_DEFAULT};
+
 bool IsOffMainThreadSharedWorkerScriptFetchEnabled() {
   // Off-the-main-thread shared worker script fetch depends on PlzSharedWorker
   // (NetworkService).
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h
index 3ad8f922..d21bc91 100644
--- a/third_party/blink/public/common/features.h
+++ b/third_party/blink/public/common/features.h
@@ -80,6 +80,8 @@
 
 BLINK_COMMON_EXPORT extern const base::Feature
     kWebFontsCacheAwareTimeoutAdaption;
+BLINK_COMMON_EXPORT extern const base::Feature
+    kBlockingFocusWithoutUserActivation;
 
 // Returns true when off-the-main-thread shared worker script fetch is enabled.
 BLINK_COMMON_EXPORT bool IsOffMainThreadSharedWorkerScriptFetchEnabled();
diff --git a/third_party/blink/public/mojom/credentialmanager/credential_manager.mojom b/third_party/blink/public/mojom/credentialmanager/credential_manager.mojom
index e22ed21..b4963ea 100644
--- a/third_party/blink/public/mojom/credentialmanager/credential_manager.mojom
+++ b/third_party/blink/public/mojom/credentialmanager/credential_manager.mojom
@@ -36,6 +36,7 @@
   ANDROID_EMPTY_ALLOW_CREDENTIALS,
   ANDROID_NOT_SUPPORTED_ERROR,
   ANDROID_USER_VERIFICATION_UNSUPPORTED,
+  ABORT,
   UNKNOWN
 };
 
diff --git a/third_party/blink/public/mojom/web_feature/web_feature.mojom b/third_party/blink/public/mojom/web_feature/web_feature.mojom
index 3677419..b9788ffc 100644
--- a/third_party/blink/public/mojom/web_feature/web_feature.mojom
+++ b/third_party/blink/public/mojom/web_feature/web_feature.mojom
@@ -2293,6 +2293,9 @@
   kMediaCapabilitiesDecodingInfoWithKeySystemConfig = 2888,
   kRevertInCustomIdent = 2889,
   kUnoptimizedImagePolicies = 2890,
+  kVTTCueParser = 2891,
+  kMediaElementTextTrackContainer = 2892,
+  kMediaElementTextTrackList = 2893,
 
   // 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/blink/public/mojom/webauthn/authenticator.mojom b/third_party/blink/public/mojom/webauthn/authenticator.mojom
index 2aff731c..9cc5438 100644
--- a/third_party/blink/public/mojom/webauthn/authenticator.mojom
+++ b/third_party/blink/public/mojom/webauthn/authenticator.mojom
@@ -27,6 +27,7 @@
   EMPTY_ALLOW_CREDENTIALS,
   ANDROID_NOT_SUPPORTED_ERROR,
   PROTECTION_POLICY_INCONSISTENT,
+  ABORT_ERROR,
   UNKNOWN_ERROR,
 };
 
@@ -366,4 +367,9 @@
   // Parties use this method to determine whether they can create a new
   // credential using a user-verifying platform authenticator.
   IsUserVerifyingPlatformAuthenticatorAvailable() => (bool available);
+
+  // Cancel an ongoing MakeCredential or GetAssertion request
+  // Only one MakeCredential or GetAssertion call at a time is allowed,
+  // any future calls are cancelled
+  Cancel();
 };
diff --git a/third_party/blink/public/platform/web_gesture_event.h b/third_party/blink/public/platform/web_gesture_event.h
index d993bbf..1a673bd5 100644
--- a/third_party/blink/public/platform/web_gesture_event.h
+++ b/third_party/blink/public/platform/web_gesture_event.h
@@ -20,11 +20,11 @@
 
 class WebGestureEvent : public WebInputEvent {
  public:
-  enum InertialPhaseState {
-    kUnknownMomentumPhase = 0,  // No phase information.
-    kNonMomentumPhase,          // Regular scrolling phase.
-    kMomentumPhase,             // Momentum phase.
-    kLastPhase = kMomentumPhase,
+  enum class InertialPhaseState {
+    kUnknownMomentum = 0,  // No phase information.
+    kNonMomentum,          // Regular scrolling phase.
+    kMomentum,             // Momentum phase.
+    kMaxValue = kMomentum,
   };
 
   bool is_source_touch_event_set_non_blocking;
diff --git a/third_party/blink/public/platform/web_theme_engine.h b/third_party/blink/public/platform/web_theme_engine.h
index d3253c4a..85f0fcc8 100644
--- a/third_party/blink/public/platform/web_theme_engine.h
+++ b/third_party/blink/public/platform/web_theme_engine.h
@@ -157,6 +157,8 @@
     ScrollbarThumbExtraParams scrollbar_thumb;
   };
 
+  virtual ~WebThemeEngine() {}
+
   // Gets the size of the given theme part. For variable sized items
   // like vertical scrollbar thumbs, the width will be the required width of
   // the track while the height will be the minimum height.
diff --git a/third_party/blink/public/web/web_local_frame.h b/third_party/blink/public/web/web_local_frame.h
index d0f6eeb..fa0c5f7a 100644
--- a/third_party/blink/public/web/web_local_frame.h
+++ b/third_party/blink/public/web/web_local_frame.h
@@ -369,22 +369,6 @@
                                         v8::Local<v8::Value> argv[],
                                         WebScriptExecutionCallback*) = 0;
 
-  enum class PausableTaskResult {
-    // The context was invalid or destroyed.
-    kContextInvalidOrDestroyed,
-    // Script is not paused.
-    kReady,
-  };
-  using PausableTaskCallback = base::OnceCallback<void(PausableTaskResult)>;
-
-  // Queues a callback to run script when the context is not paused, e.g. for a
-  // modal JS dialog or window.print(). This callback can run immediately if the
-  // context is not paused. If the context is invalidated before becoming
-  // unpaused, the callback will be run with a kContextInvalidOrDestroyed value.
-  // This asserts that the context is valid at the time of this
-  // call.
-  virtual void PostPausableTask(PausableTaskCallback) = 0;
-
   enum ScriptExecutionType {
     // Execute script synchronously, unless the page is suspended.
     kSynchronous,
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc
index 9bfbd433..237f186 100644
--- a/third_party/blink/renderer/core/dom/document.cc
+++ b/third_party/blink/renderer/core/dom/document.cc
@@ -43,6 +43,7 @@
 #include "services/resource_coordinator/public/mojom/coordination_unit.mojom-blink.h"
 #include "services/service_manager/public/cpp/interface_provider.h"
 #include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
+#include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/mojom/frame/document_interface_broker.mojom-blink.h"
 #include "third_party/blink/public/mojom/insecure_input/insecure_input_service.mojom-blink.h"
 #include "third_party/blink/public/mojom/net/ip_address_space.mojom-blink.h"
@@ -7782,13 +7783,10 @@
     return true;
   }
 
-  // TODO(ekaramad): This method, for now, always returns true. The intent is
-  // for this method to eventually block programmatic focus in certain cases.
-  // The enforcement will be added after metrics are collected
-  // (https://crbug.com/954349).
   WebFeature uma_type;
+  bool sandboxed = IsSandboxed(WebSandboxFlags::kNavigation);
   bool ad = frame_->IsAdSubframe();
-  if (IsSandboxed(WebSandboxFlags::kNavigation)) {
+  if (sandboxed) {
     uma_type = ad ? WebFeature::kFocusWithoutUserActivationSandboxedAdFrame
                   : WebFeature::kFocusWithoutUserActivationSandboxedNotAdFrame;
   } else {
@@ -7797,7 +7795,11 @@
            : WebFeature::kFocusWithoutUserActivationNotSandboxedNotAdFrame;
   }
   UseCounter::Count(*this, uma_type);
-  return true;
+  if (!base::FeatureList::IsEnabled(
+          features::kBlockingFocusWithoutUserActivation)) {
+    return true;
+  }
+  return !sandboxed;
 }
 
 LazyLoadImageObserver& Document::EnsureLazyLoadImageObserver() {
@@ -7902,19 +7904,6 @@
   if (frame_->Loader().StateMachine()->IsDisplayingInitialEmptyDocument())
     load_event_progress_ = kLoadEventNotRun;
   frame_->Loader().Progress().ProgressStarted();
-  // Some sites appear to depend on javascript:'' synchronously populating an
-  // iframe, similar to about:blank. See https://crbug.com/923585
-  // TODO(japhet): The spec doesn't say anything about ever loading JS urls
-  // synchronously. It's unclear whether the problem is that JS url navigation
-  // has to be sync in certain situations, or if these are just legacy websites
-  // assuming non-spec-compliant behavior. Either way, this special case seems
-  // hacky.
-  if (frame_->Loader().StateMachine()->IsDisplayingInitialEmptyDocument() &&
-      (url == "javascript:''" || url == "javascript:\"\"")) {
-    frame_->GetScriptController().ExecuteJavaScriptURL(url, disposition);
-    CheckCompleted();
-    return;
-  }
   pending_javascript_urls_.push_back(PendingJavascriptUrl(url, disposition));
   if (!javascript_url_task_handle_.IsActive()) {
     javascript_url_task_handle_ = PostCancellableTask(
diff --git a/third_party/blink/renderer/core/editing/BUILD.gn b/third_party/blink/renderer/core/editing/BUILD.gn
index 9517a04..415e88eb 100644
--- a/third_party/blink/renderer/core/editing/BUILD.gn
+++ b/third_party/blink/renderer/core/editing/BUILD.gn
@@ -246,6 +246,7 @@
     "selection_editor.h",
     "selection_modifier.cc",
     "selection_modifier.h",
+    "selection_modifier_line.cc",
     "selection_strategy.h",
     "selection_template.cc",
     "selection_template.h",
diff --git a/third_party/blink/renderer/core/editing/selection_modifier.cc b/third_party/blink/renderer/core/editing/selection_modifier.cc
index 029a2fb..3ca5231 100644
--- a/third_party/blink/renderer/core/editing/selection_modifier.cc
+++ b/third_party/blink/renderer/core/editing/selection_modifier.cc
@@ -68,7 +68,10 @@
                                           : LogicalStartOfLine(c);
 }
 
-VisiblePosition PreviousParagraphPosition(
+}  // namespace
+
+// static
+VisiblePosition SelectionModifier::PreviousParagraphPosition(
     const VisiblePosition& passed_position,
     LayoutUnit x_point) {
   DCHECK(passed_position.IsValid()) << passed_position;
@@ -84,8 +87,10 @@
   return position;
 }
 
-VisiblePosition NextParagraphPosition(const VisiblePosition& passed_position,
-                                      LayoutUnit x_point) {
+// static
+VisiblePosition SelectionModifier::NextParagraphPosition(
+    const VisiblePosition& passed_position,
+    LayoutUnit x_point) {
   DCHECK(passed_position.IsValid()) << passed_position;
   VisiblePosition position = passed_position;
   do {
@@ -98,8 +103,6 @@
   return position;
 }
 
-}  // namespace
-
 LayoutUnit NoXPosForVerticalArrowNavigation() {
   return LayoutUnit::Min();
 }
diff --git a/third_party/blink/renderer/core/editing/selection_modifier.h b/third_party/blink/renderer/core/editing/selection_modifier.h
index 7633511..f17b36f4 100644
--- a/third_party/blink/renderer/core/editing/selection_modifier.h
+++ b/third_party/blink/renderer/core/editing/selection_modifier.h
@@ -101,6 +101,16 @@
   VisiblePosition ModifyMovingBackward(TextGranularity);
   Position NextWordPositionForPlatform(const Position&);
 
+  static VisiblePosition PreviousLinePosition(const VisiblePosition&,
+                                              LayoutUnit line_direction_point);
+  static VisiblePosition NextLinePosition(const VisiblePosition&,
+                                          LayoutUnit line_direction_point);
+  static VisiblePosition PreviousParagraphPosition(
+      const VisiblePosition&,
+      LayoutUnit line_direction_point);
+  static VisiblePosition NextParagraphPosition(const VisiblePosition&,
+                                               LayoutUnit line_direction_point);
+
   Member<const LocalFrame> frame_;
   // TODO(editing-dev): We should get rid of |selection_| once we change
   // all member functions not to use |selection_|.
diff --git a/third_party/blink/renderer/core/editing/selection_modifier_line.cc b/third_party/blink/renderer/core/editing/selection_modifier_line.cc
new file mode 100644
index 0000000..0d5a7c2
--- /dev/null
+++ b/third_party/blink/renderer/core/editing/selection_modifier_line.cc
@@ -0,0 +1,352 @@
+/*
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+// 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 "third_party/blink/renderer/core/editing/selection_modifier.h"
+
+#include "third_party/blink/renderer/core/editing/editing_utilities.h"
+#include "third_party/blink/renderer/core/editing/inline_box_position.h"
+#include "third_party/blink/renderer/core/editing/visible_position.h"
+#include "third_party/blink/renderer/core/editing/visible_units.h"
+#include "third_party/blink/renderer/core/layout/api/line_layout_block_flow.h"
+#include "third_party/blink/renderer/core/layout/line/root_inline_box.h"
+
+namespace blink {
+
+namespace {
+
+ContainerNode* HighestEditableRootOfNode(const Node& node) {
+  return HighestEditableRoot(FirstPositionInOrBeforeNode(node));
+}
+
+Node* PreviousNodeConsideringAtomicNodes(const Node& start) {
+  if (start.previousSibling()) {
+    Node* node = start.previousSibling();
+    while (!IsAtomicNode(node) && node->lastChild())
+      node = node->lastChild();
+    return node;
+  }
+  return start.parentNode();
+}
+
+Node* NextNodeConsideringAtomicNodes(const Node& start) {
+  if (!IsAtomicNode(&start) && start.hasChildren())
+    return start.firstChild();
+  if (start.nextSibling())
+    return start.nextSibling();
+  const Node* node = &start;
+  while (node && !node->nextSibling())
+    node = node->parentNode();
+  if (node)
+    return node->nextSibling();
+  return nullptr;
+}
+
+// Returns the previous leaf node or nullptr if there are no more. Delivers leaf
+// nodes as if the whole DOM tree were a linear chain of its leaf nodes.
+Node* PreviousAtomicLeafNode(const Node& start) {
+  Node* node = PreviousNodeConsideringAtomicNodes(start);
+  while (node) {
+    if (IsAtomicNode(node))
+      return node;
+    node = PreviousNodeConsideringAtomicNodes(*node);
+  }
+  return nullptr;
+}
+
+// Returns the next leaf node or nullptr if there are no more. Delivers leaf
+// nodes as if the whole DOM tree were a linear chain of its leaf nodes.
+Node* NextAtomicLeafNode(const Node& start) {
+  Node* node = NextNodeConsideringAtomicNodes(start);
+  while (node) {
+    if (IsAtomicNode(node))
+      return node;
+    node = NextNodeConsideringAtomicNodes(*node);
+  }
+  return nullptr;
+}
+
+Node* PreviousLeafWithSameEditability(const Node& node) {
+  const bool editable = HasEditableStyle(node);
+  for (Node* runner = PreviousAtomicLeafNode(node); runner;
+       runner = PreviousAtomicLeafNode(*runner)) {
+    if (editable == HasEditableStyle(*runner))
+      return runner;
+  }
+  return nullptr;
+}
+
+Node* NextLeafWithGivenEditability(Node* node, bool editable) {
+  if (!node)
+    return nullptr;
+
+  for (Node* runner = NextAtomicLeafNode(*node); runner;
+       runner = NextAtomicLeafNode(*runner)) {
+    if (editable == HasEditableStyle(*runner))
+      return runner;
+  }
+  return nullptr;
+}
+
+LayoutPoint AbsoluteLineDirectionPointToLocalPointInBlock(
+    const RootInlineBox* root,
+    LayoutUnit line_direction_point) {
+  DCHECK(root);
+  LineLayoutBlockFlow containing_block = root->Block();
+  FloatPoint absolute_block_point =
+      containing_block.LocalToAbsolute(FloatPoint());
+  if (containing_block.HasOverflowClip())
+    absolute_block_point -= FloatSize(containing_block.ScrolledContentOffset());
+
+  if (root->Block().IsHorizontalWritingMode()) {
+    return LayoutPoint(
+        LayoutUnit(line_direction_point - absolute_block_point.X()),
+        root->BlockDirectionPointInLine());
+  }
+
+  return LayoutPoint(
+      root->BlockDirectionPointInLine(),
+      LayoutUnit(line_direction_point - absolute_block_point.Y()));
+}
+
+bool InSameLine(const Node& node, const VisiblePosition& visible_position) {
+  if (!node.GetLayoutObject())
+    return true;
+  return InSameLine(CreateVisiblePosition(FirstPositionInOrBeforeNode(node)),
+                    visible_position);
+}
+
+Node* FindNodeInPreviousLine(const Node& start_node,
+                             const VisiblePosition& visible_position) {
+  for (Node* runner = PreviousLeafWithSameEditability(start_node); runner;
+       runner = PreviousLeafWithSameEditability(*runner)) {
+    if (!InSameLine(*runner, visible_position))
+      return runner;
+  }
+  return nullptr;
+}
+
+// FIXME: consolidate with code in previousLinePosition.
+Position PreviousRootInlineBoxCandidatePosition(
+    Node* node,
+    const VisiblePosition& visible_position) {
+  DCHECK(visible_position.IsValid()) << visible_position;
+  ContainerNode* highest_root =
+      HighestEditableRoot(visible_position.DeepEquivalent());
+  Node* const previous_node = FindNodeInPreviousLine(*node, visible_position);
+  for (Node* runner = previous_node; runner && !runner->IsShadowRoot();
+       runner = PreviousLeafWithSameEditability(*runner)) {
+    if (HighestEditableRootOfNode(*runner) != highest_root)
+      break;
+
+    const Position& candidate =
+        IsHTMLBRElement(*runner)
+            ? Position::BeforeNode(*runner)
+            : Position::EditingPositionOf(runner, CaretMaxOffset(runner));
+    if (IsVisuallyEquivalentCandidate(candidate))
+      return candidate;
+  }
+  return Position();
+}
+
+Position NextRootInlineBoxCandidatePosition(
+    Node* node,
+    const VisiblePosition& visible_position) {
+  DCHECK(visible_position.IsValid()) << visible_position;
+  ContainerNode* highest_root =
+      HighestEditableRoot(visible_position.DeepEquivalent());
+  // TODO(xiaochengh): We probably also need to pass in the starting editability
+  // to |PreviousLeafWithSameEditability|.
+  const bool is_editable = HasEditableStyle(
+      *visible_position.DeepEquivalent().ComputeContainerNode());
+  Node* next_node = NextLeafWithGivenEditability(node, is_editable);
+  while (next_node && InSameLine(*next_node, visible_position)) {
+    next_node = NextLeafWithGivenEditability(next_node, is_editable);
+  }
+
+  for (Node* runner = next_node; runner && !runner->IsShadowRoot();
+       runner = NextLeafWithGivenEditability(runner, is_editable)) {
+    if (HighestEditableRootOfNode(*runner) != highest_root)
+      break;
+
+    const Position& candidate =
+        Position::EditingPositionOf(runner, CaretMinOffset(runner));
+    if (IsVisuallyEquivalentCandidate(candidate))
+      return candidate;
+  }
+  return Position();
+}
+
+}  // namespace
+
+// static
+VisiblePosition SelectionModifier::PreviousLinePosition(
+    const VisiblePosition& visible_position,
+    LayoutUnit line_direction_point) {
+  DCHECK(visible_position.IsValid()) << visible_position;
+
+  // TODO(xiaochengh): Make all variables |const|.
+
+  Position p = visible_position.DeepEquivalent();
+  Node* node = p.AnchorNode();
+
+  if (!node)
+    return VisiblePosition();
+
+  LayoutObject* layout_object = node->GetLayoutObject();
+  if (!layout_object)
+    return VisiblePosition();
+
+  const RootInlineBox* root = nullptr;
+  const InlineBox* box = ComputeInlineBoxPosition(visible_position).inline_box;
+  if (box) {
+    root = box->Root().PrevRootBox();
+    // We want to skip zero height boxes.
+    // This could happen in case it is a TrailingFloatsRootInlineBox.
+    if (!root || !root->LogicalHeight() || !root->FirstLeafChild())
+      root = nullptr;
+  }
+
+  if (!root) {
+    Position position =
+        PreviousRootInlineBoxCandidatePosition(node, visible_position);
+    if (position.IsNotNull()) {
+      const VisiblePosition candidate = CreateVisiblePosition(position);
+      const InlineBox* inline_box =
+          candidate.IsNotNull() ? ComputeInlineBoxPosition(candidate).inline_box
+                                : nullptr;
+      if (!inline_box) {
+        // TODO(editing-dev): Investigate if this is correct for null
+        // |candidate|.
+        return candidate;
+      }
+      root = &inline_box->Root();
+    }
+  }
+
+  if (root) {
+    // FIXME: Can be wrong for multi-column layout and with transforms.
+    LayoutPoint point_in_line = AbsoluteLineDirectionPointToLocalPointInBlock(
+        root, line_direction_point);
+    LineLayoutItem line_layout_item =
+        root->ClosestLeafChildForPoint(point_in_line, IsEditablePosition(p))
+            ->GetLineLayoutItem();
+    Node* node = line_layout_item.GetNode();
+    if (node && EditingIgnoresContent(*node))
+      return VisiblePosition::InParentBeforeNode(*node);
+    return CreateVisiblePosition(
+        line_layout_item.PositionForPoint(point_in_line));
+  }
+
+  // Could not find a previous line. This means we must already be on the first
+  // line. Move to the start of the content in this block, which effectively
+  // moves us to the start of the line we're on.
+  Element* root_element = HasEditableStyle(*node)
+                              ? RootEditableElement(*node)
+                              : node->GetDocument().documentElement();
+  if (!root_element)
+    return VisiblePosition();
+  return VisiblePosition::FirstPositionInNode(*root_element);
+}
+
+// static
+VisiblePosition SelectionModifier::NextLinePosition(
+    const VisiblePosition& visible_position,
+    LayoutUnit line_direction_point) {
+  DCHECK(visible_position.IsValid()) << visible_position;
+
+  // TODO(xiaochengh): Make all variables |const|.
+
+  Position p = visible_position.DeepEquivalent();
+  Node* node = p.AnchorNode();
+
+  if (!node)
+    return VisiblePosition();
+
+  LayoutObject* layout_object = node->GetLayoutObject();
+  if (!layout_object)
+    return VisiblePosition();
+
+  const RootInlineBox* root = nullptr;
+  const InlineBox* box = ComputeInlineBoxPosition(visible_position).inline_box;
+  if (box) {
+    root = box->Root().NextRootBox();
+    // We want to skip zero height boxes.
+    // This could happen in case it is a TrailingFloatsRootInlineBox.
+    if (!root || !root->LogicalHeight() || !root->FirstLeafChild())
+      root = nullptr;
+  }
+
+  if (!root) {
+    // FIXME: We need do the same in previousLinePosition.
+    Node* child = NodeTraversal::ChildAt(*node, p.ComputeEditingOffset());
+    Node* search_start_node =
+        child ? child : &NodeTraversal::LastWithinOrSelf(*node);
+    Position position =
+        NextRootInlineBoxCandidatePosition(search_start_node, visible_position);
+    if (position.IsNotNull()) {
+      const VisiblePosition candidate = CreateVisiblePosition(position);
+      const InlineBox* inline_box =
+          candidate.IsNotNull() ? ComputeInlineBoxPosition(candidate).inline_box
+                                : nullptr;
+      if (!inline_box) {
+        // TODO(editing-dev): Investigate if this is correct for null
+        // |candidate|.
+        return candidate;
+      }
+      root = &inline_box->Root();
+    }
+  }
+
+  if (root) {
+    // FIXME: Can be wrong for multi-column layout and with transforms.
+    LayoutPoint point_in_line = AbsoluteLineDirectionPointToLocalPointInBlock(
+        root, line_direction_point);
+    LineLayoutItem line_layout_item =
+        root->ClosestLeafChildForPoint(point_in_line, IsEditablePosition(p))
+            ->GetLineLayoutItem();
+    Node* node = line_layout_item.GetNode();
+    if (node && EditingIgnoresContent(*node))
+      return VisiblePosition::InParentBeforeNode(*node);
+    return CreateVisiblePosition(
+        line_layout_item.PositionForPoint(point_in_line));
+  }
+
+  // Could not find a next line. This means we must already be on the last line.
+  // Move to the end of the content in this block, which effectively moves us
+  // to the end of the line we're on.
+  Element* root_element = HasEditableStyle(*node)
+                              ? RootEditableElement(*node)
+                              : node->GetDocument().documentElement();
+  if (!root_element)
+    return VisiblePosition();
+  return VisiblePosition::LastPositionInNode(*root_element);
+}
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/core/editing/selection_modifier_test.cc b/third_party/blink/renderer/core/editing/selection_modifier_test.cc
index 35e4b4a5..1b0ac200 100644
--- a/third_party/blink/renderer/core/editing/selection_modifier_test.cc
+++ b/third_party/blink/renderer/core/editing/selection_modifier_test.cc
@@ -30,4 +30,22 @@
   EXPECT_EQ(SelectionInDOMTree(), modifier.Selection().AsSelection());
 }
 
+TEST_F(SelectionModifierTest, PreviousLineWithDisplayNone) {
+  InsertStyleElement("body{font-family: monospace}");
+  const SelectionInDOMTree selection = SetSelectionTextToBody(
+      "<div contenteditable>"
+      "<div>foo bar</div>"
+      "<div>foo <b style=\"display:none\">qux</b> bar baz|</div>"
+      "</div>");
+  SelectionModifier modifier(GetFrame(), selection);
+  modifier.Modify(SelectionModifyAlteration::kMove,
+                  SelectionModifyDirection::kBackward, TextGranularity::kLine);
+  EXPECT_EQ(
+      "<div contenteditable>"
+      "<div>foo bar|</div>"
+      "<div>foo <b style=\"display:none\">qux</b> bar baz</div>"
+      "</div>",
+      GetSelectionTextFromBody(modifier.Selection().AsSelection()));
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/editing/visible_units.h b/third_party/blink/renderer/core/editing/visible_units.h
index 4b2f0405..52f277a 100644
--- a/third_party/blink/renderer/core/editing/visible_units.h
+++ b/third_party/blink/renderer/core/editing/visible_units.h
@@ -35,7 +35,6 @@
 
 namespace blink {
 
-class LayoutUnit;
 class LayoutObject;
 class Node;
 class IntPoint;
@@ -165,10 +164,6 @@
 CORE_EXPORT VisiblePosition EndOfLine(const VisiblePosition&);
 CORE_EXPORT VisiblePositionInFlatTree
 EndOfLine(const VisiblePositionInFlatTree&);
-CORE_EXPORT VisiblePosition
-PreviousLinePosition(const VisiblePosition&, LayoutUnit line_direction_point);
-CORE_EXPORT VisiblePosition NextLinePosition(const VisiblePosition&,
-                                             LayoutUnit line_direction_point);
 CORE_EXPORT bool InSameLine(const VisiblePosition&, const VisiblePosition&);
 CORE_EXPORT bool InSameLine(const VisiblePositionInFlatTree&,
                             const VisiblePositionInFlatTree&);
@@ -299,11 +294,6 @@
     const VisiblePositionInFlatTree&,
     const PositionInFlatTree&);
 
-Position NextRootInlineBoxCandidatePosition(Node*, const VisiblePosition&);
-
-CORE_EXPORT Position
-PreviousRootInlineBoxCandidatePosition(Node*, const VisiblePosition&);
-
 }  // namespace blink
 
 #endif  // THIRD_PARTY_BLINK_RENDERER_CORE_EDITING_VISIBLE_UNITS_H_
diff --git a/third_party/blink/renderer/core/editing/visible_units_line.cc b/third_party/blink/renderer/core/editing/visible_units_line.cc
index 840e70d..8e5ef31 100644
--- a/third_party/blink/renderer/core/editing/visible_units_line.cc
+++ b/third_party/blink/renderer/core/editing/visible_units_line.cc
@@ -30,12 +30,10 @@
 
 #include "third_party/blink/renderer/core/editing/visible_units.h"
 
-#include "third_party/blink/renderer/core/accessibility/ax_object_cache.h"
 #include "third_party/blink/renderer/core/editing/editing_utilities.h"
 #include "third_party/blink/renderer/core/editing/inline_box_position.h"
 #include "third_party/blink/renderer/core/editing/ng_flat_tree_shorthands.h"
 #include "third_party/blink/renderer/core/editing/visible_position.h"
-#include "third_party/blink/renderer/core/layout/api/line_layout_block_flow.h"
 #include "third_party/blink/renderer/core/layout/line/inline_text_box.h"
 #include "third_party/blink/renderer/core/layout/line/root_inline_box.h"
 #include "third_party/blink/renderer/core/layout/ng/inline/ng_caret_position.h"
@@ -48,80 +46,6 @@
 
 namespace {
 
-ContainerNode* HighestEditableRootOfNode(const Node& node) {
-  return HighestEditableRoot(FirstPositionInOrBeforeNode(node));
-}
-
-Node* PreviousNodeConsideringAtomicNodes(const Node& start) {
-  if (start.previousSibling()) {
-    Node* node = start.previousSibling();
-    while (!IsAtomicNode(node) && node->lastChild())
-      node = node->lastChild();
-    return node;
-  }
-  return start.parentNode();
-}
-
-Node* NextNodeConsideringAtomicNodes(const Node& start) {
-  if (!IsAtomicNode(&start) && start.hasChildren())
-    return start.firstChild();
-  if (start.nextSibling())
-    return start.nextSibling();
-  const Node* node = &start;
-  while (node && !node->nextSibling())
-    node = node->parentNode();
-  if (node)
-    return node->nextSibling();
-  return nullptr;
-}
-
-// Returns the previous leaf node or nullptr if there are no more. Delivers leaf
-// nodes as if the whole DOM tree were a linear chain of its leaf nodes.
-Node* PreviousAtomicLeafNode(const Node& start) {
-  Node* node = PreviousNodeConsideringAtomicNodes(start);
-  while (node) {
-    if (IsAtomicNode(node))
-      return node;
-    node = PreviousNodeConsideringAtomicNodes(*node);
-  }
-  return nullptr;
-}
-
-// Returns the next leaf node or nullptr if there are no more. Delivers leaf
-// nodes as if the whole DOM tree were a linear chain of its leaf nodes.
-Node* NextAtomicLeafNode(const Node& start) {
-  Node* node = NextNodeConsideringAtomicNodes(start);
-  while (node) {
-    if (IsAtomicNode(node))
-      return node;
-    node = NextNodeConsideringAtomicNodes(*node);
-  }
-  return nullptr;
-}
-
-Node* PreviousLeafWithSameEditability(const Node& node) {
-  const bool editable = HasEditableStyle(node);
-  for (Node* runner = PreviousAtomicLeafNode(node); runner;
-       runner = PreviousAtomicLeafNode(*runner)) {
-    if (editable == HasEditableStyle(*runner))
-      return runner;
-  }
-  return nullptr;
-}
-
-Node* NextLeafWithGivenEditability(Node* node,
-                                   bool editable) {
-  if (!node)
-    return nullptr;
-
-  for (Node* runner = NextAtomicLeafNode(*node); runner;
-       runner = NextAtomicLeafNode(*runner)) {
-    if (editable == HasEditableStyle(*runner))
-      return runner;
-  }
-  return nullptr;
-}
-
 struct VisualOrdering;
 
 template <typename Strategy, typename Ordering>
@@ -251,97 +175,8 @@
   return StartOfLineAlgorithm<EditingInFlatTreeStrategy>(current_position);
 }
 
-LayoutPoint AbsoluteLineDirectionPointToLocalPointInBlock(
-    const RootInlineBox* root,
-    LayoutUnit line_direction_point) {
-  DCHECK(root);
-  LineLayoutBlockFlow containing_block = root->Block();
-  FloatPoint absolute_block_point =
-      containing_block.LocalToAbsolute(FloatPoint());
-  if (containing_block.HasOverflowClip())
-    absolute_block_point -= FloatSize(containing_block.ScrolledContentOffset());
-
-  if (root->Block().IsHorizontalWritingMode()) {
-    return LayoutPoint(
-        LayoutUnit(line_direction_point - absolute_block_point.X()),
-        root->BlockDirectionPointInLine());
-  }
-
-  return LayoutPoint(
-      root->BlockDirectionPointInLine(),
-      LayoutUnit(line_direction_point - absolute_block_point.Y()));
-}
-
-bool InSameLine(const Node& node, const VisiblePosition& visible_position) {
-  if (!node.GetLayoutObject())
-    return true;
-  return InSameLine(CreateVisiblePosition(FirstPositionInOrBeforeNode(node)),
-                    visible_position);
-}
-
-Node* FindNodeInPreviousLine(const Node& start_node,
-                             const VisiblePosition& visible_position) {
-  for (Node* runner = PreviousLeafWithSameEditability(start_node); runner;
-       runner = PreviousLeafWithSameEditability(*runner)) {
-    if (!InSameLine(*runner, visible_position))
-      return runner;
-  }
-  return nullptr;
-}
-
 }  // namespace
 
-// FIXME: consolidate with code in previousLinePosition.
-Position PreviousRootInlineBoxCandidatePosition(
-    Node* node,
-    const VisiblePosition& visible_position) {
-  DCHECK(visible_position.IsValid()) << visible_position;
-  ContainerNode* highest_root =
-      HighestEditableRoot(visible_position.DeepEquivalent());
-  Node* const previous_node = FindNodeInPreviousLine(*node, visible_position);
-  for (Node* runner = previous_node; runner && !runner->IsShadowRoot();
-       runner = PreviousLeafWithSameEditability(*runner)) {
-    if (HighestEditableRootOfNode(*runner) != highest_root)
-      break;
-
-    const Position& candidate =
-        IsHTMLBRElement(*runner)
-            ? Position::BeforeNode(*runner)
-            : Position::EditingPositionOf(runner, CaretMaxOffset(runner));
-    if (IsVisuallyEquivalentCandidate(candidate))
-      return candidate;
-  }
-  return Position();
-}
-
-Position NextRootInlineBoxCandidatePosition(
-    Node* node,
-    const VisiblePosition& visible_position) {
-  DCHECK(visible_position.IsValid()) << visible_position;
-  ContainerNode* highest_root =
-      HighestEditableRoot(visible_position.DeepEquivalent());
-  // TODO(xiaochengh): We probably also need to pass in the starting editability
-  // to |PreviousLeafWithSameEditability|.
-  const bool is_editable = HasEditableStyle(
-      *visible_position.DeepEquivalent().ComputeContainerNode());
-  Node* next_node = NextLeafWithGivenEditability(node, is_editable);
-  while (next_node && InSameLine(*next_node, visible_position)) {
-    next_node = NextLeafWithGivenEditability(next_node, is_editable);
-  }
-
-  for (Node* runner = next_node; runner && !runner->IsShadowRoot();
-       runner = NextLeafWithGivenEditability(runner, is_editable)) {
-    if (HighestEditableRootOfNode(*runner) != highest_root)
-      break;
-
-    const Position& candidate =
-        Position::EditingPositionOf(runner, CaretMinOffset(runner));
-    if (IsVisuallyEquivalentCandidate(candidate))
-      return candidate;
-  }
-  return Position();
-}
-
 // FIXME: Rename this function to reflect the fact it ignores bidi levels.
 VisiblePosition StartOfLine(const VisiblePosition& current_position) {
   DCHECK(current_position.IsValid()) << current_position;
@@ -700,144 +535,4 @@
   return IsLogicalEndOfLineAlgorithm<EditingInFlatTreeStrategy>(p);
 }
 
-VisiblePosition PreviousLinePosition(const VisiblePosition& visible_position,
-                                     LayoutUnit line_direction_point) {
-  DCHECK(visible_position.IsValid()) << visible_position;
-
-  // TODO(xiaochengh): Make all variables |const|.
-
-  Position p = visible_position.DeepEquivalent();
-  Node* node = p.AnchorNode();
-
-  if (!node)
-    return VisiblePosition();
-
-  LayoutObject* layout_object = node->GetLayoutObject();
-  if (!layout_object)
-    return VisiblePosition();
-
-  const RootInlineBox* root = nullptr;
-  const InlineBox* box = ComputeInlineBoxPosition(visible_position).inline_box;
-  if (box) {
-    root = box->Root().PrevRootBox();
-    // We want to skip zero height boxes.
-    // This could happen in case it is a TrailingFloatsRootInlineBox.
-    if (!root || !root->LogicalHeight() || !root->FirstLeafChild())
-      root = nullptr;
-  }
-
-  if (!root) {
-    Position position =
-        PreviousRootInlineBoxCandidatePosition(node, visible_position);
-    if (position.IsNotNull()) {
-      const VisiblePosition candidate = CreateVisiblePosition(position);
-      const InlineBox* inline_box =
-          candidate.IsNotNull() ? ComputeInlineBoxPosition(candidate).inline_box
-                                : nullptr;
-      if (!inline_box) {
-        // TODO(editing-dev): Investigate if this is correct for null
-        // |candidate|.
-        return candidate;
-      }
-      root = &inline_box->Root();
-    }
-  }
-
-  if (root) {
-    // FIXME: Can be wrong for multi-column layout and with transforms.
-    LayoutPoint point_in_line = AbsoluteLineDirectionPointToLocalPointInBlock(
-        root, line_direction_point);
-    LineLayoutItem line_layout_item =
-        root->ClosestLeafChildForPoint(point_in_line, IsEditablePosition(p))
-            ->GetLineLayoutItem();
-    Node* node = line_layout_item.GetNode();
-    if (node && EditingIgnoresContent(*node))
-      return VisiblePosition::InParentBeforeNode(*node);
-    return CreateVisiblePosition(
-        line_layout_item.PositionForPoint(point_in_line));
-  }
-
-  // Could not find a previous line. This means we must already be on the first
-  // line. Move to the start of the content in this block, which effectively
-  // moves us to the start of the line we're on.
-  Element* root_element = HasEditableStyle(*node)
-                              ? RootEditableElement(*node)
-                              : node->GetDocument().documentElement();
-  if (!root_element)
-    return VisiblePosition();
-  return VisiblePosition::FirstPositionInNode(*root_element);
-}
-
-VisiblePosition NextLinePosition(const VisiblePosition& visible_position,
-                                 LayoutUnit line_direction_point) {
-  DCHECK(visible_position.IsValid()) << visible_position;
-
-  // TODO(xiaochengh): Make all variables |const|.
-
-  Position p = visible_position.DeepEquivalent();
-  Node* node = p.AnchorNode();
-
-  if (!node)
-    return VisiblePosition();
-
-  LayoutObject* layout_object = node->GetLayoutObject();
-  if (!layout_object)
-    return VisiblePosition();
-
-  const RootInlineBox* root = nullptr;
-  const InlineBox* box = ComputeInlineBoxPosition(visible_position).inline_box;
-  if (box) {
-    root = box->Root().NextRootBox();
-    // We want to skip zero height boxes.
-    // This could happen in case it is a TrailingFloatsRootInlineBox.
-    if (!root || !root->LogicalHeight() || !root->FirstLeafChild())
-      root = nullptr;
-  }
-
-  if (!root) {
-    // FIXME: We need do the same in previousLinePosition.
-    Node* child = NodeTraversal::ChildAt(*node, p.ComputeEditingOffset());
-    Node* search_start_node =
-        child ? child : &NodeTraversal::LastWithinOrSelf(*node);
-    Position position =
-        NextRootInlineBoxCandidatePosition(search_start_node, visible_position);
-    if (position.IsNotNull()) {
-      const VisiblePosition candidate = CreateVisiblePosition(position);
-      const InlineBox* inline_box =
-          candidate.IsNotNull() ? ComputeInlineBoxPosition(candidate).inline_box
-                                : nullptr;
-      if (!inline_box) {
-        // TODO(editing-dev): Investigate if this is correct for null
-        // |candidate|.
-        return candidate;
-      }
-      root = &inline_box->Root();
-    }
-  }
-
-  if (root) {
-    // FIXME: Can be wrong for multi-column layout and with transforms.
-    LayoutPoint point_in_line = AbsoluteLineDirectionPointToLocalPointInBlock(
-        root, line_direction_point);
-    LineLayoutItem line_layout_item =
-        root->ClosestLeafChildForPoint(point_in_line, IsEditablePosition(p))
-            ->GetLineLayoutItem();
-    Node* node = line_layout_item.GetNode();
-    if (node && EditingIgnoresContent(*node))
-      return VisiblePosition::InParentBeforeNode(*node);
-    return CreateVisiblePosition(
-        line_layout_item.PositionForPoint(point_in_line));
-  }
-
-  // Could not find a next line. This means we must already be on the last line.
-  // Move to the end of the content in this block, which effectively moves us
-  // to the end of the line we're on.
-  Element* root_element = HasEditableStyle(*node)
-                              ? RootEditableElement(*node)
-                              : node->GetDocument().documentElement();
-  if (!root_element)
-    return VisiblePosition();
-  return VisiblePosition::LastPositionInNode(*root_element);
-}
-
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/editing/visible_units_line_test.cc b/third_party/blink/renderer/core/editing/visible_units_line_test.cc
index 424cc33..fb84e5a4 100644
--- a/third_party/blink/renderer/core/editing/visible_units_line_test.cc
+++ b/third_party/blink/renderer/core/editing/visible_units_line_test.cc
@@ -647,22 +647,6 @@
       StartOfLine(CreateVisiblePositionInFlatTree(*seven, 1)).DeepEquivalent());
 }
 
-TEST_F(VisibleUnitsLineTest,
-       PreviousRootInlineBoxCandidatePositionWithDisplayNone) {
-  SetBodyContent(
-      "<div contenteditable>"
-      "<div id=one>one abc</div>"
-      "<div id=two>two <b id=none style=display:none>def</b> ghi</div>"
-      "</div>");
-  Element* const one = GetDocument().getElementById("one");
-  Element* const two = GetDocument().getElementById("two");
-  const VisiblePosition& visible_position =
-      CreateVisiblePosition(Position::LastPositionInNode(*two));
-  EXPECT_EQ(Position(one->firstChild(), 7),
-            PreviousRootInlineBoxCandidatePosition(two->lastChild(),
-                                                   visible_position));
-}
-
 TEST_P(ParameterizedVisibleUnitsLineTest, InSameLineSkippingEmptyEditableDiv) {
   // This test records the InSameLine() results in
   // editing/selection/skip-over-contenteditable.html
diff --git a/third_party/blink/renderer/core/events/web_input_event_conversion_test.cc b/third_party/blink/renderer/core/events/web_input_event_conversion_test.cc
index 8be42987..ad6352b 100644
--- a/third_party/blink/renderer/core/events/web_input_event_conversion_test.cc
+++ b/third_party/blink/renderer/core/events/web_input_event_conversion_test.cc
@@ -166,7 +166,7 @@
     web_gesture_event.data.scroll_update.velocity_x = 40;
     web_gesture_event.data.scroll_update.velocity_y = 42;
     web_gesture_event.data.scroll_update.inertial_phase =
-        WebGestureEvent::kMomentumPhase;
+        WebGestureEvent::InertialPhaseState::kMomentum;
 
     WebGestureEvent scaled_gesture_event =
         TransformWebGestureEvent(view, web_gesture_event);
@@ -182,7 +182,7 @@
     // order to remain consist with delta values.
     EXPECT_EQ(40, scaled_gesture_event.VelocityX());
     EXPECT_EQ(42, scaled_gesture_event.VelocityY());
-    EXPECT_EQ(WebGestureEvent::kMomentumPhase,
+    EXPECT_EQ(WebGestureEvent::InertialPhaseState::kMomentum,
               scaled_gesture_event.InertialPhase());
   }
 
@@ -202,7 +202,7 @@
     EXPECT_EQ(6, position.Y());
     EXPECT_EQ(20, scaled_gesture_event.PositionInScreen().x);
     EXPECT_EQ(22, scaled_gesture_event.PositionInScreen().y);
-    EXPECT_EQ(WebGestureEvent::kUnknownMomentumPhase,
+    EXPECT_EQ(WebGestureEvent::InertialPhaseState::kUnknownMomentum,
               scaled_gesture_event.InertialPhase());
   }
 
diff --git a/third_party/blink/renderer/core/exported/web_frame_test.cc b/third_party/blink/renderer/core/exported/web_frame_test.cc
index f944aca..43a599b 100644
--- a/third_party/blink/renderer/core/exported/web_frame_test.cc
+++ b/third_party/blink/renderer/core/exported/web_frame_test.cc
@@ -582,135 +582,6 @@
   EXPECT_EQ(true, callback_helper.BoolValue());
 }
 
-class ScriptNotPausedCallbackHelper {
- public:
-  ScriptNotPausedCallbackHelper() = default;
-  ~ScriptNotPausedCallbackHelper() = default;
-
-  WebLocalFrame::PausableTaskCallback GetCallback() {
-    return WTF::Bind(&ScriptNotPausedCallbackHelper::Run,
-                     WTF::Unretained(this));
-  }
-
-  void set_closure(base::OnceClosure closure) { closure_ = std::move(closure); }
-  const base::Optional<WebLocalFrame::PausableTaskResult>& result() const {
-    return result_;
-  }
-
- private:
-  void Run(WebLocalFrame::PausableTaskResult result) {
-    ASSERT_FALSE(result_) << "Callback invoked multiple times!";
-    result_ = result;
-    if (closure_)
-      std::move(*closure_).Run();
-  }
-
-  base::Optional<WebLocalFrame::PausableTaskResult> result_;
-  base::Optional<base::OnceClosure> closure_;
-};
-
-TEST_F(WebFrameTest, CallingPostPausableTaskWhileNotPaused) {
-  RegisterMockedHttpURLLoad("foo.html");
-
-  frame_test_helpers::WebViewHelper web_view_helper;
-  web_view_helper.InitializeAndLoad(base_url_ + "foo.html");
-  WebLocalFrameImpl* main_frame = web_view_helper.LocalMainFrame();
-
-  ScriptState::Scope scope(ToScriptStateForMainWorld(main_frame->GetFrame()));
-
-  ScriptNotPausedCallbackHelper callback_helper;
-  main_frame->PostPausableTask(callback_helper.GetCallback());
-  RunPendingTasks();
-
-  ASSERT_TRUE(callback_helper.result());
-  EXPECT_EQ(WebLocalFrame::PausableTaskResult::kReady,
-            *callback_helper.result());
-}
-
-// Flaky on Android: crbug.com/804892.
-#if defined(OS_ANDROID)
-TEST_F(WebFrameTest, DISABLED_CallingPostPausableTaskWhilePaused)
-#else
-TEST_F(WebFrameTest, CallingPostPausableTaskWhilePaused)
-#endif
-{
-  RegisterMockedHttpURLLoad("foo.html");
-
-  frame_test_helpers::WebViewHelper web_view_helper;
-  web_view_helper.InitializeAndLoad(base_url_ + "foo.html");
-  WebLocalFrameImpl* main_frame = web_view_helper.LocalMainFrame();
-
-  ScriptState::Scope scope(ToScriptStateForMainWorld(main_frame->GetFrame()));
-
-  // Suspend scheduled tasks so the script doesn't run.
-  web_view_helper.GetWebView()->GetPage()->SetPaused(true);
-
-  ScriptNotPausedCallbackHelper callback_helper;
-  main_frame->PostPausableTask(callback_helper.GetCallback());
-  RunPendingTasks();
-  EXPECT_FALSE(callback_helper.result());
-
-  web_view_helper.GetWebView()->GetPage()->SetPaused(false);
-  RunPendingTasks();
-  ASSERT_TRUE(callback_helper.result());
-  EXPECT_EQ(WebLocalFrame::PausableTaskResult::kReady,
-            *callback_helper.result());
-}
-
-TEST_F(WebFrameTest, CallingPostPausableTaskAndDestroying) {
-  RegisterMockedHttpURLLoad("foo.html");
-
-  frame_test_helpers::WebViewHelper web_view_helper;
-  web_view_helper.InitializeAndLoad(base_url_ + "foo.html");
-  WebLocalFrameImpl* main_frame = web_view_helper.LocalMainFrame();
-
-  ScriptState::Scope scope(ToScriptStateForMainWorld(main_frame->GetFrame()));
-
-  // Suspend scheduled tasks so the script doesn't run.
-  web_view_helper.GetWebView()->GetPage()->SetPaused(true);
-
-  ScriptNotPausedCallbackHelper callback_helper;
-  main_frame->PostPausableTask(callback_helper.GetCallback());
-  RunPendingTasks();
-  EXPECT_FALSE(callback_helper.result());
-
-  web_view_helper.Reset();
-  ASSERT_TRUE(callback_helper.result());
-  EXPECT_EQ(WebLocalFrame::PausableTaskResult::kContextInvalidOrDestroyed,
-            *callback_helper.result());
-}
-
-TEST_F(WebFrameTest, CallingPostPausableTaskAndDestroyingTheContext) {
-  RegisterMockedHttpURLLoad("foo.html");
-  RegisterMockedHttpURLLoad("bar.html");
-
-  frame_test_helpers::WebViewHelper web_view_helper;
-  web_view_helper.InitializeAndLoad(base_url_ + "foo.html");
-  WebLocalFrameImpl* main_frame = web_view_helper.LocalMainFrame();
-
-  auto navigate_frame = [](frame_test_helpers::WebViewHelper* web_view_helper,
-                           const std::string& url) {
-    frame_test_helpers::LoadFrame(
-        web_view_helper->GetWebView()->MainFrameImpl(), url);
-  };
-
-  ScriptNotPausedCallbackHelper callback_helper;
-  // Navigate the frame when the helper is notified that script can run. This
-  // will invalidate the context immediately.
-  callback_helper.set_closure(WTF::Bind(navigate_frame,
-                                        WTF::Unretained(&web_view_helper),
-                                        base_url_ + "bar.html"));
-
-  ScriptState::Scope scope(ToScriptStateForMainWorld(main_frame->GetFrame()));
-
-  main_frame->PostPausableTask(callback_helper.GetCallback());
-  RunPendingTasks();
-
-  ASSERT_TRUE(callback_helper.result());
-  EXPECT_EQ(WebLocalFrame::PausableTaskResult::kReady,
-            *callback_helper.result());
-}
-
 TEST_F(WebFrameTest, IframeScriptRemovesSelf) {
   RegisterMockedHttpURLLoad("single_iframe.html");
   RegisterMockedHttpURLLoad("visible_iframe.html");
diff --git a/third_party/blink/renderer/core/exported/web_view_test.cc b/third_party/blink/renderer/core/exported/web_view_test.cc
index 9b4e994..abb3a5b 100644
--- a/third_party/blink/renderer/core/exported/web_view_test.cc
+++ b/third_party/blink/renderer/core/exported/web_view_test.cc
@@ -2659,8 +2659,8 @@
             web_view->MainFrameWidget()->HandleInputEvent(
                 WebCoalescedInputEvent(event)));
 
-  HTMLElement* element = ToHTMLElement(
-      web_view->MainFrameImpl()->GetDocument().GetElementById("obj"));
+  auto* element = To<HTMLElement>(static_cast<Node*>(
+      web_view->MainFrameImpl()->GetDocument().GetElementById("obj")));
   EXPECT_FALSE(element->CanStartSelection());
 }
 
@@ -2684,8 +2684,8 @@
             web_view->MainFrameWidget()->HandleInputEvent(
                 WebCoalescedInputEvent(event)));
 
-  HTMLElement* element = ToHTMLElement(
-      web_view->MainFrameImpl()->GetDocument().GetElementById("obj"));
+  auto* element = To<HTMLElement>(static_cast<Node*>(
+      web_view->MainFrameImpl()->GetDocument().GetElementById("obj")));
   EXPECT_TRUE(element->CanStartSelection());
 }
 
diff --git a/third_party/blink/renderer/core/frame/BUILD.gn b/third_party/blink/renderer/core/frame/BUILD.gn
index df6ab32..03647d3 100644
--- a/third_party/blink/renderer/core/frame/BUILD.gn
+++ b/third_party/blink/renderer/core/frame/BUILD.gn
@@ -125,8 +125,6 @@
     "page_scale_constraints_set.h",
     "pausable_script_executor.cc",
     "pausable_script_executor.h",
-    "pausable_task.cc",
-    "pausable_task.h",
     "performance_monitor.cc",
     "performance_monitor.h",
     "picture_in_picture_controller.cc",
diff --git a/third_party/blink/renderer/core/frame/pausable_task.cc b/third_party/blink/renderer/core/frame/pausable_task.cc
deleted file mode 100644
index ea88b33..0000000
--- a/third_party/blink/renderer/core/frame/pausable_task.cc
+++ /dev/null
@@ -1,72 +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.
-
-#include "third_party/blink/renderer/core/frame/pausable_task.h"
-
-#include "base/location.h"
-#include "third_party/blink/renderer/core/dom/document.h"
-#include "third_party/blink/renderer/platform/wtf/functional.h"
-
-namespace blink {
-
-PausableTask::~PausableTask() = default;
-
-// static
-void PausableTask::Post(ExecutionContext* context,
-                        WebLocalFrame::PausableTaskCallback callback) {
-  DCHECK(!context->IsContextDestroyed());
-  if (!context->IsContextPaused()) {
-    std::move(callback).Run(WebLocalFrame::PausableTaskResult::kReady);
-  } else {
-    // Manages its own lifetime and invokes the callback when script is
-    // unpaused.
-    MakeGarbageCollected<PausableTask>(context, std::move(callback));
-  }
-}
-
-void PausableTask::ContextDestroyed(ExecutionContext* destroyed_context) {
-  DCHECK(callback_);
-
-  Dispose();
-
-  std::move(callback_).Run(
-      WebLocalFrame::PausableTaskResult::kContextInvalidOrDestroyed);
-}
-
-void PausableTask::Run() {
-  CHECK(!GetExecutionContext()->IsContextDestroyed());
-  DCHECK(!GetExecutionContext()->IsContextPaused());
-  DCHECK(callback_);
-
-  auto callback = std::move(callback_);
-
-  // Call Dispose() now, since it's possible that the callback will destroy the
-  // context.
-  Dispose();
-
-  std::move(callback).Run(WebLocalFrame::PausableTaskResult::kReady);
-}
-
-PausableTask::PausableTask(ExecutionContext* context,
-                           WebLocalFrame::PausableTaskCallback callback)
-    : ContextLifecycleObserver(context),
-      callback_(std::move(callback)),
-      keep_alive_(this) {
-  DCHECK(callback_);
-  DCHECK(context);
-  DCHECK(!context->IsContextDestroyed());
-  DCHECK(context->IsContextPaused());
-  task_handle_ = PostCancellableTask(
-      *context->GetTaskRunner(TaskType::kInternalDefault), FROM_HERE,
-      WTF::Bind(&PausableTask::Run, WrapPersistent(this)));
-}
-
-void PausableTask::Dispose() {
-  // Remove object as a ContextLifecycleObserver.
-  ContextLifecycleObserver::ClearContext();
-  keep_alive_.Clear();
-  task_handle_.Cancel();
-}
-
-}  // namespace blink
diff --git a/third_party/blink/renderer/core/frame/pausable_task.h b/third_party/blink/renderer/core/frame/pausable_task.h
deleted file mode 100644
index c829c8e..0000000
--- a/third_party/blink/renderer/core/frame/pausable_task.h
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_PAUSABLE_TASK_H_
-#define THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_PAUSABLE_TASK_H_
-
-#include <memory>
-
-#include "third_party/blink/public/web/web_local_frame.h"
-#include "third_party/blink/renderer/core/core_export.h"
-#include "third_party/blink/renderer/core/execution_context/context_lifecycle_observer.h"
-#include "third_party/blink/renderer/platform/heap/self_keep_alive.h"
-#include "third_party/blink/renderer/platform/scheduler/public/post_cancellable_task.h"
-
-namespace blink {
-
-// A class that monitors the lifetime and suspension state of a context, and
-// runs a task either when the context is unsuspended or when the context is
-// invalidated.
-class CORE_EXPORT PausableTask final
-    : public GarbageCollectedFinalized<PausableTask>,
-      public ContextLifecycleObserver {
-  USING_GARBAGE_COLLECTED_MIXIN(PausableTask);
-
- public:
-  // Note: This asserts that the context is currently suspended.
-  PausableTask(ExecutionContext*, WebLocalFrame::PausableTaskCallback);
-  virtual ~PausableTask();
-
-  // Checks if the context is paused, and, if not, executes the callback
-  // immediately. Otherwise constructs a PausableTask that will run the
-  // callback when execution is unpaused.
-  static void Post(ExecutionContext*, WebLocalFrame::PausableTaskCallback);
-
-  // ContextLifecycleObserver:
-  void ContextDestroyed(ExecutionContext*) override;
-
- private:
-  void Run();
-  void Dispose();
-
-  WebLocalFrame::PausableTaskCallback callback_;
-  TaskHandle task_handle_;
-
-  SelfKeepAlive<PausableTask> keep_alive_;
-};
-
-}  // namespace blink
-
-#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_PAUSABLE_TASK_H_
diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
index 6f88f2b7..bee484d2 100644
--- a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
+++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
@@ -187,7 +187,6 @@
 #include "third_party/blink/renderer/core/frame/local_frame_view.h"
 #include "third_party/blink/renderer/core/frame/page_scale_constraints_set.h"
 #include "third_party/blink/renderer/core/frame/pausable_script_executor.h"
-#include "third_party/blink/renderer/core/frame/pausable_task.h"
 #include "third_party/blink/renderer/core/frame/picture_in_picture_controller.h"
 #include "third_party/blink/renderer/core/frame/remote_frame.h"
 #include "third_party/blink/renderer/core/frame/remote_frame_owner.h"
@@ -812,13 +811,6 @@
                                        callback);
 }
 
-void WebLocalFrameImpl::PostPausableTask(PausableTaskCallback callback) {
-  DCHECK(GetFrame());
-  Document* document = GetFrame()->GetDocument();
-  DCHECK(document);
-  PausableTask::Post(document, std::move(callback));
-}
-
 void WebLocalFrameImpl::RequestExecuteScriptInIsolatedWorld(
     int world_id,
     const WebScriptSource* sources_in,
diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.h b/third_party/blink/renderer/core/frame/web_local_frame_impl.h
index dc5b0d0..8b5916d 100644
--- a/third_party/blink/renderer/core/frame/web_local_frame_impl.h
+++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.h
@@ -133,7 +133,6 @@
                                 int argc,
                                 v8::Local<v8::Value> argv[],
                                 WebScriptExecutionCallback*) override;
-  void PostPausableTask(PausableTaskCallback) override;
   void RequestExecuteScriptInIsolatedWorld(
       int world_id,
       const WebScriptSource* source_in,
diff --git a/third_party/blink/renderer/core/html/forms/html_field_set_element.cc b/third_party/blink/renderer/core/html/forms/html_field_set_element.cc
index 7f09324..0380724 100644
--- a/third_party/blink/renderer/core/html/forms/html_field_set_element.cc
+++ b/third_party/blink/renderer/core/html/forms/html_field_set_element.cc
@@ -52,9 +52,9 @@
     if (element->IsFormControlElement()) {
       if (!ToHTMLFormControlElement(element)->IsNotCandidateOrValid())
         return false;
-    } else if (element->IsHTMLElement() &&
-               blink::ToHTMLElement(element)->IsFormAssociatedCustomElement()) {
-      if (!element->EnsureElementInternals().IsNotCandidateOrValid())
+    } else if (auto* html_element = DynamicTo<HTMLElement>(element)) {
+      if (html_element->IsFormAssociatedCustomElement() &&
+          !element->EnsureElementInternals().IsNotCandidateOrValid())
         return false;
     }
   }
diff --git a/third_party/blink/renderer/core/html/forms/html_form_element.cc b/third_party/blink/renderer/core/html/forms/html_form_element.cc
index a9914db..1727da5 100644
--- a/third_party/blink/renderer/core/html/forms/html_form_element.cc
+++ b/third_party/blink/renderer/core/html/forms/html_form_element.cc
@@ -752,7 +752,7 @@
 #if DCHECK_IS_ON()
   if (!element)
     return nullptr;
-  SECURITY_DCHECK(ToHTMLElement(element)->formOwner() == this);
+  SECURITY_DCHECK(To<HTMLElement>(element)->formOwner() == this);
   if (IsHTMLImageElement(*element)) {
     SECURITY_DCHECK(ImageElements().Find(element) != kNotFound);
   } else if (IsHTMLObjectElement(*element)) {
diff --git a/third_party/blink/renderer/core/html/forms/html_select_element.cc b/third_party/blink/renderer/core/html/forms/html_select_element.cc
index a1faaeae..924a852 100644
--- a/third_party/blink/renderer/core/html/forms/html_select_element.cc
+++ b/third_party/blink/renderer/core/html/forms/html_select_element.cc
@@ -752,33 +752,35 @@
 
   for (Element* current_element = ElementTraversal::FirstWithin(*this);
        current_element && list_items_.size() < kMaxListItems;) {
-    if (!current_element->IsHTMLElement()) {
+    auto* current_html_element = DynamicTo<HTMLElement>(current_element);
+    if (!current_html_element) {
       current_element =
           ElementTraversal::NextSkippingChildren(*current_element, this);
       continue;
     }
-    HTMLElement& current = blink::ToHTMLElement(*current_element);
 
     // We should ignore nested optgroup elements. The HTML parser flatten
     // them.  However we need to ignore nested optgroups built by DOM APIs.
     // This behavior matches to IE and Firefox.
-    if (IsHTMLOptGroupElement(current)) {
-      if (current.parentNode() != this) {
-        current_element = ElementTraversal::NextSkippingChildren(current, this);
+    if (IsHTMLOptGroupElement(*current_html_element)) {
+      if (current_html_element->parentNode() != this) {
+        current_element =
+            ElementTraversal::NextSkippingChildren(*current_html_element, this);
         continue;
       }
-      list_items_.push_back(&current);
-      if (Element* next_element = ElementTraversal::FirstWithin(current)) {
+      list_items_.push_back(current_html_element);
+      if (Element* next_element =
+              ElementTraversal::FirstWithin(*current_html_element)) {
         current_element = next_element;
         continue;
       }
     }
 
-    if (IsHTMLOptionElement(current))
-      list_items_.push_back(&current);
+    if (IsHTMLOptionElement(*current_html_element))
+      list_items_.push_back(current_html_element);
 
-    if (IsHTMLHRElement(current))
-      list_items_.push_back(&current);
+    if (IsHTMLHRElement(*current_html_element))
+      list_items_.push_back(current_html_element);
 
     // In conforming HTML code, only <optgroup> and <option> will be found
     // within a <select>. We call NodeTraversal::nextSkippingChildren so
diff --git a/third_party/blink/renderer/core/html/html_element.h b/third_party/blink/renderer/core/html/html_element.h
index 0695267c..a95fcef 100644
--- a/third_party/blink/renderer/core/html/html_element.h
+++ b/third_party/blink/renderer/core/html/html_element.h
@@ -261,25 +261,26 @@
 // This requires isHTML*Element(const Element&) and isHTML*Element(const
 // HTMLElement&).  When the input element is an HTMLElement, we don't need to
 // check the namespace URI, just the local name.
-#define DEFINE_HTMLELEMENT_TYPE_CASTS_WITH_FUNCTION(thisType)                \
-  inline bool Is##thisType(const thisType* element);                         \
-  inline bool Is##thisType(const thisType& element);                         \
-  inline bool Is##thisType(const HTMLElement* element) {                     \
-    return element && Is##thisType(*element);                                \
-  }                                                                          \
-  inline bool Is##thisType(const Node& node) {                               \
-    return node.IsHTMLElement() ? Is##thisType(ToHTMLElement(node)) : false; \
-  }                                                                          \
-  inline bool Is##thisType(const Node* node) {                               \
-    return node && Is##thisType(*node);                                      \
-  }                                                                          \
-  inline bool Is##thisType(const Element* element) {                         \
-    return element && Is##thisType(*element);                                \
-  }                                                                          \
-  template <>                                                                \
-  inline bool IsElementOfType<const thisType>(const HTMLElement& element) {  \
-    return Is##thisType(element);                                            \
-  }                                                                          \
+#define DEFINE_HTMLELEMENT_TYPE_CASTS_WITH_FUNCTION(thisType)               \
+  inline bool Is##thisType(const thisType* element);                        \
+  inline bool Is##thisType(const thisType& element);                        \
+  inline bool Is##thisType(const HTMLElement* element) {                    \
+    return element && Is##thisType(*element);                               \
+  }                                                                         \
+  inline bool Is##thisType(const Node& node) {                              \
+    auto* html_element = DynamicTo<HTMLElement>(node);                      \
+    return html_element ? Is##thisType(html_element) : false;               \
+  }                                                                         \
+  inline bool Is##thisType(const Node* node) {                              \
+    return node && Is##thisType(*node);                                     \
+  }                                                                         \
+  inline bool Is##thisType(const Element* element) {                        \
+    return element && Is##thisType(*element);                               \
+  }                                                                         \
+  template <>                                                               \
+  inline bool IsElementOfType<const thisType>(const HTMLElement& element) { \
+    return Is##thisType(element);                                           \
+  }                                                                         \
   DEFINE_ELEMENT_TYPE_CASTS_WITH_FUNCTION(thisType)
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/html_image_fallback_helper.cc b/third_party/blink/renderer/core/html/html_image_fallback_helper.cc
index d779cfe6..6fbf1efb 100644
--- a/third_party/blink/renderer/core/html/html_image_fallback_helper.cc
+++ b/third_party/blink/renderer/core/html/html_image_fallback_helper.cc
@@ -49,6 +49,69 @@
   return width.IsFixed() && width.Value() < pixels_for_alt_image;
 }
 
+namespace {
+
+class ImageFallbackContentBuilder {
+  STACK_ALLOCATED();
+
+ public:
+  ImageFallbackContentBuilder(const ShadowRoot& shadow_root)
+      : place_holder_(shadow_root.getElementById("alttext-container")),
+        broken_image_(shadow_root.getElementById("alttext-image")) {}
+
+  bool HasContentElements() const { return place_holder_ && broken_image_; }
+
+  void ShowBrokenImageIcon(bool is_ltr) {
+    broken_image_->SetInlineStyleProperty(CSSPropertyID::kDisplay,
+                                          CSSValueID::kInline);
+    // Make sure the broken image icon appears on the appropriate side of the
+    // image for the element's writing direction.
+    broken_image_->SetInlineStyleProperty(
+        CSSPropertyID::kFloat, AtomicString(is_ltr ? "left" : "right"));
+  }
+  void HideBrokenImageIcon() {
+    broken_image_->SetInlineStyleProperty(CSSPropertyID::kDisplay,
+                                          CSSValueID::kNone);
+  }
+
+  void ShowAsReplaced(const Length& width, const Length& height, float zoom) {
+    place_holder_->SetInlineStyleProperty(CSSPropertyID::kOverflow,
+                                          CSSValueID::kHidden);
+    place_holder_->SetInlineStyleProperty(CSSPropertyID::kDisplay,
+                                          CSSValueID::kInlineBlock);
+    place_holder_->SetInlineStyleProperty(CSSPropertyID::kPointerEvents,
+                                          CSSValueID::kNone);
+    place_holder_->SetInlineStyleProperty(CSSPropertyID::kHeight,
+                                          *CSSValue::Create(height, zoom));
+    place_holder_->SetInlineStyleProperty(CSSPropertyID::kWidth,
+                                          *CSSValue::Create(width, zoom));
+  }
+
+  void ShowBorder() {
+    place_holder_->SetInlineStyleProperty(CSSPropertyID::kBorderWidth, 1,
+                                          CSSPrimitiveValue::UnitType::kPixels);
+    place_holder_->SetInlineStyleProperty(CSSPropertyID::kBorderStyle,
+                                          CSSValueID::kSolid);
+    place_holder_->SetInlineStyleProperty(CSSPropertyID::kBorderColor,
+                                          CSSValueID::kSilver);
+    place_holder_->SetInlineStyleProperty(CSSPropertyID::kPadding, 1,
+                                          CSSPrimitiveValue::UnitType::kPixels);
+    place_holder_->SetInlineStyleProperty(CSSPropertyID::kBoxSizing,
+                                          CSSValueID::kBorderBox);
+  }
+
+  void AlignToBaseline() {
+    place_holder_->SetInlineStyleProperty(CSSPropertyID::kVerticalAlign,
+                                          CSSValueID::kBaseline);
+  }
+
+ private:
+  Member<Element> place_holder_;
+  Member<Element> broken_image_;
+};
+
+}  // namespace
+
 void HTMLImageFallbackHelper::CreateAltTextShadowTree(Element& element) {
   ShadowRoot& root = element.EnsureUserAgentShadowRoot();
 
@@ -86,13 +149,10 @@
   if (element.AuthorShadowRoot() || !element.UserAgentShadowRoot())
     return new_style;
 
-  Element* place_holder =
-      element.UserAgentShadowRoot()->getElementById("alttext-container");
-  Element* broken_image =
-      element.UserAgentShadowRoot()->getElementById("alttext-image");
+  ImageFallbackContentBuilder fallback(*element.UserAgentShadowRoot());
   // Input elements have a UA shadow root of their own. We may not have replaced
   // it with fallback content yet.
-  if (!place_holder || !broken_image)
+  if (!fallback.HasContentElements())
     return new_style;
 
   if (element.GetDocument().InQuirksMode()) {
@@ -106,8 +166,7 @@
       new_style->SetWidth(new_style->Height());
     if (new_style->Width().IsSpecifiedOrIntrinsic() &&
         new_style->Height().IsSpecifiedOrIntrinsic()) {
-      place_holder->SetInlineStyleProperty(CSSPropertyID::kVerticalAlign,
-                                           CSSValueID::kBaseline);
+      fallback.AlignToBaseline();
     }
   }
 
@@ -127,45 +186,17 @@
     // attribute, or the Document is in quirks mode The user agent is expected
     // to treat the element as a replaced element whose content is the text that
     // the element represents, if any."
-    place_holder->SetInlineStyleProperty(CSSPropertyID::kOverflow,
-                                         CSSValueID::kHidden);
-    place_holder->SetInlineStyleProperty(CSSPropertyID::kDisplay,
-                                         CSSValueID::kInlineBlock);
-    place_holder->SetInlineStyleProperty(CSSPropertyID::kPointerEvents,
-                                         CSSValueID::kNone);
-    place_holder->SetInlineStyleProperty(
-        CSSPropertyID::kHeight,
-        *CSSValue::Create(new_style->Height(), new_style->EffectiveZoom()));
-    place_holder->SetInlineStyleProperty(
-        CSSPropertyID::kWidth,
-        *CSSValue::Create(new_style->Width(), new_style->EffectiveZoom()));
+    fallback.ShowAsReplaced(new_style->Width(), new_style->Height(),
+                            new_style->EffectiveZoom());
 
     // 16px for the image and 2px for its top/left border/padding offset.
     int pixels_for_alt_image = 18;
     if (ImageSmallerThanAltImage(pixels_for_alt_image, new_style->Width(),
                                  new_style->Height())) {
-      broken_image->SetInlineStyleProperty(CSSPropertyID::kDisplay,
-                                           CSSValueID::kNone);
+      fallback.HideBrokenImageIcon();
     } else {
-      place_holder->SetInlineStyleProperty(
-          CSSPropertyID::kBorderWidth, 1, CSSPrimitiveValue::UnitType::kPixels);
-      place_holder->SetInlineStyleProperty(CSSPropertyID::kBorderStyle,
-                                           CSSValueID::kSolid);
-      place_holder->SetInlineStyleProperty(CSSPropertyID::kBorderColor,
-                                           CSSValueID::kSilver);
-      place_holder->SetInlineStyleProperty(
-          CSSPropertyID::kPadding, 1, CSSPrimitiveValue::UnitType::kPixels);
-      place_holder->SetInlineStyleProperty(CSSPropertyID::kBoxSizing,
-                                           CSSValueID::kBorderBox);
-      broken_image->SetInlineStyleProperty(CSSPropertyID::kDisplay,
-                                           CSSValueID::kInline);
-      // Make sure the broken image icon appears on the appropriate side of the
-      // image for the element's writing direction.
-      broken_image->SetInlineStyleProperty(
-          CSSPropertyID::kFloat,
-          AtomicString(new_style->Direction() == TextDirection::kLtr
-                           ? "left"
-                           : "right"));
+      fallback.ShowBorder();
+      fallback.ShowBrokenImageIcon(new_style->IsLeftToRightDirection());
     }
   } else {
     if (new_style->Display() == EDisplay::kInline) {
@@ -178,8 +209,7 @@
       // treat the element as an empty inline element."
       //  - We achieve this by hiding the broken image so that the span is
       //  empty.
-      broken_image->SetInlineStyleProperty(CSSPropertyID::kDisplay,
-                                           CSSValueID::kNone);
+      fallback.HideBrokenImageIcon();
     } else {
       // "If the element is an img element that represents some text and the
       // user agent does not expect this to change the user agent is expected to
@@ -187,15 +217,7 @@
       // the text, optionally with an icon indicating that an image is missing,
       // so that the user can request the image be displayed or investigate why
       // it is not rendering."
-      broken_image->SetInlineStyleProperty(CSSPropertyID::kDisplay,
-                                           CSSValueID::kInline);
-      // Make sure the broken image icon appears on the appropriate side of
-      // the image for the element's writing direction.
-      broken_image->SetInlineStyleProperty(
-          CSSPropertyID::kFloat,
-          AtomicString(new_style->Direction() == TextDirection::kLtr
-                           ? "left"
-                           : "right"));
+      fallback.ShowBrokenImageIcon(new_style->IsLeftToRightDirection());
     }
   }
 
diff --git a/third_party/blink/renderer/core/html/media/html_media_element.cc b/third_party/blink/renderer/core/html/media/html_media_element.cc
index 0b79cf8c..e0a5f7e 100644
--- a/third_party/blink/renderer/core/html/media/html_media_element.cc
+++ b/third_party/blink/renderer/core/html/media/html_media_element.cc
@@ -2928,8 +2928,10 @@
 }
 
 TextTrackList* HTMLMediaElement::textTracks() {
-  if (!text_tracks_)
+  if (!text_tracks_) {
+    UseCounter::Count(GetDocument(), WebFeature::kMediaElementTextTrackList);
     text_tracks_ = MakeGarbageCollected<TextTrackList>(this);
+  }
 
   return text_tracks_.Get();
 }
@@ -3647,6 +3649,8 @@
 }
 
 TextTrackContainer& HTMLMediaElement::EnsureTextTrackContainer() {
+  UseCounter::Count(GetDocument(), WebFeature::kMediaElementTextTrackContainer);
+
   ShadowRoot& shadow_root = EnsureUserAgentShadowRoot();
   AssertShadowRootChildren(shadow_root);
 
diff --git a/third_party/blink/renderer/core/html/track/vtt/vtt_parser.cc b/third_party/blink/renderer/core/html/track/vtt/vtt_parser.cc
index 7bc15cc5..a2f40ad 100644
--- a/third_party/blink/renderer/core/html/track/vtt/vtt_parser.cc
+++ b/third_party/blink/renderer/core/html/track/vtt/vtt_parser.cc
@@ -33,6 +33,7 @@
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/dom/processing_instruction.h"
 #include "third_party/blink/renderer/core/dom/text.h"
+#include "third_party/blink/renderer/core/frame/use_counter.h"
 #include "third_party/blink/renderer/core/html/track/vtt/vtt_element.h"
 #include "third_party/blink/renderer/core/html/track/vtt/vtt_region.h"
 #include "third_party/blink/renderer/core/html/track/vtt/vtt_scanner.h"
@@ -92,7 +93,9 @@
       current_start_time_(0),
       current_end_time_(0),
       current_region_(nullptr),
-      client_(client) {}
+      client_(client) {
+  UseCounter::Count(document, WebFeature::kVTTCueParser);
+}
 
 void VTTParser::GetNewCues(HeapVector<Member<TextTrackCue>>& output_cues) {
   DCHECK(output_cues.IsEmpty());
diff --git a/third_party/blink/renderer/core/input/scroll_manager.cc b/third_party/blink/renderer/core/input/scroll_manager.cc
index 6b921db..b7b861e 100644
--- a/third_party/blink/renderer/core/input/scroll_manager.cc
+++ b/third_party/blink/renderer/core/input/scroll_manager.cc
@@ -56,11 +56,12 @@
 
 cc::SnapFlingController::GestureScrollUpdateInfo GetGestureScrollUpdateInfo(
     const WebGestureEvent& event) {
-  return {.delta = gfx::Vector2dF(-event.data.scroll_update.delta_x,
-                                  -event.data.scroll_update.delta_y),
-          .is_in_inertial_phase = event.data.scroll_update.inertial_phase ==
-                                  WebGestureEvent::kMomentumPhase,
-          .event_time = event.TimeStamp()};
+  return {
+      .delta = gfx::Vector2dF(-event.data.scroll_update.delta_x,
+                              -event.data.scroll_update.delta_y),
+      .is_in_inertial_phase = event.data.scroll_update.inertial_phase ==
+                              WebGestureEvent::InertialPhaseState::kMomentum,
+      .event_time = event.TimeStamp()};
 }
 
 ScrollableArea* ScrollableAreaForSnapping(LayoutBox* layout_box) {
@@ -569,7 +570,8 @@
   scroll_state_data->position_x = position.X();
   scroll_state_data->position_y = position.Y();
   scroll_state_data->is_in_inertial_phase =
-      gesture_event.InertialPhase() == WebGestureEvent::kMomentumPhase;
+      gesture_event.InertialPhase() ==
+      WebGestureEvent::InertialPhaseState::kMomentum;
   scroll_state_data->is_direct_manipulation =
       gesture_event.SourceDevice() == WebGestureDevice::kTouchscreen;
   scroll_state_data->from_user_input = true;
@@ -638,7 +640,8 @@
         std::make_unique<ScrollStateData>();
     scroll_state_data->is_ending = true;
     scroll_state_data->is_in_inertial_phase =
-        gesture_event.InertialPhase() == WebGestureEvent::kMomentumPhase;
+        gesture_event.InertialPhase() ==
+        WebGestureEvent::InertialPhaseState::kMomentum;
     scroll_state_data->from_user_input = true;
     scroll_state_data->is_direct_manipulation =
         gesture_event.SourceDevice() == WebGestureDevice::kTouchscreen;
diff --git a/third_party/blink/renderer/core/input/scroll_snap_test.cc b/third_party/blink/renderer/core/input/scroll_snap_test.cc
index 5db4094..0f93fef 100644
--- a/third_party/blink/renderer/core/input/scroll_snap_test.cc
+++ b/third_party/blink/renderer/core/input/scroll_snap_test.cc
@@ -114,7 +114,8 @@
   event.data.scroll_update.delta_x = delta_x;
   event.data.scroll_update.delta_y = delta_y;
   if (is_in_inertial_phase) {
-    event.data.scroll_update.inertial_phase = WebGestureEvent::kMomentumPhase;
+    event.data.scroll_update.inertial_phase =
+        WebGestureEvent::InertialPhaseState::kMomentum;
     event.SetTimeStamp(Compositor().LastFrameTime());
   }
   event.SetFrameScale(1);
@@ -128,8 +129,8 @@
   event.SetPositionInWidget(WebFloatPoint(x, y));
   event.SetPositionInScreen(WebFloatPoint(x, y));
   event.data.scroll_end.inertial_phase =
-      is_in_inertial_phase ? WebGestureEvent::kMomentumPhase
-                           : WebGestureEvent::kNonMomentumPhase;
+      is_in_inertial_phase ? WebGestureEvent::InertialPhaseState::kMomentum
+                           : WebGestureEvent::InertialPhaseState::kNonMomentum;
   GetDocument().GetFrame()->GetEventHandler().HandleGestureScrollEvent(event);
 }
 
diff --git a/third_party/blink/renderer/core/inspector/browser_protocol.pdl b/third_party/blink/renderer/core/inspector/browser_protocol.pdl
index aecc7670..46999b9 100644
--- a/third_party/blink/renderer/core/inspector/browser_protocol.pdl
+++ b/third_party/blink/renderer/core/inspector/browser_protocol.pdl
@@ -4716,6 +4716,8 @@
     parameters
       # Id of the node to get highlight object for.
       DOM.NodeId nodeId
+      # Whether to include distance info.
+      optional boolean includeDistance
     returns
       # Highlight data for the node.
       object highlight
diff --git a/third_party/blink/renderer/core/inspector/inspect_tool_distances.html b/third_party/blink/renderer/core/inspector/inspect_tool_distances.html
index eba5dfb..645d6c2 100644
--- a/third_party/blink/renderer/core/inspector/inspect_tool_distances.html
+++ b/third_party/blink/renderer/core/inspector/inspect_tool_distances.html
@@ -13,11 +13,14 @@
  */
 function drawDistances(data)
 {
-  const rect = quadToRect(getVisualQuad(data));
+  const info = data['distanceInfo'];
+  if (!info)
+    return;
+  const rect = quadToRect(getVisualQuad(info));
   const context = window.context;
   context.save();
   context.strokeStyle = '#ccc';
-  for (const box of data['boxes'])
+  for (const box of info['boxes'])
     context.strokeRect(box[0], box[1], box[2], box[3]);
   context.strokeStyle = '#f00';
   context.lineWidth = 1;
diff --git a/third_party/blink/renderer/core/inspector/inspect_tools.cc b/third_party/blink/renderer/core/inspector/inspect_tools.cc
index 483c914..17889b2 100644
--- a/third_party/blink/renderer/core/inspector/inspect_tools.cc
+++ b/third_party/blink/renderer/core/inspector/inspect_tools.cc
@@ -13,7 +13,6 @@
 #include "third_party/blink/renderer/core/css/css_computed_style_declaration.h"
 #include "third_party/blink/renderer/core/display_lock/display_lock_utilities.h"
 #include "third_party/blink/renderer/core/dom/element.h"
-#include "third_party/blink/renderer/core/dom/pseudo_element.h"
 #include "third_party/blink/renderer/core/dom/shadow_root.h"
 #include "third_party/blink/renderer/core/dom/static_node_list.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
@@ -22,7 +21,6 @@
 #include "third_party/blink/renderer/core/html/html_frame_owner_element.h"
 #include "third_party/blink/renderer/core/inspector/inspector_css_agent.h"
 #include "third_party/blink/renderer/core/inspector/inspector_dom_agent.h"
-#include "third_party/blink/renderer/core/inspector/inspector_dom_snapshot_agent.h"
 #include "third_party/blink/renderer/core/layout/hit_test_location.h"
 #include "third_party/blink/renderer/core/layout/layout_view.h"
 #include "third_party/blink/renderer/core/page/chrome_client.h"
@@ -95,40 +93,6 @@
       ignore_pointer_events_none);
 }
 
-std::unique_ptr<protocol::Array<double>> RectForLayoutRect(
-    const LayoutRect& rect) {
-  std::unique_ptr<protocol::Array<double>> result =
-      protocol::Array<double>::create();
-
-  result->addItem(rect.X());
-  result->addItem(rect.Y());
-  result->addItem(rect.Width());
-  result->addItem(rect.Height());
-  return result;
-}
-
-// Returns |layout_object|'s bounding box in document coordinates.
-LayoutRect RectInRootFrame(const LayoutObject* layout_object) {
-  LocalFrameView* local_frame_view = layout_object->GetFrameView();
-  LayoutRect rect_in_absolute(layout_object->AbsoluteBoundingBoxFloatRect());
-  return local_frame_view
-             ? local_frame_view->ConvertToRootFrame(rect_in_absolute)
-             : rect_in_absolute;
-}
-
-LayoutRect TextFragmentRectInRootFrame(
-    const LayoutObject* layout_object,
-    const LayoutText::TextBoxInfo& text_box) {
-  FloatRect local_coords_text_box_rect(text_box.local_rect);
-  LayoutRect absolute_coords_text_box_rect(
-      layout_object->LocalToAbsoluteQuad(local_coords_text_box_rect)
-          .BoundingBox());
-  LocalFrameView* local_frame_view = layout_object->GetFrameView();
-  return local_frame_view ? local_frame_view->ConvertToRootFrame(
-                                absolute_coords_text_box_rect)
-                          : absolute_coords_text_box_rect;
-}
-
 }  // namespace
 
 // SearchingForNodeTool --------------------------------------------------------
@@ -164,7 +128,7 @@
                              node->GetLayoutObject() &&
                              node->GetDocument().GetFrame();
   InspectorHighlight highlight(node, *highlight_config_, contrast_info_,
-                               append_element_info, is_locked_ancestor_);
+                               append_element_info, false, is_locked_ancestor_);
   if (event_target_node_) {
     highlight.AppendEventTargetQuads(event_target_node_.Get(),
                                      *highlight_config_);
@@ -341,7 +305,7 @@
                              node_->GetLayoutObject() &&
                              node_->GetDocument().GetFrame();
   InspectorHighlight highlight(node_.Get(), *highlight_config_, contrast_info_,
-                               append_element_info, is_locked_ancestor_);
+                               append_element_info, false, is_locked_ancestor_);
   std::unique_ptr<protocol::DictionaryValue> highlight_json =
       highlight.AsProtocolValue();
   overlay_->EvaluateInOverlay("drawHighlight", std::move(highlight_json));
@@ -366,6 +330,7 @@
       continue;
     InspectorHighlight highlight(element, *highlight_config_, contrast_info_,
                                  false /* append_element_info */,
+                                 false /* append_distance_info */,
                                  false /* is_locked_ancestor */);
     overlay_->EvaluateInOverlay("drawHighlight", highlight.AsProtocolValue());
   }
@@ -411,6 +376,12 @@
     }
   }
 
+  // If |node| is in a display locked subtree, highlight the highest locked
+  // element instead.
+  if (Node* locked_ancestor =
+          DisplayLockUtilities::HighestLockedExclusiveAncestor(*node))
+    node = locked_ancestor;
+
   // Store values for the highlight.
   hovered_node_ = node;
   return true;
@@ -424,103 +395,11 @@
   Node* node = hovered_node_.Get();
   if (!node)
     return;
-  node->GetDocument().EnsurePaintLocationDataValidForNode(node);
-  LayoutObject* layout_object = node->GetLayoutObject();
-  if (!layout_object)
-    return;
-
-  CSSStyleDeclaration* style =
-      MakeGarbageCollected<CSSComputedStyleDeclaration>(node, true);
-  std::unique_ptr<protocol::DictionaryValue> computed_style =
-      protocol::DictionaryValue::create();
-  for (size_t i = 0; i < style->length(); ++i) {
-    AtomicString name(style->item(i));
-    const CSSValue* value = style->GetPropertyCSSValueInternal(name);
-    if (!value)
-      continue;
-    if (value->IsColorValue()) {
-      Color color = static_cast<const cssvalue::CSSColorValue*>(value)->Value();
-      String hex_color =
-          String::Format("#%02X%02X%02X%02X", color.Red(), color.Green(),
-                         color.Blue(), color.Alpha());
-      computed_style->setString(name, hex_color);
-    } else {
-      computed_style->setString(name, value->CssText());
-    }
-  }
-
-  std::unique_ptr<protocol::DOM::BoxModel> model;
-  InspectorHighlight::GetBoxModel(node, &model, false);
-  boxes_ = protocol::Array<protocol::Array<double>>::create();
-  VisitNode(&(node->GetDocument()));
-  LayoutRect document_rect(node->GetDocument().GetLayoutView()->DocumentRect());
-  LocalFrameView* local_frame_view = node->GetDocument().View();
-  boxes_->addItem(
-      RectForLayoutRect(local_frame_view->ConvertToRootFrame(document_rect)));
-
-  std::unique_ptr<protocol::DictionaryValue> object =
-      protocol::DictionaryValue::create();
-  object->setArray("boxes", boxes_->toValue());
-  object->setArray("content", model->getContent()->toValue());
-  object->setArray("padding", model->getPadding()->toValue());
-  object->setArray("border", model->getBorder()->toValue());
-  object->setObject("style", std::move(computed_style));
-  overlay_->EvaluateInOverlay("drawDistances", std::move(object));
-}
-
-void NearbyDistanceTool::VisitNode(Node* node) {
-  LayoutObject* layout_object = node->GetLayoutObject();
-  if (layout_object)
-    AddLayoutBox(layout_object);
-
-  if (node->IsElementNode()) {
-    Element* element = ToElement(node);
-
-    if (element->GetPseudoId()) {
-      if (layout_object)
-        VisitPseudoLayoutChildren(element->GetPseudoId(), layout_object);
-    } else {
-      for (PseudoId pseudo_id :
-           {kPseudoIdFirstLetter, kPseudoIdBefore, kPseudoIdAfter}) {
-        if (Node* pseudo_node = element->GetPseudoElement(pseudo_id))
-          VisitNode(pseudo_node);
-      }
-    }
-  }
-
-  if (!node->IsContainerNode())
-    return;
-  Node* first_child = InspectorDOMSnapshotAgent::FirstChild(*node, false);
-  for (Node* child = first_child; child;
-       child = InspectorDOMSnapshotAgent::NextSibling(*child, false))
-    VisitNode(child);
-}
-
-void NearbyDistanceTool::VisitPseudoLayoutChildren(
-    PseudoId pseudo_id,
-    LayoutObject* layout_object) {
-  protocol::DOM::PseudoType pseudo_type;
-  if (!InspectorDOMAgent::GetPseudoElementType(pseudo_id, &pseudo_type))
-    return;
-  for (LayoutObject* child = layout_object->SlowFirstChild(); child;
-       child = child->NextSibling()) {
-    if (child->IsAnonymous())
-      AddLayoutBox(child);
-  }
-}
-
-void NearbyDistanceTool::AddLayoutBox(LayoutObject* layout_object) {
-  if (layout_object->IsText()) {
-    LayoutText* layout_text = ToLayoutText(layout_object);
-    for (const auto& text_box : layout_text->GetTextBoxInfo()) {
-      LayoutRect text_rect(
-          TextFragmentRectInRootFrame(layout_object, text_box));
-      boxes_->addItem(RectForLayoutRect(text_rect));
-    }
-  } else {
-    LayoutRect rect(RectInRootFrame(layout_object));
-    boxes_->addItem(RectForLayoutRect(rect));
-  }
+  InspectorHighlight highlight(
+      node, InspectorHighlight::DefaultConfig(),
+      InspectorHighlightContrastInfo(), false /* append_element_info */,
+      true /* append_distance_info */, false /* is_locked_ancestor */);
+  overlay_->EvaluateInOverlay("drawDistances", highlight.AsProtocolValue());
 }
 
 void NearbyDistanceTool::Trace(blink::Visitor* visitor) {
diff --git a/third_party/blink/renderer/core/inspector/inspect_tools.h b/third_party/blink/renderer/core/inspector/inspect_tools.h
index 9f138d8..2bc42c5 100644
--- a/third_party/blink/renderer/core/inspector/inspect_tools.h
+++ b/third_party/blink/renderer/core/inspector/inspect_tools.h
@@ -101,14 +101,9 @@
   bool HandleMouseMove(const WebMouseEvent& event) override;
   bool HandleMouseUp(const WebMouseEvent& event) override;
   void Draw(float scale) override;
-  void VisitNode(Node* node);
-  void VisitPseudoLayoutChildren(PseudoId pseudo_id,
-                                 LayoutObject* layout_object);
-  void AddLayoutBox(LayoutObject* layout_object);
   void Trace(blink::Visitor* visitor) override;
 
   Member<Node> hovered_node_;
-  std::unique_ptr<protocol::Array<protocol::Array<double>>> boxes_;
   DISALLOW_COPY_AND_ASSIGN(NearbyDistanceTool);
 };
 
diff --git a/third_party/blink/renderer/core/inspector/inspector_highlight.cc b/third_party/blink/renderer/core/inspector/inspector_highlight.cc
index 65465a3..09dd603 100644
--- a/third_party/blink/renderer/core/inspector/inspector_highlight.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_highlight.cc
@@ -13,11 +13,14 @@
 #include "third_party/blink/renderer/core/frame/local_frame_view.h"
 #include "third_party/blink/renderer/core/frame/visual_viewport.h"
 #include "third_party/blink/renderer/core/geometry/dom_rect.h"
+#include "third_party/blink/renderer/core/inspector/inspector_dom_agent.h"
+#include "third_party/blink/renderer/core/inspector/inspector_dom_snapshot_agent.h"
 #include "third_party/blink/renderer/core/layout/adjust_for_absolute_zoom.h"
 #include "third_party/blink/renderer/core/layout/layout_box.h"
 #include "third_party/blink/renderer/core/layout/layout_grid.h"
 #include "third_party/blink/renderer/core/layout/layout_inline.h"
 #include "third_party/blink/renderer/core/layout/layout_object.h"
+#include "third_party/blink/renderer/core/layout/layout_view.h"
 #include "third_party/blink/renderer/core/layout/shapes/shape_outside_info.h"
 #include "third_party/blink/renderer/core/page/chrome_client.h"
 #include "third_party/blink/renderer/core/page/page.h"
@@ -394,6 +397,40 @@
   }
 }
 
+std::unique_ptr<protocol::Array<double>> RectForLayoutRect(
+    const LayoutRect& rect) {
+  std::unique_ptr<protocol::Array<double>> result =
+      protocol::Array<double>::create();
+
+  result->addItem(rect.X());
+  result->addItem(rect.Y());
+  result->addItem(rect.Width());
+  result->addItem(rect.Height());
+  return result;
+}
+
+// Returns |layout_object|'s bounding box in document coordinates.
+LayoutRect RectInRootFrame(const LayoutObject* layout_object) {
+  LocalFrameView* local_frame_view = layout_object->GetFrameView();
+  LayoutRect rect_in_absolute(layout_object->AbsoluteBoundingBoxFloatRect());
+  return local_frame_view
+             ? local_frame_view->ConvertToRootFrame(rect_in_absolute)
+             : rect_in_absolute;
+}
+
+LayoutRect TextFragmentRectInRootFrame(
+    const LayoutObject* layout_object,
+    const LayoutText::TextBoxInfo& text_box) {
+  FloatRect local_coords_text_box_rect(text_box.local_rect);
+  LayoutRect absolute_coords_text_box_rect(
+      layout_object->LocalToAbsoluteQuad(local_coords_text_box_rect)
+          .BoundingBox());
+  LocalFrameView* local_frame_view = layout_object->GetFrameView();
+  return local_frame_view ? local_frame_view->ConvertToRootFrame(
+                                absolute_coords_text_box_rect)
+                          : absolute_coords_text_box_rect;
+}
+
 }  // namespace
 
 InspectorHighlight::InspectorHighlight(float scale)
@@ -413,6 +450,7 @@
     const InspectorHighlightConfig& highlight_config,
     const InspectorHighlightContrastInfo& node_contrast,
     bool append_element_info,
+    bool append_distance_info,
     bool is_locked_ancestor)
     : highlight_paths_(protocol::ListValue::create()),
       show_rulers_(highlight_config.show_rulers),
@@ -434,10 +472,104 @@
 
   if (element_info_ && is_locked_ancestor)
     element_info_->setString("isLockedAncestor", "true");
+  if (append_distance_info)
+    AppendDistanceInfo(node);
 }
 
 InspectorHighlight::~InspectorHighlight() = default;
 
+void InspectorHighlight::AppendDistanceInfo(Node* node) {
+  if (!InspectorHighlight::GetBoxModel(node, &model_, false))
+    return;
+  boxes_ = protocol::Array<protocol::Array<double>>::create();
+  computed_style_ = protocol::DictionaryValue::create();
+
+  node->GetDocument().EnsurePaintLocationDataValidForNode(node);
+  LayoutObject* layout_object = node->GetLayoutObject();
+  if (!layout_object)
+    return;
+
+  CSSStyleDeclaration* style =
+      MakeGarbageCollected<CSSComputedStyleDeclaration>(node, true);
+  for (size_t i = 0; i < style->length(); ++i) {
+    AtomicString name(style->item(i));
+    const CSSValue* value = style->GetPropertyCSSValueInternal(name);
+    if (!value)
+      continue;
+    if (value->IsColorValue()) {
+      Color color = static_cast<const cssvalue::CSSColorValue*>(value)->Value();
+      String hex_color =
+          String::Format("#%02X%02X%02X%02X", color.Red(), color.Green(),
+                         color.Blue(), color.Alpha());
+      computed_style_->setString(name, hex_color);
+    } else {
+      computed_style_->setString(name, value->CssText());
+    }
+  }
+
+  VisitAndCollectDistanceInfo(&(node->GetDocument()));
+  LayoutRect document_rect(node->GetDocument().GetLayoutView()->DocumentRect());
+  LocalFrameView* local_frame_view = node->GetDocument().View();
+  boxes_->addItem(
+      RectForLayoutRect(local_frame_view->ConvertToRootFrame(document_rect)));
+}
+
+void InspectorHighlight::VisitAndCollectDistanceInfo(Node* node) {
+  LayoutObject* layout_object = node->GetLayoutObject();
+  if (layout_object)
+    AddLayoutBoxToDistanceInfo(layout_object);
+
+  if (node->IsElementNode()) {
+    Element* element = ToElement(node);
+
+    if (element->GetPseudoId()) {
+      if (layout_object)
+        VisitAndCollectDistanceInfo(element->GetPseudoId(), layout_object);
+    } else {
+      for (PseudoId pseudo_id :
+           {kPseudoIdFirstLetter, kPseudoIdBefore, kPseudoIdAfter}) {
+        if (Node* pseudo_node = element->GetPseudoElement(pseudo_id))
+          VisitAndCollectDistanceInfo(pseudo_node);
+      }
+    }
+  }
+
+  if (!node->IsContainerNode())
+    return;
+  Node* first_child = InspectorDOMSnapshotAgent::FirstChild(*node, false);
+  for (Node* child = first_child; child;
+       child = InspectorDOMSnapshotAgent::NextSibling(*child, false))
+    VisitAndCollectDistanceInfo(child);
+}
+
+void InspectorHighlight::VisitAndCollectDistanceInfo(
+    PseudoId pseudo_id,
+    LayoutObject* layout_object) {
+  protocol::DOM::PseudoType pseudo_type;
+  if (!InspectorDOMAgent::GetPseudoElementType(pseudo_id, &pseudo_type))
+    return;
+  for (LayoutObject* child = layout_object->SlowFirstChild(); child;
+       child = child->NextSibling()) {
+    if (child->IsAnonymous())
+      AddLayoutBoxToDistanceInfo(child);
+  }
+}
+
+void InspectorHighlight::AddLayoutBoxToDistanceInfo(
+    LayoutObject* layout_object) {
+  if (layout_object->IsText()) {
+    LayoutText* layout_text = ToLayoutText(layout_object);
+    for (const auto& text_box : layout_text->GetTextBoxInfo()) {
+      LayoutRect text_rect(
+          TextFragmentRectInRootFrame(layout_object, text_box));
+      boxes_->addItem(RectForLayoutRect(text_rect));
+    }
+  } else {
+    LayoutRect rect(RectInRootFrame(layout_object));
+    boxes_->addItem(RectForLayoutRect(rect));
+  }
+}
+
 void InspectorHighlight::AppendQuad(const FloatQuad& quad,
                                     const Color& fill_color,
                                     const Color& outline_color,
@@ -556,6 +688,16 @@
   object->setValue("paths", highlight_paths_->clone());
   object->setBoolean("showRulers", show_rulers_);
   object->setBoolean("showExtensionLines", show_extension_lines_);
+  if (model_) {
+    std::unique_ptr<protocol::DictionaryValue> distance_info =
+        protocol::DictionaryValue::create();
+    distance_info->setArray("boxes", boxes_->toValue());
+    distance_info->setArray("content", model_->getContent()->toValue());
+    distance_info->setArray("padding", model_->getPadding()->toValue());
+    distance_info->setArray("border", model_->getBorder()->toValue());
+    distance_info->setValue("style", computed_style_->clone());
+    object->setValue("distanceInfo", std::move(distance_info));
+  }
   if (element_info_)
     object->setValue("elementInfo", element_info_->clone());
   if (grid_info_ && grid_info_->size() > 0)
diff --git a/third_party/blink/renderer/core/inspector/inspector_highlight.h b/third_party/blink/renderer/core/inspector/inspector_highlight.h
index 49d29df..5ca5060 100644
--- a/third_party/blink/renderer/core/inspector/inspector_highlight.h
+++ b/third_party/blink/renderer/core/inspector/inspector_highlight.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_INSPECTOR_INSPECTOR_HIGHLIGHT_H_
 
 #include "third_party/blink/renderer/core/core_export.h"
+#include "third_party/blink/renderer/core/dom/pseudo_element.h"
 #include "third_party/blink/renderer/core/inspector/protocol/DOM.h"
 #include "third_party/blink/renderer/platform/geometry/float_quad.h"
 #include "third_party/blink/renderer/platform/geometry/layout_rect.h"
@@ -54,6 +55,7 @@
                      const InspectorHighlightConfig&,
                      const InspectorHighlightContrastInfo&,
                      bool append_element_info,
+                     bool append_distance_info,
                      bool is_locked_ancestor);
   explicit InspectorHighlight(float scale);
   ~InspectorHighlight();
@@ -88,6 +90,16 @@
   void AppendNodeHighlight(Node*, const InspectorHighlightConfig&);
   void AppendPathsForShapeOutside(Node*, const InspectorHighlightConfig&);
 
+  void AppendDistanceInfo(Node* node);
+  void VisitAndCollectDistanceInfo(Node* node);
+  void VisitAndCollectDistanceInfo(PseudoId pseudo_id,
+                                   LayoutObject* layout_object);
+  void AddLayoutBoxToDistanceInfo(LayoutObject* layout_object);
+
+  std::unique_ptr<protocol::Array<protocol::Array<double>>> boxes_;
+  std::unique_ptr<protocol::DictionaryValue> computed_style_;
+  std::unique_ptr<protocol::DOM::BoxModel> model_;
+  std::unique_ptr<protocol::DictionaryValue> distance_info_;
   std::unique_ptr<protocol::DictionaryValue> element_info_;
   std::unique_ptr<protocol::ListValue> highlight_paths_;
   std::unique_ptr<protocol::ListValue> grid_info_;
diff --git a/third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc b/third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc
index ec5a47a..5b3ace02 100644
--- a/third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc
@@ -597,6 +597,7 @@
 
 Response InspectorOverlayAgent::getHighlightObjectForTest(
     int node_id,
+    Maybe<bool> include_distance,
     std::unique_ptr<protocol::DictionaryValue>* result) {
   Node* node = nullptr;
   Response response = dom_agent_->AssertNode(node_id, node);
@@ -612,10 +613,10 @@
     is_locked_ancestor = true;
   }
 
-  InspectorHighlight highlight(node, InspectorHighlight::DefaultConfig(),
-                               InspectorHighlightContrastInfo(),
-                               true /* append_element_info */,
-                               is_locked_ancestor);
+  InspectorHighlight highlight(
+      node, InspectorHighlight::DefaultConfig(),
+      InspectorHighlightContrastInfo(), true /* append_element_info */,
+      include_distance.fromMaybe(false), is_locked_ancestor);
   *result = highlight.AsProtocolValue();
   return Response::OK();
 }
diff --git a/third_party/blink/renderer/core/inspector/inspector_overlay_agent.h b/third_party/blink/renderer/core/inspector/inspector_overlay_agent.h
index 30bcc8c..37e6802 100644
--- a/third_party/blink/renderer/core/inspector/inspector_overlay_agent.h
+++ b/third_party/blink/renderer/core/inspector/inspector_overlay_agent.h
@@ -156,6 +156,7 @@
       protocol::Maybe<protocol::DOM::RGBA> content_outline_color) override;
   protocol::Response getHighlightObjectForTest(
       int node_id,
+      protocol::Maybe<bool> include_distance,
       std::unique_ptr<protocol::DictionaryValue>* highlight) override;
 
   // InspectorBaseAgent overrides.
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc
index b15114d2..e5a38af4 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc
@@ -228,7 +228,65 @@
   builder->ExitBlock();
 }
 
-static bool NeedsShaping(const NGInlineItem& item) {
+// Returns whether this text should break shaping. Even within a box, text runs
+// that have different shaping properties need to break shaping.
+inline bool ShouldBreakShapingBeforeText(const NGInlineItem& item,
+                                         const NGInlineItem& start_item,
+                                         const ComputedStyle& start_style,
+                                         const Font& start_font,
+                                         TextDirection start_direction) {
+  DCHECK_EQ(item.Type(), NGInlineItem::kText);
+  DCHECK(item.Style());
+  const ComputedStyle& style = *item.Style();
+  if (&style != &start_style) {
+    const Font& font = style.GetFont();
+    if (&font != &start_font && font != start_font)
+      return true;
+  }
+
+  // The resolved direction and run segment properties must match to shape
+  // across for HarfBuzzShaper.
+  return item.Direction() != start_direction ||
+         !item.EqualsRunSegment(start_item);
+}
+
+// Returns whether the start of this box should break shaping.
+inline bool ShouldBreakShapingBeforeBox(const NGInlineItem& item,
+                                        const Font& start_font) {
+  DCHECK_EQ(item.Type(), NGInlineItem::kOpenTag);
+  DCHECK(item.Style());
+  const ComputedStyle& style = *item.Style();
+
+  // These properties values must break shaping.
+  // https://drafts.csswg.org/css-text-3/#boundary-shaping
+  if ((style.MayHavePadding() && !style.PaddingStart().IsZero()) ||
+      (style.MayHaveMargin() && !style.MarginStart().IsZero()) ||
+      style.BorderStartWidth() ||
+      style.VerticalAlign() != EVerticalAlign::kBaseline)
+    return true;
+
+  return false;
+}
+
+// Returns whether the end of this box should break shaping.
+inline bool ShouldBreakShapingAfterBox(const NGInlineItem& item,
+                                       const Font& start_font) {
+  DCHECK_EQ(item.Type(), NGInlineItem::kCloseTag);
+  DCHECK(item.Style());
+  const ComputedStyle& style = *item.Style();
+
+  // These properties values must break shaping.
+  // https://drafts.csswg.org/css-text-3/#boundary-shaping
+  if ((style.MayHavePadding() && !style.PaddingEnd().IsZero()) ||
+      (style.MayHaveMargin() && !style.MarginEnd().IsZero()) ||
+      style.BorderEndWidth() ||
+      style.VerticalAlign() != EVerticalAlign::kBaseline)
+    return true;
+
+  return false;
+}
+
+inline bool NeedsShaping(const NGInlineItem& item) {
   return item.Type() == NGInlineItem::kText && !item.TextShapeResult();
 }
 
@@ -611,22 +669,23 @@
       if (item.Type() == NGInlineItem::kText) {
         if (!item.Length())
           continue;
-        // Shape adjacent items together if the font and direction matches to
-        // allow ligatures and kerning to apply.
-        // Also run segment properties must match because NGInlineItem gives
-        // pre-segmented range to HarfBuzzShaper.
-        // TODO(kojii): Figure out the exact conditions under which this
-        // behavior is desirable.
-        if (font != item.Style()->GetFont() || direction != item.Direction() ||
-            !item.EqualsRunSegment(start_item))
+        if (ShouldBreakShapingBeforeText(item, start_item, start_style, font,
+                                         direction)) {
           break;
+        }
         end_offset = item.EndOffset();
         num_text_items++;
-      } else if (item.Type() == NGInlineItem::kOpenTag ||
-                 item.Type() == NGInlineItem::kCloseTag) {
-        // These items are opaque to shaping.
-        // Opaque items cannot have text, such as Object Replacement Characters,
-        // since such characters can affect shaping.
+      } else if (item.Type() == NGInlineItem::kOpenTag) {
+        if (ShouldBreakShapingBeforeBox(item, font)) {
+          break;
+        }
+        // Should not have any characters to be opaque to shaping.
+        DCHECK_EQ(0u, item.Length());
+      } else if (item.Type() == NGInlineItem::kCloseTag) {
+        if (ShouldBreakShapingAfterBox(item, font)) {
+          break;
+        }
+        // Should not have any characters to be opaque to shaping.
         DCHECK_EQ(0u, item.Length());
       } else {
         break;
diff --git a/third_party/blink/renderer/core/layout/ng/list/layout_ng_list_item.cc b/third_party/blink/renderer/core/layout/ng/list/layout_ng_list_item.cc
index 1f89a1e9..a4bb807 100644
--- a/third_party/blink/renderer/core/layout/ng/list/layout_ng_list_item.cc
+++ b/third_party/blink/renderer/core/layout/ng/list/layout_ng_list_item.cc
@@ -170,6 +170,12 @@
 LayoutNGListItem::MarkerType LayoutNGListItem::MarkerText(
     StringBuilder* text,
     MarkerTextFormat format) const {
+  if (IsMarkerImage()) {
+    if (format == kWithSuffix)
+      text->Append(' ');
+    return kStatic;
+  }
+
   const ComputedStyle& style = StyleRef();
   switch (style.ListStyleType()) {
     case EListStyleType::kNone:
diff --git a/third_party/blink/renderer/core/loader/idleness_detector.cc b/third_party/blink/renderer/core/loader/idleness_detector.cc
index af172109..56c3d7ad 100644
--- a/third_party/blink/renderer/core/loader/idleness_detector.cc
+++ b/third_party/blink/renderer/core/loader/idleness_detector.cc
@@ -52,11 +52,6 @@
   network_2_quiet_ = TimeTicks();
   network_0_quiet_ = TimeTicks();
 
-  if (auto* document_resource_coordinator =
-          local_frame_->GetDocument()->GetResourceCoordinator()) {
-    document_resource_coordinator->SetNetworkAlmostIdle(false);
-  }
-
   OnDidLoadResource();
 }
 
@@ -154,7 +149,7 @@
     DCHECK(local_frame_->GetDocument());
     if (auto* document_resource_coordinator =
             local_frame_->GetDocument()->GetResourceCoordinator()) {
-      document_resource_coordinator->SetNetworkAlmostIdle(true);
+      document_resource_coordinator->SetNetworkAlmostIdle();
     }
     local_frame_->GetDocument()->Fetcher()->OnNetworkQuiet();
     if (WebServiceWorkerNetworkProvider* service_worker_network_provider =
diff --git a/third_party/blink/renderer/core/loader/image_loader.cc b/third_party/blink/renderer/core/loader/image_loader.cc
index c324730..1cb2e74 100644
--- a/third_party/blink/renderer/core/loader/image_loader.cc
+++ b/third_party/blink/renderer/core/loader/image_loader.cc
@@ -505,8 +505,8 @@
     // own origin checking logic that may get confused if service workers
     // respond with resources from another origin.
     // https://w3c.github.io/ServiceWorker/#implementer-concerns
-    if (GetElement()->IsHTMLElement() &&
-        ToHTMLElement(GetElement())->IsPluginElement()) {
+    auto* html_element = DynamicTo<HTMLElement>(GetElement());
+    if (html_element && html_element->IsPluginElement()) {
       resource_request.SetSkipServiceWorker(true);
     }
 
diff --git a/third_party/blink/renderer/core/origin_trials/BUILD.gn b/third_party/blink/renderer/core/origin_trials/BUILD.gn
index de2079f..d2d87524 100644
--- a/third_party/blink/renderer/core/origin_trials/BUILD.gn
+++ b/third_party/blink/renderer/core/origin_trials/BUILD.gn
@@ -6,6 +6,7 @@
 
 blink_core_sources("origin_trials") {
   sources = [
+    "navigation_origin_trial_features.cc",
     "origin_trial_context.cc",
     "origin_trial_context.h",
     "origin_trials.h",
diff --git a/third_party/blink/renderer/core/origin_trials/OWNERS b/third_party/blink/renderer/core/origin_trials/OWNERS
index 73686a7..5a9194d2 100644
--- a/third_party/blink/renderer/core/origin_trials/OWNERS
+++ b/third_party/blink/renderer/core/origin_trials/OWNERS
@@ -1 +1,4 @@
 file://third_party/blink/common/origin_trials/OWNERS
+
+per-file navigation_origin_trial_features.cc=set noparent
+per-file navigation_origin_trial_features.cc=file://third_party/blink/SECURITY_OWNERS
diff --git a/third_party/blink/renderer/core/origin_trials/navigation_origin_trial_features.cc b/third_party/blink/renderer/core/origin_trials/navigation_origin_trial_features.cc
new file mode 100644
index 0000000..bed5f86
--- /dev/null
+++ b/third_party/blink/renderer/core/origin_trials/navigation_origin_trial_features.cc
@@ -0,0 +1,27 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// This file provides GetNavigationOriginTrialFeatures which is declared in
+// origin_trials.h. GetNavigationOriginTrialFeatures is defined in this file
+// since changes to it require review from security reviewers, listed in the
+// SECURITY_OWNERS file.
+
+#include "third_party/blink/renderer/core/origin_trials/origin_trials.h"
+
+namespace blink {
+
+namespace origin_trials {
+
+const HashSet<OriginTrialFeature>& GetNavigationOriginTrialFeatures() {
+  DEFINE_THREAD_SAFE_STATIC_LOCAL(
+      HashSet<OriginTrialFeature>, navigation_origin_trial_features,
+      ({// Enable the kOriginTrialsSampleAPINavigation feature as a navigation
+        // feature, for tests.
+        OriginTrialFeature::kOriginTrialsSampleAPINavigation}));
+  return navigation_origin_trial_features;
+}
+
+}  // namespace origin_trials
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc b/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc
index dad0b08..cd76cd0 100644
--- a/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc
+++ b/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc
@@ -85,6 +85,13 @@
   return result;
 }
 
+// Returns whether the given feature can be activated across navigations. Only
+// features reviewed and approved by security reviewers can be activated across
+// navigations.
+bool IsCrossNavigationFeature(OriginTrialFeature feature) {
+  return origin_trials::GetNavigationOriginTrialFeatures().Contains(feature);
+}
+
 }  // namespace
 
 OriginTrialContext::OriginTrialContext(
@@ -154,6 +161,15 @@
 }
 
 // static
+void OriginTrialContext::ActivateNavigationFeaturesFromInitiator(
+    ExecutionContext* context,
+    const Vector<OriginTrialFeature>* features) {
+  if (!features || features->IsEmpty())
+    return;
+  FromOrCreate(context)->ActivateNavigationFeaturesFromInitiator(*features);
+}
+
+// static
 std::unique_ptr<Vector<String>> OriginTrialContext::GetTokens(
     ExecutionContext* execution_context) {
   const OriginTrialContext* context = From(execution_context);
@@ -162,6 +178,28 @@
   return std::make_unique<Vector<String>>(context->tokens_);
 }
 
+// static
+std::unique_ptr<Vector<OriginTrialFeature>>
+OriginTrialContext::GetEnabledNavigationFeatures(
+    ExecutionContext* execution_context) {
+  const OriginTrialContext* context = From(execution_context);
+  return context ? context->GetEnabledNavigationFeatures() : nullptr;
+}
+
+std::unique_ptr<Vector<OriginTrialFeature>>
+OriginTrialContext::GetEnabledNavigationFeatures() const {
+  if (enabled_features_.IsEmpty())
+    return nullptr;
+  std::unique_ptr<Vector<OriginTrialFeature>> result =
+      std::make_unique<Vector<OriginTrialFeature>>();
+  for (const OriginTrialFeature& feature : enabled_features_) {
+    if (IsCrossNavigationFeature(feature)) {
+      result->push_back(feature);
+    }
+  }
+  return result->IsEmpty() ? nullptr : std::move(result);
+}
+
 void OriginTrialContext::AddToken(const String& token) {
   if (token.IsEmpty())
     return;
@@ -191,6 +229,16 @@
   }
 }
 
+void OriginTrialContext::ActivateNavigationFeaturesFromInitiator(
+    const Vector<OriginTrialFeature>& features) {
+  for (const OriginTrialFeature& feature : features) {
+    if (IsCrossNavigationFeature(feature)) {
+      navigation_activated_features_.insert(feature);
+    }
+  }
+  InitializePendingFeatures();
+}
+
 void OriginTrialContext::InitializePendingFeatures() {
   if (!enabled_features_.size())
     return;
@@ -207,11 +255,19 @@
     return;
   ScriptState::Scope scope(script_state);
   for (OriginTrialFeature enabled_feature : enabled_features_) {
-    if (installed_features_.Contains(enabled_feature))
-      continue;
-    InstallPendingOriginTrialFeature(enabled_feature, script_state);
-    installed_features_.insert(enabled_feature);
+    InstallFeature(enabled_feature, script_state);
   }
+  for (OriginTrialFeature enabled_feature : navigation_activated_features_) {
+    InstallFeature(enabled_feature, script_state);
+  }
+}
+
+void OriginTrialContext::InstallFeature(OriginTrialFeature enabled_feature,
+                                        ScriptState* script_state) {
+  if (installed_features_.Contains(enabled_feature))
+    return;
+  InstallPendingOriginTrialFeature(enabled_feature, script_state);
+  installed_features_.insert(enabled_feature);
 }
 
 void OriginTrialContext::AddFeature(OriginTrialFeature feature) {
@@ -243,6 +299,14 @@
   return context->IsFeatureEnabled(feature);
 }
 
+bool OriginTrialContext::IsNavigationFeatureActivated(
+    OriginTrialFeature feature) const {
+  if (!RuntimeEnabledFeatures::OriginTrialsEnabled())
+    return false;
+
+  return navigation_activated_features_.Contains(feature);
+}
+
 bool OriginTrialContext::EnableTrialFromToken(const String& token) {
   DCHECK(!token.IsEmpty());
 
diff --git a/third_party/blink/renderer/core/origin_trials/origin_trial_context.h b/third_party/blink/renderer/core/origin_trials/origin_trial_context.h
index 852e877c..9a6b2b3 100644
--- a/third_party/blink/renderer/core/origin_trials/origin_trial_context.h
+++ b/third_party/blink/renderer/core/origin_trials/origin_trial_context.h
@@ -66,9 +66,28 @@
   // Returns null if no tokens were added to the ExecutionContext.
   static std::unique_ptr<Vector<String>> GetTokens(ExecutionContext*);
 
+  // Returns the navigation trial features that are enabled in the specified
+  // ExecutionContext, that should be forwarded to (and activated in)
+  // ExecutionContexts navigated to from the given ExecutionContext. Returns
+  // null if no such trials were added to the ExecutionContext.
+  static std::unique_ptr<Vector<OriginTrialFeature>>
+  GetEnabledNavigationFeatures(ExecutionContext*);
+
+  // Activates navigation trial features forwarded from the ExecutionContext
+  // that navigated to the specified ExecutionContext. Only features for which
+  // origin_trials::IsCrossNavigationFeature returns true can be activated via
+  // this method. Trials activated via this method will return true from
+  // IsNavigationFeatureActivated, for the specified ExecutionContext.
+  static void ActivateNavigationFeaturesFromInitiator(
+      ExecutionContext*,
+      const Vector<OriginTrialFeature>*);
+
   void AddToken(const String& token);
   void AddTokens(const Vector<String>& tokens);
 
+  void ActivateNavigationFeaturesFromInitiator(
+      const Vector<OriginTrialFeature>& features);
+
   // Forces a given origin-trial-enabled feature to be enabled in this context
   // and immediately adds required bindings to already initialized JS contexts.
   void AddFeature(OriginTrialFeature feature);
@@ -77,6 +96,16 @@
   // execution context.
   bool IsFeatureEnabled(OriginTrialFeature feature) const;
 
+  std::unique_ptr<Vector<OriginTrialFeature>> GetEnabledNavigationFeatures()
+      const;
+
+  // Returns true if the navigation feature is activated in the current
+  // ExecutionContext. Navigation features are features that are enabled in one
+  // ExecutionContext, but whose behavior is activated in ExecutionContexts that
+  // are navigated to from that context. For example, if navigating from context
+  // A to B, a navigation feature is enabled in A, and activated in B.
+  bool IsNavigationFeatureActivated(const OriginTrialFeature feature) const;
+
   // Installs JavaScript bindings on the relevant objects for any features which
   // should be enabled by the current set of trial tokens. This method is called
   // every time a token is added to the document (including when tokens are
@@ -96,9 +125,14 @@
   // the token is valid.
   bool EnableTrialFromToken(const String& token);
 
+  // Installs JavaScript bindings on the relevant objects for the specified
+  // OriginTrialFeature.
+  void InstallFeature(OriginTrialFeature, ScriptState*);
+
   Vector<String> tokens_;
   HashSet<OriginTrialFeature> enabled_features_;
   HashSet<OriginTrialFeature> installed_features_;
+  HashSet<OriginTrialFeature> navigation_activated_features_;
   std::unique_ptr<TrialTokenValidator> trial_token_validator_;
 };
 
diff --git a/third_party/blink/renderer/core/origin_trials/origin_trial_context_test.cc b/third_party/blink/renderer/core/origin_trials/origin_trial_context_test.cc
index be78fc0..28cee35 100644
--- a/third_party/blink/renderer/core/origin_trials/origin_trial_context_test.cc
+++ b/third_party/blink/renderer/core/origin_trials/origin_trial_context_test.cc
@@ -27,6 +27,7 @@
 namespace {
 
 const char kFrobulateTrialName[] = "Frobulate";
+const char kFrobulateNavigationTrialName[] = "FrobulateNavigation";
 const char kFrobulateEnabledOrigin[] = "https://www.example.com";
 const char kFrobulateEnabledOriginUnsecure[] = "http://www.example.com";
 
@@ -99,6 +100,15 @@
     return origin_trial_context_->IsFeatureEnabled(feature);
   }
 
+  std::unique_ptr<Vector<OriginTrialFeature>> GetEnabledNavigationFeatures() {
+    return origin_trial_context_->GetEnabledNavigationFeatures();
+  }
+
+  bool ActivateNavigationFeature(OriginTrialFeature feature) {
+    origin_trial_context_->ActivateNavigationFeaturesFromInitiator({feature});
+    return origin_trial_context_->IsNavigationFeatureActivated(feature);
+  }
+
   void ExpectStatusUniqueMetric(OriginTrialTokenStatus status, int count) {
     histogram_tester_->ExpectUniqueSample(kResultHistogram,
                                           static_cast<int>(status), count);
@@ -137,6 +147,10 @@
 
   // Status metric should be updated.
   ExpectStatusUniqueMetric(OriginTrialTokenStatus::kSuccess, 1);
+
+  // kOriginTrialsSampleAPI is not a navigation feature, so shouldn't be
+  // included in GetEnabledNavigationFeatures().
+  EXPECT_EQ(nullptr, GetEnabledNavigationFeatures());
 }
 
 // ... but if the browser says it's invalid for any reason, that's enough to
@@ -252,4 +266,25 @@
   EXPECT_EQ(mojom::FeaturePolicyFeature::kFrobulate, result[0].feature);
 }
 
+TEST_F(OriginTrialContextTest, GetEnabledNavigationFeatures) {
+  TokenValidator()->SetResponse(OriginTrialTokenStatus::kSuccess,
+                                kFrobulateNavigationTrialName);
+  EXPECT_TRUE(
+      IsFeatureEnabled(kFrobulateEnabledOrigin,
+                       OriginTrialFeature::kOriginTrialsSampleAPINavigation));
+
+  auto enabled_navigation_features = GetEnabledNavigationFeatures();
+  ASSERT_NE(nullptr, enabled_navigation_features.get());
+  EXPECT_EQ(WTF::Vector<OriginTrialFeature>(
+                {OriginTrialFeature::kOriginTrialsSampleAPINavigation}),
+            *enabled_navigation_features.get());
+}
+
+TEST_F(OriginTrialContextTest, ActivateNavigationFeature) {
+  EXPECT_TRUE(ActivateNavigationFeature(
+      OriginTrialFeature::kOriginTrialsSampleAPINavigation));
+  EXPECT_FALSE(
+      ActivateNavigationFeature(OriginTrialFeature::kOriginTrialsSampleAPI));
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/origin_trials/origin_trials.h b/third_party/blink/renderer/core/origin_trials/origin_trials.h
index 65524c9..9f36b774 100644
--- a/third_party/blink/renderer/core/origin_trials/origin_trials.h
+++ b/third_party/blink/renderer/core/origin_trials/origin_trials.h
@@ -9,6 +9,7 @@
 
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
+#include "third_party/blink/renderer/platform/wtf/hash_set.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 #include "third_party/blink/renderer/platform/wtf/vector.h"
 
@@ -33,6 +34,8 @@
 
 bool FeatureEnabledForOS(OriginTrialFeature feature);
 
+const HashSet<OriginTrialFeature>& GetNavigationOriginTrialFeatures();
+
 }  // namespace origin_trials
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/page/context_menu_controller.cc b/third_party/blink/renderer/core/page/context_menu_controller.cc
index 3c8d095..8667c29 100644
--- a/third_party/blink/renderer/core/page/context_menu_controller.cc
+++ b/third_party/blink/renderer/core/page/context_menu_controller.cc
@@ -207,8 +207,8 @@
   // all else.
   data.link_url = result.AbsoluteLinkURL();
 
-  if (result.InnerNode()->IsHTMLElement()) {
-    HTMLElement* html_element = ToHTMLElement(result.InnerNode());
+  auto* html_element = DynamicTo<HTMLElement>(result.InnerNode());
+  if (html_element) {
     if (!html_element->title().IsEmpty()) {
       data.title_text = html_element->title();
     } else {
diff --git a/third_party/blink/renderer/core/page/drag_controller.cc b/third_party/blink/renderer/core/page/drag_controller.cc
index 46c7b599..5f2097a 100644
--- a/third_party/blink/renderer/core/page/drag_controller.cc
+++ b/third_party/blink/renderer/core/page/drag_controller.cc
@@ -801,8 +801,8 @@
     return true;
 
   for (Node& ancestor_node : NodeTraversal::InclusiveAncestorsOf(node)) {
-    if (ancestor_node.IsHTMLElement() &&
-        ToHTMLElement(&ancestor_node)->draggable())
+    auto* html_element = DynamicTo<HTMLElement>(ancestor_node);
+    if (html_element && html_element->draggable())
       return false;
   }
 
diff --git a/third_party/blink/renderer/core/page/focus_controller.cc b/third_party/blink/renderer/core/page/focus_controller.cc
index 8e8348d..856562e 100644
--- a/third_party/blink/renderer/core/page/focus_controller.cc
+++ b/third_party/blink/renderer/core/page/focus_controller.cc
@@ -413,8 +413,8 @@
 }
 
 inline bool HasCustomFocusLogic(const Element& element) {
-  return element.IsHTMLElement() &&
-         ToHTMLElement(element).HasCustomFocusLogic();
+  auto* html_element = DynamicTo<HTMLElement>(element);
+  return html_element && html_element->HasCustomFocusLogic();
 }
 
 inline bool IsShadowHostWithoutCustomFocusLogic(const Element& element) {
@@ -1123,15 +1123,16 @@
   // Will nvestigate further for a proper solution later.
   static const int kFocusTraversalThreshold = 50;
   element->GetDocument().UpdateStyleAndLayout();
-  if (!element->IsHTMLElement())
+  auto* html_element = DynamicTo<HTMLElement>(element);
+  if (!html_element)
     return nullptr;
 
   if (!element->IsFormControlElement() &&
-      !ToHTMLElement(element)->isContentEditableForBinding())
+      !html_element->isContentEditableForBinding())
     return nullptr;
 
   HTMLFormElement* form_owner = nullptr;
-  if (ToHTMLElement(element)->isContentEditableForBinding())
+  if (html_element->isContentEditableForBinding())
     form_owner = Traversal<HTMLFormElement>::FirstAncestor(*element);
   else
     form_owner = ToHTMLFormControlElement(element)->formOwner();
@@ -1146,9 +1147,10 @@
        next_element =
            FindFocusableElement(focus_type, *next_element, owner_map),
        ++traversal) {
-    if (!next_element->IsHTMLElement())
+    auto* next_html_element = DynamicTo<HTMLElement>(next_element);
+    if (!next_html_element)
       continue;
-    if (ToHTMLElement(next_element)->isContentEditableForBinding() &&
+    if (next_html_element->isContentEditableForBinding() &&
         next_element->IsDescendantOf(form_owner))
       return next_element;
     if (!next_element->IsFormControlElement())
diff --git a/third_party/blink/renderer/core/paint/paint_layer_painter_test.cc b/third_party/blink/renderer/core/paint/paint_layer_painter_test.cc
index 71bd564..80dcd81 100644
--- a/third_party/blink/renderer/core/paint/paint_layer_painter_test.cc
+++ b/third_party/blink/renderer/core/paint/paint_layer_painter_test.cc
@@ -139,7 +139,7 @@
 
   check_chunks();
 
-  ToHTMLElement(content1.GetNode())
+  To<HTMLElement>(content1.GetNode())
       ->setAttribute(html_names::kStyleAttr,
                      "position: absolute; width: 100px; height: 100px; "
                      "background-color: green");
@@ -303,7 +303,7 @@
                           IsSameId(&container2, kBackgroundType),
                           IsSameId(&content2, kBackgroundType)));
 
-  ToHTMLElement(GetElementById("content1"))
+  To<HTMLElement>(GetElementById("content1"))
       ->setAttribute(html_names::kStyleAttr,
                      "position: absolute; width: 100px; height: 100px; "
                      "background-color: green");
@@ -458,7 +458,7 @@
   )HTML");
   LayoutObject& outline_div =
       *GetDocument().getElementById("outline")->GetLayoutObject();
-  ToHTMLElement(outline_div.GetNode())
+  To<HTMLElement>(outline_div.GetNode())
       ->setAttribute(html_names::kStyleAttr, style_without_outline);
   UpdateAllLifecyclePhasesForTest();
 
@@ -479,7 +479,7 @@
 
   // Outline on the self-painting-layer node itself doesn't affect
   // PaintPhaseDescendantOutlines.
-  ToHTMLElement(self_painting_layer_object.GetNode())
+  To<HTMLElement>(self_painting_layer_object.GetNode())
       ->setAttribute(html_names::kStyleAttr,
                      "position: absolute; outline: 1px solid green");
   UpdateAllLifecyclePhasesForTest();
@@ -491,7 +491,7 @@
 
   // needsPaintPhaseDescendantOutlines should be set when any descendant on the
   // same layer has outline.
-  ToHTMLElement(outline_div.GetNode())
+  To<HTMLElement>(outline_div.GetNode())
       ->setAttribute(html_names::kStyleAttr, style_with_outline);
   GetDocument().View()->UpdateAllLifecyclePhasesExceptPaint();
   EXPECT_TRUE(self_painting_layer.NeedsPaintPhaseDescendantOutlines());
@@ -503,7 +503,7 @@
 
   // needsPaintPhaseDescendantOutlines should be reset when no outline is
   // actually painted.
-  ToHTMLElement(outline_div.GetNode())
+  To<HTMLElement>(outline_div.GetNode())
       ->setAttribute(html_names::kStyleAttr, style_without_outline);
   UpdateAllLifecyclePhasesForTest();
   EXPECT_TRUE(self_painting_layer.NeedsPaintPhaseDescendantOutlines());
@@ -525,7 +525,7 @@
   )HTML");
   LayoutObject& float_div =
       *GetDocument().getElementById("float")->GetLayoutObject();
-  ToHTMLElement(float_div.GetNode())
+  To<HTMLElement>(float_div.GetNode())
       ->setAttribute(html_names::kStyleAttr, style_without_float);
   UpdateAllLifecyclePhasesForTest();
 
@@ -546,7 +546,7 @@
 
   // needsPaintPhaseFloat should be set when any descendant on the same layer
   // has float.
-  ToHTMLElement(float_div.GetNode())
+  To<HTMLElement>(float_div.GetNode())
       ->setAttribute(html_names::kStyleAttr, style_with_float);
   GetDocument().View()->UpdateAllLifecyclePhasesExceptPaint();
   EXPECT_TRUE(self_painting_layer.NeedsPaintPhaseFloat());
@@ -558,7 +558,7 @@
 
   // needsPaintPhaseFloat should be reset when there is no float actually
   // painted.
-  ToHTMLElement(float_div.GetNode())
+  To<HTMLElement>(float_div.GetNode())
       ->setAttribute(html_names::kStyleAttr, style_without_float);
   UpdateAllLifecyclePhasesForTest();
   EXPECT_TRUE(self_painting_layer.NeedsPaintPhaseFloat());
@@ -627,7 +627,7 @@
   )HTML");
   LayoutObject& background_div =
       *GetDocument().getElementById("background")->GetLayoutObject();
-  ToHTMLElement(background_div.GetNode())
+  To<HTMLElement>(background_div.GetNode())
       ->setAttribute(html_names::kStyleAttr, style_without_background);
   UpdateAllLifecyclePhasesForTest();
 
@@ -649,7 +649,7 @@
 
   // Background on the self-painting-layer node itself doesn't affect
   // PaintPhaseDescendantBlockBackgrounds.
-  ToHTMLElement(self_painting_layer_object.GetNode())
+  To<HTMLElement>(self_painting_layer_object.GetNode())
       ->setAttribute(html_names::kStyleAttr,
                      "position: absolute; background: green");
   UpdateAllLifecyclePhasesForTest();
@@ -662,7 +662,7 @@
 
   // needsPaintPhaseDescendantBlockBackgrounds should be set when any descendant
   // on the same layer has Background.
-  ToHTMLElement(background_div.GetNode())
+  To<HTMLElement>(background_div.GetNode())
       ->setAttribute(html_names::kStyleAttr, style_with_background);
   GetDocument().View()->UpdateAllLifecyclePhasesExceptPaint();
   EXPECT_TRUE(self_painting_layer.NeedsPaintPhaseDescendantBlockBackgrounds());
@@ -675,7 +675,7 @@
 
   // needsPaintPhaseDescendantBlockBackgrounds should be reset when no outline
   // is actually painted.
-  ToHTMLElement(background_div.GetNode())
+  To<HTMLElement>(background_div.GetNode())
       ->setAttribute(html_names::kStyleAttr, style_without_background);
   UpdateAllLifecyclePhasesForTest();
   EXPECT_TRUE(self_painting_layer.NeedsPaintPhaseDescendantBlockBackgrounds());
@@ -704,7 +704,7 @@
   EXPECT_TRUE(html_layer.NeedsPaintPhaseFloat());
   EXPECT_TRUE(html_layer.NeedsPaintPhaseDescendantBlockBackgrounds());
 
-  ToHTMLElement(layer_div.GetNode())
+  To<HTMLElement>(layer_div.GetNode())
       ->setAttribute(html_names::kStyleAttr, "position: relative");
   UpdateAllLifecyclePhasesForTest();
   ASSERT_TRUE(layer_div.HasLayer());
@@ -739,7 +739,7 @@
   EXPECT_TRUE(html_layer.NeedsPaintPhaseDescendantOutlines());
   EXPECT_TRUE(html_layer.NeedsPaintPhaseDescendantBlockBackgrounds());
 
-  ToHTMLElement(layer_div.GetNode())
+  To<HTMLElement>(layer_div.GetNode())
       ->setAttribute(
           html_names::kStyleAttr,
           "width: 100px; height: 100px; overflow: hidden; position: relative");
@@ -779,7 +779,7 @@
   EXPECT_FALSE(html_layer.NeedsPaintPhaseDescendantOutlines());
   EXPECT_FALSE(html_layer.NeedsPaintPhaseDescendantBlockBackgrounds());
 
-  ToHTMLElement(layer_div.GetNode())
+  To<HTMLElement>(layer_div.GetNode())
       ->setAttribute(html_names::kStyleAttr,
                      "width: 100px; height: 100px; overflow: hidden");
   UpdateAllLifecyclePhasesForTest();
@@ -826,7 +826,7 @@
   EXPECT_TRUE(layer.IsSelfPaintingLayer());
   EXPECT_FALSE(layer.NeedsPaintPhaseDescendantBlockBackgrounds());
 
-  ToHTMLElement(table.GetNode())
+  To<HTMLElement>(table.GetNode())
       ->setAttribute(html_names::kStyleAttr,
                      "position: relative; border-collapse: collapse");
   UpdateAllLifecyclePhasesForTest();
diff --git a/third_party/blink/renderer/devtools/front_end/elements_test_runner/ElementsTestRunner.js b/third_party/blink/renderer/devtools/front_end/elements_test_runner/ElementsTestRunner.js
index fdf322c..019455d 100644
--- a/third_party/blink/renderer/devtools/front_end/elements_test_runner/ElementsTestRunner.js
+++ b/third_party/blink/renderer/devtools/front_end/elements_test_runner/ElementsTestRunner.js
@@ -1117,6 +1117,23 @@
   }
 };
 
+ElementsTestRunner.dumpInspectorDistanceJSON = function(idValue, callback) {
+  ElementsTestRunner.nodeWithId(idValue, nodeResolved);
+
+  async function nodeResolved(node) {
+    const result = await TestRunner.OverlayAgent.getHighlightObjectForTest(node.id, true);
+    const info = result['distanceInfo'];
+    if (!info) {
+      TestRunner.addResult(`${idValue}: No distance info`);
+    } else {
+      if (info['style'])
+        info['style'] = '<style data>';
+      TestRunner.addResult(idValue + JSON.stringify(info, null, 2));
+    }
+    callback();
+  }
+};
+
 ElementsTestRunner.waitForAnimationAdded = function(callback) {
   TestRunner.addSniffer(Animation.AnimationTimeline.prototype, '_addAnimationGroup', callback);
 };
diff --git a/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc b/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc
index 2996fd78..4a19b67 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc
@@ -2511,7 +2511,7 @@
     ExceptionState exception_state(v8::Isolate::GetCurrent(),
                                    ExceptionState::kExecutionContext, nullptr,
                                    nullptr);
-    ToHTMLElement(GetNode())->setInnerText(string, exception_state);
+    To<HTMLElement>(GetNode())->setInnerText(string, exception_state);
     if (exception_state.HadException()) {
       exception_state.ClearException();
       return false;
diff --git a/third_party/blink/renderer/modules/accessibility/ax_node_object.cc b/third_party/blink/renderer/modules/accessibility/ax_node_object.cc
index cf78117..46e820a 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_node_object.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_node_object.cc
@@ -371,7 +371,8 @@
                                    ax::mojom::Role current_role,
                                    HTMLElement* current_element) {
   Node* parent_node = parent->GetNode();
-  if (!parent_node || !parent_node->IsHTMLElement())
+  auto* parent_html_element = DynamicTo<HTMLElement>(parent_node);
+  if (!parent_html_element)
     return false;
 
   if (current_role == ax::mojom::Role::kListItem)
@@ -388,7 +389,7 @@
   if (IsHTMLTableCellElement(*current_element))
     return IsHTMLTableRowElement(*parent_node);
   if (IsHTMLTableRowElement(*current_element))
-    return IsHTMLTableSectionElement(ToHTMLElement(*parent_node));
+    return IsHTMLTableSectionElement(parent_html_element);
 
   // In case of ListboxRole and its child, ListBoxOptionRole, inheritance of
   // presentation role is handled in AXListBoxOption because ListBoxOption Role
@@ -417,9 +418,7 @@
   if (!parent)
     return nullptr;
 
-  HTMLElement* element = nullptr;
-  if (GetNode() && GetNode()->IsHTMLElement())
-    element = ToHTMLElement(GetNode());
+  auto* element = DynamicTo<HTMLElement>(GetNode());
   if (!parent->HasInheritedPresentationalRole())
     return nullptr;
 
@@ -1279,26 +1278,26 @@
     }
   }
 
-  if (!node->IsHTMLElement())
+  auto* element = DynamicTo<HTMLElement>(node);
+  if (!element)
     return 0;
 
-  HTMLElement& element = ToHTMLElement(*node);
-  if (element.HasTagName(kH1Tag))
+  if (element->HasTagName(kH1Tag))
     return 1;
 
-  if (element.HasTagName(kH2Tag))
+  if (element->HasTagName(kH2Tag))
     return 2;
 
-  if (element.HasTagName(kH3Tag))
+  if (element->HasTagName(kH3Tag))
     return 3;
 
-  if (element.HasTagName(kH4Tag))
+  if (element->HasTagName(kH4Tag))
     return 4;
 
-  if (element.HasTagName(kH5Tag))
+  if (element->HasTagName(kH5Tag))
     return 5;
 
-  if (element.HasTagName(kH6Tag))
+  if (element->HasTagName(kH6Tag))
     return 6;
 
   if (RoleValue() == ax::mojom::Role::kHeading)
@@ -2187,9 +2186,7 @@
   // Based on
   // http://rawgit.com/w3c/aria/master/html-aam/html-aam.html#accessible-name-and-description-calculation
   // 5.1/5.5 Text inputs, Other labelable Elements
-  HTMLElement* html_element = nullptr;
-  if (GetNode()->IsHTMLElement())
-    html_element = ToHTMLElement(GetNode());
+  auto* html_element = DynamicTo<HTMLElement>(GetNode());
   if (html_element && html_element->IsLabelable()) {
     if (html_element->labels() && html_element->labels()->length() > 0)
       return true;
@@ -2827,10 +2824,7 @@
 
   // 5.1/5.5 Text inputs, Other labelable Elements
   // If you change this logic, update AXNodeObject::nameFromLabelElement, too.
-  HTMLElement* html_element = nullptr;
-  if (GetNode()->IsHTMLElement())
-    html_element = ToHTMLElement(GetNode());
-
+  auto* html_element = DynamicTo<HTMLElement>(GetNode());
   if (html_element && html_element->IsLabelable()) {
     name_from = ax::mojom::NameFrom::kRelatedElement;
     if (name_sources) {
diff --git a/third_party/blink/renderer/modules/credentialmanager/credential_creation_options.idl b/third_party/blink/renderer/modules/credentialmanager/credential_creation_options.idl
index ec630b6..ecac691 100644
--- a/third_party/blink/renderer/modules/credentialmanager/credential_creation_options.idl
+++ b/third_party/blink/renderer/modules/credentialmanager/credential_creation_options.idl
@@ -12,4 +12,5 @@
     PasswordCredentialInit password;
     FederatedCredentialInit federated;
     PublicKeyCredentialCreationOptions publicKey;
+    AbortSignal signal;
 };
diff --git a/third_party/blink/renderer/modules/credentialmanager/credential_manager_type_converters.cc b/third_party/blink/renderer/modules/credentialmanager/credential_manager_type_converters.cc
index dd43994..54e44c5 100644
--- a/third_party/blink/renderer/modules/credentialmanager/credential_manager_type_converters.cc
+++ b/third_party/blink/renderer/modules/credentialmanager/credential_manager_type_converters.cc
@@ -117,6 +117,8 @@
   switch (status) {
     case blink::mojom::blink::AuthenticatorStatus::NOT_ALLOWED_ERROR:
       return CredentialManagerError::NOT_ALLOWED;
+    case blink::mojom::blink::AuthenticatorStatus::ABORT_ERROR:
+      return CredentialManagerError::ABORT;
     case blink::mojom::blink::AuthenticatorStatus::UNKNOWN_ERROR:
       return CredentialManagerError::UNKNOWN;
     case blink::mojom::blink::AuthenticatorStatus::PENDING_REQUEST:
diff --git a/third_party/blink/renderer/modules/credentialmanager/credential_request_options.idl b/third_party/blink/renderer/modules/credentialmanager/credential_request_options.idl
index d413c468..7f501f6 100644
--- a/third_party/blink/renderer/modules/credentialmanager/credential_request_options.idl
+++ b/third_party/blink/renderer/modules/credentialmanager/credential_request_options.idl
@@ -17,4 +17,5 @@
     CredentialMediationRequirement mediation = "optional";
 
     PublicKeyCredentialRequestOptions publicKey;
+    AbortSignal signal;
 };
diff --git a/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc b/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc
index 7539ba77..53534ce 100644
--- a/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc
+++ b/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc
@@ -11,6 +11,7 @@
 #include "third_party/blink/public/mojom/credentialmanager/credential_manager.mojom-blink.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
+#include "third_party/blink/renderer/core/dom/abort_signal.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/dom/dom_exception.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
@@ -278,6 +279,8 @@
                                   "requirement cannot be fulfilled by "
                                   "this device unless the device is secured "
                                   "with a screen lock.");
+    case CredentialManagerError::ABORT:
+      return DOMException::Create(DOMExceptionCode::kAbortError);
     case CredentialManagerError::UNKNOWN:
       return DOMException::Create(DOMExceptionCode::kNotReadableError,
                                   "An unknown error occurred while talking "
@@ -289,6 +292,16 @@
   return nullptr;
 }
 
+// Abort an ongoing PublicKeyCredential create() or get() operation.
+void Abort(ScriptState* script_state) {
+  if (!script_state->ContextIsValid())
+    return;
+
+  auto* authenticator =
+      CredentialManagerProxy::From(script_state)->Authenticator();
+  authenticator->Cancel();
+}
+
 void OnStoreComplete(std::unique_ptr<ScopedPromiseResolver> scoped_resolver,
                      RequiredOriginType required_origin_type) {
   auto* resolver = scoped_resolver->Release();
@@ -495,6 +508,15 @@
       }
     }
 
+    if (options->hasSignal()) {
+      if (options->signal()->aborted()) {
+        resolver->Reject(DOMException::Create(DOMExceptionCode::kAbortError));
+        return promise;
+      }
+      options->signal()->AddAlgorithm(
+          WTF::Bind(&Abort, WTF::Passed(WrapPersistent(script_state))));
+    }
+
     auto mojo_options =
         MojoPublicKeyCredentialRequestOptions::From(options->publicKey());
     if (mojo_options) {
@@ -667,6 +689,15 @@
       }
     }
 
+    if (options->hasSignal()) {
+      if (options->signal()->aborted()) {
+        resolver->Reject(DOMException::Create(DOMExceptionCode::kAbortError));
+        return promise;
+      }
+      options->signal()->AddAlgorithm(
+          WTF::Bind(&Abort, WTF::Passed(WrapPersistent(script_state))));
+    }
+
     auto mojo_options =
         MojoPublicKeyCredentialCreationOptions::From(options->publicKey());
     if (!mojo_options) {
diff --git a/third_party/blink/renderer/modules/peerconnection/adapters/p2p_quic_transport_impl.cc b/third_party/blink/renderer/modules/peerconnection/adapters/p2p_quic_transport_impl.cc
index 4f37992..ef84281 100644
--- a/third_party/blink/renderer/modules/peerconnection/adapters/p2p_quic_transport_impl.cc
+++ b/third_party/blink/renderer/modules/peerconnection/adapters/p2p_quic_transport_impl.cc
@@ -163,7 +163,8 @@
       quic::QuicConnectionId(connection_id_bytes, sizeof(connection_id_bytes));
   return std::make_unique<quic::QuicConnection>(
       dummy_connection_id, dummy_address, helper, alarm_factory, packet_writer,
-      /* owns_writer */ true, perspective, quic::CurrentSupportedVersions());
+      /* owns_writer */ true, perspective,
+      quic::ParsedQuicVersionVector{quic::CurrentSupportedVersions()[0]});
 }
 
 // A dummy helper for a server crypto stream that accepts all client hellos
diff --git a/third_party/blink/renderer/modules/sms/sms_receiver.cc b/third_party/blink/renderer/modules/sms/sms_receiver.cc
index 8484280..87ff16f 100644
--- a/third_party/blink/renderer/modules/sms/sms_receiver.cc
+++ b/third_party/blink/renderer/modules/sms/sms_receiver.cc
@@ -8,7 +8,9 @@
 
 #include "services/service_manager/public/cpp/interface_provider.h"
 #include "third_party/blink/public/mojom/sms/sms_manager.mojom-blink.h"
+#include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
 #include "third_party/blink/renderer/core/dom/dom_exception.h"
+#include "third_party/blink/renderer/core/frame/local_frame.h"
 #include "third_party/blink/renderer/modules/sms/sms.h"
 #include "third_party/blink/renderer/modules/sms/sms_receiver_options.h"
 #include "third_party/blink/renderer/platform/bindings/name_client.h"
@@ -70,6 +72,14 @@
   ExecutionContext* context = ExecutionContext::From(script_state);
   DCHECK(context->IsContextThread());
 
+  LocalFrame* frame = GetFrame();
+  if (!frame->IsMainFrame()) {
+    return ScriptPromise::RejectWithDOMException(
+        script_state,
+        DOMException::Create(DOMExceptionCode::kNotAllowedError,
+                             "Must be in top-level browsing context."));
+  }
+
   StartMonitoring();
 
   return ScriptPromise::CastUndefined(script_state);
diff --git a/third_party/blink/renderer/platform/instrumentation/resource_coordinator/document_resource_coordinator.cc b/third_party/blink/renderer/platform/instrumentation/resource_coordinator/document_resource_coordinator.cc
index b60f5a03..fbd7ae0 100644
--- a/third_party/blink/renderer/platform/instrumentation/resource_coordinator/document_resource_coordinator.cc
+++ b/third_party/blink/renderer/platform/instrumentation/resource_coordinator/document_resource_coordinator.cc
@@ -37,8 +37,8 @@
 
 DocumentResourceCoordinator::~DocumentResourceCoordinator() = default;
 
-void DocumentResourceCoordinator::SetNetworkAlmostIdle(bool idle) {
-  service_->SetNetworkAlmostIdle(idle);
+void DocumentResourceCoordinator::SetNetworkAlmostIdle() {
+  service_->SetNetworkAlmostIdle();
 }
 
 void DocumentResourceCoordinator::SetLifecycleState(
diff --git a/third_party/blink/renderer/platform/instrumentation/resource_coordinator/document_resource_coordinator.h b/third_party/blink/renderer/platform/instrumentation/resource_coordinator/document_resource_coordinator.h
index 659a799..e193e35 100644
--- a/third_party/blink/renderer/platform/instrumentation/resource_coordinator/document_resource_coordinator.h
+++ b/third_party/blink/renderer/platform/instrumentation/resource_coordinator/document_resource_coordinator.h
@@ -27,7 +27,7 @@
       service_manager::InterfaceProvider*);
   ~DocumentResourceCoordinator();
 
-  void SetNetworkAlmostIdle(bool);
+  void SetNetworkAlmostIdle();
   void SetLifecycleState(resource_coordinator::mojom::LifecycleState);
   void SetHasNonEmptyBeforeUnload(bool has_nonempty_beforeunload);
   void SetInterventionPolicy(
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index 9eaac54..c19dd878 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -1011,6 +1011,10 @@
       origin_trial_os: ["invalid"],
     },
     {
+      name: "OriginTrialsSampleAPINavigation",
+      origin_trial_feature_name: "FrobulateNavigation",
+    },
+    {
       name: "OutOfBlinkCors",
     },
     {
diff --git a/third_party/blink/tools/blinkpy/web_tests/run_web_tests.py b/third_party/blink/tools/blinkpy/web_tests/run_web_tests.py
index 5bd63d54..f0a15139 100644
--- a/third_party/blink/tools/blinkpy/web_tests/run_web_tests.py
+++ b/third_party/blink/tools/blinkpy/web_tests/run_web_tests.py
@@ -46,6 +46,13 @@
 def main(argv, stderr):
     options, args = parse_args(argv)
 
+    # Disable LayoutNG unless explicitly enabled during transition period to
+    # avoid having to unnecessarily update test expectations every time the flag
+    # is flipped and to allow us to update expectations one bot at a time.
+    # TODO(eae): Remove once LayoutNG launches. https://crbug.com/961437
+    if not '--enable-blink-features=LayoutNG' in options.additional_driver_flag:
+        options.additional_driver_flag.append('--disable-blink-features=LayoutNG')
+
     if options.platform and 'test' in options.platform and not 'browser_test' in options.platform:
         # It's a bit lame to import mocks into real code, but this allows the user
         # to run tests against the test platform interactively, which is useful for
diff --git a/third_party/blink/web_tests/FlagExpectations/enable-blink-features=LayoutNG b/third_party/blink/web_tests/FlagExpectations/enable-blink-features=LayoutNG
index 031f8ee..d6b619f 100644
--- a/third_party/blink/web_tests/FlagExpectations/enable-blink-features=LayoutNG
+++ b/third_party/blink/web_tests/FlagExpectations/enable-blink-features=LayoutNG
@@ -102,9 +102,9 @@
 crbug.com/591099 external/wpt/css/css-shapes/shape-outside/supported-shapes/polygon/shape-outside-polygon-017.html [ Pass ]
 crbug.com/845902 external/wpt/css/css-sizing/whitespace-and-break.html [ Pass ]
 crbug.com/591099 external/wpt/css/css-text/boundary-shaping/boundary-shaping-001.html [ Pass ]
-crbug.com/591099 external/wpt/css/css-text/boundary-shaping/boundary-shaping-002.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-text/boundary-shaping/boundary-shaping-006.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-text/boundary-shaping/boundary-shaping-007.html [ Failure ]
+crbug.com/591099 external/wpt/css/css-text/boundary-shaping/boundary-shaping-003.html [ Pass ]
+crbug.com/591099 external/wpt/css/css-text/boundary-shaping/boundary-shaping-004.html [ Pass ]
+crbug.com/591099 external/wpt/css/css-text/boundary-shaping/boundary-shaping-005.html [ Pass ]
 crbug.com/591099 external/wpt/css/css-text/boundary-shaping/boundary-shaping-009.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-text/boundary-shaping/boundary-shaping-010.html [ Pass ]
 crbug.com/591099 external/wpt/css/css-text/hyphens/hyphens-out-of-flow-002.html [ Failure ]
@@ -310,6 +310,7 @@
 crbug.com/889721 fast/inline/outline-continuations.html [ Failure ]
 crbug.com/591099 fast/multicol/border-radius-clipped-layer.html [ Pass ]
 crbug.com/591099 fast/peerconnection/RTCPeerConnection-many.html [ Pass ]
+crbug.com/591099 fast/scrolling/unscrollable-layer-subpixel-size-with-negative-overflow.html [ Failure Pass ]
 crbug.com/899902 fast/text/ellipsis-with-self-painting-layer.html [ Pass ]
 crbug.com/591099 fast/text/emoji-vertical-origin-visual.html [ Failure ]
 crbug.com/591099 fast/text/font-format-support-color-cff2-vertical.html [ Failure ]
diff --git a/third_party/blink/web_tests/MSANExpectations b/third_party/blink/web_tests/MSANExpectations
index 26e643b0..71a86f2 100644
--- a/third_party/blink/web_tests/MSANExpectations
+++ b/third_party/blink/web_tests/MSANExpectations
@@ -72,8 +72,6 @@
 crbug.com/729136 [ Linux ] http/tests/devtools/elements/styles-4/styles-should-not-force-sync-style-recalc.js [ Timeout ]
 crbug.com/729136 [ Linux ] webaudio/mixing.html [ Timeout ]
 
-crbug.com/739365 [ Linux ] virtual/layout_ng/fast/block/float/assert-when-moving-float.html [ Skip ]
-
 # Tests timing out on WebKit Linux Trusty MSAN
 crbug.com/760543 [ Linux ] http/tests/devtools/tracing/timeline-layout/timeline-layout-with-invalidations.js [ Pass Timeout ]
 crbug.com/760543 [ Linux ] http/tests/devtools/tracing/timeline-paint/timeline-paint-with-layout-invalidations.js [ Pass Timeout ]
diff --git a/third_party/blink/web_tests/SmokeTests b/third_party/blink/web_tests/SmokeTests
index 93fbb92c..6aa0d74 100644
--- a/third_party/blink/web_tests/SmokeTests
+++ b/third_party/blink/web_tests/SmokeTests
@@ -967,9 +967,6 @@
 virtual/gpu/fast/canvas/canvas-filter-frameless-document.html
 virtual/gpu/fast/canvas/feimage-with-foreignobject-taint-canvas-2.html
 virtual/gpu-rasterization/images/drag-image-descendant-painting-sibling.html
-virtual/layout_ng/fast/block/float/floats-not-cleared-crash.html
-virtual/layout_ng/fast/block/float/positioned-float-crash.html
-virtual/layout_ng/fast/block/margin-collapse/019.html
 
 # Include //media/OWNERS on review of changes to media-gpu-accelerated SmokeTests coverage.
 virtual/media-gpu-accelerated/media/video-autoplay.html
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 06b8b8e..9aa145c 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -48,10 +48,6 @@
 crbug.com/887140 hdr/color-profile-video.html [ Failure ]
 crbug.com/887140 hdr/video-canvas-alpha.html [ Failure ]
 
-# Unexpected failures (due to leaks?)
-crbug.com/927454 [ Linux ] external/wpt/pointerevents/pointerevent_pointerleave_descendant_over.html [ Pass Failure ]
-crbug.com/927454 [ Linux ] external/wpt/pointerevents/pointerevent_lostpointercapture_is_first.html [ Pass Failure ]
-
 # ====== Site Isolation failures from here ======
 # See also third_party/blink/web_tests/virtual/not-site-per-process/README.md
 #
@@ -667,76 +663,6 @@
 crbug.com/591099 external/wpt/css/css-writing-modes/inline-box-border-vlr-001.html [ Failure ]
 crbug.com/591099 external/wpt/css/filter-effects/filtered-inline-applies-to-float.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug14159-1.html [ Failure ]
-
-### virtual/layout_ng/external/wpt/css/CSS2/floats
-crbug.com/711704 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-rule3-outside-left-002.xht [ Failure ]
-crbug.com/711704 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-rule3-outside-right-002.xht [ Failure ]
-crbug.com/711704 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-rule7-outside-left-001.xht [ Failure ]
-crbug.com/711704 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-rule7-outside-right-001.xht [ Failure ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-wrap-bfc-006.xht [ Failure ]
-
-# Inline: border in continuations. Fail in Blink.
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-in-inline-insert-001f.xht [ Failure ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-in-inline-insert-002f.xht [ Failure ]
-
-# Tables.
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/max-width-applies-to-005.xht [ Failure ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/max-width-applies-to-006.xht [ Failure ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/max-width-applies-to-013.xht [ Failure ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/max-width-applies-to-014.xht [ Failure ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/min-width-applies-to-005.xht [ Failure ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/min-width-applies-to-006.xht [ Failure ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/min-width-applies-to-014.xht [ Failure ]
-
-# SVG intrinsic sizing.
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/replaced-intrinsic-001.xht [ Failure ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/replaced-intrinsic-002.xht [ Failure ]
-
-### virtual/layout_ng/external/wpt/css/CSS2/positioning
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/position-relative-035.xht [ Failure ]
-
-### virtual/layout_ng/fast/block/basic
-crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/basic/011.html [ Failure ]
-crbug.com/635619 virtual/layout_ng/fast/block/basic/018.html [ Failure ]
-crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/basic/text-indent-rtl.html [ Failure ]
-crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/basic/truncation-rtl.html [ Failure ]
-
-### virtual/layout_ng/fast/block/float
-crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/float/020.html [ Failure ]
-crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/float/026.html [ Failure ]
-crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/float/028.html [ Failure ]
-crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/float/float-in-float-hit-testing.html [ Failure ]
-crbug.com/635619 virtual/layout_ng/fast/block/float/clear-intruding-floats-when-moving-to-inline-parent-3.html [ Failure Crash Pass ]
-crbug.com/635619 virtual/layout_ng/fast/block/float/float-in-float-painting.html [ Failure ]
-crbug.com/635619 virtual/layout_ng/fast/block/float/float-list-changed-before-layout-crash.html [ Crash Pass ]
-crbug.com/635619 virtual/layout_ng/fast/block/float/float-not-removed-from-next-sibling4.html [ Crash Pass ]
-crbug.com/635619 virtual/layout_ng/fast/block/float/float-reparent-during-detach-crash.html [ Crash Pass ]
-crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/float/intruding-painted-twice.html [ Failure ]
-crbug.com/635619 virtual/layout_ng/fast/block/float/line-break-after-white-space-crash.html [ Pass Crash Timeout ]
-crbug.com/635619 virtual/layout_ng/fast/block/float/nopaint-after-layer-destruction2.html [ Failure ]
-crbug.com/810370 virtual/layout_ng/fast/block/float/overhanging-float-remove-from-fixed-position-block.html [ Failure ]
-crbug.com/810370 virtual/layout_ng/fast/block/float/overhanging-float-remove-from-fixed-position-block2.html [ Failure ]
-crbug.com/635619 virtual/layout_ng/fast/block/float/rubybase-children-moved-crash.html [ Crash Pass ]
-crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/float/width-update-after-clear.html [ Failure ]
-
-### virtual/layout_ng/fast/block/margin-collapse
-crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/margin-collapse/103.html [ Failure ]
-
-### virtual/layout_ng/overflow
-crbug.com/724701 virtual/layout_ng/overflow/overflow-basic-004.html [ Failure ]
-
-### single pixel underline Mac failures
-crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/margin-collapse/001.html [ Failure ]
-crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/margin-collapse/005.html [ Failure ]
-crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/001.html [ Failure ]
-crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/005.html [ Failure ]
-crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/010.html [ Failure ]
-crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/011.html [ Failure ]
-crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/012.html [ Failure ]
-crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/015.html [ Failure ]
-
-
-
 crbug.com/836300 fast/css3-text/css3-text-decoration/text-decoration-skip-ink-links.html [ Pass Failure ]
 
 # ====== LayoutNG ======
@@ -746,55 +672,6 @@
 
 crbug.com/835810 [ Win7 ] http/tests/devtools/startup/dom-storage-open.js [ Pass Timeout ]
 
-### Image/text failures
-#crbug.com/714962 virtual/layout_ng/fast/inline/001.html [ Failure ]
-crbug.com/714962 virtual/layout_ng/fast/inline/emptyInlinesWithinLists.html [ Failure ]
-crbug.com/714962 virtual/layout_ng/fast/inline/inline-box-background-long-image.html [ Failure ]
-crbug.com/714962 virtual/layout_ng/fast/inline/inline-box-background-repeat-x.html [ Failure ]
-crbug.com/714962 virtual/layout_ng/fast/inline/inline-box-background-repeat-y.html [ Failure ]
-crbug.com/714962 virtual/layout_ng/fast/inline/inline-box-background.html [ Failure ]
-crbug.com/714962 virtual/layout_ng/fast/inline/justify-emphasis-inline-box.html [ Failure ]
-crbug.com/714962 [ Mac ] virtual/layout_ng/fast/inline/br-text-decoration.html [ Failure ]
-crbug.com/714962 [ Mac ] virtual/layout_ng/fast/inline/drawStyledEmptyInlines.html [ Failure ]
-crbug.com/714962 [ Mac ] virtual/layout_ng/fast/inline/drawStyledEmptyInlinesWithWS.html [ Failure ]
-
-### Image/text failures also on LayoutNG
-crbug.com/714962 virtual/layout_ng/fast/inline/absolute-positioned-inline-in-centred-block.html [ Failure ]
-crbug.com/714962 virtual/layout_ng/fast/inline/continuation-outlines-with-layers.html [ Failure ]
-crbug.com/714962 virtual/layout_ng/fast/inline/continuation-outlines.html [ Failure ]
-crbug.com/714962 virtual/layout_ng/fast/inline/inline-borders-with-bidi-override.html [ Failure ]
-crbug.com/714962 virtual/layout_ng/fast/inline/outline-continuations.html [ Failure ]
-
-### virtual/layout_ng/fast/block/float/
-crbug.com/714962 [ Mac ] virtual/layout_ng/fast/block/float/002.html [ Failure ]
-
-### virtual/layout_ng/fast/writing-mode/
-crbug.com/714962 virtual/layout_ng/fast/writing-mode/auto-sizing-orthogonal-flows.html [ Failure ]
-crbug.com/714962 virtual/layout_ng/fast/writing-mode/background-vertical-lr.html [ Failure ]
-crbug.com/714962 virtual/layout_ng/fast/writing-mode/basic-vertical-line.html [ Failure ]
-crbug.com/714962 virtual/layout_ng/fast/writing-mode/border-image-vertical-lr.html [ Failure ]
-crbug.com/714962 virtual/layout_ng/fast/writing-mode/border-radius-clipping-vertical-lr.html [ Failure ]
-crbug.com/714962 virtual/layout_ng/fast/writing-mode/border-styles-vertical-lr.html [ Failure ]
-crbug.com/714962 virtual/layout_ng/fast/writing-mode/box-shadow-vertical-lr.html [ Failure ]
-crbug.com/714962 virtual/layout_ng/fast/writing-mode/box-shadow-vertical-rl.html [ Failure ]
-crbug.com/714962 [ Mac ] virtual/layout_ng/fast/writing-mode/broken-ideograph-small-caps.html [ Failure ]
-crbug.com/714962 [ Mac ] virtual/layout_ng/fast/writing-mode/broken-ideographic-font.html [ Failure ]
-crbug.com/714962 virtual/layout_ng/fast/writing-mode/fieldsets.html [ Failure ]
-crbug.com/714962 virtual/layout_ng/fast/writing-mode/flipped-blocks-hit-test-line-edges.html [ Failure ]
-crbug.com/714962 [ Mac Linux ] virtual/layout_ng/fast/writing-mode/japanese-lr-selection.html [ Failure ]
-crbug.com/714962 [ Mac ] virtual/layout_ng/fast/writing-mode/japanese-lr-text.html [ Failure ]
-crbug.com/714962 virtual/layout_ng/fast/writing-mode/japanese-rl-selection.html [ Failure ]
-crbug.com/714962 virtual/layout_ng/fast/writing-mode/percentage-height-orthogonal-writing-modes.html [ Failure ]
-crbug.com/714962 virtual/layout_ng/fast/writing-mode/vertical-align-table-baseline.html [ Failure ]
-crbug.com/714962 virtual/layout_ng/fast/writing-mode/vertical-baseline-alignment.html [ Failure ]
-crbug.com/714962 [ Mac ] virtual/layout_ng/fast/writing-mode/vertical-font-fallback.html [ Failure ]
-crbug.com/714962 virtual/layout_ng/fast/writing-mode/vertical-lr-replaced-selection.html [ Failure ]
-crbug.com/714962 virtual/layout_ng/fast/writing-mode/vertical-rl-replaced-selection.html [ Failure ]
-crbug.com/714962 [ Mac ] virtual/layout_ng/fast/writing-mode/border-vertical-lr.html [ Failure ]
-crbug.com/714962 [ Mac ] virtual/layout_ng/fast/writing-mode/english-lr-text.html [ Failure ]
-crbug.com/714962 [ Win ] virtual/layout_ng/fast/writing-mode/english-lr-text.html [ Failure ]
-crbug.com/714962 [ Mac ] virtual/layout_ng/fast/writing-mode/text-orientation-basic.html [ Failure ]
-
 # Crashes/asserts due to inline item reuse.
 crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/dynamic/remove-block-from-content-after-spanner.html [ Failure Crash Timeout ]
 crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/dynamic/remove-block-from-content-before-spanner.html [ Failure Crash Timeout ]
@@ -804,48 +681,7 @@
 crbug.com/797591 virtual/layout_ng_experimental/fast/multicol/regular-block-becomes-multicol.html [ Failure ]
 crbug.com/797591 virtual/layout_ng_experimental/fast/multicol/newmulticol/regular-block-becomes-multicol.html [ Failure ]
 
-### 1px diff with ref files.
-crbug.com/635619 [ Linux ] virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-sub-001.xht [ Failure ]
-crbug.com/635619 [ Linux ] virtual/layout_ng/external/wpt/css/CSS2/linebox/vertical-align-super-001.xht [ Failure ]
-
 ### Missing refs, these are also skipped for existing layout.
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floating-replaced-height-008.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-108.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-109.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-110.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-126.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-127.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-128.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-129.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-130.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-131.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-137.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/inline-block-002.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/inline-block-003.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/inline-block-004.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/inline-block-005.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/inlines-003.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/inlines-004.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/inlines-005.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/inlines-006.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/abspos-inline-001.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/abspos-inline-002.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/abspos-inline-003.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/abspos-inline-004.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/abspos-inline-005.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/abspos-inline-006.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/abspos-paged-001.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/abspos-paged-002.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/position-004.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/position-fixed-003.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/position-fixed-004.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/position-fixed-005.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/position-relative-020.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/position-relative-021.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/position-relative-022.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/position-relative-034.xht [ Skip ]
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/position-relative-036.xht [ Skip ]
-
 crbug.com/829028 virtual/layout_ng_experimental/external/wpt/css/css-multicol/balance-table-with-fractional-height-row.html [ Failure ]
 crbug.com/829028 virtual/layout_ng_experimental/external/wpt/css/css-multicol/filter-with-abspos.html [ Failure ]
 crbug.com/829028 virtual/layout_ng_experimental/external/wpt/css/css-multicol/float-and-block.html [ Failure ]
@@ -1188,7 +1024,6 @@
 crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/positive-leading.html [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/pushed-line-affected-by-float.html [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/relayout-and-push-float.html [ Failure ]
-crbug.com/591099 [ Mac ] virtual/layout_ng_experimental/fast/multicol/relpos-inside-inline-block.html [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/rule-in-nested-with-too-tall-line.html [ Failure ]
 crbug.com/714962 virtual/layout_ng_experimental/fast/multicol/scale-transform-text.html [ Failure ]
 crbug.com/874506 virtual/layout_ng_experimental/fast/multicol/scrollable-basic.html [ Failure ]
@@ -1743,7 +1578,6 @@
 # they are related to timing and to the same issues as above.
 # Here is an example: https://ci.chromium.org/p/chromium/builders/luci.chromium.try/linux_chromium_rel_ng/221340
 crbug.com/891427 fast/block/float/4145535Crash.html [ Pass Failure Timeout Crash ]
-crbug.com/891427 virtual/layout_ng/fast/block/float/4145535Crash.html [ Pass Failure Timeout Crash ]
 crbug.com/891427 http/tests/webfont/font-display-intervention.html [ Pass Failure Timeout Crash ]
 crbug.com/891427 paint/invalidation/scroll/fixed-img-src-change-after-scroll.html [ Pass Failure Timeout Crash ]
 crbug.com/891427 virtual/prefer_compositing_to_lcd_text/scrollbars/custom-scrollbar-changing-style-relayout-body-scrollablearea.html [ Pass Failure Timeout Crash ]
@@ -1760,7 +1594,6 @@
 
 crbug.com/767269 [ Win ] inspector-protocol/layout-fonts/cjk-ideograph-fallback-by-lang.js [ Pass Failure ]
 
-crbug.com/788110 [ Linux ] inspector-protocol/layout-fonts/unicode-range-combining-chars-fallback.js [ Pass Failure ]
 crbug.com/788110 [ Win10 ] inspector-protocol/layout-fonts/unicode-range-combining-chars-fallback.js [ Pass Failure ]
 
 crbug.com/803276 [ Mac ] inspector-protocol/memory/sampling-native-profile.js [ Skip ]
@@ -1813,20 +1646,16 @@
 crbug.com/862716 [ Mac ] css3/filters/effect-brightness-clamping-hw.html [ Failure Pass Timeout ]
 crbug.com/862716 [ Linux ] css3/filters/effect-brightness-clamping-hw.html [ Failure Pass Timeout ]
 crbug.com/862716 [ Win ] css3/filters/effect-brightness-clamping-hw.html [ Failure Pass Timeout ]
-crbug.com/862806 [ Mac ] css3/filters/effect-drop-shadow-hw.html [ Failure Pass ]
 
 # gpuBenchmarking.pinchBy is busted on desktops for touchscreen pinch
 crbug.com/787615 [ Win ] virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-in-slow.html [ Failure Pass ]
-crbug.com/787615 [ Linux ] virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-in-slow.html [ Failure Pass ]
 crbug.com/787615 [ Fuchsia ] virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-in-slow.html [ Failure Pass ]
 crbug.com/787615 [ Win ] virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen.html [ Failure Pass ]
 crbug.com/787615 [ Linux ] virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen.html [ Failure Pass ]
 crbug.com/787615 [ Fuchsia ] virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen.html [ Failure Pass ]
 
 # Flakily fail on Linux Tests (dbg) and Win7.
-crbug.com/953725 [ Linux ] virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-in-slow.html [ Failure Pass ]
 crbug.com/953725 [ Win ] virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-in-slow.html [ Failure Pass ]
-crbug.com/922508 [ Linux Debug ] virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad.html [ Failure Pass ]
 crbug.com/922508 [ Win ] virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad.html [ Failure Pass ]
 
 crbug.com/871139 [ Android ] virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-in-slow.html [ Failure Timeout ]
@@ -1849,8 +1678,6 @@
 crbug.com/520611 [ Debug ] fast/filesystem/workers/file-writer-events-shared-worker.html [ Failure Pass ]
 crbug.com/520194 http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-overridesexpires.html [ Failure Pass ]
 
-crbug.com/761798 [ Mac ] inspector-protocol/emulation/device-emulation-desktop.js [ Failure ]
-
 crbug.com/771233 [ Win10 ] http/tests/devtools/audits2/ [ Skip ]
 
 crbug.com/923269 virtual/gpu/fast/canvas/OffscreenCanvas-copyImage.html [ Failure ]
@@ -1939,8 +1766,6 @@
 
 crbug.com/487281 [ Mac ] fast/forms/select/menulist-narrow-width.html [ Failure ]
 
-crbug.com/543110 [ Mac ] fast/text/international/text-shaping-arabic.html [ Failure ]
-
 crbug.com/731731 inspector-protocol/layers/paint-profiler-load-empty.js [ Failure Pass ]
 
 # Will be re-enabled and rebaselined once we remove the '--enable-file-cookies' flag.
@@ -1979,7 +1804,6 @@
 crbug.com/766135 fast/dom/Window/redirect-with-timer.html [ Timeout Pass ]
 
 # Ref tests that needs investigation.
-crbug.com/404597 [ Mac ] fast/css3-text/css3-text-justify/text-justify-crash.html [ Failure ]
 crbug.com/404597 fast/forms/long-text-in-input.html [ Skip ]
 
 crbug.com/552494 virtual/prefer_compositing_to_lcd_text/scrollbars/overflow-scrollbar-combinations.html [ Pass Failure ]
@@ -2465,7 +2289,6 @@
 crbug.com/660185 [ Mac ] fast/forms/datalist/input-appearance-range-with-transform.html [ Pass Failure ]
 
 crbug.com/658304 [ Win ] fast/forms/select/input-select-after-resize.html [ Crash Timeout Pass ]
-crbug.com/658304 [ Linux ] fast/forms/select/input-select-after-resize.html [ Crash Timeout Pass ]
 
 # We don't support requesting flex line breaks and it is not clear that we should.
 # See https://lists.w3.org/Archives/Public/www-style/2015May/0065.html
@@ -2510,9 +2333,7 @@
 crbug.com/752449 [ Mac10.13 ] external/wpt/css/css-fonts/matching/fixed-stretch-style-over-weight.html [ Failure ]
 crbug.com/752449 [ Retina ] external/wpt/css/css-fonts/matching/fixed-stretch-style-over-weight.html [ Failure ]
 crbug.com/752449 [ Mac10.12 ] external/wpt/css/css-fonts/matching/stretch-distance-over-weight-distance.html [ Failure ]
-crbug.com/752449 [ Retina ] external/wpt/css/css-fonts/matching/stretch-distance-over-weight-distance.html [ Failure ]
 crbug.com/752449 [ Mac10.12 ] external/wpt/css/css-fonts/matching/style-ranges-over-weight-direction.html [ Failure ]
-crbug.com/752449 [ Retina ] external/wpt/css/css-fonts/matching/style-ranges-over-weight-direction.html [ Failure ]
 crbug.com/796619 [ Win10 ] external/wpt/css/css-fonts/matching/fixed-stretch-style-over-weight.html [ Failure ]
 crbug.com/796619 [ Win10 ] external/wpt/css/css-fonts/matching/stretch-distance-over-weight-distance.html [ Failure ]
 crbug.com/796619 [ Win10 ] external/wpt/css/css-fonts/matching/style-ranges-over-weight-direction.html [ Failure ]
@@ -2553,8 +2374,6 @@
 crbug.com/501659 http/tests/security/xss-DENIED-xml-external-entity.xhtml [ Failure ]
 crbug.com/501659 fast/css/stylesheet-candidate-nodes-crash.xhtml [ Failure ]
 
-crbug.com/545140 [ Mac ] fast/encoding/denormalised-voiced-japanese-chars.html [ Failure ]
-
 crbug.com/591500 [ Win10 ] printing/webgl-repeated-printing.html [ Failure ]
 
 crbug.com/591500 [ Win10 ] printing/simultaneous-position-float-change.html [ Failure ]
@@ -2657,8 +2476,6 @@
 
 crbug.com/399507 virtual/threaded/http/tests/devtools/tracing/timeline-paint/layer-tree.js [ Skip ]
 
-crbug.com/636424 [ Win7 Debug ] editing/selection/modify_move/move-by-word-visually-crash-test-5.html [ Pass Timeout ]
-
 # These tests have test harness errors and PASS lines that have a
 # non-deterministic order.
 crbug.com/705125 fast/mediacapturefromelement/CanvasCaptureMediaStream-capture-out-of-DOM-element.html [ Failure ]
@@ -2763,7 +2580,6 @@
 crbug.com/626703 http/tests/devtools/indexeddb/database-refresh-view.js [ Pass Failure ]
 crbug.com/626703 crbug.com/946710 http/tests/devtools/extensions/extensions-sidebar.js [ Crash Failure Pass Timeout ]
 crbug.com/751952 fast/text/international/complex-text-rectangle.html [ Timeout Pass ]
-crbug.com/751952 [ Mac ] editing/selection/modify_extend/extend_by_character.html [ Failure Pass ]
 crbug.com/751952 [ Win ] editing/selection/modify_extend/extend_by_character.html [ Failure Pass ]
 crbug.com/751952 http/tests/devtools/console/console-uncaught-promise.js [ Pass Failure ]
 
@@ -2776,11 +2592,8 @@
 
 crbug.com/805463 external/wpt/acid/acid3/numbered-tests.html [ Skip ]
 
-crbug.com/828506 [ Linux ] fast/events/touch/scroll-without-mouse-lacks-mousemove-events.html [ Pass Failure ]
 crbug.com/828506 [ Win ] fast/events/touch/scroll-without-mouse-lacks-mousemove-events.html [ Pass Failure ]
-crbug.com/828506 [ Linux ] virtual/mouseevent_fractional/fast/events/touch/scroll-without-mouse-lacks-mousemove-events.html [ Pass Failure ]
 crbug.com/828506 [ Win ] virtual/mouseevent_fractional/fast/events/touch/scroll-without-mouse-lacks-mousemove-events.html [ Pass Failure ]
-crbug.com/828506 [ Linux ] virtual/scroll_customization/fast/events/touch/scroll-without-mouse-lacks-mousemove-events.html [ Pass Failure ]
 crbug.com/828506 [ Win ] virtual/scroll_customization/fast/events/touch/scroll-without-mouse-lacks-mousemove-events.html [ Pass Failure ]
 
 # Failure messages are unstable so we cannot create baselines.
@@ -3039,50 +2852,11 @@
 crbug.com/626703 external/wpt/css/css-text/overflow-wrap/overflow-wrap-cluster-002.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-text/overflow-wrap/overflow-wrap-cluster-001.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-text/overflow-wrap/overflow-wrap-normal-keep-all-001.html [ Failure ]
-crbug.com/626703 [ Mac10.12 ] external/wpt/media-source/mediasource-config-change-webm-av-framesize.html [ Timeout ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/media-source/mediasource-config-change-webm-av-framesize.html [ Timeout ]
-crbug.com/626703 [ Retina ] external/wpt/media-source/mediasource-config-change-webm-av-framesize.html [ Timeout ]
-crbug.com/626703 [ Mac10.12 ] external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-pause-on-exit.html [ Timeout ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-pause-on-exit.html [ Timeout ]
-crbug.com/626703 [ Retina ] external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-pause-on-exit.html [ Timeout ]
-crbug.com/626703 [ Mac10.12 ] external/wpt/media-source/mediasource-play.html [ Timeout ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/media-source/mediasource-play.html [ Timeout ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-enter-exit.html [ Timeout ]
-crbug.com/626703 [ Mac10.12 ] external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-cuechange.html [ Timeout ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-cuechange.html [ Timeout ]
-crbug.com/626703 [ Mac10.12 ] external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-timestamp-events.html [ Timeout ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-timestamp-events.html [ Timeout ]
-crbug.com/626703 [ Mac10.12 ] external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-sorted-before-dispatch.html [ Timeout ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-sorted-before-dispatch.html [ Timeout ]
-crbug.com/626703 [ Retina ] external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-sorted-before-dispatch.html [ Timeout ]
-crbug.com/626703 [ Mac10.12 ] external/wpt/mediacapture-fromelement/ended.html [ Timeout ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/mediacapture-fromelement/ended.html [ Timeout ]
-crbug.com/626703 [ Retina ] external/wpt/mediacapture-fromelement/ended.html [ Timeout ]
 crbug.com/626703 [ Mac10.12 ] external/wpt/media-source/mediasource-config-change-webm-a-bitrate.html [ Timeout ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/media-source/mediasource-config-change-webm-a-bitrate.html [ Timeout ]
-crbug.com/626703 [ Retina ] external/wpt/media-source/mediasource-config-change-webm-a-bitrate.html [ Timeout ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-disabled.html [ Timeout ]
-crbug.com/626703 [ Retina ] external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-disabled.html [ Timeout ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-missed.html [ Timeout ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/html/semantics/embedded-content/media-elements/playing-the-media-resource/loop-from-ended.tentative.html [ Timeout ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-mode.html [ Timeout ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html [ Timeout ]
-crbug.com/626703 [ Mac10.12 ] external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-duration.html [ Timeout ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-duration.html [ Timeout ]
-crbug.com/626703 [ Retina ] external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-duration.html [ Timeout ]
 crbug.com/626703 external/wpt/html/semantics/embedded-content/media-elements/src_object_blob.html [ Timeout ]
 crbug.com/626703 external/wpt/css/css-lists/list-item-definition.html [ Failure ]
 crbug.com/626703 external/wpt/html/semantics/forms/the-textarea-element/multiline-placeholder-cr.html [ Failure ]
-crbug.com/626703 [ Mac10.10 ] external/wpt/event-timing/onloadthenobserve.html [ Timeout ]
-crbug.com/626703 [ Mac10.11 ] external/wpt/event-timing/onloadthenobserve.html [ Timeout ]
-crbug.com/626703 [ Win7 ] external/wpt/event-timing/onloadthenobserve.html [ Timeout ]
 crbug.com/626703 [ Win7 ] external/wpt/webrtc/RTCPeerConnection-ondatachannel.html [ Failure Timeout ]
-crbug.com/626703 [ Mac10.10 ] external/wpt/content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-same-url-allow.html [ Timeout ]
-crbug.com/626703 [ Mac10.12 ] external/wpt/content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-same-url-allow.html [ Timeout ]
-crbug.com/626703 [ Mac10.11 ] external/wpt/content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-same-url-allow.html [ Timeout ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-same-url-allow.html [ Timeout ]
-crbug.com/626703 [ Retina ] external/wpt/content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-same-url-allow.html [ Timeout ]
-crbug.com/626703 [ Win7 ] external/wpt/content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-same-url-allow.html [ Timeout ]
 crbug.com/626703 [ Win10 ] external/wpt/content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-same-url-allow.html [ Timeout ]
 crbug.com/626703 external/wpt/media-source/mediasource-correct-frames-after-reappend.html [ Pass Failure Timeout ]
 crbug.com/626703 external/wpt/media-source/mediasource-correct-frames.html [ Pass Failure Timeout ]
@@ -3099,14 +2873,7 @@
 crbug.com/626703 external/wpt/svg/text/reftests/text-text-anchor-002.svg [ Failure ]
 crbug.com/626703 external/wpt/svg/text/reftests/text-text-anchor-203.svg [ Failure ]
 crbug.com/626703 external/wpt/svg/text/reftests/text-text-anchor-003.svg [ Failure ]
-crbug.com/626703 [ Retina ] virtual/feature-policy-permissions/external/wpt/mediacapture-streams/MediaStreamTrack-id.https.html [ Timeout ]
-crbug.com/626703 [ Retina ] virtual/layout_ng/external/wpt/css/CSS2/abspos/abspos-containing-block-initial-009e.xht [ Timeout ]
-crbug.com/626703 [ Retina ] virtual/feature-policy-permissions/external/wpt/mediacapture-streams/MediaStream-add-audio-track.https.html [ Timeout ]
-crbug.com/626703 [ Retina ] virtual/layout_ng/external/wpt/css/CSS2/abspos/static-inside-table-cell.html [ Timeout ]
-crbug.com/626703 [ Retina ] virtual/feature-policy-permissions/external/wpt/mediacapture-streams/GUM-unknownkey-option-param.https.html [ Timeout ]
-crbug.com/626703 [ Retina ] virtual/layout_ng/external/wpt/css/CSS2/abspos/abspos-containing-block-initial-004f.xht [ Timeout ]
 crbug.com/626703 virtual/webrtc-wpt-plan-b/external/wpt/webrtc/RTCPeerConnection-getStats.https.html [ Timeout ]
-crbug.com/626703 [ Mac10.13 ] virtual/streaming-preload/external/wpt/html/semantics/scripting-1/the-script-element/async_005.htm [ Timeout ]
 crbug.com/626703 external/wpt/webrtc/RTCPeerConnection-getStats.https.html [ Timeout ]
 crbug.com/626703 external/wpt/infrastructure/reftest/reftest_fuzzy.html [ Failure ]
 crbug.com/626703 external/wpt/infrastructure/reftest/reftest_fuzzy_1.html [ Failure ]
@@ -3143,7 +2910,6 @@
 crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/clients-matchall-exact-controller.https.html [ Timeout ]
 crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/claim-with-redirect.https.html [ Timeout ]
 crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/close.https.html [ Timeout ]
-crbug.com/626703 [ Retina ] virtual/feature-policy-permissions/external/wpt/mediacapture-streams/MediaStreamTrack-getCapabilities.https.html [ Timeout ]
 crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/extendable-message-event.https.html [ Timeout ]
 crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/navigation-redirect.https.html?client [ Timeout ]
 crbug.com/626703 [ Retina ] virtual/disabled-service-worker-servicification/external/wpt/service-workers/service-worker/multiple-update.https.html [ Timeout ]
@@ -3153,16 +2919,7 @@
 crbug.com/626703 external/wpt/reporting/bufferSize.html [ Timeout ]
 crbug.com/626703 external/wpt/reporting/order.html [ Timeout ]
 crbug.com/626703 external/wpt/reporting/nestedReport.html [ Timeout ]
-crbug.com/626703 [ Retina ] virtual/feature-policy-permissions/external/wpt/mediacapture-streams/MediaDevices-enumerateDevices.https.html [ Timeout ]
-crbug.com/626703 [ Retina ] virtual/feature-policy-permissions/external/wpt/mediacapture-streams/MediaDevices-getUserMedia.https.html [ Timeout ]
 crbug.com/626703 virtual/not-site-per-process/external/wpt/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_access_details.sub.html [ Skip ]
-crbug.com/626703 [ Retina ] external/wpt/websockets/interfaces/WebSocket/events/015.html?wss [ Timeout ]
-crbug.com/626703 [ Retina ] external/wpt/websockets/Secure-Close-3000-reason.any.worker.html [ Timeout ]
-crbug.com/626703 [ Retina ] external/wpt/websockets/Secure-Close-1000-verify-code.any.worker.html [ Timeout ]
-crbug.com/626703 [ Retina ] external/wpt/websockets/Secure-Send-binary-arraybufferview-uint8-offset-length.any.worker.html [ Timeout ]
-crbug.com/626703 [ Retina ] virtual/feature-policy-permissions/external/wpt/mediacapture-streams/MediaStream-default-feature-policy.https.html [ Timeout ]
-crbug.com/626703 [ Retina ] virtual/feature-policy-permissions/external/wpt/mediacapture-streams/GUM-non-applicable-constraint.https.html [ Timeout ]
-crbug.com/626703 [ Retina ] virtual/feature-policy-permissions/external/wpt/mediacapture-streams/MediaStream-audio-only.https.html [ Timeout ]
 crbug.com/626703 crbug.com/930297 [ Linux ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html [ Timeout Pass Failure Crash ]
 crbug.com/626703 [ Win7 ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html [ Failure Timeout ]
 crbug.com/626703 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-intrinsic-ratio-007v.html [ Failure ]
@@ -3182,14 +2939,6 @@
 crbug.com/626703 external/wpt/css/css-grid/abspos/descendant-static-position-003.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-grid/abspos/descendant-static-position-002.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-grid/abspos/descendant-static-position-001.html [ Failure ]
-crbug.com/626703 [ Mac10.10 ] external/wpt/content-security-policy/inside-worker/shared-inheritance.html [ Timeout ]
-crbug.com/626703 [ Mac10.10 ] external/wpt/content-security-policy/frame-ancestors/frame-ancestors-self-block.html [ Timeout ]
-crbug.com/626703 [ Mac10.10 ] external/wpt/fetch/api/cors/cors-redirect.any.html [ Timeout ]
-crbug.com/626703 [ Mac10.10 ] external/wpt/content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-cross-self-block.html [ Timeout ]
-crbug.com/626703 [ Mac10.10 ] virtual/not-site-per-process/external/wpt/html/browsers/the-windowproxy-exotic-object/windowproxy-prototype-setting-same-origin-domain.sub.html [ Timeout ]
-crbug.com/626703 [ Mac10.10 ] external/wpt/html/dom/self-origin.sub.html [ Timeout ]
-crbug.com/626703 [ Mac10.10 ] external/wpt/fetch/api/cors/cors-redirect-preflight.any.html [ Timeout ]
-crbug.com/626703 [ Mac10.10 ] external/wpt/content-security-policy/frame-ancestors/frame-ancestors-url-block.html [ Timeout ]
 crbug.com/626703 [ Retina Mac ] external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-width-height.html [ Crash Timeout ]
 crbug.com/626703 external/wpt/css/css-values/ic-unit-010.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-values/ic-unit-011.html [ Failure ]
@@ -3198,7 +2947,6 @@
 crbug.com/626703 external/wpt/css/css-values/ic-unit-012.html [ Failure ]
 crbug.com/626703 external/wpt/html/semantics/document-metadata/the-link-element/stylesheet-not-removed-until-next-stylesheet-loads.html [ Timeout ]
 crbug.com/626703 external/wpt/svg/interact/manual/event-attribute-001-manual.svg [ Skip ]
-crbug.com/626703 [ Retina ] virtual/streaming-preload/external/wpt/html/semantics/scripting-1/the-script-element/async_005.htm [ Timeout ]
 crbug.com/626703 external/wpt/css/css-values/vh-support-atviewport.html [ Failure ]
 crbug.com/626703 external/wpt/css/CSS2/text/white-space-nowrap-attribute-001.xht [ Failure ]
 crbug.com/626703 external/wpt/css/css-text/white-space/white-space-intrinsic-size-004.html [ Failure ]
@@ -3233,37 +2981,17 @@
 crbug.com/626703 external/wpt/css/css-text/white-space/text-space-trim-trim-inner-001.xht [ Failure ]
 crbug.com/626703 external/wpt/svg/painting/marker-006.svg [ Failure ]
 crbug.com/626703 external/wpt/svg/painting/marker-005.svg [ Failure ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/preload/dynamic-adding-preload-imagesrcset.html [ Timeout ]
 crbug.com/906369 external/wpt/css/css-text/text-transform/text-transform-capitalize-033.html [ Failure ]
 crbug.com/626703 virtual/streams-native/external/wpt/fetch/content-type/response.window.html [ Timeout ]
 crbug.com/626703 [ Mac10.10 ] external/wpt/mimesniff/mime-types/parsing.any.worker.html [ Failure Timeout ]
 crbug.com/626703 [ Mac10.11 ] external/wpt/mimesniff/mime-types/parsing.any.worker.html [ Failure Timeout ]
-crbug.com/626703 [ Mac10.10 ] external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html [ Failure Timeout ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html [ Failure Timeout ]
-crbug.com/626703 [ Retina ] external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html [ Failure Timeout ]
 crbug.com/626703 [ Win ] external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html [ Failure Timeout ]
-crbug.com/626703 [ Mac10.11 ] external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html [ Failure Timeout ]
-crbug.com/626703 [ Mac10.12 ] external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html [ Failure Timeout ]
 crbug.com/626703 external/wpt/fetch/content-type/response.window.html [ Timeout ]
 crbug.com/626703 virtual/streaming-preload/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/no-active-script-manual-module.html [ Timeout ]
 crbug.com/626703 virtual/streaming-preload/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/no-active-script-manual-classic.html [ Timeout ]
 crbug.com/626703 external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/no-active-script-manual-classic.html [ Timeout ]
 crbug.com/626703 external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/no-active-script-manual-module.html [ Timeout ]
 crbug.com/626703 external/wpt/html/webappapis/user-prompts/newline-normalization-manual.html [ Skip ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/html/browsers/browsing-the-web/read-media/pageload-video.html [ Crash ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/feature-policy/picture-in-picture-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html [ Crash ]
-crbug.com/626703 [ Retina ] external/wpt/feature-policy/picture-in-picture-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html [ Crash ]
-crbug.com/626703 [ Retina ] external/wpt/feature-policy/picture-in-picture-allowed-by-feature-policy.https.sub.html [ Crash ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/html/semantics/embedded-content/the-video-element/intrinsic_sizes.htm [ Crash ]
-crbug.com/626703 [ Retina ] external/wpt/html/semantics/embedded-content/the-video-element/intrinsic_sizes.htm [ Crash ]
-crbug.com/626703 [ Retina ] external/wpt/feature-policy/picture-in-picture-default-feature-policy.https.sub.html [ Crash ]
-crbug.com/626703 [ Retina ] virtual/unified-autoplay/external/wpt/feature-policy/picture-in-picture-allowed-by-feature-policy-attribute.https.sub.html [ Crash ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/feature-policy/picture-in-picture-allowed-by-feature-policy-attribute.https.sub.html [ Crash ]
-crbug.com/626703 [ Retina ] external/wpt/feature-policy/picture-in-picture-allowed-by-feature-policy-attribute.https.sub.html [ Crash ]
-crbug.com/626703 [ Mac10.13 ] virtual/unified-autoplay/external/wpt/feature-policy/picture-in-picture-default-feature-policy.https.sub.html [ Crash ]
-crbug.com/626703 [ Retina ] virtual/unified-autoplay/external/wpt/feature-policy/picture-in-picture-default-feature-policy.https.sub.html [ Crash ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/media-source/mediasource-detach.html [ Crash ]
-crbug.com/626703 [ Retina ] external/wpt/media-source/mediasource-detach.html [ Crash ]
 crbug.com/626703 [ Mac ] external/wpt/infrastructure/testdriver/actions/pause.html [ Pass Timeout ]
 crbug.com/626703 external/wpt/infrastructure/testdriver/actions/eventOrder.html [ Timeout ]
 crbug.com/626703 external/wpt/css/css-text/writing-system/writing-system-segment-break-001.html [ Failure ]
@@ -3437,11 +3165,8 @@
 crbug.com/432153 external/wpt/css/css-masking/mask-image/mask-image-url-image-hash.html [ Failure ]
 crbug.com/626703 external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow.html [ Failure ]
 crbug.com/626703 external/wpt/css/CSS2/floats/float-nowrap-9.html [ Failure ]
-crbug.com/626703 virtual/layout_ng/external/wpt/css/CSS2/floats/float-nowrap-8.html [ Failure ]
 crbug.com/626703 external/wpt/css/CSS2/floats/float-nowrap-3.html [ Failure ]
 crbug.com/626703 external/wpt/css/CSS2/floats/float-nowrap-8.html [ Failure ]
-crbug.com/626703 virtual/layout_ng/external/wpt/css/CSS2/floats/float-nowrap-7.html [ Failure ]
-crbug.com/626703 virtual/layout_ng/external/wpt/css/CSS2/floats/float-nowrap-9.html [ Failure ]
 crbug.com/626703 external/wpt/css/CSS2/floats/float-nowrap-7.html [ Failure ]
 crbug.com/626703 [ Mac ] external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical.html [ Failure ]
 crbug.com/626703 external/wpt/css/selectors/old-tests/css3-modsel-16.xml [ Skip ]
@@ -3530,8 +3255,6 @@
 crbug.com/626703 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-column-row-gap-002.html [ Failure ]
 crbug.com/626703 external/wpt/fetch/api/request/request-keepalive-quota.html?include=slow-2 [ Timeout ]
 crbug.com/626703 virtual/streams-native/external/wpt/fetch/api/request/request-keepalive-quota.html?include=slow-2 [ Timeout ]
-crbug.com/626703 [ Win7 ] external/wpt/preload/link-header-preload.html [ Timeout ]
-crbug.com/626703 [ Win7 ] external/wpt/preload/onerror-event.html [ Timeout ]
 crbug.com/626703 external/wpt/svg/painting/reftests/paint-context-001.svg [ Failure ]
 crbug.com/626703 external/wpt/svg/painting/reftests/paint-context-002.svg [ Failure ]
 crbug.com/626703 external/wpt/css/css-scoping/shadow-directionality-002.tentative.html [ Failure ]
@@ -3547,7 +3270,6 @@
 crbug.com/626703 external/wpt/css/css-transforms/transform-box/view-box-mutation.html [ Failure ]
 crbug.com/626703 external/wpt/fetch/security/redirect-to-url-with-credentials.https.html [ Timeout ]
 crbug.com/626703 virtual/streams-native/external/wpt/fetch/security/redirect-to-url-with-credentials.https.html [ Timeout ]
-crbug.com/626703 [ Mac10.12 ] external/wpt/domxpath/xml_xpath_runner.html [ Timeout ]
 crbug.com/626703 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-polygon-024.html [ Failure ]
 crbug.com/626703 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-ellipse-048.html [ Failure ]
 crbug.com/626703 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-inset-026.html [ Failure ]
@@ -3636,9 +3358,7 @@
 crbug.com/626703 external/wpt/fetch/http-cache/basic-auth-cache-test.html [ Timeout ]
 crbug.com/626703 virtual/streams-native/external/wpt/fetch/http-cache/basic-auth-cache-test.html [ Timeout ]
 crbug.com/626703 external/wpt/css/css-fonts/font-feature-settings-descriptor-01.html [ Failure ]
-crbug.com/626703 [ Linux ] external/wpt/fetch/api/redirect/redirect-count.any.worker.html [ Timeout ]
 crbug.com/626703 [ Win10 ] external/wpt/fetch/api/redirect/redirect-count.any.worker.html [ Timeout ]
-crbug.com/626703 [ Linux ] external/wpt/fetch/api/redirect/redirect-count.any.html [ Timeout ]
 crbug.com/626703 [ Win10 ] external/wpt/fetch/api/redirect/redirect-count.any.html [ Timeout ]
 
 crbug.com/626703 external/wpt/css/cssom-view/scroll-behavior-smooth.html [ Timeout ]
@@ -3768,8 +3488,6 @@
 crbug.com/626703 external/wpt/css/css-writing-modes/available-size-016.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-writing-modes/available-size-015.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-writing-modes/available-size-017.html [ Failure ]
-crbug.com/626703 [ Mac10.11 ] external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-remove-active-cue.html [ Crash ]
-crbug.com/626703 [ Retina ] external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-remove-active-cue.html [ Crash ]
 crbug.com/626703 [ Linux ] external/wpt/css/css-ui/text-overflow-028.html [ Failure ]
 crbug.com/626703 [ Win ] external/wpt/css/css-ui/text-overflow-028.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-writing-modes/astral-bidi/adlam-anti-ref.html [ Failure Pass ]
@@ -4308,7 +4026,6 @@
 crbug.com/595993 virtual/omt-worker-fetch/external/wpt/service-workers/service-worker/fetch-header-visibility.https.html [ Failure ]
 
 crbug.com/619427 [ Mac ] fast/overflow/overflow-height-float-not-removed-crash3.html [ Pass Failure ]
-crbug.com/619427 [ Linux ] fast/overflow/overflow-height-float-not-removed-crash3.html [ Pass Failure ]
 
 # [css-ui] Imported tests from W3C suite.
 crbug.com/669473 external/wpt/css/css-ui/box-sizing-014.html [ Failure ]
@@ -4407,10 +4124,6 @@
 crbug.com/678346 [ Debug ] fast/dom/shadow/selections-in-shadow.html [ Pass Timeout ]
 crbug.com/678346 [ Mac Debug ] storage/indexeddb/index-cursor.html [ Pass Timeout ]
 crbug.com/678346 [ Win7 Debug ] storage/indexeddb/index-cursor.html [ Pass Timeout ]
-crbug.com/810254 [ Win7 ] storage/indexeddb/observer-frame.html [ Pass Timeout ]
-crbug.com/810254 [ Win7 ] storage/indexeddb/observer-workers.html [ Pass Timeout ]
-
-crbug.com/678346 [ Win7 Debug ] storage/indexeddb/mozilla/test_objectStore_openKeyCursor.html [ Pass Timeout ]
 
 crbug.com/678493 http/tests/permissions/chromium/test-request-window.html [ Timeout Pass ]
 crbug.com/678499 http/tests/security/contentSecurityPolicy/require-sri-for/require-sri-for-script-preload-allowed.php [ Failure Pass ]
@@ -4477,9 +4190,6 @@
 # Sheriff failures 2017-02-21
 crbug.com/73609 http/tests/media/video-play-stall.html [ Pass Timeout ]
 
-# Sheriff failures 2017-02-27
-crbug.com/696407 [ Linux ] external/wpt/html/browsers/history/the-location-interface/location-protocol-setter-with-colon.sub.html [ Failure Pass ]
-
 # Sheriff failures 2017-03-10
 crbug.com/741210 [ Mac ] inspector-protocol/emulation/device-emulation-restore.js [ Failure ]
 
@@ -4574,14 +4284,9 @@
 crbug.com/745887 [ Mac ] fast/frames/sandboxed-iframe-plugins.html [ Failure Pass ]
 crbug.com/745887 [ Win ] fast/frames/sandboxed-iframe-plugins.html [ Failure Pass ]
 
-crbug.com/626703 [ Win7 ] external/wpt/domxpath/xml_xpath_runner.html [ Timeout Pass ]
-
 crbug.com/746128 [ Win7 Debug ] media/controls/video-enter-exit-fullscreen-without-hovering-doesnt-show-controls.html [ Failure ]
 crbug.com/746128 [ Mac ] media/controls/video-enter-exit-fullscreen-without-hovering-doesnt-show-controls.html [ Failure Pass ]
 
-# Sheriff failures 2017-08-04
-crbug.com/626703 [ Win7 Release ] external/wpt/html/semantics/tabular-data/processing-model-1/span-limits.html [ Timeout ]
-
 crbug.com/731018 [ Mac ] sensor/accelerometer.html [ Failure Pass Crash ]
 crbug.com/731018 [ Mac ] sensor/ambient-light-sensor.html [ Failure Pass Crash ]
 crbug.com/731018 [ Mac ] sensor/gyroscope.html [ Failure Pass Crash ]
@@ -4691,8 +4396,6 @@
 
 # Tests occasionaly timing out (flaky) on WebKit Win7 dbg builder
 crbug.com/757955 [ Win7 Debug ] http/tests/devtools/sources/debugger-pause/pause-on-elements-panel.js [ Pass Timeout ]
-crbug.com/757955 [ Win7 Debug ] storage/indexeddb/mozilla/cursors.html [ Pass Timeout ]
-crbug.com/757955 [ Win7 Debug ] storage/indexeddb/objectstore-cursor.html [ Pass Timeout ]
 crbug.com/757955 http/tests/devtools/tracing/timeline-paint/layer-tree.js [ Pass Failure Timeout ]
 
 # This test has a fixed number of time which can depend on performance.
@@ -4729,10 +4432,6 @@
 # Previous/NextWordPosition crossing editing boundaries.
 crbug.com/900060 editing/selection/mixed-editability-8.html [ Failure ]
 
-# Sheriff failures 2017-09-11
-crbug.com/763975 [ Mac Debug ] webaudio/internals/cycle-connection-gc.html [ Pass Failure ]
-crbug.com/763975 [ Linux Debug ] webaudio/internals/cycle-connection-gc.html [ Pass Failure ]
-
 # Sheriff failure 2017-09-18
 crbug.com/766404 [ Mac ] plugins/keyboard-events.html [ Pass Failure ]
 
@@ -4740,10 +4439,6 @@
 # This was previously skipped on Windows in the section for crbug.com/757165
 crbug.com/775957 virtual/gpu/fast/canvas/canvas-incremental-repaint.html [ Skip ]
 
-# Sheriff failures 2017-09-20
-# Fails reliably on last 3 builds of this bot.
-crbug.com/767091 [ Mac10.12 ] http/tests/security/link-crossorigin-preload-use-credentials.html [ Failure ]
-
 # Sheriff failures 2017-09-21
 crbug.com/767469 http/tests/navigation/start-load-during-provisional-loader-detach.html [ Pass Failure ]
 crbug.com/767469 virtual/stable/http/tests/navigation/start-load-during-provisional-loader-detach.html [ Pass Failure ]
@@ -4764,12 +4459,10 @@
 # Text rendering on Win7 failing image diffs, flakily.
 crbug.com/773122 [ Win7 ] fast/text/international/unicode-bidi-plaintext-in-textarea.html [ Failure Pass ]
 crbug.com/773122 [ Win7 ] fast/text/whitespace/022.html [ Failure Pass ]
-crbug.com/773122 [ Win7 ] fast/text/word-break.html [ Failure Pass ]
 
 # Sheriff failures 2017-10-13
 crbug.com/774463 [ Win7 Debug ] fast/events/autoscroll-should-not-stop-on-keypress.html [ Failure Pass ]
 crbug.com/774463 [ Win7 Debug ] virtual/mouseevent_fractional/fast/events/autoscroll-should-not-stop-on-keypress.html [ Failure Pass ]
-crbug.com/774688 [ Mac ] fast/spatial-navigation/snav-container-white-space.html [ Pass Failure ]
 
 # Sheriff failures 2017-10-23
 crbug.com/772411 http/tests/media/autoplay-crossorigin.html [ Timeout Failure Pass ]
@@ -4818,10 +4511,6 @@
 crbug.com/789478 virtual/prefer_compositing_to_lcd_text/scrollbars/custom-scrollbar-adjust-on-inactive-pseudo.html [ Pass Failure ]
 crbug.com/786641 virtual/gpu/fast/canvas/OffscreenCanvas-2d-imageSmoothing.html [ Pass Failure Timeout ]
 
-# Sheriff failures 2017-11-30
-crbug.com/789921 [ Win7 ] media/video-controls-overflow-menu-last-button-visible.html [ Pass Failure ]
-crbug.com/789921 [ Mac ] media/video-controls-overflow-menu-last-button-visible.html [ Pass Failure ]
-
 # Sheriff failures 2017-12-04
 crbug.com/667560 http/tests/devtools/elements/styles-4/inline-style-sourcemap.js [ Pass Failure ]
 
@@ -4858,9 +4547,7 @@
 
 # Sheriff failures 2018-01-02
 crbug.com/798592 [ Win7 ] http/tests/devtools/tracing/timeline-style/timeline-recalculate-styles.js [ Pass Failure ]
-crbug.com/798592 [ Mac ] http/tests/devtools/tracing/timeline-style/timeline-recalculate-styles.js [ Pass Failure ]
 crbug.com/798592 [ Win7 ] virtual/threaded/http/tests/devtools/tracing/timeline-style/timeline-recalculate-styles.js [ Pass Failure ]
-crbug.com/798592 [ Mac ] virtual/threaded/http/tests/devtools/tracing/timeline-style/timeline-recalculate-styles.js [ Pass Failure ]
 
 # Sheriff failures 2018-01-25
 # Flaking on Linux Tests, WebKit Linux Trusty (also ASAN, Leak)
@@ -4870,9 +4557,6 @@
 # Sheriff failures 2018-02-05
 crbug.com/809152 netinfo/estimate-multiple-frames.html [ Pass Failure ]
 
-# Sheriff failures 2018-02-07
-crbug.com/810009 [ Linux ] paint/invalidation/image/canvas-composite-repaint-by-all-imagesource.html [ Pass Timeout ]
-
 # Sheriff failures 2018-02-20
 crbug.com/789921 media/controls/repaint-on-resize.html [ Failure Pass ]
 
@@ -4923,7 +4607,6 @@
 
 # Sheriff 2018-03-02
 crbug.com/818076 http/tests/devtools/oopif/oopif-elements-navigate-in.js [ Failure Pass ]
-crbug.com/818154 [ Linux Debug ] virtual/gpu-rasterization/images/gif-loop-count.html [ Failure Pass ]
 
 # Sheriff 2018-03-05
 crbug.com/818650 [ Linux ] fast/speech/scripted/speechrecognition-restart-onend.html [ Crash Pass ]
@@ -4989,22 +4672,13 @@
 
 # Sheriff 2018-04-11
 crbug.com/831796 fast/events/autoscroll-in-textfield.html [ Failure Pass ]
-crbug.com/831685 [ Linux ] external/wpt/2dcontext/compositing/2d.composite.canvas.lighter.html [ Pass Timeout ]
 crbug.com/831673 http/tests/devtools/reveal-objects.js [ Pass Timeout ]
 crbug.com/831496 virtual/gpu/fast/canvas/fillrect_gradient.html [ Pass Timeout ]
-crbug.com/831482 [ Linux ] virtual/gpu-rasterization/images/cross-fade-background-size.html [ Pass Timeout ]
-crbug.com/831249 [ Linux ] virtual/gpu/fast/canvas/canvas-filter-svg-inline.html [ Pass Timeout ]
 crbug.com/829952 fast/webgl/texImage-imageBitmap-from-image-resize.html [ Pass Timeout ]
-crbug.com/829938 [ Linux ] css3/filters/blur-filter-page-scroll.html [ Pass Timeout ]
-crbug.com/818426 [ Linux ] virtual/gpu/fast/canvas/canvas-lost-gpu-context.html [ Pass Timeout ]
-crbug.com/800745 [ Linux ] virtual/gpu/fast/canvas/canvas-composite-video.html [ Pass Timeout ]
 
 crbug.com/832274 [ Linux ] fast/forms/search/search-appearance-basic.html [ Pass Failure ]
 crbug.com/832274 [ Win ] fast/forms/search/search-appearance-basic.html [ Pass Failure ]
 
-# Sheriff 2018-04-12
-crbug.com/831993 [ Linux ] virtual/gpu-rasterization/images/cross-fade-overflow-position.html [ Pass Timeout ]
-
 # Sheriff 2018-04-13
 crbug.com/833655 [ Linux ] media/controls/closed-captions-dynamic-update.html [ Skip ]
 crbug.com/833658 [ Linux ] media/video-controls-focus-movement-on-hide.html [ Pass Failure ]
@@ -5030,7 +4704,6 @@
 # Merged failing devtools/editor tests.
 crbug.com/749738 http/tests/devtools/editor/text-editor-word-jumps.js [ Timeout Pass ]
 crbug.com/846997 http/tests/devtools/editor/text-editor-ctrl-d-1.js [ Timeout Pass ]
-crbug.com/849284 [ Mac ] http/tests/devtools/editor/text-editor-ctrl-d-2.js [ Timeout Pass ]
 crbug.com/846982 http/tests/devtools/editor/text-editor-formatter.js [ Timeout Pass ]
 crbug.com/846981 fast/webgl/texImage-imageBitmap-from-imageData-resize.html [ Pass Timeout ]
 ### See crbug.com/891427 comment near the top of this file:
@@ -5079,8 +4752,6 @@
 crbug.com/853360 [ Mac ] fast/forms/calendar-picker/calendar-picker-appearance-required-ar.html [ Failure ]
 crbug.com/853360 [ Mac ] fast/forms/calendar-picker/month-picker-appearance-step.html [ Failure ]
 crbug.com/853360 [ Mac ] fast/forms/calendar-picker/week-picker-appearance.html [ Failure ]
-crbug.com/853360 [ Mac10.13 ] http/tests/eventsource/workers/eventsource-cors-no-server.html [ Failure ]
-crbug.com/853360 [ Mac ] http/tests/media/controls/toggle-class-with-state-source.html [ Pass Timeout ]
 crbug.com/853360 [ Mac ] http/tests/misc/slow-loading-image-in-pattern.html [ Pass Timeout Failure ]
 crbug.com/853360 [ Mac ] paint/invalidation/media-audio-no-spurious-repaints.html [ Failure ]
 crbug.com/853360 [ Mac ] tables/mozilla/bugs/bug30692.html [ Failure ]
@@ -5101,10 +4772,6 @@
 #   they can be run via virtual/origin-policy instead.
 crbug.com/751996 external/wpt/origin-policy [ Skip ]
 
-# Sheriff 2018-06-18
-crbug.com/853852 [ Win7 ] virtual/threaded/external/wpt/feature-policy/experimental-features/vertical-scroll-wheel-block-manual.tentative.html [ Pass Timeout ]
-crbug.com/853852 [ Linux ] virtual/threaded/external/wpt/feature-policy/experimental-features/vertical-scroll-wheel-block-manual.tentative.html [ Pass Timeout ]
-
 crbug.com/854538 [ Win7 ] http/tests/security/contentSecurityPolicy/1.1/form-action-src-default-ignored-with-redirect.html [ Skip ]
 
 # Sheriff 2018-06-21
@@ -5114,9 +4781,6 @@
 # Sheriff 2018-06-25
 crbug.com/855816 [ Win ] virtual/stable/http/tests/navigation/rename-subframe-goback.html [ Pass Timeout ]
 
-# Sheriff 2018-06-29
-crbug.com/859169 [ Linux Debug ] http/tests/devtools/layers/layer-scroll-rects-get.js [ Failure Pass ]
-
 # User Activation
 crbug.com/736415 external/wpt/html/user-activation/activation-api-iframe.tenative.html [ Failure ]
 
@@ -5127,7 +4791,6 @@
 # Other timeouts
 crbug.com/818324 [ Linux ] external/wpt/content-security-policy/embedded-enforcement/required_csp-header.html [ Timeout Pass ]
 crbug.com/818324 [ Mac ] external/wpt/content-security-policy/embedded-enforcement/required_csp-header.html [ Timeout Pass ]
-crbug.com/818324 [ Win7 ] external/wpt/content-security-policy/embedded-enforcement/required_csp-header.html [ Timeout Pass ]
 
 # S13N Sheriff 2018-7-11
 crbug.com/862643 http/tests/serviceworker/navigation_preload/use-counter.html [ Failure Pass ]
@@ -5141,23 +4804,7 @@
 # Sheriff 2018-07-18
 crbug.com/864994 [ Mac ] external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc_5601.html [ Timeout Failure Pass ]
 
-crbug.com/865432 [ Linux ] external/wpt/workers/modules/dedicated-worker-import-blob-url.any.worker.html [ Timeout Pass ]
-crbug.com/865432 [ Linux ] virtual/omt-worker-fetch/external/wpt/workers/modules/dedicated-worker-import-blob-url.any.worker.html [ Timeout Pass ]
-
-crbug.com/867532 [ Linux ] external/wpt/workers/modules/dedicated-worker-import-data-url.any.worker.html [ Timeout Pass ]
-crbug.com/867532 [ Linux ] external/wpt/workers/modules/dedicated-worker-import.any.worker.html [ Timeout Pass ]
-crbug.com/867532 [ Linux ] virtual/omt-worker-fetch/external/wpt/workers/modules/dedicated-worker-import-data-url.any.worker.html [ Timeout Pass ]
-crbug.com/867532 [ Linux ] virtual/omt-worker-fetch/external/wpt/workers/modules/dedicated-worker-import.any.worker.html [ Timeout Pass ]
-
 # Sheriff 2018-07-26
-crbug.com/867376 [ Mac ] css3/filters/filter-repaint-composited-fallback-crash.html [ Timeout Pass ]
-crbug.com/867376 [ Linux ] css3/filters/filter-repaint-composited-fallback-crash.html [ Timeout Pass ]
-crbug.com/867376 [ Mac ] external/wpt/encoding/textdecoder-fatal-single-byte.any.html [ Timeout Pass ]
-crbug.com/867376 [ Mac ] http/tests/devtools/elements/elements-inspect-iframe-from-different-domain.js [ Timeout Pass ]
-crbug.com/867376 [ Mac ] http/tests/devtools/elements/css-variables/resolve-inherited-css-variables.js [ Timeout Pass ]
-crbug.com/867376 [ Linux ] virtual/gpu/fast/canvas/canvas-blending-image-over-color.html [ Timeout Pass ]
-crbug.com/867376 [ Linux ] virtual/gpu/fast/canvas/canvas-blending-image-over-image.html [ Timeout Pass ]
-crbug.com/867376 [ Linux ] virtual/gpu-rasterization/images/color-profile-mask-image-svg.html [ Timeout Pass ]
 crbug.com/867982 [ Debug ] external/wpt/requestidlecallback/basic.html [ Timeout Pass ]
 crbug.com/882756 [ Debug ] external/wpt/requestidlecallback/cancel-invoked.html [ Timeout Pass ]
 
@@ -5276,7 +4923,6 @@
 crbug.com/824539 [ Android ] tables/mozilla_expected_failures/bugs/bug1055-2.html [ Failure Timeout ]
 crbug.com/824539 [ Android ] tables/mozilla_expected_failures/bugs/bug2479-5.html [ Failure Timeout ]
 crbug.com/824539 [ Android ] transforms/transformed-caret.html [ Failure Timeout ]
-crbug.com/824539 [ Android ] virtual/layout_ng/fast/block/margin-collapse/019.html [ Crash Failure Timeout ]
 
 # Sheriff 2018-07-30
 crbug.com/866166 virtual/gpu-rasterization/images/color-profile-image-filter-all.html [ Pass Timeout ]
@@ -5290,22 +4936,12 @@
 
 # Sheriff 2018-08-01
 crbug.com/869773 http/tests/misc/window-dot-stop.html [ Pass Failure ]
-crbug.com/862806 [ Linux ] css3/filters/effect-drop-shadow-hw.html [ Pass Timeout ]
-
-# Sheriff 2018-08-08
-crbug.com/871105 [ Linux ] svg/dom/remove-use-target-element-indirectly.html [ Pass Crash ]
-crbug.com/872025 [ Mac ] fast/css-grid-layout/crash-large-positions.html [ Pass Timeout ]
-crbug.com/872025 [ Linux ] fast/css-grid-layout/crash-large-positions.html [ Pass Timeout ]
-
-# Only passes on bots with GPUs.
-crbug.com/871445 [ Mac ] http/tests/media/video-load-metadata-decode-error.html [ Timeout ]
 
 crbug.com/873873 external/wpt/service-workers/service-worker/fetch-canvas-tainting-video.https.html [ Timeout Pass ]
 crbug.com/873873 external/wpt/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html [ Timeout Pass ]
 
 crbug.com/875884 [ Linux ] lifecycle/background-change-lifecycle-count.html [ Pass Failure ]
 crbug.com/875884 [ Win ] lifecycle/background-change-lifecycle-count.html [ Pass Failure ]
-crbug.com/875884 [ Linux ] virtual/threaded/lifecycle/background-change-lifecycle-count.html [ Pass Failure ]
 crbug.com/875884 [ Win ] virtual/threaded/lifecycle/background-change-lifecycle-count.html [ Pass Failure ]
 
 # Sheriff 2018-08-16
@@ -5362,9 +4998,6 @@
 # Does not set correct realm as scope in current implementation
 crbug.com/872138 external/wpt/client-hints/accept_ch.tentative.https.html [ Timeout Pass ]
 
-# Flaky
-crbug.com/878315 [ Mac ] virtual/threaded/fast/scroll-behavior/overscroll-behavior.html [ Pass Failure ]
-
 crbug.com/898186 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-intrinsic-ratio-003v.html [ Pass Failure ]
 
 # Sheriff 2018-09-10
@@ -5391,7 +5024,6 @@
 
 # Sheriff 2018-09-19
 crbug.com/662010 [ Win7 ] http/tests/csspaint/invalidation-background-image.html [ Skip ]
-crbug.com/886566 [ Linux ] http/tests/csspaint/invalidation-background-image.html [ Pass Timeout ]
 crbug.com/886566 [ Win10 ] http/tests/csspaint/invalidation-background-image.html [ Pass Timeout ]
 crbug.com/886566 [ Mac ] http/tests/csspaint/invalidation-background-image.html [ Pass Timeout ]
 crbug.com/886566 [ Android ] http/tests/csspaint/invalidation-background-image.html [ Pass Timeout ]
@@ -5403,11 +5035,8 @@
 
 # Sheriff 2018-10-03
 crbug.com/891530 [ Linux ] virtual/android/rootscroller/remove-rootscroller-crash.html [ Pass Timeout ]
-crbug.com/891510 [ Linux ] fast/dom/inline-event-attributes-release.html [ Failure Pass ]
-crbug.com/891510 [ Win7 ] fast/dom/inline-event-attributes-release.html [ Failure Pass ]
 
 # Sheriff 2018-10-09
-crbug.com/893869 [ Linux ] css3/masking/mask-repeat-space-padding.html [ Failure Pass ]
 crbug.com/893869 [ Mac ] css3/masking/mask-repeat-space-padding.html [ Failure Pass ]
 
 # Sheriff 2018-10-12
@@ -5416,15 +5045,12 @@
 
 # Sheriff 2018-10-15
 crbug.com/895257 [ Mac ] external/wpt/css/css-fonts/variations/at-font-face-font-matching.html [ Failure Pass ]
-crbug.com/891155 [ Linux ] fast/events/middleClickAutoscroll-event-fired.html [ Failure Pass ]
-crbug.com/891155 [ Linux ] fast/events/middleClickAutoscroll-drag.html [ Failure Pass ]
 
 # run_web_tests.py crashes content_shell when <link href="about:blank"> is present
 crbug.com/895777 external/wpt/css/css-transforms/text-perspective-001.html [ Pass Crash ]
 crbug.com/895777 external/wpt/infrastructure/assumptions/blank.html [ Failure Crash ]
 
 #Sheriff 2018-10-23
-crbug.com/898050 [ Mac ] fast/workers/taskqueue/basic.html [ Pass Timeout ]
 crbug.com/898050 [ Win ] fast/workers/taskqueue/basic.html [ Pass Timeout ]
 crbug.com/898378 [ Mac10.13 ] fast/scroll-behavior/smooth-scroll/keyboard-scroll.html [ Timeout ]
 
@@ -5439,9 +5065,7 @@
 
 
 # Sheriff 2018-10-29
-crbug.com/899710 [ Linux ] virtual/threaded/http/tests/devtools/tracing/timeline-paint/timeline-paint-with-layout-invalidations.js [ Failure Pass Timeout ]
 crbug.com/899710 [ Win ] virtual/threaded/http/tests/devtools/tracing/timeline-paint/timeline-paint-with-layout-invalidations.js [ Failure Pass Timeout ]
-crbug.com/766357 [ Mac ] virtual/threaded/fast/scroll-behavior/wheel-and-touch-scroll-use-count.html [ Failure Pass ]
 crbug.com/766357 [ Win ] virtual/threaded/fast/scroll-behavior/wheel-and-touch-scroll-use-count.html [ Failure Pass ]
 
 # Sheriff 2018-10-30
@@ -5450,11 +5074,6 @@
 crbug.com/899222 [ Linux ] virtual/scroll_customization/fast/events/touch/gesture/gesture-scrollbar-touchscreen-fling.html [ Failure Pass ]
 crbug.com/899222 [ Win ] virtual/scroll_customization/fast/events/touch/gesture/gesture-scrollbar-touchscreen-fling.html [ Failure Pass ]
 
-# Sheriff 2018-10-31
-crbug.com/900326 [ Win7 ] http/tests/devtools/network/preview-searchable.js [ Timeout Pass ]
-crbug.com/900326 [ Mac10.12 ] http/tests/devtools/network/preview-searchable.js [ Timeout Pass ]
-crbug.com/900730 [ Mac ] rootscroller/gesture-scroll-document-not-root-scroller.html [ Pass Failure Timeout Crash ]
-
 # ecosystem-infra sheriff 2018-11-02, 2019-03-18
 crbug.com/901271 external/wpt/dom/events/Event-dispatch-on-disabled-elements.html [ Pass Failure Timeout ]
 
@@ -5469,7 +5088,6 @@
 crbug.com/904389 http/tests/preload/delaying_onload_link_preload_after_discovery.html [ Failure Pass ]
 
 #Sheriff 2018-11-14
-crbug.com/905694 [ Linux ] virtual/threaded/fast/scroll-behavior/smooth-scroll/scroll-during-selection.html [ Failure Pass Crash ]
 crbug.com/905827 fast/dom/StyleSheet/stylesheet-move-between-documents-crash.html [ Skip ]
 
 # Flaky crash due to "bad mojo message".
@@ -5498,7 +5116,6 @@
 
 #Sheriff 2018-12-04
 crbug.com/911515 [ Mac ] transforms/shadows.html [ Pass Failure ]
-crbug.com/911634 [ Linux ] fast/events/touch/gesture/touch-gesture-scroll-input-field.html [ Pass Failure ]
 crbug.com/911782 [ Mac ] paint/invalidation/forms/submit-focus-by-mouse-then-keydown.html [ Pass Failure ]
 
 # Sheriff 2018-12-06
@@ -5516,7 +5133,6 @@
 crbug.com/914782 [ Linux ] fast/scrolling/no-hover-during-scroll.html [ Pass Failure ]
 
 # Sheriff 2018-12-14
-crbug.com/914782 [ Linux ] virtual/fractional_scrolling/fast/scrolling/no-hover-during-scroll.html [ Pass Failure ]
 crbug.com/914782 [ Linux ] virtual/scroll_customization/fast/scrolling/no-hover-during-scroll.html [ Pass Failure ]
 crbug.com/913931 [ Mac10.11 ] external/wpt/css/css-layout-api/auto-block-size-absolute.https.html [ Pass Failure ]
 
@@ -5674,9 +5290,6 @@
 crbug.com/961015 [ Mac ] external/wpt/webxr/xrSession_requestAnimationFrame_callback_calls.https.html [ Timeout ]
 crbug.com/961015 [ Mac ] external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https.html [ Timeout ]
 
-# Sheriff 2019-01-25
-crbug.com/925325 [ Mac ] storage/indexeddb/index-population.html [ Pass Failure ]
-
 # Sheriff 2019-02-01, 2019-02-19
 # These are crashy on Win10, and seem to leave processes lying around, causing the swarming
 # task to hang.
@@ -5686,11 +5299,7 @@
 
 # Flay probably due to outstanding work for FeaturePolicyForSandbox.
 
-# Sheriff 2019-02-06
-crbug.com/929435 [ Mac ] external/wpt/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html [ Pass Failure ]
-
 # Sheriff 2019-02-12
-crbug.com/931349 [ Mac ] fast/events/popup-blocking-timers5.html [ Failure Timeout Pass ]
 crbug.com/931349 [ Mac ] media/video-played-ranges-1.html [ Failure Timeout Pass ]
 
 # Viz on Android causes issues due to synchronization of view / renderer sizes.
@@ -5719,8 +5328,6 @@
 
 # Sheriff 2019-02-22
 crbug.com/934636 http/tests/security/cross-origin-indexeddb-allowed.html [ Crash Pass ]
-crbug.com/934768 [ Mac ] http/tests/devtools/tracing/worker-events.js [ Failure Pass ]
-crbug.com/934768 [ Mac ] virtual/threaded/http/tests/devtools/tracing/worker-events.js [ Failure Pass ]
 crbug.com/934818 virtual/threaded/http/tests/devtools/tracing/decode-resize.js [ Failure Pass ]
 
 # Sheriff 2019-02-25
@@ -5738,7 +5345,6 @@
 
 # Sheriff 2019-02-27
 crbug.com/936279 external/wpt/import-maps/fallback-disallowed.sub.tentative.html [ Failure Pass Timeout ]
-crbug.com/936479 [ Mac10.13 ] http/tests/devtools/sources/debugger/async-callstack-fetch.js [ Failure Crash Pass ]
 crbug.com/936615 [ Win7 ] external/wpt/kv-storage/values.https.html [ Timeout Pass ]
 
 # Device Sensor Events were restricted to secure browsing contexts in M74, with a flag available until M76 to undo the change in case of an emergency.
@@ -5760,14 +5366,9 @@
 crbug.com/915352 [ Mac10.10 Mac10.11 ] virtual/threaded/external/wpt/animation-worklet/worklet-animation-with-scroll-timeline-and-display-none.https.html [ Pass Failure ]
 
 # Sheriff 2019-03-01
-crbug.com/937170 [ Linux Win7 ] external/wpt/IndexedDB/interleaved-cursors-large.html [ Pass Timeout Crash ]
-crbug.com/937312 [ Win7 ] external/wpt/background-fetch/fetch.https.window.html [ Pass Timeout ]
 crbug.com/864994 [ Linux Win7 ] external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc_5601.html [ Timeout Failure Pass ]
 crbug.com/937416 http/tests/devtools/resource-tree/resource-tree-htmlimports.js [ Pass Failure ]
 crbug.com/937416 http/tests/devtools/resource-tree/resource-tree-frame-navigate.js [ Pass Failure ]
-crbug.com/937546 [ Win7 ] http/tests/security/xss-DENIED-cross-origin-stack-overflow.html [ Pass Timeout ]
-# Sheriff 2019-03-02
-crbug.com/937639 [ Linux Debug ] external/wpt/html/browsers/browsing-the-web/read-media/pageload-image-in-popup.html [ Pass Failure ]
 
 # Sheriff 2019-03-04
 crbug.com/937811 [ Linux Release ] http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-2.js [ Pass Failure ]
@@ -5777,15 +5378,11 @@
 crbug.com/935689 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/counter-styles-3/symbols-function.html [ Failure Pass ]
 crbug.com/937858 [ Debug ] external/wpt/ambient-light/AmbientLightSensor.https.html [ Pass Failure ]
 crbug.com/937902 [ Linux Debug ] virtual/disable-blink-gen-property-trees/compositing/overflow/overflow-scroll-with-local-background.html [ Pass Failure ]
-crbug.com/937991 [ Win7 Release ] http/tests/devtools/cache-storage/cache-data.js [ Pass Timeout ]
 
 # Sheriff 2019-03-05
 crbug.com/938200 http/tests/devtools/network/network-blocked-reason.js [ Timeout Pass ]
 crbug.com/938780 [ Mac10.10 Mac10.11 ] virtual/threaded/external/wpt/animation-worklet/worklet-animation-with-scroll-timeline-root-scroller.https.html [ Pass Failure ]
 
-# Sheriff 2019-03-06
-crbug.com/938591 [ Linux ] fast/events/middleClickAutoscroll-nested-divs-forbidden.html [ Failure Pass ]
-
 # Caused a revert of a good change.
 crbug.com/931533 media/video-played-collapse.html [ Pass Failure ]
 
@@ -5852,7 +5449,6 @@
 
 # Sheriff 2019-03-27
 crbug.com/835943 [ Release ] http/tests/appcache/non-html.xhtml [ Crash Pass Failure Timeout ]
-crbug.com/946323 [ Mac ] editing/caret/caret-painting-low-dpi.html [ Failure Pass ]
 
 # Sheriff 2019-03-28
 crbug.com/946890 external/wpt/html/semantics/embedded-content/media-elements/location-of-the-media-resource/currentSrc.html [ Failure Pass Crash ]
@@ -5860,12 +5456,10 @@
 crbug.com/946719 http/tests/serviceworker/resolve-after-window-close.html [ Crash Pass ]
 crbug.com/946714 [ Release ] http/tests/devtools/elements/styles-4/styles-live-locations-leak.js [ Pass Timeout ]
 crbug.com/946699 [ Release ] http/tests/devtools/network/network-filter-service-worker.js [ Pass Timeout ]
-crbug.com/946700 [ Win7 Release ] http/tests/devtools/coverage/decorations-after-script-formatter.js [ Pass Timeout ]
 crbug.com/946711 [ Release ] http/tests/devtools/editor/text-editor-search-switch-editor.js [ Crash Pass Timeout ]
 crbug.com/946712 [ Release ] http/tests/devtools/elements/styles-2/paste-property.js [ Crash Pass Timeout ]
 crbug.com/946713 [ Release ] http/tests/devtools/extensions/extensions-resources.js [ Crash Pass Timeout ]
 crbug.com/848799 [ Win7 ] http/tests/devtools/coverage/multiple-instances-merge.js [ Pass Timeout ]
-crbug.com/942411 [ Win7 Linux ] http/tests/devtools/network/network-search.js [ Pass Timeout ]
 crbug.com/947383 inspector-protocol/css/reattach-after-editing-styles.js [ Pass Timeout ]
 
 ### external/wpt/fetch/sec-metadata/
@@ -5888,14 +5482,6 @@
 crbug.com/949444 [ Mac10.13 Debug ] virtual/mouseevent_fractional/fast/events/sequential-focus-navigation-starting-point.html [ Pass Crash ]
 crbug.com/949445 [ Mac ] fast/forms/text/input-text-scroll-left-on-blur.html [ Failure ]
 
-# Sheriff 2019-04-05
-crbug.com/ [ Win7 ] virtual/streams-native/http/tests/fetch/serviceworker/referrer-base-https-other-https.html [ Pass Timeout ]
-
-# Sheriff 2019-04-08
-crbug.com/946701 [ Win7 ] virtual/streams-native/http/tests/fetch/serviceworker-proxied/thorough/auth-base-https-other-https.html [ Pass Timeout ]
-crbug.com/950222 [ Win7 ] virtual/streams-native/http/tests/fetch/serviceworker-proxied/thorough/auth.html [ Pass Timeout ]
-crbug.com/947670 [ Win7 ] virtual/streams-native/http/tests/fetch/serviceworker-proxied/thorough/cors-preflight2-base-https-other-https.html [ Pass Timeout ]
-
 # Sheriff 2019-04-09
 crbug.com/946335 [ Linux Mac ] fast/filesystem/file-writer-abort-depth.html [ Pass Crash ]
 
@@ -5905,7 +5491,6 @@
 crbug.com/951638 [ Win7 ] virtual/mouseevent_fractional/fast/events/mouse-right-coords-in-zoom-and-scroll-right.html [ Pass Failure ]
 
 # Sheriff 2019-04-11
-crbug.com/951811 [ Mac10.13 ] external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-top-left.html [ Pass Timeout ]
 crbug.com/802029 [ Mac10.13 Debug ] fast/dom/shadow/focus-controller-recursion-crash.html [ Pass Timeout ]
 
 # Sheriff 2019-04-15
@@ -5971,3 +5556,6 @@
 
 # Sheriff 2019-05-10
 crbug.com/960623 [ Win ] http/tests/misc/resource-timing-sizes-multipart.html [ Pass Failure ]
+
+# This test might need to be removed.
+crbug.com/954349 fast/forms/autofocus-in-sandbox-with-allow-scripts.html [ Timeout ]
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites
index 04913032..61a053e 100644
--- a/third_party/blink/web_tests/VirtualTestSuites
+++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -338,66 +338,6 @@
     "args": ["--force-device-scale-factor=1.5"]
   },
   {
-    "prefix": "layout_ng",
-    "base": "fast/block/basic",
-    "args": ["--enable-blink-features=LayoutNG"]
-  },
-  {
-    "prefix": "layout_ng",
-    "base": "fast/block/margin-collapse",
-    "args": ["--enable-blink-features=LayoutNG"]
-  },
-  {
-    "prefix": "layout_ng",
-    "base": "fast/block/float",
-    "args": ["--enable-blink-features=LayoutNG"]
-  },
-  {
-    "prefix": "layout_ng",
-    "base": "external/wpt/css/CSS2/linebox",
-    "args": ["--enable-blink-features=LayoutNG"]
-  },
-  {
-    "prefix": "layout_ng",
-    "base": "external/wpt/css/CSS2/normal-flow",
-    "args": ["--enable-blink-features=LayoutNG"]
-  },
-  {
-    "prefix": "layout_ng",
-    "base": "external/wpt/css/CSS2/abspos",
-    "args": ["--enable-blink-features=LayoutNG"]
-  },
-  {
-    "prefix": "layout_ng",
-    "base": "external/wpt/css/CSS2/positioning",
-    "args": ["--enable-blink-features=LayoutNG"]
-  },
-  {
-    "prefix": "layout_ng",
-    "base": "external/wpt/css/CSS2/floats",
-    "args": ["--enable-blink-features=LayoutNG"]
-  },
-  {
-    "prefix": "layout_ng",
-    "base": "external/wpt/css/CSS2/floats-clear",
-    "args": ["--enable-blink-features=LayoutNG"]
-  },
-  {
-    "prefix": "layout_ng",
-    "base": "overflow",
-    "args": ["--enable-blink-features=LayoutNG"]
-  },
-  {
-    "prefix": "layout_ng",
-    "base": "fast/inline",
-    "args": ["--enable-blink-features=LayoutNG"]
-  },
-  {
-    "prefix": "layout_ng",
-    "base": "fast/writing-mode",
-    "args": ["--enable-blink-features=LayoutNG"]
-  },
-  {
     "prefix": "layout_ng_experimental",
     "base": "external/wpt/css/css-multicol",
     "args": ["--enable-blink-features=LayoutNGBlockFragmentation"]
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_sequence_at_implicit_release_on_drag.html b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_sequence_at_implicit_release_on_drag.html
index 88d5eed..9b1de227 100644
--- a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_sequence_at_implicit_release_on_drag.html
+++ b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_sequence_at_implicit_release_on_drag.html
@@ -56,7 +56,7 @@
 
         // Inject touch inputs.
         pointerDragInTarget("touch", target, 'right').then(function() {
-          return touchTapInTarget(button);
+          return clickInTarget("touch", button);
         }).then(function() {
           test_pointer_event.step(function () {
             assert_true(clickIsReceived, "click should be received before the test finishes");
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_support.js b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_support.js
index 44dba45..9a491dd6 100644
--- a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_support.js
+++ b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_support.js
@@ -286,9 +286,10 @@
                    .send();
 }
 
-function touchTapInTarget(target) {
+function clickInTarget(pointerType, target) {
+    var pointerId = pointerType + "Pointer1";
     return new test_driver.Actions()
-                   .addPointer("pointer1", "touch")
+                   .addPointer(pointerId, pointerType)
                    .pointerMove(0, 0, {origin: target})
                    .pointerDown()
                    .pointerUp()
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-inherit_child-auto-child-none_touch.html b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-inherit_child-auto-child-none_touch.html
index ae2373c3..f05aadf 100644
--- a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-inherit_child-auto-child-none_touch.html
+++ b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-inherit_child-auto-child-none_touch.html
@@ -115,7 +115,7 @@
                 touchScrollInTarget(scrollTarget, 'down').then(function() {
                     return touchScrollInTarget(scrollTarget, 'right');
                 }).then(function() {
-                    return touchTapInTarget(btnComplete);
+                    return clickInTarget("touch", btnComplete);
                 }).then(function() {
                     test_touchaction.step(function () {
                         assert_true(clickIsReceived, "click should be received before the test finishes");
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-inherit_child-none_touch.html b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-inherit_child-none_touch.html
index 81f0ea6..4f9e75d 100644
--- a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-inherit_child-none_touch.html
+++ b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-inherit_child-none_touch.html
@@ -110,7 +110,7 @@
                 touchScrollInTarget(scrollTarget, 'down').then(function() {
                     return touchScrollInTarget(scrollTarget, 'right');
                 }).then(function() {
-                    return touchTapInTarget(btnComplete);
+                    return clickInTarget("touch", btnComplete);
                 }).then(function() {
                     test_touchaction.step(function () {
                         assert_true(clickIsReceived, "click should be received before the test finishes");
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-x_touch.html b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-x_touch.html
index 775708d4..62fc8c22 100644
--- a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-x_touch.html
+++ b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-x_touch.html
@@ -110,7 +110,7 @@
                 touchScrollInTarget(scrollTarget, 'down').then(function() {
                     return touchScrollInTarget(scrollTarget, 'right');
                 }).then(function() {
-                    return touchTapInTarget(btnComplete);
+                    return clickInTarget("touch", btnComplete);
                 }).then(function() {
                     test_touchaction.step(function () {
                         assert_true(clickIsReceived, "click should be received before the test finishes");
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-y_touch.html b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-y_touch.html
index 592cfd6..704b41889 100644
--- a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-y_touch.html
+++ b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-y_touch.html
@@ -115,7 +115,7 @@
                 touchScrollInTarget(scrollTarget, 'down').then(function() {
                     return touchScrollInTarget(scrollTarget, 'right');
                 }).then(function() {
-                    return touchTapInTarget(btnComplete);
+                    return clickInTarget("touch", btnComplete);
                 }).then(function() {
                     test_touchaction.step(function () {
                         assert_true(clickIsReceived, "click should be received before the test finishes");
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-inherit_parent-none_touch.html b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-inherit_parent-none_touch.html
index 45ea143..d525fe6 100644
--- a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-inherit_parent-none_touch.html
+++ b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-inherit_parent-none_touch.html
@@ -110,7 +110,7 @@
                 touchScrollInTarget(scrollTarget, 'down').then(function() {
                     return touchScrollInTarget(scrollTarget, 'right');
                 }).then(function() {
-                    return touchTapInTarget(btnComplete);
+                    return clickInTarget("touch", btnComplete);
                 }).then(function() {
                     test_touchaction.step(function () {
                         assert_true(clickIsReceived, "click should be received before the test finishes");
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-none-css_touch.html b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-none-css_touch.html
index cc96024..5e963ab 100644
--- a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-none-css_touch.html
+++ b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-none-css_touch.html
@@ -109,7 +109,7 @@
                 touchScrollInTarget(target0, 'down').then(function() {
                     return touchScrollInTarget(target0, 'right');
                 }).then(function() {
-                    return touchTapInTarget(btnComplete);
+                    return clickInTarget("touch", btnComplete);
                 }).then(function() {
                     test_touchaction.step(function () {
                         assert_true(clickIsReceived, "click should be received before the test finishes");
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-pan-x-css_touch.html b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-pan-x-css_touch.html
index a91f1f5..ebdc180 100644
--- a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-pan-x-css_touch.html
+++ b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-pan-x-css_touch.html
@@ -104,7 +104,7 @@
                 touchScrollInTarget(target0, 'down').then(function() {
                     return touchScrollInTarget(target0, 'right');
                 }).then(function() {
-                    return touchTapInTarget(btnComplete);
+                    return clickInTarget("touch", btnComplete);
                 }).then(function() {
                     test_touchaction.step(function () {
                         assert_true(clickIsReceived, "click should be received before the test finishes");
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-pan-x-pan-y-pan-y_touch.html b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-pan-x-pan-y-pan-y_touch.html
index d056eb9..ef59c99 100644
--- a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-pan-x-pan-y-pan-y_touch.html
+++ b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-pan-x-pan-y-pan-y_touch.html
@@ -109,7 +109,7 @@
                 touchScrollInTarget(target0, 'down').then(function() {
                     return touchScrollInTarget(target0, 'right');
                 }).then(function() {
-                    return touchTapInTarget(btnComplete);
+                    return clickInTarget("touch", btnComplete);
                 }).then(function() {
                     test_touchaction.step(function () {
                         assert_true(clickIsReceived, "click should be received before the test finishes");
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-pan-y-css_touch.html b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-pan-y-css_touch.html
index 98168755..b6444ed 100644
--- a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-pan-y-css_touch.html
+++ b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-pan-y-css_touch.html
@@ -105,7 +105,7 @@
                 touchScrollInTarget(target0, 'down').then(function() {
                     return touchScrollInTarget(target0, 'right');
                 }).then(function() {
-                    return touchTapInTarget(btnComplete);
+                    return clickInTarget("touch", btnComplete);
                 }).then(function() {
                     test_touchaction.step(function () {
                         assert_true(clickIsReceived, "click should be received before the test finishes");
diff --git a/third_party/blink/web_tests/external/wpt/sms/constructor.tentative.https.any.js b/third_party/blink/web_tests/external/wpt/sms/constructor.tentative.https.any.js
index 0c9a62c..321e5510 100644
--- a/third_party/blink/web_tests/external/wpt/sms/constructor.tentative.https.any.js
+++ b/third_party/blink/web_tests/external/wpt/sms/constructor.tentative.https.any.js
@@ -56,5 +56,5 @@
 }, 'constructor uses a default value for the timeout when none is passed');
 
 promise_test(async t => {
-  new IdleDetector({timeout: undefined});
+  new SMSReceiver({timeout: undefined});
 }, 'constructor uses a default value for the timeout');
diff --git a/third_party/blink/web_tests/external/wpt/sms/resources/iframe.html b/third_party/blink/web_tests/external/wpt/sms/resources/iframe.html
new file mode 100644
index 0000000..44410e8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/sms/resources/iframe.html
@@ -0,0 +1,8 @@
+<script>
+'use strict';
+
+new SMSReceiver().start().catch(error => {
+  window.parent.postMessage({errorType: error.name}, '*');
+});
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/sms/sms-top-level-frame-only.https.html b/third_party/blink/web_tests/external/wpt/sms/sms-top-level-frame-only.https.html
new file mode 100644
index 0000000..ba6374e85
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/sms/sms-top-level-frame-only.https.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<body>
+
+<script>
+'use strict';
+
+promise_test(async t => {
+  const messageWatcher = new EventWatcher(t, window, "message");
+  var iframe = document.createElement("iframe");
+  iframe.src = "resources/iframe.html"
+  document.body.appendChild(iframe);
+
+  const message = await messageWatcher.wait_for("message");
+  assert_equals(message.data.errorType, "NotAllowedError");
+
+}, "Test SMSReceiver API disabled in iframes");
+
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/sms/sms_receiver.idl b/third_party/blink/web_tests/external/wpt/sms/sms_receiver.idl
index 8166c444..bc6fb1d 100644
--- a/third_party/blink/web_tests/external/wpt/sms/sms_receiver.idl
+++ b/third_party/blink/web_tests/external/wpt/sms/sms_receiver.idl
@@ -1,7 +1,6 @@
 [
   SecureContext,
-  Exposed=(Window,DedicatedWorker),
-  RuntimeEnabled=SmsRetrieval]
+  Exposed=(Window,DedicatedWorker)]
 interface SMS {
   readonly attribute DOMString content;
 };
@@ -18,4 +17,4 @@
   readonly attribute SMS sms;
   attribute EventHandler onchange;
   Promise<void> start();
-};
\ No newline at end of file
+};
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/css2.1/t090501-c414-flt-ln-00-d-expected.png b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/css2.1/t090501-c414-flt-ln-00-d-expected.png
index 990a4d5..6ffe291 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/css2.1/t090501-c414-flt-ln-00-d-expected.png
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/css2.1/t090501-c414-flt-ln-00-d-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/css2.1/t090501-c414-flt-ln-02-d-expected.png b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/css2.1/t090501-c414-flt-ln-02-d-expected.png
index 32072ed4..c6db0860 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/css2.1/t090501-c414-flt-ln-02-d-expected.png
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/css2.1/t090501-c414-flt-ln-02-d-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/css2.1/t090501-c414-flt-ln-03-d-expected.png b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/css2.1/t090501-c414-flt-ln-03-d-expected.png
index 597e527c..350af9f 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/css2.1/t090501-c414-flt-ln-03-d-expected.png
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/css2.1/t090501-c414-flt-ln-03-d-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/http/tests/credentialmanager/credentialscontainer-create-basics.html b/third_party/blink/web_tests/http/tests/credentialmanager/credentialscontainer-create-basics.html
index 3cb85506..471820b 100644
--- a/third_party/blink/web_tests/http/tests/credentialmanager/credentialscontainer-create-basics.html
+++ b/third_party/blink/web_tests/http/tests/credentialmanager/credentialscontainer-create-basics.html
@@ -36,6 +36,21 @@
 }, "Verify that invalid domain error returned by mock is properly handled.");
 
 promise_test(t => {
+    mockAuthenticator.setAuthenticatorStatus(
+        blink.mojom.AuthenticatorStatus.ABORT_ERROR);
+    return promise_rejects(t, "AbortError",
+        navigator.credentials.create({publicKey : MAKE_CREDENTIAL_OPTIONS}));
+}, "Verify that abort error returned by mock is properly handled.");
+
+promise_test(t => {
+    var authAbortController = new AbortController();
+    var authAbortSignal = authAbortController.signal;
+    authAbortController.abort();
+    return promise_rejects(t, "AbortError",
+        navigator.credentials.create({publicKey : MAKE_CREDENTIAL_OPTIONS, signal : authAbortSignal}));
+}, "navigator.credentials.create() with abort signal");
+
+promise_test(t => {
   var customMakeCredOptions = deepCopy(MAKE_CREDENTIAL_OPTIONS);
   delete customMakeCredOptions.challenge;
   return promise_rejects(t, new TypeError(),
diff --git a/third_party/blink/web_tests/http/tests/credentialmanager/credentialscontainer-create-with-virtual-authenticator.html b/third_party/blink/web_tests/http/tests/credentialmanager/credentialscontainer-create-with-virtual-authenticator.html
index bd3c338..ace86c06 100644
--- a/third_party/blink/web_tests/http/tests/credentialmanager/credentialscontainer-create-with-virtual-authenticator.html
+++ b/third_party/blink/web_tests/http/tests/credentialmanager/credentialscontainer-create-with-virtual-authenticator.html
@@ -50,6 +50,36 @@
     navigator.credentials.create({ publicKey : customMakeCredOptions}));
 }, "navigator.credentials.create() with resident keys is disabled");
 
+promise_test(async t => {
+  authAbortController = new AbortController();
+  authAbortSignal = authAbortController.signal;
+  return navigator.credentials.create({ publicKey : MAKE_CREDENTIAL_OPTIONS, signal : authAbortSignal});
+}, "navigator.credentials.create() with abort signal flag not set");
+
+promise_test(async t => {
+  authAbortController = new AbortController();
+  authAbortSignal = authAbortController.signal;
+  authAbortController.abort();
+  var promise = navigator.credentials.create({ publicKey : MAKE_CREDENTIAL_OPTIONS, signal : authAbortSignal});
+  return promise_rejects(t, "AbortError", promise);
+}, "navigator.credentials.create() with abort signal flag set before sending request");
+
+promise_test(async t => {
+  authAbortController = new AbortController();
+  authAbortSignal = authAbortController.signal;
+  var promise = navigator.credentials.create({ publicKey : MAKE_CREDENTIAL_OPTIONS, signal : authAbortSignal});
+  authAbortController.abort();
+  return promise_rejects(t, "AbortError", promise);
+}, "navigator.credentials.create() with abort signal flag is set after sending request");
+
+promise_test(async t => {
+  authAbortController = new AbortController();
+  authAbortSignal = authAbortController.signal;
+  let promise = await navigator.credentials.create({ publicKey : MAKE_CREDENTIAL_OPTIONS, signal : authAbortSignal});
+  authAbortController.abort();
+  return promise;
+}, "navigator.credentials.create() with abort signal flag is set after promise resolved");
+
 promise_test(t => {
   return navigator.credentials.test.clearAuthenticators();
 }, "Clean up testing environment.");
diff --git a/third_party/blink/web_tests/http/tests/credentialmanager/credentialscontainer-get-basics.html b/third_party/blink/web_tests/http/tests/credentialmanager/credentialscontainer-get-basics.html
index 0c28153..29a85d3 100644
--- a/third_party/blink/web_tests/http/tests/credentialmanager/credentialscontainer-get-basics.html
+++ b/third_party/blink/web_tests/http/tests/credentialmanager/credentialscontainer-get-basics.html
@@ -168,6 +168,12 @@
       navigator.credentials.get({ publicKey : customGetCredentialOptions}));
 }, "Verify that empty allow credentials error returned by mock is properly handled.");
 
+promise_test(t => {
+  mockAuthenticator.setAuthenticatorStatus(
+      blink.mojom.AuthenticatorStatus.ABORT_ERROR);
+  return promise_rejects(t, "AbortError",
+      navigator.credentials.get({ publicKey : GET_CREDENTIAL_OPTIONS}));
+}, "Verify that abort error returned by mock is properly handled.");
 
 promise_test(function(t) {
   var customGetCredentialOptions = deepCopy(GET_CREDENTIAL_OPTIONS);
@@ -216,4 +222,12 @@
   });
 }, "navigator.credentials.get() with cableAuthentication extension");
 
+promise_test(t => {
+  var authAbortController = new AbortController();
+  var authAbortSignal = authAbortController.signal;
+  authAbortController.abort()
+  return promise_rejects(t, "AbortError",
+      navigator.credentials.get({ publicKey : GET_CREDENTIAL_OPTIONS, signal : authAbortSignal}));
+}, "navigator.credentials.get() with abort signal.");
+
 </script>
diff --git a/third_party/blink/web_tests/http/tests/credentialmanager/credentialscontainer-get-with-virtual-authenticator.html b/third_party/blink/web_tests/http/tests/credentialmanager/credentialscontainer-get-with-virtual-authenticator.html
index 0a7b343..de227a6 100644
--- a/third_party/blink/web_tests/http/tests/credentialmanager/credentialscontainer-get-with-virtual-authenticator.html
+++ b/third_party/blink/web_tests/http/tests/credentialmanager/credentialscontainer-get-with-virtual-authenticator.html
@@ -56,6 +56,36 @@
   return navigator.credentials.get({publicKey: customGetCredentialOptions}).then();
 }, "navigator.credentials.get() with missing transports in allowCredentials.");
 
+promise_test(async t => {
+  authAbortController = new AbortController();
+  authAbortSignal = authAbortController.signal;
+  return navigator.credentials.get({ publicKey : GET_CREDENTIAL_OPTIONS, signal : authAbortSignal});
+}, "navigator.credentials.get() with abort signal flag not set");
+
+promise_test(async t => {
+  authAbortController = new AbortController();
+  authAbortSignal = authAbortController.signal;
+  authAbortController.abort();
+  var promise = navigator.credentials.get({ publicKey : GET_CREDENTIAL_OPTIONS, signal : authAbortSignal});
+  return promise_rejects(t, "AbortError", promise);
+}, "navigator.credentials.get() with abort signal flag set before sending request");
+
+promise_test(async t => {
+  authAbortController = new AbortController();
+  authAbortSignal = authAbortController.signal;
+  var promise = navigator.credentials.get({ publicKey : GET_CREDENTIAL_OPTIONS, signal : authAbortSignal});
+  authAbortController.abort();
+  return promise_rejects(t, "AbortError", promise);
+}, "navigator.credentials.get() with abort signal flag set after sending request");
+
+promise_test(async t => {
+  authAbortController = new AbortController();
+  authAbortSignal = authAbortController.signal;
+  let promise = await navigator.credentials.get({ publicKey : GET_CREDENTIAL_OPTIONS, signal : authAbortSignal});
+  authAbortController.abort();
+  return promise;
+}, "navigator.credentials.get() with abort signal flag set after promise resolved");
+
 promise_test(t => {
   return navigator.credentials.test.clearAuthenticators();
 }, "Clean up testing environment.");
diff --git a/third_party/blink/web_tests/http/tests/credentialmanager/resources/mock-navigator-credentials.js b/third_party/blink/web_tests/http/tests/credentialmanager/resources/mock-navigator-credentials.js
index c546f1a..54c96068 100644
--- a/third_party/blink/web_tests/http/tests/credentialmanager/resources/mock-navigator-credentials.js
+++ b/third_party/blink/web_tests/http/tests/credentialmanager/resources/mock-navigator-credentials.js
@@ -112,6 +112,8 @@
     return false;
   }
 
+  async cancel() {}
+
   // Resets state of mock Authenticator.
   reset() {
     this.status_ = blink.mojom.AuthenticatorStatus.UNKNOWN_ERROR;
diff --git a/third_party/blink/web_tests/http/tests/devtools/elements/distance/node-distances-expected.txt b/third_party/blink/web_tests/http/tests/devtools/elements/distance/node-distances-expected.txt
new file mode 100644
index 0000000..f06c832
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/devtools/elements/distance/node-distances-expected.txt
@@ -0,0 +1,80 @@
+Tests that distance data produced for overlays are correct.
+
+inspected{
+  "boxes": [
+    [
+      0,
+      0,
+      800,
+      600
+    ],
+    [
+      0,
+      0,
+      800,
+      600
+    ],
+    [
+      0,
+      5,
+      800,
+      590
+    ],
+    [
+      5,
+      5,
+      250,
+      250
+    ],
+    [
+      300,
+      5,
+      10,
+      10
+    ],
+    [
+      5,
+      300,
+      10,
+      10
+    ],
+    [
+      0,
+      0,
+      800,
+      600
+    ]
+  ],
+  "content": [
+    30,
+    30,
+    230,
+    30,
+    230,
+    230,
+    30,
+    230
+  ],
+  "padding": [
+    15,
+    15,
+    245,
+    15,
+    245,
+    245,
+    15,
+    245
+  ],
+  "border": [
+    5,
+    5,
+    255,
+    5,
+    255,
+    255,
+    5,
+    255
+  ],
+  "style": "<style data>"
+}
+
diff --git a/third_party/blink/web_tests/http/tests/devtools/elements/distance/node-distances.js b/third_party/blink/web_tests/http/tests/devtools/elements/distance/node-distances.js
new file mode 100644
index 0000000..59dbd30
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/devtools/elements/distance/node-distances.js
@@ -0,0 +1,48 @@
+// Copyright 2019 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.
+
+(async function() {
+  TestRunner.addResult(`Tests that distance data produced for overlays are correct.\n`);
+  await TestRunner.loadModule('elements_test_runner');
+  await TestRunner.showPanel('elements');
+  await TestRunner.loadHTML(`
+      <style>
+      body {
+        margin: 0;
+      }
+      .inspected {
+        margin: 5px;
+        border: solid 10px aqua;
+        padding: 15px;
+        width: 200px;
+        height: 200px;
+        background-color: blue;
+      }
+      .right {
+        position: absolute;
+        top: 5px;
+        left: 300px;
+        width: 10px;
+        height: 10px;
+        background: coral;
+      }
+      .bottom {
+        position: absolute;
+        top: 300px;
+        left: 5px;
+        width: 10px;
+        height: 10px;
+        background: coral;
+      }
+
+      </style>
+      <div id="inspected" class="inspected"></div>
+      <div class="right"></div>
+      <div class="bottom"></div>
+    `);
+
+  ElementsTestRunner.dumpInspectorDistanceJSON('inspected', () => {
+    TestRunner.completeTest();
+  });
+})();
diff --git a/third_party/blink/web_tests/http/tests/navigation/anchor-frames-shifting-focus-expected.html b/third_party/blink/web_tests/http/tests/navigation/anchor-frames-shifting-focus-expected.html
index ce72c53..1615e6d 100644
--- a/third_party/blink/web_tests/http/tests/navigation/anchor-frames-shifting-focus-expected.html
+++ b/third_party/blink/web_tests/http/tests/navigation/anchor-frames-shifting-focus-expected.html
@@ -17,6 +17,13 @@
   testRunner.waitUntilDone();
 }
 onload = function() {
+  if (window.eventSender) {
+    // Give the frame user gesture to make sure 'focus' API works.
+    const iframe = document.querySelector("iframe");
+    window.eventSender.mouseMoveTo(iframe.offsetLeft + 10, iframe.offsetTop + 10);
+    window.eventSender.mouseDown();
+    window.eventSender.mouseUp();
+  }
   requestAnimationFrame(function() {
     if (window.testRunner) {
       testRunner.notifyDone();
diff --git a/third_party/blink/web_tests/http/tests/navigation/anchor-frames-shifting-focus.html b/third_party/blink/web_tests/http/tests/navigation/anchor-frames-shifting-focus.html
index c5956d3..777c5b10 100644
--- a/third_party/blink/web_tests/http/tests/navigation/anchor-frames-shifting-focus.html
+++ b/third_party/blink/web_tests/http/tests/navigation/anchor-frames-shifting-focus.html
@@ -14,10 +14,19 @@
 <div style='width:10px;height:2000px;background:white;position:absolute'></div>
 <iframe src='http://127.0.0.1:8000/navigation/resources/focus-shifting-frame-with-anchor.html' sandbox='allow-scripts'></iframe>
 <script>
+
 if (window.testRunner) {
   testRunner.waitUntilDone();
 }
+
 onload = function() {
+  if (window.eventSender) {
+    // Give the frame user gesture to make sure 'focus' API works.
+    const iframe = document.querySelector("iframe");
+    window.eventSender.mouseMoveTo(iframe.offsetLeft + 10, iframe.offsetTop + 10);
+    window.eventSender.mouseDown();
+    window.eventSender.mouseUp();
+  }
   requestAnimationFrame(function() {
     if (window.testRunner) {
       testRunner.notifyDone();
diff --git a/third_party/blink/web_tests/http/tests/navigation/resources/focus-shifting-frame-with-anchor.html b/third_party/blink/web_tests/http/tests/navigation/resources/focus-shifting-frame-with-anchor.html
index 1b194f6..538ade1 100644
--- a/third_party/blink/web_tests/http/tests/navigation/resources/focus-shifting-frame-with-anchor.html
+++ b/third_party/blink/web_tests/http/tests/navigation/resources/focus-shifting-frame-with-anchor.html
@@ -3,7 +3,7 @@
 <a id='dummy' href='dummy'>dummy</a>
 <div style='width:10px;height:2000px;background:white'></div>
 <script>
-onload = function() {
+window.onmousedown = function() {
   location.href = '#';
   requestAnimationFrame(function() {
     document.getElementById('dummy').focus();
diff --git a/third_party/metrics_proto/ukm/source.proto b/third_party/metrics_proto/ukm/source.proto
index 21f6ebc..100cb4b 100644
--- a/third_party/metrics_proto/ukm/source.proto
+++ b/third_party/metrics_proto/ukm/source.proto
@@ -84,8 +84,12 @@
   // Flag indicating if the metric was collected while inside a "custom tab".
   optional bool is_custom_tab = 7;
 
-  // Timestamp of navigation to this Source, as seen by the client. Time of
-  // events related to this Source will generally be relative to this timestamp.
+  // Relative time of navigation for this Source, as seen by the client, and is
+  // set for sources of type ukm::SourceIdType::NAVIGATION_ID. Time of events
+  // related to this Source will generally be relative to this timestamp. The
+  // recorded navigation time is in TimeTicks, which is the relative time since
+  // the origin. The origin is platform-specific but is guaranteed to be
+  // monotonically increase within each session.
   optional int64 navigation_time_msec = 3;
 
   // Unique identifier (for a given client_id/session_id) for the tab this
diff --git a/tools/binary_size/generate_official_build_report.py b/tools/binary_size/generate_official_build_report.py
index 4fe245f..44649c40 100755
--- a/tools/binary_size/generate_official_build_report.py
+++ b/tools/binary_size/generate_official_build_report.py
@@ -85,15 +85,19 @@
 def _UploadReports(reports_json_path, base_url, *ndjson_paths):
   for path in ndjson_paths:
     dst = os.path.join(base_url, os.path.basename(path))
-    subprocess.check_call(['gsutil.py', 'cp', '-a', 'public-read', path, dst])
+    cmd = ['gsutil.py', 'cp', '-a', 'public-read', path, dst]
+    logging.warning(' '.join(cmd))
+    subprocess.check_call(cmd)
 
   with open(reports_json_path, 'w') as f:
     _WriteReportsJson(f)
 
-  subprocess.check_call([
+  cmd = [
       'gsutil.py', 'cp', '-a', 'public-read', reports_json_path,
       _REPORTS_JSON_GS_URL
-  ])
+  ]
+  logging.warning(' '.join(cmd))
+  subprocess.check_call(cmd)
 
 
 def main():
@@ -134,9 +138,10 @@
     diff_report_path = os.path.join(
         tmp_dir, 'report_{}_{}.ndjson'.format(ref_version, args.version))
     reports_json_path = os.path.join(tmp_dir, 'reports.json')
-    reports_base_url = os.path.join(
-        _REPORTS_GS_URL, args.arch,
-        os.path.splitext(os.path.basename(args.size_path))[0])
+    report_basename = os.path.splitext(os.path.basename(args.size_path))[0]
+    # Maintain name through transition to bundles.
+    report_basename = report_basename.replace('.minimal.apks', '.apk')
+    reports_base_url = os.path.join(_REPORTS_GS_URL, args.arch, report_basename)
 
     _FetchSizeFileForVersion(args.gs_size_url, ref_version, args.gs_size_path,
                              ref_size_path)
diff --git a/tools/gritsettings/resource_ids b/tools/gritsettings/resource_ids
index 30f7e24..2db73252 100644
--- a/tools/gritsettings/resource_ids
+++ b/tools/gritsettings/resource_ids
@@ -81,29 +81,36 @@
   # START chrome/browser section.
   "chrome/browser/browser_resources.grd": {
     "includes": [11000],
-    "structures": [12000],
+    "structures": [11900],
   },
   "chrome/browser/resources/chromeos/cellular_setup/cellular_setup_resources.grd": {
-    "structures": [12040],
+    "structures": [11940],
   },
   "chrome/browser/resources/chromeos/multidevice_setup/multidevice_setup_resources.grd": {
-    "structures": [12045],
+    "structures": [11945],
   },
   "chrome/browser/resources/component_extension_resources.grd": {
-    "includes": [12100],
-    "structures": [12350],
+    "includes": [12000],
+    "structures": [12250],
   },
-  "chrome/browser/resources/invalidations_resources.grd": {
-    "includes": [12400],
+  "chrome/browser/resources/downloads/downloads_resources_vulcanized.grd": {
+    "includes": [12300],
   },
-  "chrome/browser/resources/local_ntp/local_ntp_resources.grd": {
-    "includes": [12440],
+  "chrome/browser/resources/downloads/downloads_resources.grd": {
+    "includes": [12310],
+    "structures": [12320],
   },
   "chrome/browser/resources/extensions/extensions_resources_vulcanized.grd": {
-    "includes": [12500],
+    "includes": [12400],
   },
   "chrome/browser/resources/extensions/extensions_resources.grd": {
-    "structures": [12510],
+    "structures": [12410],
+  },
+  "chrome/browser/resources/invalidations_resources.grd": {
+    "includes": [12500],
+  },
+  "chrome/browser/resources/local_ntp/local_ntp_resources.grd": {
+    "includes": [12540],
   },
   "chrome/browser/resources/net_internals/net_internals_resources.grd": {
     "includes": [12600],
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index dd85fc5..3e435ae 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -12380,6 +12380,7 @@
 <enum name="DevToolsBackgroundService">
   <int value="2" label="Background Fetch"/>
   <int value="3" label="Background Sync"/>
+  <int value="4" label="Push Messaging"/>
 </enum>
 
 <enum name="DevToolsPanel">
@@ -23202,6 +23203,9 @@
   <int value="2888" label="MediaCapabilitiesDecodingInfoWithKeySystemConfig"/>
   <int value="2889" label="RevertInCustomIdent"/>
   <int value="2890" label="UnoptimizedImagePolicies"/>
+  <int value="2891" label="VTTCueParser"/>
+  <int value="2892" label="MediaElementTextTrackContainer"/>
+  <int value="2893" label="MediaElementTextTrackList"/>
 </enum>
 
 <enum name="FeaturePolicyFeature">
@@ -32953,6 +32957,7 @@
   <int value="-1650769314" label="enable-webgl2-compute-context"/>
   <int value="-1649778035" label="disable-clear-browsing-data-counters"/>
   <int value="-1648216169" label="NewOmniboxAnswerTypes:disabled"/>
+  <int value="-1645071473" label="ChromeColors:disabled"/>
   <int value="-1638815914" label="enable-experimental-productivity-features"/>
   <int value="-1634878515" label="ChromeHomeModernLayout:enabled"/>
   <int value="-1634490190"
@@ -34731,6 +34736,7 @@
   <int value="1070164693" label="MidiManagerDynamicInstantiation:disabled"/>
   <int value="1070300488" label="disable-webgl"/>
   <int value="1070449228" label="ContextualSuggestionsCarousel:enabled"/>
+  <int value="1070840417" label="ChromeColors:enabled"/>
   <int value="1071520357" label="WebAuthenticationTouchId:enabled"/>
   <int value="1072010558" label="NTPModernLayout:disabled"/>
   <int value="1074359194" label="UseSuggestionsEvenIfFew:enabled"/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index f96ef4df..697c1d28 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -81265,7 +81265,7 @@
 </histogram>
 
 <histogram name="OfflinePages.OfflineUsage.NotOfflineResilient"
-    enum="OfflinePagesOfflineUsage" expires_after="2019-05-31">
+    enum="OfflinePagesOfflineUsage" expires_after="2020-05-31">
   <owner>carlosk@chromium.org</owner>
   <owner>dimich@chromium.org</owner>
   <summary>
@@ -86372,6 +86372,22 @@
   </summary>
 </histogram>
 
+<histogram
+    name="PageLoad.InteractiveTiming.FirstInputDelay.SkipFilteringComparison"
+    units="ms" expires_after="2020-02-23">
+  <owner>tdresser@chromium.org</owner>
+  <owner>speed-metrics-dev@chromium.org</owner>
+  <summary>
+    This metric will be used to compare first inputs during the
+    SkipTouchEventFilter experiment.
+
+    Measures First Input Delay, the duration between the hardware timestamp and
+    the start of event processing on the main thread for the first meaningful
+    input per navigation. Recorded on first page interaction. See
+    https://goo.gl/tr1oTZ for a detailed explanation. Excludes scrolls.
+  </summary>
+</histogram>
+
 <histogram name="PageLoad.InteractiveTiming.FirstInputDelay2" units="ms"
     expires_after="2020-01-23">
   <obsolete>
@@ -86407,6 +86423,21 @@
   </summary>
 </histogram>
 
+<histogram name="PageLoad.InteractiveTiming.FirstInputDelay4" units="ms"
+    expires_after="2020-02-23">
+  <owner>tdresser@chromium.org</owner>
+  <owner>speed-metrics-dev@chromium.org</owner>
+  <summary>
+    This metric will replace PageLoad.InteractiveTiming.FirstInputDelay3 if the
+    SkipTouchEventFilter experiment launches.
+
+    Measures First Input Delay, the duration between the hardware timestamp and
+    the start of event processing on the main thread for the first meaningful
+    input per navigation. Recorded on first page interaction. See
+    https://goo.gl/tr1oTZ for a detailed explanation. Excludes scrolls.
+  </summary>
+</histogram>
+
 <histogram name="PageLoad.InteractiveTiming.FirstInputTimestamp" units="ms"
     expires_after="2019-01-23">
   <obsolete>
@@ -86422,6 +86453,21 @@
   </summary>
 </histogram>
 
+<histogram
+    name="PageLoad.InteractiveTiming.FirstInputTimestamp.SkipFilteringComparison"
+    units="ms" expires_after="2020-02-23">
+  <owner>tdresser@chromium.org</owner>
+  <owner>speed-metrics-dev@chromium.org</owner>
+  <summary>
+    This metric will be used to compare first inputs during the
+    SkipTouchEventFilter experiment.
+
+    The duration between navigation start and the hardware timestamp of the
+    first meaningful input per navigation. Recorded on first page interaction.
+    See https://goo.gl/tr1oTZ for a detailed explanation. Excludes scrolls.
+  </summary>
+</histogram>
+
 <histogram name="PageLoad.InteractiveTiming.FirstInputTimestamp2" units="ms"
     expires_after="2020-01-23">
   <obsolete>
@@ -86449,6 +86495,20 @@
   </summary>
 </histogram>
 
+<histogram name="PageLoad.InteractiveTiming.FirstInputTimestamp4" units="ms"
+    expires_after="2020-02-23">
+  <owner>tdresser@chromium.org</owner>
+  <owner>speed-metrics-dev@chromium.org</owner>
+  <summary>
+    This metric will replace PageLoad.InteractiveTiming.FirstInputTimestamp3 if
+    the SkipTouchEventFilter experiment launches.
+
+    The duration between navigation start and the hardware timestamp of the
+    first meaningful input per navigation. Recorded on first page interaction.
+    See https://goo.gl/tr1oTZ for a detailed explanation. Excludes scrolls.
+  </summary>
+</histogram>
+
 <histogram name="PageLoad.InteractiveTiming.InputDelay" units="ms"
     expires_after="2019-01-23">
   <obsolete>
@@ -107917,8 +107977,22 @@
   </summary>
 </histogram>
 
-<histogram name="SBClientDownload.ExtractDmgFeaturesTime" units="ms"
-    expires_after="M77">
+<histogram name="SBClientDownload.ExtractDmgFeaturesTime" units="ms">
+  <obsolete>
+    Deprecated in M76, replaced by
+    SBClientDownload.ExtractDmgFeaturesTimeMedium.
+  </obsolete>
+  <owner>drubery@chromium.org</owner>
+  <owner>chrome-safebrowsing-alerts@google.com</owner>
+  <owner>rsesek@chromium.org</owner>
+  <summary>
+    Records the time it takes for the SafeBrowsing download service to extract
+    info from a downloaded DMG file.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.ExtractDmgFeaturesTimeMedium" units="ms"
+    expires_after="M79">
   <owner>vakh@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
   <owner>rsesek@chromium.org</owner>
@@ -107940,6 +108014,19 @@
 </histogram>
 
 <histogram name="SBClientDownload.ExtractRarFeaturesTime" units="ms">
+  <obsolete>
+    Deprecated in M76, replaced by
+    SBClientDownload.ExtractRarFeaturesTimeMedium.
+  </obsolete>
+  <owner>drubery@chromium.org</owner>
+  <owner>chrome-safebrowsing-alerts@google.com</owner>
+  <summary>
+    Records the time it takes for the SafeBrowsing download service to extract
+    info from a downloaded rar file.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.ExtractRarFeaturesTimeMedium" units="ms">
   <owner>vakh@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
   <summary>
@@ -107961,6 +108048,20 @@
 </histogram>
 
 <histogram name="SBClientDownload.ExtractZipFeaturesTime" units="ms">
+  <obsolete>
+    Deprecated in M76, replaced by
+    SBClientDownload.ExtractZipFeaturesTimeMedium.
+  </obsolete>
+  <owner>drubery@chromium.org</owner>
+  <owner>chrome-safebrowsing-alerts@google.com</owner>
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Records the time it takes for the SafeBrowsing download service to extract
+    info from a downloaded zip file.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.ExtractZipFeaturesTimeMedium" units="ms">
   <owner>vakh@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
   <owner>mattm@chromium.org</owner>
@@ -144088,9 +144189,15 @@
   <affected-histogram
       name="PageLoad.Clients.Ads.Cpu.AdFrames.PerFrame.PercentUsage.Activated"/>
   <affected-histogram
+      name="PageLoad.Clients.Ads.Cpu.AdFrames.PerFrame.TotalUsage.Activated"/>
+  <affected-histogram
       name="PageLoad.Clients.Ads.NonVisible.Cpu.AdFrames.PerFrame.PercentUsage.Activated"/>
   <affected-histogram
+      name="PageLoad.Clients.Ads.NonVisible.Cpu.AdFrames.PerFrame.TotalUsage.Activated"/>
+  <affected-histogram
       name="PageLoad.Clients.Ads.Visible.Cpu.AdFrames.PerFrame.PercentUsage.Activated"/>
+  <affected-histogram
+      name="PageLoad.Clients.Ads.Visible.Cpu.AdFrames.PerFrame.TotalUsage.Activated"/>
 </histogram_suffixes>
 
 <histogram_suffixes name="AdsPageLoadMetricsBytes" separator=".">
@@ -144113,6 +144220,9 @@
       label="The average load of an ad creative across the life of the page.
              This is measured at percentage of a cpu core used and capped at
              100% for multicore systems."/>
+  <suffix base="true" name="AdFrames.PerFrame.TotalUsage"
+      label="The total load of an ad creative across the life of the page.
+             This is measured in milliseconds and capped at 10 seconds."/>
   <affected-histogram name="PageLoad.Clients.Ads.Cpu"/>
   <affected-histogram name="PageLoad.Clients.Ads.NonVisible.Cpu"/>
   <affected-histogram name="PageLoad.Clients.Ads.Visible.Cpu"/>
@@ -144126,9 +144236,15 @@
   <affected-histogram
       name="PageLoad.Clients.Ads.Cpu.AdFrames.PerFrame.PercentUsage"/>
   <affected-histogram
+      name="PageLoad.Clients.Ads.Cpu.AdFrames.PerFrame.TotalUsage"/>
+  <affected-histogram
       name="PageLoad.Clients.Ads.NonVisible.Cpu.AdFrames.PerFrame.PercentUsage"/>
   <affected-histogram
+      name="PageLoad.Clients.Ads.NonVisible.Cpu.AdFrames.PerFrame.TotalUsage"/>
+  <affected-histogram
       name="PageLoad.Clients.Ads.Visible.Cpu.AdFrames.PerFrame.PercentUsage"/>
+  <affected-histogram
+      name="PageLoad.Clients.Ads.Visible.Cpu.AdFrames.PerFrame.TotalUsage"/>
 </histogram_suffixes>
 
 <histogram_suffixes name="AdsPageLoadMetricsCpuFullPage" separator=".">
@@ -144136,6 +144252,9 @@
       label="The average load of the page across its lifetime. This is
              measured at percentage of a cpu core used and capped at 100% for
              multicore systems."/>
+  <suffix base="true" name="FullPage.TotalUsage"
+      label="The total load of the page across its lifetime. This is measured
+             in milliseconds and capped at 10 minutes."/>
   <affected-histogram name="PageLoad.Clients.Ads.Cpu"/>
 </histogram_suffixes>
 
@@ -144145,11 +144264,18 @@
   <suffix name="PreInteractive" label="Usage before the page is interactive."/>
   <affected-histogram
       name="PageLoad.Clients.Ads.Cpu.AdFrames.PerFrame.PercentUsage.Unactivated"/>
+  <affected-histogram
+      name="PageLoad.Clients.Ads.Cpu.AdFrames.PerFrame.TotalUsage.Unactivated"/>
   <affected-histogram name="PageLoad.Clients.Ads.Cpu.FullPage.PercentUsage"/>
+  <affected-histogram name="PageLoad.Clients.Ads.Cpu.FullPage.TotalUsage"/>
   <affected-histogram
       name="PageLoad.Clients.Ads.NonVisible.Cpu.AdFrames.PerFrame.PercentUsage.Unactivated"/>
   <affected-histogram
+      name="PageLoad.Clients.Ads.NonVisible.Cpu.AdFrames.PerFrame.TotalUsage.Unactivated"/>
+  <affected-histogram
       name="PageLoad.Clients.Ads.Visible.Cpu.AdFrames.PerFrame.PercentUsage.Unactivated"/>
+  <affected-histogram
+      name="PageLoad.Clients.Ads.Visible.Cpu.AdFrames.PerFrame.TotalUsage.Unactivated"/>
 </histogram_suffixes>
 
 <histogram_suffixes name="AdsPageLoadMetricsMainFrameBytes" separator=".">
diff --git a/tools/metrics/ukm/ukm.xml b/tools/metrics/ukm/ukm.xml
index 20bc922..59a589e 100644
--- a/tools/metrics/ukm/ukm.xml
+++ b/tools/metrics/ukm/ukm.xml
@@ -4567,6 +4567,15 @@
       explanation. In ms.
     </summary>
   </metric>
+  <metric name="InteractiveTiming.FirstInputDelay.SkipFilteringComparison">
+    <summary>
+      For comparing FirstInputDelay metrics in the SkipTouchEventFilter
+      experiment. Measures First Input Delay, the duration between the hardware
+      timestamp and the start of event processing on the main thread for the
+      first meaningful input per navigation. See https://goo.gl/tr1oTZ for a
+      detailed explanation. In ms.
+    </summary>
+  </metric>
   <metric name="InteractiveTiming.FirstInputDelay2">
     <obsolete>
       Removed on February 2019 in favor of InteractiveTiming.FirstInputDelay3
@@ -4595,6 +4604,25 @@
       </history>
     </aggregation>
   </metric>
+  <metric name="InteractiveTiming.FirstInputDelay4">
+    <summary>
+      Measures First Input Delay, the duration between the hardware timestamp
+      and the start of event processing on the main thread for the first
+      meaningful input per navigation. See https://goo.gl/tr1oTZ for a detailed
+      explanation. In ms.
+
+      This metric MAY replace InteractiveTiming.FirstInputDelay3 if the
+      SkipTouchEventFilter experiment is successful.
+    </summary>
+    <aggregation>
+      <history>
+        <index fields="profile.country"/>
+        <statistics>
+          <quantiles type="std-percentiles"/>
+        </statistics>
+      </history>
+    </aggregation>
+  </metric>
   <metric name="InteractiveTiming.FirstInputTimestamp">
     <obsolete>
       Deprecated on January 2019 in favor of
@@ -4607,6 +4635,16 @@
       detailed explanation. In ms.
     </summary>
   </metric>
+  <metric name="InteractiveTiming.FirstInputTimestamp.SkipFilteringComparison">
+    <summary>
+      The duration between navigation start and the hardware timestamp of the
+      first meaningful input per navigation. See https://goo.gl/tr1oTZ for a
+      detailed explanation. In ms.
+
+      This metric is used for comparing FirstInputTimestamp metrics in the
+      SkipTouchEventFilter experiment.
+    </summary>
+  </metric>
   <metric name="InteractiveTiming.FirstInputTimestamp2">
     <obsolete>
       Removed on February 2019 in favor of
@@ -4620,17 +4658,22 @@
     </summary>
   </metric>
   <metric name="InteractiveTiming.FirstInputTimestamp3">
-    <obsolete>
-      Removed on February 2019 in favor of
-      InteractiveTiming.FirstInputTimestamp3 which brings the metric more in
-      line with the EventTiming API.
-    </obsolete>
     <summary>
       The duration between navigation start and the hardware timestamp of the
       first meaningful input per navigation. See https://goo.gl/tr1oTZ for a
       detailed explanation. In ms.
     </summary>
   </metric>
+  <metric name="InteractiveTiming.FirstInputTimestamp4">
+    <summary>
+      The duration between navigation start and the hardware timestamp of the
+      first meaningful input per navigation. See https://goo.gl/tr1oTZ for a
+      detailed explanation. In ms.
+
+      This metric MAY replace InteractiveTiming.FirstInputTimestamp3 if the
+      SkipTouchEventFilter experiment is successful.
+    </summary>
+  </metric>
   <metric name="InteractiveTiming.LongestInputDelay">
     <obsolete>
       Deprecated on January 2019 in favor of
diff --git a/tools/perf/expectations.config b/tools/perf/expectations.config
index 91ede4a2..210b0a0 100644
--- a/tools/perf/expectations.config
+++ b/tools/perf/expectations.config
@@ -305,8 +305,6 @@
 crbug.com/923527 [ Android_Webview ] system_health.memory_mobile/load:media:soundcloud:2018 [ Skip ]
 crbug.com/947267 [ Nexus_5X ] system_health.memory_mobile/background:media:imgur [ Skip ]
 crbug.com/954949 [ Nexus5X_Webview ] system_health.memory_mobile/browse:news:washingtonpost [ Skip ]
-crbug.com/961434 [ Android_Go_Webview ] system_health.memory_mobile/browse:shopping:lazada [ Skip ]
-crbug.com/961434 [ Android_Go_Webview ] system_health.memory_mobile/browse:shopping:amazon [ Skip ]
 crbug.com/961417 [ Android_Go ] system_health.memory_mobile/browse:social:tumblr_infinite_scroll:2018 [ Skip ]
 
 # Benchmark: tab_switching.typical_25
@@ -352,7 +350,6 @@
 crbug.com/923116 [ Android ] v8.browsing_mobile/browse:shopping:avito [ Skip ]
 crbug.com/929839 [ Android_Go ] v8.browsing_mobile/browse:chrome:newtab [ Skip ]
 crbug.com/954949 [ Nexus5X_Webview ] v8.browsing_mobile/browse:news:washingtonpost [ Skip ]
-crbug.com/961434 [ Android_Go ] v8.browsing_mobile/browse:shopping:lazada [ Skip ]
 crbug.com/961417 [ Android_Go ] v8.browsing_mobile/browse:social:tumblr_infinite_scroll:2018 [ Skip ]
 
 # Benchmark: v8.browsing_mobile-future
diff --git a/ui/accessibility/platform/OWNERS b/ui/accessibility/platform/OWNERS
index 60385a0..aa76e7de 100644
--- a/ui/accessibility/platform/OWNERS
+++ b/ui/accessibility/platform/OWNERS
@@ -1,3 +1,14 @@
 # For ATK / AuraLinux
 jdiggs@igalia.com
 mrobinson@igalia.com
+
+# For Windows / UIA
+per-file *_win*=kschmi@microsoft.com
+per-file *_win*=kbabbitt@microsoft.com
+per-file *_win*=iapres@microsoft.com
+per-file *_base*=kschmi@microsoft.com
+per-file *_base*=kbabbitt@microsoft.com
+per-file *_base*=iapres@microsoft.com
+per-file *test*=kschmi@microsoft.com
+per-file *test*=kbabbitt@microsoft.com
+per-file *test*=iapres@microsoft.com
diff --git a/ui/android/java/res/color/default_icon_color_secondary_list.xml b/ui/android/java/res/color/default_icon_color_secondary_list.xml
index 6800110..5ed66d5 100644
--- a/ui/android/java/res/color/default_icon_color_secondary_list.xml
+++ b/ui/android/java/res/color/default_icon_color_secondary_list.xml
@@ -6,6 +6,6 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools" tools:ignore="UnusedResources">
     <item android:alpha="@dimen/default_disabled_alpha"
-        android:color="@color/light_icon_color" android:state_enabled="false"/>
-    <item android:color="@color/light_icon_color" />
+        android:color="@color/default_icon_color_secondary" android:state_enabled="false"/>
+    <item android:color="@color/default_icon_color_secondary" />
 </selector>
\ No newline at end of file
diff --git a/ui/android/java/res/values/color_palette.xml b/ui/android/java/res/values/color_palette.xml
index 3c9ce487..03e6a2b 100644
--- a/ui/android/java/res/values/color_palette.xml
+++ b/ui/android/java/res/values/color_palette.xml
@@ -54,6 +54,9 @@
         @color/white_alpha_50
     </color>
 
+    <color name="default_icon_color_secondary_dark">@color/modern_grey_600</color>
+    <color name="default_icon_color_secondary_light">@color/modern_grey_500</color>
+
     <!-- Common text colors -->
     <color name="default_text_color_dark">@color/modern_grey_900</color>
     <color name="default_text_color_light">@android:color/white</color>
diff --git a/ui/android/java/res/values/colors.xml b/ui/android/java/res/values/colors.xml
index ac13bdc..d5014fb0 100644
--- a/ui/android/java/res/values/colors.xml
+++ b/ui/android/java/res/values/colors.xml
@@ -34,7 +34,7 @@
     <color name="default_icon_color_blue" tools:ignore="UnusedResources">
         @color/modern_blue_600
     </color>
-    <color name="light_icon_color" tools:ignore="UnusedResources">@color/modern_grey_500</color>
+    <color name="default_icon_color_secondary" tools:ignore="UnusedResources">@color/default_icon_color_secondary_dark</color>
     <color name="hairline_stroke_color">@color/modern_grey_300</color>
 
     <!-- Common background and branding color. -->
diff --git a/ui/android/java/res_night/values-night/colors.xml b/ui/android/java/res_night/values-night/colors.xml
index 2446e8e..6cd9a7d1 100644
--- a/ui/android/java/res_night/values-night/colors.xml
+++ b/ui/android/java/res_night/values-night/colors.xml
@@ -19,6 +19,7 @@
     <color name="default_icon_color_inverse">@color/default_icon_color_dark</color>
     <color name="default_icon_color_inverse_disabled">@color/default_icon_color_dark_disabled</color>
     <color name="default_icon_color_blue">@color/modern_blue_300</color>
+    <color name="default_icon_color_secondary">@color/default_icon_color_secondary_light</color>
     <color name="hairline_stroke_color">@color/white_alpha_10</color>
 
     <!-- Common background and branding color. -->
diff --git a/ui/base/models/simple_menu_model.cc b/ui/base/models/simple_menu_model.cc
index b6470d8..709c584 100644
--- a/ui/base/models/simple_menu_model.cc
+++ b/ui/base/models/simple_menu_model.cc
@@ -122,11 +122,10 @@
   AddRadioItem(command_id, l10n_util::GetStringUTF16(string_id), group_id);
 }
 
-void SimpleMenuModel::AddHighlightedItemWithStringIdAndIcon(
-    int command_id,
-    int string_id,
-    const gfx::ImageSkia& icon) {
-  Item item(command_id, TYPE_HIGHLIGHTED, l10n_util::GetStringUTF16(string_id));
+void SimpleMenuModel::AddHighlightedItemWithIcon(int command_id,
+                                                 const base::string16& label,
+                                                 const gfx::ImageSkia& icon) {
+  Item item(command_id, TYPE_HIGHLIGHTED, label);
   item.icon = gfx::Image(icon);
   AppendItem(std::move(item));
 }
diff --git a/ui/base/models/simple_menu_model.h b/ui/base/models/simple_menu_model.h
index 895fd62..7381e70 100644
--- a/ui/base/models/simple_menu_model.h
+++ b/ui/base/models/simple_menu_model.h
@@ -90,9 +90,9 @@
   void AddCheckItemWithStringId(int command_id, int string_id);
   void AddRadioItem(int command_id, const base::string16& label, int group_id);
   void AddRadioItemWithStringId(int command_id, int string_id, int group_id);
-  void AddHighlightedItemWithStringIdAndIcon(int command_id,
-                                             int string_id,
-                                             const gfx::ImageSkia& icon);
+  void AddHighlightedItemWithIcon(int command_id,
+                                  const base::string16& label,
+                                  const gfx::ImageSkia& icon);
 
   // Adds a separator of the specified type to the model.
   // - Adding a separator after another separator is always invalid if they
diff --git a/ui/base/resource/resource_bundle_unittest.cc b/ui/base/resource/resource_bundle_unittest.cc
index 70b0539..4b3f0f5 100644
--- a/ui/base/resource/resource_bundle_unittest.cc
+++ b/ui/base/resource/resource_bundle_unittest.cc
@@ -35,6 +35,7 @@
 
 using ::testing::_;
 using ::testing::Between;
+using ::testing::DoAll;
 using ::testing::Property;
 using ::testing::Return;
 using ::testing::ReturnArg;
diff --git a/ui/events/blink/blink_event_util.cc b/ui/events/blink/blink_event_util.cc
index 8f155bd..e0395a4 100644
--- a/ui/events/blink/blink_event_util.cc
+++ b/ui/events/blink/blink_event_util.cc
@@ -1261,13 +1261,13 @@
     generated_gesture_event->data.scroll_begin.delta_x_hint = -scroll_delta.x();
     generated_gesture_event->data.scroll_begin.delta_y_hint = -scroll_delta.y();
     generated_gesture_event->data.scroll_begin.inertial_phase =
-        WebGestureEvent::kNonMomentumPhase;
+        WebGestureEvent::InertialPhaseState::kNonMomentum;
     generated_gesture_event->data.scroll_begin.delta_hint_units = granularity;
   } else if (type == WebInputEvent::Type::kGestureScrollUpdate) {
     generated_gesture_event->data.scroll_update.delta_x = -scroll_delta.x();
     generated_gesture_event->data.scroll_update.delta_y = -scroll_delta.y();
     generated_gesture_event->data.scroll_update.inertial_phase =
-        WebGestureEvent::kNonMomentumPhase;
+        WebGestureEvent::InertialPhaseState::kNonMomentum;
     generated_gesture_event->data.scroll_update.delta_units = granularity;
   }
 
diff --git a/ui/events/blink/fling_booster.cc b/ui/events/blink/fling_booster.cc
index 7ccd58ab..2fa2ae2 100644
--- a/ui/events/blink/fling_booster.cc
+++ b/ui/events/blink/fling_booster.cc
@@ -78,7 +78,7 @@
 
     case WebInputEvent::kGestureScrollUpdate: {
       if (gesture_event.data.scroll_update.inertial_phase ==
-          WebGestureEvent::kMomentumPhase) {
+          WebGestureEvent::InertialPhaseState::kMomentum) {
         // GSU events in momentum phase are generated by FlingController to
         // progress fling and should not interfere with fling boosting.
         return false;
diff --git a/ui/events/blink/input_handler_proxy.cc b/ui/events/blink/input_handler_proxy.cc
index 3abe139..1b43d84 100644
--- a/ui/events/blink/input_handler_proxy.cc
+++ b/ui/events/blink/input_handler_proxy.cc
@@ -59,7 +59,7 @@
       // start.
       scroll_state_data.is_in_inertial_phase =
           (event.data.scroll_begin.inertial_phase ==
-           WebGestureEvent::kMomentumPhase);
+           WebGestureEvent::InertialPhaseState::kMomentum);
       break;
     case WebInputEvent::kGestureScrollUpdate:
       scroll_state_data.delta_x = -event.data.scroll_update.delta_x;
@@ -68,7 +68,7 @@
       scroll_state_data.velocity_y = event.data.scroll_update.velocity_y;
       scroll_state_data.is_in_inertial_phase =
           event.data.scroll_update.inertial_phase ==
-          WebGestureEvent::kMomentumPhase;
+          WebGestureEvent::InertialPhaseState::kMomentum;
       break;
     case WebInputEvent::kGestureScrollEnd:
       scroll_state_data.is_ending = true;
@@ -152,8 +152,9 @@
   cc::SnapFlingController::GestureScrollUpdateInfo info;
   info.delta = gfx::Vector2dF(-event.data.scroll_update.delta_x,
                               -event.data.scroll_update.delta_y);
-  info.is_in_inertial_phase = event.data.scroll_update.inertial_phase ==
-                              blink::WebGestureEvent::kMomentumPhase;
+  info.is_in_inertial_phase =
+      event.data.scroll_update.inertial_phase ==
+      blink::WebGestureEvent::InertialPhaseState::kMomentum;
   info.event_time = event.TimeStamp();
   return info;
 }
diff --git a/ui/events/blink/input_handler_proxy_unittest.cc b/ui/events/blink/input_handler_proxy_unittest.cc
index 3c2af23..72aeea8a 100644
--- a/ui/events/blink/input_handler_proxy_unittest.cc
+++ b/ui/events/blink/input_handler_proxy_unittest.cc
@@ -45,6 +45,7 @@
 using blink::WebTouchEvent;
 using blink::WebTouchPoint;
 using testing::_;
+using testing::DoAll;
 using testing::Field;
 
 namespace ui {
@@ -822,7 +823,7 @@
   gesture_.data.scroll_update.delta_y =
       -40;  // -Y means scroll down - i.e. in the +Y direction.
   gesture_.data.scroll_update.inertial_phase =
-      blink::WebGestureEvent::kMomentumPhase;
+      blink::WebGestureEvent::InertialPhaseState::kMomentum;
   EXPECT_CALL(mock_input_handler_, GetSnapFlingInfo(_, _, _))
       .WillOnce(DoAll(testing::SetArgPointee<1>(gfx::Vector2dF(0, 0)),
                       testing::SetArgPointee<2>(gfx::Vector2dF(0, 100)),
@@ -850,7 +851,7 @@
   expected_disposition_ = InputHandlerProxy::DROP_EVENT;
   gesture_.SetType(WebInputEvent::kGestureScrollEnd);
   gesture_.data.scroll_end.inertial_phase =
-      blink::WebGestureEvent::kMomentumPhase;
+      blink::WebGestureEvent::InertialPhaseState::kMomentum;
   EXPECT_CALL(mock_input_handler_, ScrollEnd(_, _)).Times(0);
   EXPECT_EQ(expected_disposition_,
             input_handler_->RouteToTypeSpecificHandler(gesture_));
diff --git a/ui/events/blink/input_scroll_elasticity_controller.cc b/ui/events/blink/input_scroll_elasticity_controller.cc
index 4a6c928..c845f5b 100644
--- a/ui/events/blink/input_scroll_elasticity_controller.cc
+++ b/ui/events/blink/input_scroll_elasticity_controller.cc
@@ -164,11 +164,12 @@
       if (gesture_event.data.scroll_begin.synthetic)
         return;
 
-      bool enter_momentum = gesture_event.data.scroll_begin.inertial_phase ==
-                            blink::WebGestureEvent::kMomentumPhase;
+      bool enter_momentum =
+          gesture_event.data.scroll_begin.inertial_phase ==
+          blink::WebGestureEvent::InertialPhaseState::kMomentum;
       bool leave_momentum =
           gesture_event.data.scroll_begin.inertial_phase ==
-              blink::WebGestureEvent::kNonMomentumPhase &&
+              blink::WebGestureEvent::InertialPhaseState::kNonMomentum &&
           gesture_event.data.scroll_begin.delta_hint_units ==
               blink::WebScrollGranularity::kScrollByPrecisePixel;
       ObserveRealScrollBegin(enter_momentum, leave_momentum);
@@ -178,7 +179,7 @@
       gfx::Vector2dF event_delta(-gesture_event.data.scroll_update.delta_x,
                                  -gesture_event.data.scroll_update.delta_y);
       bool has_momentum = gesture_event.data.scroll_update.inertial_phase ==
-                          blink::WebGestureEvent::kMomentumPhase;
+                          blink::WebGestureEvent::InertialPhaseState::kMomentum;
       ObserveScrollUpdate(event_delta, scroll_result.unused_scroll_delta,
                           event_timestamp, scroll_result.overscroll_behavior,
                           has_momentum);
diff --git a/ui/events/blink/input_scroll_elasticity_controller_unittest.cc b/ui/events/blink/input_scroll_elasticity_controller_unittest.cc
index 4767f1d..4823113 100644
--- a/ui/events/blink/input_scroll_elasticity_controller_unittest.cc
+++ b/ui/events/blink/input_scroll_elasticity_controller_unittest.cc
@@ -23,11 +23,12 @@
 };
 
 enum InertialPhaseState {
-  UnknownMomentumPhase =
-      blink::WebGestureEvent::InertialPhaseState::kUnknownMomentumPhase,
-  NonMomentumPhase =
-      blink::WebGestureEvent::InertialPhaseState::kNonMomentumPhase,
-  MomentumPhase = blink::WebGestureEvent::InertialPhaseState::kMomentumPhase,
+  UnknownMomentumPhase = static_cast<int>(
+      blink::WebGestureEvent::InertialPhaseState::kUnknownMomentum),
+  NonMomentumPhase = static_cast<int>(
+      blink::WebGestureEvent::InertialPhaseState::kNonMomentum),
+  MomentumPhase =
+      static_cast<int>(blink::WebGestureEvent::InertialPhaseState::kMomentum),
 };
 
 class MockScrollElasticityHelper : public cc::ScrollElasticityHelper {
diff --git a/ui/events/blink/scroll_predictor.cc b/ui/events/blink/scroll_predictor.cc
index cef49dcf..7c95975 100644
--- a/ui/events/blink/scroll_predictor.cc
+++ b/ui/events/blink/scroll_predictor.cc
@@ -110,7 +110,7 @@
       static_cast<const WebGestureEvent&>(*event);
   // When fling, GSU is sending per frame, resampling is not needed.
   if (gesture_event.data.scroll_update.inertial_phase ==
-      WebGestureEvent::kMomentumPhase) {
+      WebGestureEvent::InertialPhaseState::kMomentum) {
     should_resample_scroll_events_ = false;
     return;
   }
diff --git a/ui/events/blink/scroll_predictor_unittest.cc b/ui/events/blink/scroll_predictor_unittest.cc
index b76ae66..f3aad4c9 100644
--- a/ui/events/blink/scroll_predictor_unittest.cc
+++ b/ui/events/blink/scroll_predictor_unittest.cc
@@ -47,7 +47,7 @@
       float delta_y = 0,
       double time_delta_in_milliseconds = 0,
       WebGestureEvent::InertialPhaseState phase =
-          WebGestureEvent::kNonMomentumPhase) {
+          WebGestureEvent::InertialPhaseState::kNonMomentum) {
     WebGestureEvent gesture(
         WebInputEvent::kGestureScrollUpdate, WebInputEvent::kNoModifiers,
         WebInputEvent::GetStaticTimeStampForTests() +
@@ -163,8 +163,8 @@
   EXPECT_TRUE(GetResamplingState());
 
   // after GSU with momentum phase
-  gesture_update = CreateGestureScrollUpdate(0, 10, 10 /* ms */,
-                                             WebGestureEvent::kMomentumPhase);
+  gesture_update = CreateGestureScrollUpdate(
+      0, 10, 10 /* ms */, WebGestureEvent::InertialPhaseState::kMomentum);
   HandleResampleScrollEvents(gesture_update, 15 /* ms */);
   EXPECT_FALSE(GetResamplingState());
 
diff --git a/ui/events/blink/web_input_event_traits.cc b/ui/events/blink/web_input_event_traits.cc
index a5e7e853..ff87855 100644
--- a/ui/events/blink/web_input_event_traits.cc
+++ b/ui/events/blink/web_input_event_traits.cc
@@ -262,7 +262,7 @@
     }
   } else if (event.SourceDevice() == blink::WebGestureDevice::kTouchscreen) {
     blink::WebGestureEvent::InertialPhaseState inertial_phase_state =
-        blink::WebGestureEvent::kUnknownMomentumPhase;
+        blink::WebGestureEvent::InertialPhaseState::kUnknownMomentum;
 
     switch (event.GetType()) {
       case blink::WebInputEvent::kGestureScrollBegin:
@@ -278,7 +278,8 @@
         break;
     }
     bool is_in_inertial_phase =
-        inertial_phase_state == blink::WebGestureEvent::kMomentumPhase;
+        inertial_phase_state ==
+        blink::WebGestureEvent::InertialPhaseState::kMomentum;
     source_event_type = is_in_inertial_phase ? SourceEventType::INERTIAL
                                              : SourceEventType::TOUCH;
   }
diff --git a/ui/file_manager/file_manager_resource_util.cc b/ui/file_manager/file_manager_resource_util.cc
index 4825662..aee5d28 100644
--- a/ui/file_manager/file_manager_resource_util.cc
+++ b/ui/file_manager/file_manager_resource_util.cc
@@ -9,7 +9,7 @@
 
 namespace file_manager {
 
-const GzippedGritResourceMap* GetFileManagerResources(size_t* size) {
+const GritResourceMap* GetFileManagerResources(size_t* size) {
   DCHECK(size);
   *size = kFileManagerResourcesSize;
   return kFileManagerResources;
diff --git a/ui/file_manager/file_manager_resource_util.h b/ui/file_manager/file_manager_resource_util.h
index 56df554..2b3b32f1 100644
--- a/ui/file_manager/file_manager_resource_util.h
+++ b/ui/file_manager/file_manager_resource_util.h
@@ -9,13 +9,13 @@
 
 #include "ui/file_manager/file_manager_export.h"
 
-struct GzippedGritResourceMap;
+struct GritResourceMap;
 
 namespace file_manager {
 
 // Get the list of resources. |size| is populated with the number of resources
 // in the returned array.
-FILE_MANAGER_EXPORT const GzippedGritResourceMap* GetFileManagerResources(
+FILE_MANAGER_EXPORT const GritResourceMap* GetFileManagerResources(
     size_t* size);
 
 }  // namespace file_manager
diff --git a/ui/file_manager/file_manager_resources.grd b/ui/file_manager/file_manager_resources.grd
index 3057332..09f2ab7 100644
--- a/ui/file_manager/file_manager_resources.grd
+++ b/ui/file_manager/file_manager_resources.grd
@@ -4,8 +4,8 @@
     <output filename="grit/file_manager_resources.h" type="rc_header">
       <emit emit_type='prepend'></emit>
     </output>
-    <output filename="grit/file_manager_resources_map.cc" type="gzipped_resource_file_map_source" />
-    <output filename="grit/file_manager_resources_map.h" type="gzipped_resource_map_header" />
+    <output filename="grit/file_manager_resources_map.cc" type="resource_file_map_source" />
+    <output filename="grit/file_manager_resources_map.h" type="resource_map_header" />
     <output filename="file_manager_resources.pak" type="data_package" />
     <output filename="file_manager_resources.rc" type="rc_all" />
   </outputs>
diff --git a/ui/gfx/BUILD.gn b/ui/gfx/BUILD.gn
index 852fe1f8..9ba09f1 100644
--- a/ui/gfx/BUILD.gn
+++ b/ui/gfx/BUILD.gn
@@ -69,7 +69,6 @@
     "font.cc",
     "font.h",
     "font_fallback.h",
-    "font_fallback_android.cc",
     "font_fallback_linux.cc",
     "font_fallback_linux.h",
     "font_fallback_mac.mm",
@@ -81,7 +80,6 @@
     "font_list_impl.h",
     "font_render_params.cc",
     "font_render_params.h",
-    "font_render_params_android.cc",
     "font_render_params_linux.cc",
     "font_render_params_mac.cc",
     "font_render_params_win.cc",
@@ -299,6 +297,13 @@
     ]
   }
 
+  if (is_android || is_fuchsia) {
+    sources += [
+      "font_fallback_skia.cc",
+      "font_render_params_skia.cc",
+    ]
+  }
+
   if (!is_ios) {
     sources += [
       "bidi_line_iterator.cc",
@@ -363,13 +368,6 @@
   } else {
     sources -= [ "path_x11.cc" ]
   }
-
-  if (is_fuchsia) {
-    sources += [
-      "font_fallback_fuchsia.cc",
-      "font_render_params_fuchsia.cc",
-    ]
-  }
 }
 
 jumbo_component("color_space") {
@@ -666,7 +664,6 @@
       "color_space_unittest.cc",
       "color_transform_unittest.cc",
       "color_utils_unittest.cc",
-      "font_fallback_android_unittest.cc",
       "font_fallback_linux_unittest.cc",
       "font_fallback_mac_unittest.cc",
       "font_list_unittest.cc",
@@ -758,6 +755,10 @@
     deps += [ "//ui/android:ui_java" ]
   }
 
+  if (is_android || is_fuchsia) {
+    sources += [ "font_fallback_skia_unittest.cc" ]
+  }
+
   if (!use_aura && !is_ios) {
     sources -= [ "nine_image_painter_unittest.cc" ]
   }
@@ -809,6 +810,10 @@
     sources += [ "linux/native_pixmap_dmabuf_unittest.cc" ]
     deps += [ "//third_party/fontconfig" ]
   }
+
+  if (is_fuchsia) {
+    deps += [ "//skia:test_fonts" ]
+  }
 }
 
 if (is_android) {
diff --git a/ui/gfx/font_fallback.h b/ui/gfx/font_fallback.h
index f7f3619..cf0cb7267 100644
--- a/ui/gfx/font_fallback.h
+++ b/ui/gfx/font_fallback.h
@@ -19,7 +19,8 @@
 // Given a font, returns the fonts that are suitable for fallback.
 GFX_EXPORT std::vector<Font> GetFallbackFonts(const Font& font);
 
-#if defined(ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
+#if defined(ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) || \
+    defined(OS_FUCHSIA)
 
 // Finds a fallback font to render the specified |text| with respect to an
 // initial |font|. Returns the resulting font via out param |result|. Returns
@@ -28,7 +29,7 @@
                                 base::StringPiece16 text,
                                 Font* result);
 
-#endif  // ANDROID || OS_MACOSX || OS_WIN
+#endif  // ANDROID || OS_MACOSX || OS_WIN || OS_FUCHSIA
 
 }  // namespace gfx
 
diff --git a/ui/gfx/font_fallback_fuchsia.cc b/ui/gfx/font_fallback_fuchsia.cc
deleted file mode 100644
index bfdc7aa2..0000000
--- a/ui/gfx/font_fallback_fuchsia.cc
+++ /dev/null
@@ -1,18 +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.
-
-#include "ui/gfx/font_fallback.h"
-
-#include <string>
-#include <vector>
-
-namespace gfx {
-
-std::vector<Font> GetFallbackFonts(const Font& font) {
-  // TODO(fuchsia): Stubbed while bringing up headless build, see
-  // https://crbug.com/743296.
-  return std::vector<Font>();
-}
-
-}  // namespace gfx
diff --git a/ui/gfx/font_fallback_android.cc b/ui/gfx/font_fallback_skia.cc
similarity index 81%
rename from ui/gfx/font_fallback_android.cc
rename to ui/gfx/font_fallback_skia.cc
index 051f22f..39f0f27 100644
--- a/ui/gfx/font_fallback_android.cc
+++ b/ui/gfx/font_fallback_skia.cc
@@ -7,9 +7,9 @@
 #include <string>
 #include <vector>
 
-#include "base/android/locale_utils.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/trace_event/trace_event.h"
+#include "build/build_config.h"
 #include "third_party/icu/source/common/unicode/uchar.h"
 #include "third_party/icu/source/common/unicode/uscript.h"
 #include "third_party/icu/source/common/unicode/utf16.h"
@@ -17,6 +17,10 @@
 #include "third_party/skia/include/core/SkTypeface.h"
 #include "ui/gfx/font.h"
 
+#if defined(OS_ANDROID)
+#include "base/android/locale_utils.h"
+#endif  // defined(OS_ANDROID)
+
 namespace gfx {
 
 std::vector<Font> GetFallbackFonts(const Font& font) {
@@ -31,8 +35,19 @@
 
   sk_sp<SkFontMgr> font_mgr(SkFontMgr::RefDefault());
 
+  const char** bcp47_locales = nullptr;
+  int num_bcp_locals = 0;
+
+  // TODO(sergeyu): Specify bcp47 locale on all platforms. Ideally the locale
+  // should be passed here through gfx::RenderText.
+#if defined(OS_ANDROID)
   std::string locale = base::android::GetDefaultLocaleString();
-  const char* bcp47_locales[] = {locale.c_str()};
+  const char* android_bcp47_locales[] = {locale.c_str()};
+  if (!locale.empty()) {
+    bcp47_locales = android_bcp47_locales;
+    num_bcp_locals = base::size(android_bcp47_locales);
+  }
+#endif  // defined(OS_ANDROID)
 
   const int font_weight = (font.GetWeight() == Font::Weight::INVALID)
                               ? static_cast<int>(Font::Weight::NORMAL)
@@ -52,8 +67,7 @@
     U16_NEXT(text.data(), offset, text.length(), code_point);
 
     sk_sp<SkTypeface> typeface(font_mgr->matchFamilyStyleCharacter(
-        font.GetFontName().c_str(), skia_style,
-        locale.empty() ? nullptr : bcp47_locales, locale.empty() ? 0 : 1,
+        font.GetFontName().c_str(), skia_style, bcp47_locales, num_bcp_locals,
         code_point));
     // If the typeface is not found or was already tested, skip it.
     if (!typeface || !tested_typeface.insert(typeface->uniqueID()).second)
diff --git a/ui/gfx/font_fallback_android_unittest.cc b/ui/gfx/font_fallback_skia_unittest.cc
similarity index 87%
rename from ui/gfx/font_fallback_android_unittest.cc
rename to ui/gfx/font_fallback_skia_unittest.cc
index 7ea7e7d..07a579c7 100644
--- a/ui/gfx/font_fallback_android_unittest.cc
+++ b/ui/gfx/font_fallback_skia_unittest.cc
@@ -14,13 +14,13 @@
 static const wchar_t* kFallbackFontTests[] = {
     L"\u0540\u0541",  // Armenian,
     L"\u0631\u0632",  // Arabic
-    L"\u0D21\u0D22",  // Malayalam
+    L"\u0915\u093f",  // Devanagari
     L"\u5203\u5204",  // CJK Unified Ideograph
 };
 
 }  // namespace
 
-TEST(FontFallbackAndroidTest, EmptyStringFallback) {
+TEST(FontFallbackSkiaTest, EmptyStringFallback) {
   Font base_font;
   Font fallback_font;
   bool result =
@@ -28,7 +28,7 @@
   EXPECT_FALSE(result);
 }
 
-TEST(FontFallbackAndroidTest, FontFallback) {
+TEST(FontFallbackSkiaTest, FontFallback) {
   for (const auto* test : kFallbackFontTests) {
     Font base_font;
     Font fallback_font;
diff --git a/ui/gfx/font_names_testing.cc b/ui/gfx/font_names_testing.cc
index 0815bcb6..fda2dfe0 100644
--- a/ui/gfx/font_names_testing.cc
+++ b/ui/gfx/font_names_testing.cc
@@ -22,7 +22,7 @@
 dessert.
 */
 
-#if defined(OS_LINUX)
+#if defined(OS_LINUX) || defined(OS_FUCHSIA)
 const char kTestFontName[] = "Arimo";
 #elif defined(OS_ANDROID)
 const char kTestFontName[] = "sans-serif";
@@ -30,7 +30,7 @@
 const char kTestFontName[] = "Arial";
 #endif
 
-#if defined(OS_LINUX)
+#if defined(OS_LINUX) || defined(OS_FUCHSIA)
 const char kSymbolFontName[] = "DejaVu Sans";
 #elif defined(OS_ANDROID)
 const char kSymbolFontName[] = "monospace";
@@ -40,7 +40,7 @@
 const char kSymbolFontName[] = "Symbol";
 #endif
 
-#if defined(OS_LINUX)
+#if defined(OS_LINUX) || defined(OS_FUCHSIA)
 const char kCJKFontName[] = "Noto Sans CJK JP";
 #elif defined(OS_ANDROID)
 const char kCJKFontName[] = "serif";
diff --git a/ui/gfx/font_render_params_fuchsia.cc b/ui/gfx/font_render_params_fuchsia.cc
deleted file mode 100644
index cc44366..0000000
--- a/ui/gfx/font_render_params_fuchsia.cc
+++ /dev/null
@@ -1,43 +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.
-
-#include "ui/gfx/font_render_params.h"
-
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/no_destructor.h"
-
-namespace gfx {
-
-namespace {
-
-// Returns the system's default settings.
-FontRenderParams LoadDefaults() {
-  FontRenderParams params;
-  params.antialiasing = true;
-  params.autohinter = true;
-  params.use_bitmaps = true;
-  params.subpixel_rendering = FontRenderParams::SUBPIXEL_RENDERING_NONE;
-  params.subpixel_positioning = true;
-  params.hinting = FontRenderParams::HINTING_SLIGHT;
-
-  return params;
-}
-
-}  // namespace
-
-FontRenderParams GetFontRenderParams(const FontRenderParamsQuery& query,
-                                     std::string* family_out) {
-  if (family_out)
-    NOTIMPLEMENTED();
-  // Customized font rendering settings are not supported, only defaults.
-  static const base::NoDestructor<gfx::FontRenderParams> params(LoadDefaults());
-  return *params;
-}
-
-float GetFontRenderParamsDeviceScaleFactor() {
-  return 1.0;
-}
-
-}  // namespace gfx
diff --git a/ui/gfx/font_render_params_android.cc b/ui/gfx/font_render_params_skia.cc
similarity index 100%
rename from ui/gfx/font_render_params_android.cc
rename to ui/gfx/font_render_params_skia.cc
diff --git a/ui/gfx/render_text_harfbuzz.cc b/ui/gfx/render_text_harfbuzz.cc
index 3b8a2be7..c5a0bc4 100644
--- a/ui/gfx/render_text_harfbuzz.cc
+++ b/ui/gfx/render_text_harfbuzz.cc
@@ -1799,7 +1799,8 @@
 
   std::string preferred_fallback_family;
 
-#if defined(OS_ANDROID) || defined(OS_WIN) || defined(OS_MACOSX)
+#if defined(OS_ANDROID) || defined(OS_WIN) || defined(OS_MACOSX) || \
+    defined(OS_FUCHSIA)
   Font fallback_font(primary_font);
   bool fallback_found;
   {
@@ -1820,7 +1821,7 @@
     if (runs.empty())
       return;
   }
-#endif  // OS_ANDROID || OS_WIN || OS_MACOSX
+#endif  // OS_ANDROID || OS_WIN || OS_MACOSX || OS_FUCHSIA
 
   std::vector<Font> fallback_font_list;
   {
diff --git a/ui/gfx/render_text_unittest.cc b/ui/gfx/render_text_unittest.cc
index bdfeca8a..2bcf52e 100644
--- a/ui/gfx/render_text_unittest.cc
+++ b/ui/gfx/render_text_unittest.cc
@@ -2668,6 +2668,12 @@
   // TODO(mboc): Add some unittests for other weights (currently not
   // implemented because of test system font configuration).
   RenderText* render_text = GetRenderText();
+
+#if defined(OS_FUCHSIA)
+  // Increase font size to ensure that bold and regular styles differ in width.
+  render_text->SetFontList(FontList("Arial, 20px"));
+#endif  // defined(OS_FUCHSIA)
+
   render_text->SetText(UTF8ToUTF16("Hello World"));
 
   const int plain_width = render_text->GetStringSize().width();
@@ -4306,8 +4312,6 @@
 
 // Ensure that the fallback fonts offered by GetFallbackFont() support glyphs
 // for different languages.
-// TODO(https://crbug.com/743296): Implements Fallback fonts on Fuchsia.
-#if !defined(OS_FUCHSIA)
 TEST_F(RenderTextTest, HarfBuzz_FallbackFontsSupportGlyphs) {
   // The word 'test' in different languages.
   static const wchar_t* kLanguageTests[] = {
@@ -4328,13 +4332,9 @@
     }
   }
 }
-#endif  // !defined(OS_FUCHSIA)
-
 
 // Ensure that the fallback fonts offered by GetFallbackFont() support glyphs
 // for different languages.
-// TODO(https://crbug.com/743296): Implements Fallback fonts on Fuchsia.
-#if !defined(OS_FUCHSIA)
 TEST_F(RenderTextTest, HarfBuzz_MultiRunsSupportGlyphs) {
   static const wchar_t* kLanguageTests[] = {
       L"www.اختبار.com",
@@ -4358,7 +4358,6 @@
     }
   }
 }
-#endif  // !defined(OS_FUCHSIA)
 
 // Ensure that the width reported by RenderText is sufficient for drawing. Draws
 // to a canvas and checks if any pixel beyond the bounding rectangle is colored.
@@ -4419,39 +4418,23 @@
     }
     {
       SCOPED_TRACE("TextDoesntClip Left Side");
-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
-    defined(OS_ANDROID) || defined(ARCH_CPU_MIPS_FAMILY)
-      // TODO(dschuyler): On Windows, Chrome OS, Linux, Android, and Mac
-      // smoothing draws to the left of text.  This appears to be a preexisting
-      // issue that wasn't revealed by the prior unit tests.  RenderText
-      // currently only uses origins and advances and ignores bounding boxes so
-      // cannot account for under- and over-hang.
+      // TODO(dschuyler): Smoothing draws to the left of text. This appears to
+      // be a preexisting issue that wasn't revealed by the prior unit tests.
+      // RenderText currently only uses origins and advances and ignores
+      // bounding boxes so cannot account for under- and over-hang.
       rect_buffer.EnsureSolidRect(SK_ColorWHITE, 0, kTestSize, kTestSize - 1,
                                   string_size.height());
-#else
-      rect_buffer.EnsureSolidRect(SK_ColorWHITE, 0, kTestSize, kTestSize,
-                                  string_size.height());
-#endif
     }
     {
       SCOPED_TRACE("TextDoesntClip Right Side");
-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
-    defined(OS_ANDROID) || defined(ARCH_CPU_MIPS_FAMILY)
-      // TODO(dschuyler): On Windows, Chrome OS, Linux, Android, and Mac
-      // smoothing draws to the right of text.  This appears to be a preexisting
-      // issue that wasn't revealed by the prior unit tests.  RenderText
-      // currently only uses origins and advances and ignores bounding boxes so
-      // cannot account for under- and over-hang.
+      // TODO(dschuyler): Smoothing draws to the right of text. This appears to
+      // be a preexisting issue that wasn't revealed by the prior unit tests.
+      // RenderText currently only uses origins and advances and ignores
+      // bounding boxes so cannot account for under- and over-hang.
       rect_buffer.EnsureSolidRect(SK_ColorWHITE,
                                   kTestSize + string_size.width() + 1,
                                   kTestSize, kTestSize - 1,
                                   string_size.height());
-#else
-      rect_buffer.EnsureSolidRect(SK_ColorWHITE,
-                                  kTestSize + string_size.width(),
-                                  kTestSize, kTestSize,
-                                  string_size.height());
-#endif
     }
   }
 }
@@ -4572,7 +4555,7 @@
   render_text->SetText(UTF8ToUTF16("x"));
 
   DrawVisualText();
-#if defined(OS_LINUX) || defined(OS_ANDROID)
+#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
   // On Linux, whether subpixel AA is supported is determined by the platform
   // FontConfig. Force it into a particular style after computing runs. Other
   // platforms use a known default FontRenderParams from a static local.
@@ -4586,7 +4569,7 @@
 
   render_text->set_subpixel_rendering_suppressed(true);
   DrawVisualText();
-#if defined(OS_LINUX) || defined(OS_ANDROID)
+#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
   // For Linux, runs shouldn't be re-calculated, and the suppression of the
   // SUBPIXEL_RENDERING_RGB set above should now take effect. But, after
   // checking, apply the override anyway to be explicit that it is suppressed.
diff --git a/ui/gfx/test/run_all_unittests.cc b/ui/gfx/test/run_all_unittests.cc
index ae93b4e..6e6882c 100644
--- a/ui/gfx/test/run_all_unittests.cc
+++ b/ui/gfx/test/run_all_unittests.cc
@@ -26,6 +26,10 @@
 #include "mojo/core/embedder/embedder.h"  // nogncheck
 #endif
 
+#if defined(OS_FUCHSIA)
+#include "skia/ext/test_fonts.h"  // nogncheck
+#endif
+
 namespace {
 
 class GfxTestSuite : public base::TestSuite {
@@ -50,6 +54,10 @@
 #if defined(OS_WIN)
     gfx::win::InitializeDirectWrite();
 #endif
+
+#if defined(OS_FUCHSIA)
+    skia::ConfigureTestFont();
+#endif
   }
 
   void Shutdown() override {
diff --git a/ui/keyboard/keyboard_resources.grd b/ui/keyboard/keyboard_resources.grd
index ee4ec347..91ca2ba2 100644
--- a/ui/keyboard/keyboard_resources.grd
+++ b/ui/keyboard/keyboard_resources.grd
@@ -8,7 +8,7 @@
     <output filename="grit/keyboard_resources.h" type="rc_header">
       <emit emit_type='prepend'></emit>
     </output>
-    <output filename="grit/keyboard_resources_map.h" type="gzipped_resource_map_header" />
+    <output filename="grit/keyboard_resources_map.h" type="resource_map_header" />
     <output filename="keyboard_resources.pak" type="data_package" />
   </outputs>
   <release seq="1">
diff --git a/ui/keyboard/resources/keyboard_resource_util.cc b/ui/keyboard/resources/keyboard_resource_util.cc
index 9f667d85..79e2f9e 100644
--- a/ui/keyboard/resources/keyboard_resource_util.cc
+++ b/ui/keyboard/resources/keyboard_resource_util.cc
@@ -16,11 +16,11 @@
 const char kKeyboardURL[] = "chrome://keyboard";
 const char kKeyboardHost[] = "keyboard";
 
-const GzippedGritResourceMap* GetKeyboardExtensionResources(size_t* size) {
+const GritResourceMap* GetKeyboardExtensionResources(size_t* size) {
   // This looks a lot like the contents of a resource map; however it is
   // necessary to have a custom path for the extension path, so the resource
   // map cannot be used directly.
-  static const GzippedGritResourceMap kKeyboardResources[] = {
+  static const GritResourceMap kKeyboardResources[] = {
       {"keyboard/locales/en.js", IDR_KEYBOARD_LOCALES_EN},
       {"keyboard/config/emoji.js", IDR_KEYBOARD_CONFIG_EMOJI},
       {"keyboard/config/hwt.js", IDR_KEYBOARD_CONFIG_HWT},
diff --git a/ui/keyboard/resources/keyboard_resource_util.h b/ui/keyboard/resources/keyboard_resource_util.h
index c4f7750..b353e137 100644
--- a/ui/keyboard/resources/keyboard_resource_util.h
+++ b/ui/keyboard/resources/keyboard_resource_util.h
@@ -9,7 +9,7 @@
 
 #include "ui/keyboard/keyboard_export.h"
 
-struct GzippedGritResourceMap;
+struct GritResourceMap;
 
 namespace keyboard {
 
@@ -21,7 +21,7 @@
 
 // Get the list of keyboard resources. |size| is populated with the number of
 // resources in the returned array.
-KEYBOARD_EXPORT const GzippedGritResourceMap* GetKeyboardExtensionResources(
+KEYBOARD_EXPORT const GritResourceMap* GetKeyboardExtensionResources(
     size_t* size);
 
 // Initializes the keyboard module. This includes adding the necessary pak files
diff --git a/ui/native_theme/common_theme.cc b/ui/native_theme/common_theme.cc
index d0f6ba7..89f324a5 100644
--- a/ui/native_theme/common_theme.cc
+++ b/ui/native_theme/common_theme.cc
@@ -301,7 +301,7 @@
 
     // FocusableBorder
     case NativeTheme::kColorId_FocusedBorderColor:
-      return gfx::kGoogleBlue500;
+      return SkColorSetA(gfx::kGoogleBlue500, 0x66);
     case NativeTheme::kColorId_UnfocusedBorderColor:
       return SkColorSetA(SK_ColorBLACK, 0x66);
 
diff --git a/ui/views/controls/focus_ring.cc b/ui/views/controls/focus_ring.cc
index 2346789..95c79c9 100644
--- a/ui/views/controls/focus_ring.cc
+++ b/ui/views/controls/focus_ring.cc
@@ -97,8 +97,8 @@
 
   cc::PaintFlags paint;
   paint.setAntiAlias(true);
-  paint.setColor(color_.value_or(SkColorSetA(
-      GetNativeTheme()->GetSystemColor(ColorIdForValidity(!invalid_)), 0x66)));
+  paint.setColor(color_.value_or(
+      GetNativeTheme()->GetSystemColor(ColorIdForValidity(!invalid_))));
   paint.setStyle(cc::PaintFlags::kStroke_Style);
   paint.setStrokeWidth(PlatformStyle::kFocusHaloThickness);
 
diff --git a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar.html b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar.html
index 8187937..242047c 100644
--- a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar.html
+++ b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar.html
@@ -42,16 +42,17 @@
       }
 
       #leftContent {
-        /* margin-start here must match margin-end on #rightContent. */
-        margin-inline-start: 12px;
         position: relative;
         transition: opacity 100ms;
       }
 
       #leftSpacer {
         align-items: center;
+        box-sizing: border-box;
         display: flex;
-        margin-inline-start: 6px;
+        /* 12px to match #rightSpacer + 6px to align with icons in menus. */
+        padding-inline-start: calc(12px + 6px);
+        width: var(--cr-toolbar-left-spacer-width, auto);
       }
 
       cr-icon-button {
@@ -69,8 +70,8 @@
         justify-content: center;
       }
 
-      #rightContent {
-        margin-inline-end: 12px;
+      #rightSpacer {
+        padding-inline-end: 12px;
       }
 
       :host([narrow]) #centeredContent {
@@ -91,6 +92,10 @@
         flex: 1 1 var(--cr-toolbar-field-margin, 0);
       }
 
+      :host(:not([narrow])) #centeredContent {
+        flex-basis: var(--cr-toolbar-center-basis, 0);
+      }
+
       :host(:not([narrow])) #rightContent {
         flex: 1 1 0;
         text-align: end;
@@ -178,7 +183,9 @@
     </div>
 
     <div id="rightContent">
-      <slot></slot>
+      <div id="rightSpacer">
+        <slot></slot>
+      </div>
     </div>
   </template>
   <script src="cr_toolbar.js"></script>
diff --git a/ui/webui/resources/cr_elements/shared_vars_css.html b/ui/webui/resources/cr_elements/shared_vars_css.html
index ab5c6c6b..a16e5d48 100644
--- a/ui/webui/resources/cr_elements/shared_vars_css.html
+++ b/ui/webui/resources/cr_elements/shared_vars_css.html
@@ -186,15 +186,16 @@
     --cr-section-vertical-margin: 21px;
 
     --cr-centered-card-max-width: 680px;
+    --cr-centered-card-width-percentage: 0.96;
     --cr-centered-card-container: {
       box-sizing: border-box;
       display: block;
       height: inherit;
       margin: 0 auto;
-      max-width: calc(var(--cr-centered-card-max-width) + 3 * 2px);
+      max-width: var(--cr-centered-card-max-width);
       min-width: 550px;
       position: relative;
-      width: 96%;
+      width: calc(100% * var(--cr-centered-card-width-percentage));
     }
 
     --cr-card-external-title: {