diff --git a/DEPS b/DEPS
index bada0b49..c82c3bf 100644
--- a/DEPS
+++ b/DEPS
@@ -40,11 +40,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': '5128bd4b184b4572321821ad14def1a910159d6b',
+  'skia_revision': '0bb6f38e511365670b9917ad76ece6f0bee9e282',
   # 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': '70995dbfd413e096476967b8780022e6cfe507bf',
+  'v8_revision': '97674cb813b238739f33a160b20b2dd0f0033af8',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling swarming_client
   # and whatever else without interference from each other.
diff --git a/base/memory/memory_pressure_monitor_mac.cc b/base/memory/memory_pressure_monitor_mac.cc
index 39158902..6261de2 100644
--- a/base/memory/memory_pressure_monitor_mac.cc
+++ b/base/memory/memory_pressure_monitor_mac.cc
@@ -4,6 +4,8 @@
 
 #include "base/memory/memory_pressure_monitor_mac.h"
 
+#include <CoreFoundation/CoreFoundation.h>
+
 #include <dlfcn.h>
 #include <stddef.h>
 #include <sys/sysctl.h>
@@ -26,9 +28,9 @@
 namespace mac {
 
 MemoryPressureListener::MemoryPressureLevel
-MemoryPressureMonitor::MemoryPressureLevelForMacMemoryPressure(
-    int mac_memory_pressure) {
-  switch (mac_memory_pressure) {
+MemoryPressureMonitor::MemoryPressureLevelForMacMemoryPressureLevel(
+    int mac_memory_pressure_level) {
+  switch (mac_memory_pressure_level) {
     case DISPATCH_MEMORYPRESSURE_NORMAL:
       return MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE;
     case DISPATCH_MEMORYPRESSURE_WARN:
@@ -39,6 +41,13 @@
   return MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE;
 }
 
+void MemoryPressureMonitor::OnRunLoopExit(CFRunLoopObserverRef observer,
+                                          CFRunLoopActivity activity,
+                                          void* info) {
+  MemoryPressureMonitor* self = static_cast<MemoryPressureMonitor*>(info);
+  self->UpdatePressureLevelOnRunLoopExit();
+}
+
 MemoryPressureMonitor::MemoryPressureMonitor()
     : memory_level_event_source_(dispatch_source_create(
           DISPATCH_SOURCE_TYPE_MEMORYPRESSURE,
@@ -48,77 +57,140 @@
           dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0))),
       dispatch_callback_(
           base::Bind(&MemoryPressureListener::NotifyMemoryPressure)),
-      last_statistic_report_(CFAbsoluteTimeGetCurrent()),
+      last_statistic_report_time_(CFAbsoluteTimeGetCurrent()),
       last_pressure_level_(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE),
-      reporting_error_(0) {
-  if (memory_level_event_source_.get() != nullptr) {
+      subtick_seconds_(0) {
+  // Attach an event handler to the memory pressure event source.
+  if (memory_level_event_source_.get()) {
     dispatch_source_set_event_handler(memory_level_event_source_, ^{
       OnMemoryPressureChanged(memory_level_event_source_.get(),
                               dispatch_callback_);
     });
+
+    // Start monitoring the event source.
     dispatch_resume(memory_level_event_source_);
   }
+
+  // Create a CFRunLoopObserver to check the memory pressure at the end of
+  // every pass through the event loop (modulo kUMATickSize).
+  CFRunLoopObserverContext observer_context = {0, this, NULL, NULL, NULL};
+
+  exit_observer_.reset(
+      CFRunLoopObserverCreate(kCFAllocatorDefault, kCFRunLoopExit, true, 0,
+                              OnRunLoopExit, &observer_context));
+
+  CFRunLoopRef run_loop = CFRunLoopGetCurrent();
+  CFRunLoopAddObserver(run_loop, exit_observer_, kCFRunLoopCommonModes);
+  CFRunLoopAddObserver(run_loop, exit_observer_,
+                       kMessageLoopExclusiveRunLoopMode);
 }
 
 MemoryPressureMonitor::~MemoryPressureMonitor() {
-  if (memory_level_event_source_.get() != nullptr)
+  // Detach from the run loop.
+  CFRunLoopRef run_loop = CFRunLoopGetCurrent();
+  CFRunLoopRemoveObserver(run_loop, exit_observer_, kCFRunLoopCommonModes);
+  CFRunLoopRemoveObserver(run_loop, exit_observer_,
+                          kMessageLoopExclusiveRunLoopMode);
+
+  // Remove the memory pressure event source.
+  if (memory_level_event_source_.get()) {
     dispatch_source_cancel(memory_level_event_source_);
+  }
+}
+
+int MemoryPressureMonitor::GetMacMemoryPressureLevel() {
+  // Get the raw memory pressure level from macOS.
+  int mac_memory_pressure_level;
+  size_t length = sizeof(int);
+  sysctlbyname("kern.memorystatus_vm_pressure_level",
+               &mac_memory_pressure_level, &length, nullptr, 0);
+
+  return mac_memory_pressure_level;
+}
+
+void MemoryPressureMonitor::UpdatePressureLevel() {
+  // Get the current macOS pressure level and convert to the corresponding
+  // Chrome pressure level.
+  int mac_memory_pressure_level = GetMacMemoryPressureLevel();
+  MemoryPressureListener::MemoryPressureLevel new_pressure_level =
+      MemoryPressureLevelForMacMemoryPressureLevel(mac_memory_pressure_level);
+
+  // Compute the number of "ticks" spent at |last_pressure_level_| (since the
+  // last report sent to UMA).
+  CFTimeInterval now = CFAbsoluteTimeGetCurrent();
+  CFTimeInterval time_since_last_report = now - last_statistic_report_time_;
+  last_statistic_report_time_ = now;
+
+  double accumulated_time = time_since_last_report + subtick_seconds_;
+  int ticks_to_report = static_cast<int>(accumulated_time / kUMATickSize);
+  // Save for later the seconds that didn't make it into a full tick.
+  subtick_seconds_ = std::fmod(accumulated_time, kUMATickSize);
+
+  // Round the tick count up on a pressure level change to ensure we capture it.
+  bool pressure_level_changed = (new_pressure_level != last_pressure_level_);
+  if (pressure_level_changed && ticks_to_report < 1) {
+    ticks_to_report = 1;
+    subtick_seconds_ = 0;
+  }
+
+  // Send elapsed ticks to UMA.
+  if (ticks_to_report >= 1) {
+    RecordMemoryPressure(last_pressure_level_, ticks_to_report);
+  }
+
+  // Save the now-current memory pressure level.
+  last_pressure_level_ = new_pressure_level;
+}
+
+void MemoryPressureMonitor::UpdatePressureLevelOnRunLoopExit() {
+  // Wait until it's time to check the pressure level.
+  CFTimeInterval now = CFAbsoluteTimeGetCurrent();
+  if (now >= next_run_loop_update_time_) {
+    UpdatePressureLevel();
+
+    // Update again in kUMATickSize seconds. We can update at any frequency,
+    // but because we're only checking memory pressure levels for UMA there's
+    // no need to update more frequently than we're keeping statistics on.
+    next_run_loop_update_time_ = now + kUMATickSize - subtick_seconds_;
+  }
+}
+
+// Static.
+int MemoryPressureMonitor::GetSecondsPerUMATick() {
+  return kUMATickSize;
 }
 
 MemoryPressureListener::MemoryPressureLevel
 MemoryPressureMonitor::GetCurrentPressureLevel() {
-  int mac_memory_pressure;
-  size_t length = sizeof(int);
-  sysctlbyname("kern.memorystatus_vm_pressure_level", &mac_memory_pressure,
-               &length, nullptr, 0);
-  MemoryPressureListener::MemoryPressureLevel memory_pressure_level =
-      MemoryPressureLevelForMacMemoryPressure(mac_memory_pressure);
-  bool pressure_level_changed = false;
-  if (last_pressure_level_ != memory_pressure_level) {
-    pressure_level_changed = true;
-  }
-  SendStatisticsIfNecessary(pressure_level_changed);
-  last_pressure_level_ = memory_pressure_level;
-  return memory_pressure_level;
+  UpdatePressureLevel();
+  return last_pressure_level_;
 }
 
 void MemoryPressureMonitor::OnMemoryPressureChanged(
     dispatch_source_s* event_source,
     const MemoryPressureMonitor::DispatchCallback& dispatch_callback) {
-  int mac_memory_pressure = dispatch_source_get_data(event_source);
+  // Get the Chrome-equvialent memory pressure level.
+  int mac_memory_pressure_level = dispatch_source_get_data(event_source);
   MemoryPressureListener::MemoryPressureLevel memory_pressure_level =
-      MemoryPressureLevelForMacMemoryPressure(mac_memory_pressure);
-  bool pressure_level_changed = false;
-  if (last_pressure_level_ != memory_pressure_level) {
-    pressure_level_changed = true;
-  }
-  SendStatisticsIfNecessary(pressure_level_changed);
-  last_pressure_level_ = memory_pressure_level;
+      MemoryPressureLevelForMacMemoryPressureLevel(mac_memory_pressure_level);
+
+  // Run the callback that's waiting on memory pressure change notifications.
+  // Note that we don't bother with updating |last_pressure_level_| or
+  // causing memory pressure stats to be sent to UMA. Memory pressure change
+  // notifications are delayed on the Mac, so the current actual memory pressure
+  // level may be different than the incoming pressure level from the event.
+  //
+  // In general we don't want to take action (such as freeing memory) on
+  // memory pressure change events, but that's how the current system is
+  // designed. Given that it's incorrect to act on either stale or current
+  // pressure level info, it's not clear which level is better to send. For
+  // now stick with how it's been implemented to date, which is to send the
+  // stale value.
   if (memory_pressure_level !=
       MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE)
     dispatch_callback.Run(memory_pressure_level);
 }
 
-void MemoryPressureMonitor::SendStatisticsIfNecessary(
-    bool pressure_level_changed) {
-  CFTimeInterval now = CFAbsoluteTimeGetCurrent();
-  CFTimeInterval since_last_report = now - last_statistic_report_;
-  last_statistic_report_ = now;
-
-  double accumulated_time = since_last_report + reporting_error_;
-  int ticks_to_report = static_cast<int>(accumulated_time / kUMATickSize);
-  reporting_error_ = std::fmod(accumulated_time, kUMATickSize);
-
-  // Round up on change to ensure we capture it
-  if (pressure_level_changed && ticks_to_report < 1) {
-    ticks_to_report = 1;
-    reporting_error_ = 0;
-  }
-
-  if (ticks_to_report >= 1)
-    RecordMemoryPressure(last_pressure_level_, ticks_to_report);
-}
-
 void MemoryPressureMonitor::SetDispatchCallback(
     const DispatchCallback& callback) {
   dispatch_callback_ = callback;
diff --git a/base/memory/memory_pressure_monitor_mac.h b/base/memory/memory_pressure_monitor_mac.h
index 9118632..b85b6c90 100644
--- a/base/memory/memory_pressure_monitor_mac.h
+++ b/base/memory/memory_pressure_monitor_mac.h
@@ -9,10 +9,12 @@
 #include <dispatch/dispatch.h>
 
 #include "base/base_export.h"
+#include "base/mac/scoped_cftyperef.h"
 #include "base/mac/scoped_dispatch_object.h"
 #include "base/macros.h"
 #include "base/memory/memory_pressure_listener.h"
 #include "base/memory/memory_pressure_monitor.h"
+#include "base/message_loop/message_pump_mac.h"
 
 namespace base {
 namespace mac {
@@ -34,24 +36,51 @@
  private:
   friend TestMemoryPressureMonitor;
 
-  static MemoryPressureLevel
-      MemoryPressureLevelForMacMemoryPressure(int mac_memory_pressure);
+  static MemoryPressureLevel MemoryPressureLevelForMacMemoryPressureLevel(
+      int mac_memory_pressure_level);
+  static void OnRunLoopExit(CFRunLoopObserverRef observer,
+                            CFRunLoopActivity activity,
+                            void* info);
+  // Returns the raw memory pressure level from the macOS. Exposed for
+  // unit testing.
+  virtual int GetMacMemoryPressureLevel();
+
+  // Updates |last_pressure_level_| with the current memory pressure level.
+  void UpdatePressureLevel();
+
+  // Updates |last_pressure_level_| at the end of every run loop pass (modulo
+  // some number of seconds).
+  void UpdatePressureLevelOnRunLoopExit();
+
+  // Run |dispatch_callback| on memory pressure notifications from the OS.
   void OnMemoryPressureChanged(dispatch_source_s* event_source,
                                const DispatchCallback& dispatch_callback);
-  void SendStatisticsIfNecessary(bool pressure_level_changed);
 
+  // Returns the number of seconds per UMA tick (for statistics recording).
+  // Exposed for testing.
+  static int GetSecondsPerUMATick();
+
+  // The dispatch source that generates memory pressure change notifications.
   ScopedDispatchObject<dispatch_source_t> memory_level_event_source_;
 
+  // The callback to call upon receiving a memory pressure change notification.
   DispatchCallback dispatch_callback_;
 
-  CFTimeInterval last_statistic_report_;
+  // Last UMA report time.
+  CFTimeInterval last_statistic_report_time_;
 
+  // Most-recent memory pressure level.
   MemoryPressureLevel last_pressure_level_;
 
-  // The UMA statistic is recorded in 5 second increments. This
-  // accumulates the remaining time to be rolled into the next
-  // call.
-  CFTimeInterval reporting_error_;
+  // Observer that tracks exits from the main run loop.
+  ScopedCFTypeRef<CFRunLoopObserverRef> exit_observer_;
+
+  // Next time to update the memory pressure level when exiting the run loop.
+  CFTimeInterval next_run_loop_update_time_;
+
+  // Seconds left over from the last UMA tick calculation (to be added to the
+  // next calculation).
+  CFTimeInterval subtick_seconds_;
 
   DISALLOW_COPY_AND_ASSIGN(MemoryPressureMonitor);
 };
diff --git a/base/memory/memory_pressure_monitor_mac_unittest.cc b/base/memory/memory_pressure_monitor_mac_unittest.cc
index b7c29cd..9d251f0 100644
--- a/base/memory/memory_pressure_monitor_mac_unittest.cc
+++ b/base/memory/memory_pressure_monitor_mac_unittest.cc
@@ -4,7 +4,11 @@
 
 #include "base/memory/memory_pressure_monitor_mac.h"
 
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/mac/scoped_cftyperef.h"
 #include "base/macros.h"
+#include "base/test/histogram_tester.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace base {
@@ -12,43 +16,87 @@
 
 class TestMemoryPressureMonitor : public MemoryPressureMonitor {
  public:
-  using MemoryPressureMonitor::MemoryPressureLevelForMacMemoryPressure;
+  using MemoryPressureMonitor::MemoryPressureLevelForMacMemoryPressureLevel;
+
+  // A HistogramTester for verifying correct UMA stat generation.
+  base::HistogramTester tester;
 
   TestMemoryPressureMonitor() { }
 
+  // Clears the next run loop update time so that the next pass of the run
+  // loop checks the memory pressure level immediately. Normally there's a
+  // 5 second delay between pressure readings.
+  void ResetRunLoopUpdateTime() { next_run_loop_update_time_ = 0; }
+
+  // Access to the last-recorded memory pressure level.
+  MemoryPressureListener::MemoryPressureLevel LastPressureLevel() {
+    return last_pressure_level_;
+  }
+
+  // Sets the last UMA stat report time. Time spent in memory pressure is
+  // recorded in 5-second "ticks" from the last time statistics were recorded.
+  void SetLastStatisticReportTime(CFTimeInterval time) {
+    last_statistic_report_time_ = time;
+  }
+
+  // Sets the raw macOS memory pressure level read by the memory pressure
+  // monitor.
+  int macos_pressure_level_for_testing_;
+
+  // Exposes the UpdatePressureLevel() method for testing.
+  void UpdatePressureLevel() { MemoryPressureMonitor::UpdatePressureLevel(); }
+
+  // Returns the number of seconds left over from the last UMA tick
+  // calculation.
+  int SubTickSeconds() { return subtick_seconds_; }
+
+  // Returns the number of seconds per UMA tick.
+  static int GetSecondsPerUMATick() {
+    return MemoryPressureMonitor::GetSecondsPerUMATick();
+  }
+
  private:
   DISALLOW_COPY_AND_ASSIGN(TestMemoryPressureMonitor);
+
+  int GetMacMemoryPressureLevel() override {
+    return macos_pressure_level_for_testing_;
+  }
 };
 
 TEST(MacMemoryPressureMonitorTest, MemoryPressureFromMacMemoryPressure) {
-  EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE,
-            TestMemoryPressureMonitor::
-                MemoryPressureLevelForMacMemoryPressure(
-                    DISPATCH_MEMORYPRESSURE_NORMAL));
-  EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE,
-            TestMemoryPressureMonitor::
-                MemoryPressureLevelForMacMemoryPressure(
-                    DISPATCH_MEMORYPRESSURE_WARN));
-  EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL,
-            TestMemoryPressureMonitor::
-                MemoryPressureLevelForMacMemoryPressure(
-                    DISPATCH_MEMORYPRESSURE_CRITICAL));
-  EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE,
-            TestMemoryPressureMonitor::
-                MemoryPressureLevelForMacMemoryPressure(0));
-  EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE,
-            TestMemoryPressureMonitor::
-                MemoryPressureLevelForMacMemoryPressure(3));
-  EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE,
-            TestMemoryPressureMonitor::
-                MemoryPressureLevelForMacMemoryPressure(5));
-  EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE,
-            TestMemoryPressureMonitor::
-                MemoryPressureLevelForMacMemoryPressure(-1));
+  EXPECT_EQ(
+      MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE,
+      TestMemoryPressureMonitor::MemoryPressureLevelForMacMemoryPressureLevel(
+          DISPATCH_MEMORYPRESSURE_NORMAL));
+  EXPECT_EQ(
+      MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE,
+      TestMemoryPressureMonitor::MemoryPressureLevelForMacMemoryPressureLevel(
+          DISPATCH_MEMORYPRESSURE_WARN));
+  EXPECT_EQ(
+      MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL,
+      TestMemoryPressureMonitor::MemoryPressureLevelForMacMemoryPressureLevel(
+          DISPATCH_MEMORYPRESSURE_CRITICAL));
+  EXPECT_EQ(
+      MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE,
+      TestMemoryPressureMonitor::MemoryPressureLevelForMacMemoryPressureLevel(
+          0));
+  EXPECT_EQ(
+      MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE,
+      TestMemoryPressureMonitor::MemoryPressureLevelForMacMemoryPressureLevel(
+          3));
+  EXPECT_EQ(
+      MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE,
+      TestMemoryPressureMonitor::MemoryPressureLevelForMacMemoryPressureLevel(
+          5));
+  EXPECT_EQ(
+      MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE,
+      TestMemoryPressureMonitor::MemoryPressureLevelForMacMemoryPressureLevel(
+          -1));
 }
 
 TEST(MacMemoryPressureMonitorTest, CurrentMemoryPressure) {
   TestMemoryPressureMonitor monitor;
+
   MemoryPressureListener::MemoryPressureLevel memory_pressure =
       monitor.GetCurrentPressureLevel();
   EXPECT_TRUE(memory_pressure ==
@@ -59,5 +107,124 @@
                   MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL);
 }
 
+TEST(MacMemoryPressureMonitorTest, MemoryPressureConversion) {
+  TestMemoryPressureMonitor monitor;
+
+  monitor.macos_pressure_level_for_testing_ = DISPATCH_MEMORYPRESSURE_NORMAL;
+  MemoryPressureListener::MemoryPressureLevel memory_pressure =
+      monitor.GetCurrentPressureLevel();
+  EXPECT_EQ(memory_pressure,
+            MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE);
+
+  monitor.macos_pressure_level_for_testing_ = DISPATCH_MEMORYPRESSURE_WARN;
+  memory_pressure = monitor.GetCurrentPressureLevel();
+  EXPECT_EQ(memory_pressure,
+            MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE);
+
+  monitor.macos_pressure_level_for_testing_ = DISPATCH_MEMORYPRESSURE_CRITICAL;
+  memory_pressure = monitor.GetCurrentPressureLevel();
+  EXPECT_EQ(memory_pressure,
+            MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL);
+}
+
+TEST(MacMemoryPressureMonitorTest, MemoryPressureRunLoopChecking) {
+  TestMemoryPressureMonitor monitor;
+
+  // To test grabbing the memory presure at the end of the run loop, we have to
+  // run the run loop, but to do that the run loop needs a run loop source. Add
+  // a timer as the source. We know that the exit observer is attached to
+  // the kMessageLoopExclusiveRunLoopMode mode, so use that mode.
+  ScopedCFTypeRef<CFRunLoopTimerRef> timer_ref(CFRunLoopTimerCreate(
+      NULL, CFAbsoluteTimeGetCurrent() + 10, 0, 0, 0, nullptr, nullptr));
+  CFRunLoopAddTimer(CFRunLoopGetCurrent(), timer_ref,
+                    kMessageLoopExclusiveRunLoopMode);
+
+  monitor.macos_pressure_level_for_testing_ = DISPATCH_MEMORYPRESSURE_WARN;
+  monitor.ResetRunLoopUpdateTime();
+  CFRunLoopRunInMode(kMessageLoopExclusiveRunLoopMode, 0, true);
+  EXPECT_EQ(monitor.LastPressureLevel(),
+            MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE);
+
+  monitor.macos_pressure_level_for_testing_ = DISPATCH_MEMORYPRESSURE_CRITICAL;
+  monitor.ResetRunLoopUpdateTime();
+  CFRunLoopRunInMode(kMessageLoopExclusiveRunLoopMode, 0, true);
+  EXPECT_EQ(monitor.LastPressureLevel(),
+            MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL);
+
+  monitor.macos_pressure_level_for_testing_ = DISPATCH_MEMORYPRESSURE_NORMAL;
+  monitor.ResetRunLoopUpdateTime();
+  CFRunLoopRunInMode(kMessageLoopExclusiveRunLoopMode, 0, true);
+  EXPECT_EQ(monitor.LastPressureLevel(),
+            MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE);
+
+  CFRunLoopRemoveTimer(CFRunLoopGetCurrent(), timer_ref,
+                       kMessageLoopExclusiveRunLoopMode);
+}
+
+TEST(MacMemoryPressureMonitorTest, RecordMemoryPressureStats) {
+  TestMemoryPressureMonitor monitor;
+  const char* kHistogram = "Memory.PressureLevel";
+  CFTimeInterval now = CFAbsoluteTimeGetCurrent();
+  const int seconds_per_tick =
+      TestMemoryPressureMonitor::GetSecondsPerUMATick();
+
+  // Set the initial pressure level.
+  monitor.macos_pressure_level_for_testing_ = DISPATCH_MEMORYPRESSURE_NORMAL;
+  // Incur one UMA tick of time (and include one extra second of elapsed time).
+  monitor.SetLastStatisticReportTime(now - (seconds_per_tick + 1));
+  monitor.UpdatePressureLevel();
+  monitor.tester.ExpectTotalCount(kHistogram, 1);
+  monitor.tester.ExpectBucketCount(kHistogram, 0, 1);
+  // The report time above included an extra second so there should be 1
+  // sub-tick second left over.
+  EXPECT_EQ(1, monitor.SubTickSeconds());
+
+  // Simulate sitting in normal pressure for 1 second less than 6 UMA tick
+  // seconds and then elevating to warning. With the left over sub-tick second
+  // from above, the total elapsed ticks should be an even 6 UMA ticks.
+  monitor.macos_pressure_level_for_testing_ = DISPATCH_MEMORYPRESSURE_WARN;
+  monitor.SetLastStatisticReportTime(now - (seconds_per_tick * 6 - 1));
+  monitor.UpdatePressureLevel();
+  monitor.tester.ExpectTotalCount(kHistogram, 7);
+  monitor.tester.ExpectBucketCount(kHistogram, 0, 7);
+  monitor.tester.ExpectBucketCount(kHistogram, 1, 0);
+  EXPECT_EQ(0, monitor.SubTickSeconds());
+
+  // Simulate sitting in warning pressure for 20 UMA ticks and 2 seconds, and
+  // then elevating to critical.
+  monitor.macos_pressure_level_for_testing_ = DISPATCH_MEMORYPRESSURE_CRITICAL;
+  monitor.SetLastStatisticReportTime(now - (20 * seconds_per_tick + 2));
+  monitor.UpdatePressureLevel();
+  monitor.tester.ExpectTotalCount(kHistogram, 27);
+  monitor.tester.ExpectBucketCount(kHistogram, 0, 7);
+  monitor.tester.ExpectBucketCount(kHistogram, 1, 20);
+  monitor.tester.ExpectBucketCount(kHistogram, 2, 0);
+  EXPECT_EQ(2, monitor.SubTickSeconds());
+
+  // A quick update while critical - the stats should not budge because less
+  // than 1 tick of time has elapsed.
+  monitor.macos_pressure_level_for_testing_ = DISPATCH_MEMORYPRESSURE_CRITICAL;
+  monitor.SetLastStatisticReportTime(now - 1);
+  monitor.UpdatePressureLevel();
+  monitor.tester.ExpectTotalCount(kHistogram, 27);
+  monitor.tester.ExpectBucketCount(kHistogram, 0, 7);
+  monitor.tester.ExpectBucketCount(kHistogram, 1, 20);
+  monitor.tester.ExpectBucketCount(kHistogram, 2, 0);
+  EXPECT_EQ(3, monitor.SubTickSeconds());
+
+  // A quick change back to normal. Less than 1 tick of time has elapsed, but
+  // in this case the pressure level changed, so the critical bucket should
+  // get another sample (otherwise we could miss quick level changes).
+  monitor.macos_pressure_level_for_testing_ = DISPATCH_MEMORYPRESSURE_NORMAL;
+  monitor.SetLastStatisticReportTime(now - 1);
+  monitor.UpdatePressureLevel();
+  monitor.tester.ExpectTotalCount(kHistogram, 28);
+  monitor.tester.ExpectBucketCount(kHistogram, 0, 7);
+  monitor.tester.ExpectBucketCount(kHistogram, 1, 20);
+  monitor.tester.ExpectBucketCount(kHistogram, 2, 1);
+  // When less than 1 tick of time has elapsed but the pressure level changed,
+  // the subtick remainder gets zeroed out.
+  EXPECT_EQ(0, monitor.SubTickSeconds());
+}
 }  // namespace mac
 }  // namespace base
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index 9137028..1f89686 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -1100,9 +1100,6 @@
         # TODO(hans): https://crbug.com/637306
         "-Wno-address-of-packed-member",
 
-        # TODO(thakis): Consider turning this on, https://crbug.com/691120
-        "-Wno-block-capture-autoreleasing",
-
         # TODO(hans): https://crbug.com/681136
         "-Wno-unused-lambda-capture",
 
diff --git a/cc/layers/scrollbar_layer_unittest.cc b/cc/layers/scrollbar_layer_unittest.cc
index 5abdca7..8824b28 100644
--- a/cc/layers/scrollbar_layer_unittest.cc
+++ b/cc/layers/scrollbar_layer_unittest.cc
@@ -224,8 +224,8 @@
   scoped_refptr<Layer> layer_tree_root = Layer::Create();
   scoped_refptr<Layer> scroll_layer = Layer::Create();
   scoped_refptr<Layer> content_layer = Layer::Create();
-  scoped_refptr<Layer> scrollbar_layer = PaintedScrollbarLayer::Create(
-      std::move(scrollbar), layer_tree_root->id());
+  scoped_refptr<Layer> scrollbar_layer =
+      PaintedScrollbarLayer::Create(std::move(scrollbar), scroll_layer->id());
 
   // Choose bounds to give max_scroll_offset = (30, 50).
   layer_tree_root->SetBounds(gfx::Size(70, 150));
@@ -238,7 +238,6 @@
   layer_tree_root->AddChild(scroll_layer);
   scroll_layer->AddChild(content_layer);
   layer_tree_root->AddChild(scrollbar_layer);
-  scrollbar_layer->ToScrollbarLayer()->SetScrollLayer(scroll_layer->id());
 
   layer_tree_root->SavePaintProperties();
   content_layer->SavePaintProperties();
@@ -531,8 +530,7 @@
   const bool kIsLeftSideVerticalScrollbar = false;
   child2 = SolidColorScrollbarLayer::Create(
       scrollbar->Orientation(), kThumbThickness, kTrackStart,
-      kIsLeftSideVerticalScrollbar, child1->id());
-  child2->ToScrollbarLayer()->SetScrollLayer(scroll_layer->id());
+      kIsLeftSideVerticalScrollbar, scroll_layer->id());
   scroll_layer->AddChild(child1);
   scroll_layer->InsertChild(child2, 1);
   layer_tree_root->AddChild(scroll_layer);
@@ -584,8 +582,7 @@
   const bool kIsLeftSideVerticalScrollbar = false;
   scrollbar_layer = SolidColorScrollbarLayer::Create(
       scrollbar->Orientation(), kThumbThickness, kTrackStart,
-      kIsLeftSideVerticalScrollbar, child1->id());
-  scrollbar_layer->ToScrollbarLayer()->SetScrollLayer(scroll_layer->id());
+      kIsLeftSideVerticalScrollbar, scroll_layer->id());
   scroll_layer->AddChild(child1);
   scroll_layer->InsertChild(scrollbar_layer, 1);
   layer_tree_root->AddChild(scroll_layer);
@@ -666,9 +663,8 @@
   const bool kIsLeftSideVerticalScrollbar = false;
   scrollbar_layer = SolidColorScrollbarLayer::Create(
       scrollbar->Orientation(), kThumbThickness, kTrackStart,
-      kIsLeftSideVerticalScrollbar, child1->id());
+      kIsLeftSideVerticalScrollbar, scroll_layer->id());
   scroll_layer->SetScrollClipLayerId(layer_tree_root->id());
-  scrollbar_layer->ToScrollbarLayer()->SetScrollLayer(scroll_layer->id());
   scroll_layer->AddChild(child1);
   scroll_layer->InsertChild(scrollbar_layer, 1);
   layer_tree_root->AddChild(scroll_layer);
diff --git a/cc/layers/solid_color_scrollbar_layer.cc b/cc/layers/solid_color_scrollbar_layer.cc
index 2670fd3..2eb5484 100644
--- a/cc/layers/solid_color_scrollbar_layer.cc
+++ b/cc/layers/solid_color_scrollbar_layer.cc
@@ -39,7 +39,7 @@
                                    int track_start,
                                    bool is_left_side_vertical_scrollbar,
                                    int scroll_layer_id)
-    : scroll_layer_id(Layer::INVALID_ID),
+    : scroll_layer_id(scroll_layer_id),
       orientation(orientation),
       thumb_thickness(thumb_thickness),
       track_start(track_start),
diff --git a/cc/trees/layer_tree_host_unittest_damage.cc b/cc/trees/layer_tree_host_unittest_damage.cc
index 5873138c..d2f0b86 100644
--- a/cc/trees/layer_tree_host_unittest_damage.cc
+++ b/cc/trees/layer_tree_host_unittest_damage.cc
@@ -354,7 +354,6 @@
         FakePaintedScrollbarLayer::Create(false, true, content_layer_->id());
     scrollbar_layer->SetPosition(gfx::PointF(300.f, 300.f));
     scrollbar_layer->SetBounds(gfx::Size(10, 100));
-    scrollbar_layer->ToScrollbarLayer()->SetScrollLayer(content_layer_->id());
     root_layer->AddChild(scrollbar_layer);
 
     gfx::RectF content_rect(content_layer_->position(),
diff --git a/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc b/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc
index 8e1cd9d..6525d653 100644
--- a/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc
+++ b/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc
@@ -256,11 +256,7 @@
 
   visible_fraction_ = 0;
   browser_view_->top_container()->SetPaintToLayer();
-  // In mash the window manager (ash) also renders to the non-client area. In
-  // order to see the decorations drawn by ash the layer needs to be marked as
-  // not filling bounds opaquely.
-  if (ash_util::IsRunningInMash())
-    browser_view_->top_container()->layer()->SetFillsBoundsOpaquely(false);
+  browser_view_->top_container()->layer()->SetFillsBoundsOpaquely(false);
   LayoutBrowserRootView();
   CreateMashRevealWidget();
   for (Observer& observer : observers_)
diff --git a/chrome/browser/ui/views/payments/payment_request_credit_card_editor_interactive_uitest.cc b/chrome/browser/ui/views/payments/credit_card_editor_view_controller_browsertest.cc
similarity index 97%
rename from chrome/browser/ui/views/payments/payment_request_credit_card_editor_interactive_uitest.cc
rename to chrome/browser/ui/views/payments/credit_card_editor_view_controller_browsertest.cc
index 209437c..6d4bb54 100644
--- a/chrome/browser/ui/views/payments/payment_request_credit_card_editor_interactive_uitest.cc
+++ b/chrome/browser/ui/views/payments/credit_card_editor_view_controller_browsertest.cc
@@ -7,8 +7,8 @@
 #include "base/macros.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time.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 "chrome/browser/ui/views/payments/payment_request_interactive_uitest_base.h"
 #include "chrome/browser/ui/views/payments/validating_textfield.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
@@ -28,10 +28,10 @@
 }  // namespace
 
 class PaymentRequestCreditCardEditorTest
-    : public PaymentRequestInteractiveTestBase {
+    : public PaymentRequestBrowserTestBase {
  protected:
   PaymentRequestCreditCardEditorTest()
-      : PaymentRequestInteractiveTestBase(
+      : PaymentRequestBrowserTestBase(
             "/payment_request_no_shipping_test.html") {}
 
   PersonalDataLoadedObserverMock personal_data_observer_;
@@ -297,11 +297,11 @@
 }
 
 class PaymentRequestCreditCardBasicCardTest
-    : public PaymentRequestInteractiveTestBase {
+    : public PaymentRequestBrowserTestBase {
  protected:
   PaymentRequestCreditCardBasicCardTest()
-      : PaymentRequestInteractiveTestBase(
-            "/payment_request_basic_card_test.html") {}
+      : PaymentRequestBrowserTestBase("/payment_request_basic_card_test.html") {
+  }
 
   void InvokePaymentRequestWithJs(const std::string& js) {
     ResetEventObserver(DialogEvent::DIALOG_OPENED);
diff --git a/chrome/browser/ui/views/payments/payment_method_view_controller_interactive_uitest.cc b/chrome/browser/ui/views/payments/payment_method_view_controller_browsertest.cc
similarity index 93%
rename from chrome/browser/ui/views/payments/payment_method_view_controller_interactive_uitest.cc
rename to chrome/browser/ui/views/payments/payment_method_view_controller_browsertest.cc
index 580e056..9d1e111 100644
--- a/chrome/browser/ui/views/payments/payment_method_view_controller_interactive_uitest.cc
+++ b/chrome/browser/ui/views/payments/payment_method_view_controller_browsertest.cc
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h"
 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h"
-#include "chrome/browser/ui/views/payments/payment_request_interactive_uitest_base.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/payments/content/payment_request.h"
@@ -11,11 +11,10 @@
 
 namespace payments {
 
-class PaymentMethodViewControllerTest
-    : public PaymentRequestInteractiveTestBase {
+class PaymentMethodViewControllerTest : public PaymentRequestBrowserTestBase {
  protected:
   PaymentMethodViewControllerTest()
-      : PaymentRequestInteractiveTestBase(
+      : PaymentRequestBrowserTestBase(
             "/payment_request_no_shipping_test.html") {}
 
  private:
diff --git a/chrome/browser/ui/views/payments/payment_request_interactive_uitest.cc b/chrome/browser/ui/views/payments/payment_request_browsertest.cc
similarity index 88%
rename from chrome/browser/ui/views/payments/payment_request_interactive_uitest.cc
rename to chrome/browser/ui/views/payments/payment_request_browsertest.cc
index 1c707fe2..5cebdacf 100644
--- a/chrome/browser/ui/views/payments/payment_request_interactive_uitest.cc
+++ b/chrome/browser/ui/views/payments/payment_request_browsertest.cc
@@ -7,8 +7,8 @@
 #include "base/macros.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/ui/browser_commands.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 "chrome/browser/ui/views/payments/payment_request_interactive_uitest_base.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "components/payments/content/payment_request.h"
 #include "components/payments/content/payment_request_web_contents_manager.h"
@@ -18,10 +18,10 @@
 namespace payments {
 
 class PaymentRequestWebContentsManagerTest
-    : public PaymentRequestInteractiveTestBase {
+    : public PaymentRequestBrowserTestBase {
  protected:
   PaymentRequestWebContentsManagerTest()
-      : PaymentRequestInteractiveTestBase(
+      : PaymentRequestBrowserTestBase(
             "/payment_request_multiple_requests.html") {}
 
  private:
@@ -35,10 +35,10 @@
   EXPECT_EQ(5U, payment_requests.size());
 }
 
-class PaymentRequestNoShippingTest : public PaymentRequestInteractiveTestBase {
+class PaymentRequestNoShippingTest : public PaymentRequestBrowserTestBase {
  protected:
   PaymentRequestNoShippingTest()
-      : PaymentRequestInteractiveTestBase(
+      : PaymentRequestBrowserTestBase(
             "/payment_request_no_shipping_test.html") {}
 
  private:
@@ -93,10 +93,10 @@
   WaitForObservedEvent();
 }
 
-class PaymentRequestAbortTest : public PaymentRequestInteractiveTestBase {
+class PaymentRequestAbortTest : public PaymentRequestBrowserTestBase {
  protected:
   PaymentRequestAbortTest()
-      : PaymentRequestInteractiveTestBase("/payment_request_abort_test.html") {}
+      : PaymentRequestBrowserTestBase("/payment_request_abort_test.html") {}
 
  private:
   DISALLOW_COPY_AND_ASSIGN(PaymentRequestAbortTest);
diff --git a/chrome/browser/ui/views/payments/payment_request_interactive_uitest_base.cc b/chrome/browser/ui/views/payments/payment_request_browsertest_base.cc
similarity index 75%
rename from chrome/browser/ui/views/payments/payment_request_interactive_uitest_base.cc
rename to chrome/browser/ui/views/payments/payment_request_browsertest_base.cc
index 86fa7e5..a30b17a 100644
--- a/chrome/browser/ui/views/payments/payment_request_interactive_uitest_base.cc
+++ b/chrome/browser/ui/views/payments/payment_request_browsertest_base.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/ui/views/payments/payment_request_interactive_uitest_base.h"
+#include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h"
 
 #include <vector>
 
@@ -19,7 +19,6 @@
 #include "chrome/browser/ui/views/payments/validating_combobox.h"
 #include "chrome/browser/ui/views/payments/validating_textfield.h"
 #include "chrome/browser/ui/views/payments/view_stack.h"
-#include "chrome/test/base/interactive_test_utils.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/credit_card.h"
@@ -35,7 +34,10 @@
 #include "services/service_manager/public/cpp/interface_registry.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/base/test/ui_controls.h"
+#include "ui/events/base_event_utils.h"
+#include "ui/events/event.h"
 #include "ui/gfx/animation/test_animation_delegate.h"
+#include "ui/gfx/geometry/point.h"
 #include "ui/views/controls/button/button.h"
 #include "ui/views/controls/label.h"
 #include "ui/views/controls/styled_label.h"
@@ -45,13 +47,12 @@
 PersonalDataLoadedObserverMock::PersonalDataLoadedObserverMock() {}
 PersonalDataLoadedObserverMock::~PersonalDataLoadedObserverMock() {}
 
-PaymentRequestInteractiveTestBase::PaymentRequestInteractiveTestBase(
+PaymentRequestBrowserTestBase::PaymentRequestBrowserTestBase(
     const std::string& test_file_path)
-    : test_file_path_(test_file_path),
-      delegate_(nullptr) {}
-PaymentRequestInteractiveTestBase::~PaymentRequestInteractiveTestBase() {}
+    : test_file_path_(test_file_path), delegate_(nullptr) {}
+PaymentRequestBrowserTestBase::~PaymentRequestBrowserTestBase() {}
 
-void PaymentRequestInteractiveTestBase::SetUpCommandLine(
+void PaymentRequestBrowserTestBase::SetUpCommandLine(
     base::CommandLine* command_line) {
   InProcessBrowserTest::SetUpCommandLine(command_line);
   command_line->AppendSwitch(switches::kEnableExperimentalWebPlatformFeatures);
@@ -59,7 +60,7 @@
                                   features::kWebPayments.name);
 }
 
-void PaymentRequestInteractiveTestBase::SetUpOnMainThread() {
+void PaymentRequestBrowserTestBase::SetUpOnMainThread() {
   https_server_ = base::MakeUnique<net::EmbeddedTestServer>(
       net::EmbeddedTestServer::TYPE_HTTPS);
   ASSERT_TRUE(https_server_->InitializeAndListen());
@@ -76,48 +77,47 @@
   service_manager::InterfaceRegistry* registry =
       web_contents->GetMainFrame()->GetInterfaceRegistry();
   registry->RemoveInterface(payments::mojom::PaymentRequest::Name_);
-  registry->AddInterface(base::Bind(
-      &PaymentRequestInteractiveTestBase::CreatePaymentRequestForTest,
-      base::Unretained(this), web_contents));
+  registry->AddInterface(
+      base::Bind(&PaymentRequestBrowserTestBase::CreatePaymentRequestForTest,
+                 base::Unretained(this), web_contents));
 }
 
-void PaymentRequestInteractiveTestBase::OnDialogOpened() {
+void PaymentRequestBrowserTestBase::OnDialogOpened() {
   if (event_observer_)
     event_observer_->Observe(DialogEvent::DIALOG_OPENED);
 }
 
-void PaymentRequestInteractiveTestBase::OnOrderSummaryOpened() {
+void PaymentRequestBrowserTestBase::OnOrderSummaryOpened() {
   if (event_observer_)
     event_observer_->Observe(DialogEvent::ORDER_SUMMARY_OPENED);
 }
 
-void PaymentRequestInteractiveTestBase::OnPaymentMethodOpened() {
+void PaymentRequestBrowserTestBase::OnPaymentMethodOpened() {
   if (event_observer_)
     event_observer_->Observe(DialogEvent::PAYMENT_METHOD_OPENED);
 }
 
-void PaymentRequestInteractiveTestBase::OnCreditCardEditorOpened() {
+void PaymentRequestBrowserTestBase::OnCreditCardEditorOpened() {
   if (event_observer_)
     event_observer_->Observe(DialogEvent::CREDIT_CARD_EDITOR_OPENED);
 }
 
-void PaymentRequestInteractiveTestBase::OnBackNavigation() {
+void PaymentRequestBrowserTestBase::OnBackNavigation() {
   if (event_observer_)
     event_observer_->Observe(DialogEvent::BACK_NAVIGATION);
 }
 
-void PaymentRequestInteractiveTestBase::OnContactInfoOpened() {
+void PaymentRequestBrowserTestBase::OnContactInfoOpened() {
   if (event_observer_)
     event_observer_->Observe(DialogEvent::CONTACT_INFO_OPENED);
 }
 
-void PaymentRequestInteractiveTestBase::OnWidgetDestroyed(
-    views::Widget* widget) {
+void PaymentRequestBrowserTestBase::OnWidgetDestroyed(views::Widget* widget) {
   if (event_observer_)
     event_observer_->Observe(DialogEvent::DIALOG_CLOSED);
 }
 
-void PaymentRequestInteractiveTestBase::InvokePaymentRequestUI() {
+void PaymentRequestBrowserTestBase::InvokePaymentRequestUI() {
   ResetEventObserver(DialogEvent::DIALOG_OPENED);
 
   content::WebContents* web_contents = GetActiveWebContents();
@@ -133,31 +133,30 @@
   EXPECT_TRUE(web_contents_modal_dialog_manager->IsDialogActive());
 }
 
-void PaymentRequestInteractiveTestBase::OpenOrderSummaryScreen() {
+void PaymentRequestBrowserTestBase::OpenOrderSummaryScreen() {
   ResetEventObserver(DialogEvent::ORDER_SUMMARY_OPENED);
 
   ClickOnDialogViewAndWait(DialogViewID::PAYMENT_SHEET_SUMMARY_SECTION);
 }
 
-void PaymentRequestInteractiveTestBase::OpenPaymentMethodScreen() {
+void PaymentRequestBrowserTestBase::OpenPaymentMethodScreen() {
   ResetEventObserver(DialogEvent::PAYMENT_METHOD_OPENED);
 
   ClickOnDialogViewAndWait(DialogViewID::PAYMENT_SHEET_PAYMENT_METHOD_SECTION);
 }
 
-void PaymentRequestInteractiveTestBase::OpenCreditCardEditorScreen() {
+void PaymentRequestBrowserTestBase::OpenCreditCardEditorScreen() {
   ResetEventObserver(DialogEvent::CREDIT_CARD_EDITOR_OPENED);
 
   ClickOnDialogViewAndWait(DialogViewID::PAYMENT_METHOD_ADD_CARD_BUTTON);
 }
 
-content::WebContents*
-PaymentRequestInteractiveTestBase::GetActiveWebContents() {
+content::WebContents* PaymentRequestBrowserTestBase::GetActiveWebContents() {
   return browser()->tab_strip_model()->GetActiveWebContents();
 }
 
 const std::vector<PaymentRequest*>
-PaymentRequestInteractiveTestBase::GetPaymentRequests(
+PaymentRequestBrowserTestBase::GetPaymentRequests(
     content::WebContents* web_contents) {
   PaymentRequestWebContentsManager* manager =
       PaymentRequestWebContentsManager::GetOrCreateForWebContents(web_contents);
@@ -170,13 +169,12 @@
   return payment_requests_ptrs;
 }
 
-autofill::PersonalDataManager*
-PaymentRequestInteractiveTestBase::GetDataManager() {
+autofill::PersonalDataManager* PaymentRequestBrowserTestBase::GetDataManager() {
   return autofill::PersonalDataManagerFactory::GetForProfile(
       Profile::FromBrowserContext(GetActiveWebContents()->GetBrowserContext()));
 }
 
-void PaymentRequestInteractiveTestBase::AddAutofillProfile(
+void PaymentRequestBrowserTestBase::AddAutofillProfile(
     const autofill::AutofillProfile& profile) {
   autofill::PersonalDataManager* personal_data_manager = GetDataManager();
   size_t profile_count = personal_data_manager->GetProfiles().size();
@@ -193,7 +191,7 @@
   EXPECT_EQ(profile_count + 1, personal_data_manager->GetProfiles().size());
 }
 
-void PaymentRequestInteractiveTestBase::AddCreditCard(
+void PaymentRequestBrowserTestBase::AddCreditCard(
     const autofill::CreditCard& card) {
   autofill::PersonalDataManager* personal_data_manager = GetDataManager();
   size_t card_count = personal_data_manager->GetCreditCards().size();
@@ -210,7 +208,7 @@
   EXPECT_EQ(card_count + 1, personal_data_manager->GetCreditCards().size());
 }
 
-void PaymentRequestInteractiveTestBase::CreatePaymentRequestForTest(
+void PaymentRequestBrowserTestBase::CreatePaymentRequestForTest(
     content::WebContents* web_contents,
     mojo::InterfaceRequest<payments::mojom::PaymentRequest> request) {
   DCHECK(web_contents);
@@ -223,7 +221,7 @@
                              std::move(request));
 }
 
-void PaymentRequestInteractiveTestBase::ClickOnDialogViewAndWait(
+void PaymentRequestBrowserTestBase::ClickOnDialogViewAndWait(
     DialogViewID view_id) {
   views::View* view =
       delegate_->dialog_view()->GetViewByID(static_cast<int>(view_id));
@@ -231,21 +229,24 @@
   ClickOnDialogViewAndWait(view);
 }
 
-void PaymentRequestInteractiveTestBase::ClickOnDialogViewAndWait(
+void PaymentRequestBrowserTestBase::ClickOnDialogViewAndWait(
     views::View* view) {
   DCHECK(view);
-  base::RunLoop run_loop;
-  ui_test_utils::MoveMouseToCenterAndPress(
-      view, ui_controls::LEFT, ui_controls::DOWN | ui_controls::UP,
-      run_loop.QuitClosure());
-  run_loop.Run();
+  ui::MouseEvent pressed(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(),
+                         ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON,
+                         ui::EF_LEFT_MOUSE_BUTTON);
+  view->OnMousePressed(pressed);
+  ui::MouseEvent released_event = ui::MouseEvent(
+      ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), ui::EventTimeForNow(),
+      ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON);
+  view->OnMouseReleased(released_event);
 
   WaitForAnimation();
 
   WaitForObservedEvent();
 }
 
-void PaymentRequestInteractiveTestBase::SetEditorTextfieldValue(
+void PaymentRequestBrowserTestBase::SetEditorTextfieldValue(
     const base::string16& value,
     autofill::ServerFieldType type) {
   ValidatingTextfield* textfield = static_cast<ValidatingTextfield*>(
@@ -256,7 +257,7 @@
   textfield->OnBlur();
 }
 
-void PaymentRequestInteractiveTestBase::SetComboboxValue(
+void PaymentRequestBrowserTestBase::SetComboboxValue(
     const base::string16& value,
     autofill::ServerFieldType type) {
   ValidatingCombobox* combobox = static_cast<ValidatingCombobox*>(
@@ -267,7 +268,7 @@
   combobox->OnBlur();
 }
 
-bool PaymentRequestInteractiveTestBase::IsEditorTextfieldInvalid(
+bool PaymentRequestBrowserTestBase::IsEditorTextfieldInvalid(
     autofill::ServerFieldType type) {
   ValidatingTextfield* textfield = static_cast<ValidatingTextfield*>(
       delegate_->dialog_view()->GetViewByID(static_cast<int>(type)));
@@ -275,7 +276,7 @@
   return textfield->invalid();
 }
 
-bool PaymentRequestInteractiveTestBase::IsEditorComboboxInvalid(
+bool PaymentRequestBrowserTestBase::IsEditorComboboxInvalid(
     autofill::ServerFieldType type) {
   ValidatingCombobox* combobox = static_cast<ValidatingCombobox*>(
       delegate_->dialog_view()->GetViewByID(static_cast<int>(type)));
@@ -283,7 +284,7 @@
   return combobox->invalid();
 }
 
-bool PaymentRequestInteractiveTestBase::IsPayButtonEnabled() {
+bool PaymentRequestBrowserTestBase::IsPayButtonEnabled() {
   views::Button* button =
       static_cast<views::Button*>(delegate_->dialog_view()->GetViewByID(
           static_cast<int>(DialogViewID::PAY_BUTTON)));
@@ -291,7 +292,7 @@
   return button->enabled();
 }
 
-void PaymentRequestInteractiveTestBase::WaitForAnimation() {
+void PaymentRequestBrowserTestBase::WaitForAnimation() {
   ViewStack* view_stack = dialog_view()->view_stack_for_testing();
   if (view_stack->slide_in_animator_->IsAnimating()) {
     view_stack->slide_in_animator_->SetAnimationDuration(1);
@@ -308,14 +309,14 @@
   }
 }
 
-const base::string16& PaymentRequestInteractiveTestBase::GetStyledLabelText(
+const base::string16& PaymentRequestBrowserTestBase::GetStyledLabelText(
     DialogViewID view_id) {
   views::View* view = dialog_view()->GetViewByID(static_cast<int>(view_id));
   DCHECK(view);
   return static_cast<views::StyledLabel*>(view)->text();
 }
 
-const base::string16& PaymentRequestInteractiveTestBase::GetErrorLabelForType(
+const base::string16& PaymentRequestBrowserTestBase::GetErrorLabelForType(
     autofill::ServerFieldType type) {
   views::View* view = dialog_view()->GetViewByID(
       static_cast<int>(DialogViewID::ERROR_LABEL_OFFSET) + type);
@@ -323,13 +324,12 @@
   return static_cast<views::Label*>(view)->text();
 }
 
-PaymentRequestInteractiveTestBase::DialogEventObserver::DialogEventObserver(
-    PaymentRequestInteractiveTestBase::DialogEvent event)
+PaymentRequestBrowserTestBase::DialogEventObserver::DialogEventObserver(
+    PaymentRequestBrowserTestBase::DialogEvent event)
     : event_(event), seen_(false) {}
-PaymentRequestInteractiveTestBase::DialogEventObserver::~DialogEventObserver() {
-}
+PaymentRequestBrowserTestBase::DialogEventObserver::~DialogEventObserver() {}
 
-void PaymentRequestInteractiveTestBase::DialogEventObserver::Wait() {
+void PaymentRequestBrowserTestBase::DialogEventObserver::Wait() {
   if (seen_)
     return;
 
@@ -337,8 +337,8 @@
   run_loop_.Run();
 }
 
-void PaymentRequestInteractiveTestBase::DialogEventObserver::Observe(
-    PaymentRequestInteractiveTestBase::DialogEvent event) {
+void PaymentRequestBrowserTestBase::DialogEventObserver::Observe(
+    PaymentRequestBrowserTestBase::DialogEvent event) {
   if (seen_)
     return;
 
@@ -348,11 +348,11 @@
     run_loop_.Quit();
 }
 
-void PaymentRequestInteractiveTestBase::ResetEventObserver(DialogEvent event) {
+void PaymentRequestBrowserTestBase::ResetEventObserver(DialogEvent event) {
   event_observer_ = base::MakeUnique<DialogEventObserver>(event);
 }
 
-void PaymentRequestInteractiveTestBase::WaitForObservedEvent() {
+void PaymentRequestBrowserTestBase::WaitForObservedEvent() {
   event_observer_->Wait();
 }
 
diff --git a/chrome/browser/ui/views/payments/payment_request_interactive_uitest_base.h b/chrome/browser/ui/views/payments/payment_request_browsertest_base.h
similarity index 92%
rename from chrome/browser/ui/views/payments/payment_request_interactive_uitest_base.h
rename to chrome/browser/ui/views/payments/payment_request_browsertest_base.h
index a7b619a7..718e8b3 100644
--- a/chrome/browser/ui/views/payments/payment_request_interactive_uitest_base.h
+++ b/chrome/browser/ui/views/payments/payment_request_browsertest_base.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_UI_VIEWS_PAYMENTS_PAYMENT_REQUEST_INTERACTIVE_UITEST_BASE_H_
-#define CHROME_BROWSER_UI_VIEWS_PAYMENTS_PAYMENT_REQUEST_INTERACTIVE_UITEST_BASE_H_
+#ifndef CHROME_BROWSER_UI_VIEWS_PAYMENTS_PAYMENT_REQUEST_BROWSERTEST_BASE_H_
+#define CHROME_BROWSER_UI_VIEWS_PAYMENTS_PAYMENT_REQUEST_BROWSERTEST_BASE_H_
 
 #include <vector>
 
@@ -58,15 +58,15 @@
 
 // Base class for any interactive PaymentRequest test that will need to open
 // the UI and interact with it.
-class PaymentRequestInteractiveTestBase
+class PaymentRequestBrowserTestBase
     : public InProcessBrowserTest,
       public PaymentRequestDialogView::ObserverForTest,
       public views::WidgetObserver {
  protected:
   // Test will open a browser window to |test_file_path| (relative to
   // chrome/test/data/payments).
-  explicit PaymentRequestInteractiveTestBase(const std::string& test_file_path);
-  ~PaymentRequestInteractiveTestBase() override;
+  explicit PaymentRequestBrowserTestBase(const std::string& test_file_path);
+  ~PaymentRequestBrowserTestBase() override;
 
   void SetUpCommandLine(base::CommandLine* command_line) override;
   void SetUpOnMainThread() override;
@@ -199,9 +199,9 @@
   // Weak, owned by the PaymentRequest object.
   TestChromePaymentRequestDelegate* delegate_;
 
-  DISALLOW_COPY_AND_ASSIGN(PaymentRequestInteractiveTestBase);
+  DISALLOW_COPY_AND_ASSIGN(PaymentRequestBrowserTestBase);
 };
 
 }  // namespace payments
 
-#endif  // CHROME_BROWSER_UI_VIEWS_PAYMENTS_PAYMENT_REQUEST_INTERACTIVE_UITEST_BASE_H_
+#endif  // CHROME_BROWSER_UI_VIEWS_PAYMENTS_PAYMENT_REQUEST_BROWSERTEST_BASE_H_
diff --git a/chrome/browser/ui/views/payments/payment_sheet_view_controller_interactive_uitest.cc b/chrome/browser/ui/views/payments/payment_sheet_view_controller_browsertest.cc
similarity index 95%
rename from chrome/browser/ui/views/payments/payment_sheet_view_controller_interactive_uitest.cc
rename to chrome/browser/ui/views/payments/payment_sheet_view_controller_browsertest.cc
index 67f9276..d8ecdb9 100644
--- a/chrome/browser/ui/views/payments/payment_sheet_view_controller_interactive_uitest.cc
+++ b/chrome/browser/ui/views/payments/payment_sheet_view_controller_browsertest.cc
@@ -3,8 +3,8 @@
 // found in the LICENSE file.
 
 #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 "chrome/browser/ui/views/payments/payment_request_interactive_uitest_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"
@@ -16,10 +16,10 @@
 // A simple PaymentRequest which simply requests 'visa' or 'mastercard' and
 // nothing else.
 class PaymentSheetViewControllerNoShippingTest
-    : public PaymentRequestInteractiveTestBase {
+    : public PaymentRequestBrowserTestBase {
  protected:
   PaymentSheetViewControllerNoShippingTest()
-      : PaymentRequestInteractiveTestBase(
+      : PaymentRequestBrowserTestBase(
             "/payment_request_no_shipping_test.html") {}
 
  private:
@@ -70,10 +70,10 @@
 
 // Accepts 'visa' cards and requests the full contact details.
 class PaymentSheetViewControllerContactDetailsTest
-    : public PaymentRequestInteractiveTestBase {
+    : public PaymentRequestBrowserTestBase {
  protected:
   PaymentSheetViewControllerContactDetailsTest()
-      : PaymentRequestInteractiveTestBase(
+      : PaymentRequestBrowserTestBase(
             "/payment_request_contact_details_and_free_shipping_test.html") {}
 
  private:
diff --git a/chrome/browser/ui/views/payments/view_stack.h b/chrome/browser/ui/views/payments/view_stack.h
index 3699ef29..8b941041 100644
--- a/chrome/browser/ui/views/payments/view_stack.h
+++ b/chrome/browser/ui/views/payments/view_stack.h
@@ -10,7 +10,7 @@
 #include "ui/views/animation/bounds_animator_observer.h"
 
 namespace payments {
-class PaymentRequestInteractiveTestBase;
+class PaymentRequestBrowserTestBase;
 }  // namespace payments
 
 // This view represents a stack of views that slide in over one another from
@@ -47,7 +47,7 @@
   FRIEND_TEST_ALL_PREFIXES(ViewStackTest, TestPushStateAddsViewToChildren);
   FRIEND_TEST_ALL_PREFIXES(ViewStackTest, TestLayoutUpdatesAnimations);
   friend class ViewStackTest;
-  friend class payments::PaymentRequestInteractiveTestBase;
+  friend class payments::PaymentRequestBrowserTestBase;
 
   // Returns the top state of the stack, used in tests.
   views::View* top() { return stack_.back().get(); }
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 1007bbb..8872fe5 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -572,18 +572,6 @@
           "base/interactive_test_utils_views.cc",
         ]
       }
-      if (is_win || is_linux) {
-        # TODO(crbug.com/679127): Investigate why these tests currently break
-        # on Mac, and enable them.
-        sources += [
-          "../browser/ui/views/payments/payment_method_view_controller_interactive_uitest.cc",
-          "../browser/ui/views/payments/payment_request_credit_card_editor_interactive_uitest.cc",
-          "../browser/ui/views/payments/payment_request_interactive_uitest.cc",
-          "../browser/ui/views/payments/payment_request_interactive_uitest_base.cc",
-          "../browser/ui/views/payments/payment_request_interactive_uitest_base.h",
-          "../browser/ui/views/payments/payment_sheet_view_controller_interactive_uitest.cc",
-        ]
-      }
       if (is_linux) {
         if (!is_chromeos) {
           # Desktop linux.
@@ -2147,6 +2135,12 @@
         "../browser/ui/views/frame/browser_non_client_frame_view_browsertest_win.cc",
         "../browser/ui/views/frame/browser_window_property_manager_browsertest_win.cc",
         "../browser/ui/views/location_bar/content_setting_bubble_dialog_browsertest.cc",
+        "../browser/ui/views/payments/credit_card_editor_view_controller_browsertest.cc",
+        "../browser/ui/views/payments/payment_method_view_controller_browsertest.cc",
+        "../browser/ui/views/payments/payment_request_browsertest.cc",
+        "../browser/ui/views/payments/payment_request_browsertest_base.cc",
+        "../browser/ui/views/payments/payment_request_browsertest_base.h",
+        "../browser/ui/views/payments/payment_sheet_view_controller_browsertest.cc",
         "../browser/ui/views/select_file_dialog_extension_browsertest.cc",
         "../browser/ui/views/sync/profile_signin_confirmation_dialog_views_browsertest.cc",
       ]
diff --git a/chrome/test/base/v8_unit_test.cc b/chrome/test/base/v8_unit_test.cc
index 92c3ae58..2e7976a1 100644
--- a/chrome/test/base/v8_unit_test.cc
+++ b/chrome/test/base/v8_unit_test.cc
@@ -6,6 +6,8 @@
 
 #include "base/files/file_util.h"
 #include "base/logging.h"
+#include "base/memory/ptr_util.h"
+#include "base/message_loop/message_loop.h"
 #include "base/path_service.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/stringprintf.h"
@@ -192,6 +194,8 @@
   console->Set(v8::String::NewFromUtf8(isolate, "error"), error_function);
 
   context_.Reset(isolate, v8::Context::New(isolate, NULL, global));
+
+  loop_ = base::MakeUnique<base::MessageLoop>();
 }
 
 void V8UnitTest::SetGlobalStringVar(const std::string& var_name,
diff --git a/chrome/test/base/v8_unit_test.h b/chrome/test/base/v8_unit_test.h
index 830da54..2184973 100644
--- a/chrome/test/base/v8_unit_test.h
+++ b/chrome/test/base/v8_unit_test.h
@@ -13,6 +13,10 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "v8/include/v8.h"
 
+namespace base {
+class MessageLoop;
+}  // namespace base
+
 // A superclass for unit tests that involve running JavaScript.  This class
 // sets up V8 context and has methods that make it easy to execute scripts in
 // this context as well as call functions in the context.
@@ -82,6 +86,8 @@
 
   // User added libraries.
   std::vector<base::FilePath> user_libraries_;
+
+  std::unique_ptr<base::MessageLoop> loop_;
 };
 
 #endif  // CHROME_TEST_BASE_V8_UNIT_TEST_H_
diff --git a/chromecast/browser/url_request_context_factory.cc b/chromecast/browser/url_request_context_factory.cc
index a7628f1..b6def5f 100644
--- a/chromecast/browser/url_request_context_factory.cc
+++ b/chromecast/browser/url_request_context_factory.cc
@@ -73,6 +73,11 @@
   }
 };
 
+bool IgnoreCertificateErrors() {
+  base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess();
+  return cmd_line->HasSwitch(switches::kIgnoreCertificateErrors);
+}
+
 }  // namespace
 
 // Private classes to expose URLRequestContextGetter that call back to the
@@ -336,7 +341,7 @@
   DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
   InitializeSystemContextDependencies();
   net::HttpNetworkSession::Params system_params;
-  PopulateNetworkSessionParams(false, &system_params);
+  PopulateNetworkSessionParams(IgnoreCertificateErrors(), &system_params);
   system_transaction_factory_.reset(new net::HttpNetworkLayer(
       new net::HttpNetworkSession(system_params)));
   system_job_factory_.reset(new net::URLRequestJobFactoryImpl());
@@ -392,13 +397,8 @@
   DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
   InitializeSystemContextDependencies();
 
-  bool ignore_certificate_errors = false;
-  base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess();
-  if (cmd_line->HasSwitch(switches::kIgnoreCertificateErrors)) {
-    ignore_certificate_errors = true;
-  }
   net::HttpNetworkSession::Params network_session_params;
-  PopulateNetworkSessionParams(ignore_certificate_errors,
+  PopulateNetworkSessionParams(IgnoreCertificateErrors(),
                                &network_session_params);
   InitializeMainContextDependencies(
       new net::HttpNetworkLayer(
diff --git a/chromecast/net/DEPS b/chromecast/net/DEPS
index cd66c1f..90e91a5 100644
--- a/chromecast/net/DEPS
+++ b/chromecast/net/DEPS
@@ -1,4 +1,4 @@
 include_rules = [
-  "+net",
   "+components/proxy_config",
+  "+net",
 ]
diff --git a/chromecast/net/connectivity_checker_impl.cc b/chromecast/net/connectivity_checker_impl.cc
index 6c1b234..17e7c5b0 100644
--- a/chromecast/net/connectivity_checker_impl.cc
+++ b/chromecast/net/connectivity_checker_impl.cc
@@ -15,9 +15,11 @@
 #include "chromecast/chromecast_features.h"
 #include "chromecast/net/net_switches.h"
 #include "net/base/request_priority.h"
+#include "net/http/http_network_session.h"
 #include "net/http/http_response_headers.h"
 #include "net/http/http_response_info.h"
 #include "net/http/http_status_code.h"
+#include "net/http/http_transaction_factory.h"
 #include "net/socket/ssl_client_socket.h"
 #include "net/url_request/url_request_context.h"
 #include "net/url_request/url_request_context_builder.h"
@@ -212,6 +214,15 @@
     net::URLRequest* request,
     const net::SSLInfo& ssl_info,
     bool fatal) {
+  if (url_request_context_->http_transaction_factory()
+          ->GetSession()
+          ->params()
+          .ignore_certificate_errors) {
+    LOG(WARNING) << "OnSSLCertificateError: ignore cert_status="
+                 << ssl_info.cert_status;
+    request->ContinueDespiteLastError();
+    return;
+  }
   DCHECK(task_runner_->BelongsToCurrentThread());
   LOG(ERROR) << "OnSSLCertificateError: cert_status=" << ssl_info.cert_status;
   net::SSLClientSocket::ClearSessionCache();
diff --git a/components/cronet/android/BUILD.gn b/components/cronet/android/BUILD.gn
index a6b7b52..22f3648 100644
--- a/components/cronet/android/BUILD.gn
+++ b/components/cronet/android/BUILD.gn
@@ -1271,17 +1271,15 @@
 
 action("cronet_combine_proguard_flags") {
   script = "//components/cronet/tools/generate_proguard_file.py"
+  sources = [
+    "//base/android/proguard/chromium_code.flags",
+    "//components/cronet/android/cronet_impl_native_proguard.cfg",
+  ]
   outputs = [
     "$target_gen_dir/cronet_impl_native_proguard.cfg",
   ]
-  args = [
-    "--output-file",
-    rebase_path("$target_gen_dir/cronet_impl_native_proguard.cfg",
-                root_build_dir),
-    rebase_path("//components/cronet/android/cronet_impl_native_proguard.cfg",
-                root_build_dir),
-    rebase_path("//base/android/proguard/chromium_code.flags", root_build_dir),
-  ]
+  args = [ "--output-file" ] + rebase_path(outputs, root_build_dir) +
+         rebase_path(sources, root_build_dir)
 }
 
 copy("cronet_package_copy_native_lib") {
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc
index 8bae820..aaf790f 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc
@@ -19,12 +19,14 @@
 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_request_options.h"
 #include "components/data_reduction_proxy/core/browser/data_use_group.h"
 #include "components/data_reduction_proxy/core/browser/data_use_group_provider.h"
+#include "components/data_reduction_proxy/core/common/data_reduction_proxy_headers.h"
 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_params.h"
 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_util.h"
 #include "components/data_reduction_proxy/core/common/lofi_decider.h"
 #include "net/base/load_flags.h"
 #include "net/http/http_request_headers.h"
 #include "net/http/http_response_headers.h"
+#include "net/nqe/effective_connection_type.h"
 #include "net/nqe/network_quality_estimator.h"
 #include "net/proxy/proxy_info.h"
 #include "net/proxy/proxy_server.h"
@@ -194,6 +196,8 @@
         ->MaybeSetAcceptTransformHeader(
             *request, data_reduction_proxy_config_->lofi_off(), headers);
   }
+
+  MaybeAddChromeProxyECTHeader(headers, *request);
 }
 
 void DataReductionProxyNetworkDelegate::OnBeforeSendHeadersInternal(
@@ -241,6 +245,7 @@
       // Chrome-Proxy-Accept-Transform header.
       lofi_decider->RemoveAcceptTransformHeader(headers);
     }
+    RemoveChromeProxyECTHeader(headers);
     return;
   }
 
@@ -498,4 +503,47 @@
                              header_value);
 }
 
+void DataReductionProxyNetworkDelegate::MaybeAddChromeProxyECTHeader(
+    net::HttpRequestHeaders* request_headers,
+    const net::URLRequest& request) const {
+  DCHECK(thread_checker_.CalledOnValidThread());
+
+  // This method should be called only when the resolved proxy was a data
+  // saver proxy.
+  DCHECK(request.url().is_valid());
+  DCHECK(!request.url().SchemeIsCryptographic());
+  DCHECK(request.url().SchemeIsHTTPOrHTTPS());
+
+  if (!params::IsAddChromeProxyECTHeaderEnabled())
+    return;
+
+  DCHECK(!request_headers->HasHeader(chrome_proxy_ect_header()));
+
+  if (!request.context()->network_quality_estimator())
+    return;
+
+  net::EffectiveConnectionType ect = request.context()
+                                         ->network_quality_estimator()
+                                         ->GetEffectiveConnectionType();
+  if (ect <= net::EFFECTIVE_CONNECTION_TYPE_OFFLINE)
+    return;
+
+  static_assert(net::EFFECTIVE_CONNECTION_TYPE_OFFLINE + 1 ==
+                    net::EFFECTIVE_CONNECTION_TYPE_SLOW_2G,
+                "ECT enum value is not handled.");
+  static_assert(net::EFFECTIVE_CONNECTION_TYPE_4G + 1 ==
+                    net::EFFECTIVE_CONNECTION_TYPE_LAST,
+                "ECT enum value is not handled.");
+
+  request_headers->SetHeader(chrome_proxy_ect_header(),
+                             net::GetNameForEffectiveConnectionType(ect));
+}
+
+void DataReductionProxyNetworkDelegate::RemoveChromeProxyECTHeader(
+    net::HttpRequestHeaders* request_headers) const {
+  DCHECK(thread_checker_.CalledOnValidThread());
+
+  request_headers->RemoveHeader(chrome_proxy_ect_header());
+}
+
 }  // namespace data_reduction_proxy
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.h b/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.h
index f36cea45..f32107b 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.h
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.h
@@ -157,6 +157,17 @@
       net::HttpRequestHeaders* request_headers,
       const net::URLRequest& request) const;
 
+  // May add chrome-proxy-ect header to |request_headers| if adding of
+  // chrome-proxy-ect is enabled via field trial and a valid estimate of
+  // network quality is available. This method should be called only when the
+  // resolved proxy for |request| is a data saver proxy.
+  void MaybeAddChromeProxyECTHeader(net::HttpRequestHeaders* request_headers,
+                                    const net::URLRequest& request) const;
+
+  // Removes the chrome-proxy-ect header from |request_headers|.
+  void RemoveChromeProxyECTHeader(
+      net::HttpRequestHeaders* request_headers) const;
+
   // All raw Data Reduction Proxy pointers must outlive |this|.
   DataReductionProxyConfig* data_reduction_proxy_config_;
 
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate_unittest.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate_unittest.cc
index 028c43e..0153127 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate_unittest.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate_unittest.cc
@@ -180,7 +180,13 @@
 class DataReductionProxyNetworkDelegateTest : public testing::Test {
  public:
   DataReductionProxyNetworkDelegateTest()
-      : context_(true), context_storage_(&context_) {}
+      : context_(true),
+        context_storage_(&context_),
+        ssl_socket_data_provider_(net::ASYNC, net::OK) {
+    ssl_socket_data_provider_.next_proto = net::kProtoHTTP11;
+    ssl_socket_data_provider_.cert = net::ImportCertFromFile(
+        net::GetTestCertsDirectory(), "unittest.selfsigned.der");
+  }
 
   void Init(bool use_secure_proxy, bool enable_brotli_globally) {
     net::ProxyServer proxy_server =
@@ -213,11 +219,85 @@
     test_context_->io_data()->set_lofi_ui_service(std::move(lofi_ui_service));
 
     context_.set_enable_brotli(enable_brotli_globally);
+    context_.set_network_quality_estimator(&test_network_quality_estimator_);
     context_.Init();
 
     test_context_->EnableDataReductionProxyWithSecureProxyCheckSuccess();
   }
 
+  // Build the sockets by adding appropriate mock data for
+  // |effective_connection_types.size()| number of requests. Data for
+  // chrome-Proxy-ect header is added to the mock data if |expect_ect_header|
+  // is true. |reads_list|, |mock_writes| and |writes_list| should be empty, and
+  // are owned by the caller.
+  void BuildSocket(const std::string& response_headers,
+                   const std::string& response_body,
+                   bool expect_ect_header,
+                   const std::vector<net::EffectiveConnectionType>&
+                       effective_connection_types,
+                   std::vector<net::MockRead>* reads_list,
+                   std::vector<std::string>* mock_writes,
+                   std::vector<net::MockWrite>* writes_list) {
+    EXPECT_LT(0u, effective_connection_types.size());
+    EXPECT_TRUE(reads_list->empty());
+    EXPECT_TRUE(mock_writes->empty());
+    EXPECT_TRUE(writes_list->empty());
+
+    for (size_t i = 0; i < effective_connection_types.size(); ++i) {
+      reads_list->push_back(net::MockRead(response_headers.c_str()));
+      reads_list->push_back(net::MockRead(response_body.c_str()));
+    }
+    reads_list->push_back(net::MockRead(net::SYNCHRONOUS, net::OK));
+
+    std::string prefix = std::string("GET ")
+                             .append(kTestURL)
+                             .append(" HTTP/1.1\r\n")
+                             .append("Host: ")
+                             .append(GURL(kTestURL).host())
+                             .append(
+                                 "\r\n"
+                                 "Proxy-Connection: keep-alive\r\n"
+                                 "User-Agent:\r\n"
+                                 "Accept-Encoding: gzip, deflate\r\n"
+                                 "Accept-Language: en-us,fr\r\n");
+
+    if (io_data()->test_request_options()->GetHeaderValueForTesting().empty()) {
+      // Force regeneration of Chrome-Proxy header.
+      io_data()->test_request_options()->SetSecureSession("123");
+    }
+
+    EXPECT_FALSE(
+        io_data()->test_request_options()->GetHeaderValueForTesting().empty());
+
+    std::string suffix =
+        std::string("Chrome-Proxy: ") +
+        io_data()->test_request_options()->GetHeaderValueForTesting() +
+        std::string("\r\n\r\n");
+
+    mock_socket_factory_.AddSSLSocketDataProvider(&ssl_socket_data_provider_);
+
+    for (net::EffectiveConnectionType effective_connection_type :
+         effective_connection_types) {
+      std::string ect_header;
+      if (expect_ect_header) {
+        ect_header = "chrome-proxy-ect: " +
+                     std::string(net::GetNameForEffectiveConnectionType(
+                         effective_connection_type)) +
+                     "\r\n";
+      }
+
+      std::string mock_write = prefix + ect_header + suffix;
+      mock_writes->push_back(mock_write);
+      writes_list->push_back(net::MockWrite(mock_writes->back().c_str()));
+    }
+
+    EXPECT_FALSE(socket_);
+    socket_ = base::MakeUnique<net::StaticSocketDataProvider>(
+        reads_list->data(), reads_list->size(), writes_list->data(),
+        writes_list->size());
+    mock_socket_factory_.AddSocketDataProvider(socket_.get());
+  }
+
   static void VerifyHeaders(bool expected_data_reduction_proxy_used,
                             bool expected_lofi_used,
                             const net::HttpRequestHeaders& headers) {
@@ -285,16 +365,12 @@
                                       bool expect_cached,
                                       bool expect_brotli) {
     GURL url(kTestURL);
-    net::SSLSocketDataProvider ssl_socket_data_provider(net::ASYNC, net::OK);
 
     int response_body_size = 140;
     const std::string response_body(
         base::checked_cast<size_t>(response_body_size), ' ');
 
-    ssl_socket_data_provider.next_proto = net::kProtoHTTP11;
-    ssl_socket_data_provider.cert = net::ImportCertFromFile(
-        net::GetTestCertsDirectory(), "unittest.selfsigned.der");
-    mock_socket_factory_.AddSSLSocketDataProvider(&ssl_socket_data_provider);
+    mock_socket_factory_.AddSSLSocketDataProvider(&ssl_socket_data_provider_);
 
     net::MockRead reads[] = {net::MockRead(response_headers.c_str()),
                              net::MockRead(response_body.c_str()),
@@ -386,6 +462,53 @@
     }
   }
 
+  // Fetches a request while the effective connection type is set to
+  // |effective_connection_type|. Verifies that the request headers include the
+  // chrome-proxy-ect header only if |expect_ect_header| is true. The response
+  // must be served from the cache if |expect_cached| is true.
+  void FetchURLRequestAndVerifyECTHeader(
+      net::EffectiveConnectionType effective_connection_type,
+      bool expect_ect_header,
+      bool expect_cached) {
+    EXPECT_EQ(expect_ect_header, params::IsAddChromeProxyECTHeaderEnabled());
+
+    test_network_quality_estimator()->set_effective_connection_type(
+        effective_connection_type);
+
+    net::TestDelegate delegate;
+    std::unique_ptr<net::URLRequest> request =
+        context_.CreateRequest(GURL(kTestURL), net::IDLE, &delegate);
+
+    request->Start();
+    base::RunLoop().RunUntilIdle();
+
+    EXPECT_EQ(140, request->received_response_content_length());
+    EXPECT_EQ(expect_cached, request->was_cached());
+    EXPECT_EQ(expect_cached, request->GetTotalSentBytes() == 0);
+    EXPECT_EQ(expect_cached, request->GetTotalReceivedBytes() == 0);
+
+    net::HttpRequestHeaders sent_request_headers;
+    EXPECT_NE(expect_cached,
+              request->GetFullRequestHeaders(&sent_request_headers));
+
+    if (expect_cached) {
+      // Request headers are missing. Return since there is nothing left to
+      // check.
+      return;
+    }
+
+    // Verify that chrome-proxy-ect header is present in the request headers
+    // only if |expect_ect_header| is true.
+    std::string ect_value;
+    EXPECT_EQ(expect_ect_header, sent_request_headers.GetHeader(
+                                     chrome_proxy_ect_header(), &ect_value));
+
+    if (!expect_ect_header)
+      return;
+    EXPECT_EQ(net::GetNameForEffectiveConnectionType(effective_connection_type),
+              ect_value);
+  }
+
   void DelegateStageDone(int result) {}
 
   void NotifyNetworkDelegate(net::URLRequest* request,
@@ -430,6 +553,10 @@
 
   TestLoFiDecider* lofi_decider() const { return lofi_decider_; }
 
+  net::TestNetworkQualityEstimator* test_network_quality_estimator() {
+    return &test_network_quality_estimator_;
+  }
+
  private:
   base::MessageLoopForIO message_loop_;
   net::MockClientSocketFactory mock_socket_factory_;
@@ -440,6 +567,11 @@
   TestLoFiDecider* lofi_decider_;
   TestLoFiUIService* lofi_ui_service_;
   std::unique_ptr<DataReductionProxyTestContext> test_context_;
+  net::TestNetworkQualityEstimator test_network_quality_estimator_;
+
+  net::SSLSocketDataProvider ssl_socket_data_provider_;
+
+  std::unique_ptr<net::StaticSocketDataProvider> socket_;
 };
 
 TEST_F(DataReductionProxyNetworkDelegateTest, AuthenticationTest) {
@@ -655,10 +787,8 @@
     net::HttpRequestHeaders headers;
     net::ProxyRetryInfoMap proxy_retry_info;
 
-    net::TestNetworkQualityEstimator test_network_quality_estimator;
-    test_network_quality_estimator.set_effective_connection_type(
+    test_network_quality_estimator()->set_effective_connection_type(
         net::EFFECTIVE_CONNECTION_TYPE_OFFLINE);
-    context()->set_network_quality_estimator(&test_network_quality_estimator);
 
     std::unique_ptr<net::URLRequest> request = context()->CreateRequest(
         GURL(kTestURL), net::RequestPriority::IDLE, nullptr);
@@ -744,10 +874,8 @@
   net::HttpRequestHeaders headers;
   net::ProxyRetryInfoMap proxy_retry_info;
 
-  net::TestNetworkQualityEstimator test_network_quality_estimator;
-  test_network_quality_estimator.set_effective_connection_type(
+  test_network_quality_estimator()->set_effective_connection_type(
       net::EFFECTIVE_CONNECTION_TYPE_OFFLINE);
-  context()->set_network_quality_estimator(&test_network_quality_estimator);
 
   std::unique_ptr<net::URLRequest> request = context()->CreateRequest(
       GURL(kTestURL), net::RequestPriority::IDLE, nullptr);
@@ -1075,6 +1203,131 @@
   FetchURLRequestAndVerifyBrotli(nullptr, response_headers, true, true);
 }
 
+// Test that effective connection type is correctly added to the request
+// headers when it is enabled using field trial. The server is varying on the
+// effective connection type (ECT).
+TEST_F(DataReductionProxyNetworkDelegateTest, ECTHeaderEnabledWithVary) {
+  Init(true /* use_secure_proxy */, false /* enable_brotli_globally */);
+
+  base::FieldTrialList field_trial_list(nullptr);
+  base::FieldTrialList::CreateFieldTrial(
+      "DataReductionProxyAddChromeProxyECTHeader", "Enabled");
+
+  std::string response_headers =
+      "HTTP/1.1 200 OK\r\n"
+      "Content-Length: 140\r\n"
+      "Via: 1.1 Chrome-Compression-Proxy\r\n"
+      "Cache-Control: max-age=1200\r\n"
+      "Vary: chrome-proxy-ect\r\n"
+      "x-original-content-length: 200\r\n\r\n";
+
+  int response_body_size = 140;
+  std::string response_body(base::checked_cast<size_t>(response_body_size),
+                            ' ');
+
+  std::vector<net::MockRead> reads_list;
+  std::vector<std::string> mock_writes;
+  std::vector<net::MockWrite> writes_list;
+
+  std::vector<net::EffectiveConnectionType> effective_connection_types;
+  effective_connection_types.push_back(net::EFFECTIVE_CONNECTION_TYPE_SLOW_2G);
+  effective_connection_types.push_back(net::EFFECTIVE_CONNECTION_TYPE_2G);
+
+  BuildSocket(response_headers, response_body, true, effective_connection_types,
+              &reads_list, &mock_writes, &writes_list);
+
+  // Add 2 socket providers since 2 requests in this test are fetched from the
+  // network.
+  FetchURLRequestAndVerifyECTHeader(effective_connection_types[0], true, false);
+
+  // When the ECT is set to the same value, fetching the same resource should
+  // result in a cache hit.
+  FetchURLRequestAndVerifyECTHeader(effective_connection_types[0], true, true);
+
+  // When the ECT is set to a different value, the response should not be
+  // served from the cache.
+  FetchURLRequestAndVerifyECTHeader(effective_connection_types[1], true, false);
+}
+
+// Test that effective connection type is correctly added to the request
+// headers when it is enabled using field trial. The server is not varying on
+// the effective connection type (ECT).
+TEST_F(DataReductionProxyNetworkDelegateTest, ECTHeaderEnabledWithoutVary) {
+  Init(true /* use_secure_proxy */, false /* enable_brotli_globally */);
+
+  base::FieldTrialList field_trial_list(nullptr);
+  base::FieldTrialList::CreateFieldTrial(
+      "DataReductionProxyAddChromeProxyECTHeader", "Enabled");
+
+  std::string response_headers =
+      "HTTP/1.1 200 OK\r\n"
+      "Content-Length: 140\r\n"
+      "Via: 1.1 Chrome-Compression-Proxy\r\n"
+      "Cache-Control: max-age=1200\r\n"
+      "x-original-content-length: 200\r\n\r\n";
+
+  int response_body_size = 140;
+  std::string response_body(base::checked_cast<size_t>(response_body_size),
+                            ' ');
+
+  std::vector<net::MockRead> reads_list;
+  std::vector<std::string> mock_writes;
+  std::vector<net::MockWrite> writes_list;
+
+  std::vector<net::EffectiveConnectionType> effective_connection_types;
+  effective_connection_types.push_back(net::EFFECTIVE_CONNECTION_TYPE_SLOW_2G);
+  effective_connection_types.push_back(net::EFFECTIVE_CONNECTION_TYPE_2G);
+
+  BuildSocket(response_headers, response_body, true, effective_connection_types,
+              &reads_list, &mock_writes, &writes_list);
+
+  // Add 1 socket provider since 1 request in this test is fetched from the
+  // network.
+  FetchURLRequestAndVerifyECTHeader(effective_connection_types[0], true, false);
+
+  // When the ECT is set to the same value, fetching the same resource should
+  // result in a cache hit.
+  FetchURLRequestAndVerifyECTHeader(effective_connection_types[0], true, true);
+
+  // When the ECT is set to a different value, the response should still be
+  // served from the cache.
+  FetchURLRequestAndVerifyECTHeader(effective_connection_types[1], true, true);
+}
+
+// Test that effective connection type is not added to the request headers when
+// the field trial is not enabled.
+TEST_F(DataReductionProxyNetworkDelegateTest, ECTHeaderNotEnabled) {
+  Init(true /* use_secure_proxy */, false /* enable_brotli_globally */);
+
+  std::string response_headers =
+      "HTTP/1.1 200 OK\r\n"
+      "Content-Length: 140\r\n"
+      "Via: 1.1 Chrome-Compression-Proxy\r\n"
+      "Cache-Control: max-age=1200\r\n"
+      "Vary: chrome-proxy-ect\r\n"
+      "x-original-content-length: 200\r\n\r\n";
+
+  int response_body_size = 140;
+  std::string response_body(base::checked_cast<size_t>(response_body_size),
+                            ' ');
+
+  std::vector<net::MockRead> reads_list;
+  std::vector<std::string> mock_writes;
+  std::vector<net::MockWrite> writes_list;
+
+  std::vector<net::EffectiveConnectionType> effective_connection_types;
+  effective_connection_types.push_back(net::EFFECTIVE_CONNECTION_TYPE_SLOW_2G);
+
+  BuildSocket(response_headers, response_body, false,
+              effective_connection_types, &reads_list, &mock_writes,
+              &writes_list);
+
+  // Add 1 socket provider since 1 request in this test is fetched from the
+  // network.
+  FetchURLRequestAndVerifyECTHeader(effective_connection_types[0], false,
+                                    false);
+}
+
 }  // namespace
 
 }  // namespace data_reduction_proxy
diff --git a/components/data_reduction_proxy/core/common/data_reduction_proxy_headers.cc b/components/data_reduction_proxy/core/common/data_reduction_proxy_headers.cc
index 375416a0..a8dca30 100644
--- a/components/data_reduction_proxy/core/common/data_reduction_proxy_headers.cc
+++ b/components/data_reduction_proxy/core/common/data_reduction_proxy_headers.cc
@@ -27,6 +27,7 @@
 namespace {
 
 const char kChromeProxyHeader[] = "chrome-proxy";
+const char kChromeProxyECTHeader[] = "chrome-proxy-ect";
 const char kChromeProxyAcceptTransformHeader[] =
     "chrome-proxy-accept-transform";
 const char kChromeProxyContentTransformHeader[] =
@@ -113,6 +114,10 @@
   return kChromeProxyHeader;
 }
 
+const char* chrome_proxy_ect_header() {
+  return kChromeProxyECTHeader;
+}
+
 const char* chrome_proxy_accept_transform_header() {
   return kChromeProxyAcceptTransformHeader;
 }
diff --git a/components/data_reduction_proxy/core/common/data_reduction_proxy_headers.h b/components/data_reduction_proxy/core/common/data_reduction_proxy_headers.h
index e86cb5a..3e613d8 100644
--- a/components/data_reduction_proxy/core/common/data_reduction_proxy_headers.h
+++ b/components/data_reduction_proxy/core/common/data_reduction_proxy_headers.h
@@ -67,6 +67,10 @@
 // Gets the header used for data reduction proxy requests and responses.
 const char* chrome_proxy_header();
 
+// Gets the chrome-proxy-ect request header that includes the effective
+// connection type.
+const char* chrome_proxy_ect_header();
+
 // Gets the ChromeProxyAcceptTransform header name.
 const char* chrome_proxy_accept_transform_header();
 
diff --git a/components/data_reduction_proxy/core/common/data_reduction_proxy_params.cc b/components/data_reduction_proxy/core/common/data_reduction_proxy_params.cc
index ac08fb10..a1069e3c 100644
--- a/components/data_reduction_proxy/core/common/data_reduction_proxy_params.cc
+++ b/components/data_reduction_proxy/core/common/data_reduction_proxy_params.cc
@@ -260,6 +260,12 @@
                            kDisabled, base::CompareCase::SENSITIVE);
 }
 
+bool IsAddChromeProxyECTHeaderEnabled() {
+  return base::StartsWith(base::FieldTrialList::FindFullName(
+                              "DataReductionProxyAddChromeProxyECTHeader"),
+                          kEnabled, base::CompareCase::SENSITIVE);
+}
+
 bool IsConfigClientEnabled() {
   // Config client is enabled by default. It can be disabled only if Chromium
   // belongs to a field trial group whose name starts with "Disabled".
diff --git a/components/data_reduction_proxy/core/common/data_reduction_proxy_params.h b/components/data_reduction_proxy/core/common/data_reduction_proxy_params.h
index 02b3d9c..401f78e7 100644
--- a/components/data_reduction_proxy/core/common/data_reduction_proxy_params.h
+++ b/components/data_reduction_proxy/core/common/data_reduction_proxy_params.h
@@ -130,6 +130,10 @@
 // Returns true if Brotli should be added to the accept-encoding header.
 bool IsBrotliAcceptEncodingEnabled();
 
+// Returns true if the effective connection type should be added to the data
+// saver requests using chrome-proxy-ect header.
+bool IsAddChromeProxyECTHeaderEnabled();
+
 // Returns true if the Data Reduction Proxy config client should be used.
 bool IsConfigClientEnabled();
 
diff --git a/components/payments/content/payment_request_web_contents_manager.h b/components/payments/content/payment_request_web_contents_manager.h
index 5232314..2c94216 100644
--- a/components/payments/content/payment_request_web_contents_manager.h
+++ b/components/payments/content/payment_request_web_contents_manager.h
@@ -52,7 +52,7 @@
  private:
   explicit PaymentRequestWebContentsManager(content::WebContents* web_contents);
   friend class content::WebContentsUserData<PaymentRequestWebContentsManager>;
-  friend class PaymentRequestInteractiveTestBase;
+  friend class PaymentRequestBrowserTestBase;
 
   // Owns all the PaymentRequest for this WebContents. Since the
   // PaymentRequestWebContentsManager's lifetime is tied to the WebContents,
diff --git a/content/browser/loader/DEPS b/content/browser/loader/DEPS
index ec18e1f..b49f115b 100644
--- a/content/browser/loader/DEPS
+++ b/content/browser/loader/DEPS
@@ -203,9 +203,7 @@
     "+content/browser/streams/stream_context.h",
     "+content/browser/streams/stream_registry.h",
     "+content/common/content_export.h",
-    "+content/common/navigation_params.h",
     "+content/common/net/url_request_service_worker_data.h",
-    "+content/common/site_isolation_policy.h",
     "+content/public/browser/browser_thread.h",
     "+content/public/browser/navigation_ui_data.h",
     "+content/public/browser/plugin_service.h",
diff --git a/content/browser/loader/resource_dispatcher_host_impl.cc b/content/browser/loader/resource_dispatcher_host_impl.cc
index 3e200a2..081d917 100644
--- a/content/browser/loader/resource_dispatcher_host_impl.cc
+++ b/content/browser/loader/resource_dispatcher_host_impl.cc
@@ -74,13 +74,11 @@
 #include "content/browser/streams/stream.h"
 #include "content/browser/streams/stream_context.h"
 #include "content/browser/streams/stream_registry.h"
-#include "content/common/navigation_params.h"
 #include "content/common/net/url_request_service_worker_data.h"
 #include "content/common/resource_messages.h"
 #include "content/common/resource_request.h"
 #include "content/common/resource_request_body_impl.h"
 #include "content/common/resource_request_completion_status.h"
-#include "content/common/site_isolation_policy.h"
 #include "content/common/view_messages.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/global_request_id.h"
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
index b67a5f3..4bbf13f 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -3419,7 +3419,7 @@
   BOOL returnTypeIsString = [returnType isEqual:NSStringPboardType];
   const content::TextInputManager::TextSelection* selection =
       renderWidgetHostView_->GetTextSelection();
-  BOOL hasText = !selection || selection->selected_text().empty();
+  BOOL hasText = selection && !selection->selected_text().empty();
   BOOL takesText =
       renderWidgetHostView_->GetTextInputType() != ui::TEXT_INPUT_TYPE_NONE;
 
diff --git a/content/child/web_url_loader_impl.cc b/content/child/web_url_loader_impl.cc
index eb948a9..e57df2a 100644
--- a/content/child/web_url_loader_impl.cc
+++ b/content/child/web_url_loader_impl.cc
@@ -928,9 +928,12 @@
   // For compatibility reasons on Android we need to expose top-level data://
   // to the browser. In tests resource_dispatcher_ can be null, and test pages
   // need to be loaded locally.
+  // For PlzNavigate, navigation requests were already checked in the browser.
   if (resource_dispatcher_ &&
-      request_.getFrameType() == WebURLRequest::FrameTypeTopLevel)
-    return false;
+      request_.getFrameType() == WebURLRequest::FrameTypeTopLevel) {
+    if (!IsBrowserSideNavigationEnabled())
+      return false;
+  }
 #endif
 
   if (request_.getFrameType() != WebURLRequest::FrameTypeTopLevel &&
diff --git a/content/common/origin_trials/trial_token.cc b/content/common/origin_trials/trial_token.cc
index ab9debf..ecb8608 100644
--- a/content/common/origin_trials/trial_token.cc
+++ b/content/common/origin_trials/trial_token.cc
@@ -50,13 +50,19 @@
     blink::WebOriginTrialTokenStatus* out_status) {
   DCHECK(out_status);
   std::string token_payload;
-  *out_status = Extract(token_text, public_key, &token_payload);
+  std::string token_signature;
+  *out_status =
+      Extract(token_text, public_key, &token_payload, &token_signature);
   if (*out_status != blink::WebOriginTrialTokenStatus::Success) {
     return nullptr;
   }
   std::unique_ptr<TrialToken> token = Parse(token_payload);
-  *out_status = token ? blink::WebOriginTrialTokenStatus::Success
-                      : blink::WebOriginTrialTokenStatus::Malformed;
+  if (token) {
+    token->signature_ = token_signature;
+    *out_status = blink::WebOriginTrialTokenStatus::Success;
+  } else {
+    *out_status = blink::WebOriginTrialTokenStatus::Malformed;
+  }
   return token;
 }
 
@@ -78,7 +84,8 @@
 blink::WebOriginTrialTokenStatus TrialToken::Extract(
     const std::string& token_text,
     base::StringPiece public_key,
-    std::string* out_token_payload) {
+    std::string* out_token_payload,
+    std::string* out_token_signature) {
   if (token_text.empty()) {
     return blink::WebOriginTrialTokenStatus::Malformed;
   }
@@ -129,8 +136,9 @@
     return blink::WebOriginTrialTokenStatus::InvalidSignature;
   }
 
-  // Return just the payload, as a new string.
+  // Return the payload and signature, as new strings.
   *out_token_payload = token_contents.substr(kPayloadOffset, payload_length);
+  *out_token_signature = signature.as_string();
   return blink::WebOriginTrialTokenStatus::Success;
 }
 
diff --git a/content/common/origin_trials/trial_token.h b/content/common/origin_trials/trial_token.h
index 943275639..31daae3 100644
--- a/content/common/origin_trials/trial_token.h
+++ b/content/common/origin_trials/trial_token.h
@@ -60,6 +60,7 @@
   bool match_subdomains() const { return match_subdomains_; }
   std::string feature_name() { return feature_name_; }
   base::Time expiry_time() { return expiry_time_; }
+  std::string signature() { return signature_; }
 
  protected:
   // Tests can access the Parse method directly to validate it, and so are
@@ -69,14 +70,16 @@
   friend class TrialTokenTest;
   friend int ::LLVMFuzzerTestOneInput(const uint8_t*, size_t);
 
-  // If the string represents a properly signed and well-formed token, the token
-  // payload is returned in the |out_token_payload| parameter and success is
-  // returned. Otherwise,the return code indicates what was wrong with the
-  // string, and |out_token_payload| is unchanged.
+  // If the string represents a properly signed and well-formed token, success
+  // is returned, with the token payload and signature returned in the
+  // |out_token_payload| and |out_token_signature| parameters, respectively.
+  // Otherwise,the return code indicates what was wrong with the string, and
+  // |out_token_payload| and |out_token_signature| are unchanged.
   static blink::WebOriginTrialTokenStatus Extract(
       const std::string& token_text,
       base::StringPiece public_key,
-      std::string* out_token_payload);
+      std::string* out_token_payload,
+      std::string* out_token_signature);
 
   // Returns a token object if the string represents a well-formed JSON token
   // payload, or nullptr otherwise.
@@ -107,6 +110,9 @@
 
   // The time until which this token should be considered valid.
   base::Time expiry_time_;
+
+  // The signature identifying the fully signed contents of the token.
+  std::string signature_;
 };
 
 }  // namespace content
diff --git a/content/common/origin_trials/trial_token_unittest.cc b/content/common/origin_trials/trial_token_unittest.cc
index b5d396c..bffb88d 100644
--- a/content/common/origin_trials/trial_token_unittest.cc
+++ b/content/common/origin_trials/trial_token_unittest.cc
@@ -64,6 +64,13 @@
     "7FO5L22sNvkZZnacLvmfNwsAAABZeyJvcmlnaW4iOiAiaHR0cHM6Ly92YWxpZC5l"
     "eGFtcGxlLmNvbTo0NDMiLCAiZmVhdHVyZSI6ICJGcm9idWxhdGUiLCAiZXhwaXJ5"
     "IjogMTQ1ODc2NjI3N30=";
+const uint8_t kSampleTokenSignature[] = {
+    0x9f, 0x90, 0xfd, 0x09, 0xb4, 0x10, 0xb6, 0x9d, 0x66, 0xa9, 0x7e,
+    0x76, 0x51, 0x06, 0x4b, 0x09, 0xc0, 0x56, 0xc1, 0x59, 0x2a, 0x00,
+    0x84, 0xb5, 0x46, 0x60, 0xf2, 0x27, 0x50, 0x0b, 0x7b, 0x9e, 0x92,
+    0x42, 0x1e, 0x49, 0x92, 0x18, 0xd6, 0xd7, 0xed, 0xa1, 0x87, 0x6b,
+    0xc2, 0x1a, 0xa3, 0xec, 0x53, 0xb9, 0x2f, 0x6d, 0xac, 0x36, 0xf9,
+    0x19, 0x66, 0x76, 0x9c, 0x2e, 0xf9, 0x9f, 0x37, 0x0b};
 
 // This is a good subdomain trial token, signed with the above test private key.
 // Generate this token with the command (in tools/origin_trials):
@@ -74,6 +81,13 @@
     "FjpbmQG+VCPk1NrldVXZng4AAABoeyJvcmlnaW4iOiAiaHR0cHM6Ly9leGFtcGxl"
     "LmNvbTo0NDMiLCAiaXNTdWJkb21haW4iOiB0cnVlLCAiZmVhdHVyZSI6ICJGcm9i"
     "dWxhdGUiLCAiZXhwaXJ5IjogMTQ1ODc2NjI3N30=";
+const uint8_t kSampleSubdomainTokenSignature[] = {
+    0xeb, 0xbe, 0x8f, 0xd9, 0xd7, 0x01, 0x0a, 0x32, 0xe7, 0xeb, 0x74,
+    0xd0, 0xc8, 0x96, 0x6a, 0x46, 0x70, 0x14, 0x4c, 0x5c, 0x74, 0xd0,
+    0xbc, 0x10, 0xd9, 0x11, 0x74, 0xad, 0x60, 0x2f, 0x83, 0x8c, 0x14,
+    0x74, 0xb4, 0x01, 0xb6, 0x42, 0xb1, 0xcb, 0x25, 0x0d, 0x37, 0x0f,
+    0xd5, 0xf8, 0xcd, 0x16, 0x3a, 0x5b, 0x99, 0x01, 0xbe, 0x54, 0x23,
+    0xe4, 0xd4, 0xda, 0xe5, 0x75, 0x55, 0xd9, 0x9e, 0x0e};
 
 // This is a good trial token, explicitly not a subdomain, signed with the above
 // test private key. Generate this token with the command:
@@ -84,6 +98,13 @@
     "lvH52Winvy39tHbsU2gJJQYAAABveyJvcmlnaW4iOiAiaHR0cHM6Ly92YWxpZC5l"
     "eGFtcGxlLmNvbTo0NDMiLCAiaXNTdWJkb21haW4iOiBmYWxzZSwgImZlYXR1cmUi"
     "OiAiRnJvYnVsYXRlIiwgImV4cGlyeSI6IDE0NTg3NjYyNzd9";
+const uint8_t kSampleNonSubdomainTokenSignature[] = {
+    0xb7, 0x83, 0xf7, 0xbf, 0x43, 0xee, 0xd3, 0xb4, 0x96, 0xe4, 0x99,
+    0x4e, 0xbd, 0x7e, 0xff, 0xe2, 0x7a, 0x13, 0x44, 0x92, 0x8f, 0xf1,
+    0x84, 0x53, 0x22, 0xca, 0xe3, 0x5a, 0x35, 0x85, 0x71, 0x73, 0x5f,
+    0x0d, 0x51, 0xed, 0x9d, 0x61, 0x08, 0x31, 0xec, 0xd2, 0x05, 0xd6,
+    0x55, 0x2b, 0xb5, 0x96, 0xf1, 0xf9, 0xd9, 0x68, 0xa7, 0xbf, 0x2d,
+    0xfd, 0xb4, 0x76, 0xec, 0x53, 0x68, 0x09, 0x25, 0x06};
 
 const char* kExpectedFeatureName = "Frobulate";
 const char* kExpectedOrigin = "https://valid.example.com";
@@ -198,6 +219,15 @@
         expected_expiry_(base::Time::FromDoubleT(kExpectedExpiry)),
         valid_timestamp_(base::Time::FromDoubleT(kValidTimestamp)),
         invalid_timestamp_(base::Time::FromDoubleT(kInvalidTimestamp)),
+        expected_signature_(
+            std::string(reinterpret_cast<const char*>(kSampleTokenSignature),
+                        arraysize(kSampleTokenSignature))),
+        expected_subdomain_signature_(std::string(
+            reinterpret_cast<const char*>(kSampleSubdomainTokenSignature),
+            arraysize(kSampleSubdomainTokenSignature))),
+        expected_nonsubdomain_signature_(std::string(
+            reinterpret_cast<const char*>(kSampleNonSubdomainTokenSignature),
+            arraysize(kSampleNonSubdomainTokenSignature))),
         correct_public_key_(
             base::StringPiece(reinterpret_cast<const char*>(kTestPublicKey),
                               arraysize(kTestPublicKey))),
@@ -208,15 +238,18 @@
  protected:
   blink::WebOriginTrialTokenStatus Extract(const std::string& token_text,
                                            base::StringPiece public_key,
-                                           std::string* token_payload) {
-    return TrialToken::Extract(token_text, public_key, token_payload);
+                                           std::string* token_payload,
+                                           std::string* token_signature) {
+    return TrialToken::Extract(token_text, public_key, token_payload,
+                               token_signature);
   }
 
   blink::WebOriginTrialTokenStatus ExtractIgnorePayload(
       const std::string& token_text,
       base::StringPiece public_key) {
     std::string token_payload;
-    return Extract(token_text, public_key, &token_payload);
+    std::string token_signature;
+    return Extract(token_text, public_key, &token_payload, &token_signature);
   }
 
   std::unique_ptr<TrialToken> Parse(const std::string& token_payload) {
@@ -251,6 +284,10 @@
   const base::Time valid_timestamp_;
   const base::Time invalid_timestamp_;
 
+  std::string expected_signature_;
+  std::string expected_subdomain_signature_;
+  std::string expected_nonsubdomain_signature_;
+
  private:
   base::StringPiece correct_public_key_;
   base::StringPiece incorrect_public_key_;
@@ -264,26 +301,34 @@
 // token.
 TEST_F(TrialTokenTest, ValidateValidSignature) {
   std::string token_payload;
-  blink::WebOriginTrialTokenStatus status =
-      Extract(kSampleToken, correct_public_key(), &token_payload);
+  std::string token_signature;
+  blink::WebOriginTrialTokenStatus status = Extract(
+      kSampleToken, correct_public_key(), &token_payload, &token_signature);
   ASSERT_EQ(blink::WebOriginTrialTokenStatus::Success, status);
   EXPECT_STREQ(kSampleTokenJSON, token_payload.c_str());
+  EXPECT_EQ(expected_signature_, token_signature);
 }
 
 TEST_F(TrialTokenTest, ValidateSubdomainValidSignature) {
   std::string token_payload;
+  std::string token_signature;
   blink::WebOriginTrialTokenStatus status =
-      Extract(kSampleSubdomainToken, correct_public_key(), &token_payload);
+      Extract(kSampleSubdomainToken, correct_public_key(), &token_payload,
+              &token_signature);
   ASSERT_EQ(blink::WebOriginTrialTokenStatus::Success, status);
   EXPECT_STREQ(kSampleSubdomainTokenJSON, token_payload.c_str());
+  EXPECT_EQ(expected_subdomain_signature_, token_signature);
 }
 
 TEST_F(TrialTokenTest, ValidateNonSubdomainValidSignature) {
   std::string token_payload;
+  std::string token_signature;
   blink::WebOriginTrialTokenStatus status =
-      Extract(kSampleNonSubdomainToken, correct_public_key(), &token_payload);
+      Extract(kSampleNonSubdomainToken, correct_public_key(), &token_payload,
+              &token_signature);
   ASSERT_EQ(blink::WebOriginTrialTokenStatus::Success, status);
   EXPECT_STREQ(kSampleNonSubdomainTokenJSON, token_payload.c_str());
+  EXPECT_EQ(expected_nonsubdomain_signature_, token_signature);
 }
 
 TEST_F(TrialTokenTest, ValidateInvalidSignature) {
@@ -430,13 +475,15 @@
             token->IsValid(expected_origin_, invalid_timestamp_));
 }
 
-// Test overall extraction, to ensure output status matches returned token
+// Test overall extraction, to ensure output status matches returned token, and
+// signature is provided.
 TEST_F(TrialTokenTest, ExtractValidToken) {
   blink::WebOriginTrialTokenStatus status;
   std::unique_ptr<TrialToken> token =
       TrialToken::From(kSampleToken, correct_public_key(), &status);
   EXPECT_TRUE(token);
   EXPECT_EQ(blink::WebOriginTrialTokenStatus::Success, status);
+  EXPECT_EQ(expected_signature_, token->signature());
 }
 
 TEST_F(TrialTokenTest, ExtractInvalidSignature) {
diff --git a/content/common/origin_trials/trial_token_validator.cc b/content/common/origin_trials/trial_token_validator.cc
index 2cb1dd3d..1460fe4 100644
--- a/content/common/origin_trials/trial_token_validator.cc
+++ b/content/common/origin_trials/trial_token_validator.cc
@@ -47,6 +47,10 @@
   if (origin_trial_policy->IsFeatureDisabled(trial_token->feature_name()))
     return blink::WebOriginTrialTokenStatus::FeatureDisabled;
 
+  // TODO(chasej): Add a new status for disabled tokens
+  if (origin_trial_policy->IsTokenDisabled(trial_token->signature()))
+    return blink::WebOriginTrialTokenStatus::FeatureDisabled;
+
   *feature_name = trial_token->feature_name();
   return blink::WebOriginTrialTokenStatus::Success;
 }
diff --git a/content/common/origin_trials/trial_token_validator_unittest.cc b/content/common/origin_trials/trial_token_validator_unittest.cc
index cf196cc..a41f386 100644
--- a/content/common/origin_trials/trial_token_validator_unittest.cc
+++ b/content/common/origin_trials/trial_token_validator_unittest.cc
@@ -60,6 +60,13 @@
     "O4fM3Sa+MEd+5JcIgSZafw8AAABZeyJvcmlnaW4iOiAiaHR0cHM6Ly92YWxpZC5l"
     "eGFtcGxlLmNvbTo0NDMiLCAiZmVhdHVyZSI6ICJGcm9idWxhdGUiLCAiZXhwaXJ5"
     "IjogMjAwMDAwMDAwMH0=";
+const uint8_t kSampleTokenSignature[] = {
+    0xe4, 0x7f, 0xd6, 0x68, 0x3e, 0xff, 0x0e, 0x51, 0x38, 0xb3, 0x79,
+    0xe0, 0xe9, 0x36, 0xd2, 0xb0, 0x29, 0x2b, 0x7a, 0x29, 0x81, 0x1e,
+    0xd3, 0xab, 0xd6, 0x5f, 0xce, 0x10, 0x13, 0x42, 0x69, 0xc2, 0x6b,
+    0xe0, 0x6d, 0x3c, 0x0d, 0x51, 0x47, 0x0e, 0x0d, 0x8a, 0x07, 0xf7,
+    0xdf, 0xaa, 0xfe, 0x3b, 0x87, 0xcc, 0xdd, 0x26, 0xbe, 0x30, 0x47,
+    0x7e, 0xe4, 0x97, 0x08, 0x81, 0x26, 0x5a, 0x7f, 0x0f};
 
 // The token should be valid for this origin and for this feature.
 const char kAppropriateOrigin[] = "https://valid.example.com";
@@ -85,6 +92,13 @@
     "RrOtlAwa0gPqqn+A8GTD3AQAAABZeyJvcmlnaW4iOiAiaHR0cHM6Ly92YWxpZC5l"
     "eGFtcGxlLmNvbTo0NDMiLCAiZmVhdHVyZSI6ICJGcm9idWxhdGUiLCAiZXhwaXJ5"
     "IjogMTAwMDAwMDAwMH0=";
+const uint8_t kExpiredTokenSignature[] = {
+    0x61, 0xcf, 0x50, 0x85, 0xcc, 0x69, 0x77, 0xbd, 0x8d, 0x65, 0xbc,
+    0x90, 0x97, 0x83, 0x15, 0x7a, 0x25, 0x56, 0x34, 0xfd, 0xde, 0x9e,
+    0x17, 0x32, 0x72, 0xb8, 0xfa, 0x33, 0x18, 0x77, 0x6a, 0x63, 0xaa,
+    0xd1, 0x5c, 0x60, 0x1d, 0x5b, 0x52, 0x67, 0x43, 0xf0, 0xfb, 0xa7,
+    0x40, 0xa3, 0x3e, 0x46, 0xb3, 0xad, 0x94, 0x0c, 0x1a, 0xd2, 0x03,
+    0xea, 0xaa, 0x7f, 0x80, 0xf0, 0x64, 0xc3, 0xdc, 0x04};
 
 const char kUnparsableToken[] = "abcde";
 
@@ -119,10 +133,19 @@
   void DisableFeature(const std::string& feature) {
     disabled_features_.insert(feature);
   }
+  void DisableToken(const std::string& token) {
+    disabled_tokens_.insert(token);
+  }
+
+ protected:
+  bool IsTokenDisabled(base::StringPiece token_signature) const override {
+    return disabled_tokens_.count(token_signature.as_string()) > 0;
+  }
 
  private:
   const uint8_t* key_ = nullptr;
   std::set<std::string> disabled_features_;
+  std::set<std::string> disabled_tokens_;
 };
 
 class TestContentClient : public ContentClient {
@@ -138,6 +161,9 @@
   void DisableFeature(const std::string& feature) {
     origin_trial_policy_.DisableFeature(feature);
   }
+  void DisableToken(const std::string& token_signature) {
+    origin_trial_policy_.DisableToken(token_signature);
+  }
 
  private:
   TestOriginTrialPolicy origin_trial_policy_;
@@ -151,6 +177,12 @@
       : appropriate_origin_(GURL(kAppropriateOrigin)),
         inappropriate_origin_(GURL(kInappropriateOrigin)),
         insecure_origin_(GURL(kInsecureOrigin)),
+        valid_token_signature_(
+            std::string(reinterpret_cast<const char*>(kSampleTokenSignature),
+                        arraysize(kSampleTokenSignature))),
+        expired_token_signature_(
+            std::string(reinterpret_cast<const char*>(kExpiredTokenSignature),
+                        arraysize(kExpiredTokenSignature))),
         response_headers_(new net::HttpResponseHeaders("")) {
     SetPublicKey(kTestPublicKey);
     SetContentClient(&test_content_client_);
@@ -175,10 +207,17 @@
     test_content_client_.DisableFeature(feature);
   }
 
+  void DisableToken(const std::string& token_signature) {
+    test_content_client_.DisableToken(token_signature);
+  }
+
   const url::Origin appropriate_origin_;
   const url::Origin inappropriate_origin_;
   const url::Origin insecure_origin_;
 
+  std::string valid_token_signature_;
+  std::string expired_token_signature_;
+
   scoped_refptr<net::HttpResponseHeaders> response_headers_;
 
  private:
@@ -259,6 +298,22 @@
                                                appropriate_origin_, &feature));
 }
 
+TEST_F(TrialTokenValidatorTest, ValidatorRespectsDisabledTokens) {
+  std::string feature;
+  // Disable an irrelevant token; token should still validate
+  DisableToken(expired_token_signature_);
+  EXPECT_EQ(blink::WebOriginTrialTokenStatus::Success,
+            TrialTokenValidator::ValidateToken(kSampleToken,
+                                               appropriate_origin_, &feature));
+  EXPECT_EQ(kAppropriateFeatureName, feature);
+  // Disable the token; it should no longer be valid
+  DisableToken(valid_token_signature_);
+  // TODO(chasej): Add a new status for disabled tokens
+  EXPECT_EQ(blink::WebOriginTrialTokenStatus::FeatureDisabled,
+            TrialTokenValidator::ValidateToken(kSampleToken,
+                                               appropriate_origin_, &feature));
+}
+
 TEST_F(TrialTokenValidatorTest, ValidateRequestInsecure) {
   response_headers_->AddHeader(std::string("Origin-Trial: ") +
                                kInsecureOriginToken);
diff --git a/content/renderer/mus/renderer_window_tree_client.cc b/content/renderer/mus/renderer_window_tree_client.cc
index 0e9f0b64..65fe281 100644
--- a/content/renderer/mus/renderer_window_tree_client.cc
+++ b/content/renderer/mus/renderer_window_tree_client.cc
@@ -114,7 +114,8 @@
 void RendererWindowTreeClient::OnWindowBoundsChanged(
     ui::Id window_id,
     const gfx::Rect& old_bounds,
-    const gfx::Rect& new_bounds) {}
+    const gfx::Rect& new_bounds,
+    const base::Optional<cc::LocalSurfaceId>& local_surface_id) {}
 
 void RendererWindowTreeClient::OnClientAreaChanged(
     uint32_t window_id,
diff --git a/content/renderer/mus/renderer_window_tree_client.h b/content/renderer/mus/renderer_window_tree_client.h
index 48fb20e..53cf3c8 100644
--- a/content/renderer/mus/renderer_window_tree_client.h
+++ b/content/renderer/mus/renderer_window_tree_client.h
@@ -74,9 +74,11 @@
                          ui::mojom::WindowDataPtr data,
                          int64_t display_id,
                          bool drawn) override;
-  void OnWindowBoundsChanged(ui::Id window_id,
-                             const gfx::Rect& old_bounds,
-                             const gfx::Rect& new_bounds) override;
+  void OnWindowBoundsChanged(
+      ui::Id window_id,
+      const gfx::Rect& old_bounds,
+      const gfx::Rect& new_bounds,
+      const base::Optional<cc::LocalSurfaceId>& local_frame_id) override;
   void OnClientAreaChanged(
       uint32_t window_id,
       const gfx::Insets& new_client_area,
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 9624cfb..27feea5a 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -4205,9 +4205,10 @@
   // TODO(mkwst): It would be cleaner to adjust blink::ResourceRequest to
   // initialize itself with a `nullptr` initiator so that this can be a simple
   // `isNull()` check. https://crbug.com/625969
+  WebDocument frame_document = frame->document();
   if (request.requestorOrigin().isUnique() &&
-      !frame->document().getSecurityOrigin().isUnique()) {
-    request.setRequestorOrigin(frame->document().getSecurityOrigin());
+      !frame_document.getSecurityOrigin().isUnique()) {
+    request.setRequestorOrigin(frame_document.getSecurityOrigin());
   }
 
   WebDataSource* provisional_data_source = frame->provisionalDataSource();
@@ -4320,7 +4321,7 @@
   extra_data->set_render_frame_id(routing_id_);
   extra_data->set_is_main_frame(!parent);
   extra_data->set_frame_origin(
-      url::Origin(frame->document().getSecurityOrigin()));
+      url::Origin(frame_document.getSecurityOrigin()));
   extra_data->set_parent_is_main_frame(parent && !parent->parent());
   extra_data->set_parent_render_frame_id(parent_routing_id);
   extra_data->set_allow_download(
@@ -4336,7 +4337,7 @@
       is_prefetch &&
       WebURLRequestToResourceType(request) != RESOURCE_TYPE_MAIN_FRAME);
   extra_data->set_initiated_in_secure_context(
-      frame->document().isSecureContext());
+      frame_document.isSecureContext());
 
   // Renderer process transfers apply only to navigational requests.
   bool is_navigational_request =
@@ -4858,20 +4859,21 @@
   params.socket_address.set_port(response.remotePort());
   params.was_within_same_page = navigation_state->WasWithinSamePage();
 
+  WebDocument frame_document = frame->document();
   // Set the origin of the frame.  This will be replicated to the corresponding
   // RenderFrameProxies in other processes.
-  params.origin = frame->document().getSecurityOrigin();
+  WebSecurityOrigin frame_origin = frame_document.getSecurityOrigin();
+  params.origin = frame_origin;
 
   params.insecure_request_policy = frame->getInsecureRequestPolicy();
 
   params.has_potentially_trustworthy_unique_origin =
-      frame->document().getSecurityOrigin().isUnique() &&
-      frame->document().getSecurityOrigin().isPotentiallyTrustworthy();
+      frame_origin.isUnique() && frame_origin.isPotentiallyTrustworthy();
 
   // Set the URL to be displayed in the browser UI to the user.
   params.url = GetLoadingUrl();
-  if (GURL(frame->document().baseURL()) != params.url)
-    params.base_url = frame->document().baseURL();
+  if (GURL(frame_document.baseURL()) != params.url)
+    params.base_url = frame_document.baseURL();
 
   GetRedirectChain(ds, &params.redirects);
   params.should_update_history =
diff --git a/ios/chrome/browser/content_suggestions/content_suggestions_coordinator.mm b/ios/chrome/browser/content_suggestions/content_suggestions_coordinator.mm
index 5104b68..e0cf332 100644
--- a/ios/chrome/browser/content_suggestions/content_suggestions_coordinator.mm
+++ b/ios/chrome/browser/content_suggestions/content_suggestions_coordinator.mm
@@ -6,9 +6,12 @@
 
 #include "base/mac/scoped_nsobject.h"
 #include "base/strings/sys_string_conversions.h"
+#include "components/ntp_snippets/content_suggestions_service.h"
+#include "components/ntp_snippets/remote/remote_suggestions_scheduler.h"
 #import "ios/chrome/browser/content_suggestions/content_suggestions_mediator.h"
 #include "ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.h"
 #import "ios/chrome/browser/ui/alert_coordinator/action_sheet_coordinator.h"
+#import "ios/chrome/browser/ui/content_suggestions/content_suggestion_identifier.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_article_item.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_commands.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.h"
@@ -22,16 +25,21 @@
 #error "This file requires ARC support."
 #endif
 
-@interface ContentSuggestionsCoordinator ()<ContentSuggestionsCommands> {
-  ContentSuggestionsMediator* _contentSuggestionsMediator;
-}
+@interface ContentSuggestionsCoordinator ()<ContentSuggestionsCommands>
 
 @property(nonatomic, strong) AlertCoordinator* alertCoordinator;
 @property(nonatomic, strong) UINavigationController* navigationController;
 @property(nonatomic, strong)
     ContentSuggestionsViewController* suggestionsViewController;
+@property(nonatomic, strong)
+    ContentSuggestionsMediator* contentSuggestionsMediator;
 
+// Opens the |URL| in a new tab |incognito| or not.
 - (void)openNewTabWithURL:(const GURL&)URL incognito:(BOOL)incognito;
+// Dismisses the |article|, removing it from the content service, and dismisses
+// the item at |indexPath| in the view controller.
+- (void)dismissArticle:(ContentSuggestionsArticleItem*)article
+           atIndexPath:(NSIndexPath*)indexPath;
 
 @end
 
@@ -43,6 +51,7 @@
 @synthesize suggestionsViewController = _suggestionsViewController;
 @synthesize URLLoader = _URLLoader;
 @synthesize visible = _visible;
+@synthesize contentSuggestionsMediator = _contentSuggestionsMediator;
 
 - (void)start {
   if (self.visible || !self.browserState) {
@@ -53,13 +62,17 @@
 
   _visible = YES;
 
-  _contentSuggestionsMediator = [[ContentSuggestionsMediator alloc]
-      initWithContentService:IOSChromeContentSuggestionsServiceFactory::
-                                 GetForBrowserState(self.browserState)];
+  ntp_snippets::ContentSuggestionsService* contentSuggestionsService =
+      IOSChromeContentSuggestionsServiceFactory::GetForBrowserState(
+          self.browserState);
+  contentSuggestionsService->remote_suggestions_scheduler()->OnNTPOpened();
+
+  self.contentSuggestionsMediator = [[ContentSuggestionsMediator alloc]
+      initWithContentService:contentSuggestionsService];
 
   self.suggestionsViewController = [[ContentSuggestionsViewController alloc]
       initWithStyle:CollectionViewControllerStyleDefault
-         dataSource:_contentSuggestionsMediator];
+         dataSource:self.contentSuggestionsMediator];
 
   self.suggestionsViewController.suggestionCommandHandler = self;
   _navigationController = [[UINavigationController alloc]
@@ -82,6 +95,7 @@
       dismissViewControllerAnimated:YES
                          completion:nil];
   self.navigationController = nil;
+  self.contentSuggestionsMediator = nil;
   _visible = NO;
 }
 
@@ -108,7 +122,8 @@
 }
 
 - (void)displayContextMenuForArticle:(ContentSuggestionsArticleItem*)articleItem
-                             atPoint:(CGPoint)touchLocation {
+                             atPoint:(CGPoint)touchLocation
+                         atIndexPath:(NSIndexPath*)indexPath {
   NSString* urlString = base::SysUTF8ToNSString(articleItem.articleURL.spec());
   self.alertCoordinator = [[ActionSheetCoordinator alloc]
       initWithBaseViewController:self.navigationController
@@ -120,6 +135,7 @@
 
   __weak ContentSuggestionsCoordinator* weakSelf = self;
   GURL articleURL = articleItem.articleURL;
+  __weak ContentSuggestionsArticleItem* weakArticle = articleItem;
 
   NSString* openInNewTabTitle =
       l10n_util::GetNSString(IDS_IOS_CONTENT_CONTEXT_OPENLINKNEWTAB);
@@ -146,7 +162,8 @@
   [self.alertCoordinator addItemWithTitle:deleteTitle
                                    action:^{
                                      // TODO(crbug.com/691979): Add metrics.
-                                     [weakSelf removeEntry];
+                                     [weakSelf dismissArticle:weakArticle
+                                                  atIndexPath:indexPath];
                                    }
                                     style:UIAlertActionStyleDefault];
 
@@ -173,8 +190,15 @@
   [self stop];
 }
 
-- (void)removeEntry {
+- (void)dismissArticle:(ContentSuggestionsArticleItem*)article
+           atIndexPath:(NSIndexPath*)indexPath {
+  if (!article)
+    return;
+
   // TODO(crbug.com/691979): Add metrics.
+  [self.contentSuggestionsMediator
+      dismissSuggestion:article.suggestionIdentifier];
+  [self.suggestionsViewController dismissEntryAtIndexPath:indexPath];
 }
 
 @end
diff --git a/ios/chrome/browser/content_suggestions/content_suggestions_mediator.h b/ios/chrome/browser/content_suggestions/content_suggestions_mediator.h
index f53553a..11394aa 100644
--- a/ios/chrome/browser/content_suggestions/content_suggestions_mediator.h
+++ b/ios/chrome/browser/content_suggestions/content_suggestions_mediator.h
@@ -14,6 +14,8 @@
 class ContentSuggestionsService;
 }
 
+@class ContentSuggestionIdentifier;
+
 // Mediator for ContentSuggestions. Makes the interface between a
 // ntp_snippets::ContentSuggestionsService and the Objective-C services using
 // its data.
@@ -25,6 +27,10 @@
     NS_DESIGNATED_INITIALIZER;
 - (instancetype)init NS_UNAVAILABLE;
 
+// Dismisses the suggestion from the content suggestions service. It doesn't
+// change the UI.
+- (void)dismissSuggestion:(ContentSuggestionIdentifier*)suggestionIdentifier;
+
 @end
 
 #endif  // IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_MEDIATOR_H_
diff --git a/ios/chrome/browser/content_suggestions/content_suggestions_mediator.mm b/ios/chrome/browser/content_suggestions/content_suggestions_mediator.mm
index 55e62e62..52b7c7c 100644
--- a/ios/chrome/browser/content_suggestions/content_suggestions_mediator.mm
+++ b/ios/chrome/browser/content_suggestions/content_suggestions_mediator.mm
@@ -133,6 +133,8 @@
 @synthesize dataSink = _dataSink;
 @synthesize sectionInformationByCategory = _sectionInformationByCategory;
 
+#pragma mark - Public
+
 - (instancetype)initWithContentService:
     (ntp_snippets::ContentSuggestionsService*)contentService {
   self = [super init];
@@ -145,6 +147,16 @@
   return self;
 }
 
+- (void)dismissSuggestion:(ContentSuggestionIdentifier*)suggestionIdentifier {
+  ContentSuggestionsCategoryWrapper* categoryWrapper =
+      [self categoryWrapperForSectionInfo:suggestionIdentifier.sectionInfo];
+  ntp_snippets::ContentSuggestion::ID suggestion_id =
+      ntp_snippets::ContentSuggestion::ID([categoryWrapper category],
+                                          suggestionIdentifier.IDInSection);
+
+  self.contentService->DismissSuggestion(suggestion_id);
+}
+
 #pragma mark - ContentSuggestionsDataSource
 
 - (NSArray<ContentSuggestion*>*)allSuggestions {
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_article_item.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_article_item.mm
index 2ee2912..ecc4581 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_article_item.mm
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_article_item.mm
@@ -56,16 +56,16 @@
     _subtitle = [subtitle copy];
     _articleURL = url;
     _delegate = delegate;
+    _image = [self emptyImageBackground];
   }
   return self;
 }
 
 - (void)configureCell:(ContentSuggestionsArticleCell*)cell {
   [super configureCell:cell];
-  if (!self.image && !self.imageFetched) {
+  if (!self.imageFetched) {
     self.imageFetched = YES;
-    // Fetch the image. During the fetch the cell's image should still be set to
-    // nil.
+    // Fetch the image. During the fetch the cell's image should still be set.
     [self.delegate loadImageForArticleItem:self];
   }
   cell.titleLabel.text = self.title;
@@ -74,6 +74,21 @@
   [cell setPublisherName:self.publisher date:self.publishDate];
 }
 
+#pragma mark - Private
+
+- (UIImage*)emptyImageBackground {
+  // TODO(crbug.com/698171): Remove this function once we have real background
+  // image.
+  UIColor* color = [UIColor lightGrayColor];
+  CGRect rect = CGRectMake(0, 0, 1, 1);
+  UIGraphicsBeginImageContext(rect.size);
+  [color setFill];
+  UIRectFill(rect);
+  UIImage* image = UIGraphicsGetImageFromCurrentImageContext();
+  UIGraphicsEndImageContext();
+  return image;
+}
+
 @end
 
 #pragma mark - ContentSuggestionsArticleCell
@@ -156,9 +171,9 @@
   CGFloat parentWidth = CGRectGetWidth(self.contentView.bounds);
 
   self.titleLabel.preferredMaxLayoutWidth =
-      parentWidth - self.imageView.bounds.size.width - 3 * kStandardSpacing;
+      parentWidth - kImageSize - 3 * kStandardSpacing;
   self.subtitleLabel.preferredMaxLayoutWidth =
-      parentWidth - self.imageView.bounds.size.width - 3 * kStandardSpacing;
+      parentWidth - kImageSize - 3 * kStandardSpacing;
 
   // Re-layout with the new preferred width to allow the label to adjust its
   // height.
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_article_item_unittest.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_article_item_unittest.mm
index b8c0003..f0b5063 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_article_item_unittest.mm
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_article_item_unittest.mm
@@ -34,47 +34,18 @@
   ContentSuggestionsArticleCell* cell = [[[item cellClass] alloc] init];
   ASSERT_EQ([ContentSuggestionsArticleCell class], [cell class]);
   ASSERT_EQ(url, item.articleURL);
-  ASSERT_EQ(nil, item.image);
+  ASSERT_NE(nil, item.image);
 
   // Action.
   [item configureCell:cell];
 
   // Tests.
-  EXPECT_EQ(nil, cell.imageView.image);
+  EXPECT_EQ(item.image, cell.imageView.image);
   EXPECT_EQ(title, cell.titleLabel.text);
   EXPECT_EQ(subtitle, cell.subtitleLabel.text);
   EXPECT_OCMOCK_VERIFY(delegateMock);
 }
 
-// Tests that configureCell: set all the fields of the cell with an image and
-// does not call the delegate.
-TEST(ContentSuggestionsArticleItemTest, CellIsConfiguredWithImage) {
-  // Setup.
-  NSString* title = @"testTitle";
-  NSString* subtitle = @"testSubtitle";
-  UIImage* image = [[UIImage alloc] init];
-  GURL url = GURL("http://chromium.org");
-  id delegateMock =
-      OCMStrictProtocolMock(@protocol(ContentSuggestionsArticleItemDelegate));
-  ContentSuggestionsArticleItem* item =
-      [[ContentSuggestionsArticleItem alloc] initWithType:0
-                                                    title:title
-                                                 subtitle:subtitle
-                                                 delegate:delegateMock
-                                                      url:url];
-  item.image = image;
-  ContentSuggestionsArticleCell* cell = [[[item cellClass] alloc] init];
-
-  // Action.
-  [item configureCell:cell];
-
-  // Tests.
-  EXPECT_EQ(image, cell.imageView.image);
-  EXPECT_EQ(title, cell.titleLabel.text);
-  EXPECT_EQ(subtitle, cell.subtitleLabel.text);
-  EXPECT_EQ(image, cell.imageView.image);
-}
-
 // Tests that configureCell: does not call the delegate if it fetched the image
 // once.
 TEST(ContentSuggestionsArticleItemTest, DontFetchImageIsImageIsBeingFetched) {
@@ -93,7 +64,7 @@
 
   OCMExpect([niceDelegateMock loadImageForArticleItem:item]);
   ContentSuggestionsArticleCell* cell = [[[item cellClass] alloc] init];
-  ASSERT_EQ(nil, item.image);
+  ASSERT_NE(nil, item.image);
   [item configureCell:cell];
   ASSERT_OCMOCK_VERIFY(niceDelegateMock);
 
@@ -105,7 +76,7 @@
   [item configureCell:cell];
 
   // Tests.
-  EXPECT_EQ(nil, cell.imageView.image);
+  EXPECT_EQ(item.image, cell.imageView.image);
   EXPECT_EQ(title, cell.titleLabel.text);
   EXPECT_EQ(subtitle, cell.subtitleLabel.text);
 }
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_commands.h b/ios/chrome/browser/ui/content_suggestions/content_suggestions_commands.h
index 7c11505..b874e51 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_commands.h
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_commands.h
@@ -21,7 +21,8 @@
 - (void)openURL:(const GURL&)URL;
 // Displays a context menu for opening the |articleItem|.
 - (void)displayContextMenuForArticle:(ContentSuggestionsArticleItem*)articleItem
-                             atPoint:(CGPoint)touchLocation;
+                             atPoint:(CGPoint)touchLocation
+                         atIndexPath:(NSIndexPath*)indexPath;
 
 @end
 
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.h b/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.h
index e25bdb9..997f569 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.h
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.h
@@ -30,6 +30,9 @@
 @property(nonatomic, weak) id<ContentSuggestionsCommands>
     suggestionCommandHandler;
 
+// Removes the entry at |indexPath|, from the collection and its model.
+- (void)dismissEntryAtIndexPath:(NSIndexPath*)indexPath;
+
 @end
 
 #endif  // IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm
index 3fb509f..3754aa9f 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm
@@ -41,6 +41,8 @@
 @synthesize suggestionCommandHandler = _suggestionCommandHandler;
 @synthesize collectionUpdater = _collectionUpdater;
 
+#pragma mark - Public
+
 - (instancetype)initWithStyle:(CollectionViewControllerStyle)style
                    dataSource:(id<ContentSuggestionsDataSource>)dataSource {
   self = [super initWithStyle:style];
@@ -51,6 +53,20 @@
   return self;
 }
 
+- (void)dismissEntryAtIndexPath:(NSIndexPath*)indexPath {
+  if (!indexPath || ![self.collectionViewModel hasItemAtIndexPath:indexPath]) {
+    return;
+  }
+
+  [self.collectionView performBatchUpdates:^{
+    [self collectionView:self.collectionView
+        willDeleteItemsAtIndexPaths:@[ indexPath ]];
+
+    [self.collectionView deleteItemsAtIndexPaths:@[ indexPath ]];
+  }
+                                completion:nil];
+}
+
 #pragma mark - UIViewController
 
 - (void)viewDidLoad {
@@ -197,8 +213,10 @@
   ContentSuggestionsArticleItem* articleItem =
       base::mac::ObjCCastStrict<ContentSuggestionsArticleItem>(touchedItem);
 
-  [self.suggestionCommandHandler displayContextMenuForArticle:articleItem
-                                                      atPoint:touchLocation];
+  [self.suggestionCommandHandler
+      displayContextMenuForArticle:articleItem
+                           atPoint:touchLocation
+                       atIndexPath:touchedItemIndexPath];
 }
 
 @end
diff --git a/ios/chrome/browser/ui/settings/BUILD.gn b/ios/chrome/browser/ui/settings/BUILD.gn
index 74e62dd6..389ea9d 100644
--- a/ios/chrome/browser/ui/settings/BUILD.gn
+++ b/ios/chrome/browser/ui/settings/BUILD.gn
@@ -37,6 +37,7 @@
     "autofill_credit_card_edit_collection_view_controller.mm",
     "autofill_edit_accessory_view.h",
     "autofill_edit_accessory_view.mm",
+    "autofill_edit_collection_view_controller+protected.h",
     "autofill_edit_collection_view_controller.h",
     "autofill_edit_collection_view_controller.mm",
     "autofill_profile_edit_collection_view_controller.h",
diff --git a/ios/chrome/browser/ui/settings/autofill_credit_card_edit_collection_view_controller.mm b/ios/chrome/browser/ui/settings/autofill_credit_card_edit_collection_view_controller.mm
index a7ed56c..3c4ad8a 100644
--- a/ios/chrome/browser/ui/settings/autofill_credit_card_edit_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/autofill_credit_card_edit_collection_view_controller.mm
@@ -11,6 +11,7 @@
 #include "base/mac/scoped_block.h"
 #import "base/mac/scoped_nsobject.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/field_types.h"
 #include "components/autofill/core/browser/payments/payments_service_url.h"
@@ -22,6 +23,7 @@
 #import "ios/chrome/browser/ui/commands/UIKit+ChromeExecuteCommand.h"
 #include "ios/chrome/browser/ui/commands/ios_command_ids.h"
 #import "ios/chrome/browser/ui/commands/open_url_command.h"
+#import "ios/chrome/browser/ui/settings/autofill_edit_collection_view_controller+protected.h"
 #import "ios/chrome/browser/ui/settings/cells/autofill_edit_item.h"
 #import "ios/chrome/browser/ui/settings/cells/copied_to_chrome_item.h"
 #import "ios/chrome/browser/ui/uikit_ui_util.h"
@@ -35,6 +37,8 @@
 NSString* const kAutofillCreditCardEditCollectionViewId =
     @"kAutofillCreditCardEditCollectionViewId";
 
+const CGFloat kCardTypeIconDimension = 30.0;
+
 typedef NS_ENUM(NSInteger, SectionIdentifier) {
   SectionIdentifierFields = kSectionIdentifierEnumZero,
   SectionIdentifierCopiedToChrome,
@@ -156,6 +160,7 @@
           : base::SysUTF16ToNSString(_creditCard.LastFourDigits());
   cardNumberitem.textFieldEnabled = isEditing;
   cardNumberitem.autofillType = autofill::CREDIT_CARD_NUMBER;
+  [self setCardTypeIconForItem:cardNumberitem];
   [model addItem:cardNumberitem
       toSectionWithIdentifier:SectionIdentifierFields];
 
@@ -193,6 +198,26 @@
   }
 }
 
+#pragma mark - UITextFieldDelegate
+
+- (void)textFieldDidEndEditing:(UITextField*)textField {
+  NSIndexPath* cellPath = [self indexPathForCurrentTextField];
+  DCHECK(cellPath);
+  NSIndexPath* itemPath = [NSIndexPath indexPathForItem:[cellPath row]
+                                              inSection:[cellPath section]];
+  AutofillEditItem* item = base::mac::ObjCCastStrict<AutofillEditItem>(
+      [self.collectionViewModel itemAtIndexPath:itemPath]);
+
+  if (item.autofillType == autofill::CREDIT_CARD_NUMBER)
+    [self setCardTypeIconForItem:item];
+
+  // Update the cell.
+  [self reconfigureCellsForItems:@[ item ]
+         inSectionWithIdentifier:SectionIdentifierFields];
+
+  [super textFieldDidEndEditing:textField];
+}
+
 #pragma mark - MDCCollectionViewEditingDelegate
 
 - (BOOL)collectionViewAllowsEditing:(UICollectionView*)collectionView {
@@ -270,4 +295,22 @@
   [self reloadData];
 }
 
+#pragma mark - Helper Methods
+
+- (void)setCardTypeIconForItem:(AutofillEditItem*)item {
+  const char* cardType = autofill::CreditCard::GetCreditCardType(
+      base::SysNSStringToUTF16(item.textFieldValue));
+  if (cardType != autofill::kGenericCard) {
+    int resourceID =
+        autofill::data_util::GetPaymentRequestData(cardType).icon_resource_id;
+    // Resize and set the card type icon.
+    CGFloat dimension = kCardTypeIconDimension;
+    item.cardTypeIcon =
+        ResizeImage(NativeImage(resourceID), CGSizeMake(dimension, dimension),
+                    ProjectionMode::kAspectFillNoClipping);
+  } else {
+    item.cardTypeIcon = nil;
+  }
+}
+
 @end
diff --git a/ios/chrome/browser/ui/settings/autofill_edit_collection_view_controller+protected.h b/ios/chrome/browser/ui/settings/autofill_edit_collection_view_controller+protected.h
new file mode 100644
index 0000000..89b8ed83
--- /dev/null
+++ b/ios/chrome/browser/ui/settings/autofill_edit_collection_view_controller+protected.h
@@ -0,0 +1,18 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_UI_SETTINGS_AUTOFILL_EDIT_COLLECTION_VIEW_CONTROLLER_PROTECTED_H_
+#define IOS_CHROME_BROWSER_UI_SETTINGS_AUTOFILL_EDIT_COLLECTION_VIEW_CONTROLLER_PROTECTED_H_
+
+#import "ios/chrome/browser/ui/settings/autofill_edit_collection_view_controller.h"
+
+// The collection view for an Autofill edit entry menu.
+@interface AutofillEditCollectionViewController (Protected)
+
+// Returns the indexPath for the currently focused text field when in edit mode.
+- (NSIndexPath*)indexPathForCurrentTextField;
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_UI_SETTINGS_AUTOFILL_EDIT_COLLECTION_VIEW_CONTROLLER_PROTECTED_H_
diff --git a/ios/chrome/browser/ui/settings/autofill_edit_collection_view_controller.mm b/ios/chrome/browser/ui/settings/autofill_edit_collection_view_controller.mm
index f0f4faa..bc485697 100644
--- a/ios/chrome/browser/ui/settings/autofill_edit_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/autofill_edit_collection_view_controller.mm
@@ -8,6 +8,7 @@
 #import "base/mac/foundation_util.h"
 #import "base/mac/scoped_nsobject.h"
 #import "ios/chrome/browser/ui/settings/autofill_edit_accessory_view.h"
+#import "ios/chrome/browser/ui/settings/autofill_edit_collection_view_controller+protected.h"
 #import "ios/chrome/browser/ui/settings/cells/autofill_edit_item.h"
 #import "ios/third_party/material_components_ios/src/components/CollectionCells/src/MaterialCollectionCells.h"
 
@@ -128,6 +129,20 @@
 
 #pragma mark - AutofillEditAccessoryDelegate
 
+- (void)nextPressed {
+  [self moveToAnotherCellWithOffset:1];
+}
+
+- (void)previousPressed {
+  [self moveToAnotherCellWithOffset:-1];
+}
+
+- (void)closePressed {
+  [[_currentEditingCell textField] resignFirstResponder];
+}
+
+#pragma mark - Helper methods
+
 - (NSIndexPath*)indexPathForCurrentTextField {
   DCHECK(_currentEditingCell);
   return [[self collectionView] indexPathForCell:_currentEditingCell];
@@ -149,18 +164,6 @@
   }
 }
 
-- (void)nextPressed {
-  [self moveToAnotherCellWithOffset:1];
-}
-
-- (void)previousPressed {
-  [self moveToAnotherCellWithOffset:-1];
-}
-
-- (void)closePressed {
-  [[_currentEditingCell textField] resignFirstResponder];
-}
-
 - (void)updateAccessoryViewButtonState {
   NSIndexPath* currentPath = [self indexPathForCurrentTextField];
   NSIndexPath* nextPath =
diff --git a/ios/chrome/browser/ui/settings/cells/autofill_edit_item.h b/ios/chrome/browser/ui/settings/cells/autofill_edit_item.h
index 2c44f4c..dd8ca2e7 100644
--- a/ios/chrome/browser/ui/settings/cells/autofill_edit_item.h
+++ b/ios/chrome/browser/ui/settings/cells/autofill_edit_item.h
@@ -21,6 +21,9 @@
 // The value of the text field.
 @property(nonatomic, copy) NSString* textFieldValue;
 
+// An image corresponding to the type of the credit card, if any.
+@property(nonatomic, copy) UIImage* cardTypeIcon;
+
 // The field type this item is describing.
 @property(nonatomic, assign) autofill::ServerFieldType autofillType;
 
@@ -40,6 +43,9 @@
 // |textFieldValue|.
 @property(nonatomic, readonly, strong) UITextField* textField;
 
+// UIImageView containing the credit card type icon.
+@property(nonatomic, readonly, strong) UIImageView* cardTypeIconView;
+
 @end
 
 #endif  // IOS_CHROME_BROWSER_UI_SETTINGS_CELLS_AUTOFILL_EDIT_ITEM_H_
diff --git a/ios/chrome/browser/ui/settings/cells/autofill_edit_item.mm b/ios/chrome/browser/ui/settings/cells/autofill_edit_item.mm
index 0c17215..1db8055 100644
--- a/ios/chrome/browser/ui/settings/cells/autofill_edit_item.mm
+++ b/ios/chrome/browser/ui/settings/cells/autofill_edit_item.mm
@@ -28,6 +28,7 @@
 
 @synthesize textFieldName = _textFieldName;
 @synthesize textFieldValue = _textFieldValue;
+@synthesize cardTypeIcon = _cardTypeIcon;
 @synthesize textFieldEnabled = _textFieldEnabled;
 @synthesize autofillType = _autofillType;
 
@@ -56,6 +57,7 @@
   [cell.textField addTarget:self
                      action:@selector(textFieldChanged:)
            forControlEvents:UIControlEventEditingChanged];
+  cell.cardTypeIconView.image = self.cardTypeIcon;
 }
 
 #pragma mark - Actions
@@ -66,10 +68,15 @@
 
 @end
 
-@implementation AutofillEditCell
+@implementation AutofillEditCell {
+  NSLayoutConstraint* _iconHeightConstraint;
+  NSLayoutConstraint* _iconWidthConstraint;
+  NSLayoutConstraint* _textFieldTrailingConstraint;
+}
 
 @synthesize textField = _textField;
 @synthesize textLabel = _textLabel;
+@synthesize cardTypeIconView = _cardTypeIconView;
 
 - (instancetype)initWithFrame:(CGRect)frame {
   self = [super initWithFrame:frame];
@@ -101,6 +108,24 @@
     _textField.textAlignment =
         UseRTLLayout() ? NSTextAlignmentLeft : NSTextAlignmentRight;
 
+    // Card type icon.
+    _cardTypeIconView = [[UIImageView alloc] initWithFrame:CGRectZero];
+    _cardTypeIconView.layer.borderColor =
+        [UIColor colorWithWhite:0.9 alpha:1.0].CGColor;
+    _cardTypeIconView.layer.borderWidth = 1.0;
+    _cardTypeIconView.translatesAutoresizingMaskIntoConstraints = NO;
+    [contentView addSubview:_cardTypeIconView];
+
+    // Set up the icons size constraints. They are activated here and updated in
+    // layoutSubviews.
+    _iconHeightConstraint =
+        [_cardTypeIconView.heightAnchor constraintEqualToConstant:0];
+    _iconWidthConstraint =
+        [_cardTypeIconView.widthAnchor constraintEqualToConstant:0];
+
+    _textFieldTrailingConstraint = [_textField.trailingAnchor
+        constraintEqualToAnchor:_cardTypeIconView.leadingAnchor];
+
     // Set up the constraints.
     [NSLayoutConstraint activateConstraints:@[
       [_textLabel.leadingAnchor
@@ -110,14 +135,19 @@
                                            constant:kVerticalPadding],
       [_textLabel.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor
                                               constant:-kVerticalPadding],
-      [_textField.trailingAnchor
-          constraintEqualToAnchor:contentView.trailingAnchor
-                         constant:-kHorizontalPadding],
+      _textFieldTrailingConstraint,
       [_textField.firstBaselineAnchor
           constraintEqualToAnchor:_textLabel.firstBaselineAnchor],
       [_textField.leadingAnchor
           constraintEqualToAnchor:_textLabel.trailingAnchor
                          constant:kLabelAndFieldGap],
+      [_cardTypeIconView.trailingAnchor
+          constraintEqualToAnchor:contentView.trailingAnchor
+                         constant:-kHorizontalPadding],
+      [_cardTypeIconView.centerYAnchor
+          constraintEqualToAnchor:contentView.centerYAnchor],
+      _iconHeightConstraint,
+      _iconWidthConstraint,
     ]];
     [_textField setContentHuggingPriority:UILayoutPriorityDefaultLow
                                   forAxis:UILayoutConstraintAxisHorizontal];
@@ -125,6 +155,27 @@
   return self;
 }
 
+#pragma mark - UIView
+
+- (void)layoutSubviews {
+  if (self.cardTypeIconView.image) {
+    _textFieldTrailingConstraint.constant = -kLabelAndFieldGap;
+
+    // Set the size constraints of the icon view to the dimensions of the image.
+    _iconHeightConstraint.constant = self.cardTypeIconView.image.size.height;
+    _iconWidthConstraint.constant = self.cardTypeIconView.image.size.width;
+  } else {
+    _textFieldTrailingConstraint.constant = 0;
+
+    _iconHeightConstraint.constant = 0;
+    _iconWidthConstraint.constant = 0;
+  }
+
+  [super layoutSubviews];
+}
+
+#pragma mark - UICollectionReusableView
+
 - (void)prepareForReuse {
   [super prepareForReuse];
   self.textLabel.text = nil;
@@ -138,6 +189,7 @@
   [self.textField removeTarget:nil
                         action:nil
               forControlEvents:UIControlEventAllEvents];
+  self.cardTypeIconView.image = nil;
 }
 
 #pragma mark - Accessibility
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 dba5948..c475920 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
@@ -7,6 +7,8 @@
 #import <UIKit/UIKit.h>
 
 #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/grit/components_scaled_resources.h"
 #import "ios/chrome/browser/payments/cells/autofill_profile_item.h"
 #import "ios/chrome/browser/payments/cells/payments_text_item.h"
@@ -25,6 +27,7 @@
 #import "ios/chrome/browser/ui/settings/cells/account_control_item.h"
 #import "ios/chrome/browser/ui/settings/cells/account_signin_item.h"
 #import "ios/chrome/browser/ui/settings/cells/autofill_data_item.h"
+#import "ios/chrome/browser/ui/settings/cells/autofill_edit_item.h"
 #import "ios/chrome/browser/ui/settings/cells/native_app_item.h"
 #import "ios/chrome/browser/ui/settings/cells/sync_switch_item.h"
 #import "ios/chrome/browser/ui/settings/cells/text_and_error_item.h"
@@ -208,6 +211,10 @@
       toSectionWithIdentifier:SectionIdentifierAutofill];
   [model addItem:[self autofillItemWithAllText]
       toSectionWithIdentifier:SectionIdentifierAutofill];
+  [model addItem:[self autofillEditItem]
+      toSectionWithIdentifier:SectionIdentifierAutofill];
+  [model addItem:[self autofillEditItemWithIcon]
+      toSectionWithIdentifier:SectionIdentifierAutofill];
   [model addItem:[self cvcItem]
       toSectionWithIdentifier:SectionIdentifierAutofill];
   [model addItem:[self cvcItemWithDate]
@@ -533,6 +540,30 @@
   return item;
 }
 
+- (CollectionViewItem*)autofillEditItem {
+  AutofillEditItem* item = [[[AutofillEditItem alloc]
+      initWithType:ItemTypeAutofillDynamicHeight] autorelease];
+  item.textFieldName = @"Credit Number";
+  item.textFieldValue = @"4111111111111111";
+  item.textFieldEnabled = YES;
+  return item;
+}
+
+- (CollectionViewItem*)autofillEditItemWithIcon {
+  AutofillEditItem* item = [[[AutofillEditItem alloc]
+      initWithType:ItemTypeAutofillDynamicHeight] autorelease];
+  item.textFieldName = @"Credit Number";
+  item.textFieldValue = @"4111111111111111";
+  item.textFieldEnabled = YES;
+  int resourceID =
+      autofill::data_util::GetPaymentRequestData(autofill::kVisaCard)
+          .icon_resource_id;
+  item.cardTypeIcon =
+      ResizeImage(NativeImage(resourceID), CGSizeMake(30.0, 30.0),
+                  ProjectionMode::kAspectFillNoClipping);
+  return item;
+}
+
 - (CollectionViewItem*)cvcItem {
   CVCItem* item =
       [[[CVCItem alloc] initWithType:ItemTypeAutofillCVC] autorelease];
diff --git a/media/gpu/jpeg_decode_accelerator_unittest.cc b/media/gpu/jpeg_decode_accelerator_unittest.cc
index 00fa4f5..aa1f42d 100644
--- a/media/gpu/jpeg_decode_accelerator_unittest.cc
+++ b/media/gpu/jpeg_decode_accelerator_unittest.cc
@@ -475,7 +475,7 @@
 }
 
 TEST_F(JpegDecodeAcceleratorTest, SimpleDecode) {
-  for (const auto& image : g_env->image_data_user_) {
+  for (auto* image : g_env->image_data_user_) {
     test_image_files_.push_back(image);
     expected_status_.push_back(CS_DECODE_PASS);
   }
@@ -483,7 +483,7 @@
 }
 
 TEST_F(JpegDecodeAcceleratorTest, MultipleDecoders) {
-  for (const auto& image : g_env->image_data_user_) {
+  for (auto* image : g_env->image_data_user_) {
     test_image_files_.push_back(image);
     expected_status_.push_back(CS_DECODE_PASS);
   }
diff --git a/remoting/test/chromoting_test_driver.cc b/remoting/test/chromoting_test_driver.cc
index 1e7d73e..b75ce580 100644
--- a/remoting/test/chromoting_test_driver.cc
+++ b/remoting/test/chromoting_test_driver.cc
@@ -27,6 +27,7 @@
 const char kPinSwitchName[] = "pin";
 const char kRefreshTokenPathSwitchName[] = "refresh-token-path";
 const char kSingleProcessTestsSwitchName[] = "single-process-tests";
+const char kShowHostListSwitchName[] = "show-host-list";
 const char kTestEnvironmentSwitchName[] = "use-test-env";
 const char kUserNameSwitchName[] = "username";
 }
@@ -68,6 +69,10 @@
          switches::kUserNameSwitchName);
   printf("  %s: Specifies which host to connect to when running tests\n",
          switches::kHostNameSwitchName);
+  printf(
+      "  %s: Retrieves and displays the connection status for all known "
+      "hosts, no tests will be run\n",
+      switches::kShowHostListSwitchName);
   printf("\nOptional Parameters:\n");
   printf("  %s: Exchanged for a refresh and access token for authentication\n",
          switches::kAuthCodeSwitchName);
@@ -220,11 +225,14 @@
   options.host_name =
       command_line->GetSwitchValueASCII(switches::kHostNameSwitchName);
 
-  if (options.host_name.empty()) {
+  if (!options.host_name.empty()) {
+    VLOG(1) << "host_name: '" << options.host_name << "'";
+  } else if (command_line->HasSwitch(switches::kShowHostListSwitchName)) {
+    options.host_name = "unspecified";
+  } else {
     LOG(ERROR) << "No hostname passed in, connect to host requires hostname!";
     return -1;
   }
-  VLOG(1) << "host_name: '" << options.host_name << "'";
 
   options.host_jid =
       command_line->GetSwitchValueASCII(switches::kHostJidSwitchName);
@@ -247,14 +255,25 @@
     return -1;
   }
 
+  if (command_line->HasSwitch(switches::kShowHostListSwitchName)) {
+    // When this flag is specified, we will show the host list and exit.
+    shared_data->RefreshHostList();
+    shared_data->DisplayHostList();
+    return 0;
+  }
+
   // This method is necessary as there are occasional propagation delays in the
   // backend and we don't want the test to fail because of that.
-  if (!shared_data->WaitForHostOnline(options.host_jid, options.host_name)) {
+  if (!shared_data->WaitForHostOnline()) {
     VLOG(1) << "The expected host was not available for connections.";
     // Host is not online. No point running further tests.
     return -1;
   }
 
+  if (options.pin.empty()) {
+    LOG(WARNING) << "No PIN specified, tests may not run reliably.";
+  }
+
   // Since we've successfully set up our shared_data object, we'll assign the
   // value to our global* and transfer ownership to the framework.
   remoting::test::g_chromoting_shared_data = shared_data.release();
diff --git a/remoting/test/chromoting_test_driver_environment.cc b/remoting/test/chromoting_test_driver_environment.cc
index 356e901..2cb53d7 100644
--- a/remoting/test/chromoting_test_driver_environment.cc
+++ b/remoting/test/chromoting_test_driver_environment.cc
@@ -86,12 +86,10 @@
 }
 
 void ChromotingTestDriverEnvironment::DisplayHostList() {
-  const char kHostAvailabilityFormatString[] = "%-45s%-15s%-35s";
+  const char kHostAvailabilityFormatString[] = "%-25s%-15s%-35s\n";
 
-  LOG(INFO) << base::StringPrintf(kHostAvailabilityFormatString,
-                                  "Host Name", "Host Status", "Host JID");
-  LOG(INFO) << base::StringPrintf(kHostAvailabilityFormatString,
-                                  "---------", "-----------", "--------");
+  printf(kHostAvailabilityFormatString, "Host Name", "Host Status", "Host JID");
+  printf(kHostAvailabilityFormatString, "---------", "-----------", "--------");
 
   std::string status;
   for (const HostInfo& host_info : host_list_) {
@@ -104,31 +102,34 @@
       status = "UNKNOWN";
     }
 
-    LOG(INFO) << base::StringPrintf(
-        kHostAvailabilityFormatString, host_info.host_name.c_str(),
-        status.c_str(), host_info.host_jid.c_str());
+    printf(kHostAvailabilityFormatString, host_info.host_name.c_str(),
+           status.c_str(), host_info.host_jid.c_str());
   }
 }
 
-bool ChromotingTestDriverEnvironment::WaitForHostOnline(
-    const std::string& host_jid,
-    const std::string& host_name) {
+bool ChromotingTestDriverEnvironment::WaitForHostOnline() {
   if (host_list_.empty()) {
     RetrieveHostList();
   }
 
+  DisplayHostList();
+
   // Refresh the |host_list_| periodically to check if expected JID is online.
   const base::TimeDelta kTotalTimeInSeconds = base::TimeDelta::FromSeconds(60);
   const base::TimeDelta kSleepTimeInSeconds = base::TimeDelta::FromSeconds(5);
   const int kMaxIterations = kTotalTimeInSeconds / kSleepTimeInSeconds;
 
-  int num_iterations = 0;
-  while (num_iterations < kMaxIterations) {
+  for (int iterations = 0; iterations < kMaxIterations; iterations++) {
+    if (!FindHostInHostList()) {
+      LOG(WARNING) << "Host '" << host_name_ << "' with JID '" << host_jid_
+                   << "' not found in host list.";
+      return false;
+    }
+
     if (host_info_.IsReadyForConnection()) {
-      if (num_iterations > 0) {
+      if (iterations > 0) {
         VLOG(0) << "Host online after: "
-                << num_iterations * kSleepTimeInSeconds.InSeconds()
-                << " seconds.";
+                << iterations * kSleepTimeInSeconds.InSeconds() << " seconds.";
       }
       return true;
     }
@@ -136,14 +137,31 @@
     // Wait a while before refreshing host list.
     base::PlatformThread::Sleep(kSleepTimeInSeconds);
     RefreshHostList();
-    ++num_iterations;
   }
 
-  LOG(ERROR) << "Host with JID '" << host_jid << "' still not online after "
-             << num_iterations * kSleepTimeInSeconds.InSeconds() << " seconds.";
+  LOG(ERROR) << "Host '" << host_name_ << "' with JID '" << host_jid_
+             << "' still not online after "
+             << kMaxIterations * kSleepTimeInSeconds.InSeconds() << " seconds.";
   return false;
 }
 
+bool ChromotingTestDriverEnvironment::FindHostInHostList() {
+  bool host_found = false;
+  for (HostInfo& host_info : host_list_) {
+    // The JID is optional so we consider an empty string to be a '*' match.
+    bool host_jid_match =
+        host_jid_.empty() || (host_jid_ == host_info.host_jid);
+    bool host_name_match = host_name_ == host_info.host_name;
+
+    if (host_name_match && host_jid_match) {
+      host_info_ = host_info;
+      host_found = true;
+      break;
+    }
+  }
+  return host_found;
+}
+
 void ChromotingTestDriverEnvironment::SetAccessTokenFetcherForTest(
     AccessTokenFetcher* access_token_fetcher) {
   DCHECK(access_token_fetcher);
@@ -306,28 +324,7 @@
     return false;
   }
 
-  DisplayHostList();
-  for (HostInfo& host_info : host_list_) {
-    // The JID is optional so we consider an empty string to be a '*' match.
-    bool host_jid_match =
-        host_jid_.empty() || (host_jid_ == host_info.host_jid);
-    bool host_name_match = host_name_ == host_info.host_name;
-
-    if (host_name_match && host_jid_match) {
-      host_info_ = host_info;
-
-      if (host_info.IsReadyForConnection()) {
-        return true;
-      } else {
-        LOG(WARNING) << "Host '" << host_name_ << "' with JID '" << host_jid_
-                     << "' not online.";
-        return false;
-      }
-    }
-  }
-  LOG(WARNING) << "Host '" << host_name_ << "' with JID '" << host_jid_
-               << "' not found in host list.";
-  return false;
+  return true;
 }
 
 void ChromotingTestDriverEnvironment::OnHostListRetrieved(
diff --git a/remoting/test/chromoting_test_driver_environment.h b/remoting/test/chromoting_test_driver_environment.h
index df2cb21e..90d1134 100644
--- a/remoting/test/chromoting_test_driver_environment.h
+++ b/remoting/test/chromoting_test_driver_environment.h
@@ -49,14 +49,16 @@
   // Returns false if a valid access token cannot be retrieved.
   bool Initialize(const std::string& auth_code);
 
+  // Clears and then retrieves a new host list.
+  bool RefreshHostList();
+
   // Retrieves connection information for all known hosts and displays
   // their availability to STDOUT.
   void DisplayHostList();
 
   // Waits for either the host to come online or a maximum timeout. Returns true
-  // if host is found online.
-  bool WaitForHostOnline(const std::string& host_jid,
-                         const std::string& host_name);
+  // if host is found online and |host_info_| is valid.
+  bool WaitForHostOnline();
 
   // Used to set fake/mock objects for ChromotingTestDriverEnvironment tests.
   // The caller retains ownership of the supplied objects, and must ensure that
@@ -95,12 +97,11 @@
                               const std::string& retrieved_refresh_token);
 
   // Used to retrieve a host list from the directory service.
-  // Returns true if the request was successful, |host_list_| is valid, and
-  // |host_info_| has been set.
+  // Returns true if the request was successful and |host_list_| is valid.
   bool RetrieveHostList();
 
-  // Clears and then retrieves a new host list.
-  bool RefreshHostList();
+  // Sets |host_info_| if the requested host exists in the host list.
+  bool FindHostInHostList();
 
   // Called after the host info fetcher completes.
   void OnHostListRetrieved(base::Closure done_closure,
diff --git a/remoting/test/chromoting_test_driver_environment_unittest.cc b/remoting/test/chromoting_test_driver_environment_unittest.cc
index 843be6d..63add746 100644
--- a/remoting/test/chromoting_test_driver_environment_unittest.cc
+++ b/remoting/test/chromoting_test_driver_environment_unittest.cc
@@ -81,7 +81,8 @@
 }
 
 bool ChromotingTestDriverEnvironmentTest::RefreshHostList() {
-  return environment_object_->RefreshHostList();
+  return environment_object_->RefreshHostList() &&
+         environment_object_->FindHostInHostList();
 }
 
 HostInfo ChromotingTestDriverEnvironmentTest::CreateFakeHostInfo() {
@@ -113,9 +114,8 @@
             kFakeAccessTokenFetcherAccessTokenValue);
   EXPECT_EQ(environment_object_->host_list().size(), 0u);
 
-  // Now Retrieve the host list.
-  EXPECT_TRUE(environment_object_->WaitForHostOnline(kFakeHostJidValue,
-                                                     kFakeHostNameValue));
+  // Now retrieve the host list.
+  EXPECT_TRUE(environment_object_->WaitForHostOnline());
 
   // Should only have one host in the list.
   EXPECT_EQ(environment_object_->host_list().size(), kExpectedHostListSize);
@@ -152,9 +152,8 @@
             kFakeAccessTokenFetcherAccessTokenValue);
   EXPECT_EQ(environment_object_->host_list().size(), 0u);
 
-  // Now Retrieve the host list.
-  EXPECT_TRUE(environment_object_->WaitForHostOnline(kFakeHostJidValue,
-                                                     kFakeHostNameValue));
+  // Now retrieve the host list.
+  EXPECT_TRUE(environment_object_->WaitForHostOnline());
 
   // Should only have one host in the list.
   EXPECT_EQ(environment_object_->host_list().size(), kExpectedHostListSize);
@@ -262,7 +261,7 @@
 
   environment_object_->SetHostNameForTest(kFakeHostNameValue);
   environment_object_->SetHostJidForTest(kFakeHostJidValue);
-  EXPECT_FALSE(RefreshHostList());
+  EXPECT_TRUE(RefreshHostList());
   EXPECT_FALSE(environment_object_->host_info().IsReadyForConnection());
 }
 
diff --git a/services/ui/gpu/gpu_main.cc b/services/ui/gpu/gpu_main.cc
index bc04ac5..3e4015a 100644
--- a/services/ui/gpu/gpu_main.cc
+++ b/services/ui/gpu/gpu_main.cc
@@ -71,6 +71,7 @@
   thread_options.priority = base::ThreadPriority::DISPLAY;
 #endif
   CHECK(gpu_thread_.StartWithOptions(thread_options));
+  gpu_thread_task_runner_ = gpu_thread_.task_runner();
 
   // TODO(sad): We do not need the IO thread once gpu has a separate process. It
   // should be possible to use |main_task_runner_| for doing IO tasks.
@@ -85,11 +86,12 @@
 
   // Start the compositor thread.
   compositor_thread_.Start();
+  compositor_thread_task_runner_ = compositor_thread_.task_runner();
 }
 
 GpuMain::~GpuMain() {
   // Unretained() is OK here since the thread/task runner is owned by |this|.
-  compositor_thread_.task_runner()->PostTask(
+  compositor_thread_task_runner_->PostTask(
       FROM_HERE,
       base::Bind(&GpuMain::TearDownOnCompositorThread, base::Unretained(this)));
 
@@ -98,7 +100,7 @@
   // thread to avoid deadlock.
   compositor_thread_.Stop();
 
-  gpu_thread_.task_runner()->PostTask(
+  gpu_thread_task_runner_->PostTask(
       FROM_HERE,
       base::Bind(&GpuMain::TearDownOnGpuThread, base::Unretained(this)));
   gpu_thread_.Stop();
@@ -108,10 +110,10 @@
 void GpuMain::OnStart() {
   // |this| will outlive the gpu thread and so it's safe to use
   // base::Unretained here.
-  gpu_thread_.task_runner()->PostTask(
+  gpu_thread_task_runner_->PostTask(
       FROM_HERE,
       base::Bind(&GpuMain::InitOnGpuThread, base::Unretained(this),
-                 io_thread_.task_runner(), compositor_thread_.task_runner()));
+                 io_thread_.task_runner(), compositor_thread_task_runner_));
 }
 
 void GpuMain::CreateGpuService(mojom::GpuServiceRequest request,
@@ -119,7 +121,7 @@
                                const gpu::GpuPreferences& preferences) {
   // |this| will outlive the gpu thread and so it's safe to use
   // base::Unretained here.
-  gpu_thread_.task_runner()->PostTask(
+  gpu_thread_task_runner_->PostTask(
       FROM_HERE,
       base::Bind(&GpuMain::CreateGpuServiceOnGpuThread, base::Unretained(this),
                  base::Passed(std::move(request)),
@@ -163,7 +165,7 @@
     cc::mojom::DisplayCompositorClientPtrInfo client_info) {
   DCHECK(!gpu_command_service_);
   gpu_command_service_ = new gpu::GpuInProcessThreadService(
-      gpu_thread_.task_runner(), gpu_service_->sync_point_manager(),
+      gpu_thread_task_runner_, gpu_service_->sync_point_manager(),
       gpu_service_->mailbox_manager(), gpu_service_->share_group());
 
   // |gpu_memory_buffer_factory_| is null in tests.
@@ -174,19 +176,19 @@
   mojom::GpuServicePtr gpu_service;
   mojom::GpuServiceRequest gpu_service_request(&gpu_service);
 
-  if (gpu_thread_.task_runner()->BelongsToCurrentThread()) {
+  if (gpu_thread_task_runner_->BelongsToCurrentThread()) {
     // If the DisplayCompositor creation was delayed because GpuService
     // had not been created yet, then this is called, in gpu thread, right after
     // GpuService is created.
     BindGpuInternalOnGpuThread(std::move(gpu_service_request));
   } else {
-    gpu_thread_.task_runner()->PostTask(
+    gpu_thread_task_runner_->PostTask(
         FROM_HERE,
         base::Bind(&GpuMain::BindGpuInternalOnGpuThread, base::Unretained(this),
                    base::Passed(std::move(gpu_service_request))));
   }
 
-  compositor_thread_.task_runner()->PostTask(
+  compositor_thread_task_runner_->PostTask(
       FROM_HERE, base::Bind(&GpuMain::CreateDisplayCompositorOnCompositorThread,
                             base::Unretained(this), image_factory,
                             base::Passed(gpu_service.PassInterface()),
diff --git a/services/ui/gpu/gpu_main.h b/services/ui/gpu/gpu_main.h
index a5c859d..fb9adb49 100644
--- a/services/ui/gpu/gpu_main.h
+++ b/services/ui/gpu/gpu_main.h
@@ -86,6 +86,7 @@
 
   // The main thread for Gpu.
   base::Thread gpu_thread_;
+  scoped_refptr<base::SingleThreadTaskRunner> gpu_thread_task_runner_;
 
   // The thread that handles IO events for Gpu.
   base::Thread io_thread_;
@@ -96,6 +97,7 @@
   // and GLRenderer block on sync tokens from other command buffers. Thus,
   // the gpu service must live on a separate thread.
   base::Thread compositor_thread_;
+  scoped_refptr<base::SingleThreadTaskRunner> compositor_thread_task_runner_;
 
   mojo::Binding<mojom::GpuMain> binding_;
 
diff --git a/services/ui/public/interfaces/window_tree.mojom b/services/ui/public/interfaces/window_tree.mojom
index ab53d13..6449eb4 100644
--- a/services/ui/public/interfaces/window_tree.mojom
+++ b/services/ui/public/interfaces/window_tree.mojom
@@ -4,6 +4,7 @@
 
 module ui.mojom;
 
+import "cc/ipc/local_surface_id.mojom";
 import "cc/ipc/surface_info.mojom";
 import "cc/ipc/mojo_compositor_frame_sink.mojom";
 import "services/ui/public/interfaces/cursor.mojom";
@@ -100,8 +101,10 @@
   // Stops the pointer watcher for all events.
   StopPointerWatcher();
 
-  // Sets the specified bounds of the specified window.
-  SetWindowBounds(uint32 change_id, uint32 window_id, gfx.mojom.Rect bounds);
+  // Sets the specified bounds of the specified window. The window will paint
+  // the frame in the provided |local_frame_id|, if any.
+  SetWindowBounds(uint32 change_id, uint32 window_id, gfx.mojom.Rect bounds,
+                  cc.mojom.LocalSurfaceId? local_surface_id);
 
   // Sets the client area of the specified window. The client area is specified
   // by way of insets. Everything outside of the insets, and not in
@@ -344,10 +347,12 @@
                     int64 display_id,
                     bool parent_drawn);
 
-  // Invoked when a window's bounds have changed.
+  // Invoked when a window's bounds have changed. Only the client embedded in
+  // |window| gets a non_empty |local_surface_id|.
   OnWindowBoundsChanged(uint32 window,
                         gfx.mojom.Rect old_bounds,
-                        gfx.mojom.Rect new_bounds);
+                        gfx.mojom.Rect new_bounds,
+                        cc.mojom.LocalSurfaceId? local_surface_id);
 
   OnClientAreaChanged(uint32 window_id,
                       gfx.mojom.Insets new_client_area,
diff --git a/services/ui/ws/display.cc b/services/ui/ws/display.cc
index b3981b8..976b84c 100644
--- a/services/ui/ws/display.cc
+++ b/services/ui/ws/display.cc
@@ -258,7 +258,7 @@
       ServerWindow::Properties()));
   root_->set_event_targeting_policy(
       mojom::EventTargetingPolicy::DESCENDANTS_ONLY);
-  root_->SetBounds(gfx::Rect(size));
+  root_->SetBounds(gfx::Rect(size), allocator_.GenerateId());
   root_->SetVisible(true);
   focus_controller_ = base::MakeUnique<FocusController>(this, root_.get());
   focus_controller_->AddObserver(this);
@@ -303,9 +303,9 @@
     return;
 
   gfx::Rect new_bounds(metrics.pixel_size);
-  root_->SetBounds(new_bounds);
+  root_->SetBounds(new_bounds, allocator_.GenerateId());
   for (auto& pair : window_manager_display_root_map_)
-    pair.second->root()->SetBounds(new_bounds);
+    pair.second->root()->SetBounds(new_bounds, allocator_.GenerateId());
 }
 
 ServerWindow* Display::GetActiveRootWindow() {
diff --git a/services/ui/ws/display.h b/services/ui/ws/display.h
index 2fae94d..478f16a 100644
--- a/services/ui/ws/display.h
+++ b/services/ui/ws/display.h
@@ -14,6 +14,7 @@
 
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
+#include "cc/surfaces/local_surface_id_allocator.h"
 #include "services/ui/common/types.h"
 #include "services/ui/public/interfaces/window_manager_constants.mojom.h"
 #include "services/ui/public/interfaces/window_tree_host.mojom.h"
@@ -202,6 +203,8 @@
 
   ServerWindowTracker activation_parents_;
 
+  cc::LocalSurfaceIdAllocator allocator_;
+
   WindowManagerDisplayRootMap window_manager_display_root_map_;
 
   DISALLOW_COPY_AND_ASSIGN(Display);
diff --git a/services/ui/ws/server_window.cc b/services/ui/ws/server_window.cc
index 42bdcab..30d9116 100644
--- a/services/ui/ws/server_window.cc
+++ b/services/ui/ws/server_window.cc
@@ -172,13 +172,16 @@
   child->Reorder(children_.back(), mojom::OrderDirection::ABOVE);
 }
 
-void ServerWindow::SetBounds(const gfx::Rect& bounds) {
-  if (bounds_ == bounds)
+void ServerWindow::SetBounds(
+    const gfx::Rect& bounds,
+    const base::Optional<cc::LocalSurfaceId>& local_surface_id) {
+  if (bounds_ == bounds && current_local_surface_id_ == local_surface_id)
     return;
 
-  // TODO(fsamuel): figure out how will this work with CompositorFrames.
-
   const gfx::Rect old_bounds = bounds_;
+
+  current_local_surface_id_ = local_surface_id;
+
   bounds_ = bounds;
   for (auto& observer : observers_)
     observer.OnWindowBoundsChanged(this, old_bounds, bounds);
diff --git a/services/ui/ws/server_window.h b/services/ui/ws/server_window.h
index c600aa7..a8a9fdf 100644
--- a/services/ui/ws/server_window.h
+++ b/services/ui/ws/server_window.h
@@ -74,6 +74,10 @@
 
   const cc::FrameSinkId& frame_sink_id() const { return frame_sink_id_; }
 
+  const base::Optional<cc::LocalSurfaceId>& current_local_surface_id() const {
+    return current_local_surface_id_;
+  }
+
   void Add(ServerWindow* child);
   void Remove(ServerWindow* child);
   void Reorder(ServerWindow* relative, mojom::OrderDirection diretion);
@@ -83,7 +87,9 @@
   const gfx::Rect& bounds() const { return bounds_; }
   // Sets the bounds. If the size changes this implicitly resets the client
   // area to fill the whole bounds.
-  void SetBounds(const gfx::Rect& bounds);
+  void SetBounds(const gfx::Rect& bounds,
+                 const base::Optional<cc::LocalSurfaceId>& local_surface_id =
+                     base::nullopt);
 
   const std::vector<gfx::Rect>& additional_client_areas() const {
     return additional_client_areas_;
@@ -227,6 +233,8 @@
   ServerWindowDelegate* delegate_;
   const WindowId id_;
   cc::FrameSinkId frame_sink_id_;
+  base::Optional<cc::LocalSurfaceId> current_local_surface_id_;
+
   ServerWindow* parent_;
   Windows children_;
 
diff --git a/services/ui/ws/test_change_tracker.cc b/services/ui/ws/test_change_tracker.cc
index eb393854..172c9b8 100644
--- a/services/ui/ws/test_change_tracker.cc
+++ b/services/ui/ws/test_change_tracker.cc
@@ -60,9 +60,12 @@
 
     case CHANGE_TYPE_NODE_BOUNDS_CHANGED:
       return base::StringPrintf(
-          "BoundsChanged window=%s old_bounds=%s new_bounds=%s",
+          "BoundsChanged window=%s old_bounds=%s new_bounds=%s "
+          "local_surface_id=%s",
           WindowIdToString(change.window_id).c_str(),
-          change.bounds.ToString().c_str(), change.bounds2.ToString().c_str());
+          change.bounds.ToString().c_str(), change.bounds2.ToString().c_str(),
+          change.local_surface_id ? change.local_surface_id->ToString().c_str()
+                                  : "(none)");
 
     case CHANGE_TYPE_NODE_HIERARCHY_CHANGED:
       return base::StringPrintf(
@@ -249,14 +252,17 @@
   AddChange(change);
 }
 
-void TestChangeTracker::OnWindowBoundsChanged(Id window_id,
-                                              const gfx::Rect& old_bounds,
-                                              const gfx::Rect& new_bounds) {
+void TestChangeTracker::OnWindowBoundsChanged(
+    Id window_id,
+    const gfx::Rect& old_bounds,
+    const gfx::Rect& new_bounds,
+    const base::Optional<cc::LocalSurfaceId>& local_surface_id) {
   Change change;
   change.type = CHANGE_TYPE_NODE_BOUNDS_CHANGED;
   change.window_id = window_id;
   change.bounds = old_bounds;
   change.bounds2 = new_bounds;
+  change.local_surface_id = local_surface_id;
   AddChange(change);
 }
 
diff --git a/services/ui/ws/test_change_tracker.h b/services/ui/ws/test_change_tracker.h
index 7158f51..3421441e 100644
--- a/services/ui/ws/test_change_tracker.h
+++ b/services/ui/ws/test_change_tracker.h
@@ -77,6 +77,7 @@
   Id window_id3;
   gfx::Rect bounds;
   gfx::Rect bounds2;
+  base::Optional<cc::LocalSurfaceId> local_surface_id;
   int32_t event_action;
   bool matches_pointer_watcher;
   std::string embed_url;
@@ -144,9 +145,11 @@
   void OnCaptureChanged(Id new_capture_window_id, Id old_capture_window_id);
   void OnTransientWindowAdded(Id window_id, Id transient_window_id);
   void OnTransientWindowRemoved(Id window_id, Id transient_window_id);
-  void OnWindowBoundsChanged(Id window_id,
-                             const gfx::Rect& old_bounds,
-                             const gfx::Rect& new_bounds);
+  void OnWindowBoundsChanged(
+      Id window_id,
+      const gfx::Rect& old_bounds,
+      const gfx::Rect& new_bounds,
+      const base::Optional<cc::LocalSurfaceId>& local_surface_id);
   void OnWindowHierarchyChanged(Id window_id,
                                 Id old_parent_id,
                                 Id new_parent_id,
diff --git a/services/ui/ws/test_utils.cc b/services/ui/ws/test_utils.cc
index 23d10b7..d444e0c6 100644
--- a/services/ui/ws/test_utils.cc
+++ b/services/ui/ws/test_utils.cc
@@ -312,11 +312,13 @@
   tracker_.OnTopLevelCreated(change_id, std::move(data), drawn);
 }
 
-void TestWindowTreeClient::OnWindowBoundsChanged(uint32_t window,
-                                                 const gfx::Rect& old_bounds,
-                                                 const gfx::Rect& new_bounds) {
+void TestWindowTreeClient::OnWindowBoundsChanged(
+    uint32_t window,
+    const gfx::Rect& old_bounds,
+    const gfx::Rect& new_bounds,
+    const base::Optional<cc::LocalSurfaceId>& local_surface_id) {
   tracker_.OnWindowBoundsChanged(window, std::move(old_bounds),
-                                 std::move(new_bounds));
+                                 std::move(new_bounds), local_surface_id);
 }
 
 void TestWindowTreeClient::OnClientAreaChanged(
@@ -537,7 +539,7 @@
   EXPECT_TRUE(wm_tree->NewWindow(embed_window_id, ServerWindow::Properties()));
   EXPECT_TRUE(wm_tree->SetWindowVisibility(embed_window_id, true));
   EXPECT_TRUE(wm_tree->AddWindow(FirstRootId(wm_tree), embed_window_id));
-  display_->root_window()->SetBounds(root_window_bounds);
+  display_->root_window()->SetBounds(root_window_bounds, base::nullopt);
   mojom::WindowTreeClientPtr client;
   mojom::WindowTreeClientRequest client_request(&client);
   ws_test_helper_.window_server_delegate()->last_client()->Bind(
@@ -552,7 +554,7 @@
   EXPECT_NE(tree1, wm_tree);
   WindowTreeTestApi(tree1).set_user_id(wm_tree->user_id());
 
-  embed_window->SetBounds(window_bounds);
+  embed_window->SetBounds(window_bounds, base::nullopt);
 
   return embed_window;
 }
@@ -575,7 +577,7 @@
   tree1->GetDisplay(embed_window)->AddActivationParent(embed_window);
 
   child1->SetVisible(true);
-  child1->SetBounds(window_bounds);
+  child1->SetBounds(window_bounds, base::nullopt);
 
   TestWindowTreeClient* embed_client =
       ws_test_helper_.window_server_delegate()->last_client();
diff --git a/services/ui/ws/test_utils.h b/services/ui/ws/test_utils.h
index 7e2cb3f..aa0c3ee5 100644
--- a/services/ui/ws/test_utils.h
+++ b/services/ui/ws/test_utils.h
@@ -414,9 +414,11 @@
                          mojom::WindowDataPtr data,
                          int64_t display_id,
                          bool drawn) override;
-  void OnWindowBoundsChanged(uint32_t window,
-                             const gfx::Rect& old_bounds,
-                             const gfx::Rect& new_bounds) override;
+  void OnWindowBoundsChanged(
+      uint32_t window,
+      const gfx::Rect& old_bounds,
+      const gfx::Rect& new_bounds,
+      const base::Optional<cc::LocalSurfaceId>& local_surface_id) override;
   void OnClientAreaChanged(
       uint32_t window_id,
       const gfx::Insets& new_client_area,
diff --git a/services/ui/ws/window_finder_unittest.cc b/services/ui/ws/window_finder_unittest.cc
index 717dcd0..102057f 100644
--- a/services/ui/ws/window_finder_unittest.cc
+++ b/services/ui/ws/window_finder_unittest.cc
@@ -20,17 +20,17 @@
       mojom::EventTargetingPolicy::DESCENDANTS_ONLY);
   window_delegate.set_root_window(&root);
   root.SetVisible(true);
-  root.SetBounds(gfx::Rect(0, 0, 100, 100));
+  root.SetBounds(gfx::Rect(0, 0, 100, 100), base::nullopt);
 
   ServerWindow child1(&window_delegate, WindowId(1, 3));
   root.Add(&child1);
   child1.SetVisible(true);
-  child1.SetBounds(gfx::Rect(10, 10, 20, 20));
+  child1.SetBounds(gfx::Rect(10, 10, 20, 20), base::nullopt);
 
   ServerWindow child2(&window_delegate, WindowId(1, 4));
   root.Add(&child2);
   child2.SetVisible(true);
-  child2.SetBounds(gfx::Rect(15, 15, 20, 20));
+  child2.SetBounds(gfx::Rect(15, 15, 20, 20), base::nullopt);
 
   EXPECT_EQ(
       &child2,
@@ -56,12 +56,12 @@
   ServerWindow root(&window_delegate, WindowId(1, 2));
   window_delegate.set_root_window(&root);
   root.SetVisible(true);
-  root.SetBounds(gfx::Rect(0, 0, 100, 100));
+  root.SetBounds(gfx::Rect(0, 0, 100, 100), base::nullopt);
 
   ServerWindow child1(&window_delegate, WindowId(1, 3));
   root.Add(&child1);
   child1.SetVisible(true);
-  child1.SetBounds(gfx::Rect(10, 10, 20, 20));
+  child1.SetBounds(gfx::Rect(10, 10, 20, 20), base::nullopt);
 
   DeepestWindow result =
       FindDeepestVisibleWindowForEvents(&root, gfx::Point(13, 14));
@@ -102,12 +102,12 @@
   ServerWindow root(&window_delegate, WindowId(1, 2));
   window_delegate.set_root_window(&root);
   root.SetVisible(true);
-  root.SetBounds(gfx::Rect(0, 0, 100, 100));
+  root.SetBounds(gfx::Rect(0, 0, 100, 100), base::nullopt);
 
   ServerWindow child_with_mask(&window_delegate, WindowId(1, 4));
   root.Add(&child_with_mask);
   child_with_mask.SetVisible(true);
-  child_with_mask.SetBounds(gfx::Rect(10, 10, 20, 20));
+  child_with_mask.SetBounds(gfx::Rect(10, 10, 20, 20), base::nullopt);
   child_with_mask.SetHitTestMask(gfx::Rect(2, 2, 16, 16));
 
   // Test a point inside the window but outside the mask.
@@ -126,20 +126,20 @@
   ServerWindow root(&window_delegate, WindowId(1, 2));
   window_delegate.set_root_window(&root);
   root.SetVisible(true);
-  root.SetBounds(gfx::Rect(0, 0, 100, 100));
+  root.SetBounds(gfx::Rect(0, 0, 100, 100), base::nullopt);
 
   // Create two windows, |child1| and |child2|. The two overlap but |child2| is
   // not a valid event target.
   ServerWindow child1(&window_delegate, WindowId(1, 3));
   root.Add(&child1);
   child1.SetVisible(true);
-  child1.SetBounds(gfx::Rect(10, 10, 20, 20));
+  child1.SetBounds(gfx::Rect(10, 10, 20, 20), base::nullopt);
 
   ServerWindow child2(&window_delegate, WindowId(1, 4));
   root.Add(&child2);
   child2.set_event_targeting_policy(mojom::EventTargetingPolicy::NONE);
   child2.SetVisible(true);
-  child2.SetBounds(gfx::Rect(15, 15, 20, 20));
+  child2.SetBounds(gfx::Rect(15, 15, 20, 20), base::nullopt);
 
   // 16, 16 is over |child2| and |child1|, but as |child2| isn't a valid event
   // target |child1| should be picked.
@@ -153,7 +153,7 @@
   ServerWindow root(&window_delegate, WindowId(1, 2));
   window_delegate.set_root_window(&root);
   root.SetVisible(true);
-  root.SetBounds(gfx::Rect(0, 0, 100, 100));
+  root.SetBounds(gfx::Rect(0, 0, 100, 100), base::nullopt);
 
   // Create two windows, |child| and |child_child|; |child| is a child of the
   // root and |child_child| and child of |child|. All share the same size with
@@ -161,13 +161,13 @@
   ServerWindow child(&window_delegate, WindowId(1, 3));
   root.Add(&child);
   child.SetVisible(true);
-  child.SetBounds(gfx::Rect(0, 0, 100, 100));
+  child.SetBounds(gfx::Rect(0, 0, 100, 100), base::nullopt);
   child.SetClientArea(gfx::Insets(2, 3, 4, 5), std::vector<gfx::Rect>());
 
   ServerWindow child_child(&window_delegate, WindowId(1, 4));
   child.Add(&child_child);
   child_child.SetVisible(true);
-  child_child.SetBounds(gfx::Rect(0, 0, 100, 100));
+  child_child.SetBounds(gfx::Rect(0, 0, 100, 100), base::nullopt);
 
   // |child| was should be returned as the event is over the non-client area.
   EXPECT_EQ(&child,
diff --git a/services/ui/ws/window_manager_display_root.cc b/services/ui/ws/window_manager_display_root.cc
index 7248714..5a933de 100644
--- a/services/ui/ws/window_manager_display_root.cc
+++ b/services/ui/ws/window_manager_display_root.cc
@@ -31,7 +31,8 @@
   // Our root is always a child of the Display's root. Do this
   // before the WindowTree has been created so that the client doesn't get
   // notified of the add, bounds change and visibility change.
-  root_->SetBounds(gfx::Rect(display->root_window()->bounds().size()));
+  root_->SetBounds(gfx::Rect(display->root_window()->bounds().size()),
+                   allocator_.GenerateId());
   root_->SetVisible(true);
   display->root_window()->Add(root_.get());
 }
diff --git a/services/ui/ws/window_manager_display_root.h b/services/ui/ws/window_manager_display_root.h
index 2ba39a0..1eacb3a 100644
--- a/services/ui/ws/window_manager_display_root.h
+++ b/services/ui/ws/window_manager_display_root.h
@@ -10,6 +10,7 @@
 #include <memory>
 
 #include "base/macros.h"
+#include "cc/surfaces/local_surface_id_allocator.h"
 
 namespace ui {
 namespace ws {
@@ -49,6 +50,7 @@
   // the root ServerWindow of the Display.
   std::unique_ptr<ServerWindow> root_;
   WindowManagerState* window_manager_state_ = nullptr;
+  cc::LocalSurfaceIdAllocator allocator_;
 
   DISALLOW_COPY_AND_ASSIGN(WindowManagerDisplayRoot);
 };
diff --git a/services/ui/ws/window_server.cc b/services/ui/ws/window_server.cc
index 8bcba9b..a1a6718 100644
--- a/services/ui/ws/window_server.cc
+++ b/services/ui/ws/window_server.cc
@@ -346,12 +346,15 @@
                                              change.client_change_id, window);
 }
 
-void WindowServer::ProcessWindowBoundsChanged(const ServerWindow* window,
-                                              const gfx::Rect& old_bounds,
-                                              const gfx::Rect& new_bounds) {
+void WindowServer::ProcessWindowBoundsChanged(
+    const ServerWindow* window,
+    const gfx::Rect& old_bounds,
+    const gfx::Rect& new_bounds,
+    const base::Optional<cc::LocalSurfaceId>& local_surface_id) {
   for (auto& pair : tree_map_) {
     pair.second->ProcessWindowBoundsChanged(window, old_bounds, new_bounds,
-                                            IsOperationSource(pair.first));
+                                            IsOperationSource(pair.first),
+                                            local_surface_id);
   }
 }
 
@@ -686,7 +689,8 @@
   if (in_destructor_)
     return;
 
-  ProcessWindowBoundsChanged(window, old_bounds, new_bounds);
+  ProcessWindowBoundsChanged(window, old_bounds, new_bounds,
+                             window->current_local_surface_id());
   if (!window->parent())
     return;
 
diff --git a/services/ui/ws/window_server.h b/services/ui/ws/window_server.h
index fce14fa..2949e88c 100644
--- a/services/ui/ws/window_server.h
+++ b/services/ui/ws/window_server.h
@@ -167,9 +167,11 @@
 
   // These functions trivially delegate to all WindowTrees, which in
   // term notify their clients.
-  void ProcessWindowBoundsChanged(const ServerWindow* window,
-                                  const gfx::Rect& old_bounds,
-                                  const gfx::Rect& new_bounds);
+  void ProcessWindowBoundsChanged(
+      const ServerWindow* window,
+      const gfx::Rect& old_bounds,
+      const gfx::Rect& new_bounds,
+      const base::Optional<cc::LocalSurfaceId>& local_surface_id);
   void ProcessClientAreaChanged(
       const ServerWindow* window,
       const gfx::Insets& new_client_area,
diff --git a/services/ui/ws/window_tree.cc b/services/ui/ws/window_tree.cc
index f642e1f..ebb5bf6 100644
--- a/services/ui/ws/window_tree.cc
+++ b/services/ui/ws/window_tree.cc
@@ -548,14 +548,17 @@
   }
 }
 
-void WindowTree::ProcessWindowBoundsChanged(const ServerWindow* window,
-                                            const gfx::Rect& old_bounds,
-                                            const gfx::Rect& new_bounds,
-                                            bool originated_change) {
+void WindowTree::ProcessWindowBoundsChanged(
+    const ServerWindow* window,
+    const gfx::Rect& old_bounds,
+    const gfx::Rect& new_bounds,
+    bool originated_change,
+    const base::Optional<cc::LocalSurfaceId>& local_surface_id) {
   ClientWindowId client_window_id;
   if (originated_change || !IsWindowKnown(window, &client_window_id))
     return;
-  client()->OnWindowBoundsChanged(client_window_id.id, old_bounds, new_bounds);
+  client()->OnWindowBoundsChanged(client_window_id.id, old_bounds, new_bounds,
+                                  local_surface_id);
 }
 
 void WindowTree::ProcessClientAreaChanged(
@@ -1336,9 +1339,11 @@
   pointer_watcher_want_moves_ = false;
 }
 
-void WindowTree::SetWindowBounds(uint32_t change_id,
-                                 Id window_id,
-                                 const gfx::Rect& bounds) {
+void WindowTree::SetWindowBounds(
+    uint32_t change_id,
+    Id window_id,
+    const gfx::Rect& bounds,
+    const base::Optional<cc::LocalSurfaceId>& local_surface_id) {
   ServerWindow* window = GetWindowByClientId(ClientWindowId(window_id));
   if (window && ShouldRouteToWindowManager(window)) {
     const uint32_t wm_change_id =
@@ -1362,7 +1367,7 @@
   bool success = window && access_policy_->CanSetWindowBounds(window);
   if (success) {
     Operation op(this, window_server_, OperationType::SET_WINDOW_BOUNDS);
-    window->SetBounds(bounds);
+    window->SetBounds(bounds, local_surface_id);
   }
   client()->OnChangeCompleted(change_id, success);
 }
@@ -1974,7 +1979,8 @@
     if (!response && window) {
       // Our move loop didn't succeed, which means that we must restore the
       // original bounds of the window.
-      window->SetBounds(window_server_->GetCurrentMoveLoopRevertBounds());
+      window->SetBounds(window_server_->GetCurrentMoveLoopRevertBounds(),
+                        base::nullopt);
     }
 
     window_server_->EndMoveLoop();
diff --git a/services/ui/ws/window_tree.h b/services/ui/ws/window_tree.h
index 6fc0a96..127ec8e 100644
--- a/services/ui/ws/window_tree.h
+++ b/services/ui/ws/window_tree.h
@@ -211,10 +211,12 @@
   // The following methods are invoked after the corresponding change has been
   // processed. They do the appropriate bookkeeping and update the client as
   // necessary.
-  void ProcessWindowBoundsChanged(const ServerWindow* window,
-                                  const gfx::Rect& old_bounds,
-                                  const gfx::Rect& new_bounds,
-                                  bool originated_change);
+  void ProcessWindowBoundsChanged(
+      const ServerWindow* window,
+      const gfx::Rect& old_bounds,
+      const gfx::Rect& new_bounds,
+      bool originated_change,
+      const base::Optional<cc::LocalSurfaceId>& local_surface_id);
   void ProcessClientAreaChanged(
       const ServerWindow* window,
       const gfx::Insets& new_client_area,
@@ -402,9 +404,11 @@
   void ReleaseCapture(uint32_t change_id, Id window_id) override;
   void StartPointerWatcher(bool want_moves) override;
   void StopPointerWatcher() override;
-  void SetWindowBounds(uint32_t change_id,
-                       Id window_id,
-                       const gfx::Rect& bounds) override;
+  void SetWindowBounds(
+      uint32_t change_id,
+      Id window_id,
+      const gfx::Rect& bounds,
+      const base::Optional<cc::LocalSurfaceId>& local_surface_id) override;
   void SetWindowVisibility(uint32_t change_id,
                            Id window_id,
                            bool visible) override;
diff --git a/services/ui/ws/window_tree_client_unittest.cc b/services/ui/ws/window_tree_client_unittest.cc
index dbdbc4b..edb216a 100644
--- a/services/ui/ws/window_tree_client_unittest.cc
+++ b/services/ui/ws/window_tree_client_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
+#include "cc/surfaces/local_surface_id_allocator.h"
 #include "mojo/public/cpp/bindings/associated_binding.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
@@ -302,15 +303,18 @@
                          bool drawn) override {
     tracker()->OnTopLevelCreated(change_id, std::move(data), drawn);
   }
-  void OnWindowBoundsChanged(Id window_id,
-                             const gfx::Rect& old_bounds,
-                             const gfx::Rect& new_bounds) override {
+  void OnWindowBoundsChanged(
+      Id window_id,
+      const gfx::Rect& old_bounds,
+      const gfx::Rect& new_bounds,
+      const base::Optional<cc::LocalSurfaceId>& local_surface_id) override {
     // The bounds of the root may change during startup on Android at random
     // times. As this doesn't matter, and shouldn't impact test exepctations,
     // it is ignored.
     if (window_id == root_window_id_ && !track_root_bounds_changes_)
       return;
-    tracker()->OnWindowBoundsChanged(window_id, old_bounds, new_bounds);
+    tracker()->OnWindowBoundsChanged(window_id, old_bounds, new_bounds,
+                                     local_surface_id);
   }
   void OnClientAreaChanged(
       uint32_t window_id,
@@ -1321,17 +1325,21 @@
 
   wt_client2_->set_track_root_bounds_changes(true);
 
-  wt1()->SetWindowBounds(10, window_1_1, gfx::Rect(0, 0, 100, 100));
+  cc::LocalSurfaceIdAllocator allocator;
+  cc::LocalSurfaceId local_surface_id = allocator.GenerateId();
+  wt1()->SetWindowBounds(10, window_1_1, gfx::Rect(0, 0, 100, 100),
+                         local_surface_id);
   ASSERT_TRUE(wt_client1()->WaitForChangeCompleted(10));
 
   wt_client2_->WaitForChangeCount(1);
   EXPECT_EQ("BoundsChanged window=" + IdToString(window_1_1) +
-                " old_bounds=0,0 0x0 new_bounds=0,0 100x100",
+                " old_bounds=0,0 0x0 new_bounds=0,0 100x100 local_surface_id=" +
+                local_surface_id.ToString(),
             SingleChangeToDescription(*changes2()));
 
   // Should not be possible to change the bounds of a window created by another
   // client.
-  wt2()->SetWindowBounds(11, window_1_1, gfx::Rect(0, 0, 0, 0));
+  wt2()->SetWindowBounds(11, window_1_1, gfx::Rect(0, 0, 0, 0), base::nullopt);
   ASSERT_FALSE(wt_client2()->WaitForChangeCompleted(11));
 }
 
@@ -2068,12 +2076,14 @@
   changes1()->clear();
 
   // Change the bounds of window_2_101 and make sure server gets it.
-  wt2()->SetWindowBounds(11, window_2_101, gfx::Rect(1, 2, 3, 4));
+  wt2()->SetWindowBounds(11, window_2_101, gfx::Rect(1, 2, 3, 4),
+                         base::nullopt);
   ASSERT_TRUE(wt_client2()->WaitForChangeCompleted(11));
   wt_client1()->WaitForChangeCount(1);
-  EXPECT_EQ("BoundsChanged window=" + IdToString(window_2_101_in_ws1) +
-                " old_bounds=0,0 0x0 new_bounds=1,2 3x4",
-            SingleChangeToDescription(*changes1()));
+  EXPECT_EQ(
+      "BoundsChanged window=" + IdToString(window_2_101_in_ws1) +
+          " old_bounds=0,0 0x0 new_bounds=1,2 3x4 local_surface_id=(none)",
+      SingleChangeToDescription(*changes1()));
   changes2()->clear();
 
   // Remove 2_101 from wm, client1 should see the change.
diff --git a/skia/ext/raster_handle_allocator_win.cc b/skia/ext/raster_handle_allocator_win.cc
index 22d9bf4..fed059f 100644
--- a/skia/ext/raster_handle_allocator_win.cc
+++ b/skia/ext/raster_handle_allocator_win.cc
@@ -19,23 +19,24 @@
 
 namespace {
 
+struct HDCContextRec {
+  HDC hdc_;
+  HBITMAP prev_bitmap_;
+};
+
 static void DeleteHDCCallback(void*, void* context) {
   DCHECK_NE(context, nullptr);
-  HDC hdc = static_cast<HDC>(context);
+  const HDCContextRec* rec = static_cast<const HDCContextRec*>(context);
 
-  // We must get this before we call RestoreDC, as that will drop hbitmap and
-  // reselect the original/default bitmap.
-  HGDIOBJ hbitmap = GetCurrentObject(hdc, OBJ_BITMAP);
-  DCHECK_NE(hbitmap, nullptr);
-
-  bool success = RestoreDC(hdc, -1); // effectly performs the deselect of hbitmap
+  // Must select back in the old bitmap before we delete the hdc, and so we can
+  // recover the new_bitmap that we allocated, so we can delete it.
+  HBITMAP new_bitmap =
+      static_cast<HBITMAP>(SelectObject(rec->hdc_, rec->prev_bitmap_));
+  bool success = DeleteObject(new_bitmap);
   DCHECK(success);
-
-  // Now we are the only owner, so we can delete our bitmap
-  success = DeleteObject(hbitmap);
+  success = DeleteDC(rec->hdc_);
   DCHECK(success);
-  success = DeleteDC(hdc);
-  DCHECK(success);
+  delete rec;
 }
 
 // Allocate the layer and fill in the fields for the Rec, or return false
@@ -47,9 +48,9 @@
                    bool do_clear,
                    SkRasterHandleAllocator::Rec* rec) {
   void* pixels;
-  HBITMAP hbitmap =
+  HBITMAP new_bitmap =
       skia::CreateHBitmap(width, height, is_opaque, shared_section, &pixels);
-  if (!hbitmap) {
+  if (!new_bitmap) {
     LOG(ERROR) << "CreateHBitmap failed";
     return false;
   }
@@ -60,21 +61,16 @@
 
   HDC hdc = CreateCompatibleDC(nullptr);
   if (!hdc) {
-    DeleteObject(hbitmap);
+    DeleteObject(new_bitmap);
     return false;
   }
   SetGraphicsMode(hdc, GM_ADVANCED);
 
-  int saveIndex = SaveDC(hdc);  // so we can Restore in the delete callback
-  DCHECK_NE(saveIndex, 0);
-
-  // Be sure to select *after* we called SaveDC.
-  // Because we're using save/restore, we don't need to explicitly track the
-  // returned "previous" value.
-  SelectObject(hdc, hbitmap);
+  HBITMAP prev_bitmap = static_cast<HBITMAP>(SelectObject(hdc, new_bitmap));
+  DCHECK(prev_bitmap);
 
   rec->fReleaseProc = DeleteHDCCallback;
-  rec->fReleaseCtx = hdc;
+  rec->fReleaseCtx = new HDCContextRec{hdc, prev_bitmap};
   rec->fPixels = pixels;
   rec->fRowBytes = row_bytes;
   rec->fHandle = hdc;
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index c7e419c..3289732 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -1093,8 +1093,8 @@
             ],
             "experiments": [
                 {
-                    "name": "Enabled",
-                    "enable_features": [
+                    "name": "Control",
+                    "disable_features": [
                         "LazyParseCSS"
                     ]
                 }
diff --git a/third_party/WebKit/LayoutTests/css3/blending/background-blend-mode-data-uri-svg-image-expected.png b/third_party/WebKit/LayoutTests/css3/blending/background-blend-mode-data-uri-svg-image-expected.png
index d41d9808..dd9a170 100644
--- a/third_party/WebKit/LayoutTests/css3/blending/background-blend-mode-data-uri-svg-image-expected.png
+++ b/third_party/WebKit/LayoutTests/css3/blending/background-blend-mode-data-uri-svg-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/borders/border-mixed-alpha-expected.png b/third_party/WebKit/LayoutTests/fast/borders/border-mixed-alpha-expected.png
index 554d248e..a099959 100644
--- a/third_party/WebKit/LayoutTests/fast/borders/border-mixed-alpha-expected.png
+++ b/third_party/WebKit/LayoutTests/fast/borders/border-mixed-alpha-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/borders/border-mixed-alpha2-expected.png b/third_party/WebKit/LayoutTests/fast/borders/border-mixed-alpha2-expected.png
index 3c3aae5..aa216192 100644
--- a/third_party/WebKit/LayoutTests/fast/borders/border-mixed-alpha2-expected.png
+++ b/third_party/WebKit/LayoutTests/fast/borders/border-mixed-alpha2-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted01-expected.png b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted01-expected.png
index 04bb653..b5fcef5 100644
--- a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted01-expected.png
+++ b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted01-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted02-expected.png b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted02-expected.png
index 27a6262..94e6ced5 100644
--- a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted02-expected.png
+++ b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted02-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted03-expected.png b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted03-expected.png
index efb5edda..d384b5a 100644
--- a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted03-expected.png
+++ b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted03-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted04-expected.png b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted04-expected.png
index edc0f1c..991543c0 100644
--- a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted04-expected.png
+++ b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted04-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted05-expected.png b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted05-expected.png
index 7b2eb48..df892d3 100644
--- a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted05-expected.png
+++ b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted05-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted06-expected.png b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted06-expected.png
index a40c1f4..29a6b49f 100644
--- a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted06-expected.png
+++ b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted06-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png b/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png
index 901c2dd..ebfb8bb1 100644
--- a/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png
+++ b/third_party/WebKit/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table-cell-vertical-overflow-expected.png b/third_party/WebKit/LayoutTests/paint/invalidation/table-cell-vertical-overflow-expected.png
new file mode 100644
index 0000000..87e33894
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/paint/invalidation/table-cell-vertical-overflow-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css1/box_properties/border_style-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css1/box_properties/border_style-expected.png
index ca8e6a114..eb3fb83 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css1/box_properties/border_style-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css1/box_properties/border_style-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t0805-c5517-brdr-s-00-c-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t0805-c5517-brdr-s-00-c-expected.png
index ec92b614..c550e031c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t0805-c5517-brdr-s-00-c-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t0805-c5517-brdr-s-00-c-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-04-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-04-d-expected.png
index a1c83df..b16e102 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-04-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-04-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-14-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-14-d-expected.png
index 2e05ca1..585c6b7 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-14-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-14-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-24-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-24-d-expected.png
index 6ef24e9d..0c11227 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-24-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-24-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-34-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-34-d-expected.png
index 0d3514d0..c91ea61 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-34-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-34-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-41-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-41-d-expected.png
index 2e979d7..857f30e2 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-41-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-41-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-42-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-42-d-expected.png
index 4ce085c..ca26a4b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-42-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-42-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-43-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-43-d-expected.png
index 9ad9fa85..b22f0cac 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-43-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-43-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-44-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-44-d-expected.png
index 6c4f16e..cfdb230 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-44-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-44-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-45-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-45-d-expected.png
index 11a2c4e..6a913877 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-45-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-45-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-46-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-46-d-expected.png
index 58888e5..d2bfa3be 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-46-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-46-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-47-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-47-d-expected.png
index 8f3499e..a1b7706e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-47-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-47-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-48-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-48-d-expected.png
index 1cb892eb..00d144d2 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-48-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-48-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-49-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-49-d-expected.png
index 92868be..158993e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-49-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-49-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-54-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-54-d-expected.png
index 8e0f717..2d97670 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-54-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-54-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-64-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-64-d-expected.png
index 23d6644..eb59afd 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-64-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-64-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-74-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-74-d-expected.png
index 1ace87a0..061322e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-74-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-74-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-84-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-84-d-expected.png
index 26cadcdd..d1de84d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-84-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-84-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-94-d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-94-d-expected.png
index 0ccb7d7..06e9e90 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-94-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t170602-bdr-conflct-w-94-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-mixed-alpha-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-mixed-alpha-expected.png
index 31bc9f4..1c4bf784 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-mixed-alpha-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-mixed-alpha-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-mixed-alpha2-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-mixed-alpha2-expected.png
index 3fe1f68f..2c1bbc1 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-mixed-alpha2-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-mixed-alpha2-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/borderRadiusAllStylesAllCorners-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/borderRadiusAllStylesAllCorners-expected.png
index 70aa9d769..30a76bf 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/borderRadiusAllStylesAllCorners-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/borderRadiusAllStylesAllCorners-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/outline-alpha-block-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/outline-alpha-block-expected.png
index d4a8ff3..f45948a7 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/outline-alpha-block-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/outline-alpha-block-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/outline-alpha-inline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/outline-alpha-inline-expected.png
index 46c6f7e..fbae8eba3 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/outline-alpha-inline-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/outline-alpha-inline-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/box-shadow/inset-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/box-shadow/inset-expected.png
index 187631e..a76e50c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/box-shadow/inset-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/box-shadow/inset-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/box-shadow/inset-subpixel-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/box-shadow/inset-subpixel-expected.png
index c71abde..2b758aa4 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/box-shadow/inset-subpixel-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/box-shadow/inset-subpixel-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png
index 4c58378..880ccd3 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/layers/opacity-outline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/layers/opacity-outline-expected.png
index 3c77136..ebea94f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/layers/opacity-outline-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/layers/opacity-outline-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/overflow/overflow-with-local-background-attachment-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/overflow/overflow-with-local-background-attachment-expected.png
index c2c4907..5b50328 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/overflow/overflow-with-local-background-attachment-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/overflow/overflow-with-local-background-attachment-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-cell-collapsed-border-expected.png
index cac3666..4f2088e9 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-cell-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-cell-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-cell-expected.png
index c349ed9..7d8d82e7 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-cell-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-cell-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-collapsed-border-expected.png
index 148c8fa6e..1ce32b1a 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-collapsed-border-expected.png
index e388fc87..73a88d78 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-expected.png
index 3a332b2..4e418a0 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-group-collapsed-border-expected.png
index 483126f..8a45686 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-group-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-group-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-group-expected.png
index 67afd0d..1b31819 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-expected.png
index dee4155..d3612ae 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-quirks-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-quirks-collapsed-border-expected.png
index 6b00a3ef..8317788 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-quirks-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-quirks-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-quirks-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-quirks-expected.png
index e91838df..6a9675b1 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-quirks-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-quirks-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-collapsed-border-expected.png
index f75f54e8..b095342 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-expected.png
index 23628318..2910998 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-group-collapsed-border-expected.png
index 48b0d21..506c540 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-group-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-group-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-group-expected.png
index 77de645..4cb982cf 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-hide-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-hide-collapsed-border-expected.png
index 5c885906..16f29cae 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-hide-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-hide-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-hide-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-hide-expected.png
index 3cbdea6..9efc8dc 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-hide-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-hide-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-cell-collapsed-border-expected.png
index e078d4a..346091d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-cell-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-cell-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-cell-expected.png
index d366ef6..c2f90a5 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-cell-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-cell-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-collapsed-border-expected.png
index f3dd6a45..f54398b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-collapsed-border-expected.png
index f8b0aa62..e342e671 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-expected.png
index f8cf68f4..a42a5ad 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-group-collapsed-border-expected.png
index e9acf9f..ca43f93 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-group-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-group-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-group-expected.png
index 071f73a..f8d4445c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-expected.png
index 3da3ad22..2cb5468 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-collapsed-border-expected.png
index 889b297a..003e000 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-expected.png
index 2e3e7b1b..5cb255d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-group-collapsed-border-expected.png
index d71a473..16806d00a 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-group-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-group-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-group-expected.png
index 4559904..a85b30c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-cell-collapsed-border-expected.png
index 0f806a0..aaac313 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-cell-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-cell-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-cell-expected.png
index edd618c4..a41d6f7 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-cell-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-cell-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-collapsed-border-expected.png
index 654a55f4..6fd8573 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-collapsed-border-expected.png
index 1a5657d..1124fc8 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-expected.png
index 68191ed..4d19843 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png
index 2e2a956..a79f8dd 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-group-expected.png
index cf9e768..64fc2c6d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-expected.png
index e2d4b97..2709293f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-collapsed-border-expected.png
index 49c6f17..b989e6aa0 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-expected.png
index 9dce23d..1134642 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png
index 9137e4c9..97e6af9 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-group-expected.png
index e6c5275..4b033b62 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/001-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/001-expected.png
index ed56511..13746729 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/001-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/001-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/001-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/001-vertical-expected.png
index fadc2863..f25c3842 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/001-vertical-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/001-vertical-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/ietestcenter/css3/bordersbackgrounds/border-radius-style-001-expected.png b/third_party/WebKit/LayoutTests/platform/linux/ietestcenter/css3/bordersbackgrounds/border-radius-style-001-expected.png
index 5ea28b0..195cb05a 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/ietestcenter/css3/bordersbackgrounds/border-radius-style-001-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/ietestcenter/css3/bordersbackgrounds/border-radius-style-001-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png b/third_party/WebKit/LayoutTests/platform/linux/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png
index e87a6e0f..e910926 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/layer-child-outline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/layer-child-outline-expected.png
index 03125f8..ebc25c2 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/layer-child-outline-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/layer-child-outline-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/no-inherited-dashed-stroke-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/no-inherited-dashed-stroke-expected.png
index 305a10f..96230150 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/no-inherited-dashed-stroke-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/no-inherited-dashed-stroke-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png
index 563bc900..b6e64adc 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png
index 03125f8..ebc25c2 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/box_properties/border_style-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/box_properties/border_style-expected.png
new file mode 100644
index 0000000..eb3fb83
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/box_properties/border_style-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/css1/box_properties/border_style-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/css1/box_properties/border_style-expected.png
index d103c556..0d2bf63 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/css1/box_properties/border_style-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/css1/box_properties/border_style-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-cell-collapsed-border-expected.png
index 4bbfb61..265f173 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-cell-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-cell-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-cell-expected.png
index c5b225de..73b2cb3e 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-cell-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-cell-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-collapsed-border-expected.png
index 1b2bf4d8..875000ef 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-collapsed-border-expected.png
index 991ba5bf..19ef114 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-expected.png
index c9947f8..1524657 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-group-collapsed-border-expected.png
index c91a474..54703d0 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-group-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-group-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-group-expected.png
index d2da6a7a..c86255b 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-column-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-expected.png
index 97c2c350..f301a7c 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-quirks-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-quirks-collapsed-border-expected.png
index b636956..1b91f95c 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-quirks-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-quirks-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-quirks-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-quirks-expected.png
index acd701d9..c718c94 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-quirks-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-quirks-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-collapsed-border-expected.png
index ec08b8d..683ac556 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-expected.png
index b6f500e..1e3c368 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-group-collapsed-border-expected.png
index 704ad035..1af82603 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-group-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-group-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-group-expected.png
index 653682f..19884ac 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_border-table-row-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_layers-hide-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_layers-hide-collapsed-border-expected.png
index 16a66be..5d5273b 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_layers-hide-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_layers-hide-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_layers-hide-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_layers-hide-expected.png
index 5785c54..9e4950d 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_layers-hide-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_layers-hide-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-cell-collapsed-border-expected.png
index c756d37..aeafadd 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-cell-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-cell-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-cell-expected.png
index 068afc0..b2e2f876 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-cell-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-cell-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-collapsed-border-expected.png
index aa585755..16f7de5 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-collapsed-border-expected.png
index 57143aab..6e91128b 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-expected.png
index 33e1bec..b107d0c 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-group-collapsed-border-expected.png
index a034446..b7be808 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-group-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-group-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-group-expected.png
index d1c2b480..03dcdaa 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-column-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-expected.png
index 8986885..93c5578d 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-collapsed-border-expected.png
index 1633403..ab214f3b 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-expected.png
index 52bfc05d..30b3b4a3 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-group-collapsed-border-expected.png
index 1fb1395..c66265c 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-group-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-group-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-group-expected.png
index 118fafe9..656c08e8 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_position-table-row-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-cell-collapsed-border-expected.png
index 867aee1..52df295c 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-cell-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-cell-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-cell-expected.png
index 104af65..017fb331 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-cell-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-cell-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-collapsed-border-expected.png
index b9f12c3..0dfd327 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-collapsed-border-expected.png
index 426fe1e..c2aa3d8c 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-expected.png
index 8c76cfd5..8c0f1cd0 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png
index 17be6e4..3760da9 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-group-expected.png
index c431008b..3907118 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-column-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-expected.png
index 2ea6701b..04d94cd 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-collapsed-border-expected.png
index 5b1421d..1fae286 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-expected.png
index 36012dd..4f2d1d8 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png
index a6f3e52..8b103e5 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-group-expected.png
index dc795f3..c36d7d9 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/table/backgr_simple-table-row-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png
index ef8ce75..419f766 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/mojo-loading/css1/box_properties/border_style-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/mojo-loading/css1/box_properties/border_style-expected.png
new file mode 100644
index 0000000..0d2bf63
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/mojo-loading/css1/box_properties/border_style-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/compositing/overflow/border-radius-styles-with-composited-child-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/compositing/overflow/border-radius-styles-with-composited-child-expected.png
new file mode 100644
index 0000000..4dda4ab
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/compositing/overflow/border-radius-styles-with-composited-child-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusAllStylesAllCorners-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusAllStylesAllCorners-expected.png
new file mode 100644
index 0000000..78310ca
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusAllStylesAllCorners-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed01-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed01-expected.png
new file mode 100644
index 0000000..cfc557f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed01-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed02-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed02-expected.png
new file mode 100644
index 0000000..24f0ce3a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed02-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed03-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed03-expected.png
new file mode 100644
index 0000000..dd29cce
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed03-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed04-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed04-expected.png
new file mode 100644
index 0000000..50f367a5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed04-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed05-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed05-expected.png
new file mode 100644
index 0000000..d9ac765
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed05-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed06-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed06-expected.png
new file mode 100644
index 0000000..06e8f66
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed06-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDotted01-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDotted01-expected.png
new file mode 100644
index 0000000..e60883c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDotted01-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDotted04-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDotted04-expected.png
new file mode 100644
index 0000000..ed9ed195
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDotted04-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/box-shadow/inset-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/box-shadow/inset-expected.png
new file mode 100644
index 0000000..ee304d5f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/box-shadow/inset-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/box-shadow/inset-subpixel-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/box-shadow/inset-subpixel-expected.png
new file mode 100644
index 0000000..d9ce72b3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/box-shadow/inset-subpixel-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/ietestcenter/css3/bordersbackgrounds/border-radius-style-001-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/ietestcenter/css3/bordersbackgrounds/border-radius-style-001-expected.png
new file mode 100644
index 0000000..dade1ad4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/ietestcenter/css3/bordersbackgrounds/border-radius-style-001-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png
new file mode 100644
index 0000000..3741297
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-styles-with-composited-child-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-styles-with-composited-child-expected.png
new file mode 100644
index 0000000..4dda4ab
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-styles-with-composited-child-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/css1/box_properties/border_style-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/css1/box_properties/border_style-expected.png
index 3544bd9e..704158d 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/css1/box_properties/border_style-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/css1/box_properties/border_style-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/overflow/overflow-with-local-background-attachment-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/overflow/overflow-with-local-background-attachment-expected.png
index 098ae866..a686ade 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/overflow/overflow-with-local-background-attachment-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/overflow/overflow-with-local-background-attachment-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-cell-collapsed-border-expected.png
index 1045a33..8c8d31f 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-cell-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-cell-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-cell-expected.png
index ed3597ba..474fc6c 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-cell-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-cell-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-collapsed-border-expected.png
index bf67ce4..2b368ea3 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-expected.png
index b7c44dd..11b3cfd 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-group-collapsed-border-expected.png
index 20a416f..9937402 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-group-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-group-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-group-expected.png
index 3eed2112..d4915ae 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-column-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-expected.png
index 6654227..0db2fcd 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-collapsed-border-expected.png
index 67b1987..958fe07 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-expected.png
index c7d8515..cf72fcd 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-group-collapsed-border-expected.png
index a2bd2bd0..5f96ab8 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-group-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-group-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-group-expected.png
index 7e2fbee8..68195dc 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_border-table-row-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_layers-hide-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_layers-hide-expected.png
index 4b5327e..48c1130 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_layers-hide-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_layers-hide-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-cell-collapsed-border-expected.png
index 553c171..c7be85c 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-cell-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-cell-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-cell-expected.png
index 7a7810d..c3ab278 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-cell-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-cell-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-collapsed-border-expected.png
index f460de8..9b5bae3 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-expected.png
index 85c573b..713524e 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-group-collapsed-border-expected.png
index e49cf75..14ffce5 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-group-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-group-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-group-expected.png
index 844b07dd..5293e7b 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-column-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-collapsed-border-expected.png
index a9a6454..9aa02d8 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-expected.png
index 29529b57..31af6bb 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-group-collapsed-border-expected.png
index 1e5123b1..ce7a74c 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-group-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-group-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-group-expected.png
index 894d3ef..0b90384f 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_position-table-row-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-cell-collapsed-border-expected.png
index 094beb62..05c4400 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-cell-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-cell-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-cell-expected.png
index 06d918c..95b4b83 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-cell-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-cell-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-collapsed-border-expected.png
index 4398428..529f735 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-collapsed-border-expected.png
index 6cffd7e..ae35c90 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-expected.png
index 2c309b9a..338e328 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png
index 6879c80..87d38e45 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-group-expected.png
index 7e95424..71f83030 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-column-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-expected.png
index 39bdb26..d31b08f 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-collapsed-border-expected.png
index 3b8d73a..a04f6494 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-expected.png
index c59ff9b..100c14a3 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png
index 9aa9152..bcaf9f0 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-group-expected.png
index 40dac59..56906a91 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/table/backgr_simple-table-row-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png
index d2fec69..4d22418 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/mojo-loading/css1/box_properties/border_style-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/mojo-loading/css1/box_properties/border_style-expected.png
new file mode 100644
index 0000000..704158d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/mojo-loading/css1/box_properties/border_style-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/compositing/overflow/border-radius-styles-with-composited-child-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/compositing/overflow/border-radius-styles-with-composited-child-expected.png
new file mode 100644
index 0000000..4dda4ab
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-retina/compositing/overflow/border-radius-styles-with-composited-child-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusAllStylesAllCorners-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusAllStylesAllCorners-expected.png
new file mode 100644
index 0000000..78310ca
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusAllStylesAllCorners-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed01-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed01-expected.png
new file mode 100644
index 0000000..cfc557f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed01-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed02-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed02-expected.png
new file mode 100644
index 0000000..24f0ce3a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed02-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed03-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed03-expected.png
new file mode 100644
index 0000000..dd29cce
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed03-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed04-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed04-expected.png
new file mode 100644
index 0000000..50f367a5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed04-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed05-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed05-expected.png
new file mode 100644
index 0000000..d9ac765
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed05-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed06-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed06-expected.png
new file mode 100644
index 0000000..06e8f66
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed06-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDotted01-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDotted01-expected.png
new file mode 100644
index 0000000..e60883c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDotted01-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDotted04-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDotted04-expected.png
new file mode 100644
index 0000000..ed9ed195
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDotted04-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/box-shadow/inset-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/box-shadow/inset-expected.png
new file mode 100644
index 0000000..ee304d5f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/box-shadow/inset-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/box-shadow/inset-subpixel-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/box-shadow/inset-subpixel-expected.png
new file mode 100644
index 0000000..d9ce72b3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/box-shadow/inset-subpixel-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/ietestcenter/css3/bordersbackgrounds/border-radius-style-001-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/ietestcenter/css3/bordersbackgrounds/border-radius-style-001-expected.png
new file mode 100644
index 0000000..dade1ad4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-retina/ietestcenter/css3/bordersbackgrounds/border-radius-style-001-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png
new file mode 100644
index 0000000..3741297
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-retina/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-styles-with-composited-child-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-styles-with-composited-child-expected.png
new file mode 100644
index 0000000..4dda4ab
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-styles-with-composited-child-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css1/box_properties/border_style-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css1/box_properties/border_style-expected.png
index 41956c2..ade8054 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/css1/box_properties/border_style-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/css1/box_properties/border_style-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t0805-c5517-brdr-s-00-c-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t0805-c5517-brdr-s-00-c-expected.png
index 74059e1..68d490b 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t0805-c5517-brdr-s-00-c-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t0805-c5517-brdr-s-00-c-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-04-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-04-d-expected.png
index 9876199..ec4533e5 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-04-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-04-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-14-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-14-d-expected.png
index 76a2716..f103a27 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-14-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-14-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-24-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-24-d-expected.png
index 398932a..59bf8d7 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-24-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-24-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-34-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-34-d-expected.png
index c4b63ac..609bb48 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-34-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-34-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-41-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-41-d-expected.png
index 2301268f..251af43 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-41-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-41-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-42-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-42-d-expected.png
index c8a85f0..dcb4a4c1 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-42-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-42-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-43-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-43-d-expected.png
index 429dc82..21c1b3e2 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-43-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-43-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-44-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-44-d-expected.png
index 830ce4d..e29d9ac 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-44-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-44-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-45-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-45-d-expected.png
index 2b29906..abb0165 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-45-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-45-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-46-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-46-d-expected.png
index d1e5a01..f28aef4 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-46-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-46-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-47-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-47-d-expected.png
index 25a7c53..ab7e7b8 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-47-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-47-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-48-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-48-d-expected.png
index 11698b4..8437d7b 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-48-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-48-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-49-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-49-d-expected.png
index 68e64d59..e508e18a 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-49-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-49-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-54-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-54-d-expected.png
index 019a088..c816650 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-54-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-54-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-64-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-64-d-expected.png
index 8ccd571..d4665c7 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-64-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-64-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-74-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-74-d-expected.png
index 53d4524..2b09780 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-74-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-74-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-84-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-84-d-expected.png
index aeb8ac49..614eaa0 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-84-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-84-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-94-d-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-94-d-expected.png
index 1e1e7a1a..f8f7d9b 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-94-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/css2.1/t170602-bdr-conflct-w-94-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/borders/borderRadiusAllStylesAllCorners-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/borders/borderRadiusAllStylesAllCorners-expected.png
index 039dba9..c8700a7 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/borders/borderRadiusAllStylesAllCorners-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/borders/borderRadiusAllStylesAllCorners-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/borders/outline-alpha-block-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/borders/outline-alpha-block-expected.png
index 5f9f515..e2ad331 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/borders/outline-alpha-block-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/borders/outline-alpha-block-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/borders/outline-alpha-inline-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/borders/outline-alpha-inline-expected.png
index 62db17a2..795df42c 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/borders/outline-alpha-inline-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/borders/outline-alpha-inline-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/layers/opacity-outline-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/layers/opacity-outline-expected.png
index 2c5f1a9..713e8503 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/layers/opacity-outline-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/layers/opacity-outline-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/overflow-with-local-background-attachment-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/overflow-with-local-background-attachment-expected.png
index c68d1d47..a7e124c 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/overflow-with-local-background-attachment-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/overflow-with-local-background-attachment-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-cell-collapsed-border-expected.png
index fab80b5..c5bc6c2 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-cell-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-cell-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-cell-expected.png
index de54438f..d6a6512 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-cell-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-cell-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-collapsed-border-expected.png
index b86ae61..02d2b110 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-collapsed-border-expected.png
index 7dcb611..9f1ee845 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-expected.png
index eaf2d2e1..77fdce6 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-group-collapsed-border-expected.png
index 4285920..975b8d03 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-group-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-group-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-group-expected.png
index 59a5db8e..65acf813 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-expected.png
index c39693a..202652bb 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-quirks-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-quirks-collapsed-border-expected.png
index 4d33c01..523fe9e 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-quirks-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-quirks-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-quirks-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-quirks-expected.png
index 2880f09..fe0322f 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-quirks-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-quirks-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-collapsed-border-expected.png
index ed07ff1..4891242 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-expected.png
index 620b0cf..261f23e 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-group-collapsed-border-expected.png
index 8a2cdd5..7df742e 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-group-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-group-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-group-expected.png
index 1b9db53..d8eb459 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_layers-hide-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_layers-hide-collapsed-border-expected.png
index 64a186f..abf36394 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_layers-hide-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_layers-hide-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_layers-hide-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_layers-hide-expected.png
index 2b8e2b3..b91877f 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_layers-hide-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_layers-hide-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-cell-collapsed-border-expected.png
index abe4753..a9b0063 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-cell-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-cell-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-cell-expected.png
index cd87e477..19c3ffde 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-cell-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-cell-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-collapsed-border-expected.png
index a882d703..f242a6c 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-collapsed-border-expected.png
index f64d8ea..5e37186d 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-expected.png
index 2c543f9f..445938af4 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-group-collapsed-border-expected.png
index 95aeea4..db47f1bc 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-group-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-group-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-group-expected.png
index ef1502c..545922f 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-expected.png
index 79e773e..7cb9d4c 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-collapsed-border-expected.png
index fe96405..5a6c7f31 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-expected.png
index 09640fe8..782e5e0 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-group-collapsed-border-expected.png
index cbde8c2..0c5d6965 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-group-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-group-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-group-expected.png
index 1c0ce1e..35d05f7 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-cell-collapsed-border-expected.png
index c2faf54..7784140e 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-cell-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-cell-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-cell-expected.png
index 73c740d..463591e 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-cell-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-cell-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-collapsed-border-expected.png
index 4cf080d2c..186b07b 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-collapsed-border-expected.png
index 6b9143a..9a151a5 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-expected.png
index 543042c..1d4af9b2 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png
index 81456061..b7f45d0 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-group-expected.png
index 7cec1d8..aa3ac26 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-expected.png
index 024b62f..96f9663 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-collapsed-border-expected.png
index b4aa2f4..bd5aecd 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-expected.png
index 7a75624..f258886 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png
index d8ae2f6..f25bdad 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-group-expected.png
index 89fca61..cea8c892 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/001-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/001-expected.png
index ba5b13d8..45823dc 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/001-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/001-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/001-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/001-vertical-expected.png
index 5553778..4596775 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/001-vertical-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/001-vertical-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/ietestcenter/css3/bordersbackgrounds/border-radius-style-001-expected.png b/third_party/WebKit/LayoutTests/platform/mac/ietestcenter/css3/bordersbackgrounds/border-radius-style-001-expected.png
index f6f7dbf4..9483302 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/ietestcenter/css3/bordersbackgrounds/border-radius-style-001-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/ietestcenter/css3/bordersbackgrounds/border-radius-style-001-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layer-child-outline-expected.png b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layer-child-outline-expected.png
index 88e00e59..d15a3d63 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layer-child-outline-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layer-child-outline-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table-cell-vertical-overflow-expected.png b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table-cell-vertical-overflow-expected.png
deleted file mode 100644
index fc96e112..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table-cell-vertical-overflow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/no-inherited-dashed-stroke-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/no-inherited-dashed-stroke-expected.png
index db05196..ed297e6b 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/no-inherited-dashed-stroke-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/no-inherited-dashed-stroke-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png b/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png
index a62c20d..20d9f95 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png
index 88e00e59..d15a3d63 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/css1/box_properties/border_style-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/css1/box_properties/border_style-expected.png
new file mode 100644
index 0000000..ade8054
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/css1/box_properties/border_style-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/border-radius-styles-with-composited-child-expected.png b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/border-radius-styles-with-composited-child-expected.png
new file mode 100644
index 0000000..4dda4ab
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/border-radius-styles-with-composited-child-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css1/box_properties/border_style-expected.png b/third_party/WebKit/LayoutTests/platform/win/css1/box_properties/border_style-expected.png
index 3cec260..c7145a3 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css1/box_properties/border_style-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/css1/box_properties/border_style-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t0805-c5517-brdr-s-00-c-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t0805-c5517-brdr-s-00-c-expected.png
index 3cca8f3..665b34b 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t0805-c5517-brdr-s-00-c-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t0805-c5517-brdr-s-00-c-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-04-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-04-d-expected.png
index 44fb330..a9c62f8 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-04-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-04-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-14-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-14-d-expected.png
index e80b0a6..f8ed37a 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-14-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-14-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-24-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-24-d-expected.png
index 2465f3c..7644f56 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-24-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-24-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-34-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-34-d-expected.png
index 9d652f5..b28f5667 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-34-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-34-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-41-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-41-d-expected.png
index f51fa31..a5f2827b 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-41-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-41-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-42-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-42-d-expected.png
index 1c66a94..3982111 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-42-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-42-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-43-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-43-d-expected.png
index 6348ffa..7a2479c 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-43-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-43-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-44-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-44-d-expected.png
index b0c83210..dd40861 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-44-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-44-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-45-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-45-d-expected.png
index 78c81c3d..6504a56 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-45-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-45-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-46-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-46-d-expected.png
index 1eed2b5..d6867d49 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-46-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-46-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-47-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-47-d-expected.png
index 5e6b96a..fa9eaeac 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-47-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-47-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-48-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-48-d-expected.png
index 66357e9c..ca2613b0 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-48-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-48-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-49-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-49-d-expected.png
index 6cfdf89..e9abae3b 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-49-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-49-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-54-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-54-d-expected.png
index cddb39e..31bcac2 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-54-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-54-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-64-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-64-d-expected.png
index f918cc1..d3859b12 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-64-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-64-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-74-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-74-d-expected.png
index 335e7bf..a10669e 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-74-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-74-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-84-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-84-d-expected.png
index 839fc2f..030b765 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-84-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-84-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-94-d-expected.png b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-94-d-expected.png
index 45ddea16..c6f18a0 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-94-d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/css2.1/t170602-bdr-conflct-w-94-d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusAllStylesAllCorners-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusAllStylesAllCorners-expected.png
index 9f61ecb..abfe4f76 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusAllStylesAllCorners-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusAllStylesAllCorners-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed01-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed01-expected.png
new file mode 100644
index 0000000..cfc557f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed01-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed02-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed02-expected.png
new file mode 100644
index 0000000..24f0ce3a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed02-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed03-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed03-expected.png
new file mode 100644
index 0000000..dd29cce
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed03-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed04-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed04-expected.png
new file mode 100644
index 0000000..50f367a5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed04-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed05-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed05-expected.png
new file mode 100644
index 0000000..d9ac765
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed05-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed06-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed06-expected.png
new file mode 100644
index 0000000..06e8f66
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed06-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDotted01-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDotted01-expected.png
new file mode 100644
index 0000000..e60883c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDotted01-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDotted04-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDotted04-expected.png
new file mode 100644
index 0000000..ed9ed195
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDotted04-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/outline-alpha-block-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/outline-alpha-block-expected.png
index d70a664b..c787adac 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/borders/outline-alpha-block-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/borders/outline-alpha-block-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/outline-alpha-inline-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/outline-alpha-inline-expected.png
index 52d1931..8bcd321 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/borders/outline-alpha-inline-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/borders/outline-alpha-inline-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/box-shadow/inset-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/box-shadow/inset-expected.png
index 550ca8cc..d127e00 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/box-shadow/inset-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/box-shadow/inset-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/box-shadow/inset-subpixel-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/box-shadow/inset-subpixel-expected.png
index c45040a..251b561 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/box-shadow/inset-subpixel-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/box-shadow/inset-subpixel-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/layers/opacity-outline-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/layers/opacity-outline-expected.png
index 27064d7..aa2fa4d 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/layers/opacity-outline-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/layers/opacity-outline-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/overflow/overflow-with-local-background-attachment-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/overflow/overflow-with-local-background-attachment-expected.png
index 7092ff5..ffb1dc0 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/overflow/overflow-with-local-background-attachment-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/overflow/overflow-with-local-background-attachment-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/001-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/001-expected.png
index 09c81c7..a1d0ee97 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/001-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/001-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/001-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/001-vertical-expected.png
index c0855d9..a5c1f0c 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/001-vertical-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/001-vertical-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/ietestcenter/css3/bordersbackgrounds/border-radius-style-001-expected.png b/third_party/WebKit/LayoutTests/platform/win/ietestcenter/css3/bordersbackgrounds/border-radius-style-001-expected.png
index 0d770620..11af621 100644
--- a/third_party/WebKit/LayoutTests/platform/win/ietestcenter/css3/bordersbackgrounds/border-radius-style-001-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/ietestcenter/css3/bordersbackgrounds/border-radius-style-001-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png b/third_party/WebKit/LayoutTests/platform/win/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png
index 4afe4e8..858e02d 100644
--- a/third_party/WebKit/LayoutTests/platform/win/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/ietestcenter/css3/bordersbackgrounds/border-radius-style-002-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layer-child-outline-expected.png b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layer-child-outline-expected.png
index c98b5433..7344b8d 100644
--- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layer-child-outline-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layer-child-outline-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table-cell-vertical-overflow-expected.png b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table-cell-vertical-overflow-expected.png
deleted file mode 100644
index 870cfc83..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table-cell-vertical-overflow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/custom/no-inherited-dashed-stroke-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/custom/no-inherited-dashed-stroke-expected.png
index 42913617..e22ab81 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/custom/no-inherited-dashed-stroke-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/custom/no-inherited-dashed-stroke-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png b/third_party/WebKit/LayoutTests/platform/win/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png
index 20645fd9..a3f7fea 100644
--- a/third_party/WebKit/LayoutTests/platform/win/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png
index c98b5433..7344b8d 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/mojo-loading/css1/box_properties/border_style-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/mojo-loading/css1/box_properties/border_style-expected.png
new file mode 100644
index 0000000..c7145a3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/mojo-loading/css1/box_properties/border_style-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-styles-with-composited-child-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-styles-with-composited-child-expected.png
new file mode 100644
index 0000000..4dda4ab
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-styles-with-composited-child-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png b/third_party/WebKit/LayoutTests/platform/win7/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png
index 6e9e165..abe417d 100644
--- a/third_party/WebKit/LayoutTests/platform/win7/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win7/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png
Binary files differ
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScheduledAction.cpp b/third_party/WebKit/Source/bindings/core/v8/ScheduledAction.cpp
index 1f40c6b..c889703 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ScheduledAction.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/ScheduledAction.cpp
@@ -40,6 +40,7 @@
 #include "core/dom/Document.h"
 #include "core/dom/ExecutionContext.h"
 #include "core/frame/LocalFrame.h"
+#include "core/frame/UseCounter.h"
 #include "core/workers/WorkerGlobalScope.h"
 #include "core/workers/WorkerThread.h"
 #include "platform/instrumentation/tracing/TraceEvent.h"
@@ -52,9 +53,13 @@
                                          const Vector<ScriptValue>& arguments) {
   ASSERT(handler.isFunction());
   if (!scriptState->world().isWorkerWorld()) {
-    DCHECK(BindingSecurity::shouldAllowAccessToFrame(
-        enteredDOMWindow(scriptState->isolate()), toDocument(target)->frame(),
-        BindingSecurity::ErrorReportOption::DoNotReport));
+    if (!BindingSecurity::shouldAllowAccessToFrame(
+            enteredOrMicrotaskDOMWindow(scriptState->isolate()),
+            toDocument(target)->frame(),
+            BindingSecurity::ErrorReportOption::DoNotReport)) {
+      UseCounter::count(target, UseCounter::ScheduledActionIgnored);
+      return new ScheduledAction(scriptState);
+    }
   }
   return new ScheduledAction(scriptState, handler, arguments);
 }
@@ -63,9 +68,13 @@
                                          ExecutionContext* target,
                                          const String& handler) {
   if (!scriptState->world().isWorkerWorld()) {
-    DCHECK(BindingSecurity::shouldAllowAccessToFrame(
-        enteredDOMWindow(scriptState->isolate()), toDocument(target)->frame(),
-        BindingSecurity::ErrorReportOption::DoNotReport));
+    if (!BindingSecurity::shouldAllowAccessToFrame(
+            enteredOrMicrotaskDOMWindow(scriptState->isolate()),
+            toDocument(target)->frame(),
+            BindingSecurity::ErrorReportOption::DoNotReport)) {
+      UseCounter::count(target, UseCounter::ScheduledActionIgnored);
+      return new ScheduledAction(scriptState);
+    }
   }
   return new ScheduledAction(scriptState, handler);
 }
@@ -124,6 +133,11 @@
       m_info(scriptState->isolate()),
       m_code(code, KURL()) {}
 
+ScheduledAction::ScheduledAction(ScriptState* scriptState)
+    : m_scriptState(scriptState),
+      m_info(scriptState->isolate()),
+      m_code(String(), KURL()) {}
+
 void ScheduledAction::execute(LocalFrame* frame) {
   if (!m_scriptState->contextIsValid()) {
     DVLOG(1) << "ScheduledAction::execute " << this << ": context is empty";
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScheduledAction.h b/third_party/WebKit/Source/bindings/core/v8/ScheduledAction.h
index f5385b3..13656a6 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ScheduledAction.h
+++ b/third_party/WebKit/Source/bindings/core/v8/ScheduledAction.h
@@ -71,6 +71,9 @@
                   const Vector<ScriptValue>& arguments);
   ScheduledAction(ScriptState*, const String& handler);
 
+  // Creates an empty ScheduledAction.
+  explicit ScheduledAction(ScriptState*);
+
   void execute(LocalFrame*);
   void execute(WorkerGlobalScope*);
   void createLocalHandlesForArgs(Vector<v8::Local<v8::Value>>* handles);
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8Binding.cpp b/third_party/WebKit/Source/bindings/core/v8/V8Binding.cpp
index 0ccf6f2..fb93c17 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8Binding.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/V8Binding.cpp
@@ -733,13 +733,21 @@
     //
     // TODO(haraken): It's nasty to return a current window from
     // enteredDOMWindow.  All call sites should be updated so that it works even
-    // if it doesn't have an entered window.
+    // if it doesn't have an entered window. Consider using
+    // enteredOrMicrotaskDOMWindow everywhere.
     window = currentDOMWindow(isolate);
     ASSERT(window);
   }
   return window;
 }
 
+LocalDOMWindow* enteredOrMicrotaskDOMWindow(v8::Isolate* isolate) {
+  LocalDOMWindow* window =
+      toLocalDOMWindow(toDOMWindow(isolate->GetEnteredOrMicrotaskContext()));
+  DCHECK(window);
+  return window;
+}
+
 LocalDOMWindow* currentDOMWindow(v8::Isolate* isolate) {
   return toLocalDOMWindow(toDOMWindow(isolate->GetCurrentContext()));
 }
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8Binding.h b/third_party/WebKit/Source/bindings/core/v8/V8Binding.h
index 1df7fae..eccefd0 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8Binding.h
+++ b/third_party/WebKit/Source/bindings/core/v8/V8Binding.h
@@ -997,6 +997,9 @@
 CORE_EXPORT DOMWindow* toDOMWindow(v8::Isolate*, v8::Local<v8::Value>);
 DOMWindow* toDOMWindow(v8::Local<v8::Context>);
 LocalDOMWindow* enteredDOMWindow(v8::Isolate*);
+// Returns the last entered context, or the context of the currently running
+// microtask if no entered context is higher up on the stack.
+LocalDOMWindow* enteredOrMicrotaskDOMWindow(v8::Isolate*);
 CORE_EXPORT LocalDOMWindow* currentDOMWindow(v8::Isolate*);
 CORE_EXPORT ExecutionContext* toExecutionContext(v8::Local<v8::Context>);
 CORE_EXPORT void registerToExecutionContextForModules(
diff --git a/third_party/WebKit/Source/core/frame/UseCounter.h b/third_party/WebKit/Source/core/frame/UseCounter.h
index d00df541..97f324bb 100644
--- a/third_party/WebKit/Source/core/frame/UseCounter.h
+++ b/third_party/WebKit/Source/core/frame/UseCounter.h
@@ -1476,6 +1476,7 @@
     ScrollByKeyboardSpacebarKey = 1846,
     ScrollByTouch = 1847,
     ScrollByWheel = 1848,
+    ScheduledActionIgnored = 1849,
 
     // Add new features immediately above this line. Don't change assigned
     // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/WebKit/Source/core/html/forms/RadioInputType.cpp b/third_party/WebKit/Source/core/html/forms/RadioInputType.cpp
index ed9afd7b..24c798e 100644
--- a/third_party/WebKit/Source/core/html/forms/RadioInputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/RadioInputType.cpp
@@ -112,13 +112,13 @@
 
   // We can only stay within the form's children if the form hasn't been demoted
   // to a leaf because of malformed HTML.
-  HTMLInputElement* inputElement = findNextFocusableRadioButtonInGroup(
-      toHTMLInputElement(&element()), forward);
+  HTMLInputElement* inputElement =
+      findNextFocusableRadioButtonInGroup(&element(), forward);
   if (!inputElement) {
     // Traverse in reverse direction till last or first radio button
     forward = !(forward);
-    HTMLInputElement* nextInputElement = findNextFocusableRadioButtonInGroup(
-        toHTMLInputElement(&element()), forward);
+    HTMLInputElement* nextInputElement =
+        findNextFocusableRadioButtonInGroup(&element(), forward);
     while (nextInputElement) {
       inputElement = nextInputElement;
       nextInputElement =
diff --git a/third_party/WebKit/Source/core/paint/BoxBorderPainter.cpp b/third_party/WebKit/Source/core/paint/BoxBorderPainter.cpp
index 8d10bb36..3308fa3 100644
--- a/third_party/WebKit/Source/core/paint/BoxBorderPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/BoxBorderPainter.cpp
@@ -976,7 +976,7 @@
       return;
     case BorderStyleDotted:
     case BorderStyleDashed: {
-      drawDashedDottedBoxSideFromPath(graphicsContext, borderPath, thickness,
+      drawDashedDottedBoxSideFromPath(graphicsContext, borderRect, thickness,
                                       drawThickness, color, borderStyle);
       return;
     }
@@ -1011,18 +1011,34 @@
 
 void BoxBorderPainter::drawDashedDottedBoxSideFromPath(
     GraphicsContext& graphicsContext,
-    const Path& borderPath,
+    const LayoutRect& borderRect,
     float thickness,
     float drawThickness,
     Color color,
     EBorderStyle borderStyle) const {
+  // Convert the path to be down the middle of the dots or dashes.
+  const LayoutRectOutsets centerOffsets(
+      -m_edges[BSTop].usedWidth() * 0.5, -m_edges[BSRight].usedWidth() * 0.5,
+      -m_edges[BSBottom].usedWidth() * 0.5, -m_edges[BSLeft].usedWidth() * 0.5);
+  Path centerlinePath;
+  centerlinePath.addRoundedRect(m_style.getRoundedInnerBorderFor(
+      borderRect, centerOffsets, m_includeLogicalLeftEdge,
+      m_includeLogicalRightEdge));
+
   graphicsContext.setStrokeColor(color);
 
+  if (!StrokeData::strokeIsDashed(thickness, borderStyle == BorderStyleDashed
+                                                 ? DashedStroke
+                                                 : DottedStroke)) {
+    drawWideDottedBoxSideFromPath(graphicsContext, centerlinePath, thickness);
+    return;
+  }
+
   // The stroke is doubled here because the provided path is the
   // outside edge of the border so half the stroke is clipped off.
   // The extra multiplier is so that the clipping mask can antialias
   // the edges to prevent jaggies.
-  graphicsContext.setStrokeThickness(drawThickness * 2 * 1.1f);
+  graphicsContext.setStrokeThickness(drawThickness * 1.1f);
   graphicsContext.setStrokeStyle(
       borderStyle == BorderStyleDashed ? DashedStroke : DottedStroke);
 
@@ -1034,11 +1050,10 @@
   // do the same thing as StrokeData::setupPaintDashPathEffect and should be
   // refactored to re-use that code. It would require
   // GraphicsContext::strokePath to take a length parameter.
-
   float dashLength =
       thickness * ((borderStyle == BorderStyleDashed) ? 3.0f : 1.0f);
   float gapLength = dashLength;
-  float numberOfDashes = borderPath.length() / dashLength;
+  float numberOfDashes = centerlinePath.length() / dashLength;
   // Don't try to show dashes if we have less than 2 dashes + 2 gaps.
   // FIXME: should do this test per side.
   if (numberOfDashes >= 4) {
@@ -1057,8 +1072,50 @@
 
   // FIXME: stroking the border path causes issues with tight corners:
   // https://bugs.webkit.org/show_bug.cgi?id=58711
-  // Also, to get the best appearance we should stroke a path between the
-  // two borders.
+  graphicsContext.strokePath(centerlinePath);
+}
+
+void BoxBorderPainter::drawWideDottedBoxSideFromPath(
+    GraphicsContext& graphicsContext,
+    const Path& borderPath,
+    float thickness) const {
+  graphicsContext.setStrokeThickness(thickness);
+  graphicsContext.setStrokeStyle(DottedStroke);
+
+  // TODO(schenney): This code for setting up the dash effect is largely
+  // duplicated from StrokeData::setupPaintDashPathEffect and both this code
+  // and the method above should be refactored to re-use that code. It would
+  // require GraphicsContext::strokePath to take a length parameter.
+  graphicsContext.setLineCap(RoundCap);
+
+  // Adjust the width to get equal dot spacing as much as possible.
+  float perDotLength = thickness * 2;
+  static float epsilon = 1.0e-2f;
+  float pathLength = borderPath.length();
+
+  if (pathLength < perDotLength + thickness) {
+    // Exactly 2 dots with whatever space we can get
+    DashArray lineDash;
+    lineDash.push_back(0);
+    lineDash.push_back(pathLength - thickness - epsilon);
+    graphicsContext.setLineDash(lineDash, 0);
+  } else {
+    // Determine what number of dots gives the minimum deviation from
+    // idealGap between dots. Set the gap to that width.
+    float minNumDots = floorf((pathLength + thickness) / perDotLength);
+    float maxNumDots = minNumDots + 1;
+    float minGap = (pathLength - minNumDots * thickness) / (minNumDots - 1);
+    float maxGap = (pathLength - maxNumDots * thickness) / (maxNumDots - 1);
+    auto gap =
+        fabs(minGap - thickness) < fabs(maxGap - thickness) ? minGap : maxGap;
+    DashArray lineDash;
+    lineDash.push_back(0);
+    lineDash.push_back(gap + thickness - epsilon);
+    graphicsContext.setLineDash(lineDash, 0);
+  }
+
+  // TODO(schenney): stroking the border path causes issues with tight corners:
+  // https://bugs.webkit.org/show_bug.cgi?id=58711
   graphicsContext.strokePath(borderPath);
 }
 
diff --git a/third_party/WebKit/Source/core/paint/BoxBorderPainter.h b/third_party/WebKit/Source/core/paint/BoxBorderPainter.h
index 9ac25d0..56138af 100644
--- a/third_party/WebKit/Source/core/paint/BoxBorderPainter.h
+++ b/third_party/WebKit/Source/core/paint/BoxBorderPainter.h
@@ -77,11 +77,14 @@
                            Color,
                            EBorderStyle) const;
   void drawDashedDottedBoxSideFromPath(GraphicsContext&,
-                                       const Path&,
+                                       const LayoutRect&,
                                        float thickness,
                                        float drawThickness,
                                        Color,
                                        EBorderStyle) const;
+  void drawWideDottedBoxSideFromPath(GraphicsContext&,
+                                     const Path&,
+                                     float thickness) const;
   void drawDoubleBoxSideFromPath(GraphicsContext&,
                                  const LayoutRect&,
                                  const Path&,
diff --git a/third_party/WebKit/Source/core/paint/ObjectPainter.cpp b/third_party/WebKit/Source/core/paint/ObjectPainter.cpp
index 5e77682a..629a62a 100644
--- a/third_party/WebKit/Source/core/paint/ObjectPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/ObjectPainter.cpp
@@ -14,6 +14,7 @@
 #include "core/style/BorderEdge.h"
 #include "core/style/ComputedStyle.h"
 #include "platform/geometry/LayoutPoint.h"
+#include "platform/graphics/GraphicsContextStateSaver.h"
 
 namespace blink {
 
@@ -415,8 +416,7 @@
                                               bool antialias) {
   DCHECK_GT(thickness, 0);
 
-  bool wasAntialiased = graphicsContext.shouldAntialias();
-  StrokeStyle oldStrokeStyle = graphicsContext.getStrokeStyle();
+  GraphicsContextStateSaver stateSaver(graphicsContext);
   graphicsContext.setShouldAntialias(antialias);
   graphicsContext.setStrokeColor(color);
   graphicsContext.setStrokeThickness(thickness);
@@ -437,8 +437,6 @@
       break;
     }
   }
-  graphicsContext.setShouldAntialias(wasAntialiased);
-  graphicsContext.setStrokeStyle(oldStrokeStyle);
 }
 
 void ObjectPainter::drawDoubleBoxSide(GraphicsContext& graphicsContext,
diff --git a/third_party/WebKit/Source/devtools/front_end/Tests.js b/third_party/WebKit/Source/devtools/front_end/Tests.js
index 8a2af93..32107ca 100644
--- a/third_party/WebKit/Source/devtools/front_end/Tests.js
+++ b/third_party/WebKit/Source/devtools/front_end/Tests.js
@@ -808,9 +808,9 @@
     setTimeout(reset, 0);
 
     function createSettings() {
-      var localSetting = Common.settings.createSetting('local', undefined, true);
+      var localSetting = Common.settings.createLocalSetting('local', undefined);
       localSetting.set({s: 'local', n: 1});
-      var globalSetting = Common.settings.createSetting('global', undefined, false);
+      var globalSetting = Common.settings.createSetting('global', undefined);
       globalSetting.set({s: 'global', n: 2});
     }
 
@@ -822,11 +822,11 @@
     function gotPreferences(prefs) {
       Main.Main._instanceForTest._createSettings(prefs);
 
-      var localSetting = Common.settings.createSetting('local', undefined, true);
+      var localSetting = Common.settings.createLocalSetting('local', undefined);
       test.assertEquals('object', typeof localSetting.get());
       test.assertEquals('local', localSetting.get().s);
       test.assertEquals(1, localSetting.get().n);
-      var globalSetting = Common.settings.createSetting('global', undefined, false);
+      var globalSetting = Common.settings.createSetting('global', undefined);
       test.assertEquals('object', typeof globalSetting.get());
       test.assertEquals('global', globalSetting.get().s);
       test.assertEquals(2, globalSetting.get().n);
diff --git a/third_party/WebKit/Source/devtools/front_end/common/Settings.js b/third_party/WebKit/Source/devtools/front_end/common/Settings.js
index 28a3087..280e1684 100644
--- a/third_party/WebKit/Source/devtools/front_end/common/Settings.js
+++ b/third_party/WebKit/Source/devtools/front_end/common/Settings.js
@@ -37,8 +37,9 @@
    * @param {!Common.SettingsStorage} localStorage
    */
   constructor(globalStorage, localStorage) {
-    this._settingsStorage = globalStorage;
+    this._globalStorage = globalStorage;
     this._localStorage = localStorage;
+    this._sessionStorage = new Common.SettingsStorage({});
 
     this._eventSupport = new Common.Object();
     /** @type {!Map<string, !Common.Setting>} */
@@ -54,11 +55,24 @@
   _registerModuleSetting(extension) {
     var descriptor = extension.descriptor();
     var settingName = descriptor['settingName'];
-    var settingType = descriptor['settingType'];
+    var isRegex = descriptor['settingType'] === 'regex';
     var defaultValue = descriptor['defaultValue'];
-    var isLocal = !!descriptor['local'];
-    var setting = settingType === 'regex' ? this.createRegExpSetting(settingName, defaultValue, undefined, isLocal) :
-                                            this.createSetting(settingName, defaultValue, isLocal);
+    var storageType;
+    switch (descriptor['storageType']) {
+      case ('local'):
+        storageType = Common.SettingStorageType.Local;
+        break;
+      case ('session'):
+        storageType = Common.SettingStorageType.Session;
+        break;
+      case ('global'):
+        storageType = Common.SettingStorageType.Global;
+        break;
+      default:
+        storageType = Common.SettingStorageType.Global;
+    }
+    var setting = isRegex ? this.createRegExpSetting(settingName, defaultValue, undefined, storageType) :
+                            this.createSetting(settingName, defaultValue, storageType);
     if (descriptor['title'])
       setting.setTitle(descriptor['title']);
     this._moduleSettings.set(settingName, setting);
@@ -89,15 +103,13 @@
   /**
    * @param {string} key
    * @param {*} defaultValue
-   * @param {boolean=} isLocal
+   * @param {!Common.SettingStorageType=} storageType
    * @return {!Common.Setting}
    */
-  createSetting(key, defaultValue, isLocal) {
-    if (!this._registry.get(key)) {
-      this._registry.set(
-          key, new Common.Setting(
-                   this, key, defaultValue, this._eventSupport, isLocal ? this._localStorage : this._settingsStorage));
-    }
+  createSetting(key, defaultValue, storageType) {
+    var storage = this._storageFromType(storageType);
+    if (!this._registry.get(key))
+      this._registry.set(key, new Common.Setting(this, key, defaultValue, this._eventSupport, storage));
     return /** @type {!Common.Setting} */ (this._registry.get(key));
   }
 
@@ -107,32 +119,48 @@
    * @return {!Common.Setting}
    */
   createLocalSetting(key, defaultValue) {
-    return this.createSetting(key, defaultValue, true);
+    return this.createSetting(key, defaultValue, Common.SettingStorageType.Local);
   }
 
   /**
    * @param {string} key
    * @param {string} defaultValue
    * @param {string=} regexFlags
-   * @param {boolean=} isLocal
+   * @param {!Common.SettingStorageType=} storageType
    * @return {!Common.RegExpSetting}
    */
-  createRegExpSetting(key, defaultValue, regexFlags, isLocal) {
+  createRegExpSetting(key, defaultValue, regexFlags, storageType) {
     if (!this._registry.get(key)) {
       this._registry.set(
-          key, new Common.RegExpSetting(
-                   this, key, defaultValue, this._eventSupport, isLocal ? this._localStorage : this._settingsStorage,
-                   regexFlags));
+          key,
+          new Common.RegExpSetting(
+              this, key, defaultValue, this._eventSupport, this._storageFromType(storageType), regexFlags));
     }
     return /** @type {!Common.RegExpSetting} */ (this._registry.get(key));
   }
 
   clearAll() {
-    this._settingsStorage.removeAll();
+    this._globalStorage.removeAll();
     this._localStorage.removeAll();
     var versionSetting = Common.settings.createSetting(Common.VersionController._currentVersionName, 0);
     versionSetting.set(Common.VersionController.currentVersion);
   }
+
+  /**
+   * @param {!Common.SettingStorageType=} storageType
+   * @return {!Common.SettingsStorage}
+   */
+  _storageFromType(storageType) {
+    switch (storageType) {
+      case (Common.SettingStorageType.Local):
+        return this._localStorage;
+      case (Common.SettingStorageType.Session):
+        return this._sessionStorage;
+      case (Common.SettingStorageType.Global):
+        return this._globalStorage;
+    }
+    return this._globalStorage;
+  }
 };
 
 /**
@@ -753,7 +781,7 @@
         continue;
       var value = window.localStorage[key];
       window.localStorage.removeItem(key);
-      Common.settings._settingsStorage[key] = value;
+      Common.settings._globalStorage[key] = value;
     }
   }
 
@@ -778,6 +806,15 @@
 Common.settings;
 
 /**
+ * @enum {symbol}
+ */
+Common.SettingStorageType = {
+  Global: Symbol('Global'),
+  Local: Symbol('Local'),
+  Session: Symbol('Session')
+};
+
+/**
  * @param {string} settingName
  * @return {!Common.Setting}
  */
diff --git a/third_party/WebKit/Source/devtools/front_end/help/Help.js b/third_party/WebKit/Source/devtools/front_end/help/Help.js
index 7d3b6cb..b2028f326 100644
--- a/third_party/WebKit/Source/devtools/front_end/help/Help.js
+++ b/third_party/WebKit/Source/devtools/front_end/help/Help.js
@@ -35,7 +35,7 @@
 Help.releaseNoteVersionSetting = function() {
   if (!Help._releaseNoteVersionSetting) {
     /** @type {!Common.Setting} */
-    Help._releaseNoteVersionSetting = Common.settings.createSetting('releaseNoteVersionSeen', 0, false);
+    Help._releaseNoteVersionSetting = Common.settings.createSetting('releaseNoteVersionSeen', 0);
   }
   return Help._releaseNoteVersionSetting;
 };
diff --git a/third_party/WebKit/Source/devtools/front_end/main/module.json b/third_party/WebKit/Source/devtools/front_end/main/module.json
index 1df7509..c1480768 100644
--- a/third_party/WebKit/Source/devtools/front_end/main/module.json
+++ b/third_party/WebKit/Source/devtools/front_end/main/module.json
@@ -251,6 +251,7 @@
             "title": "Disable JavaScript",
             "settingName": "javaScriptDisabled",
             "settingType": "boolean",
+            "storageType": "session",
             "order": 1,
             "defaultValue": false,
             "options": [
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/NetworkManager.js b/third_party/WebKit/Source/devtools/front_end/sdk/NetworkManager.js
index 2a0ae0a..6392ba0 100644
--- a/third_party/WebKit/Source/devtools/front_end/sdk/NetworkManager.js
+++ b/third_party/WebKit/Source/devtools/front_end/sdk/NetworkManager.js
@@ -689,7 +689,6 @@
     this._blockedURLs = new Set();
     this._blockedSetting = Common.moduleSetting('networkBlockedURLs');
     this._blockedSetting.addChangeListener(this._updateBlockedURLs, this);
-    this._blockedSetting.set([]);
     this._updateBlockedURLs();
 
     this._userAgentOverride = '';
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/module.json b/third_party/WebKit/Source/devtools/front_end/sdk/module.json
index 72143bb..f20f36a 100644
--- a/third_party/WebKit/Source/devtools/front_end/sdk/module.json
+++ b/third_party/WebKit/Source/devtools/front_end/sdk/module.json
@@ -10,6 +10,7 @@
             "type": "setting",
             "settingName": "networkBlockedURLs",
             "settingType": "array",
+            "storageType": "session",
             "defaultValue": []
         },
         {
diff --git a/third_party/WebKit/Source/modules/device_orientation/DeviceAccelerationInit.idl b/third_party/WebKit/Source/modules/device_orientation/DeviceAccelerationInit.idl
new file mode 100644
index 0000000..7276e85
--- /dev/null
+++ b/third_party/WebKit/Source/modules/device_orientation/DeviceAccelerationInit.idl
@@ -0,0 +1,11 @@
+// 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.
+
+// https://www.w3.org/TR/2016/CR-orientation-event-20160818/#devicemotion
+
+dictionary DeviceAccelerationInit {
+  double? x = null;
+  double? y = null;
+  double? z = null;
+};
diff --git a/third_party/WebKit/Source/modules/device_orientation/DeviceMotionData.cpp b/third_party/WebKit/Source/modules/device_orientation/DeviceMotionData.cpp
index c75a84ac..e0965a8d 100644
--- a/third_party/WebKit/Source/modules/device_orientation/DeviceMotionData.cpp
+++ b/third_party/WebKit/Source/modules/device_orientation/DeviceMotionData.cpp
@@ -24,6 +24,10 @@
  */
 
 #include "modules/device_orientation/DeviceMotionData.h"
+
+#include "modules/device_orientation/DeviceAccelerationInit.h"
+#include "modules/device_orientation/DeviceMotionEventInit.h"
+#include "modules/device_orientation/DeviceRotationRateInit.h"
 #include "public/platform/modules/device_orientation/WebDeviceMotionData.h"
 
 namespace blink {
@@ -39,6 +43,13 @@
                                             canProvideZ, z);
 }
 
+DeviceMotionData::Acceleration* DeviceMotionData::Acceleration::create(
+    const DeviceAccelerationInit& init) {
+  return new DeviceMotionData::Acceleration(
+      init.hasX(), init.hasX() ? init.x() : 0, init.hasY(),
+      init.hasY() ? init.y() : 0, init.hasZ(), init.hasZ() ? init.z() : 0);
+}
+
 DeviceMotionData::Acceleration::Acceleration(bool canProvideX,
                                              double x,
                                              bool canProvideY,
@@ -65,6 +76,14 @@
       canProvideAlpha, alpha, canProvideBeta, beta, canProvideGamma, gamma);
 }
 
+DeviceMotionData::RotationRate* DeviceMotionData::RotationRate::create(
+    const DeviceRotationRateInit& init) {
+  return new DeviceMotionData::RotationRate(
+      init.hasAlpha(), init.hasAlpha() ? init.alpha() : 0, init.hasBeta(),
+      init.hasBeta() ? init.beta() : 0, init.hasGamma(),
+      init.hasGamma() ? init.gamma() : 0);
+}
+
 DeviceMotionData::RotationRate::RotationRate(bool canProvideAlpha,
                                              double alpha,
                                              bool canProvideBeta,
@@ -92,6 +111,21 @@
                               rotationRate, canProvideInterval, interval);
 }
 
+DeviceMotionData* DeviceMotionData::create(const DeviceMotionEventInit& init) {
+  return DeviceMotionData::create(
+      init.hasAcceleration()
+          ? DeviceMotionData::Acceleration::create(init.acceleration())
+          : nullptr,
+      init.hasAccelerationIncludingGravity()
+          ? DeviceMotionData::Acceleration::create(
+                init.accelerationIncludingGravity())
+          : nullptr,
+      init.hasRotationRate()
+          ? DeviceMotionData::RotationRate::create(init.rotationRate())
+          : nullptr,
+      init.hasInterval(), init.hasInterval() ? init.interval() : 0);
+}
+
 DeviceMotionData* DeviceMotionData::create(const WebDeviceMotionData& data) {
   return DeviceMotionData::create(
       DeviceMotionData::Acceleration::create(
diff --git a/third_party/WebKit/Source/modules/device_orientation/DeviceMotionData.h b/third_party/WebKit/Source/modules/device_orientation/DeviceMotionData.h
index 286e137..986088a5 100644
--- a/third_party/WebKit/Source/modules/device_orientation/DeviceMotionData.h
+++ b/third_party/WebKit/Source/modules/device_orientation/DeviceMotionData.h
@@ -30,6 +30,9 @@
 
 namespace blink {
 
+class DeviceAccelerationInit;
+class DeviceMotionEventInit;
+class DeviceRotationRateInit;
 class WebDeviceMotionData;
 
 class DeviceMotionData final : public GarbageCollected<DeviceMotionData> {
@@ -43,6 +46,7 @@
                                 double y,
                                 bool canProvideZ,
                                 double z);
+    static Acceleration* create(const DeviceAccelerationInit&);
     DEFINE_INLINE_TRACE() {}
 
     bool canProvideX() const { return m_canProvideX; }
@@ -79,6 +83,7 @@
                                 double beta,
                                 bool canProvideGamma,
                                 double gamma);
+    static RotationRate* create(const DeviceRotationRateInit&);
     DEFINE_INLINE_TRACE() {}
 
     bool canProvideAlpha() const { return m_canProvideAlpha; }
@@ -112,6 +117,7 @@
                                   RotationRate*,
                                   bool canProvideInterval,
                                   double interval);
+  static DeviceMotionData* create(const DeviceMotionEventInit&);
   static DeviceMotionData* create(const WebDeviceMotionData&);
   DECLARE_TRACE();
 
diff --git a/third_party/WebKit/Source/modules/device_orientation/DeviceMotionEvent.cpp b/third_party/WebKit/Source/modules/device_orientation/DeviceMotionEvent.cpp
index 0985837..0a5c88e 100644
--- a/third_party/WebKit/Source/modules/device_orientation/DeviceMotionEvent.cpp
+++ b/third_party/WebKit/Source/modules/device_orientation/DeviceMotionEvent.cpp
@@ -27,6 +27,7 @@
 
 #include "modules/device_orientation/DeviceAcceleration.h"
 #include "modules/device_orientation/DeviceMotionData.h"
+#include "modules/device_orientation/DeviceMotionEventInit.h"
 #include "modules/device_orientation/DeviceRotationRate.h"
 
 namespace blink {
@@ -37,6 +38,11 @@
     : m_deviceMotionData(DeviceMotionData::create()) {}
 
 DeviceMotionEvent::DeviceMotionEvent(const AtomicString& eventType,
+                                     const DeviceMotionEventInit& initializer)
+    : Event(eventType, initializer),
+      m_deviceMotionData(DeviceMotionData::create(initializer)) {}
+
+DeviceMotionEvent::DeviceMotionEvent(const AtomicString& eventType,
                                      DeviceMotionData* deviceMotionData)
     : Event(eventType, false, false),  // Can't bubble, not cancelable
       m_deviceMotionData(deviceMotionData) {}
diff --git a/third_party/WebKit/Source/modules/device_orientation/DeviceMotionEvent.h b/third_party/WebKit/Source/modules/device_orientation/DeviceMotionEvent.h
index 47ba9603b..672ae11 100644
--- a/third_party/WebKit/Source/modules/device_orientation/DeviceMotionEvent.h
+++ b/third_party/WebKit/Source/modules/device_orientation/DeviceMotionEvent.h
@@ -33,6 +33,7 @@
 
 class DeviceAcceleration;
 class DeviceMotionData;
+class DeviceMotionEventInit;
 class DeviceRotationRate;
 
 class DeviceMotionEvent final : public Event {
@@ -42,6 +43,10 @@
   ~DeviceMotionEvent() override;
   static DeviceMotionEvent* create() { return new DeviceMotionEvent; }
   static DeviceMotionEvent* create(const AtomicString& eventType,
+                                   const DeviceMotionEventInit& initializer) {
+    return new DeviceMotionEvent(eventType, initializer);
+  }
+  static DeviceMotionEvent* create(const AtomicString& eventType,
                                    DeviceMotionData* deviceMotionData) {
     return new DeviceMotionEvent(eventType, deviceMotionData);
   }
@@ -66,6 +71,7 @@
 
  private:
   DeviceMotionEvent();
+  DeviceMotionEvent(const AtomicString&, const DeviceMotionEventInit&);
   DeviceMotionEvent(const AtomicString& eventType, DeviceMotionData*);
 
   Member<DeviceMotionData> m_deviceMotionData;
diff --git a/third_party/WebKit/Source/modules/device_orientation/DeviceMotionEvent.idl b/third_party/WebKit/Source/modules/device_orientation/DeviceMotionEvent.idl
index 4777863..079cc1dd 100644
--- a/third_party/WebKit/Source/modules/device_orientation/DeviceMotionEvent.idl
+++ b/third_party/WebKit/Source/modules/device_orientation/DeviceMotionEvent.idl
@@ -23,9 +23,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// https://w3c.github.io/deviceorientation/spec-source-orientation.html#devicemotion
+// https://www.w3.org/TR/2016/CR-orientation-event-20160818/#devicemotion
 
-// TODO(foolip): DeviceMotionEvent should have a constructor.
+[Constructor(DOMString type, optional DeviceMotionEventInit eventInitDict)]
 interface DeviceMotionEvent : Event {
     readonly attribute DeviceAcceleration? acceleration;
     readonly attribute DeviceAcceleration? accelerationIncludingGravity;
diff --git a/third_party/WebKit/Source/modules/device_orientation/DeviceMotionEventInit.idl b/third_party/WebKit/Source/modules/device_orientation/DeviceMotionEventInit.idl
new file mode 100644
index 0000000..4f8663c
--- /dev/null
+++ b/third_party/WebKit/Source/modules/device_orientation/DeviceMotionEventInit.idl
@@ -0,0 +1,12 @@
+// 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.
+
+// https://www.w3.org/TR/2016/CR-orientation-event-20160818/#devicemotion
+
+dictionary DeviceMotionEventInit : EventInit {
+  DeviceAccelerationInit? acceleration;
+  DeviceAccelerationInit? accelerationIncludingGravity;
+  DeviceRotationRateInit? rotationRate;
+  double? interval = null;
+};
diff --git a/third_party/WebKit/Source/modules/device_orientation/DeviceRotationRateInit.idl b/third_party/WebKit/Source/modules/device_orientation/DeviceRotationRateInit.idl
new file mode 100644
index 0000000..00fc4a31
--- /dev/null
+++ b/third_party/WebKit/Source/modules/device_orientation/DeviceRotationRateInit.idl
@@ -0,0 +1,11 @@
+// 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.
+
+// https://www.w3.org/TR/2016/CR-orientation-event-20160818/#devicemotion
+
+dictionary DeviceRotationRateInit {
+  double? alpha = null;
+  double? beta = null;
+  double? gamma = null;
+};
diff --git a/third_party/WebKit/Source/modules/modules_idl_files.gni b/third_party/WebKit/Source/modules/modules_idl_files.gni
index 94ed5f68..5ed3cbc70 100644
--- a/third_party/WebKit/Source/modules/modules_idl_files.gni
+++ b/third_party/WebKit/Source/modules/modules_idl_files.gni
@@ -405,6 +405,9 @@
                     "credentialmanager/LocallyStoredCredentialData.idl",
                     "credentialmanager/PasswordCredentialData.idl",
                     "device_light/DeviceLightEventInit.idl",
+                    "device_orientation/DeviceAccelerationInit.idl",
+                    "device_orientation/DeviceMotionEventInit.idl",
+                    "device_orientation/DeviceRotationRateInit.idl",
                     "encoding/TextDecodeOptions.idl",
                     "encoding/TextDecoderOptions.idl",
                     "encryptedmedia/MediaEncryptedEventInit.idl",
@@ -706,6 +709,12 @@
   "$blink_modules_output_dir/credentialmanager/PasswordCredentialData.h",
   "$blink_modules_output_dir/device_light/DeviceLightEventInit.cpp",
   "$blink_modules_output_dir/device_light/DeviceLightEventInit.h",
+  "$blink_modules_output_dir/device_orientation/DeviceAccelerationInit.cpp",
+  "$blink_modules_output_dir/device_orientation/DeviceAccelerationInit.h",
+  "$blink_modules_output_dir/device_orientation/DeviceMotionEventInit.cpp",
+  "$blink_modules_output_dir/device_orientation/DeviceMotionEventInit.h",
+  "$blink_modules_output_dir/device_orientation/DeviceRotationRateInit.cpp",
+  "$blink_modules_output_dir/device_orientation/DeviceRotationRateInit.h",
   "$blink_modules_output_dir/encoding/TextDecodeOptions.cpp",
   "$blink_modules_output_dir/encoding/TextDecodeOptions.h",
   "$blink_modules_output_dir/encoding/TextDecoderOptions.cpp",
diff --git a/third_party/WebKit/Source/platform/graphics/GraphicsContext.cpp b/third_party/WebKit/Source/platform/graphics/GraphicsContext.cpp
index 6b8397a..cb688e1 100644
--- a/third_party/WebKit/Source/platform/graphics/GraphicsContext.cpp
+++ b/third_party/WebKit/Source/platform/graphics/GraphicsContext.cpp
@@ -501,9 +501,9 @@
   int length = SkScalarRoundToInt(disp.width() + disp.height());
   PaintFlags flags(immutableState()->strokeFlags(length));
 
-  if (getStrokeStyle() == DottedStroke || getStrokeStyle() == DashedStroke) {
+  if (StrokeData::strokeIsDashed(width, getStrokeStyle())) {
     // Do a rect fill of our endpoints.  This ensures we always have the
-    // appearance of being a border.  We then draw the actual dotted/dashed
+    // appearance of being a border. We then draw the actual dotted/dashed
     // line.
     SkRect r1, r2;
     r1.set(p1.x(), p1.y(), p1.x() + width, p1.y() + width);
@@ -520,6 +520,17 @@
     fillFlags.setColor(flags.getColor());
     drawRect(r1, fillFlags);
     drawRect(r2, fillFlags);
+  } else if (getStrokeStyle() == DottedStroke) {
+    // We draw thick dotted lines with 0 length dash strokes and round endcaps,
+    // producing circles. The endcaps extend beyond the line's endpoints,
+    // so move the start and end in.
+    if (isVerticalLine) {
+      p1.setY(p1.y() + width / 2.f);
+      p2.setY(p2.y() - width / 2.f);
+    } else {
+      p1.setX(p1.x() + width / 2.f);
+      p2.setX(p2.x() - width / 2.f);
+    }
   }
 
   adjustLineToPixelBoundaries(p1, p2, width, penStyle);
@@ -1298,7 +1309,7 @@
   // pass us (y1+y2)/2, e.g., (50+53)/2 = 103/2 = 51 when we want 51.5.  It is
   // always true that an even width gave us a perfect position, but an odd width
   // gave us a position that is off by exactly 0.5.
-  if (penStyle == DottedStroke || penStyle == DashedStroke) {
+  if (StrokeData::strokeIsDashed(strokeWidth, penStyle)) {
     if (p1.x() == p2.x()) {
       p1.setY(p1.y() + strokeWidth);
       p2.setY(p2.y() - strokeWidth);
diff --git a/third_party/WebKit/Source/platform/graphics/StrokeData.cpp b/third_party/WebKit/Source/platform/graphics/StrokeData.cpp
index 2bd0a51..cbdb47b 100644
--- a/third_party/WebKit/Source/platform/graphics/StrokeData.cpp
+++ b/third_party/WebKit/Source/platform/graphics/StrokeData.cpp
@@ -70,7 +70,7 @@
 void StrokeData::setupPaintDashPathEffect(PaintFlags* flags, int length) const {
   if (m_dash) {
     flags->setPathEffect(m_dash);
-  } else if (m_style == DashedStroke || m_style == DottedStroke) {
+  } else if (strokeIsDashed(m_thickness, m_style)) {
     float width =
         m_style == DashedStroke ? dashRatio * m_thickness : m_thickness;
 
@@ -96,10 +96,39 @@
     SkScalar intervals[2] = {dashLengthSk, dashLengthSk};
     flags->setPathEffect(
         SkDashPathEffect::Make(intervals, 2, SkIntToScalar(phase)));
+  } else if (m_style == DottedStroke) {
+    flags->setStrokeCap((PaintFlags::Cap)RoundCap);
+    // Adjust the width to get equal dot spacing as much as possible.
+    float perDotLength = m_thickness * 2;
+    static float epsilon = 1.0e-2f;
+    if (length < perDotLength + m_thickness) {
+      // Exactly 2 dots with whatever space we can get
+      SkScalar intervals[2] = {0, length - m_thickness - epsilon};
+      flags->setPathEffect(SkDashPathEffect::Make(intervals, 2, 0));
+      return;
+    }
+
+    // Determine what number of dots gives the minimum deviation from
+    // idealGap between dots. Set the gap to that width.
+    float minNumDots = floorf((length + m_thickness) / perDotLength);
+    float maxNumDots = minNumDots + 1;
+    float minGap = (length - minNumDots * m_thickness) / (minNumDots - 1);
+    float maxGap = (length - maxNumDots * m_thickness) / (maxNumDots - 1);
+    if (fabs(minGap - m_thickness) < fabs(maxGap - m_thickness)) {
+      SkScalar intervals[2] = {0, minGap + m_thickness - epsilon};
+      flags->setPathEffect(SkDashPathEffect::Make(intervals, 2, 0));
+    } else {
+      SkScalar intervals[2] = {0, maxGap + m_thickness - epsilon};
+      flags->setPathEffect(SkDashPathEffect::Make(intervals, 2, 0));
+    }
   } else {
-    // TODO(schenney): WavyStroke:  https://crbug.com/229574
+    // TODO(schenney): WavyStroke https://crbug.com/229574
     flags->setPathEffect(0);
   }
 }
 
+bool StrokeData::strokeIsDashed(float width, StrokeStyle style) {
+  return style == DashedStroke || (style == DottedStroke && width <= 3);
+}
+
 }  // namespace blink
diff --git a/third_party/WebKit/Source/platform/graphics/StrokeData.h b/third_party/WebKit/Source/platform/graphics/StrokeData.h
index 6bad59cad..f39dffc 100644
--- a/third_party/WebKit/Source/platform/graphics/StrokeData.h
+++ b/third_party/WebKit/Source/platform/graphics/StrokeData.h
@@ -82,6 +82,11 @@
   // line will be adjusted to start and end that length with a dash/dot.
   void setupPaintDashPathEffect(PaintFlags*, int) const;
 
+  // Determine whether a stroked line should be drawn using dashes. In practice,
+  // we draw dashes when a dashed stroke is specified or when a dotted stroke
+  // is specified but the line width is too small to draw circles.
+  static bool strokeIsDashed(float width, StrokeStyle);
+
  private:
   StrokeStyle m_style;
   float m_thickness;
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 1a58b6f..da1f11b 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -93026,6 +93026,7 @@
   <int value="1846" label="ScrollByKeyboardSpacebarKey"/>
   <int value="1847" label="ScrollByTouch"/>
   <int value="1848" label="ScrollByWheel"/>
+  <int value="1849" label="ScheduledActionIgnored"/>
 </enum>
 
 <enum name="FetchRequestMode" type="int">
diff --git a/tools/origin_trials/generate_token.py b/tools/origin_trials/generate_token.py
index a79f169..35ca521 100755
--- a/tools/origin_trials/generate_token.py
+++ b/tools/origin_trials/generate_token.py
@@ -179,6 +179,7 @@
   print " Is Subdomain: %s" % args.is_subdomain
   print " Feature: %s" % args.trial_name
   print " Expiry: %d (%s UTC)" % (expiry, datetime.utcfromtimestamp(expiry))
+  print " Signature: %s" % ", ".join('0x%02x' % ord(x) for x in signature)
   print
 
   # Output the properly-formatted token.
diff --git a/ui/aura/mus/window_tree_client.cc b/ui/aura/mus/window_tree_client.cc
index 93426157..3328445f 100644
--- a/ui/aura/mus/window_tree_client.cc
+++ b/ui/aura/mus/window_tree_client.cc
@@ -588,7 +588,9 @@
     const gfx::Rect& new_bounds) {
   const uint32_t change_id = ScheduleInFlightChange(
       base::MakeUnique<InFlightBoundsChange>(this, window, old_bounds));
-  tree_->SetWindowBounds(change_id, window->server_id(), new_bounds);
+  // TODO(fsamuel): Allocate a new LocalSurfaceId on size change.
+  tree_->SetWindowBounds(change_id, window->server_id(), new_bounds,
+                         base::nullopt);
 }
 
 void WindowTreeClient::OnWindowMusCreated(WindowMus* window) {
@@ -960,9 +962,11 @@
   DCHECK_EQ(0u, data->parent_id);
 }
 
-void WindowTreeClient::OnWindowBoundsChanged(Id window_id,
-                                             const gfx::Rect& old_bounds,
-                                             const gfx::Rect& new_bounds) {
+void WindowTreeClient::OnWindowBoundsChanged(
+    Id window_id,
+    const gfx::Rect& old_bounds,
+    const gfx::Rect& new_bounds,
+    const base::Optional<cc::LocalSurfaceId>& local_surface_id) {
   WindowMus* window = GetWindowByServerId(window_id);
   if (!window)
     return;
diff --git a/ui/aura/mus/window_tree_client.h b/ui/aura/mus/window_tree_client.h
index 3e42a2e..60abb544 100644
--- a/ui/aura/mus/window_tree_client.h
+++ b/ui/aura/mus/window_tree_client.h
@@ -301,9 +301,11 @@
                          ui::mojom::WindowDataPtr data,
                          int64_t display_id,
                          bool drawn) override;
-  void OnWindowBoundsChanged(Id window_id,
-                             const gfx::Rect& old_bounds,
-                             const gfx::Rect& new_bounds) override;
+  void OnWindowBoundsChanged(
+      Id window_id,
+      const gfx::Rect& old_bounds,
+      const gfx::Rect& new_bounds,
+      const base::Optional<cc::LocalSurfaceId>& local_surface_id) override;
   void OnClientAreaChanged(
       uint32_t window_id,
       const gfx::Insets& new_client_area,
diff --git a/ui/aura/mus/window_tree_client_unittest.cc b/ui/aura/mus/window_tree_client_unittest.cc
index b4f7db24..86f6703 100644
--- a/ui/aura/mus/window_tree_client_unittest.cc
+++ b/ui/aura/mus/window_tree_client_unittest.cc
@@ -276,7 +276,8 @@
   // Simulate the server responding with a bounds change.
   const gfx::Rect server_changed_bounds(gfx::Rect(0, 0, 101, 102));
   window_tree_client()->OnWindowBoundsChanged(
-      server_id(root_window()), original_bounds, server_changed_bounds);
+      server_id(root_window()), original_bounds, server_changed_bounds,
+      base::nullopt);
 
   // This shouldn't trigger the bounds changing yet.
   EXPECT_EQ(new_bounds, root_window()->bounds());
@@ -288,8 +289,9 @@
   EXPECT_EQ(server_changed_bounds, root_window()->bounds());
 
   // Simulate server changing back to original bounds. Should take immediately.
-  window_tree_client()->OnWindowBoundsChanged(
-      server_id(root_window()), server_changed_bounds, original_bounds);
+  window_tree_client()->OnWindowBoundsChanged(server_id(root_window()),
+                                              server_changed_bounds,
+                                              original_bounds, base::nullopt);
   EXPECT_EQ(original_bounds, root_window()->bounds());
 }
 
@@ -1858,7 +1860,8 @@
   // in pixels.
   const gfx::Rect server_changed_bounds(gfx::Rect(0, 0, 200, 200));
   window_tree_client()->OnWindowBoundsChanged(
-      server_id(root_window()), original_bounds, server_changed_bounds);
+      server_id(root_window()), original_bounds, server_changed_bounds,
+      base::nullopt);
   EXPECT_EQ(new_bounds, root_window()->bounds());
 }
 
diff --git a/ui/aura/test/mus/test_window_tree.cc b/ui/aura/test/mus/test_window_tree.cc
index e9be6351..3c7af1bd 100644
--- a/ui/aura/test/mus/test_window_tree.cc
+++ b/ui/aura/test/mus/test_window_tree.cc
@@ -133,9 +133,11 @@
   OnChangeReceived(change_id);
 }
 
-void TestWindowTree::SetWindowBounds(uint32_t change_id,
-                                     uint32_t window_id,
-                                     const gfx::Rect& bounds) {
+void TestWindowTree::SetWindowBounds(
+    uint32_t change_id,
+    uint32_t window_id,
+    const gfx::Rect& bounds,
+    const base::Optional<cc::LocalSurfaceId>& local_surface_id) {
   OnChangeReceived(change_id, WindowTreeChangeType::BOUNDS);
 }
 
diff --git a/ui/aura/test/mus/test_window_tree.h b/ui/aura/test/mus/test_window_tree.h
index 92d05bac..c5910a5 100644
--- a/ui/aura/test/mus/test_window_tree.h
+++ b/ui/aura/test/mus/test_window_tree.h
@@ -116,9 +116,11 @@
       const std::unordered_map<std::string, std::vector<uint8_t>>& properties)
       override;
   void DeleteWindow(uint32_t change_id, uint32_t window_id) override;
-  void SetWindowBounds(uint32_t change_id,
-                       uint32_t window_id,
-                       const gfx::Rect& bounds) override;
+  void SetWindowBounds(
+      uint32_t change_id,
+      uint32_t window_id,
+      const gfx::Rect& bounds,
+      const base::Optional<cc::LocalSurfaceId>& local_surface_id) override;
   void SetClientArea(uint32_t window_id,
                      const gfx::Insets& insets,
                      const base::Optional<std::vector<gfx::Rect>>&
diff --git a/ui/views/controls/label.cc b/ui/views/controls/label.cc
index 2d16942..0532230 100644
--- a/ui/views/controls/label.cc
+++ b/ui/views/controls/label.cc
@@ -467,10 +467,9 @@
         SkColorGetA(view->background()->get_color()) == SK_AlphaOPAQUE)
       break;
 
-    if (view->layer()) {
-      DCHECK(view->layer()->fills_bounds_opaquely())
-          << " Ancestor view has a non-opaque layer: " << view->GetClassName()
-          << " with ID " << view->id();
+    if (view->layer() && view->layer()->fills_bounds_opaquely()) {
+      DLOG(WARNING) << "Ancestor view has a non-opaque layer: "
+                    << view->GetClassName() << " with ID " << view->id();
       break;
     }
   }