diff --git a/DEPS b/DEPS
index 9618dd5..d206824 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': 'b474e2d826cf7d6ac232d1e39c61e02c472e43b6',
+  'skia_revision': '2cb7a1a3bf6917c125c55f9eebcc13019f9adb1b',
   # 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': '7a0544bebdaf63502786de341fd167ba1a002cd0',
+  'v8_revision': 'ab3accbebd8e0942c654438dff6616a9bce35fac',
   # 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/PRESUBMIT.py b/PRESUBMIT.py
index c88f315..215ffbc 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -2151,6 +2151,54 @@
 """ % "\n".join("  %s:%d\n" % line for line in arrow_lines))]
 
 
+def _CheckForRelativeIncludes(input_api, output_api):
+  # Need to set the sys.path so PRESUBMIT_test.py runs properly
+  import sys
+  original_sys_path = sys.path
+  try:
+    sys.path = sys.path + [input_api.os_path.join(
+        input_api.PresubmitLocalPath(), 'buildtools', 'checkdeps')]
+    from cpp_checker import CppChecker
+  finally:
+    # Restore sys.path to what it was before.
+    sys.path = original_sys_path
+
+  bad_files = {}
+  for f in input_api.AffectedFiles(include_deletes=False):
+    if (f.LocalPath().startswith('third_party') and
+      not f.LocalPath().startswith('third_party/WebKit') and
+      not f.LocalPath().startswith('third_party\\WebKit')):
+      continue
+
+    if not CppChecker.IsCppFile(f.LocalPath()):
+      continue
+
+    relative_includes = [line for line_num, line in f.ChangedContents()
+                         if "#include" in line and "../" in line]
+    if not relative_includes:
+      continue
+    bad_files[f.LocalPath()] = relative_includes
+
+  if not bad_files:
+    return []
+
+  error_descriptions = []
+  for file_path, bad_lines in bad_files.iteritems():
+    error_description = file_path
+    for line in bad_lines:
+      error_description += '\n    ' + line
+    error_descriptions.append(error_description)
+
+  results = []
+  results.append(output_api.PresubmitError(
+        'You added one or more relative #include paths (including "../").\n'
+        'These shouldn\'t be used because they can be used to include headers\n'
+        'from code that\'s not correctly specified as a dependency in the\n'
+        'relevant BUILD.gn file(s).',
+        error_descriptions))
+
+  return results
+
 def _AndroidSpecificOnUploadChecks(input_api, output_api):
   """Groups checks that target android code."""
   results = []
@@ -2212,6 +2260,7 @@
   results.extend(_CheckIpcOwners(input_api, output_api))
   results.extend(_CheckUselessForwardDeclarations(input_api, output_api))
   results.extend(_CheckForRiskyJsFeatures(input_api, output_api))
+  results.extend(_CheckForRelativeIncludes(input_api, output_api))
 
   if any('PRESUBMIT.py' == f.LocalPath() for f in input_api.AffectedFiles()):
     results.extend(input_api.canned_checks.RunUnitTestsInDirectory(
diff --git a/PRESUBMIT_test.py b/PRESUBMIT_test.py
index 3fff4a2..394efb7b 100755
--- a/PRESUBMIT_test.py
+++ b/PRESUBMIT_test.py
@@ -1323,6 +1323,69 @@
         mock_input_api, MockOutputApi())
     self.assertEqual(0, len(warnings))
 
+class RelativeIncludesTest(unittest.TestCase):
+  def testThirdPartyNotWebKitIgnored(self):
+    mock_input_api = MockInputApi()
+    mock_input_api.files = [
+      MockAffectedFile('third_party/test.cpp', '#include "../header.h"'),
+      MockAffectedFile('third_party/test/test.cpp', '#include "../header.h"'),
+    ]
+
+    mock_output_api = MockOutputApi()
+
+    errors = PRESUBMIT._CheckForRelativeIncludes(
+        mock_input_api, mock_output_api)
+    self.assertEqual(0, len(errors))
+
+  def testNonCppFileIgnored(self):
+    mock_input_api = MockInputApi()
+    mock_input_api.files = [
+      MockAffectedFile('test.py', '#include "../header.h"'),
+    ]
+
+    mock_output_api = MockOutputApi()
+
+    errors = PRESUBMIT._CheckForRelativeIncludes(
+        mock_input_api, mock_output_api)
+    self.assertEqual(0, len(errors))
+
+  def testInnocuousChangesAllowed(self):
+    mock_input_api = MockInputApi()
+    mock_input_api.files = [
+      MockAffectedFile('test.cpp', '#include "header.h"'),
+      MockAffectedFile('test2.cpp', '../'),
+    ]
+
+    mock_output_api = MockOutputApi()
+
+    errors = PRESUBMIT._CheckForRelativeIncludes(
+        mock_input_api, mock_output_api)
+    self.assertEqual(0, len(errors))
+
+  def testRelativeIncludeNonWebKitProducesError(self):
+    mock_input_api = MockInputApi()
+    mock_input_api.files = [
+      MockAffectedFile('test.cpp', ['#include "../header.h"']),
+    ]
+
+    mock_output_api = MockOutputApi()
+
+    errors = PRESUBMIT._CheckForRelativeIncludes(
+        mock_input_api, mock_output_api)
+    self.assertEqual(1, len(errors))
+
+  def testRelativeIncludeWebKitProducesError(self):
+    mock_input_api = MockInputApi()
+    mock_input_api.files = [
+      MockAffectedFile('third_party/WebKit/test.cpp',
+                       ['#include "../header.h']),
+    ]
+
+    mock_output_api = MockOutputApi()
+
+    errors = PRESUBMIT._CheckForRelativeIncludes(
+        mock_input_api, mock_output_api)
+    self.assertEqual(1, len(errors))
 
 if __name__ == '__main__':
   unittest.main()
diff --git a/android_webview/browser/hardware_renderer.cc b/android_webview/browser/hardware_renderer.cc
index f4962320..95ca24a 100644
--- a/android_webview/browser/hardware_renderer.cc
+++ b/android_webview/browser/hardware_renderer.cc
@@ -170,19 +170,6 @@
 void HardwareRenderer::DestroySurface() {
   DCHECK(child_id_.is_valid());
 
-  // Submit an empty frame to force any existing resources to be returned.
-  gfx::Rect rect(surface_size_);
-  std::unique_ptr<cc::RenderPass> render_pass = cc::RenderPass::Create();
-  render_pass->SetNew(1, rect, rect, gfx::Transform());
-  cc::CompositorFrame frame;
-  frame.render_pass_list.push_back(std::move(render_pass));
-  // We submit without a prior BeginFrame, so acknowledge a manual BeginFrame.
-  frame.metadata.begin_frame_ack =
-      cc::BeginFrameAck::CreateManualAckWithDamage();
-  frame.metadata.device_scale_factor = device_scale_factor_;
-  bool result = support_->SubmitCompositorFrame(child_id_, std::move(frame));
-  DCHECK(result);
-
   surfaces_->RemoveChildId(cc::SurfaceId(frame_sink_id_, child_id_));
   support_->EvictCurrentSurface();
   child_id_ = cc::LocalSurfaceId();
diff --git a/base/trace_event/memory_dump_manager_unittest.cc b/base/trace_event/memory_dump_manager_unittest.cc
index 9806c50..fe1b2fe 100644
--- a/base/trace_event/memory_dump_manager_unittest.cc
+++ b/base/trace_event/memory_dump_manager_unittest.cc
@@ -980,17 +980,17 @@
       .WillByDefault(Return());
 
   // Enabling memory-infra with the legacy TraceConfig (category filter) in
-  // a coordinator process should enable periodic dumps.
+  // a coordinator process should not enable periodic dumps.
   EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
-  EXPECT_TRUE(IsPeriodicDumpingEnabled());
+  EXPECT_FALSE(IsPeriodicDumpingEnabled());
   DisableTracing();
 
   // Enabling memory-infra with the new (JSON) TraceConfig in a coordinator
-  // process without specifying any "memory_dump_config" section should enable
+  // process while specifying a "memory_dump_config" section should enable
   // periodic dumps. This is to preserve the behavior chrome://tracing UI, that
-  // is: ticking memory-infra should dump periodically with the default config.
+  // is: ticking memory-infra should dump periodically with an explicit config.
   EnableTracingWithTraceConfig(
-      TraceConfigMemoryTestUtil::GetTraceConfig_NoTriggers());
+      TraceConfigMemoryTestUtil::GetTraceConfig_PeriodicTriggers(100, 5));
   EXPECT_TRUE(IsPeriodicDumpingEnabled());
   DisableTracing();
 
diff --git a/base/trace_event/trace_config.cc b/base/trace_event/trace_config.cc
index b6fefa9..e2e7b8f 100644
--- a/base/trace_event/trace_config.cc
+++ b/base/trace_event/trace_config.cc
@@ -51,11 +51,6 @@
 const char kFilterPredicateParam[] = "filter_predicate";
 const char kFilterArgsParam[] = "filter_args";
 
-// Default configuration of memory dumps.
-const TraceConfig::MemoryDumpConfig::Trigger kDefaultMemoryDumpTrigger = {
-    5000,  // min_time_between_dumps_ms
-    MemoryDumpLevelOfDetail::DETAILED, MemoryDumpType::PERIODIC_INTERVAL};
-
 class ConvertableTraceConfigToTraceFormat
     : public base::trace_event::ConvertableToTraceFormat {
  public:
@@ -459,7 +454,6 @@
 
 void TraceConfig::SetDefaultMemoryDumpConfig() {
   memory_dump_config_.Clear();
-  memory_dump_config_.triggers.push_back(kDefaultMemoryDumpTrigger);
   memory_dump_config_.allowed_dump_modes = GetDefaultAllowedMemoryDumpModes();
 }
 
diff --git a/base/trace_event/trace_config_unittest.cc b/base/trace_event/trace_config_unittest.cc
index 57c36dc1..76377011 100644
--- a/base/trace_event/trace_config_unittest.cc
+++ b/base/trace_event/trace_config_unittest.cc
@@ -697,7 +697,7 @@
   TraceConfig tc(MemoryDumpManager::kTraceCategory, "");
   EXPECT_TRUE(tc.IsCategoryGroupEnabled(MemoryDumpManager::kTraceCategory));
   EXPECT_NE(std::string::npos, tc.ToString().find("memory_dump_config"));
-  EXPECT_EQ(1u, tc.memory_dump_config().triggers.size());
+  EXPECT_EQ(0u, tc.memory_dump_config().triggers.size());
   EXPECT_EQ(
       TraceConfig::MemoryDumpConfig::HeapProfiler ::
           kDefaultBreakdownThresholdBytes,
diff --git a/build/build_config.h b/build/build_config.h
index 30c5783b..8e5fcd7d 100644
--- a/build/build_config.h
+++ b/build/build_config.h
@@ -66,6 +66,8 @@
 #else
 #error Please add support for your platform in build/build_config.h
 #endif
+// NOTE: Adding a new port? Please follow
+// https://chromium.googlesource.com/chromium/src/+/master/docs/new_port_policy.md
 
 #if defined(USE_OPENSSL_CERTS) && defined(USE_NSS_CERTS)
 #error Cannot use both OpenSSL and NSS for certificates
diff --git a/cc/surfaces/BUILD.gn b/cc/surfaces/BUILD.gn
index aab34d2..352d636b 100644
--- a/cc/surfaces/BUILD.gn
+++ b/cc/surfaces/BUILD.gn
@@ -60,6 +60,8 @@
     "surface.h",
     "surface_aggregator.cc",
     "surface_aggregator.h",
+    "surface_dependency_deadline.cc",
+    "surface_dependency_deadline.h",
     "surface_dependency_tracker.cc",
     "surface_dependency_tracker.h",
     "surface_hittest.cc",
diff --git a/cc/surfaces/surface_dependency_deadline.cc b/cc/surfaces/surface_dependency_deadline.cc
new file mode 100644
index 0000000..7bdbefcc
--- /dev/null
+++ b/cc/surfaces/surface_dependency_deadline.cc
@@ -0,0 +1,55 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "cc/surfaces/surface_dependency_deadline.h"
+
+#include "cc/surfaces/surface_dependency_tracker.h"
+
+namespace cc {
+
+SurfaceDependencyDeadline::SurfaceDependencyDeadline(
+    SurfaceDependencyTracker* dependency_tracker,
+    BeginFrameSource* begin_frame_source)
+    : dependency_tracker_(dependency_tracker),
+      begin_frame_source_(begin_frame_source) {
+  DCHECK(begin_frame_source_);
+}
+
+SurfaceDependencyDeadline::~SurfaceDependencyDeadline() {
+  // The deadline must be canceled before destruction.
+  DCHECK(!number_of_frames_to_deadline_);
+}
+
+void SurfaceDependencyDeadline::Set(uint32_t number_of_frames_to_deadline) {
+  DCHECK_GT(number_of_frames_to_deadline, 0u);
+  DCHECK(!number_of_frames_to_deadline_);
+  number_of_frames_to_deadline_ = number_of_frames_to_deadline;
+  begin_frame_source_->AddObserver(this);
+}
+
+void SurfaceDependencyDeadline::Cancel() {
+  if (!number_of_frames_to_deadline_)
+    return;
+  begin_frame_source_->RemoveObserver(this);
+  number_of_frames_to_deadline_.reset();
+}
+
+// BeginFrameObserver implementation.
+void SurfaceDependencyDeadline::OnBeginFrame(const BeginFrameArgs& args) {
+  last_begin_frame_args_ = args;
+  if (--(*number_of_frames_to_deadline_) > 0)
+    return;
+
+  Cancel();
+  dependency_tracker_->OnDeadline();
+}
+
+const BeginFrameArgs& SurfaceDependencyDeadline::LastUsedBeginFrameArgs()
+    const {
+  return last_begin_frame_args_;
+}
+
+void SurfaceDependencyDeadline::OnBeginFrameSourcePausedChanged(bool paused) {}
+
+}  // namespace cc
diff --git a/cc/surfaces/surface_dependency_deadline.h b/cc/surfaces/surface_dependency_deadline.h
new file mode 100644
index 0000000..f226bd0
--- /dev/null
+++ b/cc/surfaces/surface_dependency_deadline.h
@@ -0,0 +1,44 @@
+// 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 CC_SURFACES_SURFACE_DEPENDENCY_DEADLINE_H_
+#define CC_SURFACES_SURFACE_DEPENDENCY_DEADLINE_H_
+
+#include "cc/scheduler/begin_frame_source.h"
+
+namespace cc {
+
+class SurfaceDependencyTracker;
+
+class SurfaceDependencyDeadline : public BeginFrameObserver {
+ public:
+  SurfaceDependencyDeadline(SurfaceDependencyTracker* dependency_tracker,
+                            BeginFrameSource* begin_frame_source);
+  ~SurfaceDependencyDeadline() override;
+
+  void Set(uint32_t number_of_frames_to_deadline);
+  void Cancel();
+
+  bool has_deadline() const {
+    return number_of_frames_to_deadline_.has_value();
+  }
+
+  // BeginFrameObserver implementation.
+  void OnBeginFrame(const BeginFrameArgs& args) override;
+  const BeginFrameArgs& LastUsedBeginFrameArgs() const override;
+  void OnBeginFrameSourcePausedChanged(bool paused) override;
+
+ private:
+  SurfaceDependencyTracker* const dependency_tracker_;
+  BeginFrameSource* begin_frame_source_ = nullptr;
+  base::Optional<uint32_t> number_of_frames_to_deadline_;
+
+  BeginFrameArgs last_begin_frame_args_;
+
+  DISALLOW_COPY_AND_ASSIGN(SurfaceDependencyDeadline);
+};
+
+}  // namespace cc
+
+#endif  // CC_SURFACES_SURFACE_DEPENDENCY_DEADLINE_H_
diff --git a/cc/surfaces/surface_dependency_tracker.cc b/cc/surfaces/surface_dependency_tracker.cc
index 3b37d6c..8540aab 100644
--- a/cc/surfaces/surface_dependency_tracker.cc
+++ b/cc/surfaces/surface_dependency_tracker.cc
@@ -17,13 +17,10 @@
 SurfaceDependencyTracker::SurfaceDependencyTracker(
     SurfaceManager* surface_manager,
     BeginFrameSource* begin_frame_source)
-    : surface_manager_(surface_manager),
-      begin_frame_source_(begin_frame_source) {
-  begin_frame_source_->AddObserver(this);
-}
+    : surface_manager_(surface_manager), deadline_(this, begin_frame_source) {}
 
 SurfaceDependencyTracker::~SurfaceDependencyTracker() {
-  begin_frame_source_->RemoveObserver(this);
+  deadline_.Cancel();
 }
 
 void SurfaceDependencyTracker::RequestSurfaceResolution(Surface* surface) {
@@ -51,8 +48,8 @@
 
   blocked_surfaces_by_id_.insert(surface->surface_id());
 
-  if (needs_deadline && !frames_since_deadline_set_)
-    frames_since_deadline_set_ = 0;
+  if (needs_deadline && !deadline_.has_deadline())
+    deadline_.Set(kMaxBeginFrameCount);
 }
 
 void SurfaceDependencyTracker::OnSurfaceActivated(Surface* surface) {
@@ -79,7 +76,7 @@
   // If there are no more dependencies to resolve then we don't need to have a
   // deadline.
   if (blocked_surfaces_from_dependency_.empty())
-    frames_since_deadline_set_.reset();
+    deadline_.Cancel();
 }
 
 void SurfaceDependencyTracker::OnSurfaceDiscarded(Surface* surface) {
@@ -109,7 +106,7 @@
   }
 
   if (blocked_surfaces_from_dependency_.empty())
-    frames_since_deadline_set_.reset();
+    deadline_.Cancel();
 
   blocked_surfaces_by_id_.erase(surface->surface_id());
 
@@ -118,20 +115,7 @@
   NotifySurfaceIdAvailable(surface->surface_id());
 }
 
-void SurfaceDependencyTracker::OnBeginFrame(const BeginFrameArgs& args) {
-  // If no deadline is set then we have nothing to do.
-  if (!frames_since_deadline_set_)
-    return;
-
-  // TODO(fsamuel, kylechar): We have a single global deadline here. We should
-  // scope deadlines to surface subtrees. We cannot do that until
-  // SurfaceReferences have been fully implemented
-  // (see https://crbug.com/689719).
-  last_begin_frame_args_ = args;
-  // Nothing to do if we haven't hit a deadline yet.
-  if (++(*frames_since_deadline_set_) != kMaxBeginFrameCount)
-    return;
-
+void SurfaceDependencyTracker::OnDeadline() {
   late_surfaces_by_id_.clear();
 
   // Activate all surfaces that respect the deadline.
@@ -158,16 +142,8 @@
     }
     blocked_surface->ActivatePendingFrameForDeadline();
   }
-
-  frames_since_deadline_set_.reset();
 }
 
-const BeginFrameArgs& SurfaceDependencyTracker::LastUsedBeginFrameArgs() const {
-  return last_begin_frame_args_;
-}
-
-void SurfaceDependencyTracker::OnBeginFrameSourcePausedChanged(bool paused) {}
-
 void SurfaceDependencyTracker::NotifySurfaceIdAvailable(
     const SurfaceId& surface_id) {
   auto it = blocked_surfaces_from_dependency_.find(surface_id);
@@ -180,7 +156,7 @@
   // If there are no more blockers in the system, then we no longer need to
   // have a deadline.
   if (blocked_surfaces_from_dependency_.empty())
-    frames_since_deadline_set_.reset();
+    deadline_.Cancel();
 
   // Tell each surface about the availability of its blocker.
   for (const SurfaceId& blocked_surface_by_id : blocked_surfaces_by_id) {
diff --git a/cc/surfaces/surface_dependency_tracker.h b/cc/surfaces/surface_dependency_tracker.h
index f5bab83..45b543c 100644
--- a/cc/surfaces/surface_dependency_tracker.h
+++ b/cc/surfaces/surface_dependency_tracker.h
@@ -5,12 +5,13 @@
 #ifndef CC_SURFACES_SURFACE_DEPENDENCY_TRACKER_H_
 #define CC_SURFACES_SURFACE_DEPENDENCY_TRACKER_H_
 
-#include "cc/scheduler/begin_frame_source.h"
 #include "cc/surfaces/surface.h"
+#include "cc/surfaces/surface_dependency_deadline.h"
 #include "cc/surfaces/surfaces_export.h"
 
 namespace cc {
 
+class BeginFrameSource;
 class SurfaceManager;
 
 // SurfaceDependencyTracker tracks unresolved dependencies blocking
@@ -28,17 +29,19 @@
 // TODO(fsamuel): Deadlines should not be global. They should be scoped to a
 // surface subtree. However, that will not be possible until SurfaceReference
 // work is complete.
-class CC_SURFACES_EXPORT SurfaceDependencyTracker : public BeginFrameObserver {
+class CC_SURFACES_EXPORT SurfaceDependencyTracker {
  public:
   SurfaceDependencyTracker(SurfaceManager* surface_manager,
                            BeginFrameSource* begin_frame_source);
-  ~SurfaceDependencyTracker() override;
+  ~SurfaceDependencyTracker();
 
   // Called when |surface| has a pending CompositorFrame and it wishes to be
   // informed when that surface's dependencies are resolved.
   void RequestSurfaceResolution(Surface* surface);
 
-  bool has_deadline() const { return frames_since_deadline_set_.has_value(); }
+  bool has_deadline() const { return deadline_.has_deadline(); }
+
+  void OnDeadline();
 
   void OnSurfaceActivated(Surface* surface);
   void OnSurfaceDependenciesChanged(
@@ -47,11 +50,6 @@
       const base::flat_set<SurfaceId>& removed_dependencies);
   void OnSurfaceDiscarded(Surface* surface);
 
-  // BeginFrameObserver implementation.
-  void OnBeginFrame(const BeginFrameArgs& args) override;
-  const BeginFrameArgs& LastUsedBeginFrameArgs() const override;
-  void OnBeginFrameSourcePausedChanged(bool paused) override;
-
  private:
   // Informs all Surfaces with pending frames blocked on the provided
   // |surface_id| that there is now an active frame available in Surface
@@ -60,15 +58,9 @@
 
   SurfaceManager* const surface_manager_;
 
-  // The last begin frame args generated by the begin frame source.
-  BeginFrameArgs last_begin_frame_args_;
-
-  // The BeginFrameSource used to set deadlines.
-  BeginFrameSource* const begin_frame_source_;
-
-  // The number of BeginFrames observed since a deadline was set. If
-  // base::nullopt_t then a deadline is not set.
-  base::Optional<uint32_t> frames_since_deadline_set_;
+  // This object tracks the deadline when all pending CompositorFrames in the
+  // system will be activated.
+  SurfaceDependencyDeadline deadline_;
 
   // A map from a SurfaceId to the set of Surfaces blocked on that SurfaceId.
   std::unordered_map<SurfaceId, base::flat_set<SurfaceId>, SurfaceIdHash>
diff --git a/chrome/android/java/res/layout/accessibility_tab_switcher.xml b/chrome/android/java/res/layout/accessibility_tab_switcher.xml
index 40237828..82bfb23 100644
--- a/chrome/android/java/res/layout/accessibility_tab_switcher.xml
+++ b/chrome/android/java/res/layout/accessibility_tab_switcher.xml
@@ -38,7 +38,7 @@
             android:layout_weight="1"
             android:background="@drawable/btn_bg_holo_active"
             android:src="@drawable/btn_normal_tabs"
-            chrome:tint="@color/light_mode_tint"
+            chrome:chrometint="@color/light_mode_tint"
             android:contentDescription="@string/accessibility_tab_switcher_standard_stack"
             style="?android:attr/borderlessButtonStyle" />
 
@@ -54,7 +54,7 @@
             android:layout_height="wrap_content"
             android:layout_weight="1"
             android:src="@drawable/btn_incognito_tabs"
-            chrome:tint="@color/light_mode_tint"
+            chrome:chrometint="@color/light_mode_tint"
             android:background="@drawable/btn_bg_holo"
             android:contentDescription="@string/accessibility_tab_switcher_incognito_stack"
             style="?android:attr/borderlessButtonStyle" />
diff --git a/chrome/android/java/res/layout/accessibility_tab_switcher_list_item.xml b/chrome/android/java/res/layout/accessibility_tab_switcher_list_item.xml
index 66addb2..f8957e7 100644
--- a/chrome/android/java/res/layout/accessibility_tab_switcher_list_item.xml
+++ b/chrome/android/java/res/layout/accessibility_tab_switcher_list_item.xml
@@ -51,7 +51,7 @@
             android:background="?attr/selectableItemBackground"
             android:contentDescription="@string/accessibility_tabstrip_btn_close_tab"
             android:src="@drawable/btn_close"
-            chrome:tint="@color/light_mode_tint"
+            chrome:chrometint="@color/light_mode_tint"
             android:gravity="end|center_vertical" />
     </LinearLayout>
 
diff --git a/chrome/android/java/res/layout/bookmark_row_content.xml b/chrome/android/java/res/layout/bookmark_row_content.xml
index d16453b..30f8c4b 100644
--- a/chrome/android/java/res/layout/bookmark_row_content.xml
+++ b/chrome/android/java/res/layout/bookmark_row_content.xml
@@ -45,7 +45,7 @@
             android:paddingEnd="16dp"
             android:paddingStart="16dp"
             android:src="@drawable/btn_menu"
-            chrome:tint="@color/dark_mode_tint" />
+            chrome:chrometint="@color/dark_mode_tint" />
     </LinearLayout>
 
 </merge>
diff --git a/chrome/android/java/res/layout/chrome_home_incognito_new_tab_page.xml b/chrome/android/java/res/layout/chrome_home_incognito_new_tab_page.xml
index 346a586..6a35d9c 100644
--- a/chrome/android/java/res/layout/chrome_home_incognito_new_tab_page.xml
+++ b/chrome/android/java/res/layout/chrome_home_incognito_new_tab_page.xml
@@ -20,7 +20,7 @@
         android:src="@drawable/btn_close"
         android:scaleType="center"
         android:background="@android:color/transparent"
-        chrome:tint="@color/light_mode_tint" />
+        chrome:chrometint="@color/light_mode_tint" />
 
     <LinearLayout
         android:layout_width="match_parent"
diff --git a/chrome/android/java/res/layout/chrome_home_new_tab_page.xml b/chrome/android/java/res/layout/chrome_home_new_tab_page.xml
index 559617f..2c8167c 100644
--- a/chrome/android/java/res/layout/chrome_home_new_tab_page.xml
+++ b/chrome/android/java/res/layout/chrome_home_new_tab_page.xml
@@ -20,7 +20,7 @@
         android:src="@drawable/btn_close"
         android:scaleType="center"
         android:background="@android:color/transparent"
-        chrome:tint="@color/dark_mode_tint" />
+        chrome:chrometint="@color/dark_mode_tint" />
 
     <LinearLayout
         android:layout_width="match_parent"
diff --git a/chrome/android/java/res/layout/clear_storage.xml b/chrome/android/java/res/layout/clear_storage.xml
index 7a3a587..f8a8d720 100644
--- a/chrome/android/java/res/layout/clear_storage.xml
+++ b/chrome/android/java/res/layout/clear_storage.xml
@@ -10,4 +10,4 @@
     android:layout_height="wrap_content"
     android:contentDescription="@string/webstorage_clear_data_dialog_title"
     android:src="@drawable/btn_trash"
-    chrome:tint="@color/blue_mode_tint"/>
+    chrome:chrometint="@color/blue_mode_tint"/>
diff --git a/chrome/android/java/res/layout/download_item_view.xml b/chrome/android/java/res/layout/download_item_view.xml
index 64447c3..abb421ce 100644
--- a/chrome/android/java/res/layout/download_item_view.xml
+++ b/chrome/android/java/res/layout/download_item_view.xml
@@ -106,7 +106,7 @@
                     android:background="?attr/selectableItemBackground"
                     android:contentDescription="@string/download_notification_pause_button"
                     android:src="@drawable/ic_pause_white_24dp"
-                    chrome:tint="@color/google_grey_600" />
+                    chrome:chrometint="@color/google_grey_600" />
 
             <org.chromium.chrome.browser.widget.TintedImageButton
                     android:id="@+id/cancel_button"
@@ -119,7 +119,7 @@
                     android:background="?attr/selectableItemBackground"
                     android:contentDescription="@string/download_notification_cancel_button"
                     android:src="@drawable/btn_close"
-                    chrome:tint="@color/google_grey_600" />
+                    chrome:chrometint="@color/google_grey_600" />
         </RelativeLayout>
     </LinearLayout>
 </view>
diff --git a/chrome/android/java/res/layout/empty_background_view_tablet.xml b/chrome/android/java/res/layout/empty_background_view_tablet.xml
index b2315d6b..92c90b3a 100644
--- a/chrome/android/java/res/layout/empty_background_view_tablet.xml
+++ b/chrome/android/java/res/layout/empty_background_view_tablet.xml
@@ -52,7 +52,7 @@
             android:scaleType="center"
             android:contentDescription="@string/accessibility_toolbar_btn_menu"
             android:paddingStart="2dp"
-            chrome:tint="@color/light_mode_tint"
+            chrome:chrometint="@color/light_mode_tint"
             />
     </LinearLayout>
 </org.chromium.chrome.browser.widget.emptybackground.EmptyBackgroundViewTablet>
diff --git a/chrome/android/java/res/layout/history_item_view.xml b/chrome/android/java/res/layout/history_item_view.xml
index 95fdadb..a01eb443 100644
--- a/chrome/android/java/res/layout/history_item_view.xml
+++ b/chrome/android/java/res/layout/history_item_view.xml
@@ -61,7 +61,7 @@
             style="@style/HistoryEndIcon"
             android:contentDescription="@string/remove"
             android:src="@drawable/btn_trash"
-            chrome:tint="@color/dark_mode_tint" />
+            chrome:chrometint="@color/dark_mode_tint" />
     </LinearLayout>
 
 </org.chromium.chrome.browser.history.HistoryItemView>
\ No newline at end of file
diff --git a/chrome/android/java/res/layout/icon_row_menu_footer.xml b/chrome/android/java/res/layout/icon_row_menu_footer.xml
index ca37c40b..92db4c2 100644
--- a/chrome/android/java/res/layout/icon_row_menu_footer.xml
+++ b/chrome/android/java/res/layout/icon_row_menu_footer.xml
@@ -25,34 +25,34 @@
             style="@style/OverflowMenuButton"
             android:src="@drawable/btn_forward"
             android:contentDescription="@string/accessibility_menu_forward"
-            chrome:tint="@color/app_menu_button_tint" />
+            chrome:chrometint="@color/app_menu_button_tint" />
 
         <org.chromium.chrome.browser.widget.TintedImageButton
             android:id="@+id/bookmark_this_page_id"
             style="@style/OverflowMenuButton"
             android:src="@drawable/btn_star"
             android:contentDescription="@string/accessibility_menu_bookmark"
-            chrome:tint="@color/app_menu_button_tint" />
+            chrome:chrometint="@color/app_menu_button_tint" />
 
         <org.chromium.chrome.browser.widget.TintedImageButton
             android:id="@+id/offline_page_id"
             style="@style/OverflowMenuButton"
             android:src="@drawable/ic_file_download_white_24dp"
             android:contentDescription="@string/download_page"
-            chrome:tint="@color/app_menu_button_tint" />
+            chrome:chrometint="@color/app_menu_button_tint" />
 
         <org.chromium.chrome.browser.widget.TintedImageButton
             android:id="@+id/info_menu_id"
             style="@style/OverflowMenuButton"
             android:src="@drawable/btn_info"
             android:contentDescription="@string/accessibility_menu_info"
-            chrome:tint="@color/app_menu_button_tint" />
+            chrome:chrometint="@color/app_menu_button_tint" />
 
         <org.chromium.chrome.browser.widget.TintedImageButton
             android:id="@+id/reload_menu_id"
             style="@style/OverflowMenuButton"
             android:src="@drawable/btn_reload_stop"
             android:contentDescription="@string/accessibility_btn_refresh"
-            chrome:tint="@color/app_menu_button_tint" />
+            chrome:chrometint="@color/app_menu_button_tint" />
     </LinearLayout>
 </org.chromium.chrome.browser.appmenu.AppMenuIconRowFooter>
\ No newline at end of file
diff --git a/chrome/android/java/res/layout/infobar_translate_compact_content.xml b/chrome/android/java/res/layout/infobar_translate_compact_content.xml
index 0f14a687..7b4c536c 100644
--- a/chrome/android/java/res/layout/infobar_translate_compact_content.xml
+++ b/chrome/android/java/res/layout/infobar_translate_compact_content.xml
@@ -33,5 +33,5 @@
         android:background="?attr/selectableItemBackground"
         android:contentDescription="@string/accessibility_toolbar_btn_menu"
         android:src="@drawable/btn_menu"
-        app:tint="@color/dark_mode_tint" />
+        app:chrometint="@color/dark_mode_tint" />
 </LinearLayout>
diff --git a/chrome/android/java/res/layout/new_tab_page_footer.xml b/chrome/android/java/res/layout/new_tab_page_footer.xml
index 21969207..145b2e88 100644
--- a/chrome/android/java/res/layout/new_tab_page_footer.xml
+++ b/chrome/android/java/res/layout/new_tab_page_footer.xml
@@ -24,6 +24,5 @@
         android:layout_height="wrap_content"
         android:layout_gravity="center"
         android:textColor="@color/snippets_text_color"
-        android:textSize="12sp"
-        android:textStyle="italic"/>
+        android:textSize="12sp"/>
 </FrameLayout>
\ No newline at end of file
diff --git a/chrome/android/java/res/layout/new_tab_page_snippets_card.xml b/chrome/android/java/res/layout/new_tab_page_snippets_card.xml
index 8293159..73e6a8df 100644
--- a/chrome/android/java/res/layout/new_tab_page_snippets_card.xml
+++ b/chrome/android/java/res/layout/new_tab_page_snippets_card.xml
@@ -93,7 +93,7 @@
             android:src="@drawable/offline_pin_round"
             android:contentDescription="@string/accessibility_ntp_offline_badge"
             android:visibility="gone"
-            chrome:tint="#000" />
+            chrome:chrometint="#000" />
 
     </LinearLayout>
 
diff --git a/chrome/android/java/res/layout/search_toolbar.xml b/chrome/android/java/res/layout/search_toolbar.xml
index d4f4b466..c6dc6913 100644
--- a/chrome/android/java/res/layout/search_toolbar.xml
+++ b/chrome/android/java/res/layout/search_toolbar.xml
@@ -35,5 +35,5 @@
         android:scaleType="center"
         android:contentDescription="@string/accessibility_toolbar_btn_delete_url"
         android:visibility="invisible"
-        chrome:tint="@color/dark_mode_tint" />
+        chrome:chrometint="@color/dark_mode_tint" />
 </LinearLayout>
diff --git a/chrome/android/java/res/layout/tile_view.xml b/chrome/android/java/res/layout/tile_view.xml
index fb68c31..2ddd7a5 100644
--- a/chrome/android/java/res/layout/tile_view.xml
+++ b/chrome/android/java/res/layout/tile_view.xml
@@ -39,7 +39,7 @@
         android:visibility="gone"
         android:background="@drawable/offline_badge_background"
         android:contentDescription="@string/accessibility_ntp_offline_badge"
-        chrome:tint="@color/tile_view_offline_badge_tint"
+        chrome:chrometint="@color/tile_view_offline_badge_tint"
         android:src="@drawable/offline_pin_round" />
 
     <!-- The title. -->
diff --git a/chrome/android/java/res/layout/title_button_menu_item.xml b/chrome/android/java/res/layout/title_button_menu_item.xml
index d2e3c85..f993c84 100644
--- a/chrome/android/java/res/layout/title_button_menu_item.xml
+++ b/chrome/android/java/res/layout/title_button_menu_item.xml
@@ -31,5 +31,5 @@
         android:paddingTop="12dp"
         android:paddingBottom="12dp"
         android:scaleType="fitCenter"
-        chrome:tint="@null" />
+        chrome:chrometint="@null" />
 </LinearLayout>
\ No newline at end of file
diff --git a/chrome/android/java/res/layout/translate_menu_item_checked.xml b/chrome/android/java/res/layout/translate_menu_item_checked.xml
index cd7da130..39705a4 100644
--- a/chrome/android/java/res/layout/translate_menu_item_checked.xml
+++ b/chrome/android/java/res/layout/translate_menu_item_checked.xml
@@ -21,7 +21,7 @@
             android:layout_height="match_parent"
             android:layout_gravity="end"
             android:gravity="center_vertical"
-            chrome:tint="@color/dark_mode_tint" />
+            chrome:chrometint="@color/dark_mode_tint" />
         <TextView
             android:id="@+id/menu_item_text"
             android:textAppearance="?android:attr/textAppearanceLargePopupMenu"
diff --git a/chrome/android/java/res/values-v17/styles.xml b/chrome/android/java/res/values-v17/styles.xml
index a3b4155..7e56d48 100644
--- a/chrome/android/java/res/values-v17/styles.xml
+++ b/chrome/android/java/res/values-v17/styles.xml
@@ -30,7 +30,7 @@
         <item name="colorControlActivated">@color/light_active_color</item>
 
         <!-- Default TintedImageButton tint -->
-        <item name="tint">@color/dark_mode_tint</item>
+        <item name="chrometint">@color/dark_mode_tint</item>
 
         <!-- Navigation Transitions, requires API level 21 -->
         <item name="android:windowAllowEnterTransitionOverlap" tools:targetApi="21">false</item>
@@ -96,7 +96,7 @@
         <item name="colorPrimary">@color/light_active_color</item>
 
         <!-- Default TintedImageButton tint -->
-        <item name="tint">@color/dark_mode_tint</item>
+        <item name="chrometint">@color/dark_mode_tint</item>
     </style>
 
     <style name="SimpleDialog" parent="AlertDialogTheme">
diff --git a/chrome/android/java/res/values/attrs.xml b/chrome/android/java/res/values/attrs.xml
index e42d977c..068be72 100644
--- a/chrome/android/java/res/values/attrs.xml
+++ b/chrome/android/java/res/values/attrs.xml
@@ -5,7 +5,7 @@
 
 <resources>
     <declare-styleable name="TintedImage">
-        <attr name="tint" format="color" />
+        <attr name="chrometint" format="color" />
     </declare-styleable>
 
     <declare-styleable name="HyperlinkPreference">
diff --git a/chrome/android/java/res/values/colors.xml b/chrome/android/java/res/values/colors.xml
index 828ee59..9bac47030 100644
--- a/chrome/android/java/res/values/colors.xml
+++ b/chrome/android/java/res/values/colors.xml
@@ -73,10 +73,16 @@
     <color name="url_emphasis_light_non_emphasized_text">#80ffffff</color>
     <color name="url_emphasis_domain_and_registry">#333333</color>
     <color name="url_emphasis_light_domain_and_registry">#ffffff</color>
-    <color name="url_emphasis_default_text">#333333</color>
+    <color name="url_emphasis_default_text">@color/black_alpha_87</color>
     <!--suppress UnusedResources -->
     <color name="url_emphasis_light_default_text">#ffffff</color>
 
+    <!-- Omnibox Suggestion colors -->
+    <color name="suggestion_url">@color/google_blue_700</color>
+    <color name="answers_description_text_negative">@color/google_red_700</color>
+    <color name="answers_description_text_positive">@color/google_green_700</color>
+    <color name="answers_answer_text">#8a8a8a</color>
+
     <!--  Distilled Page Prefs colors -->
     <color name="distilled_page_prefs_selected">#999999</color>
     <color name="distilled_page_prefs_unselected">#ffffff</color>
@@ -96,7 +102,7 @@
     <color name="data_reduction_breakdown_light_text_color">#737373</color>
 
     <!-- Compositor Tab Title Colors -->
-    <color name="compositor_tab_title_bar_text">#A3000000</color>
+    <color name="compositor_tab_title_bar_text">@color/black_alpha_87</color>
     <color name="compositor_tab_title_bar_text_incognito">#FFFFFFFF</color>
 
     <!-- First Run Experience Colors -->
@@ -133,7 +139,7 @@
     <color name="incognito_header">#ccffffff</color>
 
     <!-- Site suggestion tile colors. -->
-    <color name="tile_view_text">#6f6f6f</color>
+    <color name="tile_view_text">@color/black_alpha_54</color>
     <color name="tile_view_offline_badge_tint">#4285f4</color>
 
     <!-- Contextual Search colors -->
@@ -152,10 +158,10 @@
     <color name="incognito_primary_color">#505050</color>
 
     <!-- LocationBar colors -->
-    <color name="locationbar_dark_hint_text">#969696</color>
+    <color name="locationbar_dark_hint_text">@color/black_alpha_38</color>
     <color name="locationbar_light_hint_text">@color/white_alpha_70</color>
     <color name="locationbar_light_selection_color">#cc5595fe</color>
-    <color name="locationbar_status_color">@color/light_normal_color</color>
+    <color name="locationbar_status_color">@color/black_alpha_54</color>
     <color name="locationbar_status_color_light">#ffffff</color>
     <color name="locationbar_status_separator_color">#3d000000</color>
     <color name="locationbar_status_separator_color_light">#3dffffff</color>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/instantapps/InstantAppsHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/instantapps/InstantAppsHandler.java
index 455538f..c37871d 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/instantapps/InstantAppsHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/instantapps/InstantAppsHandler.java
@@ -299,7 +299,7 @@
         if (InstantAppsSettings.isInstantAppDefault(tab.getWebContents(), url)) {
             return launchInstantAppForNavigation(context, url, referrer);
         }
-        return startCheckForInstantApps(context, url, referrer, tab.getWebContents());
+        return startCheckForInstantApps(context, url, referrer, tab);
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/OWNERS b/chrome/android/java/src/org/chromium/chrome/browser/notifications/OWNERS
index 97e3fd4..b72822a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/OWNERS
+++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/OWNERS
@@ -8,14 +8,5 @@
 miguelg@chromium.org
 peter@chromium.org
 
-# Notification channels appear in system UI and are persisted forever by Android, so should not be
-# added or removed lightly, and the proper deprecation and versioning steps must be taken when doing
-# so. Please read the file comments and speak to one of us when adding/removing a channel.
-per-file ChannelDefinitions.java=set noparent
-per-file ChannelDefinitions.java=awdf@chromium.org
-per-file ChannelDefinitions.java=peter@chromium.org
-per-file ChannelDefinitions.java=nyquist@chromium.org
-per-file ChannelDefinitions.java=dtrainor@chromium.org
-
 # TEAM: platform-capabilities@chromium.org
 # COMPONENT: UI>Notifications
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/channels/OWNERS b/chrome/android/java/src/org/chromium/chrome/browser/notifications/channels/OWNERS
new file mode 100644
index 0000000..fc34579
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/channels/OWNERS
@@ -0,0 +1,11 @@
+# Notification channels appear in system UI and are persisted forever by Android, so should not be
+# added or removed lightly, and the proper deprecation and versioning steps must be taken when doing
+# so. Please read the README and speak to one of us when adding/removing a channel.
+per-file ChannelDefinitions.java=set noparent
+per-file ChannelDefinitions.java=awdf@chromium.org
+per-file ChannelDefinitions.java=peter@chromium.org
+per-file ChannelDefinitions.java=nyquist@chromium.org
+per-file ChannelDefinitions.java=dtrainor@chromium.org
+
+# TEAM: platform-capabilities@chromium.org
+# COMPONENT: UI>Notifications
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/AnswerTextBuilder.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/AnswerTextBuilder.java
index c287471e..02040a3 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/AnswerTextBuilder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/AnswerTextBuilder.java
@@ -4,6 +4,7 @@
 
 package org.chromium.chrome.browser.omnibox;
 
+import android.content.res.Resources;
 import android.graphics.Paint;
 import android.text.Html;
 import android.text.Spannable;
@@ -14,6 +15,10 @@
 import android.text.style.MetricAffectingSpan;
 import android.util.Log;
 
+import org.chromium.base.ApiCompatibilityUtils;
+import org.chromium.base.ContextUtils;
+import org.chromium.chrome.R;
+
 import java.util.List;
 
 /**
@@ -55,21 +60,6 @@
     private static final int ANSWERS_SECONDARY_TEXT_SMALL_SIZE_SP = 12;
     private static final int ANSWERS_SECONDARY_TEXT_MEDIUM_SIZE_SP = 14;
 
-    private static final int ANSWERS_TOP_ALIGNED_TEXT_COLOR = 0xFF8A8A8A;
-    // These two colors deviate from the AIS spec because they provide better
-    // contrast over the background in Chrome, but they do come from the
-    // Google pallette.
-    private static final int ANSWERS_DESCRIPTION_TEXT_NEGATIVE_COLOR = 0xFFC53929;
-    private static final int ANSWERS_DESCRIPTION_TEXT_POSITIVE_COLOR = 0xFF0B8043;
-    private static final int ANSWERS_SUGGESTION_TEXT_COLOR =
-            SuggestionView.TITLE_COLOR_STANDARD_FONT_DARK;
-    private static final int ANSWERS_PERSONALIZED_SUGGESTION_TEXT_COLOR =
-            SuggestionView.TITLE_COLOR_STANDARD_FONT_DARK;
-    private static final int ANSWERS_ANSWER_TEXT_MEDIUM_COLOR = 0xFF8A8A8A;
-    private static final int ANSWERS_ANSWER_TEXT_LARGE_COLOR = 0xFF8A8A8A;
-    private static final int ANSWERS_SECONDARY_TEXT_SMALL_COLOR = 0xFF8A8A8A;
-    private static final int ANSWERS_SECONDARY_TEXT_MEDIUM_COLOR = 0xFF8A8A8A;
-
     /**
      * Builds a Spannable containing all of the styled text in the supplied ImageLine.
      *
@@ -217,28 +207,32 @@
      * @param type The answer type as specified at http://goto.google.com/ais_api.
      */
     private static int getAnswerTextColor(int type) {
+        Resources resources = ContextUtils.getApplicationContext().getResources();
         switch (type) {
-            case ANSWERS_TOP_ALIGNED_TEXT_TYPE:
-                return ANSWERS_TOP_ALIGNED_TEXT_COLOR;
             case ANSWERS_DESCRIPTION_TEXT_NEGATIVE_TYPE:
-                return ANSWERS_DESCRIPTION_TEXT_NEGATIVE_COLOR;
+                return ApiCompatibilityUtils.getColor(
+                        resources, R.color.answers_description_text_negative);
+
             case ANSWERS_DESCRIPTION_TEXT_POSITIVE_TYPE:
-                return ANSWERS_DESCRIPTION_TEXT_POSITIVE_COLOR;
+                return ApiCompatibilityUtils.getColor(
+                        resources, R.color.answers_description_text_positive);
+
             case ANSWERS_SUGGESTION_TEXT_TYPE:
-                return ANSWERS_SUGGESTION_TEXT_COLOR;
+                return ApiCompatibilityUtils.getColor(resources, R.color.url_emphasis_default_text);
+
             case ANSWERS_PERSONALIZED_SUGGESTION_TEXT_TYPE:
-                return ANSWERS_PERSONALIZED_SUGGESTION_TEXT_COLOR;
+                return ApiCompatibilityUtils.getColor(resources, R.color.url_emphasis_default_text);
+
+            case ANSWERS_TOP_ALIGNED_TEXT_TYPE:
             case ANSWERS_ANSWER_TEXT_MEDIUM_TYPE:
-                return ANSWERS_ANSWER_TEXT_MEDIUM_COLOR;
             case ANSWERS_ANSWER_TEXT_LARGE_TYPE:
-                return ANSWERS_ANSWER_TEXT_LARGE_COLOR;
             case ANSWERS_SECONDARY_TEXT_SMALL_TYPE:
-                return ANSWERS_SECONDARY_TEXT_SMALL_COLOR;
             case ANSWERS_SECONDARY_TEXT_MEDIUM_TYPE:
-                return ANSWERS_SECONDARY_TEXT_MEDIUM_COLOR;
+                return ApiCompatibilityUtils.getColor(resources, R.color.answers_answer_text);
+
             default:
                 Log.w(TAG, "Unknown answer type: " + type);
-                return ANSWERS_SUGGESTION_TEXT_COLOR;
+                return ApiCompatibilityUtils.getColor(resources, R.color.url_emphasis_default_text);
         }
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/SuggestionView.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/SuggestionView.java
index a3c9108..4ec51cc7 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/SuggestionView.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/SuggestionView.java
@@ -7,6 +7,7 @@
 import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.DialogInterface;
+import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
@@ -69,10 +70,6 @@
 
     private static final long RELAYOUT_DELAY_MS = 20;
 
-    static final int TITLE_COLOR_STANDARD_FONT_DARK = 0xFF333333;
-    private static final int TITLE_COLOR_STANDARD_FONT_LIGHT = 0xFFFFFFFF;
-    private static final int URL_COLOR = 0xFF5595FE;
-
     private static final float ANSWER_IMAGE_SCALING_FACTOR = 1.15f;
 
     private final LocationBar mLocationBar;
@@ -83,6 +80,10 @@
     private final int mSuggestionAnswerHeight;
     private int mNumAnswerLines = 1;
 
+    private final int mDarkTitleColorStandardFont;
+    private final int mLightTitleColorStandardFont;
+    private final int mUrlColor;
+
     private OmniboxResultItem mSuggestionItem;
     private OmniboxSuggestion mSuggestion;
     private OmniboxSuggestionDelegate mSuggestionDelegate;
@@ -117,6 +118,13 @@
                 context.getResources().getDimensionPixelOffset(
                         R.dimen.omnibox_suggestion_answer_height);
 
+        Resources resources = getResources();
+        mDarkTitleColorStandardFont =
+                ApiCompatibilityUtils.getColor(resources, R.color.url_emphasis_default_text);
+        mLightTitleColorStandardFont =
+                ApiCompatibilityUtils.getColor(resources, R.color.url_emphasis_light_default_text);
+        mUrlColor = ApiCompatibilityUtils.getColor(resources, R.color.suggestion_url);
+
         TypedArray a = getContext().obtainStyledAttributes(
                 new int [] {R.attr.selectableItemBackground});
         Drawable itemBackground = a.getDrawable(0);
@@ -372,8 +380,8 @@
     }
 
     private int getStandardFontColor() {
-        return (mUseDarkColors == null || mUseDarkColors)
-                ? TITLE_COLOR_STANDARD_FONT_DARK : TITLE_COLOR_STANDARD_FONT_LIGHT;
+        return (mUseDarkColors == null || mUseDarkColors) ? mDarkTitleColorStandardFont
+                                                          : mLightTitleColorStandardFont;
     }
 
     @Override
@@ -455,7 +463,7 @@
 
         // Force left-to-right rendering for URLs. See UrlBar constructor for details.
         if (isUrl) {
-            textLine.setTextColor(URL_COLOR);
+            textLine.setTextColor(mUrlColor);
             ApiCompatibilityUtils.setTextDirection(textLine, TEXT_DIRECTION_LTR);
         } else {
             textLine.setTextColor(getStandardFontColor());
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/TintedDrawable.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/TintedDrawable.java
index 1c7a0b8..15fc3180 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/widget/TintedDrawable.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/TintedDrawable.java
@@ -16,7 +16,7 @@
 
 /**
  * Implementation of BitmapDrawable that allows to tint the color of the drawable for all
- * bitmap drawable states using chrome:tint attribute in XML.
+ * bitmap drawable states.
  */
 public class TintedDrawable extends BitmapDrawable {
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/TintedImageButton.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/TintedImageButton.java
index 139d14e..8d848e05 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/widget/TintedImageButton.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/TintedImageButton.java
@@ -15,7 +15,7 @@
 
 /**
  * Implementation of ImageButton that allows to tint the color of the image button for all
- * image button states using chrome:tint attribute in XML.
+ * image button states using chrome:chrometint attribute in XML.
  */
 public class TintedImageButton extends ImageButton {
     private ColorStateList mTint;
@@ -37,7 +37,7 @@
     private void init(Context context, AttributeSet attrs, int defStyle) {
         TypedArray a = context.obtainStyledAttributes(
                 attrs, R.styleable.TintedImage, defStyle, 0);
-        setTintInternal(a.getColorStateList(R.styleable.TintedImage_tint));
+        setTintInternal(a.getColorStateList(R.styleable.TintedImage_chrometint));
         a.recycle();
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/TintedImageView.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/TintedImageView.java
index ea760ad..96bb9a29 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/widget/TintedImageView.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/TintedImageView.java
@@ -15,7 +15,7 @@
 
 /**
  * Implementation of ImageView that allows to tint the color of the image view for all
- * image view states using chrome:tint attribute in XML.
+ * image view states using chrome:chrometint attribute in XML.
  */
 public class TintedImageView extends AppCompatImageView {
     private ColorStateList mTint;
@@ -37,7 +37,7 @@
     private void init(Context context, AttributeSet attrs, int defStyle) {
         TypedArray a = context.obtainStyledAttributes(
                 attrs, R.styleable.TintedImage, defStyle, 0);
-        setTintInternal(a.getColorStateList(R.styleable.TintedImage_tint));
+        setTintInternal(a.getColorStateList(R.styleable.TintedImage_chrometint));
         a.recycle();
     }
 
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/WebVrTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/WebVrTest.java
index 3e6468b..ec1a437 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/WebVrTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/WebVrTest.java
@@ -22,10 +22,10 @@
 import org.junit.runner.RunWith;
 
 import org.chromium.base.test.util.CommandLineFlags;
-import org.chromium.base.test.util.DisableIf;
 import org.chromium.base.test.util.DisabledTest;
 import org.chromium.base.test.util.MinAndroidSdkLevel;
 import org.chromium.base.test.util.Restriction;
+import org.chromium.base.test.util.RetryOnFailure;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.ChromeSwitches;
 import org.chromium.chrome.test.ChromeActivityTestRule;
@@ -147,9 +147,7 @@
     @Test
     @MediumTest
     @Restriction(RESTRICTION_TYPE_VIEWER_NON_DAYDREAM)
-    @DisableIf.Build(message = "Flaky on L crbug.com/713781",
-            sdk_is_greater_than = Build.VERSION_CODES.KITKAT,
-            sdk_is_less_than = Build.VERSION_CODES.M)
+    @RetryOnFailure(message = "Flaky on L crbug.com/713781")
     public void testScreenTapsRegisteredOnCardboard() throws InterruptedException {
         mActivityTestRule.loadUrl(
                 VrTestRule.getHtmlTestFile("test_screen_taps_registered"), PAGE_LOAD_TIMEOUT_S);
@@ -301,9 +299,7 @@
      */
     @Test
     @MediumTest
-    @DisableIf.Build(message = "Flaky on L crbug.com/713781",
-            sdk_is_greater_than = Build.VERSION_CODES.KITKAT,
-            sdk_is_less_than = Build.VERSION_CODES.M)
+    @RetryOnFailure(message = "Flaky on L crbug.com/713781")
     public void testPresentationLocksFocus() throws InterruptedException {
         mActivityTestRule.loadUrl(
                 VrTestRule.getHtmlTestFile("test_presentation_locks_focus"), PAGE_LOAD_TIMEOUT_S);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetNewTabControllerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetNewTabControllerTest.java
index 52ff466..44970a6 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetNewTabControllerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetNewTabControllerTest.java
@@ -8,7 +8,6 @@
 
 import org.chromium.base.ThreadUtils;
 import org.chromium.base.test.util.CallbackHelper;
-import org.chromium.base.test.util.DisabledTest;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.UrlConstants;
 import org.chromium.chrome.browser.ntp.ChromeHomeNewTabPageBase;
@@ -144,7 +143,6 @@
     }
 
     @SmallTest
-    @DisabledTest(message = "crbug.com/726032")
     public void testCloseNTP()
             throws IllegalArgumentException, InterruptedException, TimeoutException {
         // Create a new tab.
@@ -159,7 +157,6 @@
     }
 
     @SmallTest
-    @DisabledTest(message = "crbug.com/726032")
     public void testCloseNTP_Incognito()
             throws IllegalArgumentException, InterruptedException, TimeoutException {
         // Create new incognito NTP.
@@ -175,12 +172,8 @@
 
     private void loadChromeHomeNewTab() throws InterruptedException {
         final Tab tab = getActivity().getActivityTab();
-        ChromeTabUtils.waitForTabPageLoaded(tab, new Runnable() {
-            @Override
-            public void run() {
-                ChromeTabUtils.loadUrlOnUiThread(tab, UrlConstants.NTP_URL);
-            }
-        });
+        ChromeTabUtils.loadUrlOnUiThread(tab, UrlConstants.NTP_URL);
+        ChromeTabUtils.waitForTabPageLoaded(tab, UrlConstants.NTP_URL);
         getInstrumentation().waitForIdleSync();
     }
 
@@ -199,12 +192,12 @@
     private void closeNewTab() throws InterruptedException, TimeoutException {
         int currentCallCount = mTabModelObserver.mDidCloseTabCallbackHelper.getCallCount();
         Tab tab = getActivity().getActivityTab();
-        final ChromeHomeNewTabPageBase mNewTabPage = (ChromeHomeNewTabPageBase) tab.getNativePage();
+        final ChromeHomeNewTabPageBase newTabPage = (ChromeHomeNewTabPageBase) tab.getNativePage();
 
         ThreadUtils.runOnUiThreadBlocking(new Runnable() {
             @Override
             public void run() {
-                mNewTabPage.getCloseButtonForTests().callOnClick();
+                newTabPage.getCloseButtonForTests().callOnClick();
                 getActivity().getLayoutManager().getActiveLayout().finishAnimationsForTests();
             }
         });
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 64976c5..902baa1 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -265,6 +265,8 @@
     "component_updater/supervised_user_whitelist_installer.h",
     "component_updater/sw_reporter_installer_win.cc",
     "component_updater/sw_reporter_installer_win.h",
+    "conflicts/installed_programs_win.cc",
+    "conflicts/installed_programs_win.h",
     "conflicts/module_database_observer_win.h",
     "conflicts/module_database_win.cc",
     "conflicts/module_database_win.h",
@@ -886,15 +888,10 @@
     "password_manager/password_manager_util_win.h",
     "password_manager/password_store_factory.cc",
     "password_manager/password_store_factory.h",
-    "password_manager/password_store_mac.cc",
-    "password_manager/password_store_mac.h",
-    "password_manager/password_store_mac_internal.h",
     "password_manager/password_store_proxy_mac.cc",
     "password_manager/password_store_proxy_mac.h",
     "password_manager/password_store_win.cc",
     "password_manager/password_store_win.h",
-    "password_manager/simple_password_store_mac.cc",
-    "password_manager/simple_password_store_mac.h",
     "payments/ssl_validity_checker.cc",
     "payments/ssl_validity_checker.h",
     "performance_monitor/performance_monitor.cc",
diff --git a/chrome/browser/DEPS b/chrome/browser/DEPS
index d0c2430..53e7be9 100644
--- a/chrome/browser/DEPS
+++ b/chrome/browser/DEPS
@@ -1,6 +1,5 @@
 include_rules = [
   "+apps",
-  "+ash",
   "+cc/paint",
   "+chrome/app",
   "+chrome/chrome_watcher",
@@ -61,6 +60,13 @@
   "+third_party/crashpad",
   "+third_party/cros_system_api",
 
+  # Code under //ash runs out-of-process under mustash (chrome --mash) so it
+  # must be accessed via mojo interfaces in //ash/public/interfaces. See
+  # //ash/README.md.
+  "-ash",
+  "+ash/public",
+  "+ash/ash_switches.h",
+
   # chrome only needs switches from cc. All usage of the compositor is from
   # content. Definitely don't include generic stuff from cc/base here, if this
   # is needed these files need to move to base/
@@ -79,11 +85,6 @@
   "+chrome/browser/ui/views/try_chrome_dialog_view.h",
   "+chrome/browser/ui/views/ash/chrome_browser_main_extra_parts_ash.h",
 
-  # Code in chrome should not use ash::SessionStateDelegate and friends.
-  # Instead, use SessionManager/UserManager/SessionControllerClient directly
-  # since they are part of chrome.
-  "-ash/session",
-
   # Explicitly disallow using SyncMessageFilter to prevent browser from
   # sending synchronous IPC messages on non-UI threads.
   "-ipc/ipc_sync_message_filter.h",
@@ -135,3 +136,10 @@
   "+third_party/WebKit/public/web/WebTextDirection.h",
   "+third_party/WebKit/public/web/window_features.mojom.h",
 ]
+specific_include_rules = {
+  # TODO(mash): Remove. http://crbug.com/678705
+  "fullscreen_chromeos\.cc": [
+    "+ash/root_window_controller.h",
+    "+ash/shell.h",
+  ]
+}
diff --git a/chrome/browser/android/download/download_controller.cc b/chrome/browser/android/download/download_controller.cc
index 30b095f..db2a624 100644
--- a/chrome/browser/android/download/download_controller.cc
+++ b/chrome/browser/android/download/download_controller.cc
@@ -116,8 +116,11 @@
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   DCHECK(callback_id);
 
-  std::string permission_to_update =
-      base::android::ConvertJavaStringToUTF8(env, jpermission_to_update);
+  std::string permission_to_update;
+  if (jpermission_to_update) {
+    permission_to_update =
+        base::android::ConvertJavaStringToUTF8(env, jpermission_to_update);
+  }
   // Convert java long long int to c++ pointer, take ownership.
   std::unique_ptr<DownloadController::AcquirePermissionCallback> cb(
       reinterpret_cast<DownloadController::AcquirePermissionCallback*>(
diff --git a/chrome/browser/captive_portal/captive_portal_browsertest.cc b/chrome/browser/captive_portal/captive_portal_browsertest.cc
index d3b5668c..904c60de 100644
--- a/chrome/browser/captive_portal/captive_portal_browsertest.cc
+++ b/chrome/browser/captive_portal/captive_portal_browsertest.cc
@@ -17,6 +17,7 @@
 #include "base/macros.h"
 #include "base/message_loop/message_loop.h"
 #include "base/path_service.h"
+#include "base/sequence_checker.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task_scheduler/post_task.h"
 #include "base/values.h"
@@ -133,8 +134,7 @@
 // A URL request job that hangs until FailJobs() is called.  Started jobs
 // are stored in a static class variable containing a linked list so that
 // FailJobs() can locate them.
-class URLRequestTimeoutOnDemandJob : public net::URLRequestJob,
-                                     public base::NonThreadSafe {
+class URLRequestTimeoutOnDemandJob : public net::URLRequestJob {
  public:
   // net::URLRequestJob:
   void Start() override;
@@ -211,6 +211,8 @@
   // The next job that had been started but not yet timed out.
   URLRequestTimeoutOnDemandJob* next_job_;
 
+  SEQUENCE_CHECKER(sequence_checker_);
+
   DISALLOW_COPY_AND_ASSIGN(URLRequestTimeoutOnDemandJob);
 };
 
@@ -220,7 +222,7 @@
 URLRequestTimeoutOnDemandJob* URLRequestTimeoutOnDemandJob::job_list_ = NULL;
 
 void URLRequestTimeoutOnDemandJob::Start() {
-  EXPECT_TRUE(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   // Insert at start of the list.
   next_job_ = job_list_;
@@ -276,6 +278,7 @@
 }
 
 URLRequestTimeoutOnDemandJob::~URLRequestTimeoutOnDemandJob() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   // All hanging jobs should have failed or been abandoned before being
   // destroyed.
   EXPECT_FALSE(RemoveFromList());
diff --git a/chrome/browser/chromeos/DEPS b/chrome/browser/chromeos/DEPS
index 0b7d553..8d75f13b 100644
--- a/chrome/browser/chromeos/DEPS
+++ b/chrome/browser/chromeos/DEPS
@@ -1,4 +1,8 @@
 include_rules = [
+  # TODO(crbug.com/678705): Convert to using mojo interfaces in
+  # //ash/public/interfaces and eliminate this.
+  "+ash",
+
   "+components/constrained_window",
   "+components/drive/drive_pref_names.h",
   "+components/pairing",
diff --git a/chrome/browser/chromeos/extensions/users_private/users_private_api.cc b/chrome/browser/chromeos/extensions/users_private/users_private_api.cc
index 0ca0a1b..e5541c2 100644
--- a/chrome/browser/chromeos/extensions/users_private/users_private_api.cc
+++ b/chrome/browser/chromeos/extensions/users_private/users_private_api.cc
@@ -8,6 +8,7 @@
 
 #include <utility>
 
+#include "base/bind.h"
 #include "base/memory/ptr_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
@@ -211,9 +212,15 @@
 
 ExtensionFunction::ResponseAction
 UsersPrivateIsCurrentUserOwnerFunction::Run() {
-  bool is_owner =
-      chromeos::ProfileHelper::IsOwnerProfile(chrome_details_.GetProfile());
-  return RespondNow(OneArgument(base::MakeUnique<base::Value>(is_owner)));
+  chromeos::OwnerSettingsServiceChromeOSFactory::GetForBrowserContext(
+      browser_context())
+      ->IsOwnerAsync(base::Bind(
+          &UsersPrivateIsCurrentUserOwnerFunction::IsOwnerCallback, this));
+  return RespondLater();
+}
+
+void UsersPrivateIsCurrentUserOwnerFunction::IsOwnerCallback(bool is_owner) {
+  Respond(OneArgument(base::MakeUnique<base::Value>(is_owner)));
 }
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/chrome/browser/chromeos/extensions/users_private/users_private_api.h b/chrome/browser/chromeos/extensions/users_private/users_private_api.h
index 78f141f..7a09f3c 100644
--- a/chrome/browser/chromeos/extensions/users_private/users_private_api.h
+++ b/chrome/browser/chromeos/extensions/users_private/users_private_api.h
@@ -89,6 +89,8 @@
   ResponseAction Run() override;
 
  private:
+  void IsOwnerCallback(bool is_owner);
+
   ChromeExtensionFunctionDetails chrome_details_;
 
   DISALLOW_COPY_AND_ASSIGN(UsersPrivateIsCurrentUserOwnerFunction);
diff --git a/chrome/browser/chromeos/extensions/users_private/users_private_apitest.cc b/chrome/browser/chromeos/extensions/users_private/users_private_apitest.cc
index e9ddec5..6e70c2d5 100644
--- a/chrome/browser/chromeos/extensions/users_private/users_private_apitest.cc
+++ b/chrome/browser/chromeos/extensions/users_private/users_private_apitest.cc
@@ -20,7 +20,10 @@
 #include "extensions/common/switches.h"
 
 #if defined(OS_CHROMEOS)
+#include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos_factory.h"
 #include "chromeos/chromeos_switches.h"
+#include "components/ownership/mock_owner_key_util.h"
+#include "crypto/rsa_private_key.h"
 #endif
 
 namespace extensions {
@@ -106,7 +109,18 @@
 
 class UsersPrivateApiTest : public ExtensionApiTest {
  public:
-  UsersPrivateApiTest() {}
+  UsersPrivateApiTest() {
+#if defined(OS_CHROMEOS)
+    // Mock owner key pairs. Note this needs to happen before
+    // OwnerSettingsServiceChromeOS is created.
+    scoped_refptr<ownership::MockOwnerKeyUtil> owner_key_util =
+        new ownership::MockOwnerKeyUtil();
+    owner_key_util->SetPrivateKey(crypto::RSAPrivateKey::Create(512));
+
+    chromeos::OwnerSettingsServiceChromeOSFactory::GetInstance()
+        ->SetOwnerKeyUtilForTesting(owner_key_util);
+#endif
+  }
   ~UsersPrivateApiTest() override {}
 
   static std::unique_ptr<KeyedService> GetUsersPrivateDelegate(
diff --git a/chrome/browser/chromeos/login/session/user_session_manager.cc b/chrome/browser/chromeos/login/session/user_session_manager.cc
index 598c6947..607e9fa 100644
--- a/chrome/browser/chromeos/login/session/user_session_manager.cc
+++ b/chrome/browser/chromeos/login/session/user_session_manager.cc
@@ -867,6 +867,20 @@
 
   login_manager->RemoveObserver(this);
 
+  // Terminate user session if merge session fails for an online sign-in.
+  // Otherwise, auth token dependent code would be in an invalid state.
+  // Important piece such as policy code might be broken because of this and
+  // subject to an exploit. See http://crbug.com/677312.
+  const bool is_online_signin =
+      user_context_.GetAuthFlow() == UserContext::AUTH_FLOW_GAIA_WITH_SAML ||
+      user_context_.GetAuthFlow() == UserContext::AUTH_FLOW_GAIA_WITHOUT_SAML;
+  if (is_online_signin && state == OAuth2LoginManager::SESSION_RESTORE_FAILED) {
+    LOG(ERROR)
+        << "Session restore failed for online sign-in, terminating session.";
+    chrome::AttemptUserExit();
+    return;
+  }
+
   if (exit_after_session_restore_ &&
       (state  == OAuth2LoginManager::SESSION_RESTORE_DONE ||
        state  == OAuth2LoginManager::SESSION_RESTORE_FAILED ||
diff --git a/chrome/browser/chromeos/login/signin/oauth2_browsertest.cc b/chrome/browser/chromeos/login/signin/oauth2_browsertest.cc
index 48cbaff..3939fc4 100644
--- a/chrome/browser/chromeos/login/signin/oauth2_browsertest.cc
+++ b/chrome/browser/chromeos/login/signin/oauth2_browsertest.cc
@@ -586,6 +586,37 @@
   EXPECT_TRUE(token_service->RefreshTokenIsAvailable(account_id));
 }
 
+// Tests that user session is terminated if merge session fails for an online
+// sign-in. This is necessary to prevent policy exploit.
+// See http://crbug.com/677312
+IN_PROC_BROWSER_TEST_F(OAuth2Test, TerminateOnBadMergeSessionAfterOnlineAuth) {
+  SimulateNetworkOnline();
+  WaitForGaiaPageLoad();
+
+  content::WindowedNotificationObserver termination_waiter(
+      chrome::NOTIFICATION_APP_TERMINATING,
+      content::NotificationService::AllSources());
+
+  // Configure FakeGaia so that online auth succeeds but merge session fails.
+  FakeGaia::MergeSessionParams params;
+  params.auth_sid_cookie = kTestAuthSIDCookie;
+  params.auth_lsid_cookie = kTestAuthLSIDCookie;
+  params.auth_code = kTestAuthCode;
+  params.refresh_token = kTestRefreshToken;
+  params.access_token = kTestAuthLoginAccessToken;
+  fake_gaia_->SetMergeSessionParams(params);
+
+  // Simulate an online sign-in.
+  GetLoginDisplay()->ShowSigninScreenForCreds(kTestEmail, kTestAccountPassword);
+
+  // User session should be terminated.
+  termination_waiter.Wait();
+
+  // Merge session should fail. Check after |termination_waiter| to ensure
+  // user profile is initialized and there is an OAuth2LoginManage.
+  WaitForMergeSessionCompletion(OAuth2LoginManager::SESSION_RESTORE_FAILED);
+}
+
 const char kGooglePageContent[] =
     "<html><title>Hello!</title><script>alert('hello');</script>"
     "<body>Hello Google!</body></html>";
diff --git a/chrome/browser/conflicts/installed_programs_win.cc b/chrome/browser/conflicts/installed_programs_win.cc
new file mode 100644
index 0000000..a6a8dbc37
--- /dev/null
+++ b/chrome/browser/conflicts/installed_programs_win.cc
@@ -0,0 +1,311 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/conflicts/installed_programs_win.h"
+
+#include <algorithm>
+
+#include "base/callback.h"
+#include "base/memory/ptr_util.h"
+#include "base/strings/stringprintf.h"
+#include "base/task_scheduler/post_task.h"
+#include "base/win/registry.h"
+#include "chrome/browser/conflicts/msi_util_win.h"
+
+namespace {
+
+// Returns true if |candidate| is registered as a system component.
+bool IsSystemComponent(const base::win::RegKey& candidate) {
+  DWORD system_component = 0;
+  return candidate.ReadValueDW(L"SystemComponent", &system_component) ==
+             ERROR_SUCCESS &&
+         system_component == 1;
+}
+
+// Fetches a string |value| out of |key|. Return false if a non-empty value
+// could not be retrieved.
+bool GetValue(const base::win::RegKey& key,
+              const wchar_t* value,
+              base::string16* result) {
+  return key.ReadValue(value, result) == ERROR_SUCCESS && !result->empty();
+}
+
+// Try to get the |install_path| from |candidate| using the InstallLocation
+// value. Return true on success.
+bool GetInstallPathUsingInstallLocation(const base::win::RegKey& candidate,
+                                        base::FilePath* install_path) {
+  base::string16 install_location;
+  if (GetValue(candidate, L"InstallLocation", &install_location)) {
+    *install_path = base::FilePath(std::move(install_location));
+    return true;
+  }
+  return false;
+}
+
+// Returns true if the |component_path| points to a registry key. Registry key
+// paths are characterized by a number instead of a drive letter.
+// See the documentation for ::MsiGetComponentPath():
+// https://msdn.microsoft.com/en-us/library/windows/desktop/aa370112(v=vs.85).aspx
+bool IsRegistryComponentPath(const base::string16& component_path) {
+  base::string16 drive_letter =
+      component_path.substr(0, component_path.find(':'));
+
+  for (const wchar_t* registry_drive_letter :
+       {L"00", L"01", L"02", L"03", L"20", L"21", L"22", L"23"}) {
+    if (drive_letter == registry_drive_letter)
+      return true;
+  }
+
+  return false;
+}
+
+// Returns all the files installed by the product identified by |product_guid|.
+// Returns true on success.
+bool GetInstalledFilesUsingMsiGuid(
+    const base::string16& product_guid,
+    const MsiUtil& msi_util,
+    std::vector<base::FilePath>* installed_files) {
+  // An invalid product guid may have been passed to this function. In this
+  // case, GetMsiComponentPaths() will return false so it is not necessary to
+  // specifically filter those out.
+  std::vector<base::string16> component_paths;
+  if (!msi_util.GetMsiComponentPaths(product_guid, &component_paths))
+    return false;
+
+  for (auto& component_path : component_paths) {
+    // Exclude registry component paths.
+    if (IsRegistryComponentPath(component_path))
+      continue;
+
+    installed_files->push_back(base::FilePath(std::move(component_path)));
+  }
+
+  return true;
+}
+
+// Checks if the registry key references an installed program in the Apps &
+// Features settings page.
+void CheckRegistryKeyForInstalledProgram(
+    HKEY hkey,
+    const base::string16& key_path,
+    const base::string16& key_name,
+    const MsiUtil& msi_util,
+    InstalledPrograms::ProgramsData* programs_data) {
+  base::win::RegKey candidate(
+      hkey,
+      base::StringPrintf(L"%ls\\%ls", key_path.c_str(), key_name.c_str())
+          .c_str(),
+      KEY_READ);
+
+  if (!candidate.Valid())
+    return;
+
+  // System components are not displayed in the Add or remove programs list.
+  if (IsSystemComponent(candidate))
+    return;
+
+  // If there is no UninstallString, the Uninstall button is grayed out.
+  base::string16 uninstall_string;
+  if (!GetValue(candidate, L"UninstallString", &uninstall_string))
+    return;
+
+  // Ignore Microsoft programs.
+  base::string16 publisher;
+  if (GetValue(candidate, L"Publisher", &publisher) &&
+      publisher == L"Microsoft Corporation") {
+    return;
+  }
+
+  // Because this class is used to display a warning to the user, not having
+  // a display name renders the warning somewhat useless. Ignore those
+  // candidates.
+  base::string16 display_name;
+  if (!GetValue(candidate, L"DisplayName", &display_name))
+    return;
+
+  base::FilePath install_path;
+  if (GetInstallPathUsingInstallLocation(candidate, &install_path)) {
+    programs_data->program_names.push_back(std::move(display_name));
+    const size_t program_name_index = programs_data->program_names.size() - 1;
+    programs_data->install_directories.push_back(
+        std::make_pair(std::move(install_path), program_name_index));
+    return;
+  }
+
+  std::vector<base::FilePath> installed_files;
+  if (GetInstalledFilesUsingMsiGuid(key_name, msi_util, &installed_files)) {
+    programs_data->program_names.push_back(std::move(display_name));
+    const size_t program_name_index = programs_data->program_names.size() - 1;
+    for (auto& installed_file : installed_files) {
+      programs_data->installed_files.push_back(
+          std::make_pair(std::move(installed_file), program_name_index));
+    }
+  }
+}
+
+// Helper function to sort |container| using CompareLessIgnoreCase.
+void SortByFilePaths(
+    std::vector<std::pair<base::FilePath, size_t>>* container) {
+  std::sort(container->begin(), container->end(),
+            [](const auto& lhs, const auto& rhs) {
+              return base::FilePath::CompareLessIgnoreCase(lhs.first.value(),
+                                                           rhs.first.value());
+            });
+}
+
+// Populates and returns a ProgramsData instance.
+std::unique_ptr<InstalledPrograms::ProgramsData> GetProgramsData(
+    std::unique_ptr<MsiUtil> msi_util) {
+  auto programs_data = base::MakeUnique<InstalledPrograms::ProgramsData>();
+
+  // Iterate over all the variants of the uninstall registry key.
+  const wchar_t* kUninstallKeyPaths[] = {
+      L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall",
+      L"SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall",
+  };
+
+  for (const wchar_t* uninstall_key_path : kUninstallKeyPaths) {
+    for (HKEY hkey : {HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER}) {
+      for (base::win::RegistryKeyIterator i(hkey, uninstall_key_path);
+           i.Valid(); ++i) {
+        CheckRegistryKeyForInstalledProgram(hkey, uninstall_key_path, i.Name(),
+                                            *msi_util, programs_data.get());
+      }
+    }
+  }
+
+  // The vectors are sorted so that binary searching can be used. No additional
+  // entries will be added anyways.
+  SortByFilePaths(&programs_data->installed_files);
+  SortByFilePaths(&programs_data->install_directories);
+
+  return programs_data;
+}
+
+}  // namespace
+
+InstalledPrograms::ProgramsData::ProgramsData() = default;
+
+InstalledPrograms::ProgramsData::~ProgramsData() = default;
+
+InstalledPrograms::InstalledPrograms()
+    : initialized_(false), weak_ptr_factory_(this) {}
+
+InstalledPrograms::~InstalledPrograms() = default;
+
+void InstalledPrograms::Initialize(
+    const base::Closure& on_initialized_callback) {
+  Initialize(on_initialized_callback, base::MakeUnique<MsiUtil>());
+}
+
+bool InstalledPrograms::GetInstalledProgramNames(
+    const base::FilePath& file,
+    std::vector<base::string16>* program_names) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  DCHECK(initialized_);
+
+  // First, check if an exact file match exists in the installed files list.
+  if (GetNamesFromInstalledFiles(file, program_names))
+    return true;
+
+  // Then try to find a parent directory in the install directories list.
+  return GetNamesFromInstallDirectories(file, program_names);
+}
+
+void InstalledPrograms::Initialize(const base::Closure& on_initialized_callback,
+                                   std::unique_ptr<MsiUtil> msi_util) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  DCHECK(!initialized_);
+
+  base::PostTaskWithTraitsAndReplyWithResult(
+      FROM_HERE,
+      {base::MayBlock(), base::TaskPriority::BACKGROUND,
+       base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+      base::BindOnce(&GetProgramsData, std::move(msi_util)),
+      base::BindOnce(&InstalledPrograms::OnInitializationDone,
+                     weak_ptr_factory_.GetWeakPtr(), on_initialized_callback));
+}
+
+bool InstalledPrograms::GetNamesFromInstalledFiles(
+    const base::FilePath& file,
+    std::vector<base::string16>* program_names) {
+  // This functor is used to find all exact items by their key in a collection
+  // of key/value pairs.
+  struct FilePathLess {
+    bool operator()(const std::pair<base::FilePath, size_t> element,
+                    const base::FilePath& file) {
+      return base::FilePath::CompareLessIgnoreCase(element.first.value(),
+                                                   file.value());
+    }
+    bool operator()(const base::FilePath& file,
+                    const std::pair<base::FilePath, size_t> element) {
+      return base::FilePath::CompareLessIgnoreCase(file.value(),
+                                                   element.first.value());
+    }
+  };
+
+  auto equal_range = std::equal_range(programs_data_->installed_files.begin(),
+                                      programs_data_->installed_files.end(),
+                                      file, FilePathLess());
+
+  // If the range is of size 0, no matching files were found.
+  if (std::distance(equal_range.first, equal_range.second) == 0)
+    return false;
+
+  for (auto iter = equal_range.first; iter != equal_range.second; ++iter) {
+    program_names->push_back(programs_data_->program_names[iter->second]);
+  }
+
+  return true;
+}
+
+bool InstalledPrograms::GetNamesFromInstallDirectories(
+    const base::FilePath& file,
+    std::vector<base::string16>* program_names) {
+  // This functor is used to find all matching items by their key in a
+  // collection of key/value pairs. This also takes advantage of the fact that
+  // only the first element of the pair is a directory.
+  struct FilePathParentLess {
+    bool operator()(const std::pair<base::FilePath, size_t> directory,
+                    const base::FilePath& file) {
+      if (directory.first.IsParent(file))
+        return false;
+      return base::FilePath::CompareLessIgnoreCase(directory.first.value(),
+                                                   file.value());
+    }
+    bool operator()(const base::FilePath& file,
+                    const std::pair<base::FilePath, size_t> directory) {
+      if (directory.first.IsParent(file))
+        return false;
+      return base::FilePath::CompareLessIgnoreCase(file.value(),
+                                                   directory.first.value());
+    }
+  };
+
+  auto equal_range = std::equal_range(
+      programs_data_->install_directories.begin(),
+      programs_data_->install_directories.end(), file, FilePathParentLess());
+
+  // Skip cases where there are multiple matches because there is no way to know
+  // which program is the real owner of the |file| with the data owned by us.
+  if (std::distance(equal_range.first, equal_range.second) != 1)
+    return false;
+
+  program_names->push_back(
+      programs_data_->program_names[equal_range.first->second]);
+  return true;
+}
+
+void InstalledPrograms::OnInitializationDone(
+    const base::Closure& on_initialized_callback,
+    std::unique_ptr<ProgramsData> programs_data) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  DCHECK(!initialized_);
+
+  programs_data_ = std::move(programs_data);
+
+  initialized_ = true;
+  if (on_initialized_callback)
+    on_initialized_callback.Run();
+}
diff --git a/chrome/browser/conflicts/installed_programs_win.h b/chrome/browser/conflicts/installed_programs_win.h
new file mode 100644
index 0000000..d4ed5c1
--- /dev/null
+++ b/chrome/browser/conflicts/installed_programs_win.h
@@ -0,0 +1,122 @@
+// 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 CHROME_BROWSER_CONFLICTS_INSTALLED_PROGRAMS_WIN_H_
+#define CHROME_BROWSER_CONFLICTS_INSTALLED_PROGRAMS_WIN_H_
+
+#include <memory>
+#include <utility>
+#include <vector>
+
+#include "base/callback_forward.h"
+#include "base/files/file_path.h"
+#include "base/macros.h"
+#include "base/memory/weak_ptr.h"
+#include "base/sequence_checker.h"
+#include "base/strings/string16.h"
+
+class MsiUtil;
+
+// This class inspects the user's installed programs and builds a mapping of
+// files to its associated program name.
+//
+// Installed programs are found by searching the
+// "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" registry key and
+// its variants. There are 2 cases that are covered:
+//
+// 1 - If the program's installer did its due dilligence, it populated the
+//     "InstallLocation" registry key with the directory where it was installed,
+//     and all the files under that directory are assumed to be owned by this
+//     program.
+//
+//     In the event of 2 conflicting "InstallLocation", both are ignored as this
+//     method doesn't let us know for sure who is the owner of any enclosing
+//     files.
+//
+// 2 - If the program's entry is a valid MSI Product GUID, the complete list of
+//     associated file is used to exactly match a given file to a program.
+//
+//     If multiple products installed the same file as the same component,
+//     Windows keeps a reference count of that component so that the file
+//     doesn't get removed if one of them is uninstalled. So both programs are
+//     returned by GetInstalledProgramNames().
+//
+//  Note: Programs may be skipped and so would not be returned by
+//        GetInstalledProgramNames() for the following reasons:
+//        - The program is owned by Microsoft.
+//        - The uninstall entry is marked as a system component.
+//        - The uninstall entry has no display name.
+//        - The uninstall entry has no UninstallString.
+//
+// This class is not thread safe and should be only accessed on the same
+// sequence.
+class InstalledPrograms {
+ public:
+  // The guts of the class, this structure is populated on a background sequence
+  // and moved back to this instance after initialization.
+  struct ProgramsData {
+    ProgramsData();
+    ~ProgramsData();
+
+    // Program names are stored in this vector because multiple entries in
+    // |installed_files_map_| could point to the same one. This is to avoid
+    // duplicating them.
+    std::vector<base::string16> program_names;
+
+    // Contains all the files from programs installed via Microsoft Installer.
+    // The second part of the pair is the index into |program_names|.
+    std::vector<std::pair<base::FilePath, size_t>> installed_files;
+
+    // For some programs, the best information available is the directory of the
+    // installation. The compare functor treats file paths where one is the
+    // parent of the other as equal.
+    // The second part of the pair is the index into |program_names|.
+    std::vector<std::pair<base::FilePath, size_t>> install_directories;
+  };
+
+  InstalledPrograms();
+  ~InstalledPrograms();
+
+  // Initializes this class on a background sequence.
+  void Initialize(const base::Closure& on_initialized_callback);
+
+  // Given a |file|, checks if it matches with an installed program on the
+  // user's machine and returns all the matching program names. Do not call this
+  // before the initialization is done.
+  bool GetInstalledProgramNames(const base::FilePath& file,
+                                std::vector<base::string16>* program_names);
+
+ protected:
+  // Protected so that tests can subclass InstalledPrograms and access it.
+  void Initialize(const base::Closure& on_initialized_callback,
+                  std::unique_ptr<MsiUtil> msi_util);
+
+ private:
+  bool GetNamesFromInstalledFiles(const base::FilePath& file,
+                                  std::vector<base::string16>* program_names);
+  bool GetNamesFromInstallDirectories(
+      const base::FilePath& file,
+      std::vector<base::string16>* program_names);
+
+  // Takes the result from the initialization and moves it to this instance,
+  // then calls |on_initialized_callback| to indicate that the initialization
+  // is done.
+  void OnInitializationDone(const base::Closure& on_initialized_callback,
+                            std::unique_ptr<ProgramsData> programs_data);
+
+  // Used to assert that initialization was completed before calling
+  // GetInstalledProgramNames().
+  bool initialized_;
+
+  std::unique_ptr<ProgramsData> programs_data_;
+
+  // Make sure this class isn't accessed via multiple sequences.
+  SEQUENCE_CHECKER(sequence_checker_);
+
+  base::WeakPtrFactory<InstalledPrograms> weak_ptr_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(InstalledPrograms);
+};
+
+#endif  // CHROME_BROWSER_CONFLICTS_INSTALLED_PROGRAMS_WIN_H_
diff --git a/chrome/browser/conflicts/installed_programs_win_unittest.cc b/chrome/browser/conflicts/installed_programs_win_unittest.cc
new file mode 100644
index 0000000..0194376
--- /dev/null
+++ b/chrome/browser/conflicts/installed_programs_win_unittest.cc
@@ -0,0 +1,331 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/conflicts/installed_programs_win.h"
+
+#include <map>
+
+#include "base/macros.h"
+#include "base/memory/ptr_util.h"
+#include "base/strings/stringprintf.h"
+#include "base/test/scoped_task_environment.h"
+#include "base/test/test_reg_util_win.h"
+#include "base/win/registry.h"
+#include "chrome/browser/conflicts/msi_util_win.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+static const wchar_t kRegistryKeyPathFormat[] =
+    L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\%ls";
+
+struct CommonInfo {
+  base::string16 product_id;
+  bool is_system_component;
+  bool is_microsoft_published;
+  base::string16 display_name;
+  base::string16 uninstall_string;
+};
+
+struct InstallLocationProgramInfo {
+  CommonInfo common_info;
+  base::string16 install_location;
+};
+
+struct MsiProgramInfo {
+  CommonInfo common_info;
+  std::vector<base::string16> components;
+};
+
+class MockMsiUtil : public MsiUtil {
+ public:
+  MockMsiUtil(const std::map<base::string16, std::vector<base::string16>>&
+                  component_paths_map)
+      : component_paths_map_(component_paths_map) {}
+
+  bool GetMsiComponentPaths(
+      const base::string16& product_guid,
+      std::vector<base::string16>* component_paths) const override {
+    auto iter = component_paths_map_.find(product_guid);
+    if (iter == component_paths_map_.end())
+      return false;
+
+    *component_paths = iter->second;
+    return true;
+  }
+
+ private:
+  const std::map<base::string16, std::vector<base::string16>>&
+      component_paths_map_;
+};
+
+class TestInstalledPrograms : public InstalledPrograms {
+ public:
+  using InstalledPrograms::Initialize;
+};
+
+class InstalledProgramsTest : public testing::Test {
+ public:
+  InstalledProgramsTest() = default;
+  ~InstalledProgramsTest() override = default;
+
+  // ASSERT_NO_FATAL_FAILURE cannot be used in a constructor so the registry
+  // hive overrides are done here.
+  void SetUp() override {
+    ASSERT_NO_FATAL_FAILURE(
+        registry_override_manager_.OverrideRegistry(HKEY_LOCAL_MACHINE));
+    ASSERT_NO_FATAL_FAILURE(
+        registry_override_manager_.OverrideRegistry(HKEY_CURRENT_USER));
+  }
+
+  void AddCommonInfo(const CommonInfo& common_info,
+                     base::win::RegKey* registry_key) {
+    registry_key->WriteValue(L"SystemComponent",
+                             common_info.is_system_component ? 1 : 0);
+    registry_key->WriteValue(L"UninstallString",
+                             common_info.uninstall_string.c_str());
+    if (common_info.is_microsoft_published)
+      registry_key->WriteValue(L"Publisher", L"Microsoft Corporation");
+    registry_key->WriteValue(L"DisplayName", common_info.display_name.c_str());
+  }
+
+  void AddFakeProgram(const MsiProgramInfo& program_info) {
+    const base::string16 registry_key_path = base::StringPrintf(
+        kRegistryKeyPathFormat, program_info.common_info.product_id.c_str());
+    base::win::RegKey registry_key(HKEY_CURRENT_USER, registry_key_path.c_str(),
+                                   KEY_WRITE);
+
+    AddCommonInfo(program_info.common_info, &registry_key);
+
+    component_paths_map_.insert(
+        {program_info.common_info.product_id, program_info.components});
+  }
+
+  void AddFakeProgram(const InstallLocationProgramInfo& program_info) {
+    const base::string16 registry_key_path = base::StringPrintf(
+        kRegistryKeyPathFormat, program_info.common_info.product_id.c_str());
+    base::win::RegKey registry_key(HKEY_CURRENT_USER, registry_key_path.c_str(),
+                                   KEY_WRITE);
+
+    AddCommonInfo(program_info.common_info, &registry_key);
+
+    registry_key.WriteValue(L"InstallLocation",
+                            program_info.install_location.c_str());
+  }
+
+  TestInstalledPrograms& installed_programs() { return installed_programs_; }
+
+  void InitializeInstalledProgramsSynchronously() {
+    installed_programs_.Initialize(
+        base::Closure(), base::MakeUnique<MockMsiUtil>(component_paths_map_));
+    scoped_task_environment_.RunUntilIdle();
+  }
+
+ private:
+  base::test::ScopedTaskEnvironment scoped_task_environment_;
+  registry_util::RegistryOverrideManager registry_override_manager_;
+
+  TestInstalledPrograms installed_programs_;
+
+  // This should not get modified after InitializeInstalledPrograms() is called
+  // because it will end up being accessed on a different thread by MockMsiUtil.
+  std::map<base::string16, std::vector<base::string16>> component_paths_map_;
+
+  DISALLOW_COPY_AND_ASSIGN(InstalledProgramsTest);
+};
+
+}  // namespace
+
+// Checks that registry entries with invalid information are skipped.
+TEST_F(InstalledProgramsTest, InvalidEntries) {
+  const wchar_t kValidDisplayName[] = L"ADisplayName";
+  const wchar_t kValidUninstallString[] = L"c:\\an\\UninstallString.exe";
+  const wchar_t kInstallLocation[] = L"c:\\program files\\program\\";
+
+  InstallLocationProgramInfo kTestCases[] = {
+      {
+          {
+              L"Is SystemComponent", true, false, kValidDisplayName,
+              kValidUninstallString,
+          },
+          kInstallLocation,
+      },
+      {
+          {
+              L"Is Microsoft published", false, true, kValidDisplayName,
+              kValidUninstallString,
+          },
+          kInstallLocation,
+      },
+      {
+          {
+              L"Missing DisplayName", false, false, L"", kValidUninstallString,
+          },
+          kInstallLocation,
+      },
+      {
+          {
+              L"Missing UninstallString", false, false, kValidDisplayName, L"",
+          },
+          kInstallLocation,
+      },
+  };
+
+  for (const auto& test_case : kTestCases)
+    AddFakeProgram(test_case);
+
+  InitializeInstalledProgramsSynchronously();
+
+  // None of the invalid entries were picked up.
+  const base::FilePath valid_child_file =
+      base::FilePath(kInstallLocation).Append(L"file.dll");
+  std::vector<base::string16> program_names;
+  EXPECT_FALSE(installed_programs().GetInstalledProgramNames(valid_child_file,
+                                                             &program_names));
+}
+
+// Tests InstalledPrograms on a valid entry with an InstallLocation.
+TEST_F(InstalledProgramsTest, InstallLocation) {
+  const wchar_t kValidDisplayName[] = L"ADisplayName";
+  const wchar_t kValidUninstallString[] = L"c:\\an\\UninstallString.exe";
+  const wchar_t kInstallLocation[] = L"c:\\program files\\program\\";
+
+  InstallLocationProgramInfo kTestCase = {
+      {
+          L"Completely valid", false, false, kValidDisplayName,
+          kValidUninstallString,
+      },
+      kInstallLocation,
+  };
+
+  AddFakeProgram(kTestCase);
+
+  InitializeInstalledProgramsSynchronously();
+
+  // Child file path.
+  const base::FilePath valid_child_file =
+      base::FilePath(kInstallLocation).Append(L"file.dll");
+  std::vector<base::string16> program_names;
+  EXPECT_TRUE(installed_programs().GetInstalledProgramNames(valid_child_file,
+                                                            &program_names));
+  ASSERT_EQ(1u, program_names.size());
+  EXPECT_EQ(kTestCase.common_info.display_name, program_names[0]);
+
+  // Non-child file path.
+  const base::FilePath invalid_child_file(
+      L"c:\\program files\\another program\\test.dll");
+  EXPECT_FALSE(installed_programs().GetInstalledProgramNames(invalid_child_file,
+                                                             &program_names));
+}
+
+// Tests InstalledPrograms on a valid MSI entry.
+TEST_F(InstalledProgramsTest, Msi) {
+  const wchar_t kValidDisplayName[] = L"ADisplayName";
+  const wchar_t kValidUninstallString[] = L"c:\\an\\UninstallString.exe";
+
+  MsiProgramInfo kTestCase = {
+      {
+          L"Completely valid", false, false, kValidDisplayName,
+          kValidUninstallString,
+      },
+      {
+          L"c:\\program files\\program\\file1.dll",
+          L"c:\\program files\\program\\file2.dll",
+          L"c:\\program files\\program\\sub\\file3.dll",
+          L"c:\\windows\\system32\\file4.dll",
+      },
+  };
+
+  AddFakeProgram(kTestCase);
+
+  InitializeInstalledProgramsSynchronously();
+
+  // Checks that all the files match the program.
+  for (const auto& component : kTestCase.components) {
+    std::vector<base::string16> program_names;
+    EXPECT_TRUE(installed_programs().GetInstalledProgramNames(
+        base::FilePath(component), &program_names));
+    ASSERT_EQ(1u, program_names.size());
+    EXPECT_EQ(kTestCase.common_info.display_name, program_names[0]);
+  }
+
+  // Any other file shouldn't work.
+  const base::FilePath invalid_child_file(
+      L"c:\\program files\\another program\\test.dll");
+  std::vector<base::string16> program_names;
+  EXPECT_FALSE(installed_programs().GetInstalledProgramNames(invalid_child_file,
+                                                             &program_names));
+}
+
+// Checks that if a file matches an InstallLocation and an MSI component, only
+// the MSI program will be considered.
+TEST_F(InstalledProgramsTest, PrioritizeMsi) {
+  const wchar_t kValidUninstallString[] = L"c:\\an\\UninstallString.exe";
+  const wchar_t kInstallLocationDisplayName[] = L"InstallLocation DisplayName";
+  const wchar_t kMsiDisplayName[] = L"Msi DisplayName";
+  const wchar_t kInstallLocation[] = L"c:\\program files\\program\\";
+  const wchar_t kMsiComponent[] = L"c:\\program files\\program\\file.dll";
+
+  InstallLocationProgramInfo kInstallLocationFakeProgram = {
+      {
+          L"GUID1", false, false, kInstallLocationDisplayName,
+          kValidUninstallString,
+      },
+      kInstallLocation,
+  };
+
+  MsiProgramInfo kMsiFakeProgram = {
+      {
+          L"GUID2", false, false, kMsiDisplayName, kValidUninstallString,
+      },
+      {
+          kMsiComponent,
+      },
+  };
+
+  AddFakeProgram(kInstallLocationFakeProgram);
+  AddFakeProgram(kMsiFakeProgram);
+
+  InitializeInstalledProgramsSynchronously();
+
+  std::vector<base::string16> program_names;
+  EXPECT_TRUE(installed_programs().GetInstalledProgramNames(
+      base::FilePath(kMsiComponent), &program_names));
+  ASSERT_EQ(1u, program_names.size());
+  EXPECT_NE(kInstallLocationDisplayName, program_names[0]);
+  EXPECT_EQ(kMsiDisplayName, program_names[0]);
+}
+
+// Tests that if 2 entries with an InstallLocation exist, both are ignored.
+TEST_F(InstalledProgramsTest, ConflictingInstallLocations) {
+  const wchar_t kValidUninstallString[] = L"c:\\an\\UninstallString.exe";
+  const wchar_t kDisplayName1[] = L"DisplayName1";
+  const wchar_t kDisplayName2[] = L"DisplayName2";
+  const wchar_t kInstallLocationParent[] = L"c:\\program files\\company\\";
+  const wchar_t kInstallLocationChild[] =
+      L"c:\\program files\\company\\program";
+  const wchar_t kFile[] = L"c:\\program files\\company\\program\\file.dll";
+
+  InstallLocationProgramInfo kFakeProgram1 = {
+      {
+          L"GUID1", false, false, kDisplayName1, kValidUninstallString,
+      },
+      kInstallLocationParent,
+  };
+  InstallLocationProgramInfo kFakeProgram2 = {
+      {
+          L"GUID2", false, false, kDisplayName2, kValidUninstallString,
+      },
+      kInstallLocationChild,
+  };
+
+  AddFakeProgram(kFakeProgram1);
+  AddFakeProgram(kFakeProgram2);
+
+  InitializeInstalledProgramsSynchronously();
+
+  std::vector<base::string16> program_names;
+  EXPECT_FALSE(installed_programs().GetInstalledProgramNames(
+      base::FilePath(kFile), &program_names));
+}
diff --git a/chrome/browser/conflicts/msi_util_win.cc b/chrome/browser/conflicts/msi_util_win.cc
index 4ecc997..29c2f07 100644
--- a/chrome/browser/conflicts/msi_util_win.cc
+++ b/chrome/browser/conflicts/msi_util_win.cc
@@ -133,7 +133,7 @@
 // GUIDS from it, and uses those to find the path of each component.
 bool MsiUtil::GetMsiComponentPaths(
     const base::string16& product_guid,
-    std::vector<base::string16>* component_paths) {
+    std::vector<base::string16>* component_paths) const {
   base::ThreadRestrictions::AssertIOAllowed();
 
   base::string16 msi_path;
diff --git a/chrome/browser/conflicts/msi_util_win.h b/chrome/browser/conflicts/msi_util_win.h
index 4045cd6..3a5a0f8 100644
--- a/chrome/browser/conflicts/msi_util_win.h
+++ b/chrome/browser/conflicts/msi_util_win.h
@@ -20,7 +20,7 @@
   // Note: Marked virtual to allow mocking.
   virtual bool GetMsiComponentPaths(
       const base::string16& product_guid,
-      std::vector<base::string16>* component_paths);
+      std::vector<base::string16>* component_paths) const;
 };
 
 #endif  // CHROME_BROWSER_CONFLICTS_MSI_UTIL_WIN_H_
diff --git a/chrome/browser/cryptauth/DEPS b/chrome/browser/cryptauth/DEPS
new file mode 100644
index 0000000..55567a48
--- /dev/null
+++ b/chrome/browser/cryptauth/DEPS
@@ -0,0 +1,6 @@
+specific_include_rules = {
+  # TODO(mash): Remove. http://crbug.com/723873
+  "chrome_cryptauth_service\.cc": [
+    "+ash/shell.h",
+  ]
+}
diff --git a/chrome/browser/download/download_browsertest.cc b/chrome/browser/download/download_browsertest.cc
index c67ea0b..3bdf61d 100644
--- a/chrome/browser/download/download_browsertest.cc
+++ b/chrome/browser/download/download_browsertest.cc
@@ -95,7 +95,6 @@
 #include "content/public/browser/render_widget_host.h"
 #include "content/public/browser/resource_context.h"
 #include "content/public/browser/web_contents.h"
-#include "content/public/common/browser_side_navigation_policy.h"
 #include "content/public/common/content_features.h"
 #include "content/public/common/content_switches.h"
 #include "content/public/common/context_menu_params.h"
@@ -326,10 +325,8 @@
 
 DownloadTestObserverNotInProgress::DownloadTestObserverNotInProgress(
     DownloadManager* download_manager,
-    size_t count,
-    content::DownloadTestObserver::DangerousDownloadAction
-        dangerous_download_action)
-    : DownloadTestObserver(download_manager, count, dangerous_download_action),
+    size_t count)
+    : DownloadTestObserver(download_manager, count, ON_DANGEROUS_DOWNLOAD_FAIL),
       started_observing_(false) {
   Init();
 }
@@ -423,7 +420,6 @@
     content::DownloadInterruptReason reason;
     bool show_download_item;  // True if the download item appears on the shelf.
     bool should_redirect_to_documents;  // True if we save it in "My Documents".
-    bool is_dangerous;  // True if we expect this to be classified as dangerous.
   };
 
   struct FileErrorInjectInfo {
@@ -853,8 +849,7 @@
                          : "DOWNLOAD_NAVIGATE")
                  << " show_item = " << download_info.show_download_item
                  << " reason = "
-                 << DownloadInterruptReasonToString(download_info.reason)
-                 << " is dangerous = " << download_info.is_dangerous);
+                 << DownloadInterruptReasonToString(download_info.reason));
 
     std::vector<DownloadItem*> download_items;
     GetDownloads(browser(), &download_items);
@@ -876,17 +871,14 @@
     ASSERT_TRUE(web_contents);
 
     std::unique_ptr<content::DownloadTestObserver> observer;
-    content::DownloadTestObserver::DangerousDownloadAction
-        dangerous_download_action =
-            download_info.is_dangerous
-                ? content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT
-                : content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL;
     if (download_info.reason == content::DOWNLOAD_INTERRUPT_REASON_NONE) {
       observer.reset(new content::DownloadTestObserverTerminal(
-          download_manager, 1, dangerous_download_action));
+          download_manager, 1,
+          content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL));
     } else {
       observer.reset(new content::DownloadTestObserverInterrupted(
-          download_manager, 1, dangerous_download_action));
+          download_manager, 1,
+          content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL));
     }
 
     if (download_info.download_method == DOWNLOAD_DIRECT) {
@@ -931,10 +923,6 @@
     GetDownloads(browser(), &download_items);
     ASSERT_EQ(downloads_expected, download_items.size());
 
-    if (download_info.is_dangerous) {
-      EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen());
-    }
-
     if (download_info.show_download_item) {
       // Find the last download item.
       DownloadItem* item = download_items[0];
@@ -1824,11 +1812,7 @@
   ASSERT_EQ(2u, row.url_chain.size());
   EXPECT_EQ(redirect_url.spec(), row.url_chain[0].spec());
   EXPECT_EQ(download_url.spec(), row.url_chain[1].spec());
-  // PlzNavigate assigns a different initiator here: http://crbug.com/726678
-  if (content::IsBrowserSideNavigationEnabled())
-    EXPECT_EQ(history::DownloadDangerType::NOT_DANGEROUS, row.danger_type);
-  else
-    EXPECT_EQ(history::DownloadDangerType::DANGEROUS_FILE, row.danger_type);
+  EXPECT_EQ(history::DownloadDangerType::NOT_DANGEROUS, row.danger_type);
   EXPECT_LE(start, row.start_time);
   EXPECT_EQ(net::URLRequestSlowDownloadJob::kFirstDownloadSize,
             row.received_bytes);
@@ -1844,9 +1828,7 @@
   std::unique_ptr<content::DownloadTestObserver> download_observer(
       new content::DownloadTestObserverInterrupted(
           DownloadManagerForBrowser(browser()), 1,
-          content::IsBrowserSideNavigationEnabled()
-              ? content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL
-              : content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT));
+          content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL));
   ui_test_utils::NavigateToURL(
       browser(), GURL(net::URLRequestSlowDownloadJob::kErrorDownloadUrl));
   download_observer->WaitForFinished();
@@ -1867,10 +1849,7 @@
   ASSERT_EQ(2u, row1.url_chain.size());
   EXPECT_EQ(redirect_url.spec(), row1.url_chain[0].spec());
   EXPECT_EQ(download_url.spec(), row1.url_chain[1].spec());
-  if (content::IsBrowserSideNavigationEnabled())
-    EXPECT_EQ(history::DownloadDangerType::NOT_DANGEROUS, row1.danger_type);
-  else
-    EXPECT_EQ(history::DownloadDangerType::USER_VALIDATED, row1.danger_type);
+  EXPECT_EQ(history::DownloadDangerType::NOT_DANGEROUS, row1.danger_type);
   EXPECT_LE(start, row1.start_time);
   EXPECT_GE(end, row1.end_time);
   EXPECT_EQ(0, row1.received_bytes);  // There's no ETag. So the intermediate
@@ -2468,46 +2447,44 @@
   DownloadInfo download_info[] = {
       {// Normal navigated download.
        "a_zip_file.zip", "a_zip_file.zip", DOWNLOAD_NAVIGATE,
-       content::DOWNLOAD_INTERRUPT_REASON_NONE, true, false, false},
+       content::DOWNLOAD_INTERRUPT_REASON_NONE, true, false},
       {// Normal direct download.
        "a_zip_file.zip", "a_zip_file.zip", DOWNLOAD_DIRECT,
-       content::DOWNLOAD_INTERRUPT_REASON_NONE, true, false, false},
+       content::DOWNLOAD_INTERRUPT_REASON_NONE, true, false},
       {// Direct download with 404 error.
        "there_IS_no_spoon.zip", "there_IS_no_spoon.zip", DOWNLOAD_DIRECT,
-       content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, true, false,
-       false},
+       content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, true, false},
       {// Navigated download with 404 error.
        "there_IS_no_spoon.zip", "there_IS_no_spoon.zip", DOWNLOAD_NAVIGATE,
-       content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, false, false,
-       false},
+       content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, false, false},
       {// Direct download with 400 error.
        "zip_file_not_found.zip", "zip_file_not_found.zip", DOWNLOAD_DIRECT,
-       content::DOWNLOAD_INTERRUPT_REASON_SERVER_FAILED, true, false, false},
+       content::DOWNLOAD_INTERRUPT_REASON_SERVER_FAILED, true, false},
       {// Navigated download with 400 error.
        "zip_file_not_found.zip", "", DOWNLOAD_NAVIGATE,
-       content::DOWNLOAD_INTERRUPT_REASON_SERVER_FAILED, false, false, false},
+       content::DOWNLOAD_INTERRUPT_REASON_SERVER_FAILED, false, false},
       {// Simulates clicking on <a href="http://..." download="">. The name does
        // not resolve. But since this is an explicit download, the download
        // should appear on the shelf and the error should be indicated.
        "download-anchor-attrib-name-not-resolved.html",
        "http://doesnotexist/shouldnotberesolved", DOWNLOAD_NAVIGATE,
-       content::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, true, false, true},
+       content::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, true, false},
       {// Simulates clicking on <a href="http://..." download=""> where the URL
        // leads to a 404 response. This is different from the previous test case
        // in that the ResourceLoader issues a OnResponseStarted() callback since
        // the headers are successfully received.
        "download-anchor-attrib-404.html", "there_IS_no_spoon.zip",
        DOWNLOAD_NAVIGATE, content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT,
-       true, false, false},
+       true, false},
       {// Similar to the above, but the resulting response contains a status
        // code of 400.
        "download-anchor-attrib-400.html", "zip_file_not_found.zip",
        DOWNLOAD_NAVIGATE, content::DOWNLOAD_INTERRUPT_REASON_SERVER_FAILED,
-       true, false, false},
+       true, false},
       {// Direct download of a URL where the hostname doesn't resolve.
        "http://doesnotexist/shouldnotdownloadsuccessfully",
        "http://doesnotexist/shouldnotdownloadsuccessfully", DOWNLOAD_DIRECT,
-       content::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, true, false, false}};
+       content::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, true, false}};
 
   DownloadFilesCheckErrors(arraysize(download_info), download_info);
 }
@@ -2614,10 +2591,10 @@
   DownloadInfo download_info[] = {
       {"a_zip_file.zip", "a_zip_file.zip", DOWNLOAD_DIRECT,
        // This passes because we switch to the My Documents folder.
-       content::DOWNLOAD_INTERRUPT_REASON_NONE, true, true, false},
+       content::DOWNLOAD_INTERRUPT_REASON_NONE, true, true},
       {"a_zip_file.zip", "a_zip_file.zip", DOWNLOAD_NAVIGATE,
        // This passes because we switch to the My Documents folder.
-       content::DOWNLOAD_INTERRUPT_REASON_NONE, true, true, false}};
+       content::DOWNLOAD_INTERRUPT_REASON_NONE, true, true}};
 
   DownloadFilesToReadonlyFolder(arraysize(download_info), download_info);
 }
@@ -2859,7 +2836,7 @@
   std::unique_ptr<content::DownloadTestObserver> waiter(
       new content::DownloadTestObserverTerminal(
           DownloadManagerForBrowser(browser()), 1,
-          content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT));
+          content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL));
 
   // Click on the link with the alt key pressed. This will download the link
   // target.
@@ -3289,8 +3266,7 @@
           DownloadManagerForBrowser(browser())));
   std::unique_ptr<DownloadTestObserverNotInProgress> completion_observer(
       new DownloadTestObserverNotInProgress(
-          DownloadManagerForBrowser(browser()), 1,
-          content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL));
+          DownloadManagerForBrowser(browser()), 1));
   // Wait for two transitions to a resumable state
   std::unique_ptr<content::DownloadTestObserver> resumable_observer(
       new DownloadTestObserverResumable(DownloadManagerForBrowser(browser()),
diff --git a/chrome/browser/download/download_browsertest.h b/chrome/browser/download/download_browsertest.h
index 9054d5d..3feb4ab 100644
--- a/chrome/browser/download/download_browsertest.h
+++ b/chrome/browser/download/download_browsertest.h
@@ -14,11 +14,8 @@
 // from IN_PROGRESS to another state, but only after StartObserving() is called.
 class DownloadTestObserverNotInProgress : public content::DownloadTestObserver {
  public:
-  DownloadTestObserverNotInProgress(
-      content::DownloadManager* download_manager,
-      size_t count,
-      content::DownloadTestObserver::DangerousDownloadAction
-          dangerous_download_action);
+  DownloadTestObserverNotInProgress(content::DownloadManager* download_manager,
+                                    size_t count);
   ~DownloadTestObserverNotInProgress() override;
 
   void StartObserving();
diff --git a/chrome/browser/extensions/DEPS b/chrome/browser/extensions/DEPS
index a0fa60d..e060c160 100644
--- a/chrome/browser/extensions/DEPS
+++ b/chrome/browser/extensions/DEPS
@@ -1,4 +1,7 @@
 include_rules = [
+  # TODO(mash): Remove. http://crbug.com/678705
+  "+ash",
+
   "+components/chrome_apps",
   "+components/crx_file",
   "+components/strings/grit/components_strings.h",
diff --git a/chrome/browser/extensions/api/web_navigation/web_navigation_apitest.cc b/chrome/browser/extensions/api/web_navigation/web_navigation_apitest.cc
index 7eb2f35..a315160 100644
--- a/chrome/browser/extensions/api/web_navigation/web_navigation_apitest.cc
+++ b/chrome/browser/extensions/api/web_navigation/web_navigation_apitest.cc
@@ -415,8 +415,7 @@
   download_prefs->SetDownloadPath(download_directory.GetPath());
 
   DownloadTestObserverNotInProgress download_observer(
-      content::BrowserContext::GetDownloadManager(profile()), 1,
-      content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT);
+      content::BrowserContext::GetDownloadManager(profile()), 1);
   download_observer.StartObserving();
   ASSERT_TRUE(StartEmbeddedTestServer());
   ASSERT_TRUE(RunExtensionTest("webnavigation/download"))
diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc
index 12463d42..9a94106 100644
--- a/chrome/browser/io_thread.cc
+++ b/chrome/browser/io_thread.cc
@@ -644,9 +644,6 @@
 
   CreateDefaultAuthHandlerFactory();
   globals_->http_server_properties.reset(new net::HttpServerPropertiesImpl());
-  // For the ProxyScriptFetcher, we use a direct ProxyService.
-  globals_->proxy_script_fetcher_proxy_service =
-      net::ProxyService::CreateDirectWithNetLog(net_log_);
   globals_->dns_probe_service.reset(new chrome_browser_net::DnsProbeService());
   globals_->host_mapping_rules.reset(new net::HostMappingRules());
   if (command_line.HasSwitch(switches::kHostRules)) {
@@ -715,6 +712,9 @@
     ct_tree_tracker_.reset();
   }
 
+  if (globals_->system_request_context)
+    globals_->system_request_context->proxy_service()->OnShutdown();
+
   // Release objects that the net::URLRequestContext could have been pointing
   // to.
 
@@ -822,9 +822,6 @@
   if (globals_->system_request_context_storage)
     globals_->system_request_context_storage->http_network_session()
         ->DisableQuic();
-
-  if (globals_->proxy_script_fetcher_http_network_session)
-    globals_->proxy_script_fetcher_http_network_session->DisableQuic();
 }
 
 base::TimeTicks IOThread::creation_time() const {
@@ -907,18 +904,10 @@
       globals_->cert_transparency_verifier.get());
   context->set_ct_policy_enforcer(globals_->ct_policy_enforcer.get());
 
-  TRACE_EVENT_BEGIN0("startup",
-                     "IOThread::Init:ProxyScriptFetcherRequestContext");
-  globals_->proxy_script_fetcher_context.reset(
-      ConstructProxyScriptFetcherContext(globals_, params_, net_log_));
-  TRACE_EVENT_END0("startup",
-                   "IOThread::Init:ProxyScriptFetcherRequestContext");
-
   const base::CommandLine& command_line =
       *base::CommandLine::ForCurrentProcess();
   context_storage->set_proxy_service(ProxyServiceFactory::CreateProxyService(
-      net_log_, globals_->proxy_script_fetcher_context.get(),
-      globals_->system_network_delegate.get(),
+      net_log_, context, globals_->system_network_delegate.get(),
       std::move(system_proxy_config_service_), command_line,
       WpadQuickCheckEnabled(), PacHttpsUrlStrippingEnabled()));
 
@@ -932,8 +921,24 @@
       base::MakeUnique<net::HttpNetworkLayer>(
           context_storage->http_network_session()));
 
-  context_storage->set_job_factory(
-      base::MakeUnique<net::URLRequestJobFactoryImpl>());
+  std::unique_ptr<net::URLRequestJobFactoryImpl> job_factory(
+      new net::URLRequestJobFactoryImpl());
+
+  job_factory->SetProtocolHandler(url::kDataScheme,
+                                  base::MakeUnique<net::DataProtocolHandler>());
+  job_factory->SetProtocolHandler(
+      url::kFileScheme,
+      base::MakeUnique<net::FileProtocolHandler>(
+          base::CreateTaskRunnerWithTraits(
+              {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
+               base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})));
+#if !BUILDFLAG(DISABLE_FTP_SUPPORT)
+  job_factory->SetProtocolHandler(
+      url::kFtpScheme,
+      net::FtpProtocolHandler::Create(globals_->host_resolver.get()));
+#endif
+
+  context_storage->set_job_factory(std::move(job_factory));
 }
 
 // static
@@ -1030,79 +1035,6 @@
       http_09_on_non_default_ports_enabled;
 }
 
-// static
-net::URLRequestContext* IOThread::ConstructProxyScriptFetcherContext(
-    IOThread::Globals* globals,
-    const net::HttpNetworkSession::Params& params,
-    net::NetLog* net_log) {
-  net::URLRequestContext* context = new net::URLRequestContext;
-  context->set_net_log(net_log);
-  context->set_host_resolver(globals->host_resolver.get());
-  context->set_cert_verifier(globals->cert_verifier.get());
-  context->set_transport_security_state(
-      globals->transport_security_state.get());
-  context->set_cert_transparency_verifier(
-      globals->cert_transparency_verifier.get());
-  context->set_ct_policy_enforcer(globals->ct_policy_enforcer.get());
-  context->set_ssl_config_service(globals->ssl_config_service.get());
-  context->set_http_auth_handler_factory(
-      globals->http_auth_handler_factory.get());
-  context->set_proxy_service(globals->proxy_script_fetcher_proxy_service.get());
-
-  context->set_job_factory(
-      globals->proxy_script_fetcher_url_request_job_factory.get());
-
-  context->set_cookie_store(globals->system_request_context->cookie_store());
-  context->set_channel_id_service(
-      globals->system_request_context->channel_id_service());
-  context->set_network_delegate(globals->system_network_delegate.get());
-  context->set_http_user_agent_settings(
-      globals->http_user_agent_settings.get());
-  context->set_http_server_properties(globals->http_server_properties.get());
-
-  context->set_enable_brotli(globals->enable_brotli);
-
-  net::HttpNetworkSession::Params session_params(params);
-  net::URLRequestContextBuilder::SetHttpNetworkSessionComponents(
-      context, &session_params);
-
-  globals->proxy_script_fetcher_http_network_session.reset(
-      new net::HttpNetworkSession(session_params));
-  globals->proxy_script_fetcher_http_transaction_factory.reset(
-      new net::HttpNetworkLayer(
-          globals->proxy_script_fetcher_http_network_session.get()));
-  context->set_name("proxy");
-  context->set_http_transaction_factory(
-      globals->proxy_script_fetcher_http_transaction_factory.get());
-
-  std::unique_ptr<net::URLRequestJobFactoryImpl> job_factory(
-      new net::URLRequestJobFactoryImpl());
-
-  job_factory->SetProtocolHandler(url::kDataScheme,
-                                  base::MakeUnique<net::DataProtocolHandler>());
-  job_factory->SetProtocolHandler(
-      url::kFileScheme,
-      base::MakeUnique<net::FileProtocolHandler>(
-          base::CreateTaskRunnerWithTraits(
-              {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
-               base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})));
-#if !BUILDFLAG(DISABLE_FTP_SUPPORT)
-  job_factory->SetProtocolHandler(
-      url::kFtpScheme,
-      net::FtpProtocolHandler::Create(globals->host_resolver.get()));
-#endif
-  globals->proxy_script_fetcher_url_request_job_factory =
-      std::move(job_factory);
-
-  context->set_job_factory(
-      globals->proxy_script_fetcher_url_request_job_factory.get());
-
-  // TODO(rtenneti): We should probably use HttpServerPropertiesManager for the
-  // system URLRequestContext too. There's no reason this should be tied to a
-  // profile.
-  return context;
-}
-
 metrics::UpdateUsagePrefCallbackType IOThread::GetMetricsDataUseForwarder() {
   return base::Bind(&UpdateMetricsUsagePrefsOnUIThread);
 }
diff --git a/chrome/browser/io_thread.h b/chrome/browser/io_thread.h
index 4b83d2b..2cf42f0 100644
--- a/chrome/browser/io_thread.h
+++ b/chrome/browser/io_thread.h
@@ -82,19 +82,16 @@
 class HostResolver;
 class HttpAuthPreferences;
 class HttpServerProperties;
-class HttpTransactionFactory;
 class HttpUserAgentSettings;
 class LoggingNetworkChangeObserver;
 class NetworkDelegate;
 class NetworkQualityEstimator;
 class ProxyConfigService;
-class ProxyService;
 class SSLConfigService;
 class TransportSecurityState;
 class URLRequestContext;
 class URLRequestContextGetter;
 class URLRequestContextStorage;
-class URLRequestJobFactory;
 
 namespace ct {
 class STHObserver;
@@ -160,21 +157,7 @@
     scoped_refptr<net::SSLConfigService> ssl_config_service;
     std::unique_ptr<net::HttpAuthHandlerFactory> http_auth_handler_factory;
     std::unique_ptr<net::HttpServerProperties> http_server_properties;
-    std::unique_ptr<net::ProxyService> proxy_script_fetcher_proxy_service;
-    std::unique_ptr<net::HttpNetworkSession>
-        proxy_script_fetcher_http_network_session;
-    std::unique_ptr<net::HttpTransactionFactory>
-        proxy_script_fetcher_http_transaction_factory;
-    std::unique_ptr<net::URLRequestJobFactory>
-        proxy_script_fetcher_url_request_job_factory;
     std::unique_ptr<net::HttpAuthPreferences> http_auth_preferences;
-    // TODO(willchan): Remove proxy script fetcher context since it's not
-    // necessary now that I got rid of refcounting URLRequestContexts.
-    //
-    // The first URLRequestContext is |system_url_request_context|. We introduce
-    // |proxy_script_fetcher_context| for the second context. It has a direct
-    // ProxyService, since we always directly connect to fetch the PAC script.
-    std::unique_ptr<net::URLRequestContext> proxy_script_fetcher_context;
     std::unique_ptr<net::URLRequestContextStorage>
         system_request_context_storage;
     std::unique_ptr<net::URLRequestContext> system_request_context;
@@ -303,14 +286,6 @@
       bool http_09_on_non_default_ports_enabled,
       net::HttpNetworkSession::Params* params);
 
-  // TODO(willchan): Remove proxy script fetcher context since it's not
-  // necessary now that I got rid of refcounting URLRequestContexts.
-  // See IOThread::Globals for details.
-  static net::URLRequestContext* ConstructProxyScriptFetcherContext(
-      IOThread::Globals* globals,
-      const net::HttpNetworkSession::Params& params,
-      net::NetLog* net_log);
-
   // The NetLog is owned by the browser process, to allow logging from other
   // threads during shutdown, but is used most frequently on the IOThread.
   net_log::ChromeNetLog* net_log_;
diff --git a/chrome/browser/io_thread_browsertest.cc b/chrome/browser/io_thread_browsertest.cc
new file mode 100644
index 0000000..11dcd9e
--- /dev/null
+++ b/chrome/browser/io_thread_browsertest.cc
@@ -0,0 +1,177 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/io_thread.h"
+
+#include <memory>
+
+#include "base/command_line.h"
+#include "base/files/file_path.h"
+#include "base/files/file_util.h"
+#include "base/files/scoped_temp_dir.h"
+#include "base/memory/ptr_util.h"
+#include "base/run_loop.h"
+#include "base/strings/stringprintf.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/common/chrome_switches.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "net/base/filename_util.h"
+#include "net/base/host_port_pair.h"
+#include "net/test/embedded_test_server/embedded_test_server.h"
+#include "net/test/embedded_test_server/simple_connection_listener.h"
+#include "net/url_request/url_fetcher.h"
+#include "net/url_request/url_fetcher_delegate.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
+
+namespace {
+
+// URLFetcherDelegate that expects a request to hang.
+class HangingURLFetcherDelegate : public net::URLFetcherDelegate {
+ public:
+  HangingURLFetcherDelegate() {}
+  ~HangingURLFetcherDelegate() override {}
+
+  void OnURLFetchComplete(const net::URLFetcher* source) override {
+    ADD_FAILURE() << "This request should never complete.";
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(HangingURLFetcherDelegate);
+};
+
+// URLFetcherDelegate that can wait for a request to succeed.
+class TestURLFetcherDelegate : public net::URLFetcherDelegate {
+ public:
+  TestURLFetcherDelegate() {}
+  ~TestURLFetcherDelegate() override {}
+
+  void OnURLFetchComplete(const net::URLFetcher* source) override {
+    run_loop_.Quit();
+  }
+
+  void WaitForCompletion() { run_loop_.Run(); }
+
+ private:
+  base::RunLoop run_loop_;
+
+  DISALLOW_COPY_AND_ASSIGN(TestURLFetcherDelegate);
+};
+
+class IOThreadPacTest : public InProcessBrowserTest {
+ public:
+  IOThreadPacTest() {}
+  ~IOThreadPacTest() override {}
+
+  void SetUp() override {
+    // Must start listening (And get a port for the proxy) before calling
+    // SetUp().
+    ASSERT_TRUE(embedded_test_server()->InitializeAndListen());
+    InProcessBrowserTest::SetUp();
+  }
+
+  void SetUpOnMainThread() override {
+    embedded_test_server()->StartAcceptingConnections();
+
+    InProcessBrowserTest::SetUpOnMainThread();
+  }
+
+  void TearDown() override {
+    // Need to stop this before |connection_listener_| is destroyed.
+    EXPECT_TRUE(embedded_test_server()->ShutdownAndWaitUntilComplete());
+    InProcessBrowserTest::TearDown();
+  }
+};
+
+class IOThreadPacTestWithHangingRequest : public IOThreadPacTest {
+ public:
+  IOThreadPacTestWithHangingRequest() {}
+  ~IOThreadPacTestWithHangingRequest() override {}
+
+  void SetUpOnMainThread() override {
+    // This must be created after the main message loop has been set up.
+    // Waits for one connection.  Additional connections are fine.
+    connection_listener_ =
+        base::MakeUnique<net::test_server::SimpleConnectionListener>(
+            1, net::test_server::SimpleConnectionListener::
+                   ALLOW_ADDITIONAL_CONNECTIONS);
+
+    embedded_test_server()->SetConnectionListener(connection_listener_.get());
+
+    IOThreadPacTest::SetUpOnMainThread();
+  }
+
+  void SetUpCommandLine(base::CommandLine* command_line) override {
+    command_line->AppendSwitchASCII(
+        switches::kProxyPacUrl, embedded_test_server()->GetURL("/hung").spec());
+  }
+
+ protected:
+  std::unique_ptr<net::test_server::SimpleConnectionListener>
+      connection_listener_;
+};
+
+// Make sure that the SystemURLRequestContext is shut down correctly when
+// there's an in-progress PAC script fetch.
+IN_PROC_BROWSER_TEST_F(IOThreadPacTestWithHangingRequest, Shutdown) {
+  // Request that should hang while trying to request the PAC script.
+  // Enough requests are created on startup that this probably isn't needed, but
+  // best to be safe.
+  HangingURLFetcherDelegate hanging_fetcher_delegate;
+  std::unique_ptr<net::URLFetcher> hanging_fetcher = net::URLFetcher::Create(
+      GURL("http://blah/"), net::URLFetcher::GET, &hanging_fetcher_delegate);
+  hanging_fetcher->SetRequestContext(
+      g_browser_process->io_thread()->system_url_request_context_getter());
+  hanging_fetcher->Start();
+
+  connection_listener_->WaitForConnections();
+}
+
+class IOThreadPacTestWithFileURL : public IOThreadPacTest {
+ public:
+  IOThreadPacTestWithFileURL() { EXPECT_TRUE(temp_dir_.CreateUniqueTempDir()); }
+
+  ~IOThreadPacTestWithFileURL() override {}
+
+  void SetUpCommandLine(base::CommandLine* command_line) override {
+    base::FilePath pac_file_path;
+    ASSERT_TRUE(
+        base::CreateTemporaryFileInDir(temp_dir_.GetPath(), &pac_file_path));
+
+    std::string pac_script = base::StringPrintf(
+        "function FindProxyForURL(url, host){ return 'PROXY %s;'; }",
+        net::HostPortPair::FromURL(embedded_test_server()->base_url())
+            .ToString()
+            .c_str());
+    ASSERT_EQ(
+        static_cast<int>(pac_script.size()),
+        base::WriteFile(pac_file_path, pac_script.c_str(), pac_script.size()));
+
+    command_line->AppendSwitchASCII(
+        switches::kProxyPacUrl, net::FilePathToFileURL(pac_file_path).spec());
+  }
+
+ protected:
+  base::ScopedTempDir temp_dir_;
+};
+
+// Make sure the system URLRequestContext can hadle fetching PAC scripts from
+// file URLs.
+IN_PROC_BROWSER_TEST_F(IOThreadPacTestWithFileURL, FilePac) {
+  TestURLFetcherDelegate fetcher_delegate;
+  std::unique_ptr<net::URLFetcher> fetcher =
+      net::URLFetcher::Create(GURL("http://foo:12345/echoheader?Foo"),
+                              net::URLFetcher::GET, &fetcher_delegate);
+  fetcher->AddExtraRequestHeader("Foo: Bar");
+  fetcher->SetRequestContext(
+      g_browser_process->io_thread()->system_url_request_context_getter());
+  fetcher->Start();
+  fetcher_delegate.WaitForCompletion();
+  EXPECT_EQ(200, fetcher->GetResponseCode());
+  std::string response;
+  ASSERT_TRUE(fetcher->GetResponseAsString(&response));
+  EXPECT_EQ("Bar", response);
+}
+
+}  // namespace
diff --git a/chrome/browser/lifetime/DEPS b/chrome/browser/lifetime/DEPS
new file mode 100644
index 0000000..37b8dbf
--- /dev/null
+++ b/chrome/browser/lifetime/DEPS
@@ -0,0 +1,6 @@
+specific_include_rules = {
+  # TODO(mash): Remove. http://crbug.com/723876
+  "application_lifetime_aura\.cc": [
+    "+ash/shell.h",
+  ]
+}
diff --git a/chrome/browser/loader/chrome_resource_dispatcher_host_delegate_browsertest.cc b/chrome/browser/loader/chrome_resource_dispatcher_host_delegate_browsertest.cc
index d29766e..412147f 100644
--- a/chrome/browser/loader/chrome_resource_dispatcher_host_delegate_browsertest.cc
+++ b/chrome/browser/loader/chrome_resource_dispatcher_host_delegate_browsertest.cc
@@ -606,8 +606,7 @@
                        ThrottlesAddedExactlyOnceToTinySniffedDownloads) {
   GURL url = embedded_test_server()->GetURL("/downloads/tiny_binary.bin");
   DownloadTestObserverNotInProgress download_observer(
-      content::BrowserContext::GetDownloadManager(browser()->profile()), 1,
-      content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL);
+      content::BrowserContext::GetDownloadManager(browser()->profile()), 1);
   download_observer.StartObserving();
   ui_test_utils::NavigateToURL(browser(), url);
   download_observer.WaitForFinished();
@@ -620,8 +619,7 @@
                        ThrottlesAddedExactlyOnceToLargeSniffedDownloads) {
   GURL url = embedded_test_server()->GetURL("/downloads/thisdayinhistory.xls");
   DownloadTestObserverNotInProgress download_observer(
-      content::BrowserContext::GetDownloadManager(browser()->profile()), 1,
-      content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL);
+      content::BrowserContext::GetDownloadManager(browser()->profile()), 1);
   download_observer.StartObserving();
   ui_test_utils::NavigateToURL(browser(), url);
   download_observer.WaitForFinished();
@@ -633,8 +631,7 @@
 IN_PROC_BROWSER_TEST_F(ChromeResourceDispatcherHostDelegateBrowserTest,
                        ThrottlesAddedExactlyOnceToADownloads) {
   DownloadTestObserverNotInProgress download_observer(
-      content::BrowserContext::GetDownloadManager(browser()->profile()), 1,
-      content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL);
+      content::BrowserContext::GetDownloadManager(browser()->profile()), 1);
   download_observer.StartObserving();
   ui_test_utils::NavigateToURL(browser(), embedded_test_server()->GetURL(
                                               "/download-anchor-attrib.html"));
diff --git a/chrome/browser/media/webrtc/DEPS b/chrome/browser/media/webrtc/DEPS
index 1bfb3bc..f6e252e 100644
--- a/chrome/browser/media/webrtc/DEPS
+++ b/chrome/browser/media/webrtc/DEPS
@@ -1,7 +1,12 @@
 include_rules = [
-  "+media/audio",
-  "+media/base",
-  "+media/media_features.h",
+  # TODO(mash): Remove. http://crbug.com/723880
+  "+ash/shell.h",
   "+third_party/libyuv",
   "+third_party/webrtc",
 ]
+specific_include_rules = {
+  # TODO(mash): Remove. http://crbug.com/723880
+  ".*_unittest\.cc": [
+    "+ash/test/ash_test_base.h",
+  ]
+}
diff --git a/chrome/browser/memory/DEPS b/chrome/browser/memory/DEPS
new file mode 100644
index 0000000..57c4684
--- /dev/null
+++ b/chrome/browser/memory/DEPS
@@ -0,0 +1,6 @@
+include_rules = [
+  # TODO(mash): Remove. http://crbug.com/723881
+  "+ash/multi_profile_uma.h",
+  "+ash/shell.h",
+  "+ash/shell_port.h",
+]
diff --git a/chrome/browser/net/proxy_browsertest.cc b/chrome/browser/net/proxy_browsertest.cc
index b4edf1e6..a5f0c1c 100644
--- a/chrome/browser/net/proxy_browsertest.cc
+++ b/chrome/browser/net/proxy_browsertest.cc
@@ -27,7 +27,7 @@
 #include "content/public/test/browser_test_utils.h"
 #include "net/base/load_flags.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
-#include "net/test/embedded_test_server/embedded_test_server_connection_listener.h"
+#include "net/test/embedded_test_server/simple_connection_listener.h"
 #include "net/test/spawned_test_server/spawned_test_server.h"
 #include "net/test/test_data_directory.h"
 #include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
@@ -284,29 +284,6 @@
   VerifyProxyScript(browser());
 }
 
-// Waits for the one connection. It's fine if there are more.
-class WaitForConnectionsListener
-    : public net::test_server::EmbeddedTestServerConnectionListener {
- public:
-  WaitForConnectionsListener() {}
-
-  void AcceptedSocket(const net::StreamSocket& socket) override {
-    content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
-                                     run_loop_.QuitClosure());
-  }
-
-  void ReadFromSocket(const net::StreamSocket& socket, int rv) override {}
-
-  void Wait() { run_loop_.Run(); }
-
- private:
-  scoped_refptr<base::SequencedTaskRunner> task_runner_;
-
-  base::RunLoop run_loop_;
-
-  DISALLOW_COPY_AND_ASSIGN(WaitForConnectionsListener);
-};
-
 // Fetch PAC script via a hanging http:// URL.
 class HangingPacRequestProxyScriptBrowserTest : public InProcessBrowserTest {
  public:
@@ -320,9 +297,19 @@
     InProcessBrowserTest::SetUp();
   }
 
+  void TearDown() override {
+    // Need to stop this before |connection_listener_| is destroyed.
+    EXPECT_TRUE(embedded_test_server()->ShutdownAndWaitUntilComplete());
+    InProcessBrowserTest::TearDown();
+  }
+
   void SetUpOnMainThread() override {
     // This must be created after the main message loop has been set up.
-    connection_listener_ = base::MakeUnique<WaitForConnectionsListener>();
+    // Waits for one connection.  Additional connections are fine.
+    connection_listener_ =
+        base::MakeUnique<net::test_server::SimpleConnectionListener>(
+            1, net::test_server::SimpleConnectionListener::
+                   ALLOW_ADDITIONAL_CONNECTIONS);
     embedded_test_server()->SetConnectionListener(connection_listener_.get());
     embedded_test_server()->StartAcceptingConnections();
 
@@ -335,7 +322,8 @@
   }
 
  protected:
-  std::unique_ptr<WaitForConnectionsListener> connection_listener_;
+  std::unique_ptr<net::test_server::SimpleConnectionListener>
+      connection_listener_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(HangingPacRequestProxyScriptBrowserTest);
@@ -369,7 +357,7 @@
   hanging_fetcher->SetRequestContext(browser()->profile()->GetRequestContext());
   hanging_fetcher->Start();
 
-  connection_listener_->Wait();
+  connection_listener_->WaitForConnections();
 }
 
 }  // namespace
diff --git a/chrome/browser/notifications/DEPS b/chrome/browser/notifications/DEPS
index d6abddad..49a4ca2 100644
--- a/chrome/browser/notifications/DEPS
+++ b/chrome/browser/notifications/DEPS
@@ -1,3 +1,5 @@
 include_rules = [
+  # TODO(mash): Remove. http://crbug.com/723882
+  "+ash",
   "+dbus",
 ]
diff --git a/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc b/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc
index dd85921..3a1b844d8 100644
--- a/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc
@@ -100,7 +100,8 @@
     return should_ignore ? STOP_OBSERVING : CONTINUE_OBSERVING;
   }
 
-  ObservePolicy OnCommit(content::NavigationHandle* handle) override {
+  ObservePolicy OnCommit(content::NavigationHandle* handle,
+                         ukm::SourceId source_id) override {
     const bool should_ignore =
         handle->GetURL().spec().find("ignore-on-commit") != std::string::npos;
     return should_ignore ? STOP_OBSERVING : CONTINUE_OBSERVING;
diff --git a/chrome/browser/page_load_metrics/observers/ads_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/ads_page_load_metrics_observer.cc
index 3030390..49610fd 100644
--- a/chrome/browser/page_load_metrics/observers/ads_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/ads_page_load_metrics_observer.cc
@@ -81,7 +81,8 @@
 
 page_load_metrics::PageLoadMetricsObserver::ObservePolicy
 AdsPageLoadMetricsObserver::OnCommit(
-    content::NavigationHandle* navigation_handle) {
+    content::NavigationHandle* navigation_handle,
+    ukm::SourceId source_id) {
   DCHECK(ad_frames_data_.empty());
 
   committed_ = true;
diff --git a/chrome/browser/page_load_metrics/observers/ads_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/ads_page_load_metrics_observer.h
index a9f45549..3e42a42e 100644
--- a/chrome/browser/page_load_metrics/observers/ads_page_load_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/observers/ads_page_load_metrics_observer.h
@@ -11,6 +11,7 @@
 
 #include "base/macros.h"
 #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h"
+#include "components/ukm/ukm_source.h"
 #include "net/http/http_response_info.h"
 
 // This observer labels each sub-frame as an ad or not, and keeps track of
@@ -26,7 +27,8 @@
   ~AdsPageLoadMetricsObserver() override;
 
   // page_load_metrics::PageLoadMetricsObserver
-  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle) override;
+  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle,
+                         ukm::SourceId source_id) override;
   void OnDidFinishSubFrameNavigation(
       content::NavigationHandle* navigation_handle) override;
   ObservePolicy FlushMetricsOnAppEnterBackground(
diff --git a/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.cc
index 9149beb..f03d015 100644
--- a/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.cc
@@ -84,7 +84,8 @@
 
 page_load_metrics::PageLoadMetricsObserver::ObservePolicy
 AMPPageLoadMetricsObserver::OnCommit(
-    content::NavigationHandle* navigation_handle) {
+    content::NavigationHandle* navigation_handle,
+    ukm::SourceId source_id) {
   current_url_ = navigation_handle->GetURL();
   view_type_ = GetAMPViewType(current_url_);
   return CONTINUE_OBSERVING;
diff --git a/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.h
index d501c2e1..b3ecac8 100644
--- a/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.h
@@ -7,6 +7,7 @@
 
 #include "base/macros.h"
 #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h"
+#include "components/ukm/ukm_source.h"
 
 namespace content {
 class NavigationHandle;
@@ -40,7 +41,8 @@
   ~AMPPageLoadMetricsObserver() override;
 
   // page_load_metrics::PageLoadMetricsObserver:
-  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle) override;
+  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle,
+                         ukm::SourceId source_id) override;
   void OnCommitSameDocumentNavigation(
       content::NavigationHandle* navigation_handle) override;
   void OnDomContentLoadedEventStart(
diff --git a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc
index 9ff167c..08ce2ed 100644
--- a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc
@@ -269,7 +269,8 @@
 
 page_load_metrics::PageLoadMetricsObserver::ObservePolicy
 CorePageLoadMetricsObserver::OnCommit(
-    content::NavigationHandle* navigation_handle) {
+    content::NavigationHandle* navigation_handle,
+    ukm::SourceId source_id) {
   transition_ = navigation_handle->GetPageTransition();
   const net::HttpResponseHeaders* headers =
       navigation_handle->GetResponseHeaders();
diff --git a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.h
index 520a077..1e3331eb 100644
--- a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.h
@@ -6,6 +6,7 @@
 #define CHROME_BROWSER_PAGE_LOAD_METRICS_OBSERVERS_CORE_PAGE_LOAD_METRICS_OBSERVER_H_
 
 #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h"
+#include "components/ukm/ukm_source.h"
 
 namespace internal {
 
@@ -93,7 +94,8 @@
   // page_load_metrics::PageLoadMetricsObserver:
   ObservePolicy OnRedirect(
       content::NavigationHandle* navigation_handle) override;
-  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle) override;
+  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle,
+                         ukm::SourceId source_id) override;
   void OnDomContentLoadedEventStart(
       const page_load_metrics::mojom::PageLoadTiming& timing,
       const page_load_metrics::PageLoadExtraInfo& extra_info) override;
diff --git a/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.cc
index d5e309b..5e05b1b 100644
--- a/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.cc
@@ -125,7 +125,8 @@
 // Check if the NavigationData indicates anything about the DataReductionProxy.
 page_load_metrics::PageLoadMetricsObserver::ObservePolicy
 DataReductionProxyMetricsObserver::OnCommit(
-    content::NavigationHandle* navigation_handle) {
+    content::NavigationHandle* navigation_handle,
+    ukm::SourceId source_id) {
   // This BrowserContext is valid for the lifetime of
   // DataReductionProxyMetricsObserver. BrowserContext is always valid and
   // non-nullptr in NavigationControllerImpl, which is a member of WebContents.
diff --git a/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.h b/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.h
index ae2a4df1..1b783db 100644
--- a/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.h
@@ -11,6 +11,7 @@
 
 #include "base/macros.h"
 #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h"
+#include "components/ukm/ukm_source.h"
 
 namespace content {
 class BrowserContext;
@@ -67,7 +68,8 @@
   ObservePolicy OnStart(content::NavigationHandle* navigation_handle,
                         const GURL& currently_committed_url,
                         bool started_in_foreground) override;
-  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle) override;
+  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle,
+                         ukm::SourceId source_id) override;
   ObservePolicy FlushMetricsOnAppEnterBackground(
       const page_load_metrics::mojom::PageLoadTiming& timing,
       const page_load_metrics::PageLoadExtraInfo& info) override;
diff --git a/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer_unittest.cc
index 9d5b4af..ac083d02 100644
--- a/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer_unittest.cc
@@ -109,13 +109,14 @@
   ~TestDataReductionProxyMetricsObserver() override {}
 
   // page_load_metrics::PageLoadMetricsObserver implementation:
-  ObservePolicy OnCommit(
-      content::NavigationHandle* navigation_handle) override {
+  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle,
+                         ukm::SourceId source_id) override {
     DataReductionProxyData* data =
         DataForNavigationHandle(web_contents_, navigation_handle);
     data->set_used_data_reduction_proxy(data_reduction_proxy_used_);
     data->set_lofi_requested(lofi_used_);
-    return DataReductionProxyMetricsObserver::OnCommit(navigation_handle);
+    return DataReductionProxyMetricsObserver::OnCommit(navigation_handle,
+                                                       source_id);
   }
 
   DataReductionProxyPingbackClient* GetPingbackClient() const override {
diff --git a/chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_observer.cc
index c1d74d73..6b850284 100644
--- a/chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_observer.cc
@@ -461,7 +461,8 @@
 
 page_load_metrics::PageLoadMetricsObserver::ObservePolicy
 FromGWSPageLoadMetricsObserver::OnCommit(
-    content::NavigationHandle* navigation_handle) {
+    content::NavigationHandle* navigation_handle,
+    ukm::SourceId source_id) {
   // We'd like to also check navigation_handle->HasUserGesture() here, however
   // this signal is not carried forward for navigations that open links in new
   // tabs, so we look only at PAGE_TRANSITION_LINK. Back/forward navigations
diff --git a/chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_observer.h
index e4d863c..2364e8b 100644
--- a/chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_observer.h
@@ -8,6 +8,7 @@
 #include "base/macros.h"
 #include "base/optional.h"
 #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h"
+#include "components/ukm/ukm_source.h"
 #include "url/gurl.h"
 
 namespace internal {
@@ -150,7 +151,8 @@
   ObservePolicy OnStart(content::NavigationHandle* navigation_handle,
                          const GURL& currently_committed_url,
                          bool started_in_foreground) override;
-  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle) override;
+  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle,
+                         ukm::SourceId source_id) override;
 
   ObservePolicy FlushMetricsOnAppEnterBackground(
       const page_load_metrics::mojom::PageLoadTiming& timing,
diff --git a/chrome/browser/page_load_metrics/observers/google_captcha_observer.cc b/chrome/browser/page_load_metrics/observers/google_captcha_observer.cc
index abc00e4f..62426f2 100644
--- a/chrome/browser/page_load_metrics/observers/google_captcha_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/google_captcha_observer.cc
@@ -45,7 +45,8 @@
 GoogleCaptchaObserver::GoogleCaptchaObserver() {}
 
 page_load_metrics::PageLoadMetricsObserver::ObservePolicy
-GoogleCaptchaObserver::OnCommit(content::NavigationHandle* navigation_handle) {
+GoogleCaptchaObserver::OnCommit(content::NavigationHandle* navigation_handle,
+                                ukm::SourceId source_id) {
   if (!navigation_handle->IsSameDocument() &&
       IsGoogleCaptcha(navigation_handle->GetURL())) {
     RecordGoogleCaptchaEvent(GOOGLE_CAPTCHA_SHOWN);
diff --git a/chrome/browser/page_load_metrics/observers/google_captcha_observer.h b/chrome/browser/page_load_metrics/observers/google_captcha_observer.h
index e4a3c6131..cc92907 100644
--- a/chrome/browser/page_load_metrics/observers/google_captcha_observer.h
+++ b/chrome/browser/page_load_metrics/observers/google_captcha_observer.h
@@ -7,6 +7,7 @@
 
 #include "base/macros.h"
 #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h"
+#include "components/ukm/ukm_source.h"
 
 namespace google_captcha_observer {
 
@@ -19,7 +20,8 @@
   GoogleCaptchaObserver();
 
   // page_load_metrics::PageLoadMetricsObserver implementation:
-  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle) override;
+  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle,
+                         ukm::SourceId source_id) override;
   ObservePolicy OnRedirect(
       content::NavigationHandle* navigation_handle) override;
 
diff --git a/chrome/browser/page_load_metrics/observers/no_state_prefetch_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/no_state_prefetch_page_load_metrics_observer.cc
index 4bf5f26..57e2799c 100644
--- a/chrome/browser/page_load_metrics/observers/no_state_prefetch_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/no_state_prefetch_page_load_metrics_observer.cc
@@ -34,7 +34,8 @@
 
 page_load_metrics::PageLoadMetricsObserver::ObservePolicy
 NoStatePrefetchPageLoadMetricsObserver::OnCommit(
-    content::NavigationHandle* navigation_handle) {
+    content::NavigationHandle* navigation_handle,
+    ukm::SourceId source_id) {
   const net::HttpResponseHeaders* response_headers =
       navigation_handle->GetResponseHeaders();
 
diff --git a/chrome/browser/page_load_metrics/observers/no_state_prefetch_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/no_state_prefetch_page_load_metrics_observer.h
index 7d9723e..edd8e37a 100644
--- a/chrome/browser/page_load_metrics/observers/no_state_prefetch_page_load_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/observers/no_state_prefetch_page_load_metrics_observer.h
@@ -7,6 +7,7 @@
 
 #include "base/macros.h"
 #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h"
+#include "components/ukm/ukm_source.h"
 #include "url/gurl.h"
 
 namespace content {
@@ -44,7 +45,8 @@
 
  private:
   // page_load_metrics::PageLoadMetricsObserver:
-  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle) override;
+  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle,
+                         ukm::SourceId source_id) override;
   void OnFirstContentfulPaintInPage(
       const page_load_metrics::mojom::PageLoadTiming& timing,
       const page_load_metrics::PageLoadExtraInfo& extra_info) override;
diff --git a/chrome/browser/page_load_metrics/observers/omnibox_suggestion_used_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/omnibox_suggestion_used_page_load_metrics_observer.cc
index 983cfff..3687ca55 100644
--- a/chrome/browser/page_load_metrics/observers/omnibox_suggestion_used_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/omnibox_suggestion_used_page_load_metrics_observer.cc
@@ -53,7 +53,8 @@
 
 page_load_metrics::PageLoadMetricsObserver::ObservePolicy
 OmniboxSuggestionUsedMetricsObserver::OnCommit(
-    content::NavigationHandle* navigation_handle) {
+    content::NavigationHandle* navigation_handle,
+    ukm::SourceId source_id) {
   transition_type_ = navigation_handle->GetPageTransition();
   return (transition_type_ & ui::PAGE_TRANSITION_FROM_ADDRESS_BAR) != 0
              ? CONTINUE_OBSERVING
diff --git a/chrome/browser/page_load_metrics/observers/omnibox_suggestion_used_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/omnibox_suggestion_used_page_load_metrics_observer.h
index 5ef036d..08264e32 100644
--- a/chrome/browser/page_load_metrics/observers/omnibox_suggestion_used_page_load_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/observers/omnibox_suggestion_used_page_load_metrics_observer.h
@@ -7,6 +7,7 @@
 
 #include "base/macros.h"
 #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h"
+#include "components/ukm/ukm_source.h"
 #include "ui/base/page_transition_types.h"
 
 class OmniboxSuggestionUsedMetricsObserver
@@ -19,7 +20,8 @@
   ObservePolicy OnHidden(
       const page_load_metrics::mojom::PageLoadTiming& timing,
       const page_load_metrics::PageLoadExtraInfo& info) override;
-  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle) override;
+  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle,
+                         ukm::SourceId source_id) override;
   void OnFirstContentfulPaintInPage(
       const page_load_metrics::mojom::PageLoadTiming& timing,
       const page_load_metrics::PageLoadExtraInfo& info) override;
diff --git a/chrome/browser/page_load_metrics/observers/prerender_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/prerender_page_load_metrics_observer.cc
index 16bae5e3..24ae87e 100644
--- a/chrome/browser/page_load_metrics/observers/prerender_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/prerender_page_load_metrics_observer.cc
@@ -52,7 +52,8 @@
 
 page_load_metrics::PageLoadMetricsObserver::ObservePolicy
 PrerenderPageLoadMetricsObserver::OnCommit(
-    content::NavigationHandle* navigation_handle) {
+    content::NavigationHandle* navigation_handle,
+    ukm::SourceId source_id) {
   const net::HttpResponseHeaders* response_headers =
       navigation_handle->GetResponseHeaders();
 
diff --git a/chrome/browser/page_load_metrics/observers/prerender_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/prerender_page_load_metrics_observer.h
index 2f167e0..04f0003 100644
--- a/chrome/browser/page_load_metrics/observers/prerender_page_load_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/observers/prerender_page_load_metrics_observer.h
@@ -7,6 +7,7 @@
 
 #include "base/macros.h"
 #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h"
+#include "components/ukm/ukm_source.h"
 #include "url/gurl.h"
 
 namespace content {
@@ -38,7 +39,8 @@
   ObservePolicy OnStart(content::NavigationHandle* navigation_handle,
                         const GURL& currently_committed_url,
                         bool started_in_foreground) override;
-  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle) override;
+  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle,
+                         ukm::SourceId source_id) override;
   void OnFirstContentfulPaintInPage(
       const page_load_metrics::mojom::PageLoadTiming& timing,
       const page_load_metrics::PageLoadExtraInfo& extra_info) override;
diff --git a/chrome/browser/page_load_metrics/observers/previews_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/previews_page_load_metrics_observer.cc
index 2e02ad9a..319f6ec 100644
--- a/chrome/browser/page_load_metrics/observers/previews_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/previews_page_load_metrics_observer.cc
@@ -42,7 +42,8 @@
 
 page_load_metrics::PageLoadMetricsObserver::ObservePolicy
 PreviewsPageLoadMetricsObserver::OnCommit(
-    content::NavigationHandle* navigation_handle) {
+    content::NavigationHandle* navigation_handle,
+    ukm::SourceId source_id) {
   return IsOfflinePreview(navigation_handle->GetWebContents())
              ? CONTINUE_OBSERVING
              : STOP_OBSERVING;
diff --git a/chrome/browser/page_load_metrics/observers/previews_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/previews_page_load_metrics_observer.h
index d709f82..fd34833 100644
--- a/chrome/browser/page_load_metrics/observers/previews_page_load_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/observers/previews_page_load_metrics_observer.h
@@ -9,6 +9,7 @@
 
 #include "base/macros.h"
 #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h"
+#include "components/ukm/ukm_source.h"
 
 namespace content {
 class NavigationHandle;
@@ -37,7 +38,8 @@
   ~PreviewsPageLoadMetricsObserver() override;
 
   // page_load_metrics::PageLoadMetricsObserver:
-  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle) override;
+  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle,
+                         ukm::SourceId source_id) override;
   void OnDomContentLoadedEventStart(
       const page_load_metrics::mojom::PageLoadTiming& timing,
       const page_load_metrics::PageLoadExtraInfo& info) override;
diff --git a/chrome/browser/page_load_metrics/observers/protocol_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/protocol_page_load_metrics_observer.cc
index c7e28ed..ef5904e 100644
--- a/chrome/browser/page_load_metrics/observers/protocol_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/protocol_page_load_metrics_observer.cc
@@ -16,7 +16,8 @@
 
 page_load_metrics::PageLoadMetricsObserver::ObservePolicy
 ProtocolPageLoadMetricsObserver::OnCommit(
-    content::NavigationHandle* navigation_handle) {
+    content::NavigationHandle* navigation_handle,
+    ukm::SourceId source_id) {
   connection_info_ = navigation_handle->GetConnectionInfo();
   return CONTINUE_OBSERVING;
 }
diff --git a/chrome/browser/page_load_metrics/observers/protocol_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/protocol_page_load_metrics_observer.h
index dfe9f0b..190e62e 100644
--- a/chrome/browser/page_load_metrics/observers/protocol_page_load_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/observers/protocol_page_load_metrics_observer.h
@@ -7,6 +7,7 @@
 
 #include "base/macros.h"
 #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h"
+#include "components/ukm/ukm_source.h"
 #include "net/http/http_response_info.h"
 
 class ProtocolPageLoadMetricsObserver
@@ -18,7 +19,8 @@
   ObservePolicy OnStart(content::NavigationHandle* navigation_handle,
                         const GURL& currently_committed_url,
                         bool started_in_foreground) override;
-  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle) override;
+  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle,
+                         ukm::SourceId source_id) override;
   ObservePolicy OnHidden(
       const page_load_metrics::mojom::PageLoadTiming& timing,
       const page_load_metrics::PageLoadExtraInfo& info) override;
diff --git a/chrome/browser/page_load_metrics/observers/subresource_filter_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/subresource_filter_metrics_observer.cc
index 7290071..1ee8fca 100644
--- a/chrome/browser/page_load_metrics/observers/subresource_filter_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/subresource_filter_metrics_observer.cc
@@ -150,7 +150,8 @@
 
 page_load_metrics::PageLoadMetricsObserver::ObservePolicy
 SubresourceFilterMetricsObserver::OnCommit(
-    content::NavigationHandle* navigation_handle) {
+    content::NavigationHandle* navigation_handle,
+    ukm::SourceId source_id) {
   const auto* subres_filter =
       ContentSubresourceFilterDriverFactory::FromWebContents(
           navigation_handle->GetWebContents());
diff --git a/chrome/browser/page_load_metrics/observers/subresource_filter_metrics_observer.h b/chrome/browser/page_load_metrics/observers/subresource_filter_metrics_observer.h
index b0c9e32..1ee7c07 100644
--- a/chrome/browser/page_load_metrics/observers/subresource_filter_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/observers/subresource_filter_metrics_observer.h
@@ -7,6 +7,7 @@
 
 #include "base/macros.h"
 #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h"
+#include "components/ukm/ukm_source.h"
 
 namespace internal {
 
@@ -64,7 +65,8 @@
   ~SubresourceFilterMetricsObserver() override = default;
 
   // page_load_metrics::PageLoadMetricsObserver:
-  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle) override;
+  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle,
+                         ukm::SourceId source_id) override;
   ObservePolicy FlushMetricsOnAppEnterBackground(
       const page_load_metrics::mojom::PageLoadTiming& timing,
       const page_load_metrics::PageLoadExtraInfo& info) override;
diff --git a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc
index 25b6b5a..1497e9d1 100644
--- a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc
@@ -63,8 +63,7 @@
 UkmPageLoadMetricsObserver::UkmPageLoadMetricsObserver(
     net::NetworkQualityEstimator::NetworkQualityProvider*
         network_quality_provider)
-    : network_quality_provider_(network_quality_provider),
-      source_id_(ukm::UkmRecorder::GetNewSourceID()) {}
+    : network_quality_provider_(network_quality_provider) {}
 
 UkmPageLoadMetricsObserver::~UkmPageLoadMetricsObserver() = default;
 
@@ -93,7 +92,8 @@
 }
 
 UkmPageLoadMetricsObserver::ObservePolicy UkmPageLoadMetricsObserver::OnCommit(
-    content::NavigationHandle* navigation_handle) {
+    content::NavigationHandle* navigation_handle,
+    ukm::SourceId source_id) {
   // The PageTransition for the navigation may be updated on commit.
   page_transition_ = navigation_handle->GetPageTransition();
   return CONTINUE_OBSERVING;
@@ -104,7 +104,7 @@
     const page_load_metrics::mojom::PageLoadTiming& timing,
     const page_load_metrics::PageLoadExtraInfo& info) {
   RecordPageLoadExtraInfoMetrics(info, base::TimeTicks::Now());
-  RecordTimingMetrics(timing);
+  RecordTimingMetrics(timing, info.source_id);
   return STOP_OBSERVING;
 }
 
@@ -113,7 +113,7 @@
     const page_load_metrics::PageLoadExtraInfo& info) {
   RecordPageLoadExtraInfoMetrics(
       info, base::TimeTicks() /* no app_background_time */);
-  RecordTimingMetrics(timing);
+  RecordTimingMetrics(timing, info.source_id);
   return STOP_OBSERVING;
 }
 
@@ -125,7 +125,7 @@
 
   ukm::UkmRecorder* ukm_recorder = g_browser_process->ukm_recorder();
   std::unique_ptr<ukm::UkmEntryBuilder> builder = ukm_recorder->GetEntryBuilder(
-      source_id_, internal::kUkmPageLoadEventName);
+      extra_info.source_id, internal::kUkmPageLoadEventName);
   // Error codes have negative values, however we log net error code enum values
   // for UMA histograms using the equivalent positive value. For consistency in
   // UKM, we convert to a positive value here.
@@ -142,14 +142,15 @@
     const page_load_metrics::PageLoadExtraInfo& info) {
   RecordPageLoadExtraInfoMetrics(
       info, base::TimeTicks() /* no app_background_time */);
-  RecordTimingMetrics(timing);
+  RecordTimingMetrics(timing, info.source_id);
 }
 
 void UkmPageLoadMetricsObserver::RecordTimingMetrics(
-    const page_load_metrics::mojom::PageLoadTiming& timing) {
+    const page_load_metrics::mojom::PageLoadTiming& timing,
+    ukm::SourceId source_id) {
   ukm::UkmRecorder* ukm_recorder = g_browser_process->ukm_recorder();
-  std::unique_ptr<ukm::UkmEntryBuilder> builder = ukm_recorder->GetEntryBuilder(
-      source_id_, internal::kUkmPageLoadEventName);
+  std::unique_ptr<ukm::UkmEntryBuilder> builder =
+      ukm_recorder->GetEntryBuilder(source_id, internal::kUkmPageLoadEventName);
   if (timing.parse_timing->parse_start) {
     builder->AddMetric(
         internal::kUkmParseStartName,
@@ -187,11 +188,8 @@
     const page_load_metrics::PageLoadExtraInfo& info,
     base::TimeTicks app_background_time) {
   ukm::UkmRecorder* ukm_recorder = g_browser_process->ukm_recorder();
-  ukm_recorder->UpdateSourceURL(source_id_, info.start_url);
-  ukm_recorder->UpdateSourceURL(source_id_, info.url);
-
   std::unique_ptr<ukm::UkmEntryBuilder> builder = ukm_recorder->GetEntryBuilder(
-      source_id_, internal::kUkmPageLoadEventName);
+      info.source_id, internal::kUkmPageLoadEventName);
   base::Optional<base::TimeDelta> foreground_duration =
       page_load_metrics::GetInitialForegroundDuration(info,
                                                       app_background_time);
diff --git a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.h
index 3ceb5a4..79c3f35 100644
--- a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.h
@@ -9,7 +9,7 @@
 #include "base/optional.h"
 #include "base/time/time.h"
 #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h"
-#include "components/ukm/ukm_service.h"
+#include "components/ukm/ukm_source.h"
 #include "net/nqe/network_quality_estimator.h"
 #include "ui/base/page_transition_types.h"
 
@@ -56,7 +56,8 @@
                         const GURL& currently_committed_url,
                         bool started_in_foreground) override;
 
-  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle) override;
+  ObservePolicy OnCommit(content::NavigationHandle* navigation_handle,
+                         ukm::SourceId source_id) override;
 
   ObservePolicy FlushMetricsOnAppEnterBackground(
       const page_load_metrics::mojom::PageLoadTiming& timing,
@@ -77,7 +78,8 @@
   // Records page load timing related metrics available in PageLoadTiming, such
   // as first contentful paint.
   void RecordTimingMetrics(
-      const page_load_metrics::mojom::PageLoadTiming& timing);
+      const page_load_metrics::mojom::PageLoadTiming& timing,
+      ukm::SourceId source_id);
 
   // Records metrics based on the PageLoadExtraInfo struct, as well as updating
   // the URL. |app_background_time| should be set to a timestamp if the app was
@@ -89,9 +91,6 @@
   net::NetworkQualityEstimator::NetworkQualityProvider* const
       network_quality_provider_;
 
-  // Unique UKM identifier for the page load we are recording metrics for.
-  const ukm::SourceId source_id_;
-
   // Network quality estimates.
   net::EffectiveConnectionType effective_connection_type_ =
       net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN;
diff --git a/chrome/browser/page_load_metrics/page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/page_load_metrics_observer.cc
index e4cf29d7..e41ef15 100644
--- a/chrome/browser/page_load_metrics/page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/page_load_metrics_observer.cc
@@ -21,7 +21,8 @@
     UserInitiatedInfo page_end_user_initiated_info,
     const base::Optional<base::TimeDelta>& page_end_time,
     const mojom::PageLoadMetadata& main_frame_metadata,
-    const mojom::PageLoadMetadata& subframe_metadata)
+    const mojom::PageLoadMetadata& subframe_metadata,
+    ukm::SourceId source_id)
     : navigation_start(navigation_start),
       first_background_time(first_background_time),
       first_foreground_time(first_foreground_time),
@@ -34,7 +35,8 @@
       page_end_user_initiated_info(page_end_user_initiated_info),
       page_end_time(page_end_time),
       main_frame_metadata(main_frame_metadata),
-      subframe_metadata(subframe_metadata) {}
+      subframe_metadata(subframe_metadata),
+      source_id(source_id) {}
 
 PageLoadExtraInfo::PageLoadExtraInfo(const PageLoadExtraInfo& other) = default;
 
@@ -53,7 +55,7 @@
       page_load_metrics::END_NONE,
       page_load_metrics::UserInitiatedInfo::NotUserInitiated(),
       base::TimeDelta(), page_load_metrics::mojom::PageLoadMetadata(),
-      page_load_metrics::mojom::PageLoadMetadata());
+      page_load_metrics::mojom::PageLoadMetadata(), 0 /* source_id */);
 }
 
 ExtraRequestCompleteInfo::ExtraRequestCompleteInfo(
@@ -102,7 +104,8 @@
 }
 
 PageLoadMetricsObserver::ObservePolicy PageLoadMetricsObserver::OnCommit(
-    content::NavigationHandle* navigation_handle) {
+    content::NavigationHandle* navigation_handle,
+    ukm::SourceId source_id) {
   return CONTINUE_OBSERVING;
 }
 
@@ -126,9 +129,14 @@
 PageLoadMetricsObserver::ObservePolicy
 PageLoadMetricsObserver::ShouldObserveMimeType(
     const std::string& mime_type) const {
-  return mime_type == "text/html" || mime_type == "application/xhtml+xml"
-             ? CONTINUE_OBSERVING
-             : STOP_OBSERVING;
+  return IsStandardWebPageMimeType(mime_type) ? CONTINUE_OBSERVING
+                                              : STOP_OBSERVING;
+}
+
+// static
+bool PageLoadMetricsObserver::IsStandardWebPageMimeType(
+    const std::string& mime_type) {
+  return mime_type == "text/html" || mime_type == "application/xhtml+xml";
 }
 
 }  // namespace page_load_metrics
diff --git a/chrome/browser/page_load_metrics/page_load_metrics_observer.h b/chrome/browser/page_load_metrics/page_load_metrics_observer.h
index abd5ffae..04185b9 100644
--- a/chrome/browser/page_load_metrics/page_load_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/page_load_metrics_observer.h
@@ -12,6 +12,7 @@
 #include "base/optional.h"
 #include "chrome/common/page_load_metrics/page_load_timing.h"
 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_data.h"
+#include "components/ukm/ukm_source.h"
 #include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/common/resource_type.h"
@@ -123,7 +124,8 @@
       UserInitiatedInfo page_end_user_initiated_info,
       const base::Optional<base::TimeDelta>& page_end_time,
       const mojom::PageLoadMetadata& main_frame_metadata,
-      const mojom::PageLoadMetadata& subframe_metadata);
+      const mojom::PageLoadMetadata& subframe_metadata,
+      ukm::SourceId source_id);
 
   // Simplified version of the constructor, intended for use in tests.
   static PageLoadExtraInfo CreateForTesting(const GURL& url,
@@ -196,6 +198,9 @@
 
   // PageLoadMetadata for subframes of the current page load.
   const mojom::PageLoadMetadata subframe_metadata;
+
+  // UKM SourceId for the current page load.
+  const ukm::SourceId source_id;
 };
 
 // Container for various information about a completed request within a page
@@ -274,6 +279,8 @@
 
   virtual ~PageLoadMetricsObserver() {}
 
+  static bool IsStandardWebPageMimeType(const std::string& mime_type);
+
   // The page load started, with the given navigation handle.
   // currently_committed_url contains the URL of the committed page load at the
   // time the navigation for navigation_handle was initiated, or the empty URL
@@ -296,7 +303,8 @@
   // reference to it.
   // Observers that return STOP_OBSERVING will not receive any additional
   // callbacks, and will be deleted after invocation of this method returns.
-  virtual ObservePolicy OnCommit(content::NavigationHandle* navigation_handle);
+  virtual ObservePolicy OnCommit(content::NavigationHandle* navigation_handle,
+                                 ukm::SourceId source_id);
 
   // OnDidFinishSubFrameNavigation is triggered when a sub-frame of the
   // committed page has finished navigating. It has either committed, aborted,
diff --git a/chrome/browser/page_load_metrics/page_load_tracker.cc b/chrome/browser/page_load_metrics/page_load_tracker.cc
index b3c4f64..742c841 100644
--- a/chrome/browser/page_load_metrics/page_load_tracker.cc
+++ b/chrome/browser/page_load_metrics/page_load_tracker.cc
@@ -12,10 +12,12 @@
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_macros.h"
+#include "chrome/browser/browser_process.h"
 #include "chrome/browser/page_load_metrics/page_load_metrics_embedder_interface.h"
 #include "chrome/browser/page_load_metrics/page_load_metrics_util.h"
 #include "chrome/browser/prerender/prerender_contents.h"
 #include "chrome/common/page_load_metrics/page_load_timing.h"
+#include "components/ukm/public/ukm_recorder.h"
 #include "content/public/browser/navigation_details.h"
 #include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/render_frame_host.h"
@@ -175,7 +177,8 @@
       aborted_chain_size_(aborted_chain_size),
       aborted_chain_size_same_url_(aborted_chain_size_same_url),
       embedder_interface_(embedder_interface),
-      metrics_update_dispatcher_(this, navigation_handle, embedder_interface) {
+      metrics_update_dispatcher_(this, navigation_handle, embedder_interface),
+      source_id_(ukm::UkmRecorder::GetNewSourceID()) {
   DCHECK(!navigation_handle->HasCommitted());
   embedder_interface_->RegisterObservers(this);
   INVOKE_AND_PRUNE_OBSERVERS(observers_, OnStart, navigation_handle,
@@ -326,11 +329,17 @@
   page_transition_ = navigation_handle->GetPageTransition();
   user_initiated_info_.user_gesture = navigation_handle->HasUserGesture();
 
-  INVOKE_AND_PRUNE_OBSERVERS(
-      observers_, ShouldObserveMimeType,
-      navigation_handle->GetWebContents()->GetContentsMimeType());
+  const std::string& mime_type =
+      navigation_handle->GetWebContents()->GetContentsMimeType();
+  INVOKE_AND_PRUNE_OBSERVERS(observers_, ShouldObserveMimeType, mime_type);
 
-  INVOKE_AND_PRUNE_OBSERVERS(observers_, OnCommit, navigation_handle);
+  // Only record page load UKM data for standard web page mime types, such as
+  // HTML and XHTML.
+  if (PageLoadMetricsObserver::IsStandardWebPageMimeType(mime_type))
+    RecordUkmSourceInfo();
+
+  INVOKE_AND_PRUNE_OBSERVERS(observers_, OnCommit, navigation_handle,
+                             source_id_);
   LogAbortChainHistograms(navigation_handle);
 }
 
@@ -355,6 +364,16 @@
   failed_provisional_load_info_.reset(new FailedProvisionalLoadInfo(
       failed_load_time - navigation_handle->NavigationStart(),
       navigation_handle->GetNetErrorCode()));
+  RecordUkmSourceInfo();
+}
+
+void PageLoadTracker::RecordUkmSourceInfo() {
+  ukm::UkmRecorder* ukm_recorder = g_browser_process->ukm_recorder();
+  if (!ukm_recorder)
+    return;
+
+  ukm_recorder->UpdateSourceURL(source_id_, start_url_);
+  ukm_recorder->UpdateSourceURL(source_id_, url_);
 }
 
 void PageLoadTracker::Redirect(content::NavigationHandle* navigation_handle) {
@@ -481,7 +500,7 @@
       started_in_foreground_, user_initiated_info_, url(), start_url_,
       did_commit_, page_end_reason_, page_end_user_initiated_info_,
       page_end_time, metrics_update_dispatcher_.main_frame_metadata(),
-      metrics_update_dispatcher_.subframe_metadata());
+      metrics_update_dispatcher_.subframe_metadata(), source_id_);
 }
 
 bool PageLoadTracker::HasMatchingNavigationRequestID(
diff --git a/chrome/browser/page_load_metrics/page_load_tracker.h b/chrome/browser/page_load_metrics/page_load_tracker.h
index adfc4b8..4a849c77 100644
--- a/chrome/browser/page_load_metrics/page_load_tracker.h
+++ b/chrome/browser/page_load_metrics/page_load_tracker.h
@@ -15,6 +15,7 @@
 #include "chrome/browser/page_load_metrics/page_load_metrics_update_dispatcher.h"
 #include "chrome/browser/page_load_metrics/user_input_tracker.h"
 #include "chrome/common/page_load_metrics/page_load_timing.h"
+#include "components/ukm/ukm_source.h"
 #include "content/public/browser/global_request_id.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "ui/base/page_transition_types.h"
@@ -291,7 +292,7 @@
   // committed load.
   void LogAbortChainHistograms(content::NavigationHandle* final_navigation);
 
-  void MaybeUpdateURL(content::NavigationHandle* navigation_handle);
+  void RecordUkmSourceInfo();
 
   UserInputTracker input_tracker_;
 
@@ -370,6 +371,8 @@
 
   PageLoadMetricsUpdateDispatcher metrics_update_dispatcher_;
 
+  const ukm::SourceId source_id_;
+
   DISALLOW_COPY_AND_ASSIGN(PageLoadTracker);
 };
 
diff --git a/chrome/browser/password_manager/password_store_factory.cc b/chrome/browser/password_manager/password_store_factory.cc
index 84e4f055..c042197 100644
--- a/chrome/browser/password_manager/password_store_factory.cc
+++ b/chrome/browser/password_manager/password_store_factory.cc
@@ -174,8 +174,8 @@
           os_crypt::switches::kUseMockKeychain)
           ? new crypto::MockAppleKeychain()
           : new crypto::AppleKeychain());
-  ps = new PasswordStoreProxyMac(main_thread_runner, std::move(keychain),
-                                 std::move(login_db), profile->GetPrefs());
+  ps = new PasswordStoreProxyMac(main_thread_runner, std::move(login_db),
+                                 profile->GetPrefs());
 #elif defined(OS_CHROMEOS) || defined(OS_ANDROID)
   // For now, we use PasswordStoreDefault. We might want to make a native
   // backend for PasswordStoreX (see below) in the future though.
diff --git a/chrome/browser/password_manager/password_store_mac.cc b/chrome/browser/password_manager/password_store_mac.cc
deleted file mode 100644
index 25a1db9..0000000
--- a/chrome/browser/password_manager/password_store_mac.cc
+++ /dev/null
@@ -1,1395 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/password_manager/password_store_mac.h"
-
-#include <CoreServices/CoreServices.h>
-#include <stddef.h>
-#include <algorithm>
-#include <iterator>
-#include <set>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "base/callback.h"
-#include "base/logging.h"
-#include "base/mac/foundation_util.h"
-#include "base/mac/mac_logging.h"
-#include "base/macros.h"
-#include "base/memory/ptr_util.h"
-#include "base/message_loop/message_loop.h"
-#include "base/metrics/histogram_macros.h"
-#include "base/strings/string_util.h"
-#include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/mac/security_wrappers.h"
-#include "chrome/browser/password_manager/password_store_mac_internal.h"
-#include "components/os_crypt/os_crypt.h"
-#include "components/password_manager/core/browser/affiliation_utils.h"
-#include "components/password_manager/core/browser/login_database.h"
-#include "components/password_manager/core/browser/password_manager_util.h"
-#include "components/password_manager/core/browser/password_store_change.h"
-#include "content/public/browser/browser_thread.h"
-#include "crypto/apple_keychain.h"
-#include "url/origin.h"
-
-using autofill::PasswordForm;
-using crypto::AppleKeychain;
-using password_manager::PasswordStoreChange;
-using password_manager::PasswordStoreChangeList;
-
-namespace {
-
-// Utility class to handle the details of constructing and running a keychain
-// search from a set of attributes.
-class KeychainSearch {
- public:
-  explicit KeychainSearch(const AppleKeychain& keychain);
-  ~KeychainSearch();
-
-  // Sets up a keychain search based on an non "null" (NULL for char*,
-  // The appropriate "Any" entry for other types) arguments.
-  //
-  // IMPORTANT: Any parameters passed in *must* remain valid for as long as the
-  // KeychainSearch object, since the search uses them by reference.
-  void Init(const char* server,
-            const UInt32* port,
-            const SecProtocolType* protocol,
-            const SecAuthenticationType* auth_type,
-            const char* security_domain,
-            const char* path,
-            const char* username,
-            const OSType* creator);
-
-  // Fills |items| with all Keychain items that match the Init'd search.
-  // If the search fails for any reason, |items| will be unchanged.
-  void FindMatchingItems(std::vector<SecKeychainItemRef>* matches);
-
- private:
-  const AppleKeychain* keychain_;
-  SecKeychainAttributeList search_attributes_;
-  SecKeychainSearchRef search_ref_;
-};
-
-KeychainSearch::KeychainSearch(const AppleKeychain& keychain)
-    : keychain_(&keychain), search_ref_(NULL) {
-  search_attributes_.count = 0;
-  search_attributes_.attr = NULL;
-}
-
-KeychainSearch::~KeychainSearch() {
-  if (search_attributes_.attr) {
-    free(search_attributes_.attr);
-  }
-}
-
-void KeychainSearch::Init(const char* server,
-                          const UInt32* port,
-                          const SecProtocolType* protocol,
-                          const SecAuthenticationType* auth_type,
-                          const char* security_domain,
-                          const char* path,
-                          const char* username,
-                          const OSType* creator) {
-  // Allocate enough to hold everything we might use.
-  const unsigned int kMaxEntryCount = 8;
-  search_attributes_.attr =
-      static_cast<SecKeychainAttribute*>(calloc(kMaxEntryCount,
-                                                sizeof(SecKeychainAttribute)));
-  unsigned int entries = 0;
-  // We only use search_attributes_ with SearchCreateFromAttributes, which takes
-  // a "const SecKeychainAttributeList *", so we trust that they won't try
-  // to modify the list, and that casting away const-ness is thus safe.
-  if (server != NULL) {
-    DCHECK_LT(entries, kMaxEntryCount);
-    search_attributes_.attr[entries].tag = kSecServerItemAttr;
-    search_attributes_.attr[entries].length = strlen(server);
-    search_attributes_.attr[entries].data =
-        const_cast<void*>(static_cast<const void*>(server));
-    ++entries;
-  }
-  if (port != NULL && *port != kAnyPort) {
-    DCHECK_LE(entries, kMaxEntryCount);
-    search_attributes_.attr[entries].tag = kSecPortItemAttr;
-    search_attributes_.attr[entries].length = sizeof(*port);
-    search_attributes_.attr[entries].data =
-        const_cast<void*>(static_cast<const void*>(port));
-    ++entries;
-  }
-  if (protocol != NULL && *protocol != kSecProtocolTypeAny) {
-    DCHECK_LE(entries, kMaxEntryCount);
-    search_attributes_.attr[entries].tag = kSecProtocolItemAttr;
-    search_attributes_.attr[entries].length = sizeof(*protocol);
-    search_attributes_.attr[entries].data =
-        const_cast<void*>(static_cast<const void*>(protocol));
-    ++entries;
-  }
-  if (auth_type != NULL && *auth_type != kSecAuthenticationTypeAny) {
-    DCHECK_LE(entries, kMaxEntryCount);
-    search_attributes_.attr[entries].tag = kSecAuthenticationTypeItemAttr;
-    search_attributes_.attr[entries].length = sizeof(*auth_type);
-    search_attributes_.attr[entries].data =
-        const_cast<void*>(static_cast<const void*>(auth_type));
-    ++entries;
-  }
-  if (security_domain != NULL && strlen(security_domain) > 0) {
-    DCHECK_LE(entries, kMaxEntryCount);
-    search_attributes_.attr[entries].tag = kSecSecurityDomainItemAttr;
-    search_attributes_.attr[entries].length = strlen(security_domain);
-    search_attributes_.attr[entries].data =
-        const_cast<void*>(static_cast<const void*>(security_domain));
-    ++entries;
-  }
-  if (path != NULL && strlen(path) > 0 && strcmp(path, "/") != 0) {
-    DCHECK_LE(entries, kMaxEntryCount);
-    search_attributes_.attr[entries].tag = kSecPathItemAttr;
-    search_attributes_.attr[entries].length = strlen(path);
-    search_attributes_.attr[entries].data =
-        const_cast<void*>(static_cast<const void*>(path));
-    ++entries;
-  }
-  if (username != NULL) {
-    DCHECK_LE(entries, kMaxEntryCount);
-    search_attributes_.attr[entries].tag = kSecAccountItemAttr;
-    search_attributes_.attr[entries].length = strlen(username);
-    search_attributes_.attr[entries].data =
-        const_cast<void*>(static_cast<const void*>(username));
-    ++entries;
-  }
-  if (creator != NULL) {
-    DCHECK_LE(entries, kMaxEntryCount);
-    search_attributes_.attr[entries].tag = kSecCreatorItemAttr;
-    search_attributes_.attr[entries].length = sizeof(*creator);
-    search_attributes_.attr[entries].data =
-        const_cast<void*>(static_cast<const void*>(creator));
-    ++entries;
-  }
-  search_attributes_.count = entries;
-}
-
-void KeychainSearch::FindMatchingItems(std::vector<SecKeychainItemRef>* items) {
-  OSStatus result = keychain_->SearchCreateFromAttributes(
-      NULL, kSecInternetPasswordItemClass, &search_attributes_, &search_ref_);
-
-  if (result != noErr) {
-    OSSTATUS_LOG(ERROR, result) << "Keychain lookup failed";
-    return;
-  }
-
-  SecKeychainItemRef keychain_item;
-  while (keychain_->SearchCopyNext(search_ref_, &keychain_item) == noErr) {
-    // Consumer is responsible for freeing the items.
-    items->push_back(keychain_item);
-  }
-
-  keychain_->Free(search_ref_);
-  search_ref_ = NULL;
-}
-
-PasswordStoreChangeList FormsToRemoveChangeList(
-    const std::vector<std::unique_ptr<PasswordForm>>& forms) {
-  PasswordStoreChangeList changes;
-  for (const auto& form : forms) {
-    changes.push_back(PasswordStoreChange(PasswordStoreChange::REMOVE, *form));
-  }
-  return changes;
-}
-
-// Moves the content of |second| to the end of |first|.
-void AppendSecondToFirst(std::vector<std::unique_ptr<PasswordForm>>* first,
-                         std::vector<std::unique_ptr<PasswordForm>>* second) {
-  first->reserve(first->size() + second->size());
-  std::move(second->begin(), second->end(), std::back_inserter(*first));
-  second->clear();
-}
-
-// Returns the best match for |base_form| from |keychain_forms|, or nullptr if
-// there is no suitable match.
-const PasswordForm* BestKeychainFormForForm(
-    const PasswordForm& base_form,
-    const std::vector<std::unique_ptr<PasswordForm>>& keychain_forms) {
-  const PasswordForm* partial_match = nullptr;
-  for (const auto& keychain_form : keychain_forms) {
-    // TODO(stuartmorgan): We should really be scoring path matches and picking
-    // the best, rather than just checking exact-or-not (although in practice
-    // keychain items with paths probably came from us).
-    if (internal_keychain_helpers::FormsMatchForMerge(
-            base_form, *keychain_form,
-            internal_keychain_helpers::FUZZY_FORM_MATCH)) {
-      if (base_form.origin == keychain_form->origin) {
-        return keychain_form.get();
-      } else if (!partial_match) {
-        partial_match = keychain_form.get();
-      }
-    }
-  }
-  return partial_match;
-}
-
-// True if the form has no password to be stored in Keychain.
-bool IsLoginDatabaseOnlyForm(const PasswordForm& form) {
-  return form.blacklisted_by_user || !form.federation_origin.unique() ||
-         form.scheme == PasswordForm::SCHEME_USERNAME_ONLY;
-}
-
-}  // namespace
-
-#pragma mark -
-
-// TODO(stuartmorgan): Convert most of this to private helpers in
-// MacKeychainPasswordFormAdapter once it has sufficient higher-level public
-// methods to provide test coverage.
-namespace internal_keychain_helpers {
-
-// Returns a URL built from the given components. To create a URL without a
-// port, pass kAnyPort for the |port| parameter.
-GURL URLFromComponents(bool is_secure, const std::string& host, int port,
-                       const std::string& path) {
-  GURL::Replacements url_components;
-  std::string scheme(is_secure ? "https" : "http");
-  url_components.SetSchemeStr(scheme);
-  url_components.SetHostStr(host);
-  std::string port_string;  // Must remain in scope until after we do replacing.
-  if (port != kAnyPort) {
-    std::ostringstream port_stringstream;
-    port_stringstream << port;
-    port_string = port_stringstream.str();
-    url_components.SetPortStr(port_string);
-  }
-  url_components.SetPathStr(path);
-
-  GURL url("http://dummy.com");  // ReplaceComponents needs a valid URL.
-  return url.ReplaceComponents(url_components);
-}
-
-// Converts a Keychain time string to a Time object, returning true if
-// time_string_bytes was parsable.
-bool TimeFromKeychainTimeString(const char* time_string_bytes,
-                                unsigned int byte_length,
-                                base::Time* time) {
-  DCHECK(time);
-
-  char* time_string = static_cast<char*>(malloc(byte_length + 1));
-  memcpy(time_string, time_string_bytes, byte_length);
-  time_string[byte_length] = '\0';
-  base::Time::Exploded exploded_time;
-  bzero(&exploded_time, sizeof(exploded_time));
-  // The time string is of the form "yyyyMMddHHmmss'Z", in UTC time.
-  int assignments = sscanf(time_string, "%4d%2d%2d%2d%2d%2dZ",
-                           &exploded_time.year, &exploded_time.month,
-                           &exploded_time.day_of_month, &exploded_time.hour,
-                           &exploded_time.minute, &exploded_time.second);
-  free(time_string);
-
-  return assignments == 6 && base::Time::FromUTCExploded(exploded_time, time);
-}
-
-// Returns the PasswordForm Scheme corresponding to |auth_type|.
-PasswordForm::Scheme SchemeForAuthType(SecAuthenticationType auth_type) {
-  switch (auth_type) {
-    case kSecAuthenticationTypeHTMLForm:   return PasswordForm::SCHEME_HTML;
-    case kSecAuthenticationTypeHTTPBasic:  return PasswordForm::SCHEME_BASIC;
-    case kSecAuthenticationTypeHTTPDigest: return PasswordForm::SCHEME_DIGEST;
-    default:                               return PasswordForm::SCHEME_OTHER;
-  }
-}
-
-bool FillPasswordFormFromKeychainItem(const AppleKeychain& keychain,
-                                      SecKeychainItemRef keychain_item,
-                                      PasswordForm* form,
-                                      bool extract_password_data) {
-  DCHECK(form);
-
-  SecKeychainAttributeInfo attrInfo;
-  UInt32 tags[] = { kSecAccountItemAttr,
-                    kSecServerItemAttr,
-                    kSecPortItemAttr,
-                    kSecPathItemAttr,
-                    kSecProtocolItemAttr,
-                    kSecAuthenticationTypeItemAttr,
-                    kSecSecurityDomainItemAttr,
-                    kSecCreationDateItemAttr,
-                    kSecNegativeItemAttr };
-  attrInfo.count = arraysize(tags);
-  attrInfo.tag = tags;
-  attrInfo.format = NULL;
-
-  SecKeychainAttributeList* attrList;
-  UInt32 password_length;
-
-  // If |extract_password_data| is false, do not pass in a reference to
-  // |password_data|. ItemCopyAttributesAndData will then extract only the
-  // attributes of |keychain_item| (doesn't require OS authorization), and not
-  // attempt to extract its password data (requires OS authorization).
-  void* password_data = NULL;
-  void** password_data_ref = extract_password_data ? &password_data : NULL;
-
-  OSStatus result = keychain.ItemCopyAttributesAndData(keychain_item, &attrInfo,
-                                                       NULL, &attrList,
-                                                       &password_length,
-                                                       password_data_ref);
-
-  if (result != noErr) {
-    // We don't log errSecAuthFailed because that just means that the user
-    // chose not to allow us access to the item.
-    if (result != errSecAuthFailed) {
-      OSSTATUS_LOG(ERROR, result) << "Keychain data load failed";
-    }
-    return false;
-  }
-
-  if (extract_password_data) {
-    base::UTF8ToUTF16(static_cast<const char *>(password_data), password_length,
-                      &(form->password_value));
-  }
-
-  int port = kAnyPort;
-  std::string server;
-  std::string security_domain;
-  std::string path;
-  bool is_secure = false;
-  for (unsigned int i = 0; i < attrList->count; i++) {
-    SecKeychainAttribute attr = attrList->attr[i];
-    if (!attr.data) {
-      continue;
-    }
-    switch (attr.tag) {
-      case kSecAccountItemAttr:
-        base::UTF8ToUTF16(static_cast<const char *>(attr.data), attr.length,
-                          &(form->username_value));
-        break;
-      case kSecServerItemAttr:
-        server.assign(static_cast<const char *>(attr.data), attr.length);
-        break;
-      case kSecPortItemAttr:
-        port = *(static_cast<UInt32*>(attr.data));
-        break;
-      case kSecPathItemAttr:
-        path.assign(static_cast<const char *>(attr.data), attr.length);
-        break;
-      case kSecProtocolItemAttr:
-      {
-        SecProtocolType protocol = *(static_cast<SecProtocolType*>(attr.data));
-        // TODO(stuartmorgan): Handle proxy types
-        is_secure = (protocol == kSecProtocolTypeHTTPS);
-        break;
-      }
-      case kSecAuthenticationTypeItemAttr:
-      {
-        SecAuthenticationType auth_type =
-            *(static_cast<SecAuthenticationType*>(attr.data));
-        form->scheme = SchemeForAuthType(auth_type);
-        break;
-      }
-      case kSecSecurityDomainItemAttr:
-        security_domain.assign(static_cast<const char *>(attr.data),
-                               attr.length);
-        break;
-      case kSecCreationDateItemAttr:
-        // The only way to get a date out of Keychain is as a string. Really.
-        // (The docs claim it's an int, but the header is correct.)
-        TimeFromKeychainTimeString(static_cast<char*>(attr.data), attr.length,
-                                   &form->date_created);
-        break;
-      case kSecNegativeItemAttr:
-        Boolean negative_item = *(static_cast<Boolean*>(attr.data));
-        if (negative_item) {
-          form->blacklisted_by_user = true;
-        }
-        break;
-    }
-  }
-  keychain.ItemFreeAttributesAndData(attrList, password_data);
-
-  // kSecNegativeItemAttr doesn't seem to actually be in widespread use. In
-  // practice, other browsers seem to use a "" or " " password (and a special
-  // user name) to indicated blacklist entries.
-  if (extract_password_data && (form->password_value.empty() ||
-                                base::EqualsASCII(form->password_value, " "))) {
-    form->blacklisted_by_user = true;
-  }
-
-  // Android facet URLs aren't parsed correctly by GURL and need to be handled
-  // separately.
-  if (password_manager::IsValidAndroidFacetURI(server)) {
-    form->signon_realm = server;
-    form->origin = GURL();
-  } else {
-    form->origin = URLFromComponents(is_secure, server, port, path);
-    // TODO(stuartmorgan): Handle proxies, which need a different signon_realm
-    // format.
-    form->signon_realm = form->origin.GetOrigin().spec();
-    if (form->scheme != PasswordForm::SCHEME_HTML) {
-      form->signon_realm.append(security_domain);
-    }
-  }
-  return true;
-}
-
-bool HasChromeCreatorCode(const AppleKeychain& keychain,
-                          SecKeychainItemRef keychain_item) {
-  SecKeychainAttributeInfo attr_info;
-  UInt32 tags[] = {kSecCreatorItemAttr};
-  attr_info.count = arraysize(tags);
-  attr_info.tag = tags;
-  attr_info.format = nullptr;
-
-  SecKeychainAttributeList* attr_list;
-  UInt32 password_length;
-  OSStatus result = keychain.ItemCopyAttributesAndData(
-      keychain_item, &attr_info, nullptr, &attr_list,
-      &password_length, nullptr);
-  if (result != noErr)
-    return false;
-  OSType creator_code = 0;
-  for (unsigned int i = 0; i < attr_list->count; i++) {
-    SecKeychainAttribute attr = attr_list->attr[i];
-    if (!attr.data) {
-      continue;
-    }
-    if (attr.tag == kSecCreatorItemAttr) {
-      creator_code = *(static_cast<FourCharCode*>(attr.data));
-      break;
-    }
-  }
-  keychain.ItemFreeAttributesAndData(attr_list, nullptr);
-  return creator_code && creator_code == base::mac::CreatorCodeForApplication();
-}
-
-bool FormsMatchForMerge(const PasswordForm& form_a,
-                        const PasswordForm& form_b,
-                        FormMatchStrictness strictness) {
-  if (IsLoginDatabaseOnlyForm(form_a) || IsLoginDatabaseOnlyForm(form_b))
-    return false;
-
-  bool equal_realm = form_a.signon_realm == form_b.signon_realm;
-  if (strictness == FUZZY_FORM_MATCH) {
-    equal_realm |= form_a.is_public_suffix_match;
-  }
-  return form_a.scheme == form_b.scheme && equal_realm &&
-         form_a.username_value == form_b.username_value;
-}
-
-// Moves entries from |forms| that represent either blacklisted or federated
-// logins into |extracted|. These two types are stored only in the LoginDatabase
-// and do not have corresponding Keychain entries.
-void ExtractNonKeychainForms(
-    std::vector<std::unique_ptr<PasswordForm>>* forms,
-    std::vector<std::unique_ptr<PasswordForm>>* extracted) {
-  extracted->reserve(extracted->size() + forms->size());
-
-  std::vector<std::unique_ptr<PasswordForm>> remaining;
-  remaining.reserve(forms->size());
-
-  for (std::unique_ptr<PasswordForm>& form : *forms) {
-    if (IsLoginDatabaseOnlyForm(*form))
-      extracted->push_back(std::move(form));
-    else
-      remaining.push_back(std::move(form));
-  }
-  forms->swap(remaining);
-}
-
-// Takes |keychain_forms| and |database_forms| and moves the following 2 types
-// of forms to |merged_forms|:
-//   (1) |database_forms| that by principle never have a corresponding Keychain
-//       entry (viz., blacklisted and federated logins),
-//   (2) |database_forms| which should have and do have a corresponding entry in
-//       |keychain_forms|.
-// The database forms of type (2) have their password value updated from the
-// corresponding keychain form, and all the keychain forms corresponding to some
-// database form are removed from |keychain_forms| and deleted.
-void MergePasswordForms(
-    std::vector<std::unique_ptr<PasswordForm>>* keychain_forms,
-    std::vector<std::unique_ptr<PasswordForm>>* database_forms,
-    std::vector<std::unique_ptr<PasswordForm>>* merged_forms) {
-  // Pull out the database blacklist items and federated logins, since they are
-  // used as-is rather than being merged with keychain forms.
-  ExtractNonKeychainForms(database_forms, merged_forms);
-
-  // Merge the normal entries.
-  std::vector<std::unique_ptr<PasswordForm>> unused_database_forms;
-  unused_database_forms.reserve(database_forms->size());
-  std::set<const PasswordForm*> used_keychain_forms;
-  // Move all database forms to either |merged_forms| or
-  // |unused_database_forms|, based on whether they have a match in the keychain
-  // forms or not. If there is a match, add its password to the DB form and
-  // mark the keychain form as used.
-  for (std::unique_ptr<PasswordForm>& db_form : *database_forms) {
-    const PasswordForm* best_match =
-        BestKeychainFormForForm(*db_form, *keychain_forms);
-    if (best_match) {
-      used_keychain_forms.insert(best_match);
-      db_form->password_value = best_match->password_value;
-      merged_forms->push_back(std::move(db_form));
-    } else {
-      unused_database_forms.push_back(std::move(db_form));
-    }
-  }
-  database_forms->swap(unused_database_forms);
-
-  // Clear out all the Keychain entries we used.
-  std::vector<std::unique_ptr<PasswordForm>> unused_keychain_forms;
-  unused_keychain_forms.reserve(keychain_forms->size());
-  for (std::unique_ptr<PasswordForm>& keychain_form : *keychain_forms) {
-    if (!base::ContainsKey(used_keychain_forms, keychain_form.get())) {
-      unused_keychain_forms.push_back(std::move(keychain_form));
-    }
-  }
-  keychain_forms->swap(unused_keychain_forms);
-}
-
-std::vector<ItemFormPair> ExtractAllKeychainItemAttributesIntoPasswordForms(
-    std::vector<SecKeychainItemRef>* keychain_items,
-    const AppleKeychain& keychain) {
-  DCHECK(keychain_items);
-  MacKeychainPasswordFormAdapter keychain_adapter(&keychain);
-  *keychain_items = keychain_adapter.GetAllPasswordFormKeychainItems();
-  std::vector<ItemFormPair> item_form_pairs;
-  for (auto* keychain_item : *keychain_items) {
-    std::unique_ptr<PasswordForm> form_without_password =
-        base::MakeUnique<PasswordForm>();
-    internal_keychain_helpers::FillPasswordFormFromKeychainItem(
-        keychain, keychain_item, form_without_password.get(),
-        false);  // Load password attributes, but not password data.
-    item_form_pairs.push_back(
-        std::make_pair(keychain_item, std::move(form_without_password)));
-  }
-  return item_form_pairs;
-}
-
-void GetPasswordsForForms(
-    const AppleKeychain& keychain,
-    std::vector<std::unique_ptr<PasswordForm>>* database_forms,
-    std::vector<std::unique_ptr<PasswordForm>>* passwords) {
-  // First load the attributes of all items in the keychain without loading
-  // their password data, and then match items in |database_forms| against them.
-  // This avoids individually searching through the keychain for passwords
-  // matching each form in |database_forms|, and results in a significant
-  // performance gain, replacing O(N) keychain search operations with a single
-  // operation that loads all keychain items, and then selective reads of only
-  // the relevant passwords. See crbug.com/263685.
-  std::vector<SecKeychainItemRef> keychain_items;
-  std::vector<ItemFormPair> item_form_pairs =
-      ExtractAllKeychainItemAttributesIntoPasswordForms(&keychain_items,
-                                                        keychain);
-
-  // Next, compare the attributes of the PasswordForms in |database_forms|
-  // against those in |item_form_pairs|, and extract password data for each
-  // matching PasswordForm using its corresponding SecKeychainItemRef.
-  std::vector<std::unique_ptr<PasswordForm>> unused_db_forms;
-  unused_db_forms.reserve(database_forms->size());
-  // Move database forms with a password stored in |keychain| to |passwords|,
-  // including the password. The rest is moved to |unused_db_forms|.
-  for (std::unique_ptr<PasswordForm>& db_form : *database_forms) {
-    std::vector<std::unique_ptr<PasswordForm>> keychain_matches =
-        ExtractPasswordsMergeableWithForm(keychain, item_form_pairs, *db_form);
-
-    std::vector<std::unique_ptr<PasswordForm>> db_form_container;
-    db_form_container.push_back(std::move(db_form));
-    MergePasswordForms(&keychain_matches, &db_form_container, passwords);
-    AppendSecondToFirst(&unused_db_forms, &db_form_container);
-  }
-  database_forms->swap(unused_db_forms);
-
-  for (SecKeychainItemRef item : keychain_items) {
-    keychain.Free(item);
-  }
-}
-
-// TODO(stuartmorgan): signon_realm for proxies is not yet supported.
-bool ExtractSignonRealmComponents(const std::string& signon_realm,
-                                  std::string* server,
-                                  UInt32* port,
-                                  bool* is_secure,
-                                  std::string* security_domain) {
-  // GURL does not parse Android facet URIs correctly.
-  if (password_manager::IsValidAndroidFacetURI(signon_realm)) {
-    if (server)
-      *server = signon_realm;
-    if (is_secure)
-      *is_secure = true;
-    if (port)
-      *port = 0;
-    if (security_domain)
-      security_domain->clear();
-    return true;
-  }
-
-  // The signon_realm will be the Origin portion of a URL for an HTML form,
-  // and the same but with the security domain as a path for HTTP auth.
-  GURL realm_as_url(signon_realm);
-  if (!realm_as_url.is_valid()) {
-    return false;
-  }
-
-  if (server)
-    *server = realm_as_url.host();
-  if (is_secure)
-    *is_secure = realm_as_url.SchemeIsCryptographic();
-  if (port)
-    *port = realm_as_url.has_port() ? atoi(realm_as_url.port().c_str()) : 0;
-  if (security_domain) {
-    // Strip the leading '/' off of the path to get the security domain.
-    if (realm_as_url.path().length() > 0)
-      *security_domain = realm_as_url.path().substr(1);
-    else
-      security_domain->clear();
-  }
-  return true;
-}
-
-bool FormIsValidAndMatchesOtherForm(const PasswordForm& query_form,
-                                    const PasswordForm& other_form) {
-  std::string server;
-  std::string security_domain;
-  UInt32 port;
-  bool is_secure;
-  if (!ExtractSignonRealmComponents(query_form.signon_realm, &server, &port,
-                                    &is_secure, &security_domain)) {
-    return false;
-  }
-  return FormsMatchForMerge(query_form, other_form, STRICT_FORM_MATCH);
-}
-
-std::vector<std::unique_ptr<PasswordForm>> ExtractPasswordsMergeableWithForm(
-    const AppleKeychain& keychain,
-    const std::vector<ItemFormPair>& item_form_pairs,
-    const PasswordForm& query_form) {
-  std::vector<std::unique_ptr<PasswordForm>> matches;
-  for (std::vector<ItemFormPair>::const_iterator i = item_form_pairs.begin();
-       i != item_form_pairs.end(); ++i) {
-    if (FormIsValidAndMatchesOtherForm(query_form, *(i->second))) {
-      // Create a new object, since the caller is responsible for deleting the
-      // returned forms.
-      auto form_with_password = base::MakeUnique<PasswordForm>();
-      FillPasswordFormFromKeychainItem(
-          keychain, i->first, form_with_password.get(),
-          true);  // Load password attributes and data.
-      // Do not include blacklisted items found in the keychain.
-      if (!form_with_password->blacklisted_by_user)
-        matches.push_back(std::move(form_with_password));
-    }
-  }
-  return matches;
-}
-
-}  // namespace internal_keychain_helpers
-
-#pragma mark -
-
-MacKeychainPasswordFormAdapter::MacKeychainPasswordFormAdapter(
-    const AppleKeychain* keychain)
-    : keychain_(keychain), finds_only_owned_(false) {
-}
-
-std::vector<std::unique_ptr<PasswordForm>>
-MacKeychainPasswordFormAdapter::PasswordsFillingForm(
-    const std::string& signon_realm,
-    PasswordForm::Scheme scheme) {
-  std::vector<SecKeychainItemRef> keychain_items =
-      MatchingKeychainItems(signon_realm, scheme, NULL, NULL);
-  return ConvertKeychainItemsToForms(&keychain_items);
-}
-
-bool MacKeychainPasswordFormAdapter::HasPasswordExactlyMatchingForm(
-    const PasswordForm& query_form) {
-  SecKeychainItemRef keychain_item = KeychainItemForForm(query_form);
-  if (keychain_item) {
-    keychain_->Free(keychain_item);
-    return true;
-  }
-  return false;
-}
-
-bool MacKeychainPasswordFormAdapter::HasPasswordsMergeableWithForm(
-    const PasswordForm& query_form) {
-  if (IsLoginDatabaseOnlyForm(query_form))
-    return false;
-  std::string username = base::UTF16ToUTF8(query_form.username_value);
-  std::vector<SecKeychainItemRef> matches =
-      MatchingKeychainItems(query_form.signon_realm, query_form.scheme,
-                            NULL, username.c_str());
-  for (SecKeychainItemRef item : matches)
-    keychain_->Free(item);
-
-  return !matches.empty();
-}
-
-std::vector<SecKeychainItemRef>
-    MacKeychainPasswordFormAdapter::GetAllPasswordFormKeychainItems() {
-  SecAuthenticationType supported_auth_types[] = {
-    kSecAuthenticationTypeHTMLForm,
-    kSecAuthenticationTypeHTTPBasic,
-    kSecAuthenticationTypeHTTPDigest,
-  };
-
-  std::vector<SecKeychainItemRef> matches;
-  for (unsigned int i = 0; i < arraysize(supported_auth_types); ++i) {
-    KeychainSearch keychain_search(*keychain_);
-    OSType creator = CreatorCodeForSearch();
-    keychain_search.Init(NULL,
-                         NULL,
-                         NULL,
-                         &supported_auth_types[i],
-                         NULL,
-                         NULL,
-                         NULL,
-                         creator ? &creator : NULL);
-    keychain_search.FindMatchingItems(&matches);
-  }
-  return matches;
-}
-
-std::vector<std::unique_ptr<PasswordForm>>
-MacKeychainPasswordFormAdapter::GetAllPasswordFormPasswords() {
-  std::vector<SecKeychainItemRef> items = GetAllPasswordFormKeychainItems();
-  return ConvertKeychainItemsToForms(&items);
-}
-
-bool MacKeychainPasswordFormAdapter::AddPassword(const PasswordForm& form) {
-  // We should never be trying to store a blacklist in the keychain.
-  DCHECK(!IsLoginDatabaseOnlyForm(form));
-
-  std::string server;
-  std::string security_domain;
-  UInt32 port;
-  bool is_secure;
-  if (!internal_keychain_helpers::ExtractSignonRealmComponents(
-           form.signon_realm, &server, &port, &is_secure, &security_domain)) {
-    return false;
-  }
-  std::string path;
-  // Path doesn't make sense for Android app credentials.
-  if (!password_manager::IsValidAndroidFacetURI(form.signon_realm))
-    path = form.origin.path();
-  std::string username = base::UTF16ToUTF8(form.username_value);
-  std::string password = base::UTF16ToUTF8(form.password_value);
-  SecProtocolType protocol = is_secure ? kSecProtocolTypeHTTPS
-                                       : kSecProtocolTypeHTTP;
-  SecKeychainItemRef new_item = NULL;
-  OSStatus result = keychain_->AddInternetPassword(
-      NULL, server.size(), server.c_str(),
-      security_domain.size(), security_domain.c_str(),
-      username.size(), username.c_str(),
-      path.size(), path.c_str(),
-      port, protocol, AuthTypeForScheme(form.scheme),
-      password.size(), password.c_str(), &new_item);
-
-  if (result == noErr) {
-    SetKeychainItemCreatorCode(new_item,
-                               base::mac::CreatorCodeForApplication());
-    keychain_->Free(new_item);
-  } else if (result == errSecDuplicateItem) {
-    // If we collide with an existing item, find and update it instead.
-    SecKeychainItemRef existing_item = KeychainItemForForm(form);
-    if (!existing_item) {
-      return false;
-    }
-    bool changed = SetKeychainItemPassword(existing_item, password);
-    keychain_->Free(existing_item);
-    return changed;
-  }
-
-  return result == noErr;
-}
-
-bool MacKeychainPasswordFormAdapter::RemovePassword(const PasswordForm& form) {
-  SecKeychainItemRef keychain_item = KeychainItemForForm(form);
-  if (keychain_item == NULL)
-    return false;
-  OSStatus result = keychain_->ItemDelete(keychain_item);
-  keychain_->Free(keychain_item);
-  return result == noErr;
-}
-
-void MacKeychainPasswordFormAdapter::SetFindsOnlyOwnedItems(
-    bool finds_only_owned) {
-  finds_only_owned_ = finds_only_owned;
-}
-
-std::vector<std::unique_ptr<PasswordForm>>
-MacKeychainPasswordFormAdapter::ConvertKeychainItemsToForms(
-    std::vector<SecKeychainItemRef>* items) {
-  std::vector<std::unique_ptr<PasswordForm>> forms;
-  for (SecKeychainItemRef item : *items) {
-    auto form = base::MakeUnique<PasswordForm>();
-    if (internal_keychain_helpers::FillPasswordFormFromKeychainItem(
-            *keychain_, item, form.get(), true)) {
-      forms.push_back(std::move(form));
-    }
-    keychain_->Free(item);
-  }
-  items->clear();
-  return forms;
-}
-
-SecKeychainItemRef MacKeychainPasswordFormAdapter::KeychainItemForForm(
-    const PasswordForm& form) {
-  // We don't store blacklist entries in the keychain, so the answer to "what
-  // Keychain item goes with this form" is always "nothing" for blacklists.
-  // Same goes for federated logins.
-  if (IsLoginDatabaseOnlyForm(form))
-    return NULL;
-
-  std::string path;
-  // Path doesn't make sense for Android app credentials.
-  if (!password_manager::IsValidAndroidFacetURI(form.signon_realm))
-    path = form.origin.path();
-  std::string username = base::UTF16ToUTF8(form.username_value);
-  std::vector<SecKeychainItemRef> matches = MatchingKeychainItems(
-      form.signon_realm, form.scheme, path.c_str(), username.c_str());
-
-  if (matches.empty()) {
-    return NULL;
-  }
-
-  // Free all items after the first, since we won't be returning them.
-  for (auto i = matches.begin() + 1; i != matches.end(); ++i)
-    keychain_->Free(*i);
-
-  return matches[0];
-}
-
-std::vector<SecKeychainItemRef>
-MacKeychainPasswordFormAdapter::MatchingKeychainItems(
-    const std::string& signon_realm,
-    PasswordForm::Scheme scheme,
-    const char* path,
-    const char* username) {
-  std::vector<SecKeychainItemRef> matches;
-
-  std::string server;
-  std::string security_domain;
-  UInt32 port;
-  bool is_secure;
-  if (!internal_keychain_helpers::ExtractSignonRealmComponents(
-           signon_realm, &server, &port, &is_secure, &security_domain)) {
-    // TODO(stuartmorgan): Proxies will currently fail here, since their
-    // signon_realm is not a URL. We need to detect the proxy case and handle
-    // it specially.
-    return matches;
-  }
-  SecProtocolType protocol = is_secure ? kSecProtocolTypeHTTPS
-                                       : kSecProtocolTypeHTTP;
-  SecAuthenticationType auth_type = AuthTypeForScheme(scheme);
-  const char* auth_domain = (scheme == PasswordForm::SCHEME_HTML) ?
-      NULL : security_domain.c_str();
-  OSType creator = CreatorCodeForSearch();
-  KeychainSearch keychain_search(*keychain_);
-  keychain_search.Init(server.c_str(),
-                       &port,
-                       &protocol,
-                       &auth_type,
-                       auth_domain,
-                       path,
-                       username,
-                       creator ? &creator : NULL);
-  keychain_search.FindMatchingItems(&matches);
-  return matches;
-}
-
-// Returns the Keychain SecAuthenticationType type corresponding to |scheme|.
-SecAuthenticationType MacKeychainPasswordFormAdapter::AuthTypeForScheme(
-    PasswordForm::Scheme scheme) {
-  switch (scheme) {
-    case PasswordForm::SCHEME_HTML:   return kSecAuthenticationTypeHTMLForm;
-    case PasswordForm::SCHEME_BASIC:  return kSecAuthenticationTypeHTTPBasic;
-    case PasswordForm::SCHEME_DIGEST: return kSecAuthenticationTypeHTTPDigest;
-    case PasswordForm::SCHEME_OTHER:  return kSecAuthenticationTypeDefault;
-    case PasswordForm::SCHEME_USERNAME_ONLY:
-      NOTREACHED();
-      break;
-  }
-  NOTREACHED();
-  return kSecAuthenticationTypeDefault;
-}
-
-bool MacKeychainPasswordFormAdapter::SetKeychainItemPassword(
-    SecKeychainItemRef keychain_item,
-    const std::string& password) {
-  OSStatus result = keychain_->ItemModifyAttributesAndData(keychain_item, NULL,
-                                                           password.size(),
-                                                           password.c_str());
-  return result == noErr;
-}
-
-bool MacKeychainPasswordFormAdapter::SetKeychainItemCreatorCode(
-    SecKeychainItemRef keychain_item,
-    OSType creator_code) {
-  SecKeychainAttribute attr = { kSecCreatorItemAttr, sizeof(creator_code),
-                                &creator_code };
-  SecKeychainAttributeList attrList = { 1, &attr };
-  OSStatus result = keychain_->ItemModifyAttributesAndData(keychain_item,
-                                                           &attrList, 0, NULL);
-  return result == noErr;
-}
-
-OSType MacKeychainPasswordFormAdapter::CreatorCodeForSearch() {
-  return finds_only_owned_ ? base::mac::CreatorCodeForApplication() : 0;
-}
-
-#pragma mark -
-
-PasswordStoreMac::PasswordStoreMac(
-    scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner,
-    scoped_refptr<base::SingleThreadTaskRunner> db_thread_runner,
-    std::unique_ptr<AppleKeychain> keychain)
-    : password_manager::PasswordStore(main_thread_runner, db_thread_runner),
-      keychain_(std::move(keychain)),
-      login_metadata_db_(nullptr) {
-  DCHECK(keychain_);
-}
-
-PasswordStoreMac::~PasswordStoreMac() {}
-
-void PasswordStoreMac::InitWithTaskRunner(
-    scoped_refptr<base::SingleThreadTaskRunner> background_task_runner) {
-  db_thread_runner_ = background_task_runner;
-  DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
-}
-
-// static
-PasswordStoreMac::MigrationResult PasswordStoreMac::ImportFromKeychain(
-    password_manager::LoginDatabase* login_db,
-    crypto::AppleKeychain* keychain) {
-  std::vector<std::unique_ptr<PasswordForm>> database_forms;
-  if (!login_db->GetAutofillableLogins(&database_forms))
-    return LOGIN_DB_FAILURE;
-
-  std::vector<std::unique_ptr<PasswordForm>> uninteresting_forms;
-  internal_keychain_helpers::ExtractNonKeychainForms(&database_forms,
-                                                     &uninteresting_forms);
-  // If there are no passwords to lookup in the Keychain then we're done.
-  if (database_forms.empty())
-    return MIGRATION_OK;
-
-  // Make sure that the encryption key is retrieved from the Keychain so the
-  // encryption can be done.
-  std::string ciphertext;
-  if (!OSCrypt::EncryptString("test", &ciphertext))
-    return ENCRYPTOR_FAILURE;
-
-  // Mute the Keychain.
-  chrome::ScopedSecKeychainSetUserInteractionAllowed user_interaction_allowed(
-      false);
-
-  // Retrieve the passwords.
-  // Get all the password attributes first.
-  std::vector<SecKeychainItemRef> keychain_items;
-  std::vector<internal_keychain_helpers::ItemFormPair> item_form_pairs =
-      internal_keychain_helpers::
-          ExtractAllKeychainItemAttributesIntoPasswordForms(&keychain_items,
-                                                            *keychain);
-
-  // Next, compare the attributes of the PasswordForms in |database_forms|
-  // against those in |item_form_pairs|, and extract password data for each
-  // matching PasswordForm using its corresponding SecKeychainItemRef.
-  size_t unmerged_forms_count = 0;
-  login_db->set_clear_password_values(false);
-  for (const auto& form : database_forms) {
-    std::vector<std::unique_ptr<PasswordForm>> keychain_matches =
-        internal_keychain_helpers::ExtractPasswordsMergeableWithForm(
-            *keychain, item_form_pairs, *form);
-
-    const PasswordForm* best_match =
-        BestKeychainFormForForm(*form, keychain_matches);
-    if (best_match) {
-      form->password_value = best_match->password_value;
-      PasswordStoreChangeList change = login_db->UpdateLogin(*form);
-      DCHECK_EQ(1u, change.size());
-    } else {
-      unmerged_forms_count++;
-      bool removed = login_db->RemoveLogin(*form);
-      DCHECK(removed);
-    }
-  }
-  for (SecKeychainItemRef item : keychain_items)
-    keychain->Free(item);
-
-  if (unmerged_forms_count) {
-    UMA_HISTOGRAM_COUNTS(
-        "PasswordManager.KeychainMigration.NumPasswordsOnFailure",
-        database_forms.size());
-    UMA_HISTOGRAM_COUNTS("PasswordManager.KeychainMigration.NumFailedPasswords",
-                         unmerged_forms_count);
-    return MIGRATION_PARTIAL;
-  }
-  return MIGRATION_OK;
-}
-
-// static
-void PasswordStoreMac::CleanUpKeychain(
-    crypto::AppleKeychain* keychain,
-    const std::vector<std::unique_ptr<PasswordForm>>& forms) {
-  MacKeychainPasswordFormAdapter keychain_adapter(keychain);
-  keychain_adapter.SetFindsOnlyOwnedItems(true);
-  for (const auto& form : forms)
-    keychain_adapter.RemovePassword(*form);
-}
-
-void PasswordStoreMac::set_login_metadata_db(
-    password_manager::LoginDatabase* login_db) {
-  login_metadata_db_ = login_db;
-  if (login_metadata_db_)
-    login_metadata_db_->set_clear_password_values(true);
-}
-
-bool PasswordStoreMac::Init(
-    const syncer::SyncableService::StartSyncFlare& flare,
-    PrefService* prefs) {
-  // The class should be used inside PasswordStoreProxyMac only.
-  NOTREACHED();
-  return true;
-}
-
-void PasswordStoreMac::ReportMetricsImpl(const std::string& sync_username,
-                                         bool custom_passphrase_sync_enabled) {
-  if (!login_metadata_db_)
-    return;
-  login_metadata_db_->ReportMetrics(sync_username,
-                                    custom_passphrase_sync_enabled);
-}
-
-PasswordStoreChangeList PasswordStoreMac::AddLoginImpl(
-    const PasswordForm& form) {
-  DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
-  if (login_metadata_db_ && AddToKeychainIfNecessary(form))
-    return login_metadata_db_->AddLogin(form);
-  return PasswordStoreChangeList();
-}
-
-PasswordStoreChangeList PasswordStoreMac::UpdateLoginImpl(
-    const PasswordForm& form) {
-  DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
-  if (!login_metadata_db_)
-    return PasswordStoreChangeList();
-
-  PasswordStoreChangeList changes = login_metadata_db_->UpdateLogin(form);
-
-  MacKeychainPasswordFormAdapter keychain_adapter(keychain_.get());
-  if (changes.empty() &&
-      !keychain_adapter.HasPasswordsMergeableWithForm(form)) {
-    // If the password isn't in either the DB or the keychain, then it must have
-    // been deleted after autofill happened, and should not be re-added.
-    return changes;
-  }
-
-  // The keychain add will update if there is a collision and add if there
-  // isn't, which is the behavior we want, so there's no separate update call.
-  if (AddToKeychainIfNecessary(form) && changes.empty()) {
-    changes = login_metadata_db_->AddLogin(form);
-  }
-  return changes;
-}
-
-PasswordStoreChangeList PasswordStoreMac::RemoveLoginImpl(
-    const PasswordForm& form) {
-  DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
-  PasswordStoreChangeList changes;
-  if (login_metadata_db_ && login_metadata_db_->RemoveLogin(form)) {
-    // See if we own a Keychain item associated with this item. We can do an
-    // exact search rather than messing around with trying to do fuzzy matching
-    // because passwords that we created will always have an exact-match
-    // database entry.
-    // (If a user does lose their profile but not their keychain we'll treat the
-    // entries we find like other imported entries anyway, so it's reasonable to
-    // handle deletes on them the way we would for an imported item.)
-    MacKeychainPasswordFormAdapter owned_keychain_adapter(keychain_.get());
-    owned_keychain_adapter.SetFindsOnlyOwnedItems(true);
-    if (owned_keychain_adapter.HasPasswordExactlyMatchingForm(form)) {
-      // If we don't have other forms using it (i.e., a form differing only by
-      // the names of the form elements), delete the keychain entry.
-      if (!DatabaseHasFormMatchingKeychainForm(form)) {
-        owned_keychain_adapter.RemovePassword(form);
-      }
-    }
-
-    changes.push_back(PasswordStoreChange(PasswordStoreChange::REMOVE, form));
-  }
-  return changes;
-}
-
-PasswordStoreChangeList PasswordStoreMac::RemoveLoginsByURLAndTimeImpl(
-    const base::Callback<bool(const GURL&)>& url_filter,
-    base::Time delete_begin,
-    base::Time delete_end) {
-  PasswordStoreChangeList changes;
-  std::vector<std::unique_ptr<PasswordForm>> forms_to_consider;
-  std::vector<std::unique_ptr<PasswordForm>> forms_to_remove;
-  if (login_metadata_db_ &&
-      login_metadata_db_->GetLoginsCreatedBetween(delete_begin, delete_end,
-                                                  &forms_to_consider)) {
-    for (std::unique_ptr<PasswordForm>& form_to_consider : forms_to_consider) {
-      if (url_filter.Run(form_to_consider->origin) &&
-          login_metadata_db_->RemoveLogin(*form_to_consider))
-        forms_to_remove.push_back(std::move(form_to_consider));
-    }
-    if (!forms_to_remove.empty()) {
-      RemoveKeychainForms(forms_to_remove);
-      CleanOrphanedForms(&forms_to_remove);  // Add the orphaned forms.
-      changes = FormsToRemoveChangeList(forms_to_remove);
-      LogStatsForBulkDeletion(changes.size());
-    }
-  }
-  return changes;
-}
-
-PasswordStoreChangeList PasswordStoreMac::RemoveLoginsCreatedBetweenImpl(
-    base::Time delete_begin,
-    base::Time delete_end) {
-  PasswordStoreChangeList changes;
-  std::vector<std::unique_ptr<PasswordForm>> forms_to_remove;
-  if (login_metadata_db_ &&
-      login_metadata_db_->GetLoginsCreatedBetween(delete_begin, delete_end,
-                                                  &forms_to_remove) &&
-      login_metadata_db_->RemoveLoginsCreatedBetween(delete_begin,
-                                                     delete_end)) {
-    RemoveKeychainForms(forms_to_remove);
-    CleanOrphanedForms(&forms_to_remove);  // Add the orphaned forms.
-    changes = FormsToRemoveChangeList(forms_to_remove);
-    LogStatsForBulkDeletion(changes.size());
-  }
-  return changes;
-}
-
-PasswordStoreChangeList PasswordStoreMac::RemoveLoginsSyncedBetweenImpl(
-    base::Time delete_begin,
-    base::Time delete_end) {
-  PasswordStoreChangeList changes;
-  std::vector<std::unique_ptr<PasswordForm>> forms_to_remove;
-  if (login_metadata_db_ &&
-      login_metadata_db_->GetLoginsSyncedBetween(delete_begin, delete_end,
-                                                 &forms_to_remove) &&
-      login_metadata_db_->RemoveLoginsSyncedBetween(delete_begin, delete_end)) {
-    RemoveKeychainForms(forms_to_remove);
-    CleanOrphanedForms(&forms_to_remove);  // Add the orphaned forms_to_remove.
-    changes = FormsToRemoveChangeList(forms_to_remove);
-    LogStatsForBulkDeletionDuringRollback(changes.size());
-  }
-  return changes;
-}
-
-PasswordStoreChangeList PasswordStoreMac::DisableAutoSignInForOriginsImpl(
-    const base::Callback<bool(const GURL&)>& origin_filter) {
-  std::vector<std::unique_ptr<PasswordForm>> forms;
-  PasswordStoreChangeList changes;
-  if (!login_metadata_db_ ||
-      !login_metadata_db_->GetAutoSignInLogins(&forms)) {
-    return changes;
-  }
-
-  std::set<GURL> origins_to_update;
-  for (const auto& form : forms) {
-    if (origin_filter.Run(form->origin))
-      origins_to_update.insert(form->origin);
-  }
-
-  std::set<GURL> origins_updated;
-  for (const GURL& origin : origins_to_update) {
-    if (login_metadata_db_->DisableAutoSignInForOrigin(origin))
-      origins_updated.insert(origin);
-  }
-
-  for (const auto& form : forms) {
-    if (origins_updated.count(form->origin)) {
-      changes.push_back(
-          PasswordStoreChange(PasswordStoreChange::UPDATE, *form));
-    }
-  }
-
-  return changes;
-}
-
-bool PasswordStoreMac::RemoveStatisticsByOriginAndTimeImpl(
-    const base::Callback<bool(const GURL&)>& origin_filter,
-    base::Time delete_begin,
-    base::Time delete_end) {
-  return login_metadata_db_ &&
-         login_metadata_db_->stats_table().RemoveStatsByOriginAndTime(
-             origin_filter, delete_begin, delete_end);
-}
-
-std::vector<std::unique_ptr<PasswordForm>> PasswordStoreMac::FillMatchingLogins(
-    const FormDigest& form) {
-  chrome::ScopedSecKeychainSetUserInteractionAllowed user_interaction_allowed(
-      false);
-
-  std::vector<std::unique_ptr<PasswordForm>> database_forms;
-  if (!login_metadata_db_ ||
-      !login_metadata_db_->GetLogins(form, &database_forms)) {
-    return std::vector<std::unique_ptr<PasswordForm>>();
-  }
-
-  // Let's gather all signon realms we want to match with keychain entries.
-  std::set<std::string> realm_set;
-  realm_set.insert(form.signon_realm);
-  for (const std::unique_ptr<PasswordForm>& db_form : database_forms) {
-    // TODO(vabr): We should not be getting different schemes here.
-    // http://crbug.com/340112
-    if (form.scheme != db_form->scheme)
-      continue;  // Forms with different schemes never match.
-    if (db_form->is_public_suffix_match || db_form->is_affiliation_based_match)
-      realm_set.insert(db_form->signon_realm);
-  }
-  std::vector<std::unique_ptr<PasswordForm>> keychain_forms;
-  for (std::set<std::string>::const_iterator realm = realm_set.begin();
-       realm != realm_set.end(); ++realm) {
-    MacKeychainPasswordFormAdapter keychain_adapter(keychain_.get());
-    std::vector<std::unique_ptr<PasswordForm>> temp_keychain_forms =
-        keychain_adapter.PasswordsFillingForm(*realm, form.scheme);
-    AppendSecondToFirst(&keychain_forms, &temp_keychain_forms);
-  }
-
-  std::vector<std::unique_ptr<PasswordForm>> matched_forms;
-  internal_keychain_helpers::MergePasswordForms(
-      &keychain_forms, &database_forms, &matched_forms);
-
-  // Strip any blacklist entries out of the unused Keychain array, then take
-  // all the entries that are left (which we can use as imported passwords).
-  std::vector<std::unique_ptr<PasswordForm>> keychain_blacklist_forms;
-  internal_keychain_helpers::ExtractNonKeychainForms(&keychain_forms,
-                                                     &keychain_blacklist_forms);
-  AppendSecondToFirst(&matched_forms, &keychain_forms);
-
-  if (!database_forms.empty()) {
-    RemoveDatabaseForms(&database_forms);
-    NotifyLoginsChanged(FormsToRemoveChangeList(database_forms));
-  }
-
-  return matched_forms;
-}
-
-std::vector<std::unique_ptr<autofill::PasswordForm>>
-PasswordStoreMac::FillLoginsForSameOrganizationName(
-    const std::string& signon_realm) {
-  // Not implemented.
-  return std::vector<std::unique_ptr<autofill::PasswordForm>>();
-}
-
-bool PasswordStoreMac::FillAutofillableLogins(
-    std::vector<std::unique_ptr<PasswordForm>>* forms) {
-  DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
-  forms->clear();
-
-  std::vector<std::unique_ptr<PasswordForm>> database_forms;
-  if (!login_metadata_db_ ||
-      !login_metadata_db_->GetAutofillableLogins(&database_forms))
-    return false;
-
-  internal_keychain_helpers::GetPasswordsForForms(*keychain_, &database_forms,
-                                                  forms);
-
-  if (!database_forms.empty()) {
-    RemoveDatabaseForms(&database_forms);
-    NotifyLoginsChanged(FormsToRemoveChangeList(database_forms));
-  }
-
-  return true;
-}
-
-bool PasswordStoreMac::FillBlacklistLogins(
-    std::vector<std::unique_ptr<PasswordForm>>* forms) {
-  DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
-  return login_metadata_db_ && login_metadata_db_->GetBlacklistLogins(forms);
-}
-
-void PasswordStoreMac::AddSiteStatsImpl(
-    const password_manager::InteractionsStats& stats) {
-  DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
-  if (login_metadata_db_)
-    login_metadata_db_->stats_table().AddRow(stats);
-}
-
-void PasswordStoreMac::RemoveSiteStatsImpl(const GURL& origin_domain) {
-  DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
-  if (login_metadata_db_)
-    login_metadata_db_->stats_table().RemoveRow(origin_domain);
-}
-
-std::vector<password_manager::InteractionsStats>
-PasswordStoreMac::GetAllSiteStatsImpl() {
-  DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
-  return login_metadata_db_
-             ? login_metadata_db_->stats_table().GetAllRows()
-             : std::vector<password_manager::InteractionsStats>();
-}
-
-std::vector<password_manager::InteractionsStats>
-PasswordStoreMac::GetSiteStatsImpl(const GURL& origin_domain) {
-  DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
-  return login_metadata_db_
-             ? login_metadata_db_->stats_table().GetRows(origin_domain)
-             : std::vector<password_manager::InteractionsStats>();
-}
-
-bool PasswordStoreMac::AddToKeychainIfNecessary(const PasswordForm& form) {
-  if (IsLoginDatabaseOnlyForm(form))
-    return true;
-  MacKeychainPasswordFormAdapter keychainAdapter(keychain_.get());
-  return keychainAdapter.AddPassword(form);
-}
-
-bool PasswordStoreMac::DatabaseHasFormMatchingKeychainForm(
-    const PasswordForm& form) {
-  DCHECK(login_metadata_db_);
-  bool has_match = false;
-  std::vector<std::unique_ptr<PasswordForm>> database_forms;
-  if (!login_metadata_db_->GetLogins(
-          password_manager::PasswordStore::FormDigest(form), &database_forms))
-    return false;
-  for (const auto& db_form : database_forms) {
-    // Below we filter out fuzzy matched forms because we are only interested
-    // in exact ones.
-    if (!db_form->is_public_suffix_match &&
-        internal_keychain_helpers::FormsMatchForMerge(
-            form, *db_form, internal_keychain_helpers::STRICT_FORM_MATCH) &&
-        db_form->origin == form.origin) {
-      has_match = true;
-      break;
-    }
-  }
-  return has_match;
-}
-
-void PasswordStoreMac::RemoveDatabaseForms(
-    std::vector<std::unique_ptr<PasswordForm>>* forms) {
-  DCHECK(login_metadata_db_);
-  std::vector<std::unique_ptr<PasswordForm>> removed_forms;
-  for (std::unique_ptr<PasswordForm>& form : *forms) {
-    if (login_metadata_db_->RemoveLogin(*form))
-      removed_forms.push_back(std::move(form));
-  }
-  removed_forms.swap(*forms);
-}
-
-void PasswordStoreMac::RemoveKeychainForms(
-    const std::vector<std::unique_ptr<PasswordForm>>& forms) {
-  MacKeychainPasswordFormAdapter owned_keychain_adapter(keychain_.get());
-  owned_keychain_adapter.SetFindsOnlyOwnedItems(true);
-  for (const auto& form : forms) {
-    owned_keychain_adapter.RemovePassword(*form);
-  }
-}
-
-void PasswordStoreMac::CleanOrphanedForms(
-    std::vector<std::unique_ptr<PasswordForm>>* orphaned_forms) {
-  DCHECK(orphaned_forms);
-  DCHECK(login_metadata_db_);
-
-  std::vector<std::unique_ptr<PasswordForm>> database_forms;
-  if (!login_metadata_db_->GetAutofillableLogins(&database_forms))
-    return;
-
-  // Filter forms with corresponding Keychain entry out of |database_forms|.
-  std::vector<std::unique_ptr<PasswordForm>> forms_with_keychain_entry;
-  internal_keychain_helpers::GetPasswordsForForms(*keychain_, &database_forms,
-                                                  &forms_with_keychain_entry);
-
-  // Clean up any orphaned database entries.
-  RemoveDatabaseForms(&database_forms);
-
-  // Move the orphaned DB forms to the output parameter.
-  AppendSecondToFirst(orphaned_forms, &database_forms);
-}
diff --git a/chrome/browser/password_manager/password_store_mac.h b/chrome/browser/password_manager/password_store_mac.h
deleted file mode 100644
index 3395da4..0000000
--- a/chrome/browser/password_manager/password_store_mac.h
+++ /dev/null
@@ -1,160 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_MAC_H_
-#define CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_MAC_H_
-
-#include <memory>
-#include <string>
-#include <vector>
-
-#include "base/callback_forward.h"
-#include "base/macros.h"
-#include "base/single_thread_task_runner.h"
-#include "base/threading/thread.h"
-#include "components/password_manager/core/browser/login_database.h"
-#include "components/password_manager/core/browser/password_store.h"
-
-namespace crypto {
-class AppleKeychain;
-}
-
-namespace password_manager {
-class LoginDatabase;
-}
-
-class PrefService;
-
-// TODO(vasilii): Deprecate this class. The class should be used by
-// PasswordStoreProxyMac wrapper.
-// Implements PasswordStore on top of the OS X Keychain, with an internal
-// database for extra metadata. For an overview of the interactions with the
-// Keychain, as well as the rationale for some of the behaviors, see the
-// Keychain integration design doc:
-// http://dev.chromium.org/developers/design-documents/os-x-password-manager-keychain-integration
-class PasswordStoreMac : public password_manager::PasswordStore {
- public:
-  enum MigrationResult {
-    MIGRATION_OK,
-    LOGIN_DB_FAILURE,
-    ENCRYPTOR_FAILURE,
-    // Chrome has read whatever it had access to. Not all the passwords were
-    // accessible.
-    MIGRATION_PARTIAL,
-  };
-
-  PasswordStoreMac(
-      scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner,
-      scoped_refptr<base::SingleThreadTaskRunner> db_thread_runner,
-      std::unique_ptr<crypto::AppleKeychain> keychain);
-
-  // Sets the background thread.
-  void InitWithTaskRunner(
-      scoped_refptr<base::SingleThreadTaskRunner> background_task_runner);
-
-  // For all the entries in LoginDatabase reads the password value from the
-  // Keychain and updates the database.
-  // The method conducts "best effort" migration without the UI prompt.
-  // Inaccessible entries are deleted.
-  static MigrationResult ImportFromKeychain(
-      password_manager::LoginDatabase* login_db,
-      crypto::AppleKeychain* keychain);
-
-  // Delete Chrome-owned entries matching |forms| from the Keychain.
-  static void CleanUpKeychain(
-      crypto::AppleKeychain* keychain,
-      const std::vector<std::unique_ptr<autofill::PasswordForm>>& forms);
-
-  // To be used for testing.
-  password_manager::LoginDatabase* login_metadata_db() const {
-    return login_metadata_db_;
-  }
-
-  void set_login_metadata_db(password_manager::LoginDatabase* login_db);
-
-  // To be used for testing.
-  crypto::AppleKeychain* keychain() const { return keychain_.get(); }
-
- protected:
-  ~PasswordStoreMac() override;
-
- private:
-  bool Init(const syncer::SyncableService::StartSyncFlare& flare,
-            PrefService* prefs) override;
-  void ReportMetricsImpl(const std::string& sync_username,
-                         bool custom_passphrase_sync_enabled) override;
-  password_manager::PasswordStoreChangeList AddLoginImpl(
-      const autofill::PasswordForm& form) override;
-  password_manager::PasswordStoreChangeList UpdateLoginImpl(
-      const autofill::PasswordForm& form) override;
-  password_manager::PasswordStoreChangeList RemoveLoginImpl(
-      const autofill::PasswordForm& form) override;
-  password_manager::PasswordStoreChangeList RemoveLoginsByURLAndTimeImpl(
-      const base::Callback<bool(const GURL&)>& url_filter,
-      base::Time delete_begin,
-      base::Time delete_end) override;
-  password_manager::PasswordStoreChangeList RemoveLoginsCreatedBetweenImpl(
-      base::Time delete_begin,
-      base::Time delete_end) override;
-  password_manager::PasswordStoreChangeList RemoveLoginsSyncedBetweenImpl(
-      base::Time delete_begin,
-      base::Time delete_end) override;
-  password_manager::PasswordStoreChangeList DisableAutoSignInForOriginsImpl(
-      const base::Callback<bool(const GURL&)>& origin_filter) override;
-  bool RemoveStatisticsByOriginAndTimeImpl(
-      const base::Callback<bool(const GURL&)>& origin_filter,
-      base::Time delete_begin,
-      base::Time delete_end) override;
-  std::vector<std::unique_ptr<autofill::PasswordForm>> FillMatchingLogins(
-      const FormDigest& form) override;
-  std::vector<std::unique_ptr<autofill::PasswordForm>>
-  FillLoginsForSameOrganizationName(const std::string& signon_realm) override;
-  bool FillAutofillableLogins(
-      std::vector<std::unique_ptr<autofill::PasswordForm>>* forms) override;
-  bool FillBlacklistLogins(
-      std::vector<std::unique_ptr<autofill::PasswordForm>>* forms) override;
-  void AddSiteStatsImpl(
-      const password_manager::InteractionsStats& stats) override;
-  void RemoveSiteStatsImpl(const GURL& origin_domain) override;
-  std::vector<password_manager::InteractionsStats> GetAllSiteStatsImpl()
-      override;
-  std::vector<password_manager::InteractionsStats> GetSiteStatsImpl(
-      const GURL& origin_domain) override;
-
-  // Adds the given form to the Keychain if it's something we want to store
-  // there (i.e., not a blacklist entry or a federated login). Returns true if
-  // the operation succeeded (either we added successfully, or we didn't need
-  // to).
-  bool AddToKeychainIfNecessary(const autofill::PasswordForm& form);
-
-  // Returns true if our database contains a form that exactly matches the given
-  // keychain form.
-  bool DatabaseHasFormMatchingKeychainForm(
-      const autofill::PasswordForm& form);
-
-  // Removes the given forms from the database. After the call |forms| contains
-  // only those forms which were successfully removed.
-  void RemoveDatabaseForms(
-      std::vector<std::unique_ptr<autofill::PasswordForm>>* forms);
-
-  // Removes the given forms from the Keychain.
-  void RemoveKeychainForms(
-      const std::vector<std::unique_ptr<autofill::PasswordForm>>& forms);
-
-  // Searches the database for forms without a corresponding entry in the
-  // keychain. Removes those forms from the database, and adds them to
-  // |orphaned_forms|.
-  void CleanOrphanedForms(
-      std::vector<std::unique_ptr<autofill::PasswordForm>>* orphaned_forms);
-
-  std::unique_ptr<crypto::AppleKeychain> keychain_;
-
-  // The login metadata SQL database. The caller is resonsible for initializing
-  // it.
-  password_manager::LoginDatabase* login_metadata_db_;
-
-  DISALLOW_COPY_AND_ASSIGN(PasswordStoreMac);
-};
-
-#endif  // CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_MAC_H_
diff --git a/chrome/browser/password_manager/password_store_mac_internal.h b/chrome/browser/password_manager/password_store_mac_internal.h
deleted file mode 100644
index 5c9fc87..0000000
--- a/chrome/browser/password_manager/password_store_mac_internal.h
+++ /dev/null
@@ -1,226 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_MAC_INTERNAL_H_
-#define CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_MAC_INTERNAL_H_
-
-#include <Security/Security.h>
-
-#include <string>
-#include <vector>
-
-#include "base/macros.h"
-#include "components/autofill/core/common/password_form.h"
-#include "crypto/apple_keychain.h"
-
-using crypto::AppleKeychain;
-
-// Adapter that wraps a AppleKeychain and provides interaction in terms of
-// PasswordForms instead of Keychain items.
-class MacKeychainPasswordFormAdapter {
- public:
-  // Creates an adapter for |keychain|. This class does not take ownership of
-  // |keychain|, so the caller must make sure that the keychain outlives the
-  // created object.
-  explicit MacKeychainPasswordFormAdapter(const AppleKeychain* keychain);
-
-  // Returns all keychain entries matching |signon_realm| and |scheme|.
-  std::vector<std::unique_ptr<autofill::PasswordForm>> PasswordsFillingForm(
-      const std::string& signon_realm,
-      autofill::PasswordForm::Scheme scheme);
-
-  // Returns true if there is the Keychain entry that matches |query_form| on
-  // all of the fields that uniquely identify a Keychain item.
-  bool HasPasswordExactlyMatchingForm(const autofill::PasswordForm& query_form);
-
-  // Returns true if the keychain contains any items that are mergeable with
-  // |query_form|. This is different from actually extracting the passwords
-  // and checking the return count, since doing that would require reading the
-  // passwords from the keychain, thus potentially triggering authorizaiton UI,
-  // whereas this won't.
-  bool HasPasswordsMergeableWithForm(
-      const autofill::PasswordForm& query_form);
-
-  // Returns all keychain items of types corresponding to password forms.
-  std::vector<SecKeychainItemRef> GetAllPasswordFormKeychainItems();
-
-  // Returns all keychain entries corresponding to password forms.
-  // TODO(vabr): This is only used in tests, should be moved there.
-  std::vector<std::unique_ptr<autofill::PasswordForm>>
-  GetAllPasswordFormPasswords();
-
-  // Creates a new keychain entry from |form|, or updates the password of an
-  // existing keychain entry if there is a collision. Returns true if a keychain
-  // entry was successfully added/updated.
-  bool AddPassword(const autofill::PasswordForm& form);
-
-  // Removes the keychain password matching |form| if any. Returns true if a
-  // keychain item was found and successfully removed.
-  bool RemovePassword(const autofill::PasswordForm& form);
-
-  // Controls whether or not Chrome will restrict Keychain searches to items
-  // that it created. Defaults to false.
-  void SetFindsOnlyOwnedItems(bool finds_only_owned);
-
- private:
-  // Returns PasswordForm instances transformed from |items|. Also calls
-  // AppleKeychain::Free on all of the keychain items and clears |items|.
-  std::vector<std::unique_ptr<autofill::PasswordForm>>
-  ConvertKeychainItemsToForms(std::vector<SecKeychainItemRef>* items);
-
-  // Searches |keychain| for the specific keychain entry that corresponds to the
-  // given form, and returns it (or NULL if no match is found). The caller is
-  // responsible for calling AppleKeychain::Free on on the returned item.
-  SecKeychainItemRef KeychainItemForForm(
-      const autofill::PasswordForm& form);
-
-  // Returns the Keychain items matching the given signon_realm, scheme, and
-  // optionally path and username (either of both can be NULL).
-  // The caller is responsible for calling AppleKeychain::Free on the
-  // returned items.
-  std::vector<SecKeychainItemRef> MatchingKeychainItems(
-      const std::string& signon_realm,
-      autofill::PasswordForm::Scheme scheme,
-      const char* path,
-      const char* username);
-
-  // Returns the Keychain SecAuthenticationType type corresponding to |scheme|.
-  SecAuthenticationType AuthTypeForScheme(
-      autofill::PasswordForm::Scheme scheme);
-
-  // Changes the password for keychain_item to |password|; returns true if the
-  // password was successfully changed.
-  bool SetKeychainItemPassword(SecKeychainItemRef keychain_item,
-                               const std::string& password);
-
-  // Sets the creator code of keychain_item to creator_code; returns true if the
-  // creator code was successfully set.
-  bool SetKeychainItemCreatorCode(SecKeychainItemRef keychain_item,
-                                  OSType creator_code);
-
-  // Returns the creator code to be used for a Keychain search, depending on
-  // whether this object was instructed to search only for items it created.
-  // If searches should be restricted in this way, the application-specific
-  // creator code will be returned. Otherwise, 0 will be returned, indicating
-  // a search of all items, regardless of creator.
-  OSType CreatorCodeForSearch();
-
-  const AppleKeychain* keychain_;
-
-  // If true, Keychain searches are restricted to items created by Chrome.
-  bool finds_only_owned_;
-
-  DISALLOW_COPY_AND_ASSIGN(MacKeychainPasswordFormAdapter);
-};
-
-namespace internal_keychain_helpers {
-
-// Pair of pointers to a SecKeychainItemRef and a corresponding PasswordForm.
-typedef std::pair<SecKeychainItemRef, std::unique_ptr<autofill::PasswordForm>>
-    ItemFormPair;
-
-// Sets the fields of |form| based on the keychain data from |keychain_item|.
-// Fields that can't be determined from |keychain_item| will be unchanged. If
-// |extract_password_data| is true, the password data will be copied from
-// |keychain_item| in addition to its attributes, and the |blacklisted_by_user|
-// field will be set to true for empty passwords ("" or " ").
-// If |extract_password_data| is false, only the password attributes will be
-// copied, and the |blacklisted_by_user| field will always be false.
-//
-// IMPORTANT: If |extract_password_data| is true, this function can cause the OS
-// to trigger UI (to allow access to the keychain item if we aren't trusted for
-// the item), and block until the UI is dismissed.
-//
-// If excessive prompting for access to other applications' keychain items
-// becomes an issue, the password storage API will need to intially call this
-// function with |extract_password_data| set to false, and retrieve the password
-// later (accessing other fields doesn't require authorization).
-bool FillPasswordFormFromKeychainItem(const AppleKeychain& keychain,
-                                      SecKeychainItemRef keychain_item,
-                                      autofill::PasswordForm* form,
-                                      bool extract_password_data);
-
-// Returns true if |keychain_item| has the application-specific creator code in
-// its attributes.
-bool HasCreatorCode(const AppleKeychain& keychain,
-                    SecKeychainItemRef keychain_item);
-
-// Use FormMatchStrictness to configure which forms are considered a match by
-// FormsMatchForMerge:
-enum FormMatchStrictness {
-  STRICT_FORM_MATCH,  // Match only forms with the same scheme, signon realm and
-                      // username value.
-  FUZZY_FORM_MATCH,   // Also match cases where the first form's
-                      // original_signon_realm is nonempty and matches the
-                      // second form's signon_realm.
-};
-
-// Returns true if the two given forms are suitable for merging (see
-// MergePasswordForms).
-bool FormsMatchForMerge(const autofill::PasswordForm& form_a,
-                        const autofill::PasswordForm& form_b,
-                        FormMatchStrictness strictness);
-
-// Populates merged_forms by combining the password data from keychain_forms and
-// the metadata from database_forms, removing used entries from the two source
-// lists.
-//
-// On return, database_forms and keychain_forms will have only unused
-// entries; for database_forms that means entries for which no corresponding
-// password can be found (and which aren't blacklist entries), and for
-// keychain_forms its entries that weren't merged into at least one database
-// form.
-void MergePasswordForms(
-    std::vector<std::unique_ptr<autofill::PasswordForm>>* keychain_forms,
-    std::vector<std::unique_ptr<autofill::PasswordForm>>* database_forms,
-    std::vector<std::unique_ptr<autofill::PasswordForm>>* merged_forms);
-
-// For every form in |database_forms|, if such a form has a corresponding entry
-// in |keychain|, this adds the password from the entry and moves that form from
-// |database_forms| into |passwords|.
-void GetPasswordsForForms(
-    const AppleKeychain& keychain,
-    std::vector<std::unique_ptr<autofill::PasswordForm>>* database_forms,
-    std::vector<std::unique_ptr<autofill::PasswordForm>>* passwords);
-
-// Loads all items in the system keychain into |keychain_items|, creates for
-// each keychain item a corresponding PasswordForm that doesn't contain any
-// password data, and returns the two collections as a vector of ItemFormPairs.
-// Used by GetPasswordsForForms for optimized matching of keychain items with
-// PasswordForms in the database.
-// Note: Since no password data is loaded here, the resulting PasswordForms
-// will include blacklist entries, which will have to be filtered out later.
-// Caller owns the SecKeychainItemRefs and PasswordForms that are returned.
-// This operation does not require OS authorization.
-std::vector<ItemFormPair> ExtractAllKeychainItemAttributesIntoPasswordForms(
-    std::vector<SecKeychainItemRef>* keychain_items,
-    const AppleKeychain& keychain);
-
-// Takes a PasswordForm's signon_realm and parses it into its component parts,
-// which are returned though the appropriate out parameters.
-// Returns true if it can be successfully parsed, in which case all out params
-// that are non-NULL will be set. If there is no port, port will be 0.
-// If the return value is false, the state of the out params is undefined.
-bool ExtractSignonRealmComponents(const std::string& signon_realm,
-                                  std::string* server,
-                                  UInt32* port,
-                                  bool* is_secure,
-                                  std::string* security_domain);
-
-// Returns true if the signon_realm of |query_form| can be successfully parsed
-// by ExtractSignonRealmComponents, and if |query_form| matches |other_form|.
-bool FormIsValidAndMatchesOtherForm(const autofill::PasswordForm& query_form,
-                                    const autofill::PasswordForm& other_form);
-
-// Returns PasswordForm instances populated with password data for each keychain
-// entry in |item_form_pairs| that could be merged with |query_form|.
-std::vector<std::unique_ptr<autofill::PasswordForm>>
-ExtractPasswordsMergeableWithForm(
-    const AppleKeychain& keychain,
-    const std::vector<ItemFormPair>& item_form_pairs,
-    const autofill::PasswordForm& query_form);
-
-}  // namespace internal_keychain_helpers
-
-#endif  // CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_MAC_INTERNAL_H_
diff --git a/chrome/browser/password_manager/password_store_mac_unittest.cc b/chrome/browser/password_manager/password_store_mac_unittest.cc
deleted file mode 100644
index 02241ab..0000000
--- a/chrome/browser/password_manager/password_store_mac_unittest.cc
+++ /dev/null
@@ -1,2113 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/password_manager/password_store_mac.h"
-
-#include <stddef.h>
-
-#include <string>
-
-#include "base/files/scoped_temp_dir.h"
-#include "base/macros.h"
-#include "base/memory/ptr_util.h"
-#include "base/message_loop/message_loop.h"
-#include "base/run_loop.h"
-#include "base/scoped_observer.h"
-#include "base/stl_util.h"
-#include "base/strings/string_util.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/synchronization/waitable_event.h"
-#include "base/test/histogram_tester.h"
-#include "base/threading/thread_task_runner_handle.h"
-#include "chrome/browser/password_manager/password_store_mac_internal.h"
-#include "chrome/common/chrome_paths.h"
-#include "components/os_crypt/os_crypt_mocker.h"
-#include "components/password_manager/core/browser/login_database.h"
-#include "components/password_manager/core/browser/password_manager_test_utils.h"
-#include "components/password_manager/core/browser/password_manager_util.h"
-#include "components/password_manager/core/browser/password_store_consumer.h"
-#include "components/password_manager/core/browser/password_store_origin_unittest.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/test/test_browser_thread_bundle.h"
-#include "content/public/test/test_utils.h"
-#include "crypto/mock_apple_keychain.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "url/origin.h"
-
-using autofill::PasswordForm;
-using base::ASCIIToUTF16;
-using base::WideToUTF16;
-using content::BrowserThread;
-using crypto::MockAppleKeychain;
-using internal_keychain_helpers::FormsMatchForMerge;
-using internal_keychain_helpers::STRICT_FORM_MATCH;
-using password_manager::CreatePasswordFormFromDataForTesting;
-using password_manager::LoginDatabase;
-using password_manager::PasswordFormData;
-using password_manager::PasswordStore;
-using password_manager::PasswordStoreChange;
-using password_manager::PasswordStoreChangeList;
-using password_manager::PasswordStoreConsumer;
-using testing::_;
-using testing::DoAll;
-using testing::Invoke;
-using testing::IsEmpty;
-using testing::SizeIs;
-using testing::WithArg;
-
-namespace {
-
-ACTION(QuitUIMessageLoop) {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  base::MessageLoop::current()->QuitWhenIdle();
-}
-
-// From the mock's argument #0 of type const std::vector<PasswordForm*>& takes
-// the first form and copies it to the form pointed to by |target_form_ptr|.
-ACTION_P(SaveACopyOfFirstForm, target_form_ptr) {
-  ASSERT_FALSE(arg0.empty());
-  *target_form_ptr = *arg0[0];
-}
-
-void Noop() {}
-
-class MockPasswordStoreConsumer : public PasswordStoreConsumer {
- public:
-  MOCK_METHOD1(OnGetPasswordStoreResultsConstRef,
-               void(const std::vector<std::unique_ptr<PasswordForm>>&));
-
-  // GMock cannot mock methods with move-only args.
-  void OnGetPasswordStoreResults(
-      std::vector<std::unique_ptr<PasswordForm>> results) override {
-    OnGetPasswordStoreResultsConstRef(results);
-  }
-};
-
-// A LoginDatabase that simulates an Init() method that takes a long time.
-class SlowToInitLoginDatabase : public password_manager::LoginDatabase {
- public:
-  // Creates an instance whose Init() method will block until |event| is
-  // signaled. |event| must outlive |this|.
-  SlowToInitLoginDatabase(const base::FilePath& db_path,
-                          base::WaitableEvent* event)
-      : password_manager::LoginDatabase(db_path), event_(event) {}
-  ~SlowToInitLoginDatabase() override {}
-
-  // LoginDatabase:
-  bool Init() override {
-    event_->Wait();
-    return password_manager::LoginDatabase::Init();
-  }
-
- private:
-  base::WaitableEvent* event_;
-
-  DISALLOW_COPY_AND_ASSIGN(SlowToInitLoginDatabase);
-};
-
-#pragma mark -
-
-// Macro to simplify calling CheckFormsAgainstExpectations with a useful label.
-#define CHECK_FORMS(forms, expectations, i) \
-  CheckFormsAgainstExpectations(forms, expectations, #forms, i)
-
-// Ensures that the data in |forms| match |expectations|, causing test failures
-// for any discrepencies.
-// TODO(stuartmorgan): This is current order-dependent; ideally it shouldn't
-// matter if |forms| and |expectations| are scrambled.
-void CheckFormsAgainstExpectations(
-    const std::vector<std::unique_ptr<PasswordForm>>& forms,
-    const std::vector<PasswordFormData*>& expectations,
-
-    const char* forms_label,
-    unsigned int test_number) {
-  EXPECT_EQ(expectations.size(), forms.size()) << forms_label << " in test "
-                                               << test_number;
-  if (expectations.size() != forms.size())
-    return;
-
-  for (unsigned int i = 0; i < expectations.size(); ++i) {
-    SCOPED_TRACE(testing::Message() << forms_label << " in test " << test_number
-                                    << ", item " << i);
-    PasswordForm* form = forms[i].get();
-    PasswordFormData* expectation = expectations[i];
-    EXPECT_EQ(expectation->scheme, form->scheme);
-    EXPECT_EQ(std::string(expectation->signon_realm), form->signon_realm);
-    EXPECT_EQ(GURL(expectation->origin), form->origin);
-    EXPECT_EQ(GURL(expectation->action), form->action);
-    EXPECT_EQ(WideToUTF16(expectation->submit_element), form->submit_element);
-    EXPECT_EQ(WideToUTF16(expectation->username_element),
-              form->username_element);
-    EXPECT_EQ(WideToUTF16(expectation->password_element),
-              form->password_element);
-    if (expectation->username_value) {
-      EXPECT_EQ(WideToUTF16(expectation->username_value), form->username_value);
-      EXPECT_EQ(WideToUTF16(expectation->username_value), form->display_name);
-      EXPECT_TRUE(form->skip_zero_click);
-      if (expectation->password_value &&
-          wcscmp(expectation->password_value,
-                 password_manager::kTestingFederatedLoginMarker) == 0) {
-        EXPECT_TRUE(form->password_value.empty());
-        EXPECT_EQ(
-            url::Origin(GURL(password_manager::kTestingFederationUrlSpec)),
-            form->federation_origin);
-      } else {
-        EXPECT_EQ(WideToUTF16(expectation->password_value),
-                  form->password_value);
-        EXPECT_TRUE(form->federation_origin.unique());
-      }
-    } else {
-      EXPECT_TRUE(form->blacklisted_by_user);
-    }
-    EXPECT_EQ(expectation->preferred, form->preferred);
-    EXPECT_DOUBLE_EQ(expectation->creation_time,
-                     form->date_created.ToDoubleT());
-    base::Time created = base::Time::FromDoubleT(expectation->creation_time);
-    EXPECT_EQ(
-        created + base::TimeDelta::FromDays(
-                      password_manager::kTestingDaysAfterPasswordsAreSynced),
-        form->date_synced);
-    EXPECT_EQ(GURL(password_manager::kTestingIconUrlSpec), form->icon_url);
-  }
-}
-
-PasswordStoreChangeList AddChangeForForm(const PasswordForm& form) {
-  return PasswordStoreChangeList(
-      1, PasswordStoreChange(PasswordStoreChange::ADD, form));
-}
-
-class PasswordStoreMacTestDelegate {
- public:
-  PasswordStoreMacTestDelegate();
-  ~PasswordStoreMacTestDelegate();
-
-  PasswordStoreMac* store() { return store_.get(); }
-
-  static void FinishAsyncProcessing();
-
- private:
-  void Initialize();
-
-  void ClosePasswordStore();
-
-  base::FilePath test_login_db_file_path() const;
-
-  base::MessageLoopForUI message_loop_;
-  base::ScopedTempDir db_dir_;
-  std::unique_ptr<LoginDatabase> login_db_;
-  scoped_refptr<PasswordStoreMac> store_;
-
-  DISALLOW_COPY_AND_ASSIGN(PasswordStoreMacTestDelegate);
-};
-
-PasswordStoreMacTestDelegate::PasswordStoreMacTestDelegate() {
-  Initialize();
-}
-
-PasswordStoreMacTestDelegate::~PasswordStoreMacTestDelegate() {
-  ClosePasswordStore();
-}
-
-void PasswordStoreMacTestDelegate::FinishAsyncProcessing() {
-  base::RunLoop().RunUntilIdle();
-}
-
-void PasswordStoreMacTestDelegate::Initialize() {
-  ASSERT_TRUE(db_dir_.CreateUniqueTempDir());
-
-  // Ensure that LoginDatabase will use the mock keychain if it needs to
-  // encrypt/decrypt a password.
-  OSCryptMocker::SetUpWithSingleton();
-  login_db_.reset(new LoginDatabase(test_login_db_file_path()));
-  ASSERT_TRUE(login_db_->Init());
-
-  // Create and initialize the password store.
-  store_ = new PasswordStoreMac(base::ThreadTaskRunnerHandle::Get(),
-                                base::ThreadTaskRunnerHandle::Get(),
-                                base::WrapUnique(new MockAppleKeychain));
-  store_->set_login_metadata_db(login_db_.get());
-  store_->login_metadata_db()->set_clear_password_values(false);
-}
-
-void PasswordStoreMacTestDelegate::ClosePasswordStore() {
-  store_->ShutdownOnUIThread();
-  FinishAsyncProcessing();
-  OSCryptMocker::TearDown();
-}
-
-base::FilePath PasswordStoreMacTestDelegate::test_login_db_file_path() const {
-  return db_dir_.GetPath().Append(FILE_PATH_LITERAL("login.db"));
-}
-
-}  // namespace
-
-namespace password_manager {
-
-INSTANTIATE_TYPED_TEST_CASE_P(Mac,
-                              PasswordStoreOriginTest,
-                              PasswordStoreMacTestDelegate);
-
-}  // namespace password_manager
-
-#pragma mark -
-
-class PasswordStoreMacInternalsTest : public testing::Test {
- public:
-  void SetUp() override {
-    MockAppleKeychain::KeychainTestData test_data[] = {
-        // Basic HTML form.
-        {kSecAuthenticationTypeHTMLForm, "some.domain.com",
-         kSecProtocolTypeHTTP, NULL, 0, NULL, "20020601171500Z", "joe_user",
-         "sekrit", false},
-        // HTML form with path.
-        {kSecAuthenticationTypeHTMLForm, "some.domain.com",
-         kSecProtocolTypeHTTP, "/insecure.html", 0, NULL, "19991231235959Z",
-         "joe_user", "sekrit", false},
-        // Secure HTML form with path.
-        {kSecAuthenticationTypeHTMLForm, "some.domain.com",
-         kSecProtocolTypeHTTPS, "/secure.html", 0, NULL, "20100908070605Z",
-         "secure_user", "password", false},
-        // True negative item.
-        {kSecAuthenticationTypeHTMLForm, "dont.remember.com",
-         kSecProtocolTypeHTTP, NULL, 0, NULL, "20000101000000Z", "", "", true},
-        // De-facto negative item, type one.
-        {kSecAuthenticationTypeHTMLForm, "dont.remember.com",
-         kSecProtocolTypeHTTP, NULL, 0, NULL, "20000101000000Z",
-         "Password Not Stored", "", false},
-        // De-facto negative item, type two.
-        {kSecAuthenticationTypeHTMLForm, "dont.remember.com",
-         kSecProtocolTypeHTTPS, NULL, 0, NULL, "20000101000000Z",
-         "Password Not Stored", " ", false},
-        // HTTP auth basic, with port and path.
-        {kSecAuthenticationTypeHTTPBasic, "some.domain.com",
-         kSecProtocolTypeHTTP, "/insecure.html", 4567, "low_security",
-         "19980330100000Z", "basic_auth_user", "basic", false},
-        // HTTP auth digest, secure.
-        {kSecAuthenticationTypeHTTPDigest, "some.domain.com",
-         kSecProtocolTypeHTTPS, NULL, 0, "high_security", "19980330100000Z",
-         "digest_auth_user", "digest", false},
-        // An FTP password with an invalid date, for edge-case testing.
-        {kSecAuthenticationTypeDefault, "a.server.com", kSecProtocolTypeFTP,
-         NULL, 0, NULL, "20010203040", "abc", "123", false},
-        // Password for an Android application.
-        {kSecAuthenticationTypeHTMLForm, "android://hash@com.domain.some/",
-         kSecProtocolTypeHTTPS, "", 0, NULL, "20150515141312Z", "joe_user",
-         "secret", false},
-    };
-
-    keychain_ = new MockAppleKeychain();
-
-    for (unsigned int i = 0; i < arraysize(test_data); ++i) {
-      keychain_->AddTestItem(test_data[i]);
-    }
-  }
-
-  void TearDown() override {
-    ExpectCreatesAndFreesBalanced();
-    ExpectCreatorCodesSet();
-    delete keychain_;
-  }
-
- protected:
-  // Causes a test failure unless everything returned from keychain_'s
-  // ItemCopyAttributesAndData, SearchCreateFromAttributes, and SearchCopyNext
-  // was correctly freed.
-  void ExpectCreatesAndFreesBalanced() {
-    EXPECT_EQ(0, keychain_->UnfreedSearchCount());
-    EXPECT_EQ(0, keychain_->UnfreedKeychainItemCount());
-    EXPECT_EQ(0, keychain_->UnfreedAttributeDataCount());
-  }
-
-  // Causes a test failure unless any Keychain items added during the test have
-  // their creator code set.
-  void ExpectCreatorCodesSet() {
-    EXPECT_TRUE(keychain_->CreatorCodesSetForAddedItems());
-  }
-
-  MockAppleKeychain* keychain_;
-};
-
-#pragma mark -
-
-TEST_F(PasswordStoreMacInternalsTest, TestKeychainToFormTranslation) {
-  typedef struct {
-    const PasswordForm::Scheme scheme;
-    const char* signon_realm;
-    const char* origin;
-    const wchar_t* username;  // Set to NULL to check for a blacklist entry.
-    const wchar_t* password;
-    const int creation_year;
-    const int creation_month;
-    const int creation_day;
-    const int creation_hour;
-    const int creation_minute;
-    const int creation_second;
-  } TestExpectations;
-
-  TestExpectations expected[] = {
-      {PasswordForm::SCHEME_HTML, "http://some.domain.com/",
-       "http://some.domain.com/", L"joe_user", L"sekrit", 2002, 6, 1, 17, 15,
-       0},
-      {PasswordForm::SCHEME_HTML, "http://some.domain.com/",
-       "http://some.domain.com/insecure.html", L"joe_user", L"sekrit", 1999, 12,
-       31, 23, 59, 59},
-      {PasswordForm::SCHEME_HTML, "https://some.domain.com/",
-       "https://some.domain.com/secure.html", L"secure_user", L"password", 2010,
-       9, 8, 7, 6, 5},
-      {PasswordForm::SCHEME_HTML, "http://dont.remember.com/",
-       "http://dont.remember.com/", NULL, NULL, 2000, 1, 1, 0, 0, 0},
-      {PasswordForm::SCHEME_HTML, "http://dont.remember.com/",
-       "http://dont.remember.com/", NULL, NULL, 2000, 1, 1, 0, 0, 0},
-      {PasswordForm::SCHEME_HTML, "https://dont.remember.com/",
-       "https://dont.remember.com/", NULL, NULL, 2000, 1, 1, 0, 0, 0},
-      {PasswordForm::SCHEME_BASIC, "http://some.domain.com:4567/low_security",
-       "http://some.domain.com:4567/insecure.html", L"basic_auth_user",
-       L"basic", 1998, 03, 30, 10, 00, 00},
-      {PasswordForm::SCHEME_DIGEST, "https://some.domain.com/high_security",
-       "https://some.domain.com/", L"digest_auth_user", L"digest", 1998, 3, 30,
-       10, 0, 0},
-      // This one gives us an invalid date, which we will treat as a "NULL" date
-      // which is 1601.
-      {PasswordForm::SCHEME_OTHER, "http://a.server.com/",
-       "http://a.server.com/", L"abc", L"123", 1601, 1, 1, 0, 0, 0},
-      {PasswordForm::SCHEME_HTML, "android://hash@com.domain.some/", "",
-       L"joe_user", L"secret", 2015, 5, 15, 14, 13, 12},
-  };
-
-  for (unsigned int i = 0; i < arraysize(expected); ++i) {
-    SCOPED_TRACE(testing::Message("In iteration ") << i);
-    // Create our fake KeychainItemRef; see MockAppleKeychain docs.
-    SecKeychainItemRef keychain_item =
-        reinterpret_cast<SecKeychainItemRef>(i + 1);
-    PasswordForm form;
-    bool parsed = internal_keychain_helpers::FillPasswordFormFromKeychainItem(
-        *keychain_, keychain_item, &form, true);
-
-    EXPECT_TRUE(parsed);
-
-    EXPECT_EQ(expected[i].scheme, form.scheme);
-    EXPECT_EQ(GURL(expected[i].origin), form.origin);
-    EXPECT_EQ(std::string(expected[i].signon_realm), form.signon_realm);
-    if (expected[i].username) {
-      EXPECT_EQ(WideToUTF16(expected[i].username), form.username_value);
-      EXPECT_EQ(WideToUTF16(expected[i].password), form.password_value);
-      EXPECT_FALSE(form.blacklisted_by_user);
-    } else {
-      EXPECT_TRUE(form.blacklisted_by_user);
-    }
-    base::Time::Exploded exploded_time;
-    form.date_created.UTCExplode(&exploded_time);
-    EXPECT_EQ(expected[i].creation_year, exploded_time.year);
-    EXPECT_EQ(expected[i].creation_month, exploded_time.month);
-    EXPECT_EQ(expected[i].creation_day, exploded_time.day_of_month);
-    EXPECT_EQ(expected[i].creation_hour, exploded_time.hour);
-    EXPECT_EQ(expected[i].creation_minute, exploded_time.minute);
-    EXPECT_EQ(expected[i].creation_second, exploded_time.second);
-  }
-
-  {
-    // Use an invalid ref, to make sure errors are reported.
-    SecKeychainItemRef keychain_item = reinterpret_cast<SecKeychainItemRef>(99);
-    PasswordForm form;
-    bool parsed = internal_keychain_helpers::FillPasswordFormFromKeychainItem(
-        *keychain_, keychain_item, &form, true);
-    EXPECT_FALSE(parsed);
-  }
-}
-
-TEST_F(PasswordStoreMacInternalsTest, TestKeychainSearch) {
-  struct TestDataAndExpectation {
-    const PasswordFormData data;
-    const size_t expected_fill_matches;
-    const size_t expected_merge_matches;
-  };
-  // Most fields are left blank because we don't care about them for searching.
-  TestDataAndExpectation test_data[] = {
-      // An HTML form we've seen.
-      {{PasswordForm::SCHEME_HTML, "http://some.domain.com/", NULL, NULL, NULL,
-        NULL, NULL, L"joe_user", NULL, false, 0},
-       2,
-       2},
-      {{PasswordForm::SCHEME_HTML, "http://some.domain.com/", NULL, NULL, NULL,
-        NULL, NULL, L"wrong_user", NULL, false, 0},
-       2,
-       0},
-      // An HTML form we haven't seen
-      {{PasswordForm::SCHEME_HTML, "http://www.unseendomain.com/", NULL, NULL,
-        NULL, NULL, NULL, L"joe_user", NULL, false, 0},
-       0,
-       0},
-      // Basic auth that should match.
-      {{PasswordForm::SCHEME_BASIC, "http://some.domain.com:4567/low_security",
-        NULL, NULL, NULL, NULL, NULL, L"basic_auth_user", NULL, false, 0},
-       1,
-       1},
-      // Basic auth with the wrong port.
-      {{PasswordForm::SCHEME_BASIC, "http://some.domain.com:1111/low_security",
-        NULL, NULL, NULL, NULL, NULL, L"basic_auth_user", NULL, false, 0},
-       0,
-       0},
-      // Digest auth we've saved under https, visited with http.
-      {{PasswordForm::SCHEME_DIGEST, "http://some.domain.com/high_security",
-        NULL, NULL, NULL, NULL, NULL, L"digest_auth_user", NULL, false, 0},
-       0,
-       0},
-      // Digest auth that should match.
-      {{PasswordForm::SCHEME_DIGEST, "https://some.domain.com/high_security",
-        NULL, NULL, NULL, NULL, NULL, L"wrong_user", NULL, false, 0},
-       1,
-       0},
-      // Digest auth with the wrong domain.
-      {{PasswordForm::SCHEME_DIGEST, "https://some.domain.com/other_domain",
-        NULL, NULL, NULL, NULL, NULL, L"digest_auth_user", NULL, false, 0},
-       0,
-       0},
-      // Android credentials (both legacy ones with origin, and without).
-      {{PasswordForm::SCHEME_HTML, "android://hash@com.domain.some/",
-        "android://hash@com.domain.some/", NULL, NULL, NULL, NULL, L"joe_user",
-        NULL, false, 0},
-       1,
-       1},
-      {{PasswordForm::SCHEME_HTML, "android://hash@com.domain.some/", NULL,
-        NULL, NULL, NULL, NULL, L"joe_user", NULL, false, 0},
-       1,
-       1},
-      // Federated logins do not have a corresponding Keychain entry, and should
-      // not match the username/password stored for the same application. Note
-      // that it will match for filling, however, because that part does not
-      // know
-      // that it is a federated login.
-      {{PasswordForm::SCHEME_HTML, "android://hash@com.domain.some/", NULL,
-        NULL, NULL, NULL, NULL, L"joe_user",
-        password_manager::kTestingFederatedLoginMarker, false, 0},
-       1,
-       0},
-      /// Garbage forms should have no matches.
-      {{PasswordForm::SCHEME_HTML, "foo/bar/baz", NULL, NULL, NULL, NULL, NULL,
-        NULL, NULL, false, 0},
-       0,
-       0},
-  };
-
-  MacKeychainPasswordFormAdapter keychain_adapter(keychain_);
-  MacKeychainPasswordFormAdapter owned_keychain_adapter(keychain_);
-  owned_keychain_adapter.SetFindsOnlyOwnedItems(true);
-  for (unsigned int i = 0; i < arraysize(test_data); ++i) {
-    std::unique_ptr<PasswordForm> query_form =
-        CreatePasswordFormFromDataForTesting(test_data[i].data);
-
-    // Check matches treating the form as a fill target.
-    std::vector<std::unique_ptr<PasswordForm>> matching_items =
-        keychain_adapter.PasswordsFillingForm(query_form->signon_realm,
-                                              query_form->scheme);
-    EXPECT_EQ(test_data[i].expected_fill_matches, matching_items.size());
-
-    // Check matches treating the form as a merging target.
-    EXPECT_EQ(test_data[i].expected_merge_matches > 0,
-              keychain_adapter.HasPasswordsMergeableWithForm(*query_form));
-    std::vector<SecKeychainItemRef> keychain_items;
-    std::vector<internal_keychain_helpers::ItemFormPair> item_form_pairs =
-        internal_keychain_helpers::
-            ExtractAllKeychainItemAttributesIntoPasswordForms(&keychain_items,
-                                                              *keychain_);
-    matching_items =
-        internal_keychain_helpers::ExtractPasswordsMergeableWithForm(
-            *keychain_, item_form_pairs, *query_form);
-    EXPECT_EQ(test_data[i].expected_merge_matches, matching_items.size());
-    for (std::vector<SecKeychainItemRef>::iterator i = keychain_items.begin();
-         i != keychain_items.end(); ++i) {
-      keychain_->Free(*i);
-    }
-
-    // None of the pre-seeded items are owned by us, so none should match an
-    // owned-passwords-only search.
-    matching_items = owned_keychain_adapter.PasswordsFillingForm(
-        query_form->signon_realm, query_form->scheme);
-    EXPECT_EQ(0U, matching_items.size());
-  }
-}
-
-// Changes just the origin path of |form|.
-static void SetPasswordFormPath(PasswordForm* form, const char* path) {
-  GURL::Replacements replacement;
-  std::string new_value(path);
-  replacement.SetPathStr(new_value);
-  form->origin = form->origin.ReplaceComponents(replacement);
-}
-
-// Changes just the signon_realm port of |form|.
-static void SetPasswordFormPort(PasswordForm* form, const char* port) {
-  GURL::Replacements replacement;
-  std::string new_value(port);
-  replacement.SetPortStr(new_value);
-  GURL signon_gurl = GURL(form->signon_realm);
-  form->signon_realm = signon_gurl.ReplaceComponents(replacement).spec();
-}
-
-// Changes just the signon_ream auth realm of |form|.
-static void SetPasswordFormRealm(PasswordForm* form, const char* realm) {
-  GURL::Replacements replacement;
-  std::string new_value(realm);
-  replacement.SetPathStr(new_value);
-  GURL signon_gurl = GURL(form->signon_realm);
-  form->signon_realm = signon_gurl.ReplaceComponents(replacement).spec();
-}
-
-TEST_F(PasswordStoreMacInternalsTest, TestKeychainExactSearch) {
-  MacKeychainPasswordFormAdapter keychain_adapter(keychain_);
-
-  PasswordFormData base_form_data[] = {
-      {PasswordForm::SCHEME_HTML, "http://some.domain.com/",
-       "http://some.domain.com/insecure.html", NULL, NULL, NULL, NULL,
-       L"joe_user", NULL, true, 0},
-      {PasswordForm::SCHEME_BASIC, "http://some.domain.com:4567/low_security",
-       "http://some.domain.com:4567/insecure.html", NULL, NULL, NULL, NULL,
-       L"basic_auth_user", NULL, true, 0},
-      {PasswordForm::SCHEME_DIGEST, "https://some.domain.com/high_security",
-       "https://some.domain.com", NULL, NULL, NULL, NULL, L"digest_auth_user",
-       NULL, true, 0},
-  };
-
-  for (unsigned int i = 0; i < arraysize(base_form_data); ++i) {
-    // Create a base form and make sure we find a match.
-    std::unique_ptr<PasswordForm> base_form =
-        CreatePasswordFormFromDataForTesting(base_form_data[i]);
-    EXPECT_TRUE(keychain_adapter.HasPasswordsMergeableWithForm(*base_form));
-    EXPECT_TRUE(keychain_adapter.HasPasswordExactlyMatchingForm(*base_form));
-
-    // Make sure that the matching isn't looser than it should be by checking
-    // that slightly altered forms don't match.
-    std::vector<std::unique_ptr<PasswordForm>> modified_forms;
-
-    modified_forms.push_back(base::MakeUnique<PasswordForm>(*base_form));
-    modified_forms.back()->username_value = ASCIIToUTF16("wrong_user");
-
-    modified_forms.push_back(base::MakeUnique<PasswordForm>(*base_form));
-    SetPasswordFormPath(modified_forms.back().get(), "elsewhere.html");
-
-    modified_forms.push_back(base::MakeUnique<PasswordForm>(*base_form));
-    modified_forms.back()->scheme = PasswordForm::SCHEME_OTHER;
-
-    modified_forms.push_back(base::MakeUnique<PasswordForm>(*base_form));
-    SetPasswordFormPort(modified_forms.back().get(), "1234");
-
-    modified_forms.push_back(base::MakeUnique<PasswordForm>(*base_form));
-    modified_forms.back()->blacklisted_by_user = true;
-
-    if (base_form->scheme == PasswordForm::SCHEME_BASIC ||
-        base_form->scheme == PasswordForm::SCHEME_DIGEST) {
-      modified_forms.push_back(base::MakeUnique<PasswordForm>(*base_form));
-      SetPasswordFormRealm(modified_forms.back().get(), "incorrect");
-    }
-
-    for (unsigned int j = 0; j < modified_forms.size(); ++j) {
-      bool match =
-          keychain_adapter.HasPasswordExactlyMatchingForm(*modified_forms[j]);
-      EXPECT_FALSE(match) << "In modified version " << j << " of base form "
-                          << i;
-    }
-  }
-}
-
-TEST_F(PasswordStoreMacInternalsTest, TestKeychainAdd) {
-  struct TestDataAndExpectation {
-    PasswordFormData data;
-    bool should_succeed;
-  };
-  TestDataAndExpectation test_data[] = {
-      // Test a variety of scheme/port/protocol/path variations.
-      {{PasswordForm::SCHEME_HTML, "http://web.site.com/",
-        "http://web.site.com/path/to/page.html", NULL, NULL, NULL, NULL,
-        L"anonymous", L"knock-knock", false, 0},
-       true},
-      {{PasswordForm::SCHEME_HTML, "https://web.site.com/",
-        "https://web.site.com/", NULL, NULL, NULL, NULL, L"admin", L"p4ssw0rd",
-        false, 0},
-       true},
-      {{PasswordForm::SCHEME_BASIC, "http://a.site.com:2222/therealm",
-        "http://a.site.com:2222/", NULL, NULL, NULL, NULL, L"username",
-        L"password", false, 0},
-       true},
-      {{PasswordForm::SCHEME_DIGEST, "https://digest.site.com/differentrealm",
-        "https://digest.site.com/secure.html", NULL, NULL, NULL, NULL,
-        L"testname", L"testpass", false, 0},
-       true},
-      // Test that Android credentials can be stored. Also check the legacy form
-      // when |origin| was still filled with the Android URI (and not left
-      // empty).
-      {{PasswordForm::SCHEME_HTML, "android://hash@com.example.alpha/", "",
-        NULL, NULL, NULL, NULL, L"joe_user", L"password", false, 0},
-       true},
-      {{PasswordForm::SCHEME_HTML, "android://hash@com.example.beta/",
-        "android://hash@com.example.beta/", NULL, NULL, NULL, NULL,
-        L"jane_user", L"password2", false, 0},
-       true},
-      // Make sure that garbage forms are rejected.
-      {{PasswordForm::SCHEME_HTML, "gobbledygook", "gobbledygook", NULL, NULL,
-        NULL, NULL, L"anonymous", L"knock-knock", false, 0},
-       false},
-      // Test that failing to update a duplicate (forced using the magic failure
-      // password; see MockAppleKeychain::ItemModifyAttributesAndData) is
-      // reported.
-      {{PasswordForm::SCHEME_HTML, "http://some.domain.com",
-        "http://some.domain.com/insecure.html", NULL, NULL, NULL, NULL,
-        L"joe_user", L"fail_me", false, 0},
-       false},
-  };
-
-  MacKeychainPasswordFormAdapter owned_keychain_adapter(keychain_);
-  owned_keychain_adapter.SetFindsOnlyOwnedItems(true);
-
-  for (unsigned int i = 0; i < arraysize(test_data); ++i) {
-    std::unique_ptr<PasswordForm> in_form =
-        CreatePasswordFormFromDataForTesting(test_data[i].data);
-    bool add_succeeded = owned_keychain_adapter.AddPassword(*in_form);
-    EXPECT_EQ(test_data[i].should_succeed, add_succeeded);
-    if (add_succeeded) {
-      EXPECT_TRUE(
-          owned_keychain_adapter.HasPasswordsMergeableWithForm(*in_form));
-      EXPECT_TRUE(
-          owned_keychain_adapter.HasPasswordExactlyMatchingForm(*in_form));
-    }
-  }
-
-  // Test that adding duplicate item updates the existing item.
-  // TODO(engedy): Add a test to verify that updating Android credentials work.
-  // See: https://crbug.com/476851.
-  {
-    PasswordFormData data = {PasswordForm::SCHEME_HTML,
-                             "http://some.domain.com",
-                             "http://some.domain.com/insecure.html",
-                             NULL,
-                             NULL,
-                             NULL,
-                             NULL,
-                             L"joe_user",
-                             L"updated_password",
-                             false,
-                             0};
-    std::unique_ptr<PasswordForm> update_form =
-        CreatePasswordFormFromDataForTesting(data);
-    MacKeychainPasswordFormAdapter keychain_adapter(keychain_);
-    EXPECT_TRUE(keychain_adapter.AddPassword(*update_form));
-    SecKeychainItemRef keychain_item = reinterpret_cast<SecKeychainItemRef>(2);
-    PasswordForm stored_form;
-    internal_keychain_helpers::FillPasswordFormFromKeychainItem(
-        *keychain_, keychain_item, &stored_form, true);
-    EXPECT_EQ(update_form->password_value, stored_form.password_value);
-  }
-}
-
-TEST_F(PasswordStoreMacInternalsTest, TestKeychainRemove) {
-  struct TestDataAndExpectation {
-    PasswordFormData data;
-    bool should_succeed;
-  };
-  TestDataAndExpectation test_data[] = {
-      // Test deletion of an item that we add.
-      {{PasswordForm::SCHEME_HTML, "http://web.site.com/",
-        "http://web.site.com/path/to/page.html", NULL, NULL, NULL, NULL,
-        L"anonymous", L"knock-knock", false, 0},
-       true},
-      // Test that Android credentials can be removed. Also check the legacy
-      // case when |origin| was still filled with the Android URI (and not left
-      // empty).
-      {{PasswordForm::SCHEME_HTML, "android://hash@com.example.alpha/", "",
-        NULL, NULL, NULL, NULL, L"joe_user", L"secret", false, 0},
-       true},
-      {{PasswordForm::SCHEME_HTML, "android://hash@com.example.beta/",
-        "android://hash@com.example.beta/", NULL, NULL, NULL, NULL,
-        L"jane_user", L"secret", false, 0},
-       true},
-      // Make sure we don't delete items we don't own.
-      {{PasswordForm::SCHEME_HTML, "http://some.domain.com/",
-        "http://some.domain.com/insecure.html", NULL, NULL, NULL, NULL,
-        L"joe_user", NULL, true, 0},
-       false},
-  };
-
-  MacKeychainPasswordFormAdapter owned_keychain_adapter(keychain_);
-  owned_keychain_adapter.SetFindsOnlyOwnedItems(true);
-
-  // Add our test items (except the last one) so that we can delete them.
-  for (unsigned int i = 0; i + 1 < arraysize(test_data); ++i) {
-    std::unique_ptr<PasswordForm> add_form =
-        CreatePasswordFormFromDataForTesting(test_data[i].data);
-    EXPECT_TRUE(owned_keychain_adapter.AddPassword(*add_form));
-  }
-
-  for (unsigned int i = 0; i < arraysize(test_data); ++i) {
-    std::unique_ptr<PasswordForm> form =
-        CreatePasswordFormFromDataForTesting(test_data[i].data);
-    EXPECT_EQ(test_data[i].should_succeed,
-              owned_keychain_adapter.RemovePassword(*form));
-
-    MacKeychainPasswordFormAdapter keychain_adapter(keychain_);
-    bool match = keychain_adapter.HasPasswordExactlyMatchingForm(*form);
-    EXPECT_EQ(test_data[i].should_succeed, !match);
-  }
-}
-
-TEST_F(PasswordStoreMacInternalsTest, TestFormMatch) {
-  PasswordForm base_form;
-  base_form.signon_realm = std::string("http://some.domain.com/");
-  base_form.origin = GURL("http://some.domain.com/page.html");
-  base_form.username_value = ASCIIToUTF16("joe_user");
-
-  {
-    // Check that everything unimportant can be changed.
-    PasswordForm different_form(base_form);
-    different_form.username_element = ASCIIToUTF16("username");
-    different_form.submit_element = ASCIIToUTF16("submit");
-    different_form.username_element = ASCIIToUTF16("password");
-    different_form.password_value = ASCIIToUTF16("sekrit");
-    different_form.action = GURL("http://some.domain.com/action.cgi");
-    different_form.preferred = true;
-    different_form.date_created = base::Time::Now();
-    EXPECT_TRUE(
-        FormsMatchForMerge(base_form, different_form, STRICT_FORM_MATCH));
-
-    // Check that path differences don't prevent a match.
-    base_form.origin = GURL("http://some.domain.com/other_page.html");
-    EXPECT_TRUE(
-        FormsMatchForMerge(base_form, different_form, STRICT_FORM_MATCH));
-  }
-
-  // Check that any one primary key changing is enough to prevent matching.
-  {
-    PasswordForm different_form(base_form);
-    different_form.scheme = PasswordForm::SCHEME_DIGEST;
-    EXPECT_FALSE(
-        FormsMatchForMerge(base_form, different_form, STRICT_FORM_MATCH));
-  }
-  {
-    PasswordForm different_form(base_form);
-    different_form.signon_realm = std::string("http://some.domain.com:8080/");
-    EXPECT_FALSE(
-        FormsMatchForMerge(base_form, different_form, STRICT_FORM_MATCH));
-  }
-  {
-    PasswordForm different_form(base_form);
-    different_form.username_value = ASCIIToUTF16("john.doe");
-    EXPECT_FALSE(
-        FormsMatchForMerge(base_form, different_form, STRICT_FORM_MATCH));
-  }
-  {
-    PasswordForm different_form(base_form);
-    different_form.blacklisted_by_user = true;
-    EXPECT_FALSE(
-        FormsMatchForMerge(base_form, different_form, STRICT_FORM_MATCH));
-  }
-
-  // Blacklist forms should *never* match for merging, even when identical
-  // (and certainly not when only one is a blacklist entry).
-  {
-    PasswordForm form_a(base_form);
-    form_a.blacklisted_by_user = true;
-    PasswordForm form_b(form_a);
-    EXPECT_FALSE(FormsMatchForMerge(form_a, form_b, STRICT_FORM_MATCH));
-  }
-
-  // Federated login forms should never match for merging either.
-  {
-    PasswordForm form_b(base_form);
-    form_b.federation_origin =
-        url::Origin(GURL(password_manager::kTestingFederationUrlSpec));
-    EXPECT_FALSE(FormsMatchForMerge(base_form, form_b, STRICT_FORM_MATCH));
-    EXPECT_FALSE(FormsMatchForMerge(form_b, base_form, STRICT_FORM_MATCH));
-    EXPECT_FALSE(FormsMatchForMerge(form_b, form_b, STRICT_FORM_MATCH));
-  }
-}
-
-TEST_F(PasswordStoreMacInternalsTest, TestFormMerge) {
-  // Set up a bunch of test data to use in varying combinations.
-  PasswordFormData keychain_user_1 = {PasswordForm::SCHEME_HTML,
-                                      "http://some.domain.com/",
-                                      "http://some.domain.com/",
-                                      "",
-                                      L"",
-                                      L"",
-                                      L"",
-                                      L"joe_user",
-                                      L"sekrit",
-                                      false,
-                                      1010101010};
-  PasswordFormData keychain_user_1_with_path = {
-      PasswordForm::SCHEME_HTML,
-      "http://some.domain.com/",
-      "http://some.domain.com/page.html",
-      "",
-      L"",
-      L"",
-      L"",
-      L"joe_user",
-      L"otherpassword",
-      false,
-      1010101010};
-  PasswordFormData keychain_user_2 = {PasswordForm::SCHEME_HTML,
-                                      "http://some.domain.com/",
-                                      "http://some.domain.com/",
-                                      "",
-                                      L"",
-                                      L"",
-                                      L"",
-                                      L"john.doe",
-                                      L"sesame",
-                                      false,
-                                      958739876};
-  PasswordFormData keychain_blacklist = {PasswordForm::SCHEME_HTML,
-                                         "http://some.domain.com/",
-                                         "http://some.domain.com/",
-                                         "",
-                                         L"",
-                                         L"",
-                                         L"",
-                                         NULL,
-                                         NULL,
-                                         false,
-                                         1010101010};
-  PasswordFormData keychain_android = {PasswordForm::SCHEME_HTML,
-                                       "android://hash@com.domain.some/",
-                                       "",
-                                       "",
-                                       L"",
-                                       L"",
-                                       L"",
-                                       L"joe_user",
-                                       L"secret",
-                                       false,
-                                       1234567890};
-
-  PasswordFormData db_user_1 = {PasswordForm::SCHEME_HTML,
-                                "http://some.domain.com/",
-                                "http://some.domain.com/",
-                                "http://some.domain.com/action.cgi",
-                                L"submit",
-                                L"username",
-                                L"password",
-                                L"joe_user",
-                                L"",
-                                true,
-                                1212121212};
-  PasswordFormData db_user_1_with_path = {
-      PasswordForm::SCHEME_HTML,
-      "http://some.domain.com/",
-      "http://some.domain.com/page.html",
-      "http://some.domain.com/handlepage.cgi",
-      L"submit",
-      L"username",
-      L"password",
-      L"joe_user",
-      L"",
-      true,
-      1234567890};
-  PasswordFormData db_user_3_with_path = {
-      PasswordForm::SCHEME_HTML,
-      "http://some.domain.com/",
-      "http://some.domain.com/page.html",
-      "http://some.domain.com/handlepage.cgi",
-      L"submit",
-      L"username",
-      L"password",
-      L"second-account",
-      L"",
-      true,
-      1240000000};
-  PasswordFormData database_blacklist_with_path = {
-      PasswordForm::SCHEME_HTML,
-      "http://some.domain.com/",
-      "http://some.domain.com/path.html",
-      "http://some.domain.com/action.cgi",
-      L"submit",
-      L"username",
-      L"password",
-      NULL,
-      NULL,
-      true,
-      1212121212};
-  PasswordFormData db_android = {PasswordForm::SCHEME_HTML,
-                                 "android://hash@com.domain.some/",
-                                 "android://hash@com.domain.some/",
-                                 "",
-                                 L"",
-                                 L"",
-                                 L"",
-                                 L"joe_user",
-                                 L"",
-                                 false,
-                                 1234567890};
-  PasswordFormData db_federated = {
-      PasswordForm::SCHEME_HTML,
-      "android://hash@com.domain.some/",
-      "android://hash@com.domain.some/",
-      "",
-      L"",
-      L"",
-      L"",
-      L"joe_user",
-      password_manager::kTestingFederatedLoginMarker,
-      false,
-      3434343434};
-
-  PasswordFormData merged_user_1 = {PasswordForm::SCHEME_HTML,
-                                    "http://some.domain.com/",
-                                    "http://some.domain.com/",
-                                    "http://some.domain.com/action.cgi",
-                                    L"submit",
-                                    L"username",
-                                    L"password",
-                                    L"joe_user",
-                                    L"sekrit",
-                                    true,
-                                    1212121212};
-  PasswordFormData merged_user_1_with_db_path = {
-      PasswordForm::SCHEME_HTML,
-      "http://some.domain.com/",
-      "http://some.domain.com/page.html",
-      "http://some.domain.com/handlepage.cgi",
-      L"submit",
-      L"username",
-      L"password",
-      L"joe_user",
-      L"sekrit",
-      true,
-      1234567890};
-  PasswordFormData merged_user_1_with_both_paths = {
-      PasswordForm::SCHEME_HTML,
-      "http://some.domain.com/",
-      "http://some.domain.com/page.html",
-      "http://some.domain.com/handlepage.cgi",
-      L"submit",
-      L"username",
-      L"password",
-      L"joe_user",
-      L"otherpassword",
-      true,
-      1234567890};
-  PasswordFormData merged_android = {PasswordForm::SCHEME_HTML,
-                                     "android://hash@com.domain.some/",
-                                     "android://hash@com.domain.some/",
-                                     "",
-                                     L"",
-                                     L"",
-                                     L"",
-                                     L"joe_user",
-                                     L"secret",
-                                     false,
-                                     1234567890};
-
-  // Build up the big multi-dimensional array of data sets that will actually
-  // drive the test. Use vectors rather than arrays so that initialization is
-  // simple.
-  enum {
-    KEYCHAIN_INPUT = 0,
-    DATABASE_INPUT,
-    MERGE_OUTPUT,
-    KEYCHAIN_OUTPUT,
-    DATABASE_OUTPUT,
-    MERGE_IO_ARRAY_COUNT  // termination marker
-  };
-  const unsigned int kTestCount = 5;
-  std::vector<std::vector<std::vector<PasswordFormData*>>> test_data(
-      MERGE_IO_ARRAY_COUNT, std::vector<std::vector<PasswordFormData*>>(
-                                kTestCount, std::vector<PasswordFormData*>()));
-  unsigned int current_test = 0;
-
-  // Test a merge with a few accounts in both systems, with partial overlap.
-  CHECK(current_test < kTestCount);
-  test_data[KEYCHAIN_INPUT][current_test].push_back(&keychain_user_1);
-  test_data[KEYCHAIN_INPUT][current_test].push_back(&keychain_user_2);
-  test_data[DATABASE_INPUT][current_test].push_back(&db_user_1);
-  test_data[DATABASE_INPUT][current_test].push_back(&db_user_1_with_path);
-  test_data[DATABASE_INPUT][current_test].push_back(&db_user_3_with_path);
-  test_data[MERGE_OUTPUT][current_test].push_back(&merged_user_1);
-  test_data[MERGE_OUTPUT][current_test].push_back(&merged_user_1_with_db_path);
-  test_data[KEYCHAIN_OUTPUT][current_test].push_back(&keychain_user_2);
-  test_data[DATABASE_OUTPUT][current_test].push_back(&db_user_3_with_path);
-
-  // Test a merge where Chrome has a blacklist entry, and the keychain has
-  // a stored account.
-  ++current_test;
-  CHECK(current_test < kTestCount);
-  test_data[KEYCHAIN_INPUT][current_test].push_back(&keychain_user_1);
-  test_data[DATABASE_INPUT][current_test].push_back(
-      &database_blacklist_with_path);
-  // We expect both to be present because a blacklist could be specific to a
-  // subpath, and we want access to the password on other paths.
-  test_data[MERGE_OUTPUT][current_test].push_back(
-      &database_blacklist_with_path);
-  test_data[KEYCHAIN_OUTPUT][current_test].push_back(&keychain_user_1);
-
-  // Test a merge where Chrome has an account, and Keychain has a blacklist
-  // (from another browser) and the Chrome password data.
-  ++current_test;
-  CHECK(current_test < kTestCount);
-  test_data[KEYCHAIN_INPUT][current_test].push_back(&keychain_blacklist);
-  test_data[KEYCHAIN_INPUT][current_test].push_back(&keychain_user_1);
-  test_data[DATABASE_INPUT][current_test].push_back(&db_user_1);
-  test_data[MERGE_OUTPUT][current_test].push_back(&merged_user_1);
-  test_data[KEYCHAIN_OUTPUT][current_test].push_back(&keychain_blacklist);
-
-  // Test that matches are done using exact path when possible.
-  ++current_test;
-  CHECK(current_test < kTestCount);
-  test_data[KEYCHAIN_INPUT][current_test].push_back(&keychain_user_1);
-  test_data[KEYCHAIN_INPUT][current_test].push_back(&keychain_user_1_with_path);
-  test_data[DATABASE_INPUT][current_test].push_back(&db_user_1);
-  test_data[DATABASE_INPUT][current_test].push_back(&db_user_1_with_path);
-  test_data[MERGE_OUTPUT][current_test].push_back(&merged_user_1);
-  test_data[MERGE_OUTPUT][current_test].push_back(
-      &merged_user_1_with_both_paths);
-
-  // Test that Android credentails are matched correctly and that federated
-  // credentials are not tried to be matched with a Keychain item.
-  ++current_test;
-  CHECK(current_test < kTestCount);
-  test_data[KEYCHAIN_INPUT][current_test].push_back(&keychain_android);
-  test_data[DATABASE_INPUT][current_test].push_back(&db_federated);
-  test_data[DATABASE_INPUT][current_test].push_back(&db_android);
-  test_data[MERGE_OUTPUT][current_test].push_back(&db_federated);
-  test_data[MERGE_OUTPUT][current_test].push_back(&merged_android);
-
-  for (unsigned int test_case = 0; test_case <= current_test; ++test_case) {
-    std::vector<std::unique_ptr<PasswordForm>> keychain_forms;
-    for (std::vector<PasswordFormData*>::iterator i =
-             test_data[KEYCHAIN_INPUT][test_case].begin();
-         i != test_data[KEYCHAIN_INPUT][test_case].end(); ++i) {
-      keychain_forms.push_back(CreatePasswordFormFromDataForTesting(*(*i)));
-    }
-    std::vector<std::unique_ptr<PasswordForm>> database_forms;
-    for (std::vector<PasswordFormData*>::iterator i =
-             test_data[DATABASE_INPUT][test_case].begin();
-         i != test_data[DATABASE_INPUT][test_case].end(); ++i) {
-      database_forms.push_back(CreatePasswordFormFromDataForTesting(*(*i)));
-    }
-
-    std::vector<std::unique_ptr<PasswordForm>> merged_forms;
-    internal_keychain_helpers::MergePasswordForms(
-        &keychain_forms, &database_forms, &merged_forms);
-
-    CHECK_FORMS(keychain_forms, test_data[KEYCHAIN_OUTPUT][test_case],
-                test_case);
-    CHECK_FORMS(database_forms, test_data[DATABASE_OUTPUT][test_case],
-                test_case);
-    CHECK_FORMS(merged_forms, test_data[MERGE_OUTPUT][test_case], test_case);
-  }
-}
-
-TEST_F(PasswordStoreMacInternalsTest, TestPasswordBulkLookup) {
-  PasswordFormData db_data[] = {
-      {PasswordForm::SCHEME_HTML, "http://some.domain.com/",
-       "http://some.domain.com/", "http://some.domain.com/action.cgi",
-       L"submit", L"username", L"password", L"joe_user", L"", true, 1212121212},
-      {PasswordForm::SCHEME_HTML, "http://some.domain.com/",
-       "http://some.domain.com/page.html",
-       "http://some.domain.com/handlepage.cgi", L"submit", L"username",
-       L"password", L"joe_user", L"", true, 1234567890},
-      {PasswordForm::SCHEME_HTML, "http://some.domain.com/",
-       "http://some.domain.com/page.html",
-       "http://some.domain.com/handlepage.cgi", L"submit", L"username",
-       L"password", L"second-account", L"", true, 1240000000},
-      {PasswordForm::SCHEME_HTML, "http://dont.remember.com/",
-       "http://dont.remember.com/", "http://dont.remember.com/handlepage.cgi",
-       L"submit", L"username", L"password", L"joe_user", L"", true, 1240000000},
-      {PasswordForm::SCHEME_HTML, "http://some.domain.com/",
-       "http://some.domain.com/path.html", "http://some.domain.com/action.cgi",
-       L"submit", L"username", L"password", NULL, NULL, true, 1212121212},
-  };
-  std::vector<std::unique_ptr<PasswordForm>> database_forms;
-  for (const PasswordFormData& form_data : db_data) {
-    database_forms.push_back(CreatePasswordFormFromDataForTesting(form_data));
-  }
-  std::vector<std::unique_ptr<PasswordForm>> merged_forms;
-  internal_keychain_helpers::GetPasswordsForForms(*keychain_, &database_forms,
-                                                  &merged_forms);
-  EXPECT_EQ(2U, database_forms.size());
-  ASSERT_EQ(3U, merged_forms.size());
-  EXPECT_EQ(ASCIIToUTF16("sekrit"), merged_forms[0]->password_value);
-  EXPECT_EQ(ASCIIToUTF16("sekrit"), merged_forms[1]->password_value);
-  EXPECT_TRUE(merged_forms[2]->blacklisted_by_user);
-}
-
-TEST_F(PasswordStoreMacInternalsTest, TestBlacklistedFiltering) {
-  PasswordFormData db_data[] = {
-      {PasswordForm::SCHEME_HTML, "http://dont.remember.com/",
-       "http://dont.remember.com/", "http://dont.remember.com/handlepage.cgi",
-       L"submit", L"username", L"password", L"joe_user", L"non_empty_password",
-       true, 1240000000},
-      {PasswordForm::SCHEME_HTML, "https://dont.remember.com/",
-       "https://dont.remember.com/",
-       "https://dont.remember.com/handlepage_secure.cgi", L"submit",
-       L"username", L"password", L"joe_user", L"non_empty_password", true,
-       1240000000},
-  };
-  std::vector<std::unique_ptr<PasswordForm>> database_forms;
-  for (const PasswordFormData& form_data : db_data) {
-    database_forms.push_back(CreatePasswordFormFromDataForTesting(form_data));
-  }
-  std::vector<std::unique_ptr<PasswordForm>> merged_forms;
-  internal_keychain_helpers::GetPasswordsForForms(*keychain_, &database_forms,
-                                                  &merged_forms);
-  EXPECT_EQ(2U, database_forms.size());
-  ASSERT_EQ(0U, merged_forms.size());
-}
-
-TEST_F(PasswordStoreMacInternalsTest, TestFillPasswordFormFromKeychainItem) {
-  // When |extract_password_data| is false, the password field must be empty,
-  // and |blacklisted_by_user| must be false.
-  SecKeychainItemRef keychain_item = reinterpret_cast<SecKeychainItemRef>(1);
-  PasswordForm form_without_extracted_password;
-  bool parsed = internal_keychain_helpers::FillPasswordFormFromKeychainItem(
-      *keychain_, keychain_item, &form_without_extracted_password,
-      false);  // Do not extract password.
-  EXPECT_TRUE(parsed);
-  ASSERT_TRUE(form_without_extracted_password.password_value.empty());
-  ASSERT_FALSE(form_without_extracted_password.blacklisted_by_user);
-
-  // When |extract_password_data| is true and the keychain entry has a non-empty
-  // password, the password field must be non-empty, and the value of
-  // |blacklisted_by_user| must be false.
-  keychain_item = reinterpret_cast<SecKeychainItemRef>(1);
-  PasswordForm form_with_extracted_password;
-  parsed = internal_keychain_helpers::FillPasswordFormFromKeychainItem(
-      *keychain_, keychain_item, &form_with_extracted_password,
-      true);  // Extract password.
-  EXPECT_TRUE(parsed);
-  ASSERT_EQ(ASCIIToUTF16("sekrit"),
-            form_with_extracted_password.password_value);
-  ASSERT_FALSE(form_with_extracted_password.blacklisted_by_user);
-
-  // When |extract_password_data| is true and the keychain entry has an empty
-  // username and password (""), the password field must be empty, and the value
-  // of |blacklisted_by_user| must be true.
-  keychain_item = reinterpret_cast<SecKeychainItemRef>(4);
-  PasswordForm negative_form;
-  parsed = internal_keychain_helpers::FillPasswordFormFromKeychainItem(
-      *keychain_, keychain_item, &negative_form,
-      true);  // Extract password.
-  EXPECT_TRUE(parsed);
-  ASSERT_TRUE(negative_form.username_value.empty());
-  ASSERT_TRUE(negative_form.password_value.empty());
-  ASSERT_TRUE(negative_form.blacklisted_by_user);
-
-  // When |extract_password_data| is true and the keychain entry has an empty
-  // password (""), the password field must be empty (""), and the value of
-  // |blacklisted_by_user| must be true.
-  keychain_item = reinterpret_cast<SecKeychainItemRef>(5);
-  PasswordForm form_with_empty_password_a;
-  parsed = internal_keychain_helpers::FillPasswordFormFromKeychainItem(
-      *keychain_, keychain_item, &form_with_empty_password_a,
-      true);  // Extract password.
-  EXPECT_TRUE(parsed);
-  ASSERT_TRUE(form_with_empty_password_a.password_value.empty());
-  ASSERT_TRUE(form_with_empty_password_a.blacklisted_by_user);
-
-  // When |extract_password_data| is true and the keychain entry has a single
-  // space password (" "), the password field must be a single space (" "), and
-  // the value of |blacklisted_by_user| must be true.
-  keychain_item = reinterpret_cast<SecKeychainItemRef>(6);
-  PasswordForm form_with_empty_password_b;
-  parsed = internal_keychain_helpers::FillPasswordFormFromKeychainItem(
-      *keychain_, keychain_item, &form_with_empty_password_b,
-      true);  // Extract password.
-  EXPECT_TRUE(parsed);
-  ASSERT_EQ(ASCIIToUTF16(" "), form_with_empty_password_b.password_value);
-  ASSERT_TRUE(form_with_empty_password_b.blacklisted_by_user);
-}
-
-TEST_F(PasswordStoreMacInternalsTest, TestPasswordGetAll) {
-  MacKeychainPasswordFormAdapter keychain_adapter(keychain_);
-  MacKeychainPasswordFormAdapter owned_keychain_adapter(keychain_);
-  owned_keychain_adapter.SetFindsOnlyOwnedItems(true);
-
-  // Add a few passwords of various types so that we own some.
-  PasswordFormData owned_password_data[] = {
-      {PasswordForm::SCHEME_HTML, "http://web.site.com/",
-       "http://web.site.com/path/to/page.html", NULL, NULL, NULL, NULL,
-       L"anonymous", L"knock-knock", false, 0},
-      {PasswordForm::SCHEME_BASIC, "http://a.site.com:2222/therealm",
-       "http://a.site.com:2222/", NULL, NULL, NULL, NULL, L"username",
-       L"password", false, 0},
-      {PasswordForm::SCHEME_DIGEST, "https://digest.site.com/differentrealm",
-       "https://digest.site.com/secure.html", NULL, NULL, NULL, NULL,
-       L"testname", L"testpass", false, 0},
-  };
-  for (unsigned int i = 0; i < arraysize(owned_password_data); ++i) {
-    std::unique_ptr<PasswordForm> form =
-        CreatePasswordFormFromDataForTesting(owned_password_data[i]);
-    owned_keychain_adapter.AddPassword(*form);
-  }
-
-  std::vector<std::unique_ptr<PasswordForm>> all_passwords =
-      keychain_adapter.GetAllPasswordFormPasswords();
-  EXPECT_EQ(9 + arraysize(owned_password_data), all_passwords.size());
-
-  std::vector<std::unique_ptr<PasswordForm>> owned_passwords =
-      owned_keychain_adapter.GetAllPasswordFormPasswords();
-  EXPECT_EQ(arraysize(owned_password_data), owned_passwords.size());
-}
-
-#pragma mark -
-
-class PasswordStoreMacTest : public testing::Test {
- public:
-  PasswordStoreMacTest() = default;
-
-  void SetUp() override {
-    ASSERT_TRUE(db_dir_.CreateUniqueTempDir());
-    histogram_tester_.reset(new base::HistogramTester);
-
-    // Ensure that LoginDatabase will use the mock keychain if it needs to
-    // encrypt/decrypt a password.
-    OSCryptMocker::SetUpWithSingleton();
-    login_db_.reset(
-        new password_manager::LoginDatabase(test_login_db_file_path()));
-    thread_.reset(new base::Thread("Chrome_PasswordStore_Thread"));
-    ASSERT_TRUE(thread_->Start());
-    ASSERT_TRUE(thread_->task_runner()->PostTask(
-        FROM_HERE, base::Bind(&PasswordStoreMacTest::InitLoginDatabase,
-                              base::Unretained(login_db_.get()))));
-    CreateAndInitPasswordStore(login_db_.get());
-    // Make sure deferred initialization is performed before some tests start
-    // accessing the |login_db| directly.
-    FinishAsyncProcessing();
-  }
-
-  void TearDown() override {
-    ClosePasswordStore();
-    thread_.reset();
-    login_db_.reset();
-    // Whatever a test did, PasswordStoreMac stores only empty password values
-    // in LoginDatabase. The empty valus do not require encryption and therefore
-    // OSCrypt shouldn't call the Keychain. The histogram doesn't cover the
-    // internet passwords.
-    if (histogram_tester_) {
-      histogram_tester_->ExpectTotalCount("OSX.Keychain.Access", 0);
-    }
-    OSCryptMocker::TearDown();
-  }
-
-  static void InitLoginDatabase(password_manager::LoginDatabase* login_db) {
-    ASSERT_TRUE(login_db->Init());
-  }
-
-  void CreateAndInitPasswordStore(password_manager::LoginDatabase* login_db) {
-    store_ = new PasswordStoreMac(
-        base::ThreadTaskRunnerHandle::Get(), nullptr,
-        base::WrapUnique<AppleKeychain>(new MockAppleKeychain));
-    ASSERT_TRUE(thread_->task_runner()->PostTask(
-        FROM_HERE, base::Bind(&PasswordStoreMac::InitWithTaskRunner, store_,
-                              thread_->task_runner())));
-
-    ASSERT_TRUE(thread_->task_runner()->PostTask(
-        FROM_HERE, base::Bind(&PasswordStoreMac::set_login_metadata_db, store_,
-                              base::Unretained(login_db))));
-  }
-
-  void ClosePasswordStore() {
-    if (!store_)
-      return;
-
-    store_->ShutdownOnUIThread();
-    store_ = nullptr;
-  }
-
-  // Verifies that the given |form| can be properly stored so that it can be
-  // retrieved by FillMatchingLogins() and GetAutofillableLogins(), and then it
-  // can be properly removed.
-  void VerifyCredentialLifecycle(const PasswordForm& form) {
-    // Run everything twice to make sure no garbage is left behind that would
-    // prevent storing the form a second time.
-    for (size_t iteration = 0; iteration < 2; ++iteration) {
-      SCOPED_TRACE(testing::Message("Iteration: ") << iteration);
-
-      MockPasswordStoreConsumer mock_consumer;
-      EXPECT_CALL(mock_consumer, OnGetPasswordStoreResultsConstRef(IsEmpty()))
-          .WillOnce(QuitUIMessageLoop());
-      store()->GetAutofillableLogins(&mock_consumer);
-      base::RunLoop().Run();
-      ::testing::Mock::VerifyAndClearExpectations(&mock_consumer);
-
-      store()->AddLogin(form);
-      FinishAsyncProcessing();
-
-      PasswordForm returned_form;
-      EXPECT_CALL(mock_consumer, OnGetPasswordStoreResultsConstRef(SizeIs(1u)))
-          .WillOnce(
-              DoAll(SaveACopyOfFirstForm(&returned_form), QuitUIMessageLoop()));
-
-      // The query operations will also do some housekeeping: they will remove
-      // dangling credentials in the LoginDatabase without a matching Keychain
-      // item when one is expected. If the logic that stores the Keychain item
-      // is incorrect, this will wipe the newly added form before the second
-      // query.
-      store()->GetAutofillableLogins(&mock_consumer);
-      base::RunLoop().Run();
-      ::testing::Mock::VerifyAndClearExpectations(&mock_consumer);
-      EXPECT_EQ(form, returned_form);
-
-      PasswordStore::FormDigest query_form(form);
-      EXPECT_CALL(mock_consumer, OnGetPasswordStoreResultsConstRef(SizeIs(1u)))
-          .WillOnce(
-              DoAll(SaveACopyOfFirstForm(&returned_form), QuitUIMessageLoop()));
-      store()->GetLogins(query_form, &mock_consumer);
-      base::RunLoop().Run();
-      ::testing::Mock::VerifyAndClearExpectations(&mock_consumer);
-      EXPECT_EQ(form, returned_form);
-
-      store()->RemoveLogin(form);
-    }
-  }
-
-  base::FilePath test_login_db_file_path() const {
-    return db_dir_.GetPath().Append(FILE_PATH_LITERAL("login.db"));
-  }
-
-  password_manager::LoginDatabase* login_db() const {
-    return store_->login_metadata_db();
-  }
-
-  MockAppleKeychain* keychain() {
-    return static_cast<MockAppleKeychain*>(store_->keychain());
-  }
-
-  void FinishAsyncProcessing() {
-    scoped_refptr<content::MessageLoopRunner> runner =
-        new content::MessageLoopRunner;
-    ASSERT_TRUE(thread_->task_runner()->PostTaskAndReply(
-        FROM_HERE, base::Bind(&Noop), runner->QuitClosure()));
-    runner->Run();
-  }
-
-  PasswordStoreMac* store() { return store_.get(); }
-
- protected:
-  content::TestBrowserThreadBundle test_browser_thread_bundle_;
-  // Thread that the synchronous methods are run on.
-  std::unique_ptr<base::Thread> thread_;
-
-  base::ScopedTempDir db_dir_;
-  std::unique_ptr<password_manager::LoginDatabase> login_db_;
-  scoped_refptr<PasswordStoreMac> store_;
-  std::unique_ptr<base::HistogramTester> histogram_tester_;
-};
-
-TEST_F(PasswordStoreMacTest, TestStoreUpdate) {
-  // Insert a password into both the database and the keychain.
-  // This is done manually, rather than through store_->AddLogin, because the
-  // Mock Keychain isn't smart enough to be able to support update generically,
-  // so some.domain.com triggers special handling to test it that make inserting
-  // fail.
-  PasswordFormData joint_data = {PasswordForm::SCHEME_HTML,
-                                 "http://some.domain.com/",
-                                 "http://some.domain.com/insecure.html",
-                                 "login.cgi",
-                                 L"username",
-                                 L"password",
-                                 L"submit",
-                                 L"joe_user",
-                                 L"sekrit",
-                                 true,
-                                 1};
-  std::unique_ptr<PasswordForm> joint_form =
-      CreatePasswordFormFromDataForTesting(joint_data);
-  EXPECT_EQ(AddChangeForForm(*joint_form), login_db()->AddLogin(*joint_form));
-  MockAppleKeychain::KeychainTestData joint_keychain_data = {
-      kSecAuthenticationTypeHTMLForm,
-      "some.domain.com",
-      kSecProtocolTypeHTTP,
-      "/insecure.html",
-      0,
-      NULL,
-      "20020601171500Z",
-      "joe_user",
-      "sekrit",
-      false};
-  keychain()->AddTestItem(joint_keychain_data);
-
-  // Insert a password into the keychain only.
-  MockAppleKeychain::KeychainTestData keychain_only_data = {
-      kSecAuthenticationTypeHTMLForm,
-      "keychain.only.com",
-      kSecProtocolTypeHTTP,
-      NULL,
-      0,
-      NULL,
-      "20020601171500Z",
-      "keychain",
-      "only",
-      false};
-  keychain()->AddTestItem(keychain_only_data);
-
-  struct UpdateData {
-    PasswordFormData form_data;
-    const char* password;  // NULL indicates no entry should be present.
-  };
-
-  // Make a series of update calls.
-  UpdateData updates[] = {
-      // Update the keychain+db passwords (the normal password update case).
-      {
-          {PasswordForm::SCHEME_HTML, "http://some.domain.com/",
-           "http://some.domain.com/insecure.html", "login.cgi", L"username",
-           L"password", L"submit", L"joe_user", L"53krit", true, 2},
-          "53krit",
-      },
-      // Update the keychain-only password; this simulates the initial use of a
-      // password stored by another browsers.
-      {
-          {PasswordForm::SCHEME_HTML, "http://keychain.only.com/",
-           "http://keychain.only.com/login.html", "login.cgi", L"username",
-           L"password", L"submit", L"keychain", L"only", true, 2},
-          "only",
-      },
-      // Update a password that doesn't exist in either location. This tests the
-      // case where a form is filled, then the stored login is removed, then the
-      // form is submitted.
-      {
-          {PasswordForm::SCHEME_HTML, "http://different.com/",
-           "http://different.com/index.html", "login.cgi", L"username",
-           L"password", L"submit", L"abc", L"123", true, 2},
-          NULL,
-      },
-  };
-  for (unsigned int i = 0; i < arraysize(updates); ++i) {
-    std::unique_ptr<PasswordForm> form =
-        CreatePasswordFormFromDataForTesting(updates[i].form_data);
-    store_->UpdateLogin(*form);
-  }
-
-  FinishAsyncProcessing();
-
-  MacKeychainPasswordFormAdapter keychain_adapter(keychain());
-  for (unsigned int i = 0; i < arraysize(updates); ++i) {
-    SCOPED_TRACE(testing::Message("iteration ") << i);
-    std::unique_ptr<PasswordForm> query_form =
-        CreatePasswordFormFromDataForTesting(updates[i].form_data);
-
-    std::vector<std::unique_ptr<PasswordForm>> matching_items =
-        keychain_adapter.PasswordsFillingForm(query_form->signon_realm,
-                                              query_form->scheme);
-    if (updates[i].password) {
-      EXPECT_GT(matching_items.size(), 0U);
-      if (matching_items.size() >= 1)
-        EXPECT_EQ(ASCIIToUTF16(updates[i].password),
-                  matching_items[0]->password_value);
-    } else {
-      EXPECT_EQ(0U, matching_items.size());
-    }
-
-    std::vector<std::unique_ptr<PasswordForm>> matching_db_items;
-    EXPECT_TRUE(login_db()->GetLogins(PasswordStore::FormDigest(*query_form),
-                                      &matching_db_items));
-    EXPECT_EQ(updates[i].password ? 1U : 0U, matching_db_items.size());
-  }
-}
-
-TEST_F(PasswordStoreMacTest, TestDBKeychainAssociation) {
-  // Tests that association between the keychain and login database parts of a
-  // password added by fuzzy (PSL) matching works.
-  // 1. Add a password for www.facebook.com
-  // 2. Get a password for m.facebook.com. This fuzzy matches and returns the
-  //    www.facebook.com password.
-  // 3. Add the returned password for m.facebook.com.
-  // 4. Remove both passwords.
-  //    -> check: that both are gone from the login DB and the keychain
-  // This test should in particular ensure that we don't keep passwords in the
-  // keychain just before we think we still have other (fuzzy-)matching entries
-  // for them in the login database. (For example, here if we deleted the
-  // www.facebook.com password from the login database, we should not be blocked
-  // from deleting it from the keystore just becaus the m.facebook.com password
-  // fuzzy-matches the www.facebook.com one.)
-
-  // 1. Add a password for www.facebook.com
-  PasswordFormData www_form_data = {PasswordForm::SCHEME_HTML,
-                                    "http://www.facebook.com/",
-                                    "http://www.facebook.com/index.html",
-                                    "login",
-                                    L"username",
-                                    L"password",
-                                    L"submit",
-                                    L"joe_user",
-                                    L"sekrit",
-                                    true,
-                                    1};
-  std::unique_ptr<PasswordForm> www_form =
-      CreatePasswordFormFromDataForTesting(www_form_data);
-  EXPECT_EQ(AddChangeForForm(*www_form), login_db()->AddLogin(*www_form));
-  MacKeychainPasswordFormAdapter owned_keychain_adapter(keychain());
-  owned_keychain_adapter.SetFindsOnlyOwnedItems(true);
-  owned_keychain_adapter.AddPassword(*www_form);
-
-  // 2. Get a password for m.facebook.com.
-  PasswordForm m_form(*www_form);
-  m_form.signon_realm = "http://m.facebook.com";
-  m_form.origin = GURL("http://m.facebook.com/index.html");
-
-  MockPasswordStoreConsumer consumer;
-  store_->GetLogins(PasswordStore::FormDigest(m_form), &consumer);
-  PasswordForm returned_form;
-  EXPECT_CALL(consumer, OnGetPasswordStoreResultsConstRef(SizeIs(1u)))
-      .WillOnce(
-          DoAll(SaveACopyOfFirstForm(&returned_form), QuitUIMessageLoop()));
-  base::RunLoop().Run();
-
-  // 3. Add the returned password for m.facebook.com.
-  returned_form.signon_realm = "http://m.facebook.com";
-  returned_form.origin = GURL("http://m.facebook.com/index.html");
-  EXPECT_EQ(AddChangeForForm(returned_form),
-            login_db()->AddLogin(returned_form));
-  owned_keychain_adapter.AddPassword(m_form);
-
-  // 4. Remove both passwords.
-  store_->RemoveLogin(*www_form);
-  store_->RemoveLogin(m_form);
-  FinishAsyncProcessing();
-
-  // No trace of www.facebook.com.
-  std::vector<std::unique_ptr<PasswordForm>> matching_items =
-      owned_keychain_adapter.PasswordsFillingForm(www_form->signon_realm,
-                                                  www_form->scheme);
-  EXPECT_EQ(0u, matching_items.size());
-
-  std::vector<std::unique_ptr<PasswordForm>> matching_db_items;
-  EXPECT_TRUE(login_db()->GetLogins(PasswordStore::FormDigest(*www_form),
-                                    &matching_db_items));
-  EXPECT_EQ(0u, matching_db_items.size());
-
-  // No trace of m.facebook.com.
-  matching_items = owned_keychain_adapter.PasswordsFillingForm(
-      m_form.signon_realm, m_form.scheme);
-  EXPECT_EQ(0u, matching_items.size());
-
-  EXPECT_TRUE(login_db()->GetLogins(PasswordStore::FormDigest(m_form),
-                                    &matching_db_items));
-  EXPECT_EQ(0u, matching_db_items.size());
-}
-
-namespace {
-
-class PasswordsChangeObserver
-    : public password_manager::PasswordStore::Observer {
- public:
-  explicit PasswordsChangeObserver(PasswordStoreMac* store) : observer_(this) {
-    observer_.Add(store);
-  }
-
-  void WaitAndVerify(PasswordStoreMacTest* test) {
-    test->FinishAsyncProcessing();
-    ::testing::Mock::VerifyAndClearExpectations(this);
-  }
-
-  // password_manager::PasswordStore::Observer:
-  MOCK_METHOD1(OnLoginsChanged,
-               void(const password_manager::PasswordStoreChangeList& changes));
-
- private:
-  ScopedObserver<password_manager::PasswordStore, PasswordsChangeObserver>
-      observer_;
-};
-
-password_manager::PasswordStoreChangeList GetAddChangeList(
-    const PasswordForm& form) {
-  password_manager::PasswordStoreChange change(
-      password_manager::PasswordStoreChange::ADD, form);
-  return password_manager::PasswordStoreChangeList(1, change);
-}
-
-// Tests RemoveLoginsCreatedBetween or RemoveLoginsSyncedBetween depending on
-// |check_created|.
-void CheckRemoveLoginsBetween(PasswordStoreMacTest* test, bool check_created) {
-  PasswordFormData www_form_data_facebook = {
-      PasswordForm::SCHEME_HTML,
-      "http://www.facebook.com/",
-      "http://www.facebook.com/index.html",
-      "login",
-      L"submit",
-      L"username",
-      L"password",
-      L"joe_user",
-      L"sekrit",
-      true,
-      0};
-  // The old form doesn't have elements names.
-  PasswordFormData www_form_data_facebook_old = {
-      PasswordForm::SCHEME_HTML,
-      "http://www.facebook.com/",
-      "http://www.facebook.com/index.html",
-      "login",
-      L"",
-      L"",
-      L"",
-      L"joe_user",
-      L"oldsekrit",
-      true,
-      0};
-  PasswordFormData www_form_data_other = {PasswordForm::SCHEME_HTML,
-                                          "http://different.com/",
-                                          "http://different.com/index.html",
-                                          "login",
-                                          L"submit",
-                                          L"username",
-                                          L"password",
-                                          L"different_joe_user",
-                                          L"sekrit",
-                                          true,
-                                          0};
-  std::unique_ptr<PasswordForm> form_facebook =
-      CreatePasswordFormFromDataForTesting(www_form_data_facebook);
-  std::unique_ptr<PasswordForm> form_facebook_old =
-      CreatePasswordFormFromDataForTesting(www_form_data_facebook_old);
-  std::unique_ptr<PasswordForm> form_other =
-      CreatePasswordFormFromDataForTesting(www_form_data_other);
-  base::Time now = base::Time::Now();
-  base::Time next_day = now + base::TimeDelta::FromDays(1);
-  if (check_created) {
-    form_facebook_old->date_created = now;
-    form_facebook->date_created = next_day;
-    form_other->date_created = next_day;
-  } else {
-    form_facebook_old->date_synced = now;
-    form_facebook->date_synced = next_day;
-    form_other->date_synced = next_day;
-  }
-
-  PasswordsChangeObserver observer(test->store());
-  test->store()->AddLogin(*form_facebook_old);
-  test->store()->AddLogin(*form_facebook);
-  test->store()->AddLogin(*form_other);
-  EXPECT_CALL(observer, OnLoginsChanged(GetAddChangeList(*form_facebook_old)));
-  EXPECT_CALL(observer, OnLoginsChanged(GetAddChangeList(*form_facebook)));
-  EXPECT_CALL(observer, OnLoginsChanged(GetAddChangeList(*form_other)));
-  observer.WaitAndVerify(test);
-
-  // Check the keychain content.
-  MacKeychainPasswordFormAdapter owned_keychain_adapter(test->keychain());
-  owned_keychain_adapter.SetFindsOnlyOwnedItems(false);
-  std::vector<std::unique_ptr<PasswordForm>> matching_items(
-      owned_keychain_adapter.PasswordsFillingForm(form_facebook->signon_realm,
-                                                  form_facebook->scheme));
-  EXPECT_EQ(1u, matching_items.size());
-  matching_items = owned_keychain_adapter.PasswordsFillingForm(
-      form_other->signon_realm, form_other->scheme);
-  EXPECT_EQ(1u, matching_items.size());
-
-  // Remove facebook.
-  if (check_created) {
-    test->store()->RemoveLoginsCreatedBetween(base::Time(), next_day,
-                                              base::Closure());
-  } else {
-    test->store()->RemoveLoginsSyncedBetween(base::Time(), next_day);
-  }
-  password_manager::PasswordStoreChangeList list;
-  form_facebook_old->password_value.clear();
-  form_facebook->password_value.clear();
-  list.push_back(password_manager::PasswordStoreChange(
-      password_manager::PasswordStoreChange::REMOVE, *form_facebook_old));
-  list.push_back(password_manager::PasswordStoreChange(
-      password_manager::PasswordStoreChange::REMOVE, *form_facebook));
-  EXPECT_CALL(observer, OnLoginsChanged(list));
-  list.clear();
-  observer.WaitAndVerify(test);
-
-  matching_items = owned_keychain_adapter.PasswordsFillingForm(
-      form_facebook->signon_realm, form_facebook->scheme);
-  EXPECT_EQ(0u, matching_items.size());
-  matching_items = owned_keychain_adapter.PasswordsFillingForm(
-      form_other->signon_realm, form_other->scheme);
-  EXPECT_EQ(1u, matching_items.size());
-
-  // Remove form_other.
-  if (check_created) {
-    test->store()->RemoveLoginsCreatedBetween(next_day, base::Time(),
-                                              base::Closure());
-  } else {
-    test->store()->RemoveLoginsSyncedBetween(next_day, base::Time());
-  }
-  form_other->password_value.clear();
-  list.push_back(password_manager::PasswordStoreChange(
-      password_manager::PasswordStoreChange::REMOVE, *form_other));
-  EXPECT_CALL(observer, OnLoginsChanged(list));
-  observer.WaitAndVerify(test);
-  matching_items = owned_keychain_adapter.PasswordsFillingForm(
-      form_other->signon_realm, form_other->scheme);
-  EXPECT_EQ(0u, matching_items.size());
-}
-
-}  // namespace
-
-TEST_F(PasswordStoreMacTest, TestRemoveLoginsCreatedBetween) {
-  CheckRemoveLoginsBetween(this, true);
-}
-
-TEST_F(PasswordStoreMacTest, TestRemoveLoginsSyncedBetween) {
-  CheckRemoveLoginsBetween(this, false);
-}
-
-TEST_F(PasswordStoreMacTest, TestDisableAutoSignInForOrigins) {
-  PasswordFormData www_form_data_facebook = {
-      PasswordForm::SCHEME_HTML,
-      "http://www.facebook.com/",
-      "http://www.facebook.com/index.html",
-      "login",
-      L"submit",
-      L"username",
-      L"password",
-      L"joe_user",
-      L"sekrit",
-      true,
-      0};
-  std::unique_ptr<PasswordForm> form_facebook =
-      CreatePasswordFormFromDataForTesting(www_form_data_facebook);
-  form_facebook->skip_zero_click = false;
-
-  PasswordFormData www_form_data_google = {
-      PasswordForm::SCHEME_HTML,
-      "http://www.google.com/",
-      "http://www.google.com/foo/bar/index.html",
-      "login",
-      L"submit",
-      L"username",
-      L"password",
-      L"joe_user",
-      L"sekrit",
-      true,
-      0};
-  std::unique_ptr<PasswordForm> form_google =
-      CreatePasswordFormFromDataForTesting(www_form_data_google);
-  form_google->skip_zero_click = false;
-
-  // Add the zero-clickable forms to the database.
-  PasswordsChangeObserver observer(store());
-  store()->AddLogin(*form_facebook);
-  store()->AddLogin(*form_google);
-  EXPECT_CALL(observer, OnLoginsChanged(GetAddChangeList(*form_facebook)));
-  EXPECT_CALL(observer, OnLoginsChanged(GetAddChangeList(*form_google)));
-  observer.WaitAndVerify(this);
-
-  std::vector<std::unique_ptr<PasswordForm>> forms;
-  EXPECT_TRUE(login_db()->GetAutoSignInLogins(&forms));
-  EXPECT_EQ(2u, forms.size());
-  EXPECT_FALSE(forms[0]->skip_zero_click);
-  EXPECT_FALSE(forms[1]->skip_zero_click);
-
-  store()->DisableAutoSignInForOrigins(
-      base::Bind(static_cast<bool (*)(const GURL&, const GURL&)>(operator==),
-                 form_google->origin),
-      base::Closure());
-  FinishAsyncProcessing();
-
-  EXPECT_TRUE(login_db()->GetAutoSignInLogins(&forms));
-  EXPECT_EQ(1u, forms.size());
-  EXPECT_EQ(form_facebook->origin, forms[0]->origin);
-}
-
-TEST_F(PasswordStoreMacTest, TestRemoveLoginsMultiProfile) {
-  // Make sure that RemoveLoginsCreatedBetween does affect only the correct
-  // profile.
-
-  // Add a third-party password.
-  MockAppleKeychain::KeychainTestData keychain_data = {
-      kSecAuthenticationTypeHTMLForm,
-      "some.domain.com",
-      kSecProtocolTypeHTTP,
-      "/insecure.html",
-      0,
-      NULL,
-      "20020601171500Z",
-      "joe_user",
-      "sekrit",
-      false};
-  keychain()->AddTestItem(keychain_data);
-
-  // Add a password through the adapter. It has the "Chrome" creator tag.
-  // However, it's not referenced by the password database.
-  MacKeychainPasswordFormAdapter owned_keychain_adapter(keychain());
-  owned_keychain_adapter.SetFindsOnlyOwnedItems(true);
-  PasswordFormData www_form_data1 = {PasswordForm::SCHEME_HTML,
-                                     "http://www.facebook.com/",
-                                     "http://www.facebook.com/index.html",
-                                     "login",
-                                     L"username",
-                                     L"password",
-                                     L"submit",
-                                     L"joe_user",
-                                     L"sekrit",
-                                     true,
-                                     1};
-  std::unique_ptr<PasswordForm> www_form =
-      CreatePasswordFormFromDataForTesting(www_form_data1);
-  EXPECT_TRUE(owned_keychain_adapter.AddPassword(*www_form));
-
-  // Add a password from the current profile.
-  PasswordFormData www_form_data2 = {PasswordForm::SCHEME_HTML,
-                                     "http://www.facebook.com/",
-                                     "http://www.facebook.com/index.html",
-                                     "login",
-                                     L"username",
-                                     L"password",
-                                     L"submit",
-                                     L"not_joe_user",
-                                     L"12345",
-                                     true,
-                                     1};
-  www_form = CreatePasswordFormFromDataForTesting(www_form_data2);
-  store_->AddLogin(*www_form);
-  FinishAsyncProcessing();
-
-  std::vector<std::unique_ptr<PasswordForm>> matching_items;
-  EXPECT_TRUE(login_db()->GetLogins(PasswordStore::FormDigest(*www_form),
-                                    &matching_items));
-  EXPECT_EQ(1u, matching_items.size());
-
-  store_->RemoveLoginsCreatedBetween(base::Time(), base::Time(),
-                                     base::Closure());
-  FinishAsyncProcessing();
-
-  // Check the second facebook form is gone.
-  EXPECT_TRUE(login_db()->GetLogins(PasswordStore::FormDigest(*www_form),
-                                    &matching_items));
-  EXPECT_EQ(0u, matching_items.size());
-
-  // Check the first facebook form is still there.
-  std::vector<std::unique_ptr<PasswordForm>> matching_keychain_items;
-  matching_keychain_items = owned_keychain_adapter.PasswordsFillingForm(
-      www_form->signon_realm, www_form->scheme);
-  ASSERT_EQ(1u, matching_keychain_items.size());
-  EXPECT_EQ(ASCIIToUTF16("joe_user"),
-            matching_keychain_items[0]->username_value);
-
-  // Check the third-party password is still there.
-  owned_keychain_adapter.SetFindsOnlyOwnedItems(false);
-  matching_keychain_items = owned_keychain_adapter.PasswordsFillingForm(
-      "http://some.domain.com/insecure.html", PasswordForm::SCHEME_HTML);
-  ASSERT_EQ(1u, matching_keychain_items.size());
-}
-
-// Add a facebook form to the store but not to the keychain. The form is to be
-// implicitly deleted. However, the observers shouldn't get notified about
-// deletion of non-existent forms like m.facebook.com.
-TEST_F(PasswordStoreMacTest, SilentlyRemoveOrphanedForm) {
-  testing::StrictMock<password_manager::MockPasswordStoreObserver>
-      mock_observer;
-  store()->AddObserver(&mock_observer);
-
-  // 1. Add a password for www.facebook.com to the LoginDatabase.
-  PasswordFormData www_form_data = {PasswordForm::SCHEME_HTML,
-                                    "http://www.facebook.com/",
-                                    "http://www.facebook.com/index.html",
-                                    "login",
-                                    L"username",
-                                    L"password",
-                                    L"submit",
-                                    L"joe_user",
-                                    L"",
-                                    true,
-                                    1};
-  std::unique_ptr<PasswordForm> www_form(
-      CreatePasswordFormFromDataForTesting(www_form_data));
-  EXPECT_EQ(AddChangeForForm(*www_form), login_db()->AddLogin(*www_form));
-
-  // 2. Get a PSL-matched password for m.facebook.com. The observer isn't
-  // notified because the form isn't in the database.
-  PasswordForm m_form(*www_form);
-  m_form.signon_realm = "http://m.facebook.com";
-  m_form.origin = GURL("http://m.facebook.com/index.html");
-
-  MockPasswordStoreConsumer consumer;
-  ON_CALL(consumer, OnGetPasswordStoreResultsConstRef(_))
-      .WillByDefault(QuitUIMessageLoop());
-  EXPECT_CALL(mock_observer, OnLoginsChanged(_)).Times(0);
-  // The PSL-matched form isn't returned because there is no actual password in
-  // the keychain.
-  EXPECT_CALL(consumer, OnGetPasswordStoreResultsConstRef(IsEmpty()));
-  store_->GetLogins(PasswordStore::FormDigest(m_form), &consumer);
-  base::RunLoop().Run();
-  std::vector<std::unique_ptr<PasswordForm>> all_forms;
-  EXPECT_TRUE(login_db()->GetAutofillableLogins(&all_forms));
-  EXPECT_EQ(1u, all_forms.size());
-  ::testing::Mock::VerifyAndClearExpectations(&mock_observer);
-
-  // 3. Get a password for www.facebook.com. The form is implicitly removed and
-  // the observer is notified.
-  password_manager::PasswordStoreChangeList list;
-  list.push_back(password_manager::PasswordStoreChange(
-      password_manager::PasswordStoreChange::REMOVE, *www_form));
-  EXPECT_CALL(mock_observer, OnLoginsChanged(list));
-  EXPECT_CALL(consumer, OnGetPasswordStoreResultsConstRef(IsEmpty()));
-  store_->GetLogins(PasswordStore::FormDigest(*www_form), &consumer);
-  base::RunLoop().Run();
-  EXPECT_TRUE(login_db()->GetAutofillableLogins(&all_forms));
-  EXPECT_EQ(0u, all_forms.size());
-}
-
-// Verify that Android app passwords can be stored, retrieved, and deleted.
-// Regression test for http://crbug.com/455551
-TEST_F(PasswordStoreMacTest, StoringAndRetrievingAndroidCredentials) {
-  PasswordForm form;
-  form.signon_realm = "android://7x7IDboo8u9YKraUsbmVkuf1@net.rateflix.app/";
-  form.username_value = base::UTF8ToUTF16("randomusername");
-  form.password_value = base::UTF8ToUTF16("password");
-
-  VerifyCredentialLifecycle(form);
-}
-
-// Verify that federated credentials can be stored, retrieved and deleted.
-TEST_F(PasswordStoreMacTest, StoringAndRetrievingFederatedCredentials) {
-  PasswordForm form;
-  form.signon_realm = "android://7x7IDboo8u9YKraUsbmVkuf1@net.rateflix.app/";
-  form.federation_origin =
-      url::Origin(GURL(password_manager::kTestingFederationUrlSpec));
-  form.username_value = base::UTF8ToUTF16("randomusername");
-  form.password_value = base::UTF8ToUTF16("");  // No password.
-
-  VerifyCredentialLifecycle(form);
-}
-
-void CheckMigrationResult(PasswordStoreMac::MigrationResult expected_result,
-                          PasswordStoreMac::MigrationResult result) {
-  EXPECT_EQ(expected_result, result);
-  QuitUIMessageLoop();
-}
-
-// Import the passwords from the Keychain to LoginDatabase.
-TEST_F(PasswordStoreMacTest, ImportFromKeychain) {
-  PasswordForm form1;
-  form1.origin = GURL("http://accounts.google.com/LoginAuth");
-  form1.signon_realm = "http://accounts.google.com/";
-  form1.username_value = ASCIIToUTF16("my_username");
-  form1.password_value = ASCIIToUTF16("my_password");
-
-  PasswordForm form2;
-  form2.origin = GURL("http://facebook.com/Login");
-  form2.signon_realm = "http://facebook.com/";
-  form2.username_value = ASCIIToUTF16("my_username");
-  form2.password_value = ASCIIToUTF16("my_password");
-
-  PasswordForm blacklisted_form;
-  blacklisted_form.origin = GURL("http://badsite.com/Login");
-  blacklisted_form.signon_realm = "http://badsite.com/";
-  blacklisted_form.blacklisted_by_user = true;
-
-  store()->AddLogin(form1);
-  store()->AddLogin(form2);
-  store()->AddLogin(blacklisted_form);
-  FinishAsyncProcessing();
-
-  ASSERT_TRUE(base::PostTaskAndReplyWithResult(
-      thread_->task_runner().get(), FROM_HERE,
-      base::Bind(&PasswordStoreMac::ImportFromKeychain, login_db(), keychain()),
-      base::Bind(&CheckMigrationResult, PasswordStoreMac::MIGRATION_OK)));
-  FinishAsyncProcessing();
-
-  // The password should be stored in the database by now.
-  std::vector<std::unique_ptr<PasswordForm>> matching_items;
-  EXPECT_TRUE(
-      login_db()->GetLogins(PasswordStore::FormDigest(form1), &matching_items));
-  ASSERT_EQ(1u, matching_items.size());
-  EXPECT_EQ(form1, *matching_items[0]);
-
-  EXPECT_TRUE(
-      login_db()->GetLogins(PasswordStore::FormDigest(form2), &matching_items));
-  ASSERT_EQ(1u, matching_items.size());
-  EXPECT_EQ(form2, *matching_items[0]);
-
-  EXPECT_TRUE(login_db()->GetLogins(PasswordStore::FormDigest(blacklisted_form),
-                                    &matching_items));
-  ASSERT_EQ(1u, matching_items.size());
-  EXPECT_EQ(blacklisted_form, *matching_items[0]);
-
-  // The passwords are encrypted using a key from the Keychain.
-  EXPECT_TRUE(
-      histogram_tester_->GetHistogramSamplesSinceCreation("OSX.Keychain.Access")
-          ->TotalCount());
-  histogram_tester_.reset();
-}
-
-// Import a federated credential while the Keychain is locked.
-TEST_F(PasswordStoreMacTest, ImportFederatedFromLockedKeychain) {
-  keychain()->set_locked(true);
-  PasswordForm form1;
-  form1.origin = GURL("http://example.com/Login");
-  form1.signon_realm = "http://example.com/";
-  form1.username_value = ASCIIToUTF16("my_username");
-  form1.federation_origin = url::Origin(GURL("https://accounts.google.com/"));
-
-  store()->AddLogin(form1);
-  FinishAsyncProcessing();
-  ASSERT_TRUE(base::PostTaskAndReplyWithResult(
-      thread_->task_runner().get(), FROM_HERE,
-      base::Bind(&PasswordStoreMac::ImportFromKeychain, login_db(), keychain()),
-      base::Bind(&CheckMigrationResult, PasswordStoreMac::MIGRATION_OK)));
-  FinishAsyncProcessing();
-
-  std::vector<std::unique_ptr<PasswordForm>> matching_items;
-  EXPECT_TRUE(
-      login_db()->GetLogins(PasswordStore::FormDigest(form1), &matching_items));
-  ASSERT_EQ(1u, matching_items.size());
-  EXPECT_EQ(form1, *matching_items[0]);
-}
-
-// Try to import while the Keychain is locked but the encryption key had been
-// read earlier.
-TEST_F(PasswordStoreMacTest, ImportFromLockedKeychainError) {
-  PasswordForm form1;
-  form1.origin = GURL("http://accounts.google.com/LoginAuth");
-  form1.signon_realm = "http://accounts.google.com/";
-  form1.username_value = ASCIIToUTF16("my_username");
-  form1.password_value = ASCIIToUTF16("my_password");
-  store()->AddLogin(form1);
-  FinishAsyncProcessing();
-
-  // Add a second keychain item matching the Database entry.
-  PasswordForm form2 = form1;
-  form2.origin = GURL("http://accounts.google.com/Login");
-  form2.password_value = ASCIIToUTF16("1234");
-  MacKeychainPasswordFormAdapter adapter(keychain());
-  EXPECT_TRUE(adapter.AddPassword(form2));
-
-  keychain()->set_locked(true);
-  ASSERT_TRUE(base::PostTaskAndReplyWithResult(
-      thread_->task_runner().get(), FROM_HERE,
-      base::Bind(&PasswordStoreMac::ImportFromKeychain, login_db(), keychain()),
-      base::Bind(&CheckMigrationResult, PasswordStoreMac::MIGRATION_PARTIAL)));
-  FinishAsyncProcessing();
-
-  std::vector<std::unique_ptr<PasswordForm>> matching_items;
-  EXPECT_TRUE(
-      login_db()->GetLogins(PasswordStore::FormDigest(form1), &matching_items));
-  EXPECT_EQ(0u, matching_items.size());
-
-  histogram_tester_->ExpectUniqueSample(
-      "PasswordManager.KeychainMigration.NumPasswordsOnFailure", 1, 1);
-  histogram_tester_->ExpectUniqueSample(
-      "PasswordManager.KeychainMigration.NumFailedPasswords", 1, 1);
-  // Don't test the encryption key access.
-  histogram_tester_.reset();
-}
-
-// Delete the Chrome-owned password from the Keychain.
-TEST_F(PasswordStoreMacTest, CleanUpKeychain) {
-  MockAppleKeychain::KeychainTestData data1 = { kSecAuthenticationTypeHTMLForm,
-     "some.domain.com", kSecProtocolTypeHTTP, NULL, 0, NULL, "20020601171500Z",
-     "joe_user", "sekrit", false};
-  keychain()->AddTestItem(data1);
-
-  MacKeychainPasswordFormAdapter keychain_adapter(keychain());
-  PasswordFormData data2 = { PasswordForm::SCHEME_HTML, "http://web.site.com/",
-      "http://web.site.com/path/to/page.html", NULL, NULL, NULL, NULL,
-      L"anonymous", L"knock-knock", false, 0 };
-  keychain_adapter.AddPassword(*CreatePasswordFormFromDataForTesting(data2));
-  std::vector<std::unique_ptr<PasswordForm>> passwords =
-      keychain_adapter.GetAllPasswordFormPasswords();
-  EXPECT_EQ(2u, passwords.size());
-
-  // Delete everyhting but only the Chrome-owned item should be affected.
-  PasswordStoreMac::CleanUpKeychain(keychain(), passwords);
-  passwords = keychain_adapter.GetAllPasswordFormPasswords();
-  ASSERT_EQ(1u, passwords.size());
-  EXPECT_EQ("http://some.domain.com/", passwords[0]->signon_realm);
-  EXPECT_EQ(ASCIIToUTF16("sekrit"), passwords[0]->password_value);
-}
diff --git a/chrome/browser/password_manager/password_store_proxy_mac.cc b/chrome/browser/password_manager/password_store_proxy_mac.cc
index fb3bf93..a3dfece 100644
--- a/chrome/browser/password_manager/password_store_proxy_mac.cc
+++ b/chrome/browser/password_manager/password_store_proxy_mac.cc
@@ -4,35 +4,19 @@
 
 #include "chrome/browser/password_manager/password_store_proxy_mac.h"
 
-#include <string>
-#include <utility>
-
 #include "base/metrics/histogram_macros.h"
-#include "chrome/browser/password_manager/password_store_mac.h"
-#include "chrome/browser/password_manager/simple_password_store_mac.h"
+#include "components/password_manager/core/common/password_manager_pref_names.h"
 #include "content/public/browser/browser_thread.h"
-#include "crypto/apple_keychain.h"
 
 using password_manager::MigrationStatus;
-using password_manager::PasswordStoreChangeList;
 
 PasswordStoreProxyMac::PasswordStoreProxyMac(
     scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner,
-    std::unique_ptr<crypto::AppleKeychain> keychain,
     std::unique_ptr<password_manager::LoginDatabase> login_db,
     PrefService* prefs)
-    : PasswordStore(main_thread_runner, nullptr),
-      login_metadata_db_(std::move(login_db)),
-      keychain_(std::move(keychain)) {
-  DCHECK(login_metadata_db_);
+    : PasswordStoreDefault(main_thread_runner, nullptr, std::move(login_db)) {
   migration_status_.Init(password_manager::prefs::kKeychainMigrationStatus,
                          prefs);
-  // The login database will be set later after initialization.
-  password_store_simple_ =
-      new SimplePasswordStoreMac(main_thread_runner, nullptr, nullptr);
-}
-
-PasswordStoreProxyMac::~PasswordStoreProxyMac() {
 }
 
 bool PasswordStoreProxyMac::Init(
@@ -47,26 +31,22 @@
     return false;
   }
 
-  if (!ScheduleTask(base::Bind(
-          &PasswordStoreProxyMac::InitOnBackgroundThread, this,
-          static_cast<MigrationStatus>(migration_status_.GetValue()))))
-    return false;
+  if (PasswordStoreDefault::Init(flare, prefs)) {
+    return ScheduleTask(
+        base::Bind(&PasswordStoreProxyMac::InitOnBackgroundThread, this,
+                   static_cast<MigrationStatus>(migration_status_.GetValue())));
+  }
 
-  return password_manager::PasswordStore::Init(flare, prefs);
+  return false;
 }
 
 void PasswordStoreProxyMac::ShutdownOnUIThread() {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  PasswordStore::ShutdownOnUIThread();
+  PasswordStoreDefault::ShutdownOnUIThread();
   thread_->Stop();
 
-  // Execute the task which are still pending.
-  FlushPendingTasks();
-
   // Unsubscribe the observer, otherwise it's too late in the destructor.
   migration_status_.Destroy();
-
-  GetBackend()->ShutdownOnUIThread();
 }
 
 scoped_refptr<base::SingleThreadTaskRunner>
@@ -74,43 +54,23 @@
   return thread_ ? thread_->task_runner() : nullptr;
 }
 
-password_manager::PasswordStore* PasswordStoreProxyMac::GetBackend() const {
-  return password_store_simple_.get();
-}
+PasswordStoreProxyMac::~PasswordStoreProxyMac() = default;
 
 void PasswordStoreProxyMac::InitOnBackgroundThread(MigrationStatus status) {
   DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
-  if (!login_metadata_db_->Init()) {
-    login_metadata_db_.reset();
-    LOG(ERROR) << "Could not create/open login database.";
-  }
 
-  if (login_metadata_db_ && (status == MigrationStatus::NOT_STARTED ||
-                             status == MigrationStatus::FAILED_ONCE ||
-                             status == MigrationStatus::FAILED_TWICE)) {
+  if (login_db() && (status == MigrationStatus::NOT_STARTED ||
+                     status == MigrationStatus::FAILED_ONCE ||
+                     status == MigrationStatus::FAILED_TWICE)) {
     // Migration isn't possible due to Chrome changing the certificate. Just
     // drop the entries in the DB because they don't have passwords anyway.
-    login_metadata_db_->RemoveLoginsCreatedBetween(base::Time(), base::Time());
+    login_db()->RemoveLoginsCreatedBetween(base::Time(), base::Time());
     status = MigrationStatus::MIGRATION_STOPPED;
-    pending_ui_tasks_.push_back(
+    main_thread_runner_->PostTask(
+        FROM_HERE,
         base::Bind(&PasswordStoreProxyMac::UpdateStatusPref, this, status));
-  } else if (login_metadata_db_ && status == MigrationStatus::MIGRATED) {
-    // Delete the migrated passwords from the keychain.
-    std::vector<std::unique_ptr<autofill::PasswordForm>> forms;
-    if (login_metadata_db_->GetAutofillableLogins(&forms)) {
-      PasswordStoreMac::CleanUpKeychain(keychain_.get(), forms);
-      status = MigrationStatus::MIGRATED_DELETED;
-      pending_ui_tasks_.push_back(
-          base::Bind(&PasswordStoreProxyMac::UpdateStatusPref, this, status));
-    }
   }
 
-  password_store_simple_->InitWithTaskRunner(GetBackgroundTaskRunner(),
-                                             std::move(login_metadata_db_));
-  if (!pending_ui_tasks_.empty()) {
-    main_thread_runner_->PostTask(
-        FROM_HERE, base::Bind(&PasswordStoreProxyMac::FlushPendingTasks, this));
-  }
   UMA_HISTOGRAM_ENUMERATION(
       "PasswordManager.KeychainMigration.Status", static_cast<int>(status),
       static_cast<int>(MigrationStatus::MIGRATION_STATUS_COUNT));
@@ -118,108 +78,7 @@
 
 void PasswordStoreProxyMac::UpdateStatusPref(MigrationStatus status) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  migration_status_.SetValue(static_cast<int>(status));
-}
-
-void PasswordStoreProxyMac::FlushPendingTasks() {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  for (auto& task : pending_ui_tasks_)
-    task.Run();
-  pending_ui_tasks_.clear();
-}
-
-void PasswordStoreProxyMac::ReportMetricsImpl(
-    const std::string& sync_username,
-    bool custom_passphrase_sync_enabled) {
-  GetBackend()->ReportMetricsImpl(sync_username,
-                                  custom_passphrase_sync_enabled);
-}
-
-PasswordStoreChangeList PasswordStoreProxyMac::AddLoginImpl(
-    const autofill::PasswordForm& form) {
-  return GetBackend()->AddLoginImpl(form);
-}
-
-PasswordStoreChangeList PasswordStoreProxyMac::UpdateLoginImpl(
-    const autofill::PasswordForm& form) {
-  return GetBackend()->UpdateLoginImpl(form);
-}
-
-PasswordStoreChangeList PasswordStoreProxyMac::RemoveLoginImpl(
-    const autofill::PasswordForm& form) {
-  return GetBackend()->RemoveLoginImpl(form);
-}
-
-PasswordStoreChangeList PasswordStoreProxyMac::RemoveLoginsByURLAndTimeImpl(
-    const base::Callback<bool(const GURL&)>& url_filter,
-    base::Time delete_begin,
-    base::Time delete_end) {
-  return GetBackend()->RemoveLoginsByURLAndTimeImpl(url_filter, delete_begin,
-                                                    delete_end);
-}
-
-PasswordStoreChangeList PasswordStoreProxyMac::RemoveLoginsCreatedBetweenImpl(
-    base::Time delete_begin,
-    base::Time delete_end) {
-  return GetBackend()->RemoveLoginsCreatedBetweenImpl(delete_begin, delete_end);
-}
-
-PasswordStoreChangeList PasswordStoreProxyMac::RemoveLoginsSyncedBetweenImpl(
-    base::Time delete_begin,
-    base::Time delete_end) {
-  return GetBackend()->RemoveLoginsSyncedBetweenImpl(delete_begin, delete_end);
-}
-
-PasswordStoreChangeList
-PasswordStoreProxyMac::DisableAutoSignInForOriginsImpl(
-    const base::Callback<bool(const GURL&)>& origin_filter) {
-  return GetBackend()->DisableAutoSignInForOriginsImpl(origin_filter);
-}
-
-bool PasswordStoreProxyMac::RemoveStatisticsByOriginAndTimeImpl(
-    const base::Callback<bool(const GURL&)>& origin_filter,
-    base::Time delete_begin,
-    base::Time delete_end) {
-  return GetBackend()->RemoveStatisticsByOriginAndTimeImpl(
-      origin_filter, delete_begin, delete_end);
-}
-
-std::vector<std::unique_ptr<autofill::PasswordForm>>
-PasswordStoreProxyMac::FillMatchingLogins(const FormDigest& form) {
-  return GetBackend()->FillMatchingLogins(form);
-}
-
-std::vector<std::unique_ptr<autofill::PasswordForm>>
-PasswordStoreProxyMac::FillLoginsForSameOrganizationName(
-    const std::string& signon_realm) {
-  return GetBackend()->FillLoginsForSameOrganizationName(signon_realm);
-}
-
-bool PasswordStoreProxyMac::FillAutofillableLogins(
-    std::vector<std::unique_ptr<autofill::PasswordForm>>* forms) {
-  return GetBackend()->FillAutofillableLogins(forms);
-}
-
-bool PasswordStoreProxyMac::FillBlacklistLogins(
-    std::vector<std::unique_ptr<autofill::PasswordForm>>* forms) {
-  return GetBackend()->FillBlacklistLogins(forms);
-}
-
-void PasswordStoreProxyMac::AddSiteStatsImpl(
-    const password_manager::InteractionsStats& stats) {
-  GetBackend()->AddSiteStatsImpl(stats);
-}
-
-void PasswordStoreProxyMac::RemoveSiteStatsImpl(const GURL& origin_domain) {
-  GetBackend()->RemoveSiteStatsImpl(origin_domain);
-}
-
-std::vector<password_manager::InteractionsStats>
-PasswordStoreProxyMac::GetAllSiteStatsImpl() {
-  return GetBackend()->GetAllSiteStatsImpl();
-}
-
-std::vector<password_manager::InteractionsStats>
-PasswordStoreProxyMac::GetSiteStatsImpl(const GURL& origin_domain) {
-  return GetBackend()->GetSiteStatsImpl(origin_domain);
+  // The method can be called after ShutdownOnUIThread().
+  if (migration_status_.prefs())
+    migration_status_.SetValue(static_cast<int>(status));
 }
diff --git a/chrome/browser/password_manager/password_store_proxy_mac.h b/chrome/browser/password_manager/password_store_proxy_mac.h
index 801f813..23460eae 100644
--- a/chrome/browser/password_manager/password_store_proxy_mac.h
+++ b/chrome/browser/password_manager/password_store_proxy_mac.h
@@ -5,39 +5,27 @@
 #ifndef CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_PROXY_MAC_H_
 #define CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_PROXY_MAC_H_
 
-#include <string>
-#include <vector>
+#include <memory>
 
 #include "base/macros.h"
-#include "base/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "components/password_manager/core/browser/keychain_migration_status_mac.h"
-#include "components/password_manager/core/browser/password_store.h"
-#include "components/password_manager/core/common/password_manager_pref_names.h"
+#include "components/password_manager/core/browser/password_store_default.h"
 #include "components/prefs/pref_member.h"
 
-namespace crypto {
-class AppleKeychain;
-}
-
 namespace password_manager {
 class LoginDatabase;
 }
 
-class SimplePasswordStoreMac;
-
-// The class is a proxy for either PasswordStoreMac or SimplePasswordStoreMac.
-// It is responsible for performing migration from PasswordStoreMac to
-// SimplePasswordStoreMac and instantiating a correct backend according to the
-// user's state.
-class PasswordStoreProxyMac : public password_manager::PasswordStore {
+// Password store for Mac. It creates a dedicated background thread
+class PasswordStoreProxyMac : public password_manager::PasswordStoreDefault {
  public:
   PasswordStoreProxyMac(
       scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner,
-      std::unique_ptr<crypto::AppleKeychain> keychain,
       std::unique_ptr<password_manager::LoginDatabase> login_db,
       PrefService* prefs);
 
+  // PasswordStore:
   bool Init(const syncer::SyncableService::StartSyncFlare& flare,
             PrefService* prefs) override;
   void ShutdownOnUIThread() override;
@@ -45,94 +33,23 @@
       override;
 
 #if defined(UNIT_TEST)
-  password_manager::LoginDatabase* login_metadata_db() {
-    return login_metadata_db_.get();
-  }
-
-  crypto::AppleKeychain* keychain() {
-    return keychain_.get();
-  }
+  password_manager::LoginDatabase* login_metadata_db() { return login_db(); }
 #endif
 
  private:
   ~PasswordStoreProxyMac() override;
 
-  password_manager::PasswordStore* GetBackend() const;
-
-  // Opens LoginDatabase on the background |thread_|.
   void InitOnBackgroundThread(password_manager::MigrationStatus status);
 
   // Writes status to the prefs.
   void UpdateStatusPref(password_manager::MigrationStatus status);
 
-  // Executes |pending_ui_tasks_| on the UI thread.
-  void FlushPendingTasks();
-
-  // PasswordStore:
-  void ReportMetricsImpl(const std::string& sync_username,
-                         bool custom_passphrase_sync_enabled) override;
-  password_manager::PasswordStoreChangeList AddLoginImpl(
-      const autofill::PasswordForm& form) override;
-  password_manager::PasswordStoreChangeList UpdateLoginImpl(
-      const autofill::PasswordForm& form) override;
-  password_manager::PasswordStoreChangeList RemoveLoginImpl(
-      const autofill::PasswordForm& form) override;
-  password_manager::PasswordStoreChangeList RemoveLoginsByURLAndTimeImpl(
-      const base::Callback<bool(const GURL&)>& url_filter,
-      base::Time delete_begin,
-      base::Time delete_end) override;
-  password_manager::PasswordStoreChangeList RemoveLoginsCreatedBetweenImpl(
-      base::Time delete_begin,
-      base::Time delete_end) override;
-  password_manager::PasswordStoreChangeList RemoveLoginsSyncedBetweenImpl(
-      base::Time delete_begin,
-      base::Time delete_end) override;
-  password_manager::PasswordStoreChangeList DisableAutoSignInForOriginsImpl(
-      const base::Callback<bool(const GURL&)>& origin_filter) override;
-  bool RemoveStatisticsByOriginAndTimeImpl(
-      const base::Callback<bool(const GURL&)>& origin_filter,
-      base::Time delete_begin,
-      base::Time delete_end) override;
-  std::vector<std::unique_ptr<autofill::PasswordForm>> FillMatchingLogins(
-      const FormDigest& form) override;
-  std::vector<std::unique_ptr<autofill::PasswordForm>>
-  FillLoginsForSameOrganizationName(const std::string& signon_realm) override;
-  bool FillAutofillableLogins(
-      std::vector<std::unique_ptr<autofill::PasswordForm>>* forms) override;
-  bool FillBlacklistLogins(
-      std::vector<std::unique_ptr<autofill::PasswordForm>>* forms) override;
-  void AddSiteStatsImpl(
-      const password_manager::InteractionsStats& stats) override;
-  void RemoveSiteStatsImpl(const GURL& origin_domain) override;
-  std::vector<password_manager::InteractionsStats> GetAllSiteStatsImpl()
-      override;
-  std::vector<password_manager::InteractionsStats> GetSiteStatsImpl(
-      const GURL& origin_domain) override;
-
-  scoped_refptr<SimplePasswordStoreMac> password_store_simple_;
-
-  // The login metadata SQL database. If opening the DB on |thread_| fails,
-  // |login_metadata_db_| will be reset to NULL for the lifetime of |this|.
-  // The ownership may be transferred to |password_store_simple_|.
-  std::unique_ptr<password_manager::LoginDatabase> login_metadata_db_;
-
-  // Keychain wrapper.
-  const std::unique_ptr<crypto::AppleKeychain> keychain_;
-
   // Thread that the synchronous methods are run on.
   std::unique_ptr<base::Thread> thread_;
 
   // Current migration status for the profile.
   IntegerPrefMember migration_status_;
 
-  // List of tasks filled by InitOnBackgroundThread. They can't be just posted
-  // to the UI thread because the message loop can shut down before executing
-  // them. If this is the case then Shutdown() flushes the tasks after stopping
-  // the background thread.
-  // After InitOnBackgroundThread is run once, the queue may not be modified on
-  // the background thread any more.
-  std::vector<base::Closure> pending_ui_tasks_;
-
   DISALLOW_COPY_AND_ASSIGN(PasswordStoreProxyMac);
 };
 
diff --git a/chrome/browser/password_manager/password_store_proxy_mac_unittest.cc b/chrome/browser/password_manager/password_store_proxy_mac_unittest.cc
index 6ee8526f..84047ac9 100644
--- a/chrome/browser/password_manager/password_store_proxy_mac_unittest.cc
+++ b/chrome/browser/password_manager/password_store_proxy_mac_unittest.cc
@@ -13,8 +13,6 @@
 #include "base/scoped_observer.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/histogram_tester.h"
-#include "chrome/browser/password_manager/password_store_mac.h"
-#include "chrome/browser/password_manager/password_store_mac_internal.h"
 #include "chrome/browser/prefs/browser_prefs.h"
 #include "components/os_crypt/os_crypt_mocker.h"
 #include "components/password_manager/core/browser/login_database.h"
@@ -24,10 +22,8 @@
 #include "components/sync_preferences/testing_pref_service_syncable.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/test/test_browser_thread_bundle.h"
-#include "crypto/mock_apple_keychain.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "url/origin.h"
 
 namespace {
 
@@ -42,12 +38,6 @@
 using testing::IsEmpty;
 using testing::Pointee;
 
-// Returns a change list corresponding to |form| being added.
-PasswordStoreChangeList AddChangeForForm(const PasswordForm& form) {
-  return PasswordStoreChangeList(
-      1, PasswordStoreChange(PasswordStoreChange::ADD, form));
-}
-
 class MockPasswordStoreConsumer
     : public password_manager::PasswordStoreConsumer {
  public:
@@ -113,9 +103,6 @@
   PasswordStoreProxyMacTest();
   ~PasswordStoreProxyMacTest() override;
 
-  void SetUp() override;
-  void TearDown() override;
-
   void CreateAndInitPasswordStore(
       std::unique_ptr<password_manager::LoginDatabase> login_db);
 
@@ -130,14 +117,10 @@
   void UpdateForm(const PasswordForm& form);
   void RemoveForm(const PasswordForm& form);
 
-  // Tests RemoveLoginsCreatedBetween or RemoveLoginsSyncedBetween depending on
-  // |check_created|.
-  void CheckRemoveLoginsBetween(bool check_created);
-
   base::FilePath test_login_db_file_path() const;
 
   // Returns the expected migration status after the password store was inited.
-  MigrationStatus GetTargetStatus(bool keychain_locked) const;
+  MigrationStatus GetTargetStatus() const;
 
   password_manager::LoginDatabase* login_db() const {
     return store_->login_metadata_db();
@@ -163,15 +146,7 @@
   OSCryptMocker::SetUpWithSingleton();
 }
 
-PasswordStoreProxyMacTest::~PasswordStoreProxyMacTest() {}
-
-void PasswordStoreProxyMacTest::SetUp() {
-  std::unique_ptr<password_manager::LoginDatabase> login_db(
-      new password_manager::LoginDatabase(test_login_db_file_path()));
-  CreateAndInitPasswordStore(std::move(login_db));
-}
-
-void PasswordStoreProxyMacTest::TearDown() {
+PasswordStoreProxyMacTest::~PasswordStoreProxyMacTest() {
   ClosePasswordStore();
   OSCryptMocker::TearDown();
 }
@@ -180,8 +155,7 @@
     std::unique_ptr<password_manager::LoginDatabase> login_db) {
   store_ = new PasswordStoreProxyMac(
       BrowserThread::GetTaskRunnerForThread(BrowserThread::UI),
-      base::MakeUnique<crypto::MockAppleKeychain>(), std::move(login_db),
-      &testing_prefs_);
+      std::move(login_db), &testing_prefs_);
   ASSERT_TRUE(store_->Init(syncer::SyncableService::StartSyncFlare(), nullptr));
 }
 
@@ -206,15 +180,12 @@
   return db_dir_.GetPath().Append(FILE_PATH_LITERAL("login.db"));
 }
 
-MigrationStatus PasswordStoreProxyMacTest::GetTargetStatus(
-    bool keychain_locked) const {
+MigrationStatus PasswordStoreProxyMacTest::GetTargetStatus() const {
   if (GetParam() == MigrationStatus::NOT_STARTED ||
       GetParam() == MigrationStatus::FAILED_ONCE ||
       GetParam() == MigrationStatus::FAILED_TWICE) {
     return MigrationStatus::MIGRATION_STOPPED;
   }
-  if (GetParam() == MigrationStatus::MIGRATED)
-    return MigrationStatus::MIGRATED_DELETED;
   return GetParam();
 }
 
@@ -251,112 +222,41 @@
   FinishAsyncProcessing();
 }
 
-void PasswordStoreProxyMacTest::CheckRemoveLoginsBetween(bool check_created) {
-  PasswordForm old_form;
-  old_form.origin = GURL("http://accounts.google.com/LoginAuth");
-  old_form.signon_realm = "http://accounts.google.com/";
-  old_form.username_value = base::ASCIIToUTF16("my_username");
-  old_form.federation_origin =
-      url::Origin(GURL("http://accounts.google.com/federation"));
-
-  PasswordForm new_form = old_form;
-  new_form.origin = GURL("http://accounts.google2.com/LoginAuth");
-  new_form.signon_realm = "http://accounts.google2.com/";
-
-  base::Time now = base::Time::Now();
-  base::Time next_day = now + base::TimeDelta::FromDays(1);
-  if (check_created) {
-    old_form.date_created = now;
-    new_form.date_created = next_day;
-  } else {
-    old_form.date_synced = now;
-    new_form.date_synced = next_day;
-  }
-
-  AddForm(old_form);
-  AddForm(new_form);
-
-  MockPasswordStoreObserver mock_observer(store());
-  password_manager::PasswordStoreChangeList list;
-  list.push_back(password_manager::PasswordStoreChange(
-      password_manager::PasswordStoreChange::REMOVE, old_form));
-  EXPECT_CALL(mock_observer, OnLoginsChanged(list));
-  if (check_created) {
-    store()->RemoveLoginsCreatedBetween(base::Time(), next_day,
-                                        base::Closure());
-  } else {
-    store()->RemoveLoginsSyncedBetween(base::Time(), next_day);
-  }
-  FinishAsyncProcessing();
-}
-
 // ----------- Tests -------------
 
-TEST_P(PasswordStoreProxyMacTest, StartAndStop) {
-  // PasswordStore::ShutdownOnUIThread() immediately follows
-  // PasswordStore::Init(). The message loop isn't running in between. Anyway,
-  // PasswordStore should end up in the right state.
+TEST_P(PasswordStoreProxyMacTest, Sanity) {
+  base::HistogramTester histogram_tester;
+
+  CreateAndInitPasswordStore(base::MakeUnique<password_manager::LoginDatabase>(
+      test_login_db_file_path()));
+  FinishAsyncProcessing();
   ClosePasswordStore();
 
   int status = testing_prefs_.GetInteger(
       password_manager::prefs::kKeychainMigrationStatus);
-  EXPECT_EQ(static_cast<int>(GetTargetStatus(false)), status);
+  EXPECT_EQ(static_cast<int>(GetTargetStatus()), status);
+  histogram_tester.ExpectUniqueSample(
+      "PasswordManager.KeychainMigration.Status", status, 1);
 }
 
-TEST_P(PasswordStoreProxyMacTest, FormLifeCycle) {
-  PasswordForm password_form;
-  password_form.origin = GURL("http://example.com");
-  password_form.username_value = base::ASCIIToUTF16("test1@gmail.com");
-  password_form.password_value = base::ASCIIToUTF16("12345");
-  password_form.signon_realm = "http://example.com/";
+TEST_P(PasswordStoreProxyMacTest, StartAndStop) {
+  base::HistogramTester histogram_tester;
+  // PasswordStore::ShutdownOnUIThread() immediately follows
+  // PasswordStore::Init(). The message loop isn't running in between. Anyway,
+  // PasswordStore should not collapse.
+  CreateAndInitPasswordStore(base::MakeUnique<password_manager::LoginDatabase>(
+      test_login_db_file_path()));
+  ClosePasswordStore();
 
-  AddForm(password_form);
-  password_form.password_value = base::ASCIIToUTF16("password");
-  UpdateForm(password_form);
-  RemoveForm(password_form);
-}
-
-TEST_P(PasswordStoreProxyMacTest, TestRemoveLoginsCreatedBetween) {
-  CheckRemoveLoginsBetween(true);
-}
-
-TEST_P(PasswordStoreProxyMacTest, TestRemoveLoginsSyncedBetween) {
-  CheckRemoveLoginsBetween(false);
-}
-
-TEST_P(PasswordStoreProxyMacTest, FillLogins) {
-  PasswordForm password_form;
-  password_form.origin = GURL("http://example.com");
-  password_form.signon_realm = "http://example.com/";
-  password_form.username_value = base::ASCIIToUTF16("test1@gmail.com");
-  password_form.password_value = base::ASCIIToUTF16("12345");
-  AddForm(password_form);
-
-  PasswordForm blacklisted_form;
-  blacklisted_form.origin = GURL("http://example2.com");
-  blacklisted_form.signon_realm = "http://example2.com/";
-  blacklisted_form.blacklisted_by_user = true;
-  AddForm(blacklisted_form);
-
-  MockPasswordStoreConsumer mock_consumer;
-  store()->GetLogins(PasswordStore::FormDigest(password_form), &mock_consumer);
-  mock_consumer.WaitForResult();
-  EXPECT_THAT(mock_consumer.forms(), ElementsAre(Pointee(password_form)));
-
-  store()->GetBlacklistLogins(&mock_consumer);
-  mock_consumer.WaitForResult();
-  EXPECT_THAT(mock_consumer.forms(), ElementsAre(Pointee(blacklisted_form)));
-
-  store()->GetAutofillableLogins(&mock_consumer);
-  mock_consumer.WaitForResult();
-  EXPECT_THAT(mock_consumer.forms(), ElementsAre(Pointee(password_form)));
+  histogram_tester.ExpectUniqueSample(
+      "PasswordManager.KeychainMigration.Status",
+      static_cast<int>(GetTargetStatus()), 1);
 }
 
 TEST_P(PasswordStoreProxyMacTest, OperationsOnABadDatabaseSilentlyFail) {
   // Verify that operations on a PasswordStore with a bad database cause no
   // explosions, but fail without side effect, return no data and trigger no
   // notifications.
-  ClosePasswordStore();
   CreateAndInitPasswordStore(base::MakeUnique<BadLoginDatabase>());
   FinishAsyncProcessing();
   EXPECT_FALSE(login_db());
@@ -434,98 +334,4 @@
                                         MigrationStatus::MIGRATED_PARTIALLY,
                                         MigrationStatus::MIGRATION_STOPPED));
 
-// Test the migration process.
-class PasswordStoreProxyMacMigrationTest : public PasswordStoreProxyMacTest {
- public:
-  void SetUp() override;
-
-  void TestMigration(bool lock_keychain);
-
- protected:
-  std::unique_ptr<password_manager::LoginDatabase> login_db_;
-  std::unique_ptr<crypto::MockAppleKeychain> keychain_;
-  base::HistogramTester histogram_tester_;
-};
-
-void PasswordStoreProxyMacMigrationTest::SetUp() {
-  login_db_.reset(
-      new password_manager::LoginDatabase(test_login_db_file_path()));
-  keychain_.reset(new crypto::MockAppleKeychain);
-}
-
-void PasswordStoreProxyMacMigrationTest::TestMigration(bool lock_keychain) {
-  PasswordForm form;
-  form.origin = GURL("http://accounts.google.com/LoginAuth");
-  form.signon_realm = "http://accounts.google.com/";
-  form.username_value = base::ASCIIToUTF16("my_username");
-  form.password_value = base::ASCIIToUTF16("12345");
-
-  const bool before_migration = (GetParam() == MigrationStatus::NOT_STARTED ||
-                                  GetParam() == MigrationStatus::FAILED_ONCE ||
-                                  GetParam() == MigrationStatus::FAILED_TWICE);
-  if (before_migration)
-    login_db_->set_clear_password_values(true);
-  EXPECT_TRUE(login_db_->Init());
-  EXPECT_EQ(AddChangeForForm(form), login_db_->AddLogin(form));
-  // Prepare another database instance with the same content which is to be
-  // initialized by PasswordStoreProxyMac.
-  login_db_.reset(
-      new password_manager::LoginDatabase(test_login_db_file_path()));
-  MacKeychainPasswordFormAdapter adapter(keychain_.get());
-  EXPECT_TRUE(adapter.AddPassword(form));
-
-  // Init the store. It may trigger the migration.
-  if (lock_keychain)
-    keychain_->set_locked(true);
-  store_ = new PasswordStoreProxyMac(
-      BrowserThread::GetTaskRunnerForThread(BrowserThread::UI),
-      std::move(keychain_), std::move(login_db_), &testing_prefs_);
-  ASSERT_TRUE(store_->Init(syncer::SyncableService::StartSyncFlare(), nullptr));
-  FinishAsyncProcessing();
-
-  MockPasswordStoreConsumer mock_consumer;
-  store()->GetLogins(PasswordStore::FormDigest(form), &mock_consumer);
-  mock_consumer.WaitForResult();
-  if (before_migration)
-    EXPECT_THAT(mock_consumer.forms(), IsEmpty());
-  else
-    EXPECT_THAT(mock_consumer.forms(), ElementsAre(Pointee(form)));
-
-  int status = testing_prefs_.GetInteger(
-      password_manager::prefs::kKeychainMigrationStatus);
-  EXPECT_EQ(static_cast<int>(GetTargetStatus(lock_keychain)), status);
-  histogram_tester_.ExpectUniqueSample(
-      "PasswordManager.KeychainMigration.Status", status, 1);
-  static_cast<crypto::MockAppleKeychain*>(store()->keychain())
-      ->set_locked(false);
-  if (GetTargetStatus(lock_keychain) == MigrationStatus::MIGRATED_DELETED &&
-      GetParam() != MigrationStatus::MIGRATED_DELETED && !lock_keychain) {
-    EXPECT_THAT(adapter.GetAllPasswordFormPasswords(), IsEmpty());
-  } else {
-    auto forms = adapter.GetAllPasswordFormPasswords();
-    ASSERT_EQ(1u, forms.size());
-    form.date_created = forms[0]->date_created;
-    EXPECT_THAT(adapter.GetAllPasswordFormPasswords(),
-                ElementsAre(Pointee(form)));
-  }
-}
-
-TEST_P(PasswordStoreProxyMacMigrationTest, TestSuccessfullMigration) {
-  TestMigration(false);
-}
-
-TEST_P(PasswordStoreProxyMacMigrationTest, TestFailedMigration) {
-  TestMigration(true);
-}
-
-INSTANTIATE_TEST_CASE_P(,
-                        PasswordStoreProxyMacMigrationTest,
-                        testing::Values(MigrationStatus::NOT_STARTED,
-                                        MigrationStatus::MIGRATED,
-                                        MigrationStatus::FAILED_ONCE,
-                                        MigrationStatus::FAILED_TWICE,
-                                        MigrationStatus::MIGRATED_DELETED,
-                                        MigrationStatus::MIGRATED_PARTIALLY,
-                                        MigrationStatus::MIGRATION_STOPPED));
-
 }  // namespace
diff --git a/chrome/browser/password_manager/simple_password_store_mac.cc b/chrome/browser/password_manager/simple_password_store_mac.cc
deleted file mode 100644
index 2d5585e1..0000000
--- a/chrome/browser/password_manager/simple_password_store_mac.cc
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/password_manager/simple_password_store_mac.h"
-
-#include <utility>
-
-SimplePasswordStoreMac::SimplePasswordStoreMac(
-    scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner,
-    scoped_refptr<base::SingleThreadTaskRunner> background_thread_runner,
-    std::unique_ptr<password_manager::LoginDatabase> login_db)
-    : PasswordStoreDefault(main_thread_runner,
-                           background_thread_runner,
-                           std::move(login_db)) {
-  if (this->login_db())
-    this->login_db()->set_clear_password_values(false);
-}
-
-SimplePasswordStoreMac::~SimplePasswordStoreMac() {
-}
-
-void SimplePasswordStoreMac::InitWithTaskRunner(
-    scoped_refptr<base::SingleThreadTaskRunner> background_task_runner,
-    std::unique_ptr<password_manager::LoginDatabase> login_db) {
-  db_thread_runner_ = background_task_runner;
-  DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
-  set_login_db(std::move(login_db));
-  if (this->login_db())
-    this->login_db()->set_clear_password_values(false);
-}
-
-bool SimplePasswordStoreMac::Init(
-    const syncer::SyncableService::StartSyncFlare& flare,
-    PrefService* prefs) {
-  NOTREACHED();
-  return false;
-}
diff --git a/chrome/browser/password_manager/simple_password_store_mac.h b/chrome/browser/password_manager/simple_password_store_mac.h
deleted file mode 100644
index 49c9b35c..0000000
--- a/chrome/browser/password_manager/simple_password_store_mac.h
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_PASSWORD_MANAGER_SIMPLE_PASSWORD_STORE_MAC_H_
-#define CHROME_BROWSER_PASSWORD_MANAGER_SIMPLE_PASSWORD_STORE_MAC_H_
-
-#include "base/macros.h"
-#include "base/single_thread_task_runner.h"
-#include "components/password_manager/core/browser/password_store_default.h"
-
-class PrefService;
-
-// The same as PasswordStoreDefault but running on the dedicated thread. The
-// owner is responsible for the thread lifetime.
-class SimplePasswordStoreMac : public password_manager::PasswordStoreDefault {
- public:
-  // Passes the arguments to PasswordStoreDefault. |background_task_runner| and
-  // |login_db| can be overwritten later in InitWithTaskRunner().
-  SimplePasswordStoreMac(
-      scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner,
-      scoped_refptr<base::SingleThreadTaskRunner> background_thread_runner,
-      std::unique_ptr<password_manager::LoginDatabase> login_db);
-
-  // Sets the background thread and LoginDatabase. |login_db| should be already
-  // inited. The method isn't necessary to call if the constructor already got
-  // the correct parameters.
-  void InitWithTaskRunner(
-      scoped_refptr<base::SingleThreadTaskRunner> background_task_runner,
-      std::unique_ptr<password_manager::LoginDatabase> login_db);
-
-  using PasswordStoreDefault::GetBackgroundTaskRunner;
-
- protected:
-  ~SimplePasswordStoreMac() override;
-
- private:
-  bool Init(const syncer::SyncableService::StartSyncFlare& flare,
-            PrefService* prefs) override;
-
-  DISALLOW_COPY_AND_ASSIGN(SimplePasswordStoreMac);
-};
-
-#endif  // CHROME_BROWSER_PASSWORD_MANAGER_SIMPLE_PASSWORD_STORE_MAC_H_
diff --git a/chrome/browser/password_manager/simple_password_store_mac_unittest.cc b/chrome/browser/password_manager/simple_password_store_mac_unittest.cc
deleted file mode 100644
index db89e9b..0000000
--- a/chrome/browser/password_manager/simple_password_store_mac_unittest.cc
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/password_manager/simple_password_store_mac.h"
-
-#include "base/callback.h"
-#include "base/files/scoped_temp_dir.h"
-#include "base/single_thread_task_runner.h"
-#include "base/strings/utf_string_conversions.h"
-#include "components/os_crypt/os_crypt_mocker.h"
-#include "components/password_manager/core/browser/login_database.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/test/test_browser_thread_bundle.h"
-#include "content/public/test/test_utils.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using content::BrowserThread;
-using password_manager::PasswordStoreChange;
-using testing::ElementsAreArray;
-
-namespace {
-
-class MockPasswordStoreObserver
-    : public password_manager::PasswordStore::Observer {
- public:
-  MOCK_METHOD1(OnLoginsChanged,
-               void(const password_manager::PasswordStoreChangeList& changes));
-};
-
-class SimplePasswordStoreMacTest : public testing::Test {
- public:
-  SimplePasswordStoreMacTest()
-      : thread_bundle_(content::TestBrowserThreadBundle::REAL_FILE_THREAD) {}
-
-  void SetUp() override {
-    ASSERT_TRUE(db_dir_.CreateUniqueTempDir());
-
-    // Ensure that LoginDatabase will use the mock keychain if it needs to
-    // encrypt/decrypt a password.
-    OSCryptMocker::SetUpWithSingleton();
-
-    // Setup LoginDatabase.
-    std::unique_ptr<password_manager::LoginDatabase> login_db(
-        new password_manager::LoginDatabase(test_login_db_file_path()));
-    scoped_refptr<base::SingleThreadTaskRunner> file_task_runner =
-        BrowserThread::GetTaskRunnerForThread(BrowserThread::FILE);
-    ASSERT_TRUE(file_task_runner);
-    file_task_runner->PostTask(
-        FROM_HERE,
-        base::Bind(&InitOnBackgroundThread, base::Unretained(login_db.get())));
-    store_ = new SimplePasswordStoreMac(
-        BrowserThread::GetTaskRunnerForThread(BrowserThread::UI), nullptr,
-        std::unique_ptr<password_manager::LoginDatabase>());
-    file_task_runner->PostTask(
-        FROM_HERE,
-        base::Bind(&SimplePasswordStoreMac::InitWithTaskRunner, store_,
-                   file_task_runner, base::Passed(&login_db)));
-    // Make sure deferred initialization is finished.
-    FinishAsyncProcessing();
-  }
-
-  void TearDown() override {
-    store_->ShutdownOnUIThread();
-    EXPECT_TRUE(store_->GetBackgroundTaskRunner());
-    store_ = nullptr;
-    OSCryptMocker::TearDown();
-  }
-
-  base::FilePath test_login_db_file_path() const {
-    return db_dir_.GetPath().Append(FILE_PATH_LITERAL("login.db"));
-  }
-
-  scoped_refptr<SimplePasswordStoreMac> store() { return store_; }
-
-  void FinishAsyncProcessing() {
-    scoped_refptr<content::MessageLoopRunner> runner(
-        new content::MessageLoopRunner);
-    ASSERT_TRUE(BrowserThread::PostTaskAndReply(BrowserThread::FILE, FROM_HERE,
-                                                base::Bind(&Noop),
-                                                runner->QuitClosure()));
-    runner->Run();
-  }
-
- private:
-  static void InitOnBackgroundThread(password_manager::LoginDatabase* db) {
-    ASSERT_TRUE(db->Init());
-  }
-
-  static void Noop() {}
-
-  base::ScopedTempDir db_dir_;
-  scoped_refptr<SimplePasswordStoreMac> store_;
-
-  content::TestBrowserThreadBundle thread_bundle_;
-};
-
-TEST_F(SimplePasswordStoreMacTest, Sanity) {
-  autofill::PasswordForm form;
-  form.origin = GURL("http://accounts.google.com/LoginAuth");
-  form.signon_realm = "http://accounts.google.com/";
-  form.username_value = base::ASCIIToUTF16("my_username");
-  form.password_value = base::ASCIIToUTF16("12345");
-  MockPasswordStoreObserver observer;
-  store()->AddObserver(&observer);
-
-  const PasswordStoreChange expected_add_changes[] = {
-      PasswordStoreChange(PasswordStoreChange::ADD, form),
-  };
-  EXPECT_CALL(observer,
-              OnLoginsChanged(ElementsAreArray(expected_add_changes)));
-  // Adding a login should trigger a notification.
-  store()->AddLogin(form);
-  FinishAsyncProcessing();
-}
-
-}  // namespace
diff --git a/chrome/browser/platform_util_linux.cc b/chrome/browser/platform_util_linux.cc
index b708dfd..66b8096 100644
--- a/chrome/browser/platform_util_linux.cc
+++ b/chrome/browser/platform_util_linux.cc
@@ -11,7 +11,7 @@
 #include "base/process/launch.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/threading/sequenced_worker_pool.h"
+#include "base/task_scheduler/post_task.h"
 #include "base/version.h"
 #include "chrome/browser/platform_util_internal.h"
 #include "content/public/browser/browser_thread.h"
@@ -160,10 +160,12 @@
 
 void ShowItemInFolder(Profile* profile, const base::FilePath& full_path) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  base::PostTaskAndReplyWithResult(content::BrowserThread::GetBlockingPool(),
-                                   FROM_HERE,
-                                   base::Bind(&CheckNautilusIsDefault),
-                                   base::Bind(&ShowItem, profile, full_path));
+  base::PostTaskWithTraitsAndReplyWithResult(
+      FROM_HERE,
+      {base::WithBaseSyncPrimitives(), base::MayBlock(),
+       base::TaskPriority::USER_BLOCKING},
+      base::BindOnce(&CheckNautilusIsDefault),
+      base::BindOnce(&ShowItem, profile, full_path));
 }
 
 void OpenExternal(Profile* profile, const GURL& url) {
diff --git a/chrome/browser/policy/DEPS b/chrome/browser/policy/DEPS
index 382e9d0..9201916e 100644
--- a/chrome/browser/policy/DEPS
+++ b/chrome/browser/policy/DEPS
@@ -8,3 +8,12 @@
   "+content/public/common",
   "+content/public/test",
 ]
+specific_include_rules = {
+  # TODO(mash): Remove. http://crbug.com/723876
+  "configuration_policy_handler_list_factory\.cc": [
+    "+ash/accessibility_types.h",
+  ],
+  "policy_browsertest\.cc": [
+    "+ash",
+  ]
+}
diff --git a/chrome/browser/prerender/prerender_history.cc b/chrome/browser/prerender/prerender_history.cc
index ce41a08..5b7f0d5 100644
--- a/chrome/browser/prerender/prerender_history.cc
+++ b/chrome/browser/prerender/prerender_history.cc
@@ -20,10 +20,11 @@
 }
 
 PrerenderHistory::~PrerenderHistory() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 }
 
 void PrerenderHistory::AddEntry(const Entry& entry) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   while (entries_.size() >= max_items_)
     entries_.pop_front();
   entries_.push_back(entry);
diff --git a/chrome/browser/prerender/prerender_history.h b/chrome/browser/prerender/prerender_history.h
index 228687a..a5cc6ffa0 100644
--- a/chrome/browser/prerender/prerender_history.h
+++ b/chrome/browser/prerender/prerender_history.h
@@ -10,7 +10,7 @@
 #include <list>
 
 #include "base/macros.h"
-#include "base/threading/non_thread_safe.h"
+#include "base/sequence_checker.h"
 #include "base/time/time.h"
 #include "chrome/browser/prerender/prerender_final_status.h"
 #include "chrome/browser/prerender/prerender_origin.h"
@@ -25,7 +25,7 @@
 // PrerenderHistory maintains a per-session history of prerendered pages
 // and their final dispositions. It has a fixed maximum capacity, and old
 // items in history will be removed when the capacity is reached.
-class PrerenderHistory : public base::NonThreadSafe {
+class PrerenderHistory {
  public:
   // Entry is an individual entry in the history list. It corresponds to a
   // specific prerendered page.
@@ -74,6 +74,8 @@
   std::list<Entry> entries_;
   size_t max_items_;
 
+  SEQUENCE_CHECKER(sequence_checker_);
+
   DISALLOW_COPY_AND_ASSIGN(PrerenderHistory);
 };
 
diff --git a/chrome/browser/renderer_context_menu/DEPS b/chrome/browser/renderer_context_menu/DEPS
new file mode 100644
index 0000000..dc9a2d7
--- /dev/null
+++ b/chrome/browser/renderer_context_menu/DEPS
@@ -0,0 +1,6 @@
+include_rules = [
+  # TODO(mash): Remove. http://crbug.com/724142
+  "+ash/link_handler_model.h",
+  "+ash/link_handler_model_factory.h",
+  "+ash/shell.h",
+]
diff --git a/chrome/browser/resources/chromeos/arc_support/background.js b/chrome/browser/resources/chromeos/arc_support/background.js
index 09ebafd3..d3a1415c 100644
--- a/chrome/browser/resources/chromeos/arc_support/background.js
+++ b/chrome/browser/resources/chromeos/arc_support/background.js
@@ -46,7 +46,7 @@
  * Host window inner default height.
  * @const {number}
  */
-var INNER_HEIGHT = 688;
+var INNER_HEIGHT = 687;
 
 
 /**
diff --git a/chrome/browser/resources/chromeos/arc_support/main.css b/chrome/browser/resources/chromeos/arc_support/main.css
index e2226be..b51331b 100644
--- a/chrome/browser/resources/chromeos/arc_support/main.css
+++ b/chrome/browser/resources/chromeos/arc_support/main.css
@@ -65,8 +65,8 @@
 }
 
 .content {
-  /* Default window inner height (688px) minus image caption height (300px) */
-  height: 388px;
+  /* Default window inner height (687px) minus image caption height (300px) */
+  height: 387px;
   margin: 0;
   padding: 0;
 }
diff --git a/chrome/browser/search/search.cc b/chrome/browser/search/search.cc
index e0bd3d89..31d91601 100644
--- a/chrome/browser/search/search.cc
+++ b/chrome/browser/search/search.cc
@@ -135,8 +135,10 @@
     return false;
 
   const GURL new_tab_url(GetNewTabPageURL(profile));
-  if (new_tab_url.is_valid() && MatchesOriginAndPath(url, new_tab_url))
+  if (new_tab_url.is_valid() && (MatchesOriginAndPath(url, new_tab_url) ||
+                                 IsMatchingServiceWorker(url, new_tab_url))) {
     return true;
+  }
 
   const TemplateURL* template_url =
       GetDefaultSearchProviderTemplateURL(profile);
@@ -420,7 +422,8 @@
   std::string remote_ntp_host(chrome::kChromeSearchRemoteNtpHost);
   NewTabURLDetails details = NewTabURLDetails::ForProfile(profile);
   if (details.state == NEW_TAB_URL_VALID &&
-      MatchesOriginAndPath(url, details.url)) {
+      (MatchesOriginAndPath(url, details.url) ||
+       IsMatchingServiceWorker(url, details.url))) {
     replacements.SetHost(remote_ntp_host.c_str(),
                          url::Component(0, remote_ntp_host.length()));
   }
diff --git a/chrome/browser/search/search_unittest.cc b/chrome/browser/search/search_unittest.cc
index a99098d..0f3f5db 100644
--- a/chrome/browser/search/search_unittest.cc
+++ b/chrome/browser/search/search_unittest.cc
@@ -532,18 +532,21 @@
   // No margin.
   profile()->GetPrefs()->SetBoolean(prefs::kSearchSuggestEnabled, true);
   GURL remote_ntp_url(GetInstantURL(profile(), false));
+  GURL remote_ntp_service_worker_url("https://foo.com/newtab-serviceworker.js");
   GURL search_url_with_search_terms("https://foo.com/url?strk&bar=abc");
   GURL search_url_without_search_terms("https://foo.com/url?strk&bar");
 
   EXPECT_FALSE(IsNTPURL(ntp_url, profile()));
   EXPECT_TRUE(IsNTPURL(local_ntp_url, profile()));
   EXPECT_TRUE(IsNTPURL(remote_ntp_url, profile()));
+  EXPECT_TRUE(IsNTPURL(remote_ntp_service_worker_url, profile()));
   EXPECT_FALSE(IsNTPURL(search_url_with_search_terms, profile()));
   EXPECT_FALSE(IsNTPURL(search_url_without_search_terms, profile()));
 
   EXPECT_FALSE(IsNTPURL(ntp_url, NULL));
   EXPECT_FALSE(IsNTPURL(local_ntp_url, NULL));
   EXPECT_FALSE(IsNTPURL(remote_ntp_url, NULL));
+  EXPECT_FALSE(IsNTPURL(remote_ntp_service_worker_url, NULL));
   EXPECT_FALSE(IsNTPURL(search_url_with_search_terms, NULL));
   EXPECT_FALSE(IsNTPURL(search_url_without_search_terms, NULL));
 }
diff --git a/chrome/browser/signin/DEPS b/chrome/browser/signin/DEPS
new file mode 100644
index 0000000..392e891
--- /dev/null
+++ b/chrome/browser/signin/DEPS
@@ -0,0 +1,7 @@
+include_rules = [
+  # TODO(mash): Remove. http://crbug.com/724143
+  "+ash/shell.h",
+  "+ash/system/devicetype_utils.h",
+  "+ash/system/system_notifier.h",
+  "+ash/test/ash_test_base.h",
+]
diff --git a/chrome/browser/sync/DEPS b/chrome/browser/sync/DEPS
index 88800dc5..a2eaea2 100644
--- a/chrome/browser/sync/DEPS
+++ b/chrome/browser/sync/DEPS
@@ -5,3 +5,14 @@
   "+components/sync_wifi",
   "+google/cacheinvalidation",
 ]
+specific_include_rules = {
+  "sync_error_notifier_ash\.cc": [
+    "+ash/system/system_notifier.h",
+  ],
+  "sync_error_notifier_factory_ash\.cc": [
+    "+ash/shell.h",
+  ],
+  ".*_unittest\.cc": [
+    "+ash/test/ash_test_base.h",
+  ]
+}
diff --git a/chrome/browser/ui/DEPS b/chrome/browser/ui/DEPS
index a187263..7f89d23 100644
--- a/chrome/browser/ui/DEPS
+++ b/chrome/browser/ui/DEPS
@@ -1,4 +1,6 @@
 include_rules = [
+  # TODO(mash): Remove. http://crbug.com/678705
+  "+ash",
   "+components/bubble",
   "+components/favicon/core",
   "+components/flags_ui",
diff --git a/chrome/browser/ui/app_list/arc/arc_app_icon.cc b/chrome/browser/ui/app_list/arc/arc_app_icon.cc
index 1d3a7b5..18bbb75 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_icon.cc
+++ b/chrome/browser/ui/app_list/arc/arc_app_icon.cc
@@ -245,7 +245,8 @@
                        int resource_size_in_dip,
                        Observer* observer)
     : context_(context),
-      app_id_(GetAppFromAppOrGroupId(context, app_id)),
+      app_id_(app_id),
+      mapped_app_id_(GetAppFromAppOrGroupId(context, app_id)),
       resource_size_in_dip_(resource_size_in_dip),
       observer_(observer),
       weak_ptr_factory_(this) {
@@ -261,19 +262,20 @@
 void ArcAppIcon::LoadForScaleFactor(ui::ScaleFactor scale_factor) {
   // We provide Play Store icon from Chrome resources and it is not expected
   // that we have external load request.
-  DCHECK_NE(app_id_, arc::kPlayStoreAppId);
+  DCHECK_NE(app_id(), arc::kPlayStoreAppId);
 
   const ArcAppListPrefs* const prefs = ArcAppListPrefs::Get(context_);
   DCHECK(prefs);
 
-  const base::FilePath path = prefs->GetIconPath(app_id_, scale_factor);
+  const base::FilePath path = prefs->GetIconPath(mapped_app_id_, scale_factor);
   if (path.empty())
     return;
 
   base::PostTaskWithTraitsAndReplyWithResult(
       FROM_HERE, {base::MayBlock(), base::TaskPriority::BACKGROUND},
-      base::Bind(&ArcAppIcon::ReadOnFileThread, scale_factor, path,
-                 prefs->MaybeGetIconPathForDefaultApp(app_id_, scale_factor)),
+      base::Bind(
+          &ArcAppIcon::ReadOnFileThread, scale_factor, path,
+          prefs->MaybeGetIconPathForDefaultApp(mapped_app_id_, scale_factor)),
       base::Bind(&ArcAppIcon::OnIconRead, weak_ptr_factory_.GetWeakPtr()));
 }
 
@@ -285,7 +287,7 @@
   // ArcAppListPrefs notifies ArcAppModelBuilder via Observer when icon is ready
   // and ArcAppModelBuilder refreshes the icon of the corresponding item by
   // calling LoadScaleFactor.
-  prefs->MaybeRequestIcon(app_id_, scale_factor);
+  prefs->MaybeRequestIcon(mapped_app_id_, scale_factor);
 }
 
 // static
diff --git a/chrome/browser/ui/app_list/arc/arc_app_icon.h b/chrome/browser/ui/app_list/arc/arc_app_icon.h
index 0354b22..eb68f101 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_icon.h
+++ b/chrome/browser/ui/app_list/arc/arc_app_icon.h
@@ -94,10 +94,13 @@
   void Update(ui::ScaleFactor scale_factor, const SkBitmap& bitmap);
   void DiscardDecodeRequest(DecodeRequest* request);
 
-  content::BrowserContext* context_;
-  std::string app_id_;
+  content::BrowserContext* const context_;
+  const std::string app_id_;
+  // Contains app id that is actually used to read an icon resource to support
+  // shelf group mapping to shortcut.
+  const std::string mapped_app_id_;
   const int resource_size_in_dip_;
-  Observer* observer_;
+  Observer* const observer_;
 
   Source* source_ = nullptr;  // Owned by ImageSkia storage.
   gfx::ImageSkia image_skia_;
diff --git a/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc b/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc
index 12ef2a9..82dfdfe 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc
+++ b/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc
@@ -362,6 +362,8 @@
 
 void ArcAppListPrefs::RequestIcon(const std::string& app_id,
                                   ui::ScaleFactor scale_factor) {
+  DCHECK_NE(app_id, arc::kPlayStoreAppId);
+
   // ArcSessionManager can be terminated during test tear down, before callback
   // into this function.
   // TODO(victorhsieh): figure out the best way/place to handle this situation.
@@ -1101,10 +1103,13 @@
     const std::string app_id = GetAppId(app->package_name, app->activity);
     apps_to_remove.erase(app_id);
 
-    // Mark app icons as invalidated.
-    ScopedArcPrefUpdate update(prefs_, app_id, prefs::kArcApps);
-    base::DictionaryValue* app_dict = update.Get();
-    app_dict->SetInteger(kInvalidatedIcons, invalidated_icon_mask);
+    // Mark app icons as invalidated. Ignore Play Store app since we provide its
+    // icon in Chrome resources.
+    if (app_id != arc::kPlayStoreAppId) {
+      ScopedArcPrefUpdate update(prefs_, app_id, prefs::kArcApps);
+      base::DictionaryValue* app_dict = update.Get();
+      app_dict->SetInteger(kInvalidatedIcons, invalidated_icon_mask);
+    }
 
     AddApp(*app);
   }
diff --git a/chrome/browser/ui/app_list/arc/arc_app_unittest.cc b/chrome/browser/ui/app_list/arc/arc_app_unittest.cc
index b88e072..bd91c22 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_unittest.cc
+++ b/chrome/browser/ui/app_list/arc/arc_app_unittest.cc
@@ -1200,23 +1200,26 @@
 
   // Shortcut exists, icon is requested from shortcut.
   icon_loader.FetchImage(id_shortcut_exist);
-  EXPECT_EQ(1UL, delegate.update_image_cnt());
+  // Icon was sent on request and loader should be updated.
+  delegate.WaitForIconUpdates(ui::GetSupportedScaleFactors().size());
   EXPECT_EQ(id_shortcut_exist, delegate.app_id());
+
   content::RunAllBlockingPoolTasksUntilIdle();
   const size_t shortcut_request_cnt =
       app_instance()->shortcut_icon_requests().size();
   EXPECT_NE(0U, shortcut_request_cnt);
   EXPECT_EQ(initial_icon_request_count, app_instance()->icon_requests().size());
-  for (const auto& request : app_instance()->shortcut_icon_requests()) {
+  for (const auto& request : app_instance()->shortcut_icon_requests())
     EXPECT_EQ(shortcuts[0].icon_resource_id, request->icon_resource_id());
-  }
 
   // Fallback when shortcut is not found for shelf group id, use app id instead.
   // Remove the IconRequestRecord for |app_id| to observe the icon request for
   // |app_id| is re-sent.
+  const size_t update_image_count_before = delegate.update_image_cnt();
   MaybeRemoveIconRequestRecord(app_id);
   icon_loader.FetchImage(id_shortcut_absent);
-  EXPECT_EQ(2UL, delegate.update_image_cnt());
+  // Expected default update.
+  EXPECT_EQ(update_image_count_before + 1, delegate.update_image_cnt());
   content::RunAllBlockingPoolTasksUntilIdle();
   EXPECT_TRUE(app_instance()->icon_requests().size() >
               initial_icon_request_count);
diff --git a/chrome/browser/ui/ash/chrome_shell_delegate.cc b/chrome/browser/ui/ash/chrome_shell_delegate.cc
index dd8d124..031e2df 100644
--- a/chrome/browser/ui/ash/chrome_shell_delegate.cc
+++ b/chrome/browser/ui/ash/chrome_shell_delegate.cc
@@ -449,8 +449,8 @@
 }
 
 void ChromeShellDelegate::PreInit() {
-  // TODO: port to mus. http://crbug.com/678949.
-  if (chromeos::GetAshConfig() != ash::Config::CLASSIC)
+  // TODO: port to mash. http://crbug.com/678949.
+  if (chromeos::GetAshConfig() == ash::Config::MASH)
     return;
 
   bool first_run_after_boot = base::CommandLine::ForCurrentProcess()->HasSwitch(
diff --git a/chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm b/chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm
index de3d6668..d307900 100644
--- a/chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm
+++ b/chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm
@@ -829,19 +829,9 @@
      (cmd == @selector(noop:) &&
       ([event type] == NSKeyDown || [event type] == NSKeyUp) &&
       [event keyCode] == kVK_Return)) {
-    // If the user hasn't entered any text in keyword search mode, we need to
-    // return early in order to avoid cancelling the search.
-    if (GetTextLength() == 0)
-      return true;
-
     WindowOpenDisposition disposition =
         ui::WindowOpenDispositionFromNSEvent(event);
     model()->AcceptInput(disposition, false);
-    // Opening a URL in a background tab should also revert the omnibox contents
-    // to their original state.  We cannot do a blanket revert in OpenURL()
-    // because middle-clicks also open in a new background tab, but those should
-    // not revert the omnibox text.
-    RevertAll();
     return true;
   }
 
diff --git a/chrome/browser/ui/views/download/download_item_view.cc b/chrome/browser/ui/views/download/download_item_view.cc
index bbd9a69..70778160 100644
--- a/chrome/browser/ui/views/download/download_item_view.cc
+++ b/chrome/browser/ui/views/download/download_item_view.cc
@@ -173,7 +173,7 @@
       creation_time_(base::Time::Now()),
       time_download_warning_shown_(base::Time()),
       weak_ptr_factory_(this) {
-  SetInkDropMode(InkDropMode::ON);
+  SetInkDropMode(InkDropMode::ON_NO_GESTURE_HANDLER);
   DCHECK(download());
   download()->AddObserver(this);
   set_context_menu_controller(this);
@@ -837,6 +837,8 @@
   static_cast<views::internal::RootView*>(GetWidget()->GetRootView())
       ->SetMouseHandler(nullptr);
 
+  AnimateInkDrop(views::InkDropState::HIDDEN, nullptr);
+
   if (!context_menu_.get())
     context_menu_.reset(new DownloadShelfContextMenuView(this));
   context_menu_->Run(GetWidget()->GetTopLevelWidget(), rect, source_type,
diff --git a/chrome/browser/ui/webui/net_export_ui.cc b/chrome/browser/ui/webui/net_export_ui.cc
index be80d2063..84922b4 100644
--- a/chrome/browser/ui/webui/net_export_ui.cc
+++ b/chrome/browser/ui/webui/net_export_ui.cc
@@ -51,29 +51,6 @@
 
 namespace {
 
-class ProxyScriptFetcherContextGetter : public net::URLRequestContextGetter {
- public:
-  explicit ProxyScriptFetcherContextGetter(IOThread* io_thread)
-      : io_thread_(io_thread) {}
-
-  net::URLRequestContext* GetURLRequestContext() override {
-    DCHECK_CURRENTLY_ON(BrowserThread::IO);
-    DCHECK(io_thread_->globals()->proxy_script_fetcher_context.get());
-    return io_thread_->globals()->proxy_script_fetcher_context.get();
-  }
-
-  scoped_refptr<base::SingleThreadTaskRunner> GetNetworkTaskRunner()
-      const override {
-    return BrowserThread::GetTaskRunnerForThread(BrowserThread::IO);
-  }
-
- protected:
-  ~ProxyScriptFetcherContextGetter() override {}
-
- private:
-  IOThread* const io_thread_;  // Owned by BrowserProcess.
-};
-
 // May only be accessed on the UI thread
 base::LazyInstance<base::FilePath>::Leaky
     last_save_dir = LAZY_INSTANCE_INITIALIZER;
@@ -399,8 +376,6 @@
           ->GetMediaURLRequestContext());
   context_getters.push_back(
       g_browser_process->io_thread()->system_url_request_context_getter());
-  context_getters.push_back(
-      new ProxyScriptFetcherContextGetter(g_browser_process->io_thread()));
 
   return context_getters;
 }
diff --git a/chrome/browser/ui/webui/net_internals/net_internals_ui.cc b/chrome/browser/ui/webui/net_internals/net_internals_ui.cc
index 2fa6e2a..460936d9 100644
--- a/chrome/browser/ui/webui/net_internals/net_internals_ui.cc
+++ b/chrome/browser/ui/webui/net_internals/net_internals_ui.cc
@@ -1027,7 +1027,6 @@
   std::set<net::URLRequestContext*> contexts;
   for (const auto& getter : context_getters_)
     contexts.insert(getter->GetURLRequestContext());
-  contexts.insert(io_thread_->globals()->proxy_script_fetcher_context.get());
   contexts.insert(io_thread_->globals()->system_request_context.get());
 
   // Add entries for ongoing network objects.
diff --git a/chrome/browser/usb/DEPS b/chrome/browser/usb/DEPS
index 6d9fc40f..35443a2 100644
--- a/chrome/browser/usb/DEPS
+++ b/chrome/browser/usb/DEPS
@@ -1,4 +1,6 @@
 include_rules = [
+  # TODO(mash): Remove. http://crbug.com/724149
+  "+ash/system/system_notifier.h",
   "+chrome/browser/ui",
   "+components/bubble",
   "+device/base",
diff --git a/chrome/common/search/search_urls.cc b/chrome/common/search/search_urls.cc
index eb32d38..574a7d99 100644
--- a/chrome/common/search/search_urls.cc
+++ b/chrome/common/search/search_urls.cc
@@ -10,6 +10,9 @@
 namespace search {
 
 namespace {
+
+const char kServiceWorkerFileName[] = "newtab-serviceworker.js";
+
 bool MatchesOrigin(const GURL& my_url, const GURL& other_url) {
   return my_url.host_piece() == other_url.host_piece() &&
          my_url.port() == other_url.port() &&
@@ -17,6 +20,7 @@
           (my_url.SchemeIs(url::kHttpsScheme) &&
            other_url.SchemeIs(url::kHttpScheme)));
 }
+
 }  // namespace
 
 bool MatchesOriginAndPath(const GURL& my_url, const GURL& other_url) {
@@ -24,4 +28,26 @@
          my_url.path_piece() == other_url.path_piece();
 }
 
+bool IsMatchingServiceWorker(const GURL& my_url, const GURL& document_url) {
+  // The origin should match.
+  if (!MatchesOrigin(my_url, document_url))
+    return false;
+
+  // The url filename should be the new tab page ServiceWorker.
+  std::string my_filename = my_url.ExtractFileName();
+  if (my_filename != kServiceWorkerFileName)
+    return false;
+
+  // The paths up to the filenames should be the same.
+  std::string my_path_without_filename = my_url.path();
+  my_path_without_filename = my_path_without_filename.substr(
+      0, my_path_without_filename.length() - my_filename.length());
+  std::string document_filename = document_url.ExtractFileName();
+  std::string document_path_without_filename = document_url.path();
+  document_path_without_filename = document_path_without_filename.substr(
+      0, document_path_without_filename.length() - document_filename.length());
+
+  return my_path_without_filename == document_path_without_filename;
+}
+
 } // namespace search
diff --git a/chrome/common/search/search_urls.h b/chrome/common/search/search_urls.h
index 43f1527..0ad0bf7 100644
--- a/chrome/common/search/search_urls.h
+++ b/chrome/common/search/search_urls.h
@@ -16,6 +16,8 @@
 // default search provider URL is "http://".
 bool MatchesOriginAndPath(const GURL& my_url, const GURL& other_url);
 
+bool IsMatchingServiceWorker(const GURL& my_url, const GURL& document_url);
+
 }  // namespace search
 
 #endif  // CHROME_COMMON_SEARCH_SEARCH_URLS_H_
diff --git a/chrome/renderer/media/chrome_webrtc_log_message_delegate.cc b/chrome/renderer/media/chrome_webrtc_log_message_delegate.cc
index 963cbdc..5600a9f 100644
--- a/chrome/renderer/media/chrome_webrtc_log_message_delegate.cc
+++ b/chrome/renderer/media/chrome_webrtc_log_message_delegate.cc
@@ -19,7 +19,7 @@
 }
 
 ChromeWebRtcLogMessageDelegate::~ChromeWebRtcLogMessageDelegate() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 }
 
 void ChromeWebRtcLogMessageDelegate::LogMessage(const std::string& message) {
@@ -34,7 +34,7 @@
 
 void ChromeWebRtcLogMessageDelegate::LogMessageOnIOThread(
     const WebRtcLoggingMessageData& message) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   if (logging_started_ && message_filter_) {
     if (!log_buffer_.empty()) {
@@ -60,18 +60,18 @@
 }
 
 void ChromeWebRtcLogMessageDelegate::OnFilterRemoved() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   message_filter_ = NULL;
 }
 
 void ChromeWebRtcLogMessageDelegate::OnStartLogging() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   logging_started_ = true;
   content::InitWebRtcLogging();
 }
 
 void ChromeWebRtcLogMessageDelegate::OnStopLogging() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (!log_buffer_.empty())
     SendLogBuffer();
   if (message_filter_)
@@ -80,7 +80,7 @@
 }
 
 void ChromeWebRtcLogMessageDelegate::SendLogBuffer() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (logging_started_ && message_filter_) {
     message_filter_->AddLogMessages(log_buffer_);
     last_log_buffer_send_ = base::TimeTicks::Now();
diff --git a/chrome/renderer/media/chrome_webrtc_log_message_delegate.h b/chrome/renderer/media/chrome_webrtc_log_message_delegate.h
index 0b518b83..db228e8 100644
--- a/chrome/renderer/media/chrome_webrtc_log_message_delegate.h
+++ b/chrome/renderer/media/chrome_webrtc_log_message_delegate.h
@@ -8,6 +8,7 @@
 #include <string>
 
 #include "base/macros.h"
+#include "base/sequence_checker.h"
 #include "chrome/common/media/webrtc_logging_message_data.h"
 #include "content/public/renderer/webrtc_log_message_delegate.h"
 #include "ipc/ipc_channel_proxy.h"
@@ -23,8 +24,7 @@
 // WebRtcLoggingHandlerHost and receives logging messages from libjingle and
 // writes them to a shared memory buffer.
 class ChromeWebRtcLogMessageDelegate
-    : public content::WebRtcLogMessageDelegate,
-      public base::NonThreadSafe {
+    : public content::WebRtcLogMessageDelegate {
  public:
   ChromeWebRtcLogMessageDelegate(
       const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner,
@@ -52,6 +52,8 @@
 
   WebRtcLoggingMessageFilter* message_filter_;
 
+  SEQUENCE_CHECKER(sequence_checker_);
+
   DISALLOW_COPY_AND_ASSIGN(ChromeWebRtcLogMessageDelegate);
 };
 
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 692da7f..5609bdf 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -1456,6 +1456,7 @@
       "../browser/interstitials/security_interstitial_page_test_utils.cc",
       "../browser/interstitials/security_interstitial_page_test_utils.h",
       "../browser/invalidation/profile_invalidation_provider_factory_browsertest.cc",
+      "../browser/io_thread_browsertest.cc",
       "../browser/lifetime/browser_close_manager_browsertest.cc",
       "../browser/loader/chrome_resource_dispatcher_host_delegate_browsertest.cc",
       "../browser/loadtimes_extension_bindings_browsertest.cc",
@@ -3017,6 +3018,7 @@
     "../browser/component_updater/subresource_filter_component_installer_unittest.cc",
     "../browser/component_updater/supervised_user_whitelist_installer_unittest.cc",
     "../browser/component_updater/sw_reporter_installer_win_unittest.cc",
+    "../browser/conflicts/installed_programs_win_unittest.cc",
     "../browser/conflicts/module_database_win_unittest.cc",
     "../browser/conflicts/module_event_sink_impl_win_unittest.cc",
     "../browser/conflicts/module_info_util_win_unittest.cc",
@@ -3168,11 +3170,9 @@
     "../browser/page_load_metrics/user_input_tracker_unittest.cc",
     "../browser/password_manager/chrome_password_manager_client_unittest.cc",
     "../browser/password_manager/password_manager_internals_service_unittest.cc",
-    "../browser/password_manager/password_store_mac_unittest.cc",
     "../browser/password_manager/password_store_proxy_mac_unittest.cc",
     "../browser/password_manager/password_store_win_unittest.cc",
     "../browser/password_manager/password_store_x_unittest.cc",
-    "../browser/password_manager/simple_password_store_mac_unittest.cc",
     "../browser/permissions/chooser_context_base_unittest.cc",
     "../browser/permissions/permission_context_base_unittest.cc",
     "../browser/permissions/permission_decision_auto_blocker_unittest.cc",
diff --git a/components/BUILD.gn b/components/BUILD.gn
index 0c176a8e..1deb2cad 100644
--- a/components/BUILD.gn
+++ b/components/BUILD.gn
@@ -5,7 +5,6 @@
 import("//build/config/chrome_build.gni")
 import("//build/config/features.gni")
 import("//build/config/ui.gni")
-import("//extensions/features/features.gni")
 import("//printing/features/features.gni")
 import("//rlz/features/features.gni")
 import("//testing/test.gni")
@@ -161,10 +160,6 @@
     deps += [ "//components/nacl/browser:unit_tests" ]
   }
 
-  if (enable_extensions) {
-    deps += [ "//components/guest_view/browser:unit_tests" ]
-  }
-
   if (is_ios) {
     deps += [
       "//components/image_fetcher/ios:unit_tests",
@@ -281,6 +276,10 @@
     deps += [
       "//components/cryptauth:unit_tests",
       "//components/feedback:unit_tests",
+
+      # See comment in components/guest_view/browser/BUILD.gn for why
+      # guest_view is currently non-mobile.
+      "//components/guest_view/browser:unit_tests",
       "//components/proximity_auth:unit_tests",
       "//components/storage_monitor:unit_tests",
       "//components/web_modal:unit_tests",
diff --git a/components/bookmarks/browser/startup_task_runner_service.cc b/components/bookmarks/browser/startup_task_runner_service.cc
index 5b9b7413..117bb1b 100644
--- a/components/bookmarks/browser/startup_task_runner_service.cc
+++ b/components/bookmarks/browser/startup_task_runner_service.cc
@@ -17,11 +17,12 @@
 }
 
 StartupTaskRunnerService::~StartupTaskRunnerService() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 }
 
 scoped_refptr<base::DeferredSequencedTaskRunner>
     StartupTaskRunnerService::GetBookmarkTaskRunner() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (!bookmark_task_runner_) {
     bookmark_task_runner_ =
         new base::DeferredSequencedTaskRunner(io_task_runner_);
diff --git a/components/bookmarks/browser/startup_task_runner_service.h b/components/bookmarks/browser/startup_task_runner_service.h
index b39819a..aed0e88f 100644
--- a/components/bookmarks/browser/startup_task_runner_service.h
+++ b/components/bookmarks/browser/startup_task_runner_service.h
@@ -7,7 +7,7 @@
 
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/threading/non_thread_safe.h"
+#include "base/sequence_checker.h"
 #include "components/keyed_service/core/keyed_service.h"
 
 namespace base {
@@ -18,8 +18,7 @@
 namespace bookmarks {
 
 // This service manages the startup task runners.
-class StartupTaskRunnerService : public base::NonThreadSafe,
-                                 public KeyedService {
+class StartupTaskRunnerService : public KeyedService {
  public:
   explicit StartupTaskRunnerService(
       const scoped_refptr<base::SequencedTaskRunner>& io_task_runner);
@@ -41,6 +40,8 @@
   scoped_refptr<base::SequencedTaskRunner> io_task_runner_;
   scoped_refptr<base::DeferredSequencedTaskRunner> bookmark_task_runner_;
 
+  SEQUENCE_CHECKER(sequence_checker_);
+
   DISALLOW_COPY_AND_ASSIGN(StartupTaskRunnerService);
 };
 
diff --git a/components/captive_portal/captive_portal_detector.cc b/components/captive_portal/captive_portal_detector.cc
index 6ec4df23..a51b8091 100644
--- a/components/captive_portal/captive_portal_detector.cc
+++ b/components/captive_portal/captive_portal_detector.cc
@@ -23,13 +23,14 @@
 }
 
 CaptivePortalDetector::~CaptivePortalDetector() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 }
 
 void CaptivePortalDetector::DetectCaptivePortal(
     const GURL& url,
     const DetectionCallback& detection_callback,
     const net::NetworkTrafficAnnotationTag& traffic_annotation) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(!FetchingURL());
   DCHECK(detection_callback_.is_null());
 
@@ -60,7 +61,7 @@
 }
 
 void CaptivePortalDetector::OnURLFetchComplete(const net::URLFetcher* source) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(FetchingURL());
   DCHECK_EQ(url_fetcher_.get(), source);
   DCHECK(!detection_callback_.is_null());
diff --git a/components/captive_portal/captive_portal_detector.h b/components/captive_portal/captive_portal_detector.h
index e25cd44..b5a2633 100644
--- a/components/captive_portal/captive_portal_detector.h
+++ b/components/captive_portal/captive_portal_detector.h
@@ -11,7 +11,7 @@
 #include "base/compiler_specific.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/threading/non_thread_safe.h"
+#include "base/sequence_checker.h"
 #include "base/time/time.h"
 #include "components/captive_portal/captive_portal_export.h"
 #include "components/captive_portal/captive_portal_types.h"
@@ -25,8 +25,7 @@
 namespace captive_portal {
 
 class CAPTIVE_PORTAL_EXPORT CaptivePortalDetector
-    : public net::URLFetcherDelegate,
-      public base::NonThreadSafe {
+    : public net::URLFetcherDelegate {
  public:
   struct Results {
     Results()
@@ -104,6 +103,8 @@
   // Test time used by unit tests.
   base::Time time_for_testing_;
 
+  SEQUENCE_CHECKER(sequence_checker_);
+
   DISALLOW_COPY_AND_ASSIGN(CaptivePortalDetector);
 };
 
diff --git a/components/cronet/android/BUILD.gn b/components/cronet/android/BUILD.gn
index d7eebe3..c751bd3 100644
--- a/components/cronet/android/BUILD.gn
+++ b/components/cronet/android/BUILD.gn
@@ -1343,6 +1343,7 @@
     "//net/data/ssl/certificates/quic_test.example.com.crt",
     "//net/data/ssl/certificates/quic_test.example.com.key",
     "//net/data/ssl/certificates/quic_test.example.com.key.pkcs8",
+    "//net/data/ssl/certificates/quic_test.example.com.key.pkcs8.pem",
     "//net/data/ssl/certificates/quic_test.example.com.key.sct",
   ]
   outputs = [
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.cc
index 970be81..94e2445 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.cc
@@ -60,14 +60,14 @@
 }
 
 DataReductionProxyService::~DataReductionProxyService() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   compression_stats_.reset();
   db_task_runner_->DeleteSoon(FROM_HERE, db_data_owner_.release());
 }
 
 void DataReductionProxyService::SetIOData(
     base::WeakPtr<DataReductionProxyIOData> io_data) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   io_data_ = io_data;
   initialized_ = true;
   for (DataReductionProxyServiceObserver& observer : observer_list_)
@@ -88,14 +88,14 @@
 }
 
 void DataReductionProxyService::Shutdown() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   weak_factory_.InvalidateWeakPtrs();
 }
 
 void DataReductionProxyService::UpdateDataUseForHost(int64_t network_bytes,
                                                      int64_t original_bytes,
                                                      const std::string& host) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (compression_stats_) {
     compression_stats_->RecordDataUsage(host, original_bytes, network_bytes,
                                         base::Time::Now());
@@ -109,7 +109,7 @@
     DataReductionProxyRequestType request_type,
     scoped_refptr<DataUseGroup> data_use_group,
     const std::string& mime_type) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (compression_stats_) {
     compression_stats_->UpdateContentLengths(
         data_used, original_size, data_reduction_proxy_enabled, request_type,
@@ -118,44 +118,44 @@
 }
 
 void DataReductionProxyService::AddEvent(std::unique_ptr<base::Value> event) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   event_store_->AddEvent(std::move(event));
 }
 
 void DataReductionProxyService::AddEnabledEvent(
     std::unique_ptr<base::Value> event,
     bool enabled) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   event_store_->AddEnabledEvent(std::move(event), enabled);
 }
 
 void DataReductionProxyService::AddEventAndSecureProxyCheckState(
     std::unique_ptr<base::Value> event,
     SecureProxyCheckState state) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   event_store_->AddEventAndSecureProxyCheckState(std::move(event), state);
 }
 
 void DataReductionProxyService::AddAndSetLastBypassEvent(
     std::unique_ptr<base::Value> event,
     int64_t expiration_ticks) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   event_store_->AddAndSetLastBypassEvent(std::move(event), expiration_ticks);
 }
 
 void DataReductionProxyService::SetUnreachable(bool unreachable) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   settings_->SetUnreachable(unreachable);
 }
 
 void DataReductionProxyService::SetLoFiModeActiveOnMainFrame(
     bool lo_fi_mode_active) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   settings_->SetLoFiModeActiveOnMainFrame(lo_fi_mode_active);
 }
 
 void DataReductionProxyService::SetLoFiModeOff() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (io_task_runner_->BelongsToCurrentThread()) {
     io_task_runner_->PostTask(
         FROM_HERE,
@@ -168,7 +168,7 @@
 }
 
 void DataReductionProxyService::InitializeLoFiPrefs() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (!prefs_)
     return;
 
@@ -254,7 +254,7 @@
 }
 
 void DataReductionProxyService::SetProxyPrefs(bool enabled, bool at_startup) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (io_task_runner_->BelongsToCurrentThread()) {
     io_data_->SetProxyPrefs(enabled, at_startup);
     return;
@@ -266,7 +266,7 @@
 
 void DataReductionProxyService::SetPingbackReportingFraction(
     float pingback_reporting_fraction) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   pingback_client_->SetPingbackReportingFraction(pingback_reporting_fraction);
 }
 
@@ -317,24 +317,24 @@
 
 void DataReductionProxyService::AddObserver(
     DataReductionProxyServiceObserver* observer) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   observer_list_.AddObserver(observer);
 }
 
 void DataReductionProxyService::RemoveObserver(
     DataReductionProxyServiceObserver* observer) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   observer_list_.RemoveObserver(observer);
 }
 
 bool DataReductionProxyService::Initialized() const {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   return initialized_;
 }
 
 base::WeakPtr<DataReductionProxyService>
 DataReductionProxyService::GetWeakPtr() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   return weak_factory_.GetWeakPtr();
 }
 
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.h b/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.h
index 077f0d20..040605e2 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.h
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.h
@@ -16,7 +16,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
-#include "base/threading/non_thread_safe.h"
+#include "base/sequence_checker.h"
 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_metrics.h"
 #include "components/data_reduction_proxy/core/browser/db_data_owner.h"
 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_event_storage_delegate.h"
@@ -47,8 +47,7 @@
 // Contains and initializes all Data Reduction Proxy objects that have a
 // lifetime based on the UI thread.
 class DataReductionProxyService
-    : public base::NonThreadSafe,
-      public DataReductionProxyEventStorageDelegate {
+    : public DataReductionProxyEventStorageDelegate {
  public:
   // The caller must ensure that |settings|, |prefs|, |request_context|, and
   // |io_task_runner| remain alive for the lifetime of the
@@ -204,6 +203,8 @@
 
   bool initialized_;
 
+  SEQUENCE_CHECKER(sequence_checker_);
+
   base::WeakPtrFactory<DataReductionProxyService> weak_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(DataReductionProxyService);
diff --git a/components/guest_view/browser/BUILD.gn b/components/guest_view/browser/BUILD.gn
index 6430459..96b43908 100644
--- a/components/guest_view/browser/BUILD.gn
+++ b/components/guest_view/browser/BUILD.gn
@@ -2,9 +2,11 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-import("//extensions/features/features.gni")
-
-assert(enable_extensions)
+# Currently, GuestViews are only used by extensions, so we have this
+# assert to prevent the accidental building of GuestViews on mobile
+# platforms. If you're now using GuestViews on mobile, go ahead and
+# remove this assert.
+assert(!is_android && !is_ios)
 
 static_library("browser") {
   output_name = "guest_view_browser"
diff --git a/components/guest_view/renderer/BUILD.gn b/components/guest_view/renderer/BUILD.gn
index 479bdef0..f3d79c7 100644
--- a/components/guest_view/renderer/BUILD.gn
+++ b/components/guest_view/renderer/BUILD.gn
@@ -2,9 +2,11 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-import("//extensions/features/features.gni")
-
-assert(enable_extensions)
+# Currently, GuestViews are only used by extensions, so we have this
+# assert to prevent the accidental building of GuestViews on mobile
+# platforms. If you're now using GuestViews on mobile, go ahead and
+# remove this assert.
+assert(!is_android && !is_ios)
 
 static_library("renderer") {
   sources = [
diff --git a/components/password_manager/core/browser/BUILD.gn b/components/password_manager/core/browser/BUILD.gn
index 29296da3..056d7d6 100644
--- a/components/password_manager/core/browser/BUILD.gn
+++ b/components/password_manager/core/browser/BUILD.gn
@@ -122,8 +122,8 @@
     "sql_table_builder.h",
     "statistics_table.cc",
     "statistics_table.h",
-    "suppressed_https_form_fetcher.cc",
-    "suppressed_https_form_fetcher.h",
+    "suppressed_form_fetcher.cc",
+    "suppressed_form_fetcher.h",
     "test_affiliation_fetcher_factory.h",
     "webdata/logins_table.cc",
     "webdata/logins_table.h",
@@ -322,7 +322,7 @@
     "psl_matching_helper_unittest.cc",
     "sql_table_builder_unittest.cc",
     "statistics_table_unittest.cc",
-    "suppressed_https_form_fetcher_unittest.cc",
+    "suppressed_form_fetcher_unittest.cc",
   ]
   if (is_mac) {
     sources -= [ "password_store_default_unittest.cc" ]
diff --git a/components/password_manager/core/browser/fake_form_fetcher.cc b/components/password_manager/core/browser/fake_form_fetcher.cc
index d5652e7..7e7911c 100644
--- a/components/password_manager/core/browser/fake_form_fetcher.cc
+++ b/components/password_manager/core/browser/fake_form_fetcher.cc
@@ -42,8 +42,18 @@
   return suppressed_https_forms_;
 }
 
-bool FakeFormFetcher::DidCompleteQueryingSuppressedHTTPSForms() const {
-  return did_complete_querying_suppressed_https_forms_;
+const std::vector<const autofill::PasswordForm*>&
+FakeFormFetcher::GetSuppressedPSLMatchingForms() const {
+  return suppressed_psl_matching_forms_;
+}
+
+const std::vector<const autofill::PasswordForm*>&
+FakeFormFetcher::GetSuppressedSameOrganizationNameForms() const {
+  return suppressed_same_organization_name_forms_;
+}
+
+bool FakeFormFetcher::DidCompleteQueryingSuppressedForms() const {
+  return did_complete_querying_suppressed_forms_;
 }
 
 void FakeFormFetcher::SetNonFederated(
diff --git a/components/password_manager/core/browser/fake_form_fetcher.h b/components/password_manager/core/browser/fake_form_fetcher.h
index defdc60c..d7c64a32 100644
--- a/components/password_manager/core/browser/fake_form_fetcher.h
+++ b/components/password_manager/core/browser/fake_form_fetcher.h
@@ -65,10 +65,28 @@
     suppressed_https_forms_ = suppressed_forms;
   }
 
-  bool DidCompleteQueryingSuppressedHTTPSForms() const override;
+  const std::vector<const autofill::PasswordForm*>&
+  GetSuppressedPSLMatchingForms() const override;
 
-  void set_did_complete_querying_suppressed_https_forms(bool value) {
-    did_complete_querying_suppressed_https_forms_ = value;
+  // The pointees in |suppressed_forms| must outlive the fetcher.
+  void set_suppressed_psl_matching_forms(
+      const std::vector<const autofill::PasswordForm*>& suppressed_forms) {
+    suppressed_psl_matching_forms_ = suppressed_forms;
+  }
+
+  const std::vector<const autofill::PasswordForm*>&
+  GetSuppressedSameOrganizationNameForms() const override;
+
+  // The pointees in |suppressed_forms| must outlive the fetcher.
+  void set_suppressed_same_organization_name_forms(
+      const std::vector<const autofill::PasswordForm*>& suppressed_forms) {
+    suppressed_same_organization_name_forms_ = suppressed_forms;
+  }
+
+  bool DidCompleteQueryingSuppressedForms() const override;
+
+  void set_did_complete_querying_suppressed_forms(bool value) {
+    did_complete_querying_suppressed_forms_ = value;
   }
 
   void SetNonFederated(
@@ -87,7 +105,10 @@
   std::vector<InteractionsStats> stats_;
   std::vector<const autofill::PasswordForm*> federated_;
   std::vector<const autofill::PasswordForm*> suppressed_https_forms_;
-  bool did_complete_querying_suppressed_https_forms_ = false;
+  std::vector<const autofill::PasswordForm*> suppressed_psl_matching_forms_;
+  std::vector<const autofill::PasswordForm*>
+      suppressed_same_organization_name_forms_;
+  bool did_complete_querying_suppressed_forms_ = false;
 
   DISALLOW_COPY_AND_ASSIGN(FakeFormFetcher);
 };
diff --git a/components/password_manager/core/browser/form_fetcher.h b/components/password_manager/core/browser/form_fetcher.h
index 05400dc..22bcd52 100644
--- a/components/password_manager/core/browser/form_fetcher.h
+++ b/components/password_manager/core/browser/form_fetcher.h
@@ -71,22 +71,41 @@
   virtual const std::vector<const autofill::PasswordForm*>&
   GetFederatedMatches() const = 0;
 
-  // When this instance fetches forms for an HTTP origin: Returns credentials,
-  // if any, found for the HTTPS version of that origin. These results are
-  // queried on a best-effort basis, might be somewhat stale, and are normally
-  // available shortly after the first Consumer::ProcessMatches callback.
+  // The following accessors return various kinds of `suppressed` credentials.
+  // These are stored credentials that are not (auto-)filled, because they are
+  // for an origin that is similar to, but not exactly matching the origin that
+  // this FormFetcher was created for. They are used for recording metrics on
+  // how often such -- potentially, but not necessarily related -- credentials
+  // are not offered to the user, unduly increasing log-in friction.
   //
-  // When there exists no precisely matching HTTP credentials for an origin, but
-  // there are suppressed HTTPS credentials, that could indicate a premature
-  // `move-to-HTTPS` migration, or simply that the site serves its sign-up or
-  // some of its sign-in forms over HTTPS, while others still over HTTP.
+  // There are currently three kinds of suppressed credentials:
+  //  1.) HTTPS credentials not filled on the HTTP version of the origin.
+  //  2.) PSL-matches that are not auto-filled (but filled on account select).
+  //  3.) Same-organization name credentials, not filled.
+  //
+  // Results below are queried on a best-effort basis, might be somewhat stale,
+  // and are available shortly after the Consumer::ProcessMatches callback.
+
+  // When this instance fetches forms for an HTTP origin: Returns saved
+  // credentials, if any, found for the HTTPS version of that origin. Empty
+  // otherwise.
   virtual const std::vector<const autofill::PasswordForm*>&
   GetSuppressedHTTPSForms() const = 0;
 
-  // Whether querying the results for GetSuppressedHTTPSForms was attempted and
-  // did complete at least once during the lifetime of this instance, regardless
-  // of whether there have been any suppressed HTTPS forms.
-  virtual bool DidCompleteQueryingSuppressedHTTPSForms() const = 0;
+  // Returns saved credentials, if any, for PSL-matching origins. Autofilling
+  // these is suppressed, however, they *can be* filled on account select.
+  virtual const std::vector<const autofill::PasswordForm*>&
+  GetSuppressedPSLMatchingForms() const = 0;
+
+  // Returns saved credentials, if any, found for HTTP/HTTPS origins with the
+  // same organization name as the origin this FormFetcher was created for.
+  virtual const std::vector<const autofill::PasswordForm*>&
+  GetSuppressedSameOrganizationNameForms() const = 0;
+
+  // Whether querying suppressed forms (of all flavors) was attempted and did
+  // complete at least once during the lifetime of this instance, regardless of
+  // whether there have been any results.
+  virtual bool DidCompleteQueryingSuppressedForms() const = 0;
 
   // Fetches stored matching logins. In addition the statistics is fetched on
   // platforms with the password bubble. This is called automatically during
diff --git a/components/password_manager/core/browser/form_fetcher_impl.cc b/components/password_manager/core/browser/form_fetcher_impl.cc
index 8b7b55f..c8127b0 100644
--- a/components/password_manager/core/browser/form_fetcher_impl.cc
+++ b/components/password_manager/core/browser/form_fetcher_impl.cc
@@ -15,6 +15,7 @@
 #include "components/password_manager/core/browser/password_manager_client.h"
 #include "components/password_manager/core/browser/password_manager_util.h"
 #include "components/password_manager/core/browser/password_store.h"
+#include "components/password_manager/core/browser/psl_matching_helper.h"
 #include "components/password_manager/core/browser/statistics_table.h"
 
 using autofill::PasswordForm;
@@ -46,6 +47,43 @@
   return federated_matches;
 }
 
+void SplitSuppressedFormsAndAssignTo(
+    const PasswordStore::FormDigest& observed_form_digest,
+    std::vector<std::unique_ptr<PasswordForm>> suppressed_forms,
+    std::vector<std::unique_ptr<PasswordForm>>* same_origin_https_forms,
+    std::vector<std::unique_ptr<PasswordForm>>* psl_matching_forms,
+    std::vector<std::unique_ptr<PasswordForm>>* same_organization_name_forms) {
+  DCHECK(same_origin_https_forms);
+  DCHECK(psl_matching_forms);
+  DCHECK(same_organization_name_forms);
+  same_origin_https_forms->clear();
+  psl_matching_forms->clear();
+  same_organization_name_forms->clear();
+  for (auto& form : suppressed_forms) {
+    switch (GetMatchResult(*form, observed_form_digest)) {
+      case MatchResult::PSL_MATCH:
+        psl_matching_forms->push_back(std::move(form));
+        break;
+      case MatchResult::NO_MATCH:
+        if (form->origin.host() != observed_form_digest.origin.host()) {
+          same_organization_name_forms->push_back(std::move(form));
+        } else if (form->origin.SchemeIs(url::kHttpsScheme) &&
+                   observed_form_digest.origin.SchemeIs(url::kHttpScheme)) {
+          same_origin_https_forms->push_back(std::move(form));
+        } else {
+          // HTTP form suppressed on HTTPS observed page: The HTTP->HTTPS
+          // migration can leave tons of such HTTP forms behind, ignore these.
+        }
+        break;
+      case MatchResult::EXACT_MATCH:
+      case MatchResult::FEDERATED_MATCH:
+      case MatchResult::FEDERATED_PSL_MATCH:
+        NOTREACHED() << "Suppressed match cannot be exact or federated.";
+        break;
+    }
+  }
+}
+
 // Create a vector of const PasswordForm from a vector of
 // unique_ptr<PasswordForm> by applying get() item-wise.
 std::vector<const PasswordForm*> MakeWeakCopies(
@@ -74,12 +112,11 @@
 FormFetcherImpl::FormFetcherImpl(PasswordStore::FormDigest form_digest,
                                  const PasswordManagerClient* client,
                                  bool should_migrate_http_passwords,
-                                 bool should_query_suppressed_https_forms)
+                                 bool should_query_suppressed_forms)
     : form_digest_(std::move(form_digest)),
       client_(client),
       should_migrate_http_passwords_(should_migrate_http_passwords),
-      should_query_suppressed_https_forms_(
-          should_query_suppressed_https_forms) {}
+      should_query_suppressed_forms_(should_query_suppressed_forms) {}
 
 FormFetcherImpl::~FormFetcherImpl() = default;
 
@@ -111,11 +148,21 @@
 
 const std::vector<const PasswordForm*>&
 FormFetcherImpl::GetSuppressedHTTPSForms() const {
-  return weak_suppressed_https_forms_;
+  return weak_suppressed_same_origin_https_forms_;
 }
 
-bool FormFetcherImpl::DidCompleteQueryingSuppressedHTTPSForms() const {
-  return did_complete_querying_suppressed_https_forms_;
+const std::vector<const PasswordForm*>&
+FormFetcherImpl::GetSuppressedPSLMatchingForms() const {
+  return weak_suppressed_psl_matching_forms_;
+}
+
+const std::vector<const PasswordForm*>&
+FormFetcherImpl::GetSuppressedSameOrganizationNameForms() const {
+  return weak_suppressed_same_organization_name_forms_;
+}
+
+bool FormFetcherImpl::DidCompleteQueryingSuppressedForms() const {
+  return did_complete_querying_suppressed_forms_;
 }
 
 void FormFetcherImpl::OnGetPasswordStoreResults(
@@ -138,18 +185,15 @@
     logger->LogNumber(Logger::STRING_NUMBER_RESULTS, results.size());
   }
 
-  // If this is a non-secure Web origin (i.e. HTTP), kick off the discovery of
-  // credentials stored for the secure version of this origin (i.e. HTTPS),
-  // regardless of whether there are some precisely matching |results|.
-  //
-  // These results are used only for recording metrics at PasswordFormManager
-  // desctruction time, this is why they are requested so late.
-  if (should_query_suppressed_https_forms_ &&
+  // Kick off the discovery of suppressed credentials, regardless of whether
+  // there are some precisely matching |results|. These results are used only
+  // for recording metrics at PasswordFormManager desctruction time, this is why
+  // they are requested this late.
+  if (should_query_suppressed_forms_ &&
       form_digest_.scheme == PasswordForm::SCHEME_HTML &&
-      form_digest_.origin.SchemeIs(url::kHttpScheme)) {
-    suppressed_https_form_fetcher_ =
-        base::MakeUnique<SuppressedHTTPSFormFetcher>(form_digest_.signon_realm,
-                                                     client_, this);
+      GURL(form_digest_.signon_realm).SchemeIsHTTPOrHTTPS()) {
+    suppressed_form_fetcher_ = base::MakeUnique<SuppressedFormFetcher>(
+        form_digest_.signon_realm, client_, this);
   }
 
   if (should_migrate_http_passwords_ && results.empty() &&
@@ -174,12 +218,19 @@
   ProcessPasswordStoreResults(std::move(forms));
 }
 
-void FormFetcherImpl::ProcessSuppressedHTTPSForms(
+void FormFetcherImpl::ProcessSuppressedForms(
     std::vector<std::unique_ptr<autofill::PasswordForm>> forms) {
-  did_complete_querying_suppressed_https_forms_ = true;
-
-  suppressed_https_forms_ = std::move(forms);
-  weak_suppressed_https_forms_ = MakeWeakCopies(suppressed_https_forms_);
+  did_complete_querying_suppressed_forms_ = true;
+  SplitSuppressedFormsAndAssignTo(form_digest_, std::move(forms),
+                                  &suppressed_same_origin_https_forms_,
+                                  &suppressed_psl_matching_forms_,
+                                  &suppressed_same_organization_name_forms_);
+  weak_suppressed_same_origin_https_forms_ =
+      MakeWeakCopies(suppressed_same_origin_https_forms_);
+  weak_suppressed_psl_matching_forms_ =
+      MakeWeakCopies(suppressed_psl_matching_forms_);
+  weak_suppressed_same_organization_name_forms_ =
+      MakeWeakCopies(suppressed_same_organization_name_forms_);
 }
 
 void FormFetcherImpl::Fetch() {
@@ -223,17 +274,26 @@
   // Create the copy without the "HTTPS migration" activated. If it was needed,
   // then it was done by |this| already.
   auto result = base::MakeUnique<FormFetcherImpl>(
-      form_digest_, client_, false, should_query_suppressed_https_forms_);
+      form_digest_, client_, false, should_query_suppressed_forms_);
 
   result->non_federated_ = MakeCopies(this->non_federated_);
   result->federated_ = MakeCopies(this->federated_);
   result->interactions_stats_ = this->interactions_stats_;
-  result->suppressed_https_forms_ = MakeCopies(this->suppressed_https_forms_);
+  result->suppressed_same_origin_https_forms_ =
+      MakeCopies(this->suppressed_same_origin_https_forms_);
+  result->suppressed_psl_matching_forms_ =
+      MakeCopies(this->suppressed_psl_matching_forms_);
+  result->suppressed_same_organization_name_forms_ =
+      MakeCopies(this->suppressed_same_organization_name_forms_);
 
   result->weak_non_federated_ = MakeWeakCopies(result->non_federated_);
   result->weak_federated_ = MakeWeakCopies(result->federated_);
-  result->weak_suppressed_https_forms_ =
-      MakeWeakCopies(result->suppressed_https_forms_);
+  result->weak_suppressed_same_origin_https_forms_ =
+      MakeWeakCopies(result->suppressed_same_origin_https_forms_);
+  result->weak_suppressed_psl_matching_forms_ =
+      MakeWeakCopies(result->suppressed_psl_matching_forms_);
+  result->weak_suppressed_same_organization_name_forms_ =
+      MakeWeakCopies(result->suppressed_same_organization_name_forms_);
 
   result->filtered_count_ = this->filtered_count_;
   result->state_ = this->state_;
diff --git a/components/password_manager/core/browser/form_fetcher_impl.h b/components/password_manager/core/browser/form_fetcher_impl.h
index a29a66b..29fe6a7 100644
--- a/components/password_manager/core/browser/form_fetcher_impl.h
+++ b/components/password_manager/core/browser/form_fetcher_impl.h
@@ -14,7 +14,7 @@
 #include "components/password_manager/core/browser/http_password_store_migrator.h"
 #include "components/password_manager/core/browser/password_store.h"
 #include "components/password_manager/core/browser/password_store_consumer.h"
-#include "components/password_manager/core/browser/suppressed_https_form_fetcher.h"
+#include "components/password_manager/core/browser/suppressed_form_fetcher.h"
 
 namespace password_manager {
 
@@ -25,14 +25,14 @@
 class FormFetcherImpl : public FormFetcher,
                         public PasswordStoreConsumer,
                         public HttpPasswordStoreMigrator::Consumer,
-                        public SuppressedHTTPSFormFetcher::Consumer {
+                        public SuppressedFormFetcher::Consumer {
  public:
   // |form_digest| describes what credentials need to be retrieved and
   // |client| serves the PasswordStore, the logging information etc.
   FormFetcherImpl(PasswordStore::FormDigest form_digest,
                   const PasswordManagerClient* client,
                   bool should_migrate_http_passwords,
-                  bool should_query_suppressed_https_forms);
+                  bool should_query_suppressed_forms);
 
   ~FormFetcherImpl() override;
 
@@ -45,7 +45,11 @@
       const override;
   const std::vector<const autofill::PasswordForm*>& GetSuppressedHTTPSForms()
       const override;
-  bool DidCompleteQueryingSuppressedHTTPSForms() const override;
+  const std::vector<const autofill::PasswordForm*>&
+  GetSuppressedPSLMatchingForms() const override;
+  const std::vector<const autofill::PasswordForm*>&
+  GetSuppressedSameOrganizationNameForms() const override;
+  bool DidCompleteQueryingSuppressedForms() const override;
   void Fetch() override;
   std::unique_ptr<FormFetcher> Clone() override;
 
@@ -58,8 +62,8 @@
   void ProcessMigratedForms(
       std::vector<std::unique_ptr<autofill::PasswordForm>> forms) override;
 
-  // SuppressedHTTPSFormFetcher::Consumer:
-  void ProcessSuppressedHTTPSForms(
+  // SuppressedFormFetcher::Consumer:
+  void ProcessSuppressedForms(
       std::vector<std::unique_ptr<autofill::PasswordForm>> forms) override;
 
  private:
@@ -81,19 +85,27 @@
   // Statistics for the current domain.
   std::vector<InteractionsStats> interactions_stats_;
 
-  // When |form_digest_.origin| is not secure, that is, its scheme is HTTP, this
-  // will be filled with credentials found for the HTTPS version of that origin.
-  std::vector<std::unique_ptr<autofill::PasswordForm>> suppressed_https_forms_;
+  std::vector<std::unique_ptr<autofill::PasswordForm>>
+      suppressed_same_origin_https_forms_;
+  std::vector<std::unique_ptr<autofill::PasswordForm>>
+      suppressed_psl_matching_forms_;
+  std::vector<std::unique_ptr<autofill::PasswordForm>>
+      suppressed_same_organization_name_forms_;
 
   // Whether querying |suppressed_https_forms_| was attempted and did complete
   // at least once during the lifetime of this instance, regardless of whether
   // there have been any results.
-  bool did_complete_querying_suppressed_https_forms_ = false;
+  bool did_complete_querying_suppressed_forms_ = false;
 
   // Non-owning copies of the vectors above.
   std::vector<const autofill::PasswordForm*> weak_non_federated_;
   std::vector<const autofill::PasswordForm*> weak_federated_;
-  std::vector<const autofill::PasswordForm*> weak_suppressed_https_forms_;
+  std::vector<const autofill::PasswordForm*>
+      weak_suppressed_same_origin_https_forms_;
+  std::vector<const autofill::PasswordForm*>
+      weak_suppressed_psl_matching_forms_;
+  std::vector<const autofill::PasswordForm*>
+      weak_suppressed_same_organization_name_forms_;
 
   // Consumers of the fetcher, all are assumed to outlive |this|.
   std::set<FormFetcher::Consumer*> consumers_;
@@ -115,16 +127,17 @@
   // Indicates whether HTTP passwords should be migrated to HTTPS.
   const bool should_migrate_http_passwords_;
 
-  // Indicates whether to query |suppressed_https_forms_| on HTTP origins.
-  const bool should_query_suppressed_https_forms_;
+  // Indicates whether to query suppressed forms.
+  const bool should_query_suppressed_forms_;
 
   // Does the actual migration.
   std::unique_ptr<HttpPasswordStoreMigrator> http_migrator_;
 
-  // When |form_digest_.origin| is not secure, responsible for looking up
-  // credentials stored for the HTTPS counterpart of that origin. This happens
-  // asynchronously, without blocking Consumer::ProcessMatches.
-  std::unique_ptr<SuppressedHTTPSFormFetcher> suppressed_https_form_fetcher_;
+  // Responsible for looking up `suppressed` credentials. These are stored
+  // credentials that were not filled, even though they might be related to the
+  // origin that this instance was created for. Look-up happens asynchronously,
+  // without blocking Consumer::ProcessMatches.
+  std::unique_ptr<SuppressedFormFetcher> suppressed_form_fetcher_;
 
   DISALLOW_COPY_AND_ASSIGN(FormFetcherImpl);
 };
diff --git a/components/password_manager/core/browser/form_fetcher_impl_unittest.cc b/components/password_manager/core/browser/form_fetcher_impl_unittest.cc
index 0b6096b5..07cf432 100644
--- a/components/password_manager/core/browser/form_fetcher_impl_unittest.cc
+++ b/components/password_manager/core/browser/form_fetcher_impl_unittest.cc
@@ -20,6 +20,7 @@
 #include "build/build_config.h"
 #include "components/autofill/core/common/password_form.h"
 #include "components/password_manager/core/browser/mock_password_store.h"
+#include "components/password_manager/core/browser/password_manager_test_utils.h"
 #include "components/password_manager/core/browser/password_store.h"
 #include "components/password_manager/core/browser/statistics_table.h"
 #include "components/password_manager/core/browser/stub_credentials_filter.h"
@@ -38,20 +39,27 @@
 using testing::Pointee;
 using testing::Return;
 using testing::UnorderedElementsAre;
+using testing::UnorderedElementsAreArray;
 using testing::WithArg;
 
 namespace password_manager {
 
 namespace {
 
-constexpr const char kTestHttpRealm[] = "http://example.in/";
-constexpr const char kTestHttpActionURL[] = "http://login.example.org";
-constexpr const char kTestHttpLoginURL[] = "http://example.in";
+constexpr const char kTestHttpURL[] = "http://example.in/";
+constexpr const char kTestHttpActionURL[] = "http://login.example.org/";
 
-constexpr const char kTestHttpsRealm[] = "https://example.in/";
-constexpr const char kTestHttpsActionURL[] = "https://login.example.org";
-constexpr const char kTestHttpsLoginURL[] = "https://example.in";
+constexpr const char kTestHttpsURL[] = "https://example.in/";
+constexpr const char kTestHttpsActionURL[] = "https://login.example.org/";
 
+constexpr const char kTestPSLMatchingHttpURL[] = "http://psl.example.in/";
+constexpr const char kTestPSLMatchingHttpsURL[] = "https://psl.example.in/";
+
+constexpr const char kTestHttpSameOrgNameURL[] = "http://sub.example.com/";
+constexpr const char kTestHttpsSameOrgNameURL[] = "https://sub.example.com/";
+
+constexpr const char kTestFederatedRealm[] =
+    "federation://example.in/accounts.google.com";
 constexpr const char kTestFederationURL[] = "https://accounts.google.com/";
 
 class MockConsumer : public FormFetcher::Consumer {
@@ -112,31 +120,36 @@
   DISALLOW_COPY_AND_ASSIGN(FakePasswordManagerClient);
 };
 
+PasswordForm CreateHTMLForm(const char* origin_url,
+                            const char* username_value,
+                            const char* password_value) {
+  PasswordForm form;
+  form.scheme = PasswordForm::SCHEME_HTML;
+  form.origin = GURL(origin_url);
+  form.signon_realm = origin_url;
+  form.username_value = ASCIIToUTF16(username_value);
+  form.password_value = ASCIIToUTF16(password_value);
+  return form;
+}
+
 // Creates a dummy non-federated form with some basic arbitrary values.
 PasswordForm CreateNonFederated() {
-  PasswordForm form;
-  form.origin = GURL(kTestHttpsLoginURL);
-  form.signon_realm = kTestHttpsRealm;
+  PasswordForm form = CreateHTMLForm(kTestHttpsURL, "user", "password");
   form.action = GURL(kTestHttpsActionURL);
-  form.username_value = ASCIIToUTF16("user");
-  form.password_value = ASCIIToUTF16("password");
   return form;
 }
 
 // Creates a dummy non-federated HTTP form with some basic arbitrary values.
 PasswordForm CreateHTTPNonFederated() {
-  PasswordForm form;
-  form.origin = GURL(kTestHttpLoginURL);
-  form.signon_realm = kTestHttpRealm;
+  PasswordForm form = CreateHTMLForm(kTestHttpURL, "user", "password");
   form.action = GURL(kTestHttpActionURL);
-  form.username_value = ASCIIToUTF16("user");
-  form.password_value = ASCIIToUTF16("password");
   return form;
 }
 
 // Creates a dummy federated form with some basic arbitrary values.
 PasswordForm CreateFederated() {
   PasswordForm form = CreateNonFederated();
+  form.signon_realm = kTestFederatedRealm;
   form.password_value.clear();
   form.federation_origin = url::Origin(GURL(kTestFederationURL));
   return form;
@@ -144,10 +157,9 @@
 
 // Creates an Android federated credential.
 PasswordForm CreateAndroidFederated() {
-  PasswordForm form = CreateFederated();
-  form.signon_realm = "android://hash@com.example.android/";
-  form.origin = GURL(form.signon_realm);
-  form.action = GURL();
+  PasswordForm form =
+      CreateHTMLForm("android://hash@com.example.android/", "user", "");
+  form.federation_origin = url::Origin(GURL(kTestFederationURL));
   form.is_affiliation_based_match = true;
   return form;
 }
@@ -162,6 +174,15 @@
   return results;
 }
 
+std::vector<PasswordForm> PointeeValues(
+    const std::vector<const PasswordForm*> forms) {
+  std::vector<PasswordForm> result;
+  result.reserve(forms.size());
+  for (const PasswordForm* form : forms)
+    result.push_back(*form);
+  return result;
+}
+
 ACTION_P(GetAndAssignWeakPtr, ptr) {
   *ptr = arg0->GetWeakPtr();
 }
@@ -172,8 +193,8 @@
  public:
   FormFetcherImplTest()
       : form_digest_(PasswordForm::SCHEME_HTML,
-                     kTestHttpRealm,
-                     GURL(kTestHttpLoginURL)) {
+                     kTestHttpURL,
+                     GURL(kTestHttpURL)) {
     mock_store_ = new MockPasswordStore();
     client_.set_store(mock_store_.get());
 
@@ -197,7 +218,7 @@
     testing::Mock::VerifyAndClearExpectations(mock_store_.get());
   }
 
-  void RecreateFormFetcherWithQueryingSuppressedHTTPSForms() {
+  void RecreateFormFetcherWithQueryingSuppressedForms() {
     form_fetcher_ = base::MakeUnique<FormFetcherImpl>(
         form_digest_, &client_, false /* should_migrate_http_passwords */,
         true /* should_query_suppressed_https_forms */);
@@ -208,13 +229,13 @@
 
   // Simulates a call to Fetch(), and supplies |simulated_matches| as the
   // PasswordStore results. Expects that this will trigger the querying of
-  // suppressed HTTPS forms by means of a GetLoginsForSameOrganizationName call
+  // suppressed forms by means of a GetLoginsForSameOrganizationName call
   // being issued against the |expected_signon_realm|.
   //
-  // Call CompleteQueryingSuppressedHTTPSForms with the emitted |consumer_ptr|
+  // Call CompleteQueryingSuppressedForms with the emitted |consumer_ptr|
   // to complete the query.
-  void SimulateFetchAndExpectQueryingSuppressedHTTPSForms(
-      const std::vector<PasswordForm>& simulated_http_matches,
+  void SimulateFetchAndExpectQueryingSuppressedForms(
+      const std::vector<PasswordForm>& simulated_get_logins_matches,
       const std::string& expected_signon_realm,
       base::WeakPtr<PasswordStoreConsumer>* consumer_ptr /* out */) {
     ASSERT_EQ(FormFetcher::State::NOT_WAITING, form_fetcher_->GetState());
@@ -224,11 +245,11 @@
     EXPECT_CALL(*mock_store_,
                 GetLoginsForSameOrganizationName(expected_signon_realm, _))
         .WillOnce(::testing::WithArg<1>(GetAndAssignWeakPtr(consumer_ptr)));
-    const size_t num_matches = simulated_http_matches.size();
+    const size_t num_matches = simulated_get_logins_matches.size();
     EXPECT_CALL(consumer_, ProcessMatches(::testing::SizeIs(num_matches), 0u));
 
     form_fetcher_->OnGetPasswordStoreResults(
-        MakeResults(simulated_http_matches));
+        MakeResults(simulated_get_logins_matches));
 
     ASSERT_TRUE(testing::Mock::VerifyAndClearExpectations(&consumer_));
     ASSERT_TRUE(testing::Mock::VerifyAndClearExpectations(mock_store_.get()));
@@ -236,13 +257,13 @@
     ASSERT_TRUE(*consumer_ptr);
   }
 
-  void CompleteQueryingSuppressedHTTPSForms(
-      const std::vector<PasswordForm>& simulated_suppressed_https_forms,
+  void CompleteQueryingSuppressedForms(
+      const std::vector<PasswordForm>& simulated_suppressed_forms,
       base::WeakPtr<PasswordStoreConsumer> consumer_ptr) {
     ASSERT_TRUE(consumer_ptr);
     ASSERT_EQ(FormFetcher::State::NOT_WAITING, form_fetcher_->GetState());
     consumer_ptr->OnGetPasswordStoreResults(
-        MakeResults(simulated_suppressed_https_forms));
+        MakeResults(simulated_suppressed_forms));
     ASSERT_EQ(FormFetcher::State::NOT_WAITING, form_fetcher_->GetState());
   }
 
@@ -614,81 +635,147 @@
   EXPECT_EQ(FormFetcher::State::NOT_WAITING, form_fetcher_->GetState());
 }
 
-TEST_F(FormFetcherImplTest, SuppressedHTTPSForms_QueriedForHTTPOrigins) {
-  RecreateFormFetcherWithQueryingSuppressedHTTPSForms();
+TEST_F(FormFetcherImplTest, SuppressedForms_QueriedForHTTPAndHTTPSOrigins) {
+  static const PasswordStore::FormDigest kObservedHTTPSFormDigest(
+      PasswordForm::SCHEME_HTML, kTestHttpsURL, GURL(kTestHttpsURL));
 
-  // The matching PasswordStore results coming in should trigger another
-  // GetLogins request to fetcht the suppressed HTTPS forms.
-  const PasswordForm matching_http_form = CreateHTTPNonFederated();
-  base::WeakPtr<PasswordStoreConsumer> https_form_fetcher_ptr = nullptr;
-  ASSERT_NO_FATAL_FAILURE(SimulateFetchAndExpectQueryingSuppressedHTTPSForms(
-      {matching_http_form}, kTestHttpRealm, &https_form_fetcher_ptr));
+  static const PasswordForm kFormHttpSameHost =
+      CreateHTMLForm(kTestHttpURL, "user_1", "pass_1");
+  static const PasswordForm kFormHttpsSameHost =
+      CreateHTMLForm(kTestHttpsURL, "user_2", "pass_2");
+  static const PasswordForm kFormHttpPSLMatchingHost =
+      CreateHTMLForm(kTestPSLMatchingHttpURL, "user_3", "pass_3");
+  static const PasswordForm kFormHttpsPSLMatchingHost =
+      CreateHTMLForm(kTestPSLMatchingHttpsURL, "user_4", "pass_4");
+  static const PasswordForm kFormHttpSameOrgNameHost =
+      CreateHTMLForm(kTestHttpSameOrgNameURL, "user_5", "pass_5");
+  static const PasswordForm kFormHttpsSameOrgNameHost =
+      CreateHTMLForm(kTestHttpsSameOrgNameURL, "user_6", "pass_6");
 
-  EXPECT_FALSE(form_fetcher_->DidCompleteQueryingSuppressedHTTPSForms());
-  EXPECT_THAT(form_fetcher_->GetSuppressedHTTPSForms(), IsEmpty());
+  static const struct {
+    const char* observed_form_origin;
+    const char* observed_form_realm;
+    std::vector<PasswordForm> matching_forms;
+    std::vector<PasswordForm> all_suppressed_forms;
+    std::vector<PasswordForm> expected_suppressed_https_forms;
+    std::vector<PasswordForm> expected_suppressed_psl_forms;
+    std::vector<PasswordForm> expected_suppressed_same_org_name_forms;
+  } kTestCases[] = {
+      {kTestHttpURL,
+       kTestHttpURL,
+       {kFormHttpSameHost},
+       {kFormHttpsSameHost, kFormHttpPSLMatchingHost, kFormHttpsPSLMatchingHost,
+        kFormHttpSameOrgNameHost, kFormHttpsSameOrgNameHost},
+       {kFormHttpsSameHost},
+       {kFormHttpPSLMatchingHost},
+       {kFormHttpsPSLMatchingHost, kFormHttpSameOrgNameHost,
+        kFormHttpsSameOrgNameHost}},
 
-  const PasswordForm suppressed_https_form1 = CreateNonFederated();
-  const PasswordForm suppressed_https_form2 = CreateFederated();
-  ASSERT_NO_FATAL_FAILURE(CompleteQueryingSuppressedHTTPSForms(
-      {suppressed_https_form1, suppressed_https_form2},
-      https_form_fetcher_ptr));
+      {kTestHttpsURL,
+       kTestHttpsURL,
+       {kFormHttpsSameHost},
+       {kFormHttpSameHost, kFormHttpPSLMatchingHost, kFormHttpsPSLMatchingHost,
+        kFormHttpSameOrgNameHost, kFormHttpsSameOrgNameHost},
+       std::vector<PasswordForm>(),
+       {kFormHttpsPSLMatchingHost},
+       {kFormHttpPSLMatchingHost, kFormHttpSameOrgNameHost,
+        kFormHttpsSameOrgNameHost}},
+  };
 
-  EXPECT_TRUE(form_fetcher_->DidCompleteQueryingSuppressedHTTPSForms());
-  EXPECT_THAT(form_fetcher_->GetSuppressedHTTPSForms(),
-              UnorderedElementsAre(Pointee(suppressed_https_form1),
-                                   Pointee(suppressed_https_form2)));
+  for (const auto& test_case : kTestCases) {
+    SCOPED_TRACE(test_case.observed_form_origin);
+
+    form_digest_ = PasswordStore::FormDigest(
+        PasswordForm::SCHEME_HTML, test_case.observed_form_origin,
+        GURL(test_case.observed_form_origin));
+    RecreateFormFetcherWithQueryingSuppressedForms();
+
+    // The matching PasswordStore results coming in should trigger another
+    // GetLogins request to fetcht the suppressed forms.
+    base::WeakPtr<PasswordStoreConsumer> suppressed_form_fetcher_ptr = nullptr;
+    ASSERT_NO_FATAL_FAILURE(SimulateFetchAndExpectQueryingSuppressedForms(
+        test_case.matching_forms, test_case.observed_form_realm,
+        &suppressed_form_fetcher_ptr));
+
+    EXPECT_FALSE(form_fetcher_->DidCompleteQueryingSuppressedForms());
+    EXPECT_THAT(form_fetcher_->GetSuppressedHTTPSForms(), IsEmpty());
+
+    ASSERT_NO_FATAL_FAILURE(CompleteQueryingSuppressedForms(
+        test_case.all_suppressed_forms, suppressed_form_fetcher_ptr));
+
+    EXPECT_TRUE(form_fetcher_->DidCompleteQueryingSuppressedForms());
+    EXPECT_THAT(
+        PointeeValues(form_fetcher_->GetSuppressedHTTPSForms()),
+        UnorderedElementsAreArray(test_case.expected_suppressed_https_forms));
+    EXPECT_THAT(
+        PointeeValues(form_fetcher_->GetSuppressedPSLMatchingForms()),
+        UnorderedElementsAreArray(test_case.expected_suppressed_psl_forms));
+    EXPECT_THAT(
+        PointeeValues(form_fetcher_->GetSuppressedSameOrganizationNameForms()),
+        UnorderedElementsAreArray(
+            test_case.expected_suppressed_same_org_name_forms));
+  }
 }
 
-TEST_F(FormFetcherImplTest, SuppressedHTTPSForms_RequeriedOnRefetch) {
-  RecreateFormFetcherWithQueryingSuppressedHTTPSForms();
+TEST_F(FormFetcherImplTest, SuppressedForms_RequeriedOnRefetch) {
+  RecreateFormFetcherWithQueryingSuppressedForms();
 
   base::WeakPtr<PasswordStoreConsumer> https_form_fetcher_ptr = nullptr;
-  ASSERT_NO_FATAL_FAILURE(SimulateFetchAndExpectQueryingSuppressedHTTPSForms(
-      std::vector<PasswordForm>(), kTestHttpRealm, &https_form_fetcher_ptr));
-  ASSERT_NO_FATAL_FAILURE(CompleteQueryingSuppressedHTTPSForms(
+  ASSERT_NO_FATAL_FAILURE(SimulateFetchAndExpectQueryingSuppressedForms(
+      std::vector<PasswordForm>(), kTestHttpURL, &https_form_fetcher_ptr));
+  ASSERT_NO_FATAL_FAILURE(CompleteQueryingSuppressedForms(
       std::vector<PasswordForm>(), https_form_fetcher_ptr));
 
-  // Another call to Fetch() should refetch the list of suppressed HTTPS
-  // credentials as well.
+  // Another call to Fetch() should refetch the list of suppressed credentials.
   const PasswordForm suppressed_https_form = CreateNonFederated();
-  ASSERT_NO_FATAL_FAILURE(SimulateFetchAndExpectQueryingSuppressedHTTPSForms(
-      std::vector<PasswordForm>(), kTestHttpRealm, &https_form_fetcher_ptr));
-  ASSERT_NO_FATAL_FAILURE(CompleteQueryingSuppressedHTTPSForms(
+  ASSERT_NO_FATAL_FAILURE(SimulateFetchAndExpectQueryingSuppressedForms(
+      std::vector<PasswordForm>(), kTestHttpURL, &https_form_fetcher_ptr));
+  ASSERT_NO_FATAL_FAILURE(CompleteQueryingSuppressedForms(
       {suppressed_https_form}, https_form_fetcher_ptr));
 
   EXPECT_THAT(form_fetcher_->GetSuppressedHTTPSForms(),
               UnorderedElementsAre(Pointee(suppressed_https_form)));
 }
 
-TEST_F(FormFetcherImplTest, SuppressedHTTPSForms_NeverWiped) {
-  RecreateFormFetcherWithQueryingSuppressedHTTPSForms();
+TEST_F(FormFetcherImplTest, SuppressedForms_NeverWiped) {
+  RecreateFormFetcherWithQueryingSuppressedForms();
 
-  const PasswordForm suppressed_https_form = CreateNonFederated();
+  static const PasswordForm kFormHttpsSameHost =
+      CreateHTMLForm(kTestHttpsURL, "user_1", "pass_1");
+  static const PasswordForm kFormHttpPSLMatchingHost =
+      CreateHTMLForm(kTestPSLMatchingHttpURL, "user_2", "pass_2");
+  static const PasswordForm kFormHttpSameOrgNameHost =
+      CreateHTMLForm(kTestHttpSameOrgNameURL, "user_3", "pass_3");
+
   base::WeakPtr<PasswordStoreConsumer> https_form_fetcher_ptr = nullptr;
-  ASSERT_NO_FATAL_FAILURE(SimulateFetchAndExpectQueryingSuppressedHTTPSForms(
-      std::vector<PasswordForm>(), kTestHttpRealm, &https_form_fetcher_ptr));
-  ASSERT_NO_FATAL_FAILURE(CompleteQueryingSuppressedHTTPSForms(
-      {suppressed_https_form}, https_form_fetcher_ptr));
+  ASSERT_NO_FATAL_FAILURE(SimulateFetchAndExpectQueryingSuppressedForms(
+      std::vector<PasswordForm>(), kTestHttpURL, &https_form_fetcher_ptr));
+  ASSERT_NO_FATAL_FAILURE(CompleteQueryingSuppressedForms(
+      {kFormHttpsSameHost, kFormHttpPSLMatchingHost, kFormHttpSameOrgNameHost},
+      https_form_fetcher_ptr));
 
   // Ensure that calling Fetch() does not wipe (even temporarily) the previously
   // fetched list of suppressed HTTPS credentials. Stale is better than nothing.
-  ASSERT_NO_FATAL_FAILURE(SimulateFetchAndExpectQueryingSuppressedHTTPSForms(
-      std::vector<PasswordForm>(), kTestHttpRealm, &https_form_fetcher_ptr));
+  ASSERT_NO_FATAL_FAILURE(SimulateFetchAndExpectQueryingSuppressedForms(
+      std::vector<PasswordForm>(), kTestHttpURL, &https_form_fetcher_ptr));
 
-  EXPECT_TRUE(form_fetcher_->DidCompleteQueryingSuppressedHTTPSForms());
+  EXPECT_TRUE(form_fetcher_->DidCompleteQueryingSuppressedForms());
   EXPECT_THAT(form_fetcher_->GetSuppressedHTTPSForms(),
-              UnorderedElementsAre(Pointee(suppressed_https_form)));
+              UnorderedElementsAre(Pointee(kFormHttpsSameHost)));
+  EXPECT_THAT(form_fetcher_->GetSuppressedPSLMatchingForms(),
+              UnorderedElementsAre(Pointee(kFormHttpPSLMatchingHost)));
+  EXPECT_THAT(form_fetcher_->GetSuppressedSameOrganizationNameForms(),
+              UnorderedElementsAre(Pointee(kFormHttpSameOrgNameHost)));
 }
 
-TEST_F(FormFetcherImplTest,
-       SuppressedHTTPSForms_FormFetcherDestroyedWhileQuerying) {
-  RecreateFormFetcherWithQueryingSuppressedHTTPSForms();
+TEST_F(FormFetcherImplTest, SuppressedForms_FormFetcherDestroyedWhileQuerying) {
+  RecreateFormFetcherWithQueryingSuppressedForms();
 
   base::WeakPtr<PasswordStoreConsumer> https_form_fetcher_ptr = nullptr;
-  ASSERT_NO_FATAL_FAILURE(SimulateFetchAndExpectQueryingSuppressedHTTPSForms(
-      std::vector<PasswordForm>(), kTestHttpRealm, &https_form_fetcher_ptr));
+  ASSERT_NO_FATAL_FAILURE(SimulateFetchAndExpectQueryingSuppressedForms(
+      std::vector<PasswordForm>(), kTestHttpURL, &https_form_fetcher_ptr));
 
-  EXPECT_FALSE(form_fetcher_->DidCompleteQueryingSuppressedHTTPSForms());
+  EXPECT_FALSE(form_fetcher_->DidCompleteQueryingSuppressedForms());
 
   // Destroy FormFetcher while SuppressedHTTPSFormFetcher is busy.
   form_fetcher_.reset();
@@ -698,35 +785,48 @@
 // long that in the meantime there is another call to Fetch(), which completes,
 // and triggers fetching HTTPS suppressed forms yet again. In this case, the
 // first SuppressedHTTPSFormFetcher is destroyed and its query cancelled.
-TEST_F(FormFetcherImplTest, SuppressedHTTPSForms_SimultaneousQueries) {
-  RecreateFormFetcherWithQueryingSuppressedHTTPSForms();
+TEST_F(FormFetcherImplTest, SuppressedForms_SimultaneousQueries) {
+  RecreateFormFetcherWithQueryingSuppressedForms();
 
   base::WeakPtr<PasswordStoreConsumer> https_form_fetcher_ptr1;
-  ASSERT_NO_FATAL_FAILURE(SimulateFetchAndExpectQueryingSuppressedHTTPSForms(
-      std::vector<PasswordForm>(), kTestHttpRealm, &https_form_fetcher_ptr1));
+  ASSERT_NO_FATAL_FAILURE(SimulateFetchAndExpectQueryingSuppressedForms(
+      std::vector<PasswordForm>(), kTestHttpURL, &https_form_fetcher_ptr1));
 
   base::WeakPtr<PasswordStoreConsumer> https_form_fetcher_ptr2;
-  ASSERT_NO_FATAL_FAILURE(SimulateFetchAndExpectQueryingSuppressedHTTPSForms(
-      std::vector<PasswordForm>(), kTestHttpRealm, &https_form_fetcher_ptr2));
+  ASSERT_NO_FATAL_FAILURE(SimulateFetchAndExpectQueryingSuppressedForms(
+      std::vector<PasswordForm>(), kTestHttpURL, &https_form_fetcher_ptr2));
 
-  EXPECT_FALSE(form_fetcher_->DidCompleteQueryingSuppressedHTTPSForms());
+  EXPECT_FALSE(form_fetcher_->DidCompleteQueryingSuppressedForms());
   EXPECT_THAT(form_fetcher_->GetSuppressedHTTPSForms(), IsEmpty());
   EXPECT_FALSE(https_form_fetcher_ptr1);
   ASSERT_TRUE(https_form_fetcher_ptr2);
 
-  const PasswordForm suppressed_https_form = CreateNonFederated();
-  ASSERT_NO_FATAL_FAILURE(CompleteQueryingSuppressedHTTPSForms(
-      {suppressed_https_form}, https_form_fetcher_ptr2));
+  static const PasswordForm kFormHttpsSameHost =
+      CreateHTMLForm(kTestHttpsURL, "user_1", "pass_1");
+  static const PasswordForm kFormHttpPSLMatchingHost =
+      CreateHTMLForm(kTestPSLMatchingHttpURL, "user_2", "pass_2");
+  static const PasswordForm kFormHttpSameOrgNameHost =
+      CreateHTMLForm(kTestHttpSameOrgNameURL, "user_3", "pass_3");
 
-  EXPECT_TRUE(form_fetcher_->DidCompleteQueryingSuppressedHTTPSForms());
+  ASSERT_NO_FATAL_FAILURE(CompleteQueryingSuppressedForms(
+      {kFormHttpsSameHost, kFormHttpPSLMatchingHost, kFormHttpSameOrgNameHost},
+      https_form_fetcher_ptr2));
+
+  EXPECT_TRUE(form_fetcher_->DidCompleteQueryingSuppressedForms());
+
+  EXPECT_TRUE(form_fetcher_->DidCompleteQueryingSuppressedForms());
   EXPECT_THAT(form_fetcher_->GetSuppressedHTTPSForms(),
-              UnorderedElementsAre(Pointee(suppressed_https_form)));
+              UnorderedElementsAre(Pointee(kFormHttpsSameHost)));
+  EXPECT_THAT(form_fetcher_->GetSuppressedPSLMatchingForms(),
+              UnorderedElementsAre(Pointee(kFormHttpPSLMatchingHost)));
+  EXPECT_THAT(form_fetcher_->GetSuppressedSameOrganizationNameForms(),
+              UnorderedElementsAre(Pointee(kFormHttpSameOrgNameHost)));
 }
 
-TEST_F(FormFetcherImplTest, SuppressedHTTPSForms_NotQueriedForHTTPSOrigins) {
+TEST_F(FormFetcherImplTest, SuppressedForms_NotQueriedForFederatedRealms) {
   form_digest_ = PasswordStore::FormDigest(
-      PasswordForm::SCHEME_HTML, kTestHttpsRealm, GURL(kTestHttpsLoginURL));
-  RecreateFormFetcherWithQueryingSuppressedHTTPSForms();
+      PasswordForm::SCHEME_HTML, kTestFederatedRealm, GURL(kTestFederationURL));
+  RecreateFormFetcherWithQueryingSuppressedForms();
   Fetch();
 
   EXPECT_CALL(*mock_store_, GetLogins(_, _)).Times(0);
@@ -736,18 +836,23 @@
       MakeResults(std::vector<PasswordForm>()));
 
   EXPECT_EQ(FormFetcher::State::NOT_WAITING, form_fetcher_->GetState());
-  EXPECT_FALSE(form_fetcher_->DidCompleteQueryingSuppressedHTTPSForms());
+  EXPECT_FALSE(form_fetcher_->DidCompleteQueryingSuppressedForms());
 }
 
 // Cloning a FormFetcherImpl with empty results should result in an
 // instance with empty results.
 TEST_F(FormFetcherImplTest, Clone_EmptyResults) {
+  RecreateFormFetcherWithQueryingSuppressedForms();
   Fetch();
+  EXPECT_CALL(consumer_, ProcessMatches(IsEmpty(), 0u));
+  EXPECT_CALL(*mock_store_, GetLoginsForSameOrganizationName(_, _));
   form_fetcher_->OnGetPasswordStoreResults(
       std::vector<std::unique_ptr<PasswordForm>>());
+  ASSERT_TRUE(::testing::Mock::VerifyAndClearExpectations(mock_store_.get()));
 
   // Clone() should not cause re-fetching from PasswordStore.
   EXPECT_CALL(*mock_store_, GetLogins(_, _)).Times(0);
+  EXPECT_CALL(*mock_store_, GetLoginsForSameOrganizationName(_, _)).Times(0);
   auto clone = form_fetcher_->Clone();
   EXPECT_EQ(FormFetcher::State::NOT_WAITING, clone->GetState());
   EXPECT_THAT(clone->GetInteractionsStats(), IsEmpty());
@@ -761,6 +866,7 @@
 // Cloning a FormFetcherImpl with non-empty results should result in an
 // instance with the same results.
 TEST_F(FormFetcherImplTest, Clone_NonEmptyResults) {
+  RecreateFormFetcherWithQueryingSuppressedForms();
   Fetch();
   PasswordForm non_federated = CreateNonFederated();
   PasswordForm federated = CreateFederated();
@@ -769,10 +875,15 @@
   results.push_back(base::MakeUnique<PasswordForm>(non_federated));
   results.push_back(base::MakeUnique<PasswordForm>(federated));
   results.push_back(base::MakeUnique<PasswordForm>(android_federated));
+
+  EXPECT_CALL(consumer_, ProcessMatches(::testing::SizeIs(1), 0u));
+  EXPECT_CALL(*mock_store_, GetLoginsForSameOrganizationName(_, _));
   form_fetcher_->OnGetPasswordStoreResults(std::move(results));
+  ASSERT_TRUE(::testing::Mock::VerifyAndClearExpectations(mock_store_.get()));
 
   // Clone() should not cause re-fetching from PasswordStore.
   EXPECT_CALL(*mock_store_, GetLogins(_, _)).Times(0);
+  EXPECT_CALL(*mock_store_, GetLoginsForSameOrganizationName(_, _)).Times(0);
   auto clone = form_fetcher_->Clone();
 
   // Additionally, destroy the original FormFetcher. This should not invalidate
@@ -804,17 +915,31 @@
   EXPECT_EQ(1u, clone->GetInteractionsStats().size());
 }
 
-// Cloning a FormFetcherImpl with some suppressed HTTPS credentials should
+// Cloning a FormFetcherImpl with some suppressed credentials should
 // result in an instance with the same suppressed credentials.
-TEST_F(FormFetcherImplTest, Clone_SuppressedHTTPSCredentials) {
+TEST_F(FormFetcherImplTest, Clone_SuppressedCredentials) {
   Fetch();
   form_fetcher_->OnGetPasswordStoreResults(
       std::vector<std::unique_ptr<PasswordForm>>());
-  form_fetcher_->ProcessSuppressedHTTPSForms(
-      MakeResults({CreateNonFederated()}));
+
+  static const PasswordForm kFormHttpsSameHost =
+      CreateHTMLForm(kTestHttpsURL, "user_1", "pass_1");
+  static const PasswordForm kFormHttpPSLMatchingHost =
+      CreateHTMLForm(kTestPSLMatchingHttpURL, "user_2", "pass_2");
+  static const PasswordForm kFormHttpSameOrgNameHost =
+      CreateHTMLForm(kTestHttpSameOrgNameURL, "user_3", "pass_3");
+
+  form_fetcher_->ProcessSuppressedForms(
+      MakeResults({kFormHttpsSameHost, kFormHttpPSLMatchingHost,
+                   kFormHttpSameOrgNameHost}));
 
   auto clone = form_fetcher_->Clone();
-  EXPECT_EQ(1u, clone->GetSuppressedHTTPSForms().size());
+  EXPECT_THAT(PointeeValues(clone->GetSuppressedHTTPSForms()),
+              UnorderedElementsAre(kFormHttpsSameHost));
+  EXPECT_THAT(PointeeValues(clone->GetSuppressedPSLMatchingForms()),
+              UnorderedElementsAre(kFormHttpPSLMatchingHost));
+  EXPECT_THAT(PointeeValues(clone->GetSuppressedSameOrganizationNameForms()),
+              UnorderedElementsAre(kFormHttpSameOrgNameHost));
 }
 
 // Check that removing consumers stops them from receiving store updates.
diff --git a/components/password_manager/core/browser/login_database.cc b/components/password_manager/core/browser/login_database.cc
index e2067b6..f1c45b6 100644
--- a/components/password_manager/core/browser/login_database.cc
+++ b/components/password_manager/core/browser/login_database.cc
@@ -521,8 +521,7 @@
 }  // namespace
 
 LoginDatabase::LoginDatabase(const base::FilePath& db_path)
-    : db_path_(db_path), clear_password_values_(false) {
-}
+    : db_path_(db_path) {}
 
 LoginDatabase::~LoginDatabase() {
 }
@@ -814,9 +813,8 @@
   if (!DoesMatchConstraints(form))
     return list;
   std::string encrypted_password;
-  if (EncryptedString(
-          clear_password_values_ ? base::string16() : form.password_value,
-          &encrypted_password) != ENCRYPTION_RESULT_SUCCESS)
+  if (EncryptedString(form.password_value, &encrypted_password) !=
+      ENCRYPTION_RESULT_SUCCESS)
     return list;
 
   DCHECK(!add_statement_.empty());
@@ -844,9 +842,8 @@
 
 PasswordStoreChangeList LoginDatabase::UpdateLogin(const PasswordForm& form) {
   std::string encrypted_password;
-  if (EncryptedString(
-          clear_password_values_ ? base::string16() : form.password_value,
-          &encrypted_password) != ENCRYPTION_RESULT_SUCCESS)
+  if (EncryptedString(form.password_value, &encrypted_password) !=
+      ENCRYPTION_RESULT_SUCCESS)
     return PasswordStoreChangeList();
 
 #if defined(OS_IOS)
diff --git a/components/password_manager/core/browser/login_database.h b/components/password_manager/core/browser/login_database.h
index ed53b3a8..d49b3a1 100644
--- a/components/password_manager/core/browser/login_database.h
+++ b/components/password_manager/core/browser/login_database.h
@@ -147,8 +147,6 @@
 
   StatisticsTable& stats_table() { return stats_table_; }
 
-  void set_clear_password_values(bool val) { clear_password_values_ = val; }
-
  private:
 #if defined(OS_IOS)
   friend class LoginDatabaseIOSTest;
@@ -219,13 +217,6 @@
   sql::MetaTable meta_table_;
   StatisticsTable stats_table_;
 
-  // If set to 'true', then the password values are cleared before encrypting
-  // and storing in the database. At the same time AddLogin/UpdateLogin return
-  // PasswordStoreChangeList containing the real password.
-  // This is a temporary measure for migration the Keychain on Mac.
-  // crbug.com/466638
-  bool clear_password_values_;
-
   // These cached strings are used to build SQL statements.
   std::string add_statement_;
   std::string add_replace_statement_;
diff --git a/components/password_manager/core/browser/login_database_unittest.cc b/components/password_manager/core/browser/login_database_unittest.cc
index f219fd8..b6a1011 100644
--- a/components/password_manager/core/browser/login_database_unittest.cc
+++ b/components/password_manager/core/browser/login_database_unittest.cc
@@ -1650,37 +1650,6 @@
                                    base::Bucket(5, 1)));
 }
 
-TEST_F(LoginDatabaseTest, ClearPasswordValues) {
-  db().set_clear_password_values(true);
-
-  // Add a PasswordForm, the password should be cleared.
-  base::HistogramTester histogram_tester;
-  PasswordForm form;
-  form.origin = GURL("http://accounts.google.com/LoginAuth");
-  form.signon_realm = "http://accounts.google.com/";
-  form.username_value = ASCIIToUTF16("my_username");
-  form.password_value = ASCIIToUTF16("12345");
-  EXPECT_EQ(AddChangeForForm(form), db().AddLogin(form));
-
-  std::vector<std::unique_ptr<PasswordForm>> result;
-  EXPECT_TRUE(db().GetLogins(PasswordStore::FormDigest(form), &result));
-  ASSERT_EQ(1U, result.size());
-  PasswordForm expected_form = form;
-  expected_form.password_value.clear();
-  EXPECT_EQ(expected_form, *result[0]);
-
-  // Update the password, it should stay empty.
-  form.password_value = ASCIIToUTF16("password");
-  EXPECT_EQ(UpdateChangeForForm(form), db().UpdateLogin(form));
-  EXPECT_TRUE(db().GetLogins(PasswordStore::FormDigest(form), &result));
-  ASSERT_EQ(1U, result.size());
-  EXPECT_EQ(expected_form, *result[0]);
-
-  // Encrypting/decrypting shouldn't happen. Thus there should be no keychain
-  // access on Mac.
-  histogram_tester.ExpectTotalCount("OSX.Keychain.Access", 0);
-}
-
 #if defined(OS_POSIX)
 // Only the current user has permission to read the database.
 //
diff --git a/components/password_manager/core/browser/password_form_manager.cc b/components/password_manager/core/browser/password_form_manager.cc
index ac89c994..98100d2 100644
--- a/components/password_manager/core/browser/password_form_manager.cc
+++ b/components/password_manager/core/browser/password_form_manager.cc
@@ -264,21 +264,7 @@
                               GetActionsTaken(), kMaxNumActionsTaken);
   }
 
-  if (!observed_form_.origin.SchemeIsCryptographic()) {
-    UMA_HISTOGRAM_BOOLEAN(
-        "PasswordManager.QueryingSuppressedAccountsFinished",
-        form_fetcher_->DidCompleteQueryingSuppressedHTTPSForms());
-    if (form_fetcher_->DidCompleteQueryingSuppressedHTTPSForms()) {
-      UMA_HISTOGRAM_ENUMERATION(
-          "PasswordManager.SuppressedAccount.Generated.HTTPSNotHTTP",
-          GetStatsForSuppressedHTTPSAccount(PasswordForm::TYPE_GENERATED),
-          kMaxSuppressedAccountStats);
-      UMA_HISTOGRAM_ENUMERATION(
-          "PasswordManager.SuppressedAccount.Manual.HTTPSNotHTTP",
-          GetStatsForSuppressedHTTPSAccount(PasswordForm::TYPE_MANUAL),
-          kMaxSuppressedAccountStats);
-    }
-  }
+  RecordHistogramsOnSuppressedAccounts();
 
   if (submit_result_ == kSubmitResultNotSubmitted) {
     if (has_generated_password_)
@@ -305,14 +291,14 @@
              (manager_action_ + kManagerActionMax * submit_result_);
 }
 
-int PasswordFormManager::GetStatsForSuppressedHTTPSAccount(
-    PasswordForm::Type type) const {
-  DCHECK(form_fetcher_->DidCompleteQueryingSuppressedHTTPSForms());
+int PasswordFormManager::GetHistogramSampleForSuppressedAccounts(
+    const std::vector<const autofill::PasswordForm*> suppressed_forms,
+    PasswordForm::Type manual_or_generated) const {
+  DCHECK(form_fetcher_->DidCompleteQueryingSuppressedForms());
 
   SuppressedAccountExistence best_matching_account = kSuppressedAccountNone;
-  for (const autofill::PasswordForm* form :
-       form_fetcher_->GetSuppressedHTTPSForms()) {
-    if (form->type != type)
+  for (const autofill::PasswordForm* form : suppressed_forms) {
+    if (form->type != manual_or_generated)
       continue;
 
     SuppressedAccountExistence current_account;
@@ -345,6 +331,55 @@
   return mixed_base_encoding;
 }
 
+void PasswordFormManager::RecordHistogramsOnSuppressedAccounts() const {
+  UMA_HISTOGRAM_BOOLEAN("PasswordManager.QueryingSuppressedAccountsFinished",
+                        form_fetcher_->DidCompleteQueryingSuppressedForms());
+
+  if (!form_fetcher_->DidCompleteQueryingSuppressedForms())
+    return;
+
+  if (!observed_form_.origin.SchemeIsCryptographic()) {
+    UMA_HISTOGRAM_ENUMERATION(
+        "PasswordManager.SuppressedAccount.Generated.HTTPSNotHTTP",
+        GetHistogramSampleForSuppressedAccounts(
+            form_fetcher_->GetSuppressedHTTPSForms(),
+            PasswordForm::TYPE_GENERATED),
+        kMaxSuppressedAccountStats);
+    UMA_HISTOGRAM_ENUMERATION(
+        "PasswordManager.SuppressedAccount.Manual.HTTPSNotHTTP",
+        GetHistogramSampleForSuppressedAccounts(
+            form_fetcher_->GetSuppressedHTTPSForms(),
+            PasswordForm::TYPE_MANUAL),
+        kMaxSuppressedAccountStats);
+  }
+
+  UMA_HISTOGRAM_ENUMERATION(
+      "PasswordManager.SuppressedAccount.Generated.PSLMatching",
+      GetHistogramSampleForSuppressedAccounts(
+          form_fetcher_->GetSuppressedPSLMatchingForms(),
+          PasswordForm::TYPE_GENERATED),
+      kMaxSuppressedAccountStats);
+  UMA_HISTOGRAM_ENUMERATION(
+      "PasswordManager.SuppressedAccount.Manual.PSLMatching",
+      GetHistogramSampleForSuppressedAccounts(
+          form_fetcher_->GetSuppressedPSLMatchingForms(),
+          PasswordForm::TYPE_MANUAL),
+      kMaxSuppressedAccountStats);
+
+  UMA_HISTOGRAM_ENUMERATION(
+      "PasswordManager.SuppressedAccount.Generated.SameOrganizationName",
+      GetHistogramSampleForSuppressedAccounts(
+          form_fetcher_->GetSuppressedSameOrganizationNameForms(),
+          PasswordForm::TYPE_GENERATED),
+      kMaxSuppressedAccountStats);
+  UMA_HISTOGRAM_ENUMERATION(
+      "PasswordManager.SuppressedAccount.Manual.SameOrganizationName",
+      GetHistogramSampleForSuppressedAccounts(
+          form_fetcher_->GetSuppressedSameOrganizationNameForms(),
+          PasswordForm::TYPE_MANUAL),
+      kMaxSuppressedAccountStats);
+}
+
 // static
 base::string16 PasswordFormManager::PasswordToSave(const PasswordForm& form) {
   if (form.new_password_element.empty() || form.new_password_value.empty())
diff --git a/components/password_manager/core/browser/password_form_manager.h b/components/password_manager/core/browser/password_form_manager.h
index 728a18d..2bc3bb2 100644
--- a/components/password_manager/core/browser/password_form_manager.h
+++ b/components/password_manager/core/browser/password_form_manager.h
@@ -332,18 +332,16 @@
   static const int kMaxNumActionsTaken =
       kManagerActionMax * kUserActionMax * kSubmitResultMax;
 
-  // Enumerates whether there was a `suppressed` stored credential, meaning that
-  // it was not filled because it was for an origin that was similar to, but not
-  // exactly (or PSL) matching the origin of |observed_form_|. Currently, the
-  // only class of suppressed credentials considered are HTTPS credentials not
-  // filled on the HTTP version of the origin.
+  // Enumerates whether there were `suppressed` credentials. These are stored
+  // credentials that were not filled, even though they might be related to the
+  // |observed_form_|. See FormFetcher::GetSuppressed* for details.
   //
-  // If a suppressed credential exists, it is also recorded whether its username
-  // and password matched those entered or filled into the observed form.
+  // If suppressed credentials exist, it is also recorded whether their username
+  // and/or password matched those submitted.
   enum SuppressedAccountExistence {
     kSuppressedAccountNone,
-    // Recorded when there exists a suppressed credential, but there was no
-    // submitted form to compare the username and password to.
+    // Recorded when there exists a suppressed account, but there was no
+    // submitted form to compare its username and password to.
     kSuppressedAccountExists,
     // Recorded when there was a submitted form.
     kSuppressedAccountExistsDifferentUsername,
@@ -432,12 +430,22 @@
   // UMA.
   int GetActionsTaken() const;
 
-  // Computes statistics on whether there was a stored credential with the
-  // specified |type| that could not be filled into the |observed_form_| because
-  // the scheme of its origin was HTTPS rather than HTTP; and encodes this
-  // information into an integer so it can be recorded as a UMA histogram.
-  int GetStatsForSuppressedHTTPSAccount(
-      autofill::PasswordForm::Type type) const;
+  // When supplied with the list of all |suppressed_forms| that belong to
+  // certain suppressed credential type (see FormFetcher::GetSuppressed*),
+  // filters that list down to forms that are either |manual_or_generated|, and
+  // based on that, computes the histogram sample that is a mixed-based
+  // representation of a combination of four attributes:
+  //  -- whether there were suppressed credentials (and if so, their relation to
+  //     the submitted username/password).
+  //  -- whether the |observed_form_| got ultimately submitted
+  //  -- what action the password manager performed (|manager_action_|),
+  //  -- and what action the user performed (|user_action_|_).
+  int GetHistogramSampleForSuppressedAccounts(
+      const std::vector<const autofill::PasswordForm*> suppressed_forms,
+      autofill::PasswordForm::Type manual_or_generated) const;
+
+  // Records all histograms in the PasswordManager.SuppressedAccount.* family.
+  void RecordHistogramsOnSuppressedAccounts() const;
 
   // Tries to set all votes (e.g. autofill field types, generation vote) to
   // a |FormStructure| and upload it to the server. Returns true on success.
diff --git a/components/password_manager/core/browser/password_form_manager_unittest.cc b/components/password_manager/core/browser/password_form_manager_unittest.cc
index 5a56528..e4ed9f70 100644
--- a/components/password_manager/core/browser/password_form_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_form_manager_unittest.cc
@@ -713,6 +713,92 @@
   // To spare typing for PasswordFormManager instances which need no driver.
   const base::WeakPtr<PasswordManagerDriver> kNoDriver;
 
+ protected:
+  enum class SimulatedManagerAction { NONE, AUTOFILLED, OFFERED, OFFERED_PSL };
+  enum class SimulatedSubmitResult { NONE, PASSED, FAILED };
+  enum class SuppressedFormType { HTTPS, PSL_MATCH, SAME_ORGANIZATION_NAME };
+
+  PasswordForm CreateSuppressedForm(SuppressedFormType suppression_type,
+                                    const char* username,
+                                    const char* password,
+                                    PasswordForm::Type manual_or_generated) {
+    PasswordForm form = *saved_match();
+    switch (suppression_type) {
+      case SuppressedFormType::HTTPS:
+        form.origin = GURL("https://accounts.google.com/a/LoginAuth");
+        form.signon_realm = "https://accounts.google.com/";
+        break;
+      case SuppressedFormType::PSL_MATCH:
+        form.origin = GURL("http://other.google.com/");
+        form.signon_realm = "http://other.google.com/";
+        break;
+      case SuppressedFormType::SAME_ORGANIZATION_NAME:
+        form.origin = GURL("https://may-or-may-not-be.google.appspot.com/");
+        form.signon_realm = "https://may-or-may-not-be.google.appspot.com/";
+        break;
+    }
+    form.type = manual_or_generated;
+    form.username_value = ASCIIToUTF16(username);
+    form.password_value = ASCIIToUTF16(password);
+    return form;
+  }
+
+  void SimulateActionsOnHTTPObservedForm(
+      FakeFormFetcher* fetcher,
+      SimulatedManagerAction manager_action,
+      SimulatedSubmitResult submit_result,
+      const char* filled_username,
+      const char* filled_password,
+      const char* submitted_password = nullptr) {
+    PasswordFormManager form_manager(
+        password_manager(), client(), client()->driver(), *observed_form(),
+        base::MakeUnique<NiceMock<MockFormSaver>>(), fetcher);
+
+    EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
+                StartUploadRequest(_, _, _, _, _))
+        .Times(::testing::AnyNumber());
+
+    PasswordForm http_stored_form = *saved_match();
+    http_stored_form.username_value = base::ASCIIToUTF16(filled_username);
+    http_stored_form.password_value = base::ASCIIToUTF16(filled_password);
+    if (manager_action == SimulatedManagerAction::OFFERED_PSL)
+      http_stored_form.is_public_suffix_match = true;
+
+    std::vector<const PasswordForm*> matches;
+    if (manager_action != SimulatedManagerAction::NONE)
+      matches.push_back(&http_stored_form);
+
+    // Extra mile: kUserActionChoose is only recorded if there were multiple
+    // logins available and the preferred one was changed.
+    PasswordForm http_stored_form2 = http_stored_form;
+    if (manager_action == SimulatedManagerAction::OFFERED) {
+      http_stored_form.preferred = false;
+      http_stored_form2.username_value = ASCIIToUTF16("user-other@gmail.com");
+      matches.push_back(&http_stored_form2);
+    }
+
+    fetcher->Fetch();
+    fetcher->SetNonFederated(matches, 0u);
+
+    if (submit_result != SimulatedSubmitResult::NONE) {
+      PasswordForm submitted_form(*observed_form());
+      submitted_form.preferred = true;
+      submitted_form.username_value = base::ASCIIToUTF16(filled_username);
+      submitted_form.password_value =
+          submitted_password ? base::ASCIIToUTF16(submitted_password)
+                             : base::ASCIIToUTF16(filled_password);
+
+      form_manager.ProvisionallySave(
+          submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
+      if (submit_result == SimulatedSubmitResult::PASSED) {
+        form_manager.LogSubmitPassed();
+        form_manager.Save();
+      } else {
+        form_manager.LogSubmitFailed();
+      }
+    }
+  }
+
  private:
   // Necessary for callbacks, and for TestAutofillDriver.
   base::MessageLoop message_loop_;
@@ -3182,46 +3268,11 @@
   form_manager.Save();
 }
 
-// If the frame containing the login form is served over HTTPS, no histograms
-// should be recorded.
-TEST_F(PasswordFormManagerTest,
-       SuppressedHTTPSFormsHistogram_NotRecordedOnHTTPSLoginForms) {
-  base::HistogramTester histogram_tester;
-
-  PasswordForm https_observed_form = *observed_form();
-  https_observed_form.origin = GURL("https://accounts.google.com/a/LoginAuth");
-  https_observed_form.signon_realm = "https://accounts.google.com/";
-
-  // Only the scheme of the frame containing the login form maters, not the
-  // scheme of the main frame.
-  ASSERT_FALSE(client()->IsMainFrameSecure());
-
-  // Even if there are suppressed results, they are ignored (but there should be
-  // none in production in this case, though).
-  FakeFormFetcher fetcher;
-  fetcher.set_suppressed_https_forms({saved_match()});
-  fetcher.set_did_complete_querying_suppressed_https_forms(true);
-  fetcher.Fetch();
-
-  std::unique_ptr<PasswordFormManager> form_manager =
-      base::MakeUnique<PasswordFormManager>(
-          password_manager(), client(), client()->driver(), https_observed_form,
-          base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
-  fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
-  form_manager.reset();
-
-  histogram_tester.ExpectTotalCount(
-      "PasswordManager.QueryingSuppressedAccountsFinished", 0);
-  const auto sample_counts = histogram_tester.GetTotalCountsForPrefix(
-      "PasswordManager.SuppressedAccount.");
-  EXPECT_THAT(sample_counts, IsEmpty());
-}
-
 TEST_F(PasswordFormManagerTest,
        SuppressedHTTPSFormsHistogram_NotRecordedIfStoreWasTooSlow) {
   base::HistogramTester histogram_tester;
 
-  fake_form_fetcher()->set_did_complete_querying_suppressed_https_forms(false);
+  fake_form_fetcher()->set_did_complete_querying_suppressed_forms(false);
   fake_form_fetcher()->Fetch();
   std::unique_ptr<PasswordFormManager> form_manager =
       base::MakeUnique<PasswordFormManager>(
@@ -3237,49 +3288,52 @@
   EXPECT_THAT(sample_counts, IsEmpty());
 }
 
-TEST_F(PasswordFormManagerTest,
-       SuppressedHTTPSFormsHistogram_RecordedForHTTPPages) {
-  const char kUsernameAlpha[] = "user-alpha@gmail.com";
-  const char kPasswordAlpha[] = "password-alpha";
-  const char kUsernameBeta[] = "user-beta@gmail.com";
-  const char kPasswordBeta[] = "password-beta";
+TEST_F(PasswordFormManagerTest, SuppressedFormsHistograms) {
+  static constexpr const struct {
+    SuppressedFormType type;
+    const char* expected_histogram_suffix;
+    void (FakeFormFetcher::*suppressed_forms_setter_func)(
+        const std::vector<const autofill::PasswordForm*>&);
+  } kSuppressedFormTypeParams[] = {
+      {SuppressedFormType::HTTPS, "HTTPSNotHTTP",
+       &FakeFormFetcher::set_suppressed_https_forms},
+      {SuppressedFormType::PSL_MATCH, "PSLMatching",
+       &FakeFormFetcher::set_suppressed_psl_matching_forms},
+      {SuppressedFormType::SAME_ORGANIZATION_NAME, "SameOrganizationName",
+       &FakeFormFetcher::set_suppressed_same_organization_name_forms}};
 
-  const auto CreateHTTPSSuppressedForm = [this](const char* username,
-                                                const char* password,
-                                                PasswordForm::Type type) {
-    PasswordForm form = *saved_match();
-    form.origin = GURL("https://accounts.google.com/a/LoginAuth");
-    form.signon_realm = "https://accounts.google.com/";
-    form.type = type;
-    form.username_value = ASCIIToUTF16(username);
-    form.password_value = ASCIIToUTF16(password);
-    return form;
+  struct SuppressedFormData {
+    const char* username_value;
+    const char* password_value;
+    PasswordForm::Type manual_or_generated;
   };
 
-  const PasswordForm kSuppressedGeneratedForm = CreateHTTPSSuppressedForm(
-      kUsernameAlpha, kPasswordAlpha, PasswordForm::TYPE_GENERATED);
-  const PasswordForm kOtherSuppressedGeneratedForm = CreateHTTPSSuppressedForm(
-      kUsernameBeta, kPasswordBeta, PasswordForm::TYPE_GENERATED);
-  const PasswordForm kSuppressedManualForm = CreateHTTPSSuppressedForm(
-      kUsernameAlpha, kPasswordBeta, PasswordForm::TYPE_MANUAL);
+  static constexpr const char kUsernameAlpha[] = "user-alpha@gmail.com";
+  static constexpr const char kPasswordAlpha[] = "password-alpha";
+  static constexpr const char kUsernameBeta[] = "user-beta@gmail.com";
+  static constexpr const char kPasswordBeta[] = "password-beta";
 
-  const std::vector<const PasswordForm*> kSuppressedFormsNone;
-  const std::vector<const PasswordForm*> kSuppressedFormsOneGenerated = {
+  static constexpr const SuppressedFormData kSuppressedGeneratedForm = {
+      kUsernameAlpha, kPasswordAlpha, PasswordForm::TYPE_GENERATED};
+  static constexpr const SuppressedFormData kOtherSuppressedGeneratedForm = {
+      kUsernameBeta, kPasswordBeta, PasswordForm::TYPE_GENERATED};
+  static constexpr const SuppressedFormData kSuppressedManualForm = {
+      kUsernameAlpha, kPasswordBeta, PasswordForm::TYPE_MANUAL};
+
+  const std::vector<const SuppressedFormData*> kSuppressedFormsNone;
+  const std::vector<const SuppressedFormData*> kSuppressedFormsOneGenerated = {
       &kSuppressedGeneratedForm};
-  const std::vector<const PasswordForm*> kSuppressedFormsTwoGenerated = {
+  const std::vector<const SuppressedFormData*> kSuppressedFormsTwoGenerated = {
       &kSuppressedGeneratedForm, &kOtherSuppressedGeneratedForm};
-  const std::vector<const PasswordForm*> kSuppressedFormsOneManual = {
+  const std::vector<const SuppressedFormData*> kSuppressedFormsOneManual = {
       &kSuppressedManualForm};
-  const std::vector<const PasswordForm*> kSuppressedFormsTwoMixed = {
+  const std::vector<const SuppressedFormData*> kSuppressedFormsTwoMixed = {
       &kSuppressedGeneratedForm, &kSuppressedManualForm};
 
-  enum class ManagerAction { NONE, AUTOFILLED, OFFERED, OFFERED_PSL };
-  enum class SubmitResult { NONE, PASSED, FAILED };
-
   const struct {
-    std::vector<const PasswordForm*> simulated_suppressed_forms;
-    ManagerAction simulate_manager_action;
-    SubmitResult simulate_submit_result;
+    std::vector<const SuppressedFormData*> simulated_suppressed_forms;
+    SimulatedManagerAction simulate_manager_action;
+    SimulatedSubmitResult simulate_submit_result;
     const char* filled_username;
     const char* filled_password;
     int expected_histogram_sample_generated;
@@ -3288,144 +3342,157 @@
   } kTestCases[] = {
       // See PasswordManagerSuppressedAccountCrossActionsTaken in enums.xml.
       //
-      // Legend: (SuppressAccountType, SubmitResult, ManagerAction, UserAction)
+      // Legend: (SuppressAccountType, SubmitResult, SimulatedManagerAction,
+      // UserAction)
       // 24 = (None, Passed, None, OverrideUsernameAndPassword)
-      {kSuppressedFormsNone, ManagerAction::NONE, SubmitResult::PASSED,
-       kUsernameAlpha, kPasswordAlpha, 24, 24},
+      {kSuppressedFormsNone, SimulatedManagerAction::NONE,
+       SimulatedSubmitResult::PASSED, kUsernameAlpha, kPasswordAlpha, 24, 24},
       // 5 = (None, NotSubmitted, Autofilled, None)
-      {kSuppressedFormsNone, ManagerAction::AUTOFILLED, SubmitResult::NONE,
-       kUsernameAlpha, kPasswordAlpha, 5, 5},
+      {kSuppressedFormsNone, SimulatedManagerAction::AUTOFILLED,
+       SimulatedSubmitResult::NONE, kUsernameAlpha, kPasswordAlpha, 5, 5},
       // 15 = (None, Failed, Autofilled, None)
-      {kSuppressedFormsNone, ManagerAction::AUTOFILLED, SubmitResult::FAILED,
-       kUsernameAlpha, kPasswordAlpha, 15, 15},
+      {kSuppressedFormsNone, SimulatedManagerAction::AUTOFILLED,
+       SimulatedSubmitResult::FAILED, kUsernameAlpha, kPasswordAlpha, 15, 15},
 
       // 35 = (Exists, NotSubmitted, Autofilled, None)
-      {kSuppressedFormsOneGenerated, ManagerAction::AUTOFILLED,
-       SubmitResult::NONE, kUsernameAlpha, kPasswordAlpha, 35, 5},
+      {kSuppressedFormsOneGenerated, SimulatedManagerAction::AUTOFILLED,
+       SimulatedSubmitResult::NONE, kUsernameAlpha, kPasswordAlpha, 35, 5},
       // 145 = (ExistsSameUsernameAndPassword, Passed, Autofilled, None)
       // 25 = (None, Passed, Autofilled, None)
-      {kSuppressedFormsOneGenerated, ManagerAction::AUTOFILLED,
-       SubmitResult::PASSED, kUsernameAlpha, kPasswordAlpha, 145, 25},
+      {kSuppressedFormsOneGenerated, SimulatedManagerAction::AUTOFILLED,
+       SimulatedSubmitResult::PASSED, kUsernameAlpha, kPasswordAlpha, 145, 25},
       // 104 = (ExistsSameUsername, Failed, None, OverrideUsernameAndPassword)
       // 14 = (None, Failed, None, OverrideUsernameAndPassword)
-      {kSuppressedFormsOneGenerated, ManagerAction::NONE, SubmitResult::FAILED,
-       kUsernameAlpha, kPasswordBeta, 104, 14},
+      {kSuppressedFormsOneGenerated, SimulatedManagerAction::NONE,
+       SimulatedSubmitResult::FAILED, kUsernameAlpha, kPasswordBeta, 104, 14},
       // 84 = (ExistsDifferentUsername, Passed, None,
       //       OverrideUsernameAndPassword)
-      {kSuppressedFormsOneGenerated, ManagerAction::NONE, SubmitResult::PASSED,
-       kUsernameBeta, kPasswordAlpha, 84, 24},
+      {kSuppressedFormsOneGenerated, SimulatedManagerAction::NONE,
+       SimulatedSubmitResult::PASSED, kUsernameBeta, kPasswordAlpha, 84, 24},
 
       // 144 = (ExistsSameUsernameAndPassword, Passed, None,
       //        OverrideUsernameAndPassword)
-      {kSuppressedFormsOneManual, ManagerAction::NONE, SubmitResult::PASSED,
-       kUsernameAlpha, kPasswordBeta, 24, 144},
-      {kSuppressedFormsTwoMixed, ManagerAction::NONE, SubmitResult::PASSED,
-       kUsernameBeta, kPasswordAlpha, 84, 84},
+      {kSuppressedFormsOneManual, SimulatedManagerAction::NONE,
+       SimulatedSubmitResult::PASSED, kUsernameAlpha, kPasswordBeta, 24, 144},
+      {kSuppressedFormsTwoMixed, SimulatedManagerAction::NONE,
+       SimulatedSubmitResult::PASSED, kUsernameBeta, kPasswordAlpha, 84, 84},
 
       // 115 = (ExistsSameUsername, Passed, Autofilled, None)
-      {kSuppressedFormsTwoGenerated, ManagerAction::AUTOFILLED,
-       SubmitResult::PASSED, kUsernameAlpha, kPasswordAlpha, 145, 25},
-      {kSuppressedFormsTwoGenerated, ManagerAction::AUTOFILLED,
-       SubmitResult::PASSED, kUsernameAlpha, kPasswordBeta, 115, 25},
-      {kSuppressedFormsTwoGenerated, ManagerAction::AUTOFILLED,
-       SubmitResult::PASSED, kUsernameBeta, kPasswordAlpha, 115, 25},
-      {kSuppressedFormsTwoGenerated, ManagerAction::AUTOFILLED,
-       SubmitResult::PASSED, kUsernameBeta, kPasswordBeta, 145, 25},
+      {kSuppressedFormsTwoGenerated, SimulatedManagerAction::AUTOFILLED,
+       SimulatedSubmitResult::PASSED, kUsernameAlpha, kPasswordAlpha, 145, 25},
+      {kSuppressedFormsTwoGenerated, SimulatedManagerAction::AUTOFILLED,
+       SimulatedSubmitResult::PASSED, kUsernameAlpha, kPasswordBeta, 115, 25},
+      {kSuppressedFormsTwoGenerated, SimulatedManagerAction::AUTOFILLED,
+       SimulatedSubmitResult::PASSED, kUsernameBeta, kPasswordAlpha, 115, 25},
+      {kSuppressedFormsTwoGenerated, SimulatedManagerAction::AUTOFILLED,
+       SimulatedSubmitResult::PASSED, kUsernameBeta, kPasswordBeta, 145, 25},
 
       // 86 = (ExistsDifferentUsername, Passed, Autofilled, Choose)
       // 26 = (None, Passed, Autofilled, Choose)
-      {kSuppressedFormsOneGenerated, ManagerAction::OFFERED,
-       SubmitResult::PASSED, kUsernameBeta, kPasswordAlpha, 86, 26},
+      {kSuppressedFormsOneGenerated, SimulatedManagerAction::OFFERED,
+       SimulatedSubmitResult::PASSED, kUsernameBeta, kPasswordAlpha, 86, 26},
       // 72 = (ExistsDifferentUsername, Failed, None, ChoosePSL)
       // 12 = (None, Failed, None, ChoosePSL)
-      {kSuppressedFormsOneGenerated, ManagerAction::OFFERED_PSL,
-       SubmitResult::FAILED, kUsernameBeta, kPasswordAlpha, 72, 12},
+      {kSuppressedFormsOneGenerated, SimulatedManagerAction::OFFERED_PSL,
+       SimulatedSubmitResult::FAILED, kUsernameBeta, kPasswordAlpha, 72, 12},
       // 148 = (ExistsSameUsernameAndPassword, Passed, Autofilled,
       //        OverridePassword)
       // 28 = (None, Passed, Autofilled, OverridePassword)
-      {kSuppressedFormsTwoGenerated, ManagerAction::AUTOFILLED,
-       SubmitResult::PASSED, kUsernameBeta, kPasswordAlpha, 148, 28,
+      {kSuppressedFormsTwoGenerated, SimulatedManagerAction::AUTOFILLED,
+       SimulatedSubmitResult::PASSED, kUsernameBeta, kPasswordAlpha, 148, 28,
        kPasswordBeta},
   };
 
-  EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
-              StartUploadRequest(_, _, _, _, _))
-      .Times(::testing::AtLeast(0));
+  for (const auto& suppression_params : kSuppressedFormTypeParams) {
+    for (const auto& test_case : kTestCases) {
+      SCOPED_TRACE(suppression_params.expected_histogram_suffix);
+      SCOPED_TRACE(test_case.expected_histogram_sample_manual);
+      SCOPED_TRACE(test_case.expected_histogram_sample_generated);
 
-  for (const auto& test_case : kTestCases) {
-    SCOPED_TRACE(test_case.expected_histogram_sample_manual);
-    SCOPED_TRACE(test_case.expected_histogram_sample_generated);
+      base::HistogramTester histogram_tester;
 
-    base::HistogramTester histogram_tester;
-
-    const base::string16 filled_username =
-        ASCIIToUTF16(test_case.filled_username);
-    const base::string16 filled_password =
-        ASCIIToUTF16(test_case.filled_password);
-
-    FakeFormFetcher fetcher;
-    std::unique_ptr<PasswordFormManager> form_manager =
-        base::MakeUnique<PasswordFormManager>(
-            password_manager(), client(), client()->driver(), *observed_form(),
-            base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
-
-    PasswordForm http_stored_form = *saved_match();
-    http_stored_form.username_value = filled_username;
-    http_stored_form.password_value = filled_password;
-    if (test_case.simulate_manager_action == ManagerAction::OFFERED_PSL)
-      http_stored_form.is_public_suffix_match = true;
-
-    std::vector<const PasswordForm*> matches;
-    if (test_case.simulate_manager_action != ManagerAction::NONE)
-      matches.push_back(&http_stored_form);
-
-    // Extra mile: kUserActionChoose is only recorded if there were multiple
-    // logins available and the preferred one was changed.
-    PasswordForm http_stored_form2 = http_stored_form;
-    if (test_case.simulate_manager_action == ManagerAction::OFFERED) {
-      http_stored_form.preferred = false;
-      http_stored_form2.username_value = ASCIIToUTF16("user-other@gmail.com");
-      matches.push_back(&http_stored_form2);
-    }
-
-    fetcher.set_did_complete_querying_suppressed_https_forms(true);
-    fetcher.set_suppressed_https_forms(test_case.simulated_suppressed_forms);
-    fetcher.Fetch();
-    fetcher.SetNonFederated(matches, 0u);
-
-    if (test_case.simulate_submit_result != SubmitResult::NONE) {
-      PasswordForm submitted_form(*observed_form());
-      submitted_form.preferred = true;
-      submitted_form.username_value = filled_username;
-      submitted_form.password_value =
-          test_case.submitted_password
-              ? ASCIIToUTF16(test_case.submitted_password)
-              : filled_password;
-
-      form_manager->ProvisionallySave(
-          submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
-      if (test_case.simulate_submit_result == SubmitResult::PASSED) {
-        form_manager->LogSubmitPassed();
-        form_manager->Save();
-      } else {
-        form_manager->LogSubmitFailed();
+      std::vector<PasswordForm> suppressed_forms;
+      for (const auto* form_data : test_case.simulated_suppressed_forms) {
+        suppressed_forms.push_back(CreateSuppressedForm(
+            suppression_params.type, form_data->username_value,
+            form_data->password_value, form_data->manual_or_generated));
       }
+
+      std::vector<const PasswordForm*> suppressed_forms_ptrs;
+      for (const auto& form : suppressed_forms)
+        suppressed_forms_ptrs.push_back(&form);
+
+      FakeFormFetcher fetcher;
+      fetcher.set_did_complete_querying_suppressed_forms(true);
+
+      (&fetcher->*suppression_params.suppressed_forms_setter_func)(
+          suppressed_forms_ptrs);
+
+      SimulateActionsOnHTTPObservedForm(
+          &fetcher, test_case.simulate_manager_action,
+          test_case.simulate_submit_result, test_case.filled_username,
+          test_case.filled_password, test_case.submitted_password);
+
+      histogram_tester.ExpectUniqueSample(
+          "PasswordManager.QueryingSuppressedAccountsFinished", true, 1);
+
+      EXPECT_THAT(
+          histogram_tester.GetAllSamples(
+              "PasswordManager.SuppressedAccount.Generated." +
+              std::string(suppression_params.expected_histogram_suffix)),
+          ::testing::ElementsAre(
+              base::Bucket(test_case.expected_histogram_sample_generated, 1)));
+      EXPECT_THAT(
+          histogram_tester.GetAllSamples(
+              "PasswordManager.SuppressedAccount.Manual." +
+              std::string(suppression_params.expected_histogram_suffix)),
+          ::testing::ElementsAre(
+              base::Bucket(test_case.expected_histogram_sample_manual, 1)));
     }
-
-    form_manager.reset();
-
-    histogram_tester.ExpectUniqueSample(
-        "PasswordManager.QueryingSuppressedAccountsFinished", true, 1);
-
-    EXPECT_THAT(histogram_tester.GetAllSamples(
-                    "PasswordManager.SuppressedAccount.Generated.HTTPSNotHTTP"),
-                ::testing::ElementsAre(base::Bucket(
-                    test_case.expected_histogram_sample_generated, 1)));
-    EXPECT_THAT(histogram_tester.GetAllSamples(
-                    "PasswordManager.SuppressedAccount.Manual.HTTPSNotHTTP"),
-                ::testing::ElementsAre(base::Bucket(
-                    test_case.expected_histogram_sample_manual, 1)));
   }
 }
 
+// If the frame containing the login form is served over HTTPS, no histograms on
+// supressed HTTPS forms should be recorded. Everything else should still be.
+TEST_F(PasswordFormManagerTest, SuppressedHTTPSFormsHistogram_NotRecordedFor) {
+  base::HistogramTester histogram_tester;
+
+  PasswordForm https_observed_form = *observed_form();
+  https_observed_form.origin = GURL("https://accounts.google.com/a/LoginAuth");
+  https_observed_form.signon_realm = "https://accounts.google.com/";
+
+  // Only the scheme of the frame containing the login form maters, not the
+  // scheme of the main frame.
+  ASSERT_FALSE(client()->IsMainFrameSecure());
+
+  // Even if there were any suppressed HTTPS forms, they should be are ignored
+  // (but there should be none in production in this case).
+  FakeFormFetcher fetcher;
+  fetcher.set_suppressed_https_forms({saved_match()});
+  fetcher.set_did_complete_querying_suppressed_forms(true);
+  fetcher.Fetch();
+
+  std::unique_ptr<PasswordFormManager> form_manager =
+      base::MakeUnique<PasswordFormManager>(
+          password_manager(), client(), client()->driver(), https_observed_form,
+          base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
+  fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
+  form_manager.reset();
+
+  histogram_tester.ExpectUniqueSample(
+      "PasswordManager.QueryingSuppressedAccountsFinished", true, 1);
+  histogram_tester.ExpectTotalCount(
+      "PasswordManager.SuppressedAccount.Generated.HTTPSNotHTTP", 0);
+  histogram_tester.ExpectTotalCount(
+      "PasswordManager.SuppressedAccount.Manual.HTTPSNotHTTP", 0);
+  histogram_tester.ExpectTotalCount(
+      "PasswordManager.SuppressedAccount.Generated.PSLMatching", 1);
+  histogram_tester.ExpectTotalCount(
+      "PasswordManager.SuppressedAccount.Manual.PSLMatching", 1);
+  histogram_tester.ExpectTotalCount(
+      "PasswordManager.SuppressedAccount.Generated.SameOrganizationName", 1);
+  histogram_tester.ExpectTotalCount(
+      "PasswordManager.SuppressedAccount.Manual.SameOrganizationName", 1);
+}
+
 }  // namespace password_manager
diff --git a/components/password_manager/core/browser/password_store_default.h b/components/password_manager/core/browser/password_store_default.h
index 0c7faebe..be550455 100644
--- a/components/password_manager/core/browser/password_store_default.h
+++ b/components/password_manager/core/browser/password_store_default.h
@@ -34,7 +34,7 @@
 
   void ShutdownOnUIThread() override;
 
-  // To be used only for testing.
+  // To be used only for testing or in subclasses.
   LoginDatabase* login_db() const { return login_db_.get(); }
 
  protected:
@@ -86,10 +86,6 @@
     return login_db_->DeleteAndRecreateDatabaseFile();
   }
 
-  void set_login_db(std::unique_ptr<password_manager::LoginDatabase> login_db) {
-    login_db_.swap(login_db);
-  }
-
  private:
   // Resets |login_db_| on the background thread.
   void ResetLoginDB();
diff --git a/components/password_manager/core/browser/suppressed_form_fetcher.cc b/components/password_manager/core/browser/suppressed_form_fetcher.cc
new file mode 100644
index 0000000..1a52b089
--- /dev/null
+++ b/components/password_manager/core/browser/suppressed_form_fetcher.cc
@@ -0,0 +1,41 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/password_manager/core/browser/suppressed_form_fetcher.h"
+
+#include "base/logging.h"
+#include "base/stl_util.h"
+#include "components/password_manager/core/browser/password_manager_client.h"
+#include "components/password_manager/core/browser/password_store.h"
+#include "url/gurl.h"
+
+namespace password_manager {
+
+SuppressedFormFetcher::SuppressedFormFetcher(
+    const std::string& observed_signon_realm,
+    const PasswordManagerClient* client,
+    Consumer* consumer)
+    : client_(client),
+      consumer_(consumer),
+      observed_signon_realm_(observed_signon_realm) {
+  DCHECK(client_);
+  DCHECK(consumer_);
+  DCHECK(GURL(observed_signon_realm_).SchemeIsHTTPOrHTTPS());
+  client_->GetPasswordStore()->GetLoginsForSameOrganizationName(
+      observed_signon_realm_, this);
+}
+
+SuppressedFormFetcher::~SuppressedFormFetcher() = default;
+
+void SuppressedFormFetcher::OnGetPasswordStoreResults(
+    std::vector<std::unique_ptr<autofill::PasswordForm>> results) {
+  base::EraseIf(results,
+                [this](const std::unique_ptr<autofill::PasswordForm>& form) {
+                  return form->signon_realm == observed_signon_realm_;
+                });
+
+  consumer_->ProcessSuppressedForms(std::move(results));
+}
+
+}  // namespace password_manager
diff --git a/components/password_manager/core/browser/suppressed_https_form_fetcher.h b/components/password_manager/core/browser/suppressed_form_fetcher.h
similarity index 62%
rename from components/password_manager/core/browser/suppressed_https_form_fetcher.h
rename to components/password_manager/core/browser/suppressed_form_fetcher.h
index b812368..7f663494 100644
--- a/components/password_manager/core/browser/suppressed_https_form_fetcher.h
+++ b/components/password_manager/core/browser/suppressed_form_fetcher.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_SUPPRESSED_HTTPS_FORM_FETCHER_H_
-#define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_SUPPRESSED_HTTPS_FORM_FETCHER_H_
+#ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_SUPPRESSED_FORM_FETCHER_H_
+#define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_SUPPRESSED_FORM_FETCHER_H_
 
 #include <memory>
 #include <vector>
@@ -12,7 +12,6 @@
 #include "base/macros.h"
 #include "components/autofill/core/common/password_form.h"
 #include "components/password_manager/core/browser/password_store_consumer.h"
-#include "url/gurl.h"
 
 namespace password_manager {
 
@@ -26,19 +25,19 @@
 //
 // This logic is implemented by this class, a separate PasswordStore consumer,
 // to make it very sure that these credentials will not get mistakenly filled.
-class SuppressedHTTPSFormFetcher : public PasswordStoreConsumer {
+class SuppressedFormFetcher : public PasswordStoreConsumer {
  public:
   // Interface to be implemented by the consumer of this class.
   class Consumer {
    public:
-    virtual void ProcessSuppressedHTTPSForms(
+    virtual void ProcessSuppressedForms(
         std::vector<std::unique_ptr<autofill::PasswordForm>> forms) = 0;
   };
 
-  SuppressedHTTPSFormFetcher(const std::string& observed_signon_realm,
-                             const PasswordManagerClient* client,
-                             Consumer* consumer);
-  ~SuppressedHTTPSFormFetcher() override;
+  SuppressedFormFetcher(const std::string& observed_signon_realm,
+                        const PasswordManagerClient* client,
+                        Consumer* consumer);
+  ~SuppressedFormFetcher() override;
 
  protected:
   // PasswordStoreConsumer:
@@ -46,18 +45,18 @@
       std::vector<std::unique_ptr<autofill::PasswordForm>> results) override;
 
  private:
-  FRIEND_TEST_ALL_PREFIXES(SuppressedHTTPSFormFetcherTest, EmptyStore);
-  FRIEND_TEST_ALL_PREFIXES(SuppressedHTTPSFormFetcherTest, FullStore);
+  FRIEND_TEST_ALL_PREFIXES(SuppressedFormFetcherTest, EmptyStore);
+  FRIEND_TEST_ALL_PREFIXES(SuppressedFormFetcherTest, FullStore);
 
   // The client and the consumer should outlive |this|.
   const PasswordManagerClient* client_;
   Consumer* consumer_;
 
-  const GURL observed_signon_realm_as_url_;
+  const std::string observed_signon_realm_;
 
-  DISALLOW_COPY_AND_ASSIGN(SuppressedHTTPSFormFetcher);
+  DISALLOW_COPY_AND_ASSIGN(SuppressedFormFetcher);
 };
 
 }  // namespace password_manager
 
-#endif  // COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_SUPPRESSED_HTTPS_FORM_FETCHER_H_
+#endif  // COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_SUPPRESSED_FORM_FETCHER_H_
diff --git a/components/password_manager/core/browser/suppressed_https_form_fetcher_unittest.cc b/components/password_manager/core/browser/suppressed_form_fetcher_unittest.cc
similarity index 81%
rename from components/password_manager/core/browser/suppressed_https_form_fetcher_unittest.cc
rename to components/password_manager/core/browser/suppressed_form_fetcher_unittest.cc
index f4f2e59..d4caa04 100644
--- a/components/password_manager/core/browser/suppressed_https_form_fetcher_unittest.cc
+++ b/components/password_manager/core/browser/suppressed_form_fetcher_unittest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "components/password_manager/core/browser/suppressed_https_form_fetcher.h"
+#include "components/password_manager/core/browser/suppressed_form_fetcher.h"
 
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
@@ -27,7 +27,7 @@
 constexpr const char kTestHttpsSameOrgNameURL[] =
     "https://login.example.co.uk/";
 
-class MockConsumer : public SuppressedHTTPSFormFetcher::Consumer {
+class MockConsumer : public SuppressedFormFetcher::Consumer {
  public:
   MockConsumer() = default;
   ~MockConsumer() = default;
@@ -37,8 +37,8 @@
                void(const std::vector<std::unique_ptr<PasswordForm>>&));
 
  protected:
-  // SuppressedHTTPSFormFetcher::Consumer:
-  void ProcessSuppressedHTTPSForms(
+  // SuppressedFormFetcher::Consumer:
+  void ProcessSuppressedForms(
       std::vector<std::unique_ptr<PasswordForm>> forms) override {
     ProcessSuppressedHTTPSFormsConstRef(forms);
   }
@@ -69,10 +69,10 @@
 
 }  // namespace
 
-class SuppressedHTTPSFormFetcherTest : public testing::Test {
+class SuppressedFormFetcherTest : public testing::Test {
  public:
-  SuppressedHTTPSFormFetcherTest() = default;
-  ~SuppressedHTTPSFormFetcherTest() override = default;
+  SuppressedFormFetcherTest() = default;
+  ~SuppressedFormFetcherTest() override = default;
 
   MockConsumer* mock_consumer() { return &consumer_; }
   MockPasswordStore* mock_store() { return &client_.mock_password_store(); }
@@ -84,38 +84,34 @@
   MockConsumer consumer_;
   PasswordManagerClientWithMockStore client_;
 
-  DISALLOW_COPY_AND_ASSIGN(SuppressedHTTPSFormFetcherTest);
+  DISALLOW_COPY_AND_ASSIGN(SuppressedFormFetcherTest);
 };
 
-TEST_F(SuppressedHTTPSFormFetcherTest, EmptyStore) {
+TEST_F(SuppressedFormFetcherTest, EmptyStore) {
   EXPECT_CALL(*mock_store(), GetLoginsForSameOrganizationName(kTestHttpURL, _));
-  SuppressedHTTPSFormFetcher suppressed_form_fetcher(
-      kTestHttpURL, mock_client(), mock_consumer());
+  SuppressedFormFetcher suppressed_form_fetcher(kTestHttpURL, mock_client(),
+                                                mock_consumer());
   EXPECT_CALL(*mock_consumer(),
               ProcessSuppressedHTTPSFormsConstRef(::testing::IsEmpty()));
   suppressed_form_fetcher.OnGetPasswordStoreResults(
       std::vector<std::unique_ptr<PasswordForm>>());
 }
 
-TEST_F(SuppressedHTTPSFormFetcherTest, FullStore) {
-  static constexpr const PasswordFormData kSuppressedHTTPSCredentials[] = {
+TEST_F(SuppressedFormFetcherTest, FullStore) {
+  static constexpr const PasswordFormData kSuppressedCredentials[] = {
       // Credential that is for the HTTPS counterpart of the observed form.
       {PasswordForm::SCHEME_HTML, kTestHttpsURL, kTestHttpsURL, "", L"", L"",
        L"", L"username_value_1", L"password_value_1", true, 1},
       // Once again, but with a different username/password.
       {PasswordForm::SCHEME_HTML, kTestHttpsURL, kTestHttpsURL, "", L"", L"",
        L"", L"username_value_2", L"password_value_2", true, 1},
-  };
-
-  static constexpr const PasswordFormData kOtherCredentials[] = {
-      // Credential exactly matching the observed form.
-      {PasswordForm::SCHEME_HTML, kTestHttpURL, kTestHttpURL, "", L"", L"", L"",
-       L"username_value_1", L"password_value_1", true, 1},
       // A PSL match to the observed form.
       {PasswordForm::SCHEME_HTML, kTestPSLMatchingHttpURL,
        kTestPSLMatchingHttpURL, "", L"", L"", L"", L"username_value_2",
        L"password_value_2", true, 1},
-      // A PSL match to the HTTPS counterpart of the observed form.
+      // A PSL match to the HTTPS counterpart of the observed form. Note that
+      // this is *not* a PSL match to the observed form, but a same organization
+      // name match.
       {PasswordForm::SCHEME_HTML, kTestPSLMatchingHttpsURL,
        kTestPSLMatchingHttpsURL, "", L"", L"", L"", L"username_value_3",
        L"password_value_3", true, 1},
@@ -130,21 +126,27 @@
        kTestHttpsSameOrgNameURL, "", L"", L"", L"", L"username_value_5",
        L"password_value_5", true, 1}};
 
+  static const PasswordFormData kNotSuppressedCredentials[] = {
+      // Credential exactly matching the observed form.
+      {PasswordForm::SCHEME_HTML, kTestHttpURL, kTestHttpURL, "", L"", L"", L"",
+       L"username_value_1", L"password_value_1", true, 1},
+  };
+
   std::vector<std::unique_ptr<PasswordForm>> simulated_store_results;
   std::vector<std::unique_ptr<PasswordForm>> expected_results;
-  for (const auto& form_data : kSuppressedHTTPSCredentials) {
+  for (const auto& form_data : kSuppressedCredentials) {
     expected_results.push_back(CreatePasswordFormFromDataForTesting(form_data));
     simulated_store_results.push_back(
         CreatePasswordFormFromDataForTesting(form_data));
   }
-  for (const auto& form_data : kOtherCredentials) {
+  for (const auto& form_data : kNotSuppressedCredentials) {
     simulated_store_results.push_back(
         CreatePasswordFormFromDataForTesting(form_data));
   }
 
   EXPECT_CALL(*mock_store(), GetLoginsForSameOrganizationName(kTestHttpURL, _));
-  SuppressedHTTPSFormFetcher suppressed_form_fetcher(
-      kTestHttpURL, mock_client(), mock_consumer());
+  SuppressedFormFetcher suppressed_form_fetcher(kTestHttpURL, mock_client(),
+                                                mock_consumer());
   EXPECT_CALL(*mock_consumer(),
               ProcessSuppressedHTTPSFormsConstRef(
                   UnorderedPasswordFormElementsAre(&expected_results)));
diff --git a/components/password_manager/core/browser/suppressed_https_form_fetcher.cc b/components/password_manager/core/browser/suppressed_https_form_fetcher.cc
deleted file mode 100644
index 79e9dd52..0000000
--- a/components/password_manager/core/browser/suppressed_https_form_fetcher.cc
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "components/password_manager/core/browser/suppressed_https_form_fetcher.h"
-
-#include "base/logging.h"
-#include "base/stl_util.h"
-#include "components/password_manager/core/browser/password_manager_client.h"
-#include "components/password_manager/core/browser/password_store.h"
-#include "url/gurl.h"
-
-namespace password_manager {
-
-SuppressedHTTPSFormFetcher::SuppressedHTTPSFormFetcher(
-    const std::string& observed_signon_realm,
-    const PasswordManagerClient* client,
-    Consumer* consumer)
-    : client_(client),
-      consumer_(consumer),
-      observed_signon_realm_as_url_(observed_signon_realm) {
-  DCHECK(client_);
-  DCHECK(consumer_);
-  DCHECK(observed_signon_realm_as_url_.SchemeIs(url::kHttpScheme));
-  client_->GetPasswordStore()->GetLoginsForSameOrganizationName(
-      observed_signon_realm, this);
-}
-
-SuppressedHTTPSFormFetcher::~SuppressedHTTPSFormFetcher() = default;
-
-void SuppressedHTTPSFormFetcher::OnGetPasswordStoreResults(
-    std::vector<std::unique_ptr<autofill::PasswordForm>> results) {
-  base::EraseIf(
-      results, [this](const std::unique_ptr<autofill::PasswordForm>& form) {
-        GURL candidate_signon_realm_as_url(form->signon_realm);
-        return !candidate_signon_realm_as_url.SchemeIs(url::kHttpsScheme) ||
-               candidate_signon_realm_as_url.host() !=
-                   observed_signon_realm_as_url_.host();
-      });
-
-  consumer_->ProcessSuppressedHTTPSForms(std::move(results));
-}
-
-}  // namespace password_manager
diff --git a/components/viz/client/client_compositor_frame_sink.cc b/components/viz/client/client_compositor_frame_sink.cc
index df0ad3f9..e363f8c 100644
--- a/components/viz/client/client_compositor_frame_sink.cc
+++ b/components/viz/client/client_compositor_frame_sink.cc
@@ -14,16 +14,36 @@
 
 ClientCompositorFrameSink::ClientCompositorFrameSink(
     scoped_refptr<cc::ContextProvider> context_provider,
+    scoped_refptr<cc::ContextProvider> worker_context_provider,
     gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
+    cc::SharedBitmapManager* shared_bitmap_manager,
+    std::unique_ptr<cc::SyntheticBeginFrameSource> synthetic_begin_frame_source,
     cc::mojom::MojoCompositorFrameSinkPtrInfo compositor_frame_sink_info,
     cc::mojom::MojoCompositorFrameSinkClientRequest client_request,
     bool enable_surface_synchronization)
     : cc::CompositorFrameSink(std::move(context_provider),
-                              nullptr,
+                              std::move(worker_context_provider),
                               gpu_memory_buffer_manager,
-                              nullptr),
+                              shared_bitmap_manager),
+      synthetic_begin_frame_source_(std::move(synthetic_begin_frame_source)),
       compositor_frame_sink_info_(std::move(compositor_frame_sink_info)),
       client_request_(std::move(client_request)),
+      client_binding_(this),
+      enable_surface_synchronization_(enable_surface_synchronization) {
+  DETACH_FROM_THREAD(thread_checker_);
+}
+
+ClientCompositorFrameSink::ClientCompositorFrameSink(
+    scoped_refptr<cc::VulkanContextProvider> vulkan_context_provider,
+    std::unique_ptr<cc::SyntheticBeginFrameSource> synthetic_begin_frame_source,
+    cc::mojom::MojoCompositorFrameSinkPtrInfo compositor_frame_sink_info,
+    cc::mojom::MojoCompositorFrameSinkClientRequest client_request,
+    bool enable_surface_synchronization)
+    : cc::CompositorFrameSink(std::move(vulkan_context_provider)),
+      synthetic_begin_frame_source_(std::move(synthetic_begin_frame_source)),
+      compositor_frame_sink_info_(std::move(compositor_frame_sink_info)),
+      client_request_(std::move(client_request)),
+      client_binding_(this),
       enable_surface_synchronization_(enable_surface_synchronization) {
   DETACH_FROM_THREAD(thread_checker_);
 }
@@ -32,25 +52,30 @@
 
 bool ClientCompositorFrameSink::BindToClient(
     cc::CompositorFrameSinkClient* client) {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
   if (!cc::CompositorFrameSink::BindToClient(client))
     return false;
 
-  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   compositor_frame_sink_.Bind(std::move(compositor_frame_sink_info_));
-  client_binding_.reset(
-      new mojo::Binding<cc::mojom::MojoCompositorFrameSinkClient>(
-          this, std::move(client_request_)));
+  client_binding_.Bind(std::move(client_request_));
 
-  begin_frame_source_ = base::MakeUnique<cc::ExternalBeginFrameSource>(this);
+  if (synthetic_begin_frame_source_) {
+    client->SetBeginFrameSource(synthetic_begin_frame_source_.get());
+  } else {
+    begin_frame_source_ = base::MakeUnique<cc::ExternalBeginFrameSource>(this);
+    client->SetBeginFrameSource(begin_frame_source_.get());
+  }
 
-  client->SetBeginFrameSource(begin_frame_source_.get());
   return true;
 }
 
 void ClientCompositorFrameSink::DetachFromClient() {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   client_->SetBeginFrameSource(nullptr);
   begin_frame_source_.reset();
-  client_binding_.reset();
+  synthetic_begin_frame_source_.reset();
+  client_binding_.Close();
   compositor_frame_sink_.reset();
   cc::CompositorFrameSink::DetachFromClient();
 }
@@ -65,20 +90,17 @@
 void ClientCompositorFrameSink::SubmitCompositorFrame(
     cc::CompositorFrame frame) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  if (!compositor_frame_sink_)
-    return;
-
   DCHECK(frame.metadata.begin_frame_ack.has_damage);
   DCHECK_LE(cc::BeginFrameArgs::kStartingFrameNumber,
             frame.metadata.begin_frame_ack.sequence_number);
 
-  gfx::Size frame_size = frame.render_pass_list.back()->output_rect.size();
-  if (!local_surface_id_.is_valid() ||
-      frame_size != last_submitted_frame_size_) {
-    last_submitted_frame_size_ = frame_size;
-    if (!enable_surface_synchronization_)
-      local_surface_id_ = id_allocator_.GenerateId();
-  }
+  if (!enable_surface_synchronization_ &&
+      (!local_surface_id_.is_valid() || ShouldAllocateNewLocalSurfaceId(frame)))
+    local_surface_id_ = id_allocator_.GenerateId();
+
+  surface_size_ = frame.render_pass_list.back()->output_rect.size();
+  device_scale_factor_ = frame.metadata.device_scale_factor;
+
   compositor_frame_sink_->SubmitCompositorFrame(local_surface_id_,
                                                 std::move(frame));
 }
@@ -93,25 +115,29 @@
 void ClientCompositorFrameSink::DidReceiveCompositorFrameAck(
     const cc::ReturnedResourceArray& resources) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  if (!client_)
-    return;
   client_->ReclaimResources(resources);
   client_->DidReceiveCompositorFrameAck();
 }
 
 void ClientCompositorFrameSink::OnBeginFrame(
     const cc::BeginFrameArgs& begin_frame_args) {
-  begin_frame_source_->OnBeginFrame(begin_frame_args);
+  if (begin_frame_source_)
+    begin_frame_source_->OnBeginFrame(begin_frame_args);
 }
 
 void ClientCompositorFrameSink::ReclaimResources(
     const cc::ReturnedResourceArray& resources) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  if (!client_)
-    return;
   client_->ReclaimResources(resources);
 }
 
+bool ClientCompositorFrameSink::ShouldAllocateNewLocalSurfaceId(
+    const cc::CompositorFrame& frame) {
+  gfx::Size frame_size = frame.render_pass_list.back()->output_rect.size();
+  return frame_size != surface_size_ ||
+         device_scale_factor_ != frame.metadata.device_scale_factor;
+}
+
 void ClientCompositorFrameSink::OnNeedsBeginFrames(bool needs_begin_frames) {
   compositor_frame_sink_->SetNeedsBeginFrame(needs_begin_frames);
 }
diff --git a/components/viz/client/client_compositor_frame_sink.h b/components/viz/client/client_compositor_frame_sink.h
index 407aa41..008b730 100644
--- a/components/viz/client/client_compositor_frame_sink.h
+++ b/components/viz/client/client_compositor_frame_sink.h
@@ -23,7 +23,19 @@
  public:
   ClientCompositorFrameSink(
       scoped_refptr<cc::ContextProvider> context_provider,
+      scoped_refptr<cc::ContextProvider> worker_context_provider,
       gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
+      cc::SharedBitmapManager* shared_bitmap_manager,
+      std::unique_ptr<cc::SyntheticBeginFrameSource>
+          synthetic_begin_frame_source,
+      cc::mojom::MojoCompositorFrameSinkPtrInfo compositor_frame_sink_info,
+      cc::mojom::MojoCompositorFrameSinkClientRequest client_request,
+      bool enable_surface_synchronization);
+
+  ClientCompositorFrameSink(
+      scoped_refptr<cc::VulkanContextProvider> vulkan_context_provider,
+      std::unique_ptr<cc::SyntheticBeginFrameSource>
+          synthetic_begin_frame_source,
       cc::mojom::MojoCompositorFrameSinkPtrInfo compositor_frame_sink_info,
       cc::mojom::MojoCompositorFrameSinkClientRequest client_request,
       bool enable_surface_synchronization);
@@ -38,6 +50,9 @@
   void DidNotProduceFrame(const cc::BeginFrameAck& ack) override;
 
  private:
+  virtual bool ShouldAllocateNewLocalSurfaceId(
+      const cc::CompositorFrame& frame);
+
   // cc::mojom::MojoCompositorFrameSinkClient implementation:
   void DidReceiveCompositorFrameAck(
       const cc::ReturnedResourceArray& resources) override;
@@ -47,15 +62,17 @@
   // cc::ExternalBeginFrameSourceClient implementation.
   void OnNeedsBeginFrames(bool needs_begin_frames) override;
 
-  gfx::Size last_submitted_frame_size_;
+  gfx::Size surface_size_;
+  float device_scale_factor_ = 0.f;
+
   cc::LocalSurfaceId local_surface_id_;
   cc::LocalSurfaceIdAllocator id_allocator_;
   std::unique_ptr<cc::ExternalBeginFrameSource> begin_frame_source_;
+  std::unique_ptr<cc::SyntheticBeginFrameSource> synthetic_begin_frame_source_;
   cc::mojom::MojoCompositorFrameSinkPtrInfo compositor_frame_sink_info_;
   cc::mojom::MojoCompositorFrameSinkClientRequest client_request_;
   cc::mojom::MojoCompositorFrameSinkPtr compositor_frame_sink_;
-  std::unique_ptr<mojo::Binding<cc::mojom::MojoCompositorFrameSinkClient>>
-      client_binding_;
+  mojo::Binding<cc::mojom::MojoCompositorFrameSinkClient> client_binding_;
   THREAD_CHECKER(thread_checker_);
   const bool enable_surface_synchronization_;
 
diff --git a/content/browser/download/download_browsertest.cc b/content/browser/download/download_browsertest.cc
index bdd16f04..a5debca 100644
--- a/content/browser/download/download_browsertest.cc
+++ b/content/browser/download/download_browsertest.cc
@@ -606,13 +606,10 @@
   // Create a DownloadTestObserverTerminal that will wait for the
   // specified number of downloads to finish.
   DownloadTestObserver* CreateWaiter(
-      Shell* shell,
-      int num_downloads,
-      DownloadTestObserver::DangerousDownloadAction dangerous_download_action =
-          DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL) {
+      Shell* shell, int num_downloads) {
     DownloadManager* download_manager = DownloadManagerForShell(shell);
     return new DownloadTestObserverTerminal(download_manager, num_downloads,
-                                            dangerous_download_action);
+        DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL);
   }
 
   void WaitForInterrupt(DownloadItem* download) {
@@ -659,11 +656,8 @@
   void NavigateToURLAndWaitForDownload(
       Shell* shell,
       const GURL& url,
-      DownloadItem::DownloadState expected_terminal_state,
-      DownloadTestObserver::DangerousDownloadAction dangerous_download_action =
-          DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL) {
-    std::unique_ptr<DownloadTestObserver> observer(
-        CreateWaiter(shell, 1, dangerous_download_action));
+      DownloadItem::DownloadState expected_terminal_state) {
+    std::unique_ptr<DownloadTestObserver> observer(CreateWaiter(shell, 1));
     NavigateToURL(shell, url);
     observer->WaitForFinished();
     EXPECT_EQ(1u, observer->NumDownloadsSeenInState(expected_terminal_state));
@@ -2307,8 +2301,6 @@
           .append(request_handler.url().spec()));
 
   DownloadItem* download = StartDownloadAndReturnItem(shell(), document_url);
-  std::unique_ptr<DownloadTestObserver> observer(CreateWaiter(
-      shell(), 1, DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT));
   WaitForInterrupt(download);
 
   download->Resume();
@@ -2407,8 +2399,7 @@
   origin_two.StartAcceptingConnections();
 
   NavigateToURLAndWaitForDownload(
-      shell(), referrer_url, DownloadItem::COMPLETE,
-      DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT);
+      shell(), referrer_url, DownloadItem::COMPLETE);
 
   std::vector<DownloadItem*> downloads;
   DownloadManagerForShell(shell())->GetAllDownloads(&downloads);
@@ -2416,7 +2407,6 @@
 
   EXPECT_EQ(FILE_PATH_LITERAL("download"),
             downloads[0]->GetTargetFilePath().BaseName().value());
-  EXPECT_EQ(DOWNLOAD_DANGER_TYPE_USER_VALIDATED, downloads[0]->GetDangerType());
   ASSERT_TRUE(origin_one.ShutdownAndWaitUntilComplete());
   ASSERT_TRUE(origin_two.ShutdownAndWaitUntilComplete());
 }
@@ -2582,8 +2572,6 @@
       embedded_test_server()->GetURL(
           kOriginTwo, std::string("/download/download-attribute.html?target=") +
                           echo_cookie_url.spec()));
-  std::unique_ptr<DownloadTestObserver> observer(CreateWaiter(
-      shell(), 1, DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT));
   WaitForCompletion(download);
 
   ASSERT_TRUE(
@@ -2681,8 +2669,6 @@
   GURL document_url =
       origin_two.GetURL("/iframe-host.html?target=" + frame_url.spec());
   DownloadItem* download = StartDownloadAndReturnItem(shell(), document_url);
-  std::unique_ptr<DownloadTestObserver> observer(CreateWaiter(
-      shell(), 1, DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT));
   WaitForCompletion(download);
 
   EXPECT_STREQ(FILE_PATH_LITERAL("download-test.lib"),
diff --git a/content/browser/download/download_create_info.h b/content/browser/download/download_create_info.h
index fa193f2..dbb5997 100644
--- a/content/browser/download/download_create_info.h
+++ b/content/browser/download/download_create_info.h
@@ -24,7 +24,6 @@
 #include "net/log/net_log_with_source.h"
 #include "ui/base/page_transition_types.h"
 #include "url/gurl.h"
-#include "url/origin.h"
 
 namespace net {
 class HttpResponseHeaders;
@@ -143,9 +142,6 @@
   // The HTTP request method.
   std::string method;
 
-  // The initiating origin of the download.
-  base::Optional<url::Origin> initiator;
-
  private:
   DISALLOW_COPY_AND_ASSIGN(DownloadCreateInfo);
 };
diff --git a/content/browser/download/download_item_impl.cc b/content/browser/download/download_item_impl.cc
index a0063ae..28a6209 100644
--- a/content/browser/download/download_item_impl.cc
+++ b/content/browser/download/download_item_impl.cc
@@ -57,7 +57,6 @@
 #include "content/public/browser/storage_partition.h"
 #include "content/public/common/content_features.h"
 #include "content/public/common/referrer.h"
-#include "net/http/http_content_disposition.h"
 #include "net/http/http_response_headers.h"
 #include "net/log/net_log.h"
 #include "net/log/net_log_event_type.h"
@@ -236,7 +235,6 @@
       last_modified_time_(info.last_modified),
       etag_(info.etag),
       net_log_(net_log),
-      initiator_(info.initiator),
       weak_ptr_factory_(this) {
   delegate_->Attach();
   Init(true /* actively downloading */, SRC_ACTIVE_DOWNLOAD);
@@ -1390,27 +1388,7 @@
 
   target_path_ = target_path;
   target_disposition_ = disposition;
-  if (danger_type != DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS)
-    SetDangerType(danger_type);
-
-  // Even if the delegate didn't flag the download as dangerous, we might have
-  // to mark it as dangerous if it's cross origin but doesn't have a content
-  // disposition header.
-  if (!IsDangerous() && danger_type_ != DOWNLOAD_DANGER_TYPE_USER_VALIDATED) {
-    if (!url_chain_.back().SchemeIsBlob() &&
-        !url_chain_.back().SchemeIs(url::kAboutScheme) &&
-        !url_chain_.back().SchemeIs(url::kDataScheme) &&
-        initiator_.has_value() &&
-        initiator_->GetURL() != url_chain_.back().GetOrigin() &&
-        (content_disposition_.empty() ||
-         !net::HttpContentDisposition(content_disposition_, std::string())
-              .is_attachment())) {
-      SetDangerType(DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE);
-      RecordDownloadCount(CROSS_ORIGIN_DOWNLOAD_WITHOUT_CONTENT_DISPOSITION);
-      DVLOG(20) << __func__ << "() updating danger level to " << danger_type
-                << " for cross origin download";
-    }
-  }
+  SetDangerType(danger_type);
 
   // This was an interrupted download that was looking for a filename. Resolve
   // early without performing the intermediate rename. If there is a
diff --git a/content/browser/download/download_item_impl.h b/content/browser/download/download_item_impl.h
index 61fb7b7..42a4ebaa 100644
--- a/content/browser/download/download_item_impl.h
+++ b/content/browser/download/download_item_impl.h
@@ -15,7 +15,6 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
-#include "base/optional.h"
 #include "base/time/time.h"
 #include "content/browser/download/download_destination_observer.h"
 #include "content/browser/download/download_net_log_parameters.h"
@@ -25,7 +24,6 @@
 #include "content/public/browser/download_item.h"
 #include "net/log/net_log_with_source.h"
 #include "url/gurl.h"
-#include "url/origin.h"
 
 namespace content {
 class DownloadFile;
@@ -713,8 +711,6 @@
   // CONTENT_LENGTH_MISMATCH.
   int64_t received_bytes_at_length_mismatch = -1;
 
-  base::Optional<url::Origin> initiator_;
-
   base::WeakPtrFactory<DownloadItemImpl> weak_ptr_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(DownloadItemImpl);
diff --git a/content/browser/download/download_item_impl_unittest.cc b/content/browser/download/download_item_impl_unittest.cc
index 90d85e6c..33033208 100644
--- a/content/browser/download/download_item_impl_unittest.cc
+++ b/content/browser/download/download_item_impl_unittest.cc
@@ -262,7 +262,6 @@
     create_info_->save_info =
         std::unique_ptr<DownloadSaveInfo>(new DownloadSaveInfo());
     create_info_->save_info->prompt_for_save_location = false;
-    create_info_->initiator = url::Origin(GURL("http://example.com/"));
     create_info_->url_chain.push_back(GURL("http://example.com/download"));
     create_info_->etag = "SomethingToSatisfyResumption";
   }
diff --git a/content/browser/download/download_request_core.cc b/content/browser/download/download_request_core.cc
index 4bb3bd8..fef2ca6 100644
--- a/content/browser/download/download_request_core.cc
+++ b/content/browser/download/download_request_core.cc
@@ -260,7 +260,6 @@
   create_info->transient = transient_;
   create_info->response_headers = request()->response_headers();
   create_info->offset = create_info->save_info->offset;
-  create_info->initiator = request()->initiator();
   return create_info;
 }
 
@@ -349,8 +348,6 @@
   // network error, so we'll just ignore them here.
   if (request()->initiator().has_value() &&
       !create_info->url_chain.back().SchemeIsBlob() &&
-      !create_info->url_chain.back().SchemeIs(url::kAboutScheme) &&
-      !create_info->url_chain.back().SchemeIs(url::kDataScheme) &&
       request()->initiator()->GetURL() !=
           create_info->url_chain.back().GetOrigin()) {
     create_info->save_info->suggested_name.clear();
diff --git a/content/browser/download/download_stats.h b/content/browser/download/download_stats.h
index 412a858..f7e7e19 100644
--- a/content/browser/download/download_stats.h
+++ b/content/browser/download/download_stats.h
@@ -114,9 +114,6 @@
   // bytes are received when resuming the download.
   NO_BYTES_RECEIVED_AFTER_CONTENT_LENGTH_MISMATCH_COUNT,
 
-  // A cross origin download with a content disposition header.
-  CROSS_ORIGIN_DOWNLOAD_WITHOUT_CONTENT_DISPOSITION,
-
   DOWNLOAD_COUNT_TYPES_LAST_ENTRY
 };
 
diff --git a/content/browser/renderer_host/input/synthetic_mouse_driver.cc b/content/browser/renderer_host/input/synthetic_mouse_driver.cc
index aa76d1b6..bdc5882 100644
--- a/content/browser/renderer_host/input/synthetic_mouse_driver.cc
+++ b/content/browser/renderer_host/input/synthetic_mouse_driver.cc
@@ -17,7 +17,10 @@
 void SyntheticMouseDriver::DispatchEvent(SyntheticGestureTarget* target,
                                          const base::TimeTicks& timestamp) {
   mouse_event_.SetTimeStampSeconds(ConvertTimestampToSeconds(timestamp));
-  target->DispatchInputEventToPlatform(mouse_event_);
+  if (mouse_event_.GetType() != blink::WebInputEvent::kUndefined) {
+    target->DispatchInputEventToPlatform(mouse_event_);
+    mouse_event_.SetType(blink::WebInputEvent::kUndefined);
+  }
 }
 
 void SyntheticMouseDriver::Press(float x,
diff --git a/content/browser/tracing/tracing_ui.cc b/content/browser/tracing/tracing_ui.cc
index 14389658..7943d902 100644
--- a/content/browser/tracing/tracing_ui.cc
+++ b/content/browser/tracing/tracing_ui.cc
@@ -89,6 +89,24 @@
   *trace_config = base::trace_event::TraceConfig(category_filter_string,
                                                  record_mode);
 
+  // When enabling memory-infra via tracing, use periodic dumping to trigger a
+  // detailed dump every 5s.
+  if (trace_config->IsCategoryGroupEnabled(
+          base::trace_event::MemoryDumpManager::kTraceCategory)) {
+    base::trace_event::TraceConfig::MemoryDumpConfig::Trigger trigger = {
+        5000,  // min_time_between_dumps_ms
+        base::trace_event::MemoryDumpLevelOfDetail::DETAILED,
+        base::trace_event::MemoryDumpType::PERIODIC_INTERVAL};
+    base::trace_event::TraceConfig::MemoryDumpConfig memory_dump_config;
+    memory_dump_config.triggers.push_back(trigger);
+
+    // TODO(ssid): Make a newly constructed MemoryDumpConfig use the default
+    // dump modes.
+    memory_dump_config.allowed_dump_modes.insert(
+        base::trace_event::MemoryDumpLevelOfDetail::DETAILED);
+    trace_config->ResetMemoryDumpConfig(memory_dump_config);
+  }
+
   bool enable_systrace;
   options_ok &= options->GetBoolean("useSystemTracing", &enable_systrace);
   if (enable_systrace)
diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn
index d5b19a7..e2c77ee 100644
--- a/content/renderer/BUILD.gn
+++ b/content/renderer/BUILD.gn
@@ -439,6 +439,7 @@
     "//components/payments/mojom:mojom_payment_app",
     "//components/url_formatter",
     "//components/variations",
+    "//components/viz/client",
     "//content:resources",
     "//content/child",
     "//content/common",
diff --git a/content/renderer/gpu/compositor_dependencies.h b/content/renderer/gpu/compositor_dependencies.h
index 2fb57bf..05e6bf5d 100644
--- a/content/renderer/gpu/compositor_dependencies.h
+++ b/content/renderer/gpu/compositor_dependencies.h
@@ -49,7 +49,6 @@
   virtual cc::TaskGraphRunner* GetTaskGraphRunner() = 0;
   virtual bool IsThreadedAnimationEnabled() = 0;
   virtual bool IsScrollAnimatorEnabled() = 0;
-  virtual bool IsSurfaceSynchronizationEnabled() = 0;
 
   virtual ~CompositorDependencies() {}
 };
diff --git a/content/renderer/gpu/renderer_compositor_frame_sink.cc b/content/renderer/gpu/renderer_compositor_frame_sink.cc
index 92547a90..7c14ba38 100644
--- a/content/renderer/gpu/renderer_compositor_frame_sink.cc
+++ b/content/renderer/gpu/renderer_compositor_frame_sink.cc
@@ -36,27 +36,22 @@
     cc::mojom::MojoCompositorFrameSinkPtrInfo sink_info,
     cc::mojom::MojoCompositorFrameSinkClientRequest sink_client_request,
     scoped_refptr<FrameSwapMessageQueue> swap_frame_message_queue)
-    : CompositorFrameSink(std::move(context_provider),
-                          std::move(worker_context_provider),
-                          gpu_memory_buffer_manager,
-                          shared_bitmap_manager),
+    : ClientCompositorFrameSink(std::move(context_provider),
+                                std::move(worker_context_provider),
+                                gpu_memory_buffer_manager,
+                                shared_bitmap_manager,
+                                std::move(synthetic_begin_frame_source),
+                                std::move(sink_info),
+                                std::move(sink_client_request),
+                                false /* enable_surface_synchronization */),
       compositor_frame_sink_filter_(
           RenderThreadImpl::current()->compositor_message_filter()),
       message_sender_(RenderThreadImpl::current()->sync_message_filter()),
       frame_swap_message_queue_(swap_frame_message_queue),
-      synthetic_begin_frame_source_(std::move(synthetic_begin_frame_source)),
-      external_begin_frame_source_(
-          synthetic_begin_frame_source_
-              ? nullptr
-              : base::MakeUnique<cc::ExternalBeginFrameSource>(this)),
-      routing_id_(routing_id),
-      sink_info_(std::move(sink_info)),
-      sink_client_request_(std::move(sink_client_request)),
-      sink_client_binding_(this) {
+      routing_id_(routing_id) {
   DCHECK(compositor_frame_sink_filter_);
   DCHECK(frame_swap_message_queue_);
   DCHECK(message_sender_);
-  thread_checker_.DetachFromThread();
 }
 
 RendererCompositorFrameSink::RendererCompositorFrameSink(
@@ -66,80 +61,47 @@
     cc::mojom::MojoCompositorFrameSinkPtrInfo sink_info,
     cc::mojom::MojoCompositorFrameSinkClientRequest sink_client_request,
     scoped_refptr<FrameSwapMessageQueue> swap_frame_message_queue)
-    : CompositorFrameSink(std::move(vulkan_context_provider)),
+    : ClientCompositorFrameSink(std::move(vulkan_context_provider),
+                                std::move(synthetic_begin_frame_source),
+                                std::move(sink_info),
+                                std::move(sink_client_request),
+                                false /* enable_surface_synchronization */),
       compositor_frame_sink_filter_(
           RenderThreadImpl::current()->compositor_message_filter()),
       message_sender_(RenderThreadImpl::current()->sync_message_filter()),
       frame_swap_message_queue_(swap_frame_message_queue),
-      synthetic_begin_frame_source_(std::move(synthetic_begin_frame_source)),
-      external_begin_frame_source_(
-          synthetic_begin_frame_source_
-              ? nullptr
-              : base::MakeUnique<cc::ExternalBeginFrameSource>(this)),
-      routing_id_(routing_id),
-      sink_info_(std::move(sink_info)),
-      sink_client_request_(std::move(sink_client_request)),
-      sink_client_binding_(this) {
+      routing_id_(routing_id) {
   DCHECK(compositor_frame_sink_filter_);
   DCHECK(frame_swap_message_queue_);
   DCHECK(message_sender_);
-  thread_checker_.DetachFromThread();
 }
 
 RendererCompositorFrameSink::~RendererCompositorFrameSink() = default;
 
 bool RendererCompositorFrameSink::BindToClient(
     cc::CompositorFrameSinkClient* client) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  if (!cc::CompositorFrameSink::BindToClient(client))
+  if (!ClientCompositorFrameSink::BindToClient(client))
     return false;
 
-  sink_.Bind(std::move(sink_info_));
-  sink_client_binding_.Bind(std::move(sink_client_request_));
-
-  if (synthetic_begin_frame_source_)
-    client_->SetBeginFrameSource(synthetic_begin_frame_source_.get());
-  else
-    client_->SetBeginFrameSource(external_begin_frame_source_.get());
-
   compositor_frame_sink_proxy_ = new RendererCompositorFrameSinkProxy(this);
   compositor_frame_sink_filter_handler_ =
       base::Bind(&RendererCompositorFrameSinkProxy::OnMessageReceived,
                  compositor_frame_sink_proxy_);
   compositor_frame_sink_filter_->AddHandlerOnCompositorThread(
       routing_id_, compositor_frame_sink_filter_handler_);
+
   return true;
 }
 
 void RendererCompositorFrameSink::DetachFromClient() {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  client_->SetBeginFrameSource(nullptr);
-  // Destroy the begin frame source on the same thread it was bound on.
-  // The CompositorFrameSink itself is destroyed on the main thread.
-  external_begin_frame_source_ = nullptr;
-  synthetic_begin_frame_source_ = nullptr;
   compositor_frame_sink_proxy_->ClearCompositorFrameSink();
   compositor_frame_sink_filter_->RemoveHandlerOnCompositorThread(
       routing_id_, compositor_frame_sink_filter_handler_);
-  sink_.reset();
-  sink_client_binding_.Close();
-  cc::CompositorFrameSink::DetachFromClient();
+  ClientCompositorFrameSink::DetachFromClient();
 }
 
 void RendererCompositorFrameSink::SubmitCompositorFrame(
     cc::CompositorFrame frame) {
-  // We should only submit CompositorFrames with valid BeginFrameAcks.
-  DCHECK(frame.metadata.begin_frame_ack.has_damage);
-  DCHECK_LE(cc::BeginFrameArgs::kStartingFrameNumber,
-            frame.metadata.begin_frame_ack.sequence_number);
-  auto new_surface_properties =
-      RenderWidgetSurfaceProperties::FromCompositorFrame(frame);
-  if (!local_surface_id_.is_valid() ||
-      new_surface_properties != current_surface_properties_) {
-    local_surface_id_ = id_allocator_.GenerateId();
-    current_surface_properties_ = new_surface_properties;
-  }
-
   {
     std::unique_ptr<FrameSwapMessageQueue::SendMessageScope>
         send_message_scope =
@@ -148,49 +110,24 @@
     frame_swap_message_queue_->DrainMessages(&messages);
     std::vector<IPC::Message> messages_to_send;
     FrameSwapMessageQueue::TransferMessages(&messages, &messages_to_send);
-    uint32_t frame_token = 0;
-    if (!messages_to_send.empty())
-      frame_token = frame_swap_message_queue_->AllocateFrameToken();
-    frame.metadata.frame_token = frame_token;
-    sink_->SubmitCompositorFrame(local_surface_id_, std::move(frame));
-    if (frame_token) {
+    if (!messages_to_send.empty()) {
+      frame.metadata.frame_token =
+          frame_swap_message_queue_->AllocateFrameToken();
       message_sender_->Send(new ViewHostMsg_FrameSwapMessages(
-          routing_id_, frame_token, messages_to_send));
+          routing_id_, frame.metadata.frame_token, messages_to_send));
     }
     // ~send_message_scope.
   }
+  auto new_surface_properties =
+      RenderWidgetSurfaceProperties::FromCompositorFrame(frame);
+  ClientCompositorFrameSink::SubmitCompositorFrame(std::move(frame));
+  current_surface_properties_ = new_surface_properties;
 }
 
-void RendererCompositorFrameSink::DidNotProduceFrame(
-    const cc::BeginFrameAck& ack) {
-  DCHECK(!ack.has_damage);
-  DCHECK_LE(cc::BeginFrameArgs::kStartingFrameNumber, ack.sequence_number);
-  sink_->DidNotProduceFrame(ack);
-}
-
-void RendererCompositorFrameSink::OnMessageReceived(
-    const IPC::Message& message) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-}
-
-void RendererCompositorFrameSink::DidReceiveCompositorFrameAck(
-    const cc::ReturnedResourceArray& resources) {
-  ReclaimResources(resources);
-  client_->DidReceiveCompositorFrameAck();
-}
-
-void RendererCompositorFrameSink::OnBeginFrame(const cc::BeginFrameArgs& args) {
-  if (external_begin_frame_source_)
-    external_begin_frame_source_->OnBeginFrame(args);
-}
-
-void RendererCompositorFrameSink::ReclaimResources(
-    const cc::ReturnedResourceArray& resources) {
-  client_->ReclaimResources(resources);
-}
-
-void RendererCompositorFrameSink::OnNeedsBeginFrames(bool needs_begin_frames) {
-  sink_->SetNeedsBeginFrame(needs_begin_frames);
+bool RendererCompositorFrameSink::ShouldAllocateNewLocalSurfaceId(
+    const cc::CompositorFrame& frame) {
+  return current_surface_properties_ !=
+         RenderWidgetSurfaceProperties::FromCompositorFrame(frame);
 }
 
 }  // namespace content
diff --git a/content/renderer/gpu/renderer_compositor_frame_sink.h b/content/renderer/gpu/renderer_compositor_frame_sink.h
index 4de0926..58a20a4 100644
--- a/content/renderer/gpu/renderer_compositor_frame_sink.h
+++ b/content/renderer/gpu/renderer_compositor_frame_sink.h
@@ -24,6 +24,7 @@
 #include "cc/scheduler/begin_frame_source.h"
 #include "cc/surfaces/local_surface_id.h"
 #include "cc/surfaces/local_surface_id_allocator.h"
+#include "components/viz/client/client_compositor_frame_sink.h"
 #include "content/common/render_widget_surface_properties.h"
 #include "content/renderer/gpu/compositor_forwarding_message_filter.h"
 #include "ipc/ipc_sync_message_filter.h"
@@ -45,10 +46,7 @@
 // This class can be created only on the main thread, but then becomes pinned
 // to a fixed thread when BindToClient is called.
 class RendererCompositorFrameSink
-    : NON_EXPORTED_BASE(public cc::CompositorFrameSink),
-      NON_EXPORTED_BASE(public base::NonThreadSafe),
-      NON_EXPORTED_BASE(public cc::mojom::MojoCompositorFrameSinkClient),
-      public cc::ExternalBeginFrameSourceClient {
+    : NON_EXPORTED_BASE(public viz::ClientCompositorFrameSink) {
  public:
   RendererCompositorFrameSink(
       int32_t routing_id,
@@ -71,11 +69,12 @@
       scoped_refptr<FrameSwapMessageQueue> swap_frame_message_queue);
   ~RendererCompositorFrameSink() override;
 
-  // cc::CompositorFrameSink implementation.
+  // Overriden from viz::ClientCompositorFrameSink.
   bool BindToClient(cc::CompositorFrameSinkClient* client) override;
   void DetachFromClient() override;
   void SubmitCompositorFrame(cc::CompositorFrame frame) override;
-  void DidNotProduceFrame(const cc::BeginFrameAck& ack) override;
+  bool ShouldAllocateNewLocalSurfaceId(
+      const cc::CompositorFrame& frame) override;
 
  private:
   class RendererCompositorFrameSinkProxy
@@ -98,16 +97,7 @@
     DISALLOW_COPY_AND_ASSIGN(RendererCompositorFrameSinkProxy);
   };
 
-  void OnMessageReceived(const IPC::Message& message);
-
-  // cc::mojom::MojoCompositorFrameSinkClient implementation.
-  void DidReceiveCompositorFrameAck(
-      const cc::ReturnedResourceArray& resources) override;
-  void OnBeginFrame(const cc::BeginFrameArgs& args) override;
-  void ReclaimResources(const cc::ReturnedResourceArray& resources) override;
-
-  // cc::ExternalBeginFrameSourceClient implementation.
-  void OnNeedsBeginFrames(bool need_begin_frames) override;
+  void OnMessageReceived(const IPC::Message& message) {}
 
   scoped_refptr<CompositorForwardingMessageFilter>
       compositor_frame_sink_filter_;
@@ -116,20 +106,9 @@
   scoped_refptr<RendererCompositorFrameSinkProxy> compositor_frame_sink_proxy_;
   scoped_refptr<IPC::SyncMessageFilter> message_sender_;
   scoped_refptr<FrameSwapMessageQueue> frame_swap_message_queue_;
-  std::unique_ptr<cc::SyntheticBeginFrameSource> synthetic_begin_frame_source_;
-  std::unique_ptr<cc::ExternalBeginFrameSource> external_begin_frame_source_;
   int routing_id_;
 
-  cc::LocalSurfaceId local_surface_id_;
-  cc::LocalSurfaceIdAllocator id_allocator_;
   RenderWidgetSurfaceProperties current_surface_properties_;
-
-  base::ThreadChecker thread_checker_;
-
-  cc::mojom::MojoCompositorFrameSinkPtr sink_;
-  cc::mojom::MojoCompositorFrameSinkPtrInfo sink_info_;
-  cc::mojom::MojoCompositorFrameSinkClientRequest sink_client_request_;
-  mojo::Binding<cc::mojom::MojoCompositorFrameSinkClient> sink_client_binding_;
 };
 
 }  // namespace content
diff --git a/content/renderer/media/webmediaplayer_ms_compositor.cc b/content/renderer/media/webmediaplayer_ms_compositor.cc
index dbde71bd..a2183ecc 100644
--- a/content/renderer/media/webmediaplayer_ms_compositor.cc
+++ b/content/renderer/media/webmediaplayer_ms_compositor.cc
@@ -450,16 +450,26 @@
 
 void WebMediaPlayerMSCompositor::ReplaceCurrentFrameWithACopyInternal() {
   DCHECK(thread_checker_.CalledOnValidThread());
-  base::AutoLock auto_lock(current_frame_lock_);
-  if (!current_frame_.get() || !player_)
-    return;
-
+  scoped_refptr<media::VideoFrame> current_frame_ref;
+  {
+    base::AutoLock auto_lock(current_frame_lock_);
+    if (!current_frame_ || !player_)
+      return;
+    current_frame_ref = current_frame_;
+  }
   // Copy the frame so that rendering can show the last received frame.
   // The original frame must not be referenced when the player is paused since
   // there might be a finite number of available buffers. E.g, video that
   // originates from a video camera, HW decoded frames.
-  current_frame_ =
-      CopyFrame(current_frame_, player_->GetSkCanvasVideoRenderer());
+  scoped_refptr<media::VideoFrame> copied_frame =
+      CopyFrame(current_frame_ref, player_->GetSkCanvasVideoRenderer());
+  // Copying frame can take time, so only set the copied frame if
+  // |current_frame_| hasn't been changed.
+  {
+    base::AutoLock auto_lock(current_frame_lock_);
+    if (current_frame_ == current_frame_ref)
+      current_frame_ = std::move(copied_frame);
+  }
 }
 
 void WebMediaPlayerMSCompositor::SetAlgorithmEnabledForTesting(
diff --git a/content/renderer/media/webmediaplayer_ms_compositor.h b/content/renderer/media/webmediaplayer_ms_compositor.h
index e5d4c7e..90cbc53 100644
--- a/content/renderer/media/webmediaplayer_ms_compositor.h
+++ b/content/renderer/media/webmediaplayer_ms_compositor.h
@@ -117,7 +117,8 @@
 
   void SetAlgorithmEnabledForTesting(bool algorithm_enabled);
 
-  // Used for DCHECKs to ensure method calls executed in the correct thread.
+  // Used for DCHECKs to ensure method calls executed in the correct thread,
+  // which is renderer main thread in this class.
   base::ThreadChecker thread_checker_;
 
   const scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_;
diff --git a/content/renderer/media/webrtc/media_stream_track_metrics.cc b/content/renderer/media/webrtc/media_stream_track_metrics.cc
index bf074ed..a93a1863 100644
--- a/content/renderer/media/webrtc/media_stream_track_metrics.cc
+++ b/content/renderer/media/webrtc/media_stream_track_metrics.cc
@@ -269,6 +269,7 @@
     : ice_state_(webrtc::PeerConnectionInterface::kIceConnectionNew) {}
 
 MediaStreamTrackMetrics::~MediaStreamTrackMetrics() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   for (const auto& observer : observers_) {
     observer->SendLifetimeMessages(DISCONNECTED);
   }
@@ -276,7 +277,7 @@
 
 void MediaStreamTrackMetrics::AddStream(StreamType type,
                                         MediaStreamInterface* stream) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   observers_.push_back(
       base::MakeUnique<MediaStreamTrackMetricsObserver>(type, stream, this));
   SendLifeTimeMessageDependingOnIceState(observers_.back().get());
@@ -284,7 +285,7 @@
 
 void MediaStreamTrackMetrics::RemoveStream(StreamType type,
                                            MediaStreamInterface* stream) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   auto it = std::find_if(observers_.begin(), observers_.end(),
                          ObserverFinder(type, stream));
   if (it == observers_.end()) {
@@ -298,7 +299,7 @@
 
 void MediaStreamTrackMetrics::IceConnectionChange(
     PeerConnectionInterface::IceConnectionState new_state) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   ice_state_ = new_state;
   for (const auto& observer : observers_) {
     SendLifeTimeMessageDependingOnIceState(observer.get());
diff --git a/content/renderer/media/webrtc/media_stream_track_metrics.h b/content/renderer/media/webrtc/media_stream_track_metrics.h
index 18287f3..1a09b4eee 100644
--- a/content/renderer/media/webrtc/media_stream_track_metrics.h
+++ b/content/renderer/media/webrtc/media_stream_track_metrics.h
@@ -10,7 +10,7 @@
 #include <memory>
 #include <vector>
 
-#include "base/threading/non_thread_safe.h"
+#include "base/sequence_checker.h"
 #include "content/common/content_export.h"
 #include "third_party/webrtc/api/peerconnectioninterface.h"
 
@@ -30,7 +30,7 @@
 // There should be exactly one of these objects owned by each
 // RTCPeerConnectionHandler, and its lifetime should match the
 // lifetime of its owner.
-class CONTENT_EXPORT MediaStreamTrackMetrics : public base::NonThreadSafe {
+class CONTENT_EXPORT MediaStreamTrackMetrics {
  public:
   explicit MediaStreamTrackMetrics();
   ~MediaStreamTrackMetrics();
@@ -98,6 +98,8 @@
 
   webrtc::PeerConnectionInterface::IceConnectionState ice_state_;
 
+  SEQUENCE_CHECKER(sequence_checker_);
+
   DISALLOW_COPY_AND_ASSIGN(MediaStreamTrackMetrics);
 };
 
diff --git a/content/renderer/media/webrtc/peer_connection_dependency_factory.cc b/content/renderer/media/webrtc/peer_connection_dependency_factory.cc
index dfb40366..963de65 100644
--- a/content/renderer/media/webrtc/peer_connection_dependency_factory.cc
+++ b/content/renderer/media/webrtc/peer_connection_dependency_factory.cc
@@ -114,6 +114,7 @@
 }
 
 PeerConnectionDependencyFactory::~PeerConnectionDependencyFactory() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DVLOG(1) << "~PeerConnectionDependencyFactory()";
   DCHECK(!pc_factory_);
 }
@@ -443,7 +444,7 @@
 
 WebRtcAudioDeviceImpl*
 PeerConnectionDependencyFactory::GetWebRtcAudioDevice() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   EnsureWebRtcAudioDeviceImpl();
   return audio_device_.get();
 }
@@ -534,27 +535,27 @@
 }
 
 void PeerConnectionDependencyFactory::EnsureInitialized() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   GetPcFactory();
 }
 
 scoped_refptr<base::SingleThreadTaskRunner>
 PeerConnectionDependencyFactory::GetWebRtcWorkerThread() const {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   return chrome_worker_thread_.IsRunning() ? chrome_worker_thread_.task_runner()
                                            : nullptr;
 }
 
 scoped_refptr<base::SingleThreadTaskRunner>
 PeerConnectionDependencyFactory::GetWebRtcSignalingThread() const {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   return chrome_signaling_thread_.IsRunning()
              ? chrome_signaling_thread_.task_runner()
              : nullptr;
 }
 
 void PeerConnectionDependencyFactory::EnsureWebRtcAudioDeviceImpl() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (audio_device_.get())
     return;
 
diff --git a/content/renderer/media/webrtc/peer_connection_dependency_factory.h b/content/renderer/media/webrtc/peer_connection_dependency_factory.h
index 2701e07..dcf5f5ea 100644
--- a/content/renderer/media/webrtc/peer_connection_dependency_factory.h
+++ b/content/renderer/media/webrtc/peer_connection_dependency_factory.h
@@ -10,6 +10,7 @@
 #include "base/files/file.h"
 #include "base/macros.h"
 #include "base/message_loop/message_loop.h"
+#include "base/sequence_checker.h"
 #include "base/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "content/common/content_export.h"
@@ -45,8 +46,7 @@
 
 // Object factory for RTC PeerConnections.
 class CONTENT_EXPORT PeerConnectionDependencyFactory
-    : NON_EXPORTED_BASE(base::MessageLoop::DestructionObserver),
-      NON_EXPORTED_BASE(public base::NonThreadSafe) {
+    : NON_EXPORTED_BASE(base::MessageLoop::DestructionObserver) {
  public:
   PeerConnectionDependencyFactory(
       P2PSocketDispatcher* p2p_socket_dispatcher);
@@ -154,6 +154,8 @@
   base::Thread chrome_signaling_thread_;
   base::Thread chrome_worker_thread_;
 
+  SEQUENCE_CHECKER(sequence_checker_);
+
   DISALLOW_COPY_AND_ASSIGN(PeerConnectionDependencyFactory);
 };
 
diff --git a/content/renderer/mus/renderer_window_tree_client.cc b/content/renderer/mus/renderer_window_tree_client.cc
index 74a53b2..8603074 100644
--- a/content/renderer/mus/renderer_window_tree_client.cc
+++ b/content/renderer/mus/renderer_window_tree_client.cc
@@ -84,9 +84,10 @@
       mojo::MakeRequest(&client);
   constexpr bool enable_surface_synchronization = true;
   auto frame_sink = base::MakeUnique<viz::ClientCompositorFrameSink>(
-      std::move(context_provider), gpu_memory_buffer_manager,
-      std::move(sink_info), std::move(client_request),
-      enable_surface_synchronization);
+      std::move(context_provider), nullptr /* worker_context_provider */,
+      gpu_memory_buffer_manager, nullptr /* shared_bitmap_manager */,
+      nullptr /* synthetic_begin_frame_source */, std::move(sink_info),
+      std::move(client_request), enable_surface_synchronization);
   tree_->AttachCompositorFrameSink(root_window_id_, std::move(sink_request),
                                    std::move(client));
   callback.Run(std::move(frame_sink));
diff --git a/content/renderer/p2p/ipc_socket_factory.cc b/content/renderer/p2p/ipc_socket_factory.cc
index 08cafbf..f1d94c7 100644
--- a/content/renderer/p2p/ipc_socket_factory.cc
+++ b/content/renderer/p2p/ipc_socket_factory.cc
@@ -14,9 +14,9 @@
 #include "base/macros.h"
 #include "base/metrics/field_trial.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/sequence_checker.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
-#include "base/threading/non_thread_safe.h"
 #include "base/threading/thread_checker.h"
 #include "base/trace_event/trace_event.h"
 #include "content/renderer/media/webrtc_logging.h"
@@ -214,8 +214,7 @@
 // P2PAsyncAddressResolver. Libjingle sig slots are not thread safe. In case
 // of MT sig slots clients must call disconnect. This class is to make sure
 // we destruct from the same thread on which is created.
-class AsyncAddressResolverImpl :  public base::NonThreadSafe,
-                                  public rtc::AsyncResolverInterface {
+class AsyncAddressResolverImpl : public rtc::AsyncResolverInterface {
  public:
   AsyncAddressResolverImpl(P2PSocketDispatcher* dispatcher);
   ~AsyncAddressResolverImpl() override;
@@ -230,6 +229,9 @@
   virtual void OnAddressResolved(const net::IPAddressList& addresses);
 
   scoped_refptr<P2PAsyncAddressResolver> resolver_;
+
+  SEQUENCE_CHECKER(sequence_checker_);
+
   int port_;   // Port number in |addr| from Start() method.
   std::vector<rtc::IPAddress> addresses_;  // Resolved addresses.
 };
@@ -677,10 +679,11 @@
 }
 
 AsyncAddressResolverImpl::~AsyncAddressResolverImpl() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 }
 
 void AsyncAddressResolverImpl::Start(const rtc::SocketAddress& addr) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   // Copy port number from |addr|. |port_| must be copied
   // when resolved address is returned in GetResolvedAddress.
   port_ = addr.port();
@@ -692,7 +695,7 @@
 
 bool AsyncAddressResolverImpl::GetResolvedAddress(
     int family, rtc::SocketAddress* addr) const {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   if (addresses_.empty())
    return false;
@@ -708,12 +711,12 @@
 }
 
 int AsyncAddressResolverImpl::GetError() const {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   return addresses_.empty() ? -1 : 0;
 }
 
 void AsyncAddressResolverImpl::Destroy(bool wait) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   resolver_->Cancel();
   // Libjingle doesn't need this object any more and it's not going to delete
   // it explicitly.
@@ -722,7 +725,7 @@
 
 void AsyncAddressResolverImpl::OnAddressResolved(
     const net::IPAddressList& addresses) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   for (size_t i = 0; i < addresses.size(); ++i) {
     rtc::SocketAddress socket_address;
     if (!jingle_glue::IPEndPointToSocketAddress(
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
index 116d31a8..875bb9d 100644
--- a/content/renderer/render_thread_impl.cc
+++ b/content/renderer/render_thread_impl.cc
@@ -625,7 +625,6 @@
       main_message_loop_(std::move(main_message_loop)),
       categorized_worker_pool_(new CategorizedWorkerPool()),
       is_scroll_animator_enabled_(false),
-      is_surface_synchronization_enabled_(false),
       renderer_binding_(this),
       field_trial_syncer_(this) {
   scoped_refptr<base::SingleThreadTaskRunner> test_task_counter;
@@ -783,9 +782,6 @@
   is_threaded_animation_enabled_ =
       !command_line.HasSwitch(cc::switches::kDisableThreadedAnimation);
 
-  is_surface_synchronization_enabled_ =
-      command_line.HasSwitch(cc::switches::kEnableSurfaceSynchronization);
-
   is_zero_copy_enabled_ = command_line.HasSwitch(switches::kEnableZeroCopy);
   is_partial_raster_enabled_ =
       !command_line.HasSwitch(switches::kDisablePartialRaster);
@@ -1626,10 +1622,6 @@
   return is_scroll_animator_enabled_;
 }
 
-bool RenderThreadImpl::IsSurfaceSynchronizationEnabled() {
-  return is_surface_synchronization_enabled_;
-}
-
 void RenderThreadImpl::OnRAILModeChanged(v8::RAILMode rail_mode) {
   blink::MainThreadIsolate()->SetRAILMode(rail_mode);
   blink::SetRAILModeOnWorkerThreadIsolates(rail_mode);
diff --git a/content/renderer/render_thread_impl.h b/content/renderer/render_thread_impl.h
index d779a4f4..ca3afbf 100644
--- a/content/renderer/render_thread_impl.h
+++ b/content/renderer/render_thread_impl.h
@@ -249,7 +249,6 @@
   cc::TaskGraphRunner* GetTaskGraphRunner() override;
   bool IsThreadedAnimationEnabled() override;
   bool IsScrollAnimatorEnabled() override;
-  bool IsSurfaceSynchronizationEnabled() override;
 
   // blink::scheduler::RendererScheduler::RAILModeObserver implementation.
   void OnRAILModeChanged(v8::RAILMode rail_mode) override;
@@ -744,7 +743,6 @@
   cc::BufferToTextureTargetMap buffer_to_texture_target_map_;
   bool is_threaded_animation_enabled_;
   bool is_scroll_animator_enabled_;
-  bool is_surface_synchronization_enabled_;
 
   class PendingFrameCreate : public base::RefCounted<PendingFrameCreate> {
    public:
diff --git a/content/test/data/data_url_navigations.html b/content/test/data/data_url_navigations.html
index e807675..9f0e167 100644
--- a/content/test/data/data_url_navigations.html
+++ b/content/test/data/data_url_navigations.html
@@ -14,8 +14,7 @@
   Open new window with a data URL HTML
 </button>
 <button id='window-open-redirect'
-    onclick='window.open(`/server-redirect?data:text/html,
-        <script>console.log(&quot;NAVIGATION_SUCCESSFUL&quot;)</script>`);'>
+    onclick='window.open(`/server-redirect?data:text/html,<script>console.log(&quot;NAVIGATION_SUCCESSFUL&quot;)</script>`);'>
   Open new window with a redirect to data URL
 </button>
 <br>
diff --git a/content/test/fake_compositor_dependencies.cc b/content/test/fake_compositor_dependencies.cc
index 1cb9e0b3..4b26ecc 100644
--- a/content/test/fake_compositor_dependencies.cc
+++ b/content/test/fake_compositor_dependencies.cc
@@ -88,8 +88,4 @@
   return false;
 }
 
-bool FakeCompositorDependencies::IsSurfaceSynchronizationEnabled() {
-  return false;
-}
-
 }  // namespace content
diff --git a/content/test/fake_compositor_dependencies.h b/content/test/fake_compositor_dependencies.h
index 7dd7319..d3b56104 100644
--- a/content/test/fake_compositor_dependencies.h
+++ b/content/test/fake_compositor_dependencies.h
@@ -38,7 +38,6 @@
   cc::TaskGraphRunner* GetTaskGraphRunner() override;
   bool IsThreadedAnimationEnabled() override;
   bool IsScrollAnimatorEnabled() override;
-  bool IsSurfaceSynchronizationEnabled() override;
 
  private:
   cc::TestTaskGraphRunner task_graph_runner_;
diff --git a/docs/new_port_policy.md b/docs/new_port_policy.md
new file mode 100644
index 0000000..a1510ef
--- /dev/null
+++ b/docs/new_port_policy.md
@@ -0,0 +1,12 @@
+# Policy for Adding a New Port
+
+Since every new port for Chromium has a maintenance cost, here are some guidelines for when the project will accept a new port.
+
+## Expectations
+
+*   Ports should represent a significant ongoing investment to established platforms, rather than hobby or experimental code.
+*   These will not have bots on Google-run waterfalls (even FYI).
+*   Chromium engineers are not expected to maintain them.
+*   As much as possible, try to use existing branches/ifdefs.
+*   While changes in src/base are unavoidable, higher level directories shouldnÂ’t have to change. i.e. existing porting APIs should be used. We would not accept new rendering pipelines as an example.
+*   Send an email to [src/OWNERS](https://chromium.googlesource.com/chromium/src/+/master/ENG_REVIEW_OWNERS) for approval.
\ No newline at end of file
diff --git a/docs/testing/layout_test_expectations.md b/docs/testing/layout_test_expectations.md
index 5354544..2023fbd0 100644
--- a/docs/testing/layout_test_expectations.md
+++ b/docs/testing/layout_test_expectations.md
@@ -90,21 +90,28 @@
 ### Rebaselining using try jobs
 
 The recommended way to rebaseline for a currently-in-progress CL is to use
-results from try jobs. To do this:
+results from try jobs, by using the command-tool
+`third_party/WebKit/Tools/Scripts/webkit-patch rebaseline-cl`:
 
-1. Upload a CL with changes in Blink source code or layout tests.
-2. Trigger Blink try jobs. The bots to use are the release builders on
+1. First, upload a CL.
+   There is no need to add `[ NeedsRebaseline ]` lines in TestExpectations for
+   tests that are rebaselined by this method.
+2. Trigger try jobs by running `webkit-patch rebaseline-cl`. This should
+   trigger jobs on
    [tryserver.blink](https://build.chromium.org/p/tryserver.blink/builders).
-   This can be done via the code review Web UI or via `git cl try`.
 3. Wait for all try jobs to finish.
-4. Run `third_party/WebKit/Tools/Scripts/webkit-patch rebaseline-cl` to fetch
-   new baselines.
+4. Run `webkit-patch rebaseline-cl` again to fetch new baselines.
+   By default, this will download new baselines for any failing tests
+   in the try jobs.
+   (Run `webkit-patch rebaseline-cl --help` for more specific options.)
 5. Commit the new baselines and upload a new patch.
 
 This way, the new baselines can be reviewed along with the changes, which helps
 the reviewer verify that the new baselines are correct. It also means that there
 is no period of time when the layout test results are ignored.
 
+#### Options
+
 The tests which `webkit-patch rebaseline-cl` tries to download new baselines for
 depends on its arguments.
 
@@ -114,6 +121,9 @@
   considered.
 * You can also explicitly pass a list of test names, and then just those tests
   will be rebaselined.
+* If some of the try jobs failed to run, and you wish to continue rebaselining
+  assuming that there are no platform-specific results for those platforms,
+  you can add the flag `--fill-missing`.
 
 ### Rebaselining with rebaseline-o-matic
 
diff --git a/extensions/browser/api/cast_channel/cast_transport.cc b/extensions/browser/api/cast_channel/cast_transport.cc
index 1bfbb336..c8805bc 100644
--- a/extensions/browser/api/cast_channel/cast_transport.cc
+++ b/extensions/browser/api/cast_channel/cast_transport.cc
@@ -56,7 +56,7 @@
 }
 
 CastTransportImpl::~CastTransportImpl() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   FlushWriteQueue();
 }
 
@@ -146,7 +146,7 @@
 }
 
 void CastTransportImpl::SetReadDelegate(std::unique_ptr<Delegate> delegate) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(delegate);
   delegate_ = std::move(delegate);
   if (started_) {
@@ -165,7 +165,7 @@
 
 void CastTransportImpl::SendMessage(const CastMessage& message,
                                     const net::CompletionCallback& callback) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   std::string serialized_message;
   if (!MessageFramer::Serialize(message, &serialized_message)) {
     base::ThreadTaskRunnerHandle::Get()->PostTask(
@@ -214,7 +214,7 @@
 }
 
 void CastTransportImpl::OnWriteResult(int result) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK_NE(WRITE_STATE_IDLE, write_state_);
   if (write_queue_.empty()) {
     SetWriteState(WRITE_STATE_IDLE);
@@ -330,7 +330,7 @@
 }
 
 void CastTransportImpl::Start() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(!started_);
   DCHECK_EQ(READ_STATE_READ, read_state_);
   DCHECK(delegate_) << "Read delegate must be set prior to calling Start()";
@@ -343,7 +343,7 @@
 }
 
 void CastTransportImpl::OnReadResult(int result) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   // Network operations can either finish synchronously or asynchronously.
   // This method executes the state machine transitions in a loop so that
   // write state transitions happen even when network operations finish
diff --git a/extensions/browser/api/cast_channel/cast_transport.h b/extensions/browser/api/cast_channel/cast_transport.h
index d4e5805..ba67ee8f 100644
--- a/extensions/browser/api/cast_channel/cast_transport.h
+++ b/extensions/browser/api/cast_channel/cast_transport.h
@@ -10,7 +10,7 @@
 
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/threading/non_thread_safe.h"
+#include "base/sequence_checker.h"
 #include "base/threading/thread_checker.h"
 #include "extensions/browser/api/cast_channel/logger.h"
 #include "extensions/common/api/cast_channel.h"
@@ -72,7 +72,7 @@
 };
 
 // Manager class for reading and writing messages to/from a socket.
-class CastTransportImpl : public CastTransport, public base::NonThreadSafe {
+class CastTransportImpl : public CastTransport {
  public:
   // Adds a CastMessage read/write layer to a socket.
   // Message read events are propagated to the owner via |read_delegate|.
@@ -215,6 +215,8 @@
   // Accumulates details of events and errors, for debugging purposes.
   scoped_refptr<Logger> logger_;
 
+  SEQUENCE_CHECKER(sequence_checker_);
+
   DISALLOW_COPY_AND_ASSIGN(CastTransportImpl);
 };
 }  // namespace cast_channel
diff --git a/gin/isolate_holder.cc b/gin/isolate_holder.cc
index 2e707359..d42607d 100644
--- a/gin/isolate_holder.cc
+++ b/gin/isolate_holder.cc
@@ -68,6 +68,30 @@
 #endif
 }
 
+IsolateHolder::IsolateHolder(intptr_t* reference_table,
+                             v8::StartupData* existing_blob)
+    : snapshot_creator_(
+          new v8::SnapshotCreator(reference_table, existing_blob)),
+      access_mode_(kSingleThread) {
+  v8::ArrayBuffer::Allocator* allocator = g_array_buffer_allocator;
+  CHECK(allocator) << "You need to invoke gin::IsolateHolder::Initialize first";
+  isolate_ = snapshot_creator_->GetIsolate();
+  isolate_data_.reset(
+      new PerIsolateData(isolate_, allocator, access_mode_, nullptr));
+  isolate_memory_dump_provider_.reset(new V8IsolateMemoryDumpProvider(this));
+#if defined(OS_WIN)
+  {
+    void* code_range;
+    size_t size;
+    isolate_->GetCodeRange(&code_range, &size);
+    Debug::CodeRangeCreatedCallback callback =
+        DebugImpl::GetCodeRangeCreatedCallback();
+    if (code_range && size && callback)
+      callback(code_range, size);
+  }
+#endif
+}
+
 IsolateHolder::~IsolateHolder() {
   if (task_observer_.get())
     base::MessageLoop::current()->RemoveTaskObserver(task_observer_.get());
diff --git a/gin/public/isolate_holder.h b/gin/public/isolate_holder.h
index 0d9cb3b..e2846213 100644
--- a/gin/public/isolate_holder.h
+++ b/gin/public/isolate_holder.h
@@ -60,6 +60,11 @@
   IsolateHolder(scoped_refptr<base::SingleThreadTaskRunner> task_runner,
                 AccessMode access_mode,
                 AllowAtomicsWaitMode atomics_wait_mode);
+
+  // This constructor is to create V8 snapshot for Blink.
+  // Note this constructor calls isolate->Enter() internally.
+  IsolateHolder(intptr_t* reference_table, v8::StartupData* existing_blob);
+
   ~IsolateHolder();
 
   // Should be invoked once before creating IsolateHolder instances to
@@ -91,6 +96,10 @@
   // This method returns if v8::Locker is needed to access isolate.
   AccessMode access_mode() const { return access_mode_; }
 
+  v8::SnapshotCreator* snapshot_creator() const {
+    return snapshot_creator_.get();
+  }
+
   void EnableIdleTasks(std::unique_ptr<V8IdleTaskRunner> idle_task_runner);
 
   // This method returns V8IsolateMemoryDumpProvider of this isolate, used for
@@ -105,6 +114,7 @@
   std::unique_ptr<PerIsolateData> isolate_data_;
   std::unique_ptr<RunMicrotasksObserver> task_observer_;
   std::unique_ptr<V8IsolateMemoryDumpProvider> isolate_memory_dump_provider_;
+  std::unique_ptr<v8::SnapshotCreator> snapshot_creator_;
   AccessMode access_mode_;
 
   DISALLOW_COPY_AND_ASSIGN(IsolateHolder);
diff --git a/google_apis/gaia/fake_gaia.cc b/google_apis/gaia/fake_gaia.cc
index 3c91f25c6..c74fbf93 100644
--- a/google_apis/gaia/fake_gaia.cc
+++ b/google_apis/gaia/fake_gaia.cc
@@ -525,6 +525,7 @@
   http_response->set_code(net::HTTP_UNAUTHORIZED);
   if (merge_session_params_.gaia_uber_token.empty()) {
     http_response->set_code(net::HTTP_FORBIDDEN);
+    http_response->set_content("Error=BadAuthentication");
     return;
   }
 
diff --git a/ios/chrome/browser/net/crl_set_fetcher.cc b/ios/chrome/browser/net/crl_set_fetcher.cc
index dd75b21..92966ca6 100644
--- a/ios/chrome/browser/net/crl_set_fetcher.cc
+++ b/ios/chrome/browser/net/crl_set_fetcher.cc
@@ -163,9 +163,11 @@
 update_client::CrxInstaller::Result CRLSetFetcher::Install(
     const base::DictionaryValue& manifest,
     const base::FilePath& unpack_path) {
-  return update_client::InstallFunctionWrapper(
+  const auto result = update_client::InstallFunctionWrapper(
       base::Bind(&CRLSetFetcher::DoInstall, base::Unretained(this),
                  base::ConstRef(manifest), base::ConstRef(unpack_path)));
+  base::DeleteFile(unpack_path, true /* recursive */);
+  return result;
 }
 
 bool CRLSetFetcher::DoInstall(const base::DictionaryValue& manifest,
diff --git a/ios/chrome/browser/tabs/tab.mm b/ios/chrome/browser/tabs/tab.mm
index eb50be6..a86f1374 100644
--- a/ios/chrome/browser/tabs/tab.mm
+++ b/ios/chrome/browser/tabs/tab.mm
@@ -985,11 +985,6 @@
                          currentIndex:sessionTab->current_navigation_index];
 }
 
-- (void)webWillReload {
-  if ([_parentTabModel tabUsageRecorder])
-    [_parentTabModel tabUsageRecorder]->RecordReload(self);
-}
-
 // Halt the tab, which amounts to halting its webController.
 - (void)terminateNetworkActivity {
   [self.webController terminateNetworkActivity];
@@ -1408,6 +1403,12 @@
 
 - (void)webState:(web::WebState*)webState
     didStartNavigation:(web::NavigationContext*)navigation {
+  if ([_parentTabModel tabUsageRecorder] &&
+      PageTransitionCoreTypeIs(navigation->GetPageTransition(),
+                               ui::PAGE_TRANSITION_RELOAD)) {
+    [_parentTabModel tabUsageRecorder]->RecordReload(self);
+  }
+
   [self.dialogDelegate cancelDialogForTab:self];
   [_parentTabModel notifyTabChanged:self];
   [_openInController disable];
diff --git a/ios/chrome/browser/ui/autofill/cells/autofill_edit_item.h b/ios/chrome/browser/ui/autofill/cells/autofill_edit_item.h
index 7729ca2..db91a6e 100644
--- a/ios/chrome/browser/ui/autofill/cells/autofill_edit_item.h
+++ b/ios/chrome/browser/ui/autofill/cells/autofill_edit_item.h
@@ -21,8 +21,8 @@
 // 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;
+// An icon identifying the text field or its current value, if any.
+@property(nonatomic, copy) UIImage* identifyingIcon;
 
 // The inputView for the text field, if any.
 @property(nonatomic, strong) UIPickerView* inputView;
@@ -51,8 +51,8 @@
 // |textFieldValue|.
 @property(nonatomic, readonly, strong) UITextField* textField;
 
-// UIImageView containing the credit card type icon.
-@property(nonatomic, readonly, strong) UIImageView* cardTypeIconView;
+// UIImageView containing the icon identifying |textField| or its current value.
+@property(nonatomic, readonly, strong) UIImageView* identifyingIconView;
 
 @end
 
diff --git a/ios/chrome/browser/ui/autofill/cells/autofill_edit_item.mm b/ios/chrome/browser/ui/autofill/cells/autofill_edit_item.mm
index 406a69eb..fd12324a 100644
--- a/ios/chrome/browser/ui/autofill/cells/autofill_edit_item.mm
+++ b/ios/chrome/browser/ui/autofill/cells/autofill_edit_item.mm
@@ -28,7 +28,7 @@
 
 @synthesize textFieldName = _textFieldName;
 @synthesize textFieldValue = _textFieldValue;
-@synthesize cardTypeIcon = _cardTypeIcon;
+@synthesize identifyingIcon = _identifyingIcon;
 @synthesize inputView = _inputView;
 @synthesize textFieldEnabled = _textFieldEnabled;
 @synthesize autofillUIType = _autofillUIType;
@@ -62,7 +62,7 @@
                      action:@selector(textFieldChanged:)
            forControlEvents:UIControlEventEditingChanged];
   cell.textField.inputView = self.inputView;
-  cell.cardTypeIconView.image = self.cardTypeIcon;
+  cell.identifyingIconView.image = self.identifyingIcon;
 }
 
 #pragma mark - Actions
@@ -81,7 +81,7 @@
 
 @synthesize textField = _textField;
 @synthesize textLabel = _textLabel;
-@synthesize cardTypeIconView = _cardTypeIconView;
+@synthesize identifyingIconView = _identifyingIconView;
 
 - (instancetype)initWithFrame:(CGRect)frame {
   self = [super initWithFrame:frame];
@@ -114,19 +114,19 @@
         UseRTLLayout() ? NSTextAlignmentLeft : NSTextAlignmentRight;
 
     // Card type icon.
-    _cardTypeIconView = [[UIImageView alloc] initWithFrame:CGRectZero];
-    _cardTypeIconView.translatesAutoresizingMaskIntoConstraints = NO;
-    [contentView addSubview:_cardTypeIconView];
+    _identifyingIconView = [[UIImageView alloc] initWithFrame:CGRectZero];
+    _identifyingIconView.translatesAutoresizingMaskIntoConstraints = NO;
+    [contentView addSubview:_identifyingIconView];
 
     // Set up the icons size constraints. They are activated here and updated in
     // layoutSubviews.
     _iconHeightConstraint =
-        [_cardTypeIconView.heightAnchor constraintEqualToConstant:0];
+        [_identifyingIconView.heightAnchor constraintEqualToConstant:0];
     _iconWidthConstraint =
-        [_cardTypeIconView.widthAnchor constraintEqualToConstant:0];
+        [_identifyingIconView.widthAnchor constraintEqualToConstant:0];
 
     _textFieldTrailingConstraint = [_textField.trailingAnchor
-        constraintEqualToAnchor:_cardTypeIconView.leadingAnchor];
+        constraintEqualToAnchor:_identifyingIconView.leadingAnchor];
 
     // Set up the constraints.
     [NSLayoutConstraint activateConstraints:@[
@@ -143,10 +143,10 @@
       [_textField.leadingAnchor
           constraintEqualToAnchor:_textLabel.trailingAnchor
                          constant:kLabelAndFieldGap],
-      [_cardTypeIconView.trailingAnchor
+      [_identifyingIconView.trailingAnchor
           constraintEqualToAnchor:contentView.trailingAnchor
                          constant:-kHorizontalPadding],
-      [_cardTypeIconView.centerYAnchor
+      [_identifyingIconView.centerYAnchor
           constraintEqualToAnchor:contentView.centerYAnchor],
       _iconHeightConstraint,
       _iconWidthConstraint,
@@ -160,12 +160,12 @@
 #pragma mark - UIView
 
 - (void)layoutSubviews {
-  if (self.cardTypeIconView.image) {
+  if (self.identifyingIconView.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;
+    _iconHeightConstraint.constant = self.identifyingIconView.image.size.height;
+    _iconWidthConstraint.constant = self.identifyingIconView.image.size.width;
   } else {
     _textFieldTrailingConstraint.constant = 0;
 
@@ -191,7 +191,7 @@
   [self.textField removeTarget:nil
                         action:nil
               forControlEvents:UIControlEventAllEvents];
-  self.cardTypeIconView.image = nil;
+  self.identifyingIconView.image = nil;
 }
 
 #pragma mark - Accessibility
diff --git a/ios/chrome/browser/ui/payments/credit_card_edit_view_controller.mm b/ios/chrome/browser/ui/payments/credit_card_edit_view_controller.mm
index 98099da..79b8ce4 100644
--- a/ios/chrome/browser/ui/payments/credit_card_edit_view_controller.mm
+++ b/ios/chrome/browser/ui/payments/credit_card_edit_view_controller.mm
@@ -95,7 +95,7 @@
       if (field.autofillUIType == AutofillUITypeCreditCardNumber) {
         AutofillEditItem* item =
             base::mac::ObjCCastStrict<AutofillEditItem>(field.item);
-        item.cardTypeIcon =
+        item.identifyingIcon =
             [_dataSource cardTypeIconFromCardNumber:item.textFieldValue];
       }
     }
@@ -141,7 +141,7 @@
     NSString* updatedText =
         [textField.text stringByReplacingCharactersInRange:range
                                                 withString:newText];
-    item.cardTypeIcon = [_dataSource cardTypeIconFromCardNumber:updatedText];
+    item.identifyingIcon = [_dataSource cardTypeIconFromCardNumber:updatedText];
 
     // Update the cell.
     [self reconfigureCellsForItems:@[ item ]];
diff --git a/ios/chrome/browser/ui/sad_tab/sad_tab_view.mm b/ios/chrome/browser/ui/sad_tab/sad_tab_view.mm
index ac2fc8a3..2320cfd 100644
--- a/ios/chrome/browser/ui/sad_tab/sad_tab_view.mm
+++ b/ios/chrome/browser/ui/sad_tab/sad_tab_view.mm
@@ -30,27 +30,29 @@
 // Color constants.
 const CGFloat kBackgroundColorBrightness = 247.0f / 255.0f;
 const CGFloat kTitleLabelTextColorBrightness = 22.0f / 255.0f;
-const CGFloat kMessageLabelTextColorBrightness = 80.0f / 255.0f;
+const CGFloat kGeneralTextColorBrightness = 80.0f / 255.0f;
 // Layout constants.
 const UIEdgeInsets kLayoutInsets = {24.0f, 24.0f, 24.0f, 24.0f};
 const CGFloat kLayoutBoundsMaxWidth = 600.0f;
 const CGFloat kContainerViewLandscapeTopPadding = 22.0f;
 const CGFloat kTitleLabelTopPadding = 26.0f;
-const CGFloat kMessageLabelTopPadding = 16.0f;
+const CGFloat kMessageTextViewTopPadding = 16.0f;
 const CGFloat kFooterLabelTopPadding = 16.0f;
 const CGFloat kActionButtonHeight = 48.0f;
 const CGFloat kActionButtonTopPadding = 16.0f;
 // Label font sizes.
 const CGFloat kTitleLabelFontSize = 23.0f;
-const CGFloat kMessageLabelFontSize = 14.0f;
+const CGFloat kMessageTextViewFontSize = 14.0f;
 const CGFloat kFooterLabelFontSize = 14.0f;
-// String constants for formatting bullets.
-// "<5xSpace><Bullet><4xSpace><Content>".
-NSString* const kMessageLabelBulletPrefix = @"     \u2022    ";
-// "<newline>".
-NSString* const kMessageLabelBulletSuffix = @"\n";
+// Feedback message bullet indentation.
+const CGFloat kBulletIndent = 17.0f;        // Left margin to bullet indent.
+const CGFloat kBulletedTextIndent = 15.0f;  // Bullet to text indent.
+// Format for bulleted line (<tab><bullet><tab><string>).
+NSString* const kMessageTextViewBulletPrefix = @"\t\u2022\t";
+// Separator for each new bullet line.
+NSString* const kMessageTextViewBulletSuffix = @"\n";
 // "<RTL Begin Indicator><NSString Token><RTL End Indicator>".
-NSString* const kMessageLabelBulletRTLFormat = @"\u202E%@\u202C";
+NSString* const kMessageTextViewBulletRTLFormat = @"\u202E%@\u202C";
 }  // namespace
 
 @interface SadTabView ()
@@ -62,7 +64,7 @@
 // Displays the Sad Tab title.
 @property(nonatomic, readonly, strong) UILabel* titleLabel;
 // Displays the Sad Tab message.
-@property(nonatomic, readonly, strong) UILabel* messageLabel;
+@property(nonatomic, readonly, strong) UITextView* messageTextView;
 // Displays the Sad Tab footer message (including a link to more help).
 @property(nonatomic, readonly, strong) UILabel* footerLabel;
 // Provides Link functionality to the footerLabel.
@@ -80,21 +82,22 @@
 // layouts reference the values set in previous functions.
 - (void)layoutImageView;
 - (void)layoutTitleLabel;
-- (void)layoutMessageLabel;
+- (void)layoutMessageTextView;
 - (void)layoutFooterLabel;
 - (void)layoutActionButton;
 - (void)layoutContainerView;
 
 // Takes an array of strings and bulletizes them into a single multi-line string
-// for display.
-+ (nonnull NSString*)bulletedStringFromStrings:
+// for display. The string has NSParagraphStyle attributes for tab alignment.
++ (nonnull NSAttributedString*)bulletedAttributedStringFromStrings:
     (nonnull NSArray<NSString*>*)strings;
 
 // Returns the appropriate title for the view, e.g. 'Aw Snap!'.
 - (nonnull NSString*)titleLabelText;
-// Returns the appropriate message label body for the view, this will typically
-// be a larger body of explanation or help text.
-- (nonnull NSString*)messageLabelText;
+// Returns the appropriate message text body for the view, this will typically
+// be a larger body of explanation or help text. Returns an attributed string
+// to allow for text formatting and layout to be applied to the returned string.
+- (nonnull NSAttributedString*)messageTextViewAttributedText;
 // Returns the full footer string containing a link, intended to be the last
 // piece of text.
 - (nonnull NSString*)footerLabelText;
@@ -124,7 +127,7 @@
 @synthesize imageView = _imageView;
 @synthesize containerView = _containerView;
 @synthesize titleLabel = _titleLabel;
-@synthesize messageLabel = _messageLabel;
+@synthesize messageTextView = _messageTextView;
 @synthesize footerLabel = _footerLabel;
 @synthesize footerLabelLinkController = _footerLabelLinkController;
 @synthesize actionButton = _actionButton;
@@ -159,26 +162,50 @@
 
 #pragma mark - Text Utilities
 
-+ (nonnull NSString*)bulletedStringFromStrings:
++ (nonnull NSAttributedString*)bulletedAttributedStringFromStrings:
     (nonnull NSArray<NSString*>*)strings {
   // Ensures the bullet string is appropriately directional.
   NSString* directionalBulletPrefix =
       base::i18n::IsRTL()
-          ? [NSString stringWithFormat:kMessageLabelBulletRTLFormat,
-                                       kMessageLabelBulletPrefix]
-          : kMessageLabelBulletPrefix;
-  NSMutableString* bulletedString = [NSMutableString string];
+          ? [NSString stringWithFormat:kMessageTextViewBulletRTLFormat,
+                                       kMessageTextViewBulletPrefix]
+          : kMessageTextViewBulletPrefix;
+
+  // Assemble the strings into a single string with each line preceded by a
+  // bullet point.
+  NSMutableString* bulletedString = [[NSMutableString alloc] init];
   for (NSString* string in strings) {
     // If content line has been added to the bulletedString already, ensure the
     // suffix is applied, otherwise don't (e.g. don't for the first item).
     NSArray* newStringArray =
         bulletedString.length
-            ? @[ kMessageLabelBulletSuffix, directionalBulletPrefix, string ]
+            ? @[ kMessageTextViewBulletSuffix, directionalBulletPrefix, string ]
             : @[ directionalBulletPrefix, string ];
     [bulletedString appendString:[newStringArray componentsJoinedByString:@""]];
   }
-  DCHECK(bulletedString);
-  return bulletedString;
+
+  // Prepare a paragraph style that will allow for the alignment of lines of
+  // text separately to the alignment of the bullet-points.
+  NSMutableParagraphStyle* paragraphStyle =
+      [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
+  paragraphStyle.tabStops = @[
+    [[NSTextTab alloc] initWithTextAlignment:NSTextAlignmentNatural
+                                    location:kBulletIndent
+                                     options:@{}],
+    [[NSTextTab alloc] initWithTextAlignment:NSTextAlignmentNatural
+                                    location:kBulletIndent + kBulletedTextIndent
+                                     options:@{}]
+  ];
+  paragraphStyle.firstLineHeadIndent = 0.0f;
+  paragraphStyle.headIndent = kBulletIndent + kBulletedTextIndent;
+
+  // Use the paragraph style on the full string.
+  NSAttributedString* bulletedAttributedString = [[NSAttributedString alloc]
+      initWithString:bulletedString
+          attributes:@{NSParagraphStyleAttributeName : paragraphStyle}];
+
+  DCHECK(bulletedAttributedString);
+  return bulletedAttributedString;
 }
 
 #pragma mark - Label Text
@@ -197,24 +224,31 @@
   return label;
 }
 
-- (nonnull NSString*)messageLabelText {
-  NSString* label = nil;
+- (nonnull NSAttributedString*)messageTextViewAttributedText {
+  NSAttributedString* label = nil;
   switch (self.mode) {
     case SadTabViewMode::RELOAD:
-      label = l10n_util::GetNSString(IDS_SAD_TAB_MESSAGE);
+      label = [[NSAttributedString alloc]
+          initWithString:l10n_util::GetNSString(IDS_SAD_TAB_MESSAGE)];
       break;
-    case SadTabViewMode::FEEDBACK:
-      label = l10n_util::GetNSString(IDS_SAD_TAB_RELOAD_TRY);
-      label = [label
-          stringByAppendingFormat:
-              @"\n\n%@", [[self class] bulletedStringFromStrings:@[
-                l10n_util::GetNSString(IDS_SAD_TAB_RELOAD_CLOSE_NOTABS),
-                l10n_util::GetNSString(IDS_SAD_TAB_RELOAD_INCOGNITO),
-                l10n_util::GetNSString(IDS_SAD_TAB_RELOAD_RESTART_BROWSER),
-                l10n_util::GetNSString(IDS_SAD_TAB_RELOAD_RESTART_DEVICE)
-              ]]];
-
+    case SadTabViewMode::FEEDBACK: {
+      NSString* feedbackIntroductionString = [NSString
+          stringWithFormat:@"%@\n\n",
+                           l10n_util::GetNSString(IDS_SAD_TAB_RELOAD_TRY)];
+      NSMutableAttributedString* feedbackString =
+          [[NSMutableAttributedString alloc]
+              initWithString:feedbackIntroductionString];
+      NSAttributedString* bulletedListString =
+          [[self class] bulletedAttributedStringFromStrings:@[
+            l10n_util::GetNSString(IDS_SAD_TAB_RELOAD_CLOSE_NOTABS),
+            l10n_util::GetNSString(IDS_SAD_TAB_RELOAD_INCOGNITO),
+            l10n_util::GetNSString(IDS_SAD_TAB_RELOAD_RESTART_BROWSER),
+            l10n_util::GetNSString(IDS_SAD_TAB_RELOAD_RESTART_DEVICE)
+          ]];
+      [feedbackString appendAttributedString:bulletedListString];
+      label = feedbackString;
       break;
+    }
   }
   DCHECK(label);
   return label;
@@ -323,20 +357,19 @@
   return _titleLabel;
 }
 
-- (UILabel*)messageLabel {
-  if (!_messageLabel) {
-    _messageLabel = [[UILabel alloc] initWithFrame:CGRectZero];
-    [_messageLabel setBackgroundColor:self.backgroundColor];
-    [_messageLabel setText:[self messageLabelText]];
-    [_messageLabel setLineBreakMode:NSLineBreakByWordWrapping];
-    [_messageLabel setNumberOfLines:0];
-    [_messageLabel
-        setTextColor:[UIColor colorWithWhite:kMessageLabelTextColorBrightness
+- (UITextView*)messageTextView {
+  if (!_messageTextView) {
+    _messageTextView = [[UITextView alloc] initWithFrame:CGRectZero];
+    [_messageTextView setBackgroundColor:self.backgroundColor];
+    [_messageTextView setAttributedText:[self messageTextViewAttributedText]];
+    _messageTextView.textContainer.lineFragmentPadding = 0.0f;
+    [_messageTextView
+        setTextColor:[UIColor colorWithWhite:kGeneralTextColorBrightness
                                        alpha:1.0]];
-    [_messageLabel setFont:[[MDFRobotoFontLoader sharedInstance]
-                               regularFontOfSize:kMessageLabelFontSize]];
+    [_messageTextView setFont:[[MDFRobotoFontLoader sharedInstance]
+                                  regularFontOfSize:kMessageTextViewFontSize]];
   }
-  return _messageLabel;
+  return _messageTextView;
 }
 
 - (UILabel*)footerLabel {
@@ -347,7 +380,7 @@
     [_footerLabel setFont:[[MDFRobotoFontLoader sharedInstance]
                               regularFontOfSize:kFooterLabelFontSize]];
     [_footerLabel
-        setTextColor:[UIColor colorWithWhite:kMessageLabelTextColorBrightness
+        setTextColor:[UIColor colorWithWhite:kGeneralTextColorBrightness
                                        alpha:1.0]];
 
     [_footerLabel setText:[self footerLabelText]];
@@ -398,7 +431,7 @@
   [self addSubview:self.containerView];
   [self.containerView addSubview:self.imageView];
   [self.containerView addSubview:self.titleLabel];
-  [self.containerView addSubview:self.messageLabel];
+  [self.containerView addSubview:self.messageTextView];
   [self.containerView addSubview:self.footerLabel];
 }
 
@@ -407,7 +440,7 @@
 
   [self layoutImageView];
   [self layoutTitleLabel];
-  [self layoutMessageLabel];
+  [self layoutMessageTextView];
   [self layoutFooterLabel];
   [self layoutActionButton];
   [self layoutContainerView];
@@ -436,16 +469,16 @@
       AlignRectOriginAndSizeToPixels(LayoutRectGetRect(titleLabelLayout));
 }
 
-- (void)layoutMessageLabel {
+- (void)layoutMessageTextView {
   CGRect containerBounds = self.containerBounds;
-  LayoutRect messageLabelLayout = LayoutRectZero;
-  messageLabelLayout.boundingWidth = CGRectGetWidth(containerBounds);
-  messageLabelLayout.size =
-      [self.messageLabel sizeThatFits:containerBounds.size];
-  messageLabelLayout.position.originY =
-      CGRectGetMaxY(self.titleLabel.frame) + kMessageLabelTopPadding;
-  self.messageLabel.frame =
-      AlignRectOriginAndSizeToPixels(LayoutRectGetRect(messageLabelLayout));
+  LayoutRect messageTextViewLayout = LayoutRectZero;
+  messageTextViewLayout.boundingWidth = CGRectGetWidth(containerBounds);
+  messageTextViewLayout.size =
+      [self.messageTextView sizeThatFits:containerBounds.size];
+  messageTextViewLayout.position.originY =
+      CGRectGetMaxY(self.titleLabel.frame) + kMessageTextViewTopPadding;
+  self.messageTextView.frame =
+      AlignRectOriginAndSizeToPixels(LayoutRectGetRect(messageTextViewLayout));
 }
 
 - (void)layoutFooterLabel {
@@ -454,7 +487,7 @@
   footerLabelLayout.boundingWidth = CGRectGetWidth(containerBounds);
   footerLabelLayout.size = [self.footerLabel sizeThatFits:containerBounds.size];
   footerLabelLayout.position.originY =
-      CGRectGetMaxY(self.messageLabel.frame) + kFooterLabelTopPadding;
+      CGRectGetMaxY(self.messageTextView.frame) + kFooterLabelTopPadding;
   self.footerLabel.frame =
       AlignRectOriginAndSizeToPixels(LayoutRectGetRect(footerLabelLayout));
 }
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 1ece7ada9..24ef3f6 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
@@ -164,7 +164,7 @@
           : base::SysUTF16ToNSString(_creditCard.LastFourDigits());
   cardNumberitem.textFieldEnabled = isEditing;
   cardNumberitem.autofillUIType = AutofillUITypeCreditCardNumber;
-  cardNumberitem.cardTypeIcon =
+  cardNumberitem.identifyingIcon =
       [self cardTypeIconFromCardNumber:cardNumberitem.textFieldValue];
   [model addItem:cardNumberitem
       toSectionWithIdentifier:SectionIdentifierFields];
@@ -226,7 +226,7 @@
     NSString* updatedText =
         [textField.text stringByReplacingCharactersInRange:range
                                                 withString:newText];
-    item.cardTypeIcon = [self cardTypeIconFromCardNumber:updatedText];
+    item.identifyingIcon = [self cardTypeIconFromCardNumber:updatedText];
     // Update the cell.
     [self reconfigureCellsForItems:@[ item ]];
   }
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 430bb29..608b04b 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
@@ -643,7 +643,7 @@
   int resourceID =
       autofill::data_util::GetPaymentRequestData(autofill::kVisaCard)
           .icon_resource_id;
-  item.cardTypeIcon =
+  item.identifyingIcon =
       ResizeImage(NativeImage(resourceID), CGSizeMake(30.0, 30.0),
                   ProjectionMode::kAspectFillNoClipping);
   return item;
diff --git a/ios/web/public/web_state/ui/crw_web_delegate.h b/ios/web/public/web_state/ui/crw_web_delegate.h
index ca47319..181cf06 100644
--- a/ios/web/public/web_state/ui/crw_web_delegate.h
+++ b/ios/web/public/web_state/ui/crw_web_delegate.h
@@ -50,8 +50,6 @@
 // very intertwined. We should streamline the logic to jump between classes
 // less, then remove any delegate method that becomes unneccessary as a result.
 
-// Called when the page is reloaded.
-- (void)webWillReload;
 // Called when a page is loaded using loadWithParams.
 - (void)webDidUpdateSessionForLoadWithParams:
             (const web::NavigationManager::WebLoadParams&)params
diff --git a/ios/web/web_state/ui/crw_web_controller.mm b/ios/web/web_state/ui/crw_web_controller.mm
index 864dda6..9cbcf0d 100644
--- a/ios/web/web_state/ui/crw_web_controller.mm
+++ b/ios/web/web_state/ui/crw_web_controller.mm
@@ -612,9 +612,6 @@
 // YES if the navigation to |url| should be treated as a reload.
 - (BOOL)shouldReload:(const GURL&)destinationURL
           transition:(ui::PageTransition)transition;
-// Internal implementation of reload. Reloads without notifying the delegate.
-// Most callers should use -reload instead.
-- (void)reloadInternal;
 // Aborts any load for both the web view and web controller.
 - (void)abortLoad;
 // Updates the internal state and informs the delegate that any outstanding load
@@ -2024,9 +2021,7 @@
           destinationURL == item->GetOriginalRequestURL());
 }
 
-// Reload either the web view or the native content depending on which is
-// displayed.
-- (void)reloadInternal {
+- (void)reload {
   // Clear last user interaction.
   // TODO(crbug.com/546337): Move to after the load commits, in the subclass
   // implementation. This will be inaccurate if the reload fails or is
@@ -2062,11 +2057,6 @@
   }
 }
 
-- (void)reload {
-  [_delegate webWillReload];
-  [self reloadInternal];
-}
-
 - (void)abortLoad {
   [_webView stopLoading];
   [_pendingNavigationInfo setCancelled:YES];
diff --git a/jingle/glue/task_pump.cc b/jingle/glue/task_pump.cc
index 58399a2..cb828751 100644
--- a/jingle/glue/task_pump.cc
+++ b/jingle/glue/task_pump.cc
@@ -17,11 +17,11 @@
 }
 
 TaskPump::~TaskPump() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 }
 
 void TaskPump::WakeTasks() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (!stopped_ && !posted_wake_) {
     // Do the requested wake up.
     base::ThreadTaskRunnerHandle::Get()->PostTask(
@@ -32,7 +32,7 @@
 }
 
 int64_t TaskPump::CurrentTime() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   // Only timeout tasks rely on this function.  Since we're not using
   // libjingle tasks for timeout, it's safe to return 0 here.
   return 0;
@@ -43,7 +43,7 @@
 }
 
 void TaskPump::CheckAndRunTasks() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (stopped_) {
     return;
   }
diff --git a/jingle/glue/task_pump.h b/jingle/glue/task_pump.h
index 4f9c28c..64325d0 100644
--- a/jingle/glue/task_pump.h
+++ b/jingle/glue/task_pump.h
@@ -10,13 +10,13 @@
 #include "base/compiler_specific.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
-#include "base/threading/non_thread_safe.h"
+#include "base/sequence_checker.h"
 #include "third_party/libjingle_xmpp/task_runner/taskrunner.h"
 
 namespace jingle_glue {
 
 // rtc::TaskRunner implementation that works on chromium threads.
-class TaskPump : public rtc::TaskRunner, public base::NonThreadSafe {
+class TaskPump : public rtc::TaskRunner {
  public:
   TaskPump();
 
@@ -36,6 +36,8 @@
   bool posted_wake_;
   bool stopped_;
 
+  SEQUENCE_CHECKER(sequence_checker_);
+
   base::WeakPtrFactory<TaskPump> weak_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(TaskPump);
diff --git a/jingle/notifier/base/weak_xmpp_client.cc b/jingle/notifier/base/weak_xmpp_client.cc
index 7cec36e40..48a5dc0 100644
--- a/jingle/notifier/base/weak_xmpp_client.cc
+++ b/jingle/notifier/base/weak_xmpp_client.cc
@@ -13,12 +13,12 @@
       weak_ptr_factory_(this) {}
 
 WeakXmppClient::~WeakXmppClient() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   Invalidate();
 }
 
 void WeakXmppClient::Invalidate() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   // We don't want XmppClient raising any signals once its invalidated.
   SignalStateChange.disconnect_all();
   SignalLogInput.disconnect_all();
@@ -27,12 +27,12 @@
 }
 
 base::WeakPtr<WeakXmppClient> WeakXmppClient::AsWeakPtr() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   return weak_ptr_factory_.GetWeakPtr();
 }
 
 void WeakXmppClient::Stop() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   // We don't want XmppClient used after it has been stopped.
   Invalidate();
   buzz::XmppClient::Stop();
diff --git a/jingle/notifier/base/weak_xmpp_client.h b/jingle/notifier/base/weak_xmpp_client.h
index 16a68dd..db79c921 100644
--- a/jingle/notifier/base/weak_xmpp_client.h
+++ b/jingle/notifier/base/weak_xmpp_client.h
@@ -12,7 +12,7 @@
 #include "base/compiler_specific.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
-#include "base/threading/non_thread_safe.h"
+#include "base/sequence_checker.h"
 #include "third_party/libjingle_xmpp/xmpp/xmppclient.h"
 
 namespace rtc {
@@ -24,7 +24,7 @@
 // buzz::XmppClient's destructor isn't marked virtual, but it inherits
 // from rtc::Task, whose destructor *is* marked virtual, so we
 // can safely inherit from it.
-class WeakXmppClient : public buzz::XmppClient, public base::NonThreadSafe {
+class WeakXmppClient : public buzz::XmppClient {
  public:
   explicit WeakXmppClient(rtc::TaskParent* parent);
 
@@ -43,6 +43,8 @@
   void Stop() override;
 
  private:
+  SEQUENCE_CHECKER(sequence_checker_);
+
   // We use our own WeakPtrFactory instead of inheriting from
   // SupportsWeakPtr since we want to invalidate in other places
   // besides the destructor.
diff --git a/jingle/notifier/base/xmpp_connection.cc b/jingle/notifier/base/xmpp_connection.cc
index 8d71e5d9..01e4e8ff9 100644
--- a/jingle/notifier/base/xmpp_connection.cc
+++ b/jingle/notifier/base/xmpp_connection.cc
@@ -79,7 +79,7 @@
 }
 
 XmppConnection::~XmppConnection() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   ClearClient();
   task_pump_->Stop();
   // We do this because XmppConnection may get destroyed as a result
@@ -91,7 +91,7 @@
 }
 
 void XmppConnection::OnStateChange(buzz::XmppEngine::State state) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   VLOG(1) << "XmppClient state changed to " << state;
   if (!weak_xmpp_client_.get()) {
     LOG(DFATAL) << "weak_xmpp_client_ unexpectedly NULL";
@@ -129,12 +129,12 @@
 }
 
 void XmppConnection::OnInputLog(const char* data, int len) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   VLOG(2) << "XMPP Input: " << base::StringPiece(data, len);
 }
 
 void XmppConnection::OnOutputLog(const char* data, int len) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   VLOG(2) << "XMPP Output: " << base::StringPiece(data, len);
 }
 
diff --git a/jingle/notifier/base/xmpp_connection.h b/jingle/notifier/base/xmpp_connection.h
index 1e1c2db..1b6e415 100644
--- a/jingle/notifier/base/xmpp_connection.h
+++ b/jingle/notifier/base/xmpp_connection.h
@@ -13,7 +13,7 @@
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
-#include "base/threading/non_thread_safe.h"
+#include "base/sequence_checker.h"
 #include "net/url_request/url_request_context_getter.h"
 #include "third_party/libjingle_xmpp/xmpp/xmppengine.h"
 #include "webrtc/base/sigslot.h"
@@ -33,9 +33,7 @@
 
 class WeakXmppClient;
 
-class XmppConnection
-    : public sigslot::has_slots<>,
-      public base::NonThreadSafe {
+class XmppConnection : public sigslot::has_slots<> {
  public:
   class Delegate {
    public:
@@ -99,6 +97,8 @@
   bool on_connect_called_;
   Delegate* delegate_;
 
+  SEQUENCE_CHECKER(sequence_checker_);
+
   DISALLOW_COPY_AND_ASSIGN(XmppConnection);
 };
 
diff --git a/media/base/test_helpers.cc b/media/base/test_helpers.cc
index 457892f..d92dbfd 100644
--- a/media/base/test_helpers.cc
+++ b/media/base/test_helpers.cc
@@ -69,29 +69,29 @@
     : signaled_(false), status_(PIPELINE_OK), timeout_(timeout) {}
 
 WaitableMessageLoopEvent::~WaitableMessageLoopEvent() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 }
 
 base::Closure WaitableMessageLoopEvent::GetClosure() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   return BindToCurrentLoop(base::Bind(
       &WaitableMessageLoopEvent::OnCallback, base::Unretained(this),
       PIPELINE_OK));
 }
 
 PipelineStatusCB WaitableMessageLoopEvent::GetPipelineStatusCB() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   return BindToCurrentLoop(base::Bind(
       &WaitableMessageLoopEvent::OnCallback, base::Unretained(this)));
 }
 
 void WaitableMessageLoopEvent::RunAndWait() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   RunAndWaitForStatus(PIPELINE_OK);
 }
 
 void WaitableMessageLoopEvent::RunAndWaitForStatus(PipelineStatus expected) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (signaled_) {
     EXPECT_EQ(expected, status_);
     return;
@@ -110,7 +110,7 @@
 }
 
 void WaitableMessageLoopEvent::OnCallback(PipelineStatus status) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   signaled_ = true;
   status_ = status;
 
@@ -120,7 +120,7 @@
 }
 
 void WaitableMessageLoopEvent::OnTimeout() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   ADD_FAILURE() << "Timed out waiting for message loop to quit";
   run_loop_->Quit();
 }
diff --git a/media/base/test_helpers.h b/media/base/test_helpers.h
index afad1f7..b7e8815 100644
--- a/media/base/test_helpers.h
+++ b/media/base/test_helpers.h
@@ -11,8 +11,8 @@
 #include "base/callback.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
+#include "base/sequence_checker.h"
 #include "base/strings/string_number_conversions.h"
-#include "base/threading/non_thread_safe.h"
 #include "media/base/audio_parameters.h"
 #include "media/base/channel_layout.h"
 #include "media/base/media_log.h"
@@ -41,7 +41,7 @@
 // testing classes that run on more than a single thread.
 //
 // Events are intended for single use and cannot be reset.
-class WaitableMessageLoopEvent : public base::NonThreadSafe {
+class WaitableMessageLoopEvent {
  public:
   WaitableMessageLoopEvent();
   explicit WaitableMessageLoopEvent(base::TimeDelta timeout);
@@ -73,6 +73,8 @@
   std::unique_ptr<base::RunLoop> run_loop_;
   const base::TimeDelta timeout_;
 
+  SEQUENCE_CHECKER(sequence_checker_);
+
   DISALLOW_COPY_AND_ASSIGN(WaitableMessageLoopEvent);
 };
 
diff --git a/media/capture/video/win/video_capture_device_mf_win.cc b/media/capture/video/win/video_capture_device_mf_win.cc
index 6c91d20..44907fd 100644
--- a/media/capture/video/win/video_capture_device_mf_win.cc
+++ b/media/capture/video/win/video_capture_device_mf_win.cc
@@ -189,16 +189,16 @@
 VideoCaptureDeviceMFWin::VideoCaptureDeviceMFWin(
     const VideoCaptureDeviceDescriptor& device_descriptor)
     : descriptor_(device_descriptor), capture_(0) {
-  DetachFromThread();
+  DETACH_FROM_SEQUENCE(sequence_checker_);
 }
 
 VideoCaptureDeviceMFWin::~VideoCaptureDeviceMFWin() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 }
 
 bool VideoCaptureDeviceMFWin::Init(
     const base::win::ScopedComPtr<IMFMediaSource>& source) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(!reader_.Get());
 
   ScopedComPtr<IMFAttributes> attributes;
@@ -215,7 +215,7 @@
 void VideoCaptureDeviceMFWin::AllocateAndStart(
     const VideoCaptureParams& params,
     std::unique_ptr<VideoCaptureDevice::Client> client) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   base::AutoLock lock(lock_);
 
@@ -253,7 +253,7 @@
 }
 
 void VideoCaptureDeviceMFWin::StopAndDeAllocate() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   base::WaitableEvent flushed(base::WaitableEvent::ResetPolicy::AUTOMATIC,
                               base::WaitableEvent::InitialState::NOT_SIGNALED);
   const int kFlushTimeOutInMs = 1000;
diff --git a/media/capture/video/win/video_capture_device_mf_win.h b/media/capture/video/win/video_capture_device_mf_win.h
index 68cd4f8..3b2b7e3 100644
--- a/media/capture/video/win/video_capture_device_mf_win.h
+++ b/media/capture/video/win/video_capture_device_mf_win.h
@@ -16,8 +16,8 @@
 #include <vector>
 
 #include "base/macros.h"
+#include "base/sequence_checker.h"
 #include "base/synchronization/lock.h"
-#include "base/threading/non_thread_safe.h"
 #include "base/win/scoped_comptr.h"
 #include "media/capture/capture_export.h"
 #include "media/capture/video/video_capture_device.h"
@@ -35,8 +35,7 @@
 const DWORD kFirstVideoStream =
     static_cast<DWORD>(MF_SOURCE_READER_FIRST_VIDEO_STREAM);
 
-class CAPTURE_EXPORT VideoCaptureDeviceMFWin : public base::NonThreadSafe,
-                                               public VideoCaptureDevice {
+class CAPTURE_EXPORT VideoCaptureDeviceMFWin : public VideoCaptureDevice {
  public:
   static bool FormatFromGuid(const GUID& guid, VideoPixelFormat* format);
 
@@ -73,6 +72,8 @@
   VideoCaptureFormat capture_format_;
   bool capture_;
 
+  SEQUENCE_CHECKER(sequence_checker_);
+
   DISALLOW_IMPLICIT_CONSTRUCTORS(VideoCaptureDeviceMFWin);
 };
 
diff --git a/net/socket/client_socket_pool_manager_impl.cc b/net/socket/client_socket_pool_manager_impl.cc
index 0e917283..325b0ba 100644
--- a/net/socket/client_socket_pool_manager_impl.cc
+++ b/net/socket/client_socket_pool_manager_impl.cc
@@ -98,6 +98,7 @@
 }
 
 ClientSocketPoolManagerImpl::~ClientSocketPoolManagerImpl() {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   CertDatabase::GetInstance()->RemoveObserver(this);
 }
 
diff --git a/net/socket/client_socket_pool_manager_impl.h b/net/socket/client_socket_pool_manager_impl.h
index 7aea01f..3fde346 100644
--- a/net/socket/client_socket_pool_manager_impl.h
+++ b/net/socket/client_socket_pool_manager_impl.h
@@ -13,7 +13,7 @@
 #include "base/compiler_specific.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/threading/non_thread_safe.h"
+#include "base/threading/thread_checker.h"
 #include "net/cert/cert_database.h"
 #include "net/http/http_network_session.h"
 #include "net/socket/client_socket_pool_manager.h"
@@ -40,8 +40,7 @@
 class TransportClientSocketPool;
 class TransportSecurityState;
 
-class ClientSocketPoolManagerImpl : public base::NonThreadSafe,
-                                    public ClientSocketPoolManager,
+class ClientSocketPoolManagerImpl : public ClientSocketPoolManager,
                                     public CertDatabase::Observer {
  public:
   ClientSocketPoolManagerImpl(
@@ -120,6 +119,8 @@
   HTTPProxySocketPoolMap http_proxy_socket_pools_;
   SSLSocketPoolMap ssl_socket_pools_for_proxies_;
 
+  THREAD_CHECKER(thread_checker_);
+
   DISALLOW_COPY_AND_ASSIGN(ClientSocketPoolManagerImpl);
 };
 
diff --git a/net/socket/tcp_socket_win.cc b/net/socket/tcp_socket_win.cc
index f96d678..7b4072e 100644
--- a/net/socket/tcp_socket_win.cc
+++ b/net/socket/tcp_socket_win.cc
@@ -259,12 +259,13 @@
 }
 
 TCPSocketWin::~TCPSocketWin() {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   Close();
   net_log_.EndEvent(NetLogEventType::SOCKET_ALIVE);
 }
 
 int TCPSocketWin::Open(AddressFamily family) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK_EQ(socket_, INVALID_SOCKET);
 
   socket_ = CreatePlatformSocket(ConvertAddressFamily(family), SOCK_STREAM,
@@ -286,7 +287,7 @@
 
 int TCPSocketWin::AdoptConnectedSocket(SocketDescriptor socket,
                                        const IPEndPoint& peer_address) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK_EQ(socket_, INVALID_SOCKET);
   DCHECK(!core_.get());
 
@@ -306,7 +307,7 @@
 }
 
 int TCPSocketWin::AdoptUnconnectedSocket(SocketDescriptor socket) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK_EQ(socket_, INVALID_SOCKET);
 
   socket_ = socket;
@@ -325,7 +326,7 @@
 }
 
 int TCPSocketWin::Bind(const IPEndPoint& address) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK_NE(socket_, INVALID_SOCKET);
 
   SockaddrStorage storage;
@@ -343,7 +344,7 @@
 }
 
 int TCPSocketWin::Listen(int backlog) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK_GT(backlog, 0);
   DCHECK_NE(socket_, INVALID_SOCKET);
   DCHECK_EQ(accept_event_, WSA_INVALID_EVENT);
@@ -368,7 +369,7 @@
 int TCPSocketWin::Accept(std::unique_ptr<TCPSocketWin>* socket,
                          IPEndPoint* address,
                          const CompletionCallback& callback) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK(socket);
   DCHECK(address);
   DCHECK(!callback.is_null());
@@ -393,7 +394,7 @@
 
 int TCPSocketWin::Connect(const IPEndPoint& address,
                           const CompletionCallback& callback) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK_NE(socket_, INVALID_SOCKET);
   DCHECK(!waiting_connect_);
 
@@ -426,7 +427,7 @@
 }
 
 bool TCPSocketWin::IsConnected() const {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
   if (socket_ == INVALID_SOCKET || waiting_connect_)
     return false;
@@ -447,7 +448,7 @@
 }
 
 bool TCPSocketWin::IsConnectedAndIdle() const {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
   if (socket_ == INVALID_SOCKET || waiting_connect_)
     return false;
@@ -471,7 +472,7 @@
 int TCPSocketWin::Read(IOBuffer* buf,
                        int buf_len,
                        const CompletionCallback& callback) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK(!core_->read_iobuffer_.get());
   // base::Unretained() is safe because RetryRead() won't be called when |this|
   // is gone.
@@ -489,7 +490,7 @@
 int TCPSocketWin::ReadIfReady(IOBuffer* buf,
                               int buf_len,
                               const CompletionCallback& callback) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK_NE(socket_, INVALID_SOCKET);
   DCHECK(!waiting_read_);
   DCHECK(read_if_ready_callback_.is_null());
@@ -523,7 +524,7 @@
 int TCPSocketWin::Write(IOBuffer* buf,
                         int buf_len,
                         const CompletionCallback& callback) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK_NE(socket_, INVALID_SOCKET);
   DCHECK(!waiting_write_);
   CHECK(write_callback_.is_null());
@@ -572,7 +573,7 @@
 }
 
 int TCPSocketWin::GetLocalAddress(IPEndPoint* address) const {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK(address);
 
   SockaddrStorage storage;
@@ -587,7 +588,7 @@
 }
 
 int TCPSocketWin::GetPeerAddress(IPEndPoint* address) const {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK(address);
   if (!IsConnected())
     return ERR_SOCKET_NOT_CONNECTED;
@@ -631,12 +632,12 @@
 }
 
 int TCPSocketWin::SetReceiveBufferSize(int32_t size) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   return SetSocketReceiveBufferSize(socket_, size);
 }
 
 int TCPSocketWin::SetSendBufferSize(int32_t size) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   return SetSocketSendBufferSize(socket_, size);
 }
 
@@ -649,7 +650,7 @@
 }
 
 void TCPSocketWin::Close() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
   if (socket_ != INVALID_SOCKET) {
     // Only log the close event if there's actually a socket to close.
@@ -707,7 +708,7 @@
 }
 
 void TCPSocketWin::DetachFromThread() {
-  base::NonThreadSafe::DetachFromThread();
+  DETACH_FROM_THREAD(thread_checker_);
 }
 
 void TCPSocketWin::StartLoggingMultipleConnectAttempts(
diff --git a/net/socket/tcp_socket_win.h b/net/socket/tcp_socket_win.h
index a553e37..1c1b548 100644
--- a/net/socket/tcp_socket_win.h
+++ b/net/socket/tcp_socket_win.h
@@ -13,7 +13,7 @@
 #include "base/compiler_specific.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/threading/non_thread_safe.h"
+#include "base/threading/thread_checker.h"
 #include "base/win/object_watcher.h"
 #include "net/base/address_family.h"
 #include "net/base/completion_callback.h"
@@ -30,8 +30,7 @@
 class NetLog;
 struct NetLogSource;
 
-class NET_EXPORT TCPSocketWin : NON_EXPORTED_BASE(public base::NonThreadSafe),
-                                public base::win::ObjectWatcher::Delegate  {
+class NET_EXPORT TCPSocketWin : public base::win::ObjectWatcher::Delegate {
  public:
   TCPSocketWin(
       std::unique_ptr<SocketPerformanceWatcher> socket_performance_watcher,
@@ -186,6 +185,8 @@
 
   NetLogWithSource net_log_;
 
+  THREAD_CHECKER(thread_checker_);
+
   DISALLOW_COPY_AND_ASSIGN(TCPSocketWin);
 };
 
diff --git a/net/socket/udp_socket_posix.cc b/net/socket/udp_socket_posix.cc
index 66f037b..a120014 100644
--- a/net/socket/udp_socket_posix.cc
+++ b/net/socket/udp_socket_posix.cc
@@ -179,12 +179,13 @@
 }
 
 UDPSocketPosix::~UDPSocketPosix() {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   Close();
   net_log_.EndEvent(NetLogEventType::SOCKET_ALIVE);
 }
 
 int UDPSocketPosix::Open(AddressFamily address_family) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK_EQ(socket_, kInvalidSocket);
 
   addr_family_ = ConvertAddressFamily(address_family);
@@ -204,7 +205,7 @@
 }
 
 void UDPSocketPosix::Close() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
   if (socket_ == kInvalidSocket)
     return;
@@ -236,7 +237,7 @@
 }
 
 int UDPSocketPosix::GetPeerAddress(IPEndPoint* address) const {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK(address);
   if (!is_connected())
     return ERR_SOCKET_NOT_CONNECTED;
@@ -256,7 +257,7 @@
 }
 
 int UDPSocketPosix::GetLocalAddress(IPEndPoint* address) const {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK(address);
   if (!is_connected())
     return ERR_SOCKET_NOT_CONNECTED;
@@ -288,7 +289,7 @@
                              int buf_len,
                              IPEndPoint* address,
                              const CompletionCallback& callback) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK_NE(kInvalidSocket, socket_);
   CHECK(read_callback_.is_null());
   DCHECK(!recv_from_address_);
@@ -332,7 +333,7 @@
                                   int buf_len,
                                   const IPEndPoint* address,
                                   const CompletionCallback& callback) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK_NE(kInvalidSocket, socket_);
   CHECK(write_callback_.is_null());
   DCHECK(!callback.is_null());  // Synchronous operation not supported
@@ -372,7 +373,7 @@
 }
 
 int UDPSocketPosix::InternalConnect(const IPEndPoint& address) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK(!is_connected());
   DCHECK(!remote_address_.get());
 
@@ -406,7 +407,7 @@
 
 int UDPSocketPosix::Bind(const IPEndPoint& address) {
   DCHECK_NE(socket_, kInvalidSocket);
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK(!is_connected());
 
   int rv = SetMulticastOptions();
@@ -425,7 +426,7 @@
 int UDPSocketPosix::BindToNetwork(
     NetworkChangeNotifier::NetworkHandle network) {
   DCHECK_NE(socket_, kInvalidSocket);
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK(!is_connected());
   if (network == NetworkChangeNotifier::kInvalidNetworkHandle)
     return ERR_INVALID_ARGUMENT;
@@ -501,19 +502,19 @@
 
 int UDPSocketPosix::SetReceiveBufferSize(int32_t size) {
   DCHECK_NE(socket_, kInvalidSocket);
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   return SetSocketReceiveBufferSize(socket_, size);
 }
 
 int UDPSocketPosix::SetSendBufferSize(int32_t size) {
   DCHECK_NE(socket_, kInvalidSocket);
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   return SetSocketSendBufferSize(socket_, size);
 }
 
 int UDPSocketPosix::SetDoNotFragment() {
   DCHECK_NE(socket_, kInvalidSocket);
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
 #if !defined(IP_PMTUDISC_DO)
   return ERR_NOT_IMPLEMENTED;
@@ -544,14 +545,14 @@
 
 int UDPSocketPosix::AllowAddressReuse() {
   DCHECK_NE(socket_, kInvalidSocket);
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK(!is_connected());
   return SetReuseAddr(socket_, true);
 }
 
 int UDPSocketPosix::SetBroadcast(bool broadcast) {
   DCHECK_NE(socket_, kInvalidSocket);
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   int value = broadcast ? 1 : 0;
   int rv;
 #if defined(OS_MACOSX)
@@ -825,7 +826,7 @@
 }
 
 int UDPSocketPosix::JoinGroup(const IPAddress& group_address) const {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   if (!is_connected())
     return ERR_SOCKET_NOT_CONNECTED;
 
@@ -873,7 +874,7 @@
 }
 
 int UDPSocketPosix::LeaveGroup(const IPAddress& group_address) const {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
   if (!is_connected())
     return ERR_SOCKET_NOT_CONNECTED;
@@ -912,7 +913,7 @@
 }
 
 int UDPSocketPosix::SetMulticastInterface(uint32_t interface_index) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   if (is_connected())
     return ERR_SOCKET_IS_CONNECTED;
   multicast_interface_ = interface_index;
@@ -920,7 +921,7 @@
 }
 
 int UDPSocketPosix::SetMulticastTimeToLive(int time_to_live) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   if (is_connected())
     return ERR_SOCKET_IS_CONNECTED;
 
@@ -931,7 +932,7 @@
 }
 
 int UDPSocketPosix::SetMulticastLoopbackMode(bool loopback) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   if (is_connected())
     return ERR_SOCKET_IS_CONNECTED;
 
@@ -962,7 +963,7 @@
 }
 
 void UDPSocketPosix::DetachFromThread() {
-  base::NonThreadSafe::DetachFromThread();
+  DETACH_FROM_THREAD(thread_checker_);
 }
 
 }  // namespace net
diff --git a/net/socket/udp_socket_posix.h b/net/socket/udp_socket_posix.h
index ba42e04..c4a3b56 100644
--- a/net/socket/udp_socket_posix.h
+++ b/net/socket/udp_socket_posix.h
@@ -12,7 +12,7 @@
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/message_loop/message_loop.h"
-#include "base/threading/non_thread_safe.h"
+#include "base/threading/thread_checker.h"
 #include "net/base/address_family.h"
 #include "net/base/completion_callback.h"
 #include "net/base/io_buffer.h"
@@ -31,7 +31,7 @@
 class NetLog;
 struct NetLogSource;
 
-class NET_EXPORT UDPSocketPosix : public base::NonThreadSafe {
+class NET_EXPORT UDPSocketPosix {
  public:
   UDPSocketPosix(DatagramSocket::BindType bind_type,
                  const RandIntCallback& rand_int_cb,
@@ -321,6 +321,8 @@
   // Network that this socket is bound to via BindToNetwork().
   NetworkChangeNotifier::NetworkHandle bound_network_;
 
+  THREAD_CHECKER(thread_checker_);
+
   DISALLOW_COPY_AND_ASSIGN(UDPSocketPosix);
 };
 
diff --git a/net/socket/udp_socket_win.cc b/net/socket/udp_socket_win.cc
index 83538c9..d3f097b 100644
--- a/net/socket/udp_socket_win.cc
+++ b/net/socket/udp_socket_win.cc
@@ -270,12 +270,13 @@
 }
 
 UDPSocketWin::~UDPSocketWin() {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   Close();
   net_log_.EndEvent(NetLogEventType::SOCKET_ALIVE);
 }
 
 int UDPSocketWin::Open(AddressFamily address_family) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK_EQ(socket_, INVALID_SOCKET);
 
   addr_family_ = ConvertAddressFamily(address_family);
@@ -292,7 +293,7 @@
 }
 
 void UDPSocketWin::Close() {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
   if (socket_ == INVALID_SOCKET)
     return;
@@ -324,7 +325,7 @@
 }
 
 int UDPSocketWin::GetPeerAddress(IPEndPoint* address) const {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK(address);
   if (!is_connected())
     return ERR_SOCKET_NOT_CONNECTED;
@@ -345,7 +346,7 @@
 }
 
 int UDPSocketWin::GetLocalAddress(IPEndPoint* address) const {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK(address);
   if (!is_connected())
     return ERR_SOCKET_NOT_CONNECTED;
@@ -379,7 +380,7 @@
                            int buf_len,
                            IPEndPoint* address,
                            const CompletionCallback& callback) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK_NE(INVALID_SOCKET, socket_);
   CHECK(read_callback_.is_null());
   DCHECK(!recv_from_address_);
@@ -413,7 +414,7 @@
                                 int buf_len,
                                 const IPEndPoint* address,
                                 const CompletionCallback& callback) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK_NE(INVALID_SOCKET, socket_);
   CHECK(write_callback_.is_null());
   DCHECK(!callback.is_null());  // Synchronous operation not supported.
@@ -499,7 +500,7 @@
 
 int UDPSocketWin::SetReceiveBufferSize(int32_t size) {
   DCHECK_NE(socket_, INVALID_SOCKET);
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   int rv = SetSocketReceiveBufferSize(socket_, size);
 
   if (rv != 0)
@@ -522,7 +523,7 @@
 
 int UDPSocketWin::SetSendBufferSize(int32_t size) {
   DCHECK_NE(socket_, INVALID_SOCKET);
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   int rv = SetSocketSendBufferSize(socket_, size);
   if (rv != 0)
     return MapSystemError(WSAGetLastError());
@@ -543,7 +544,7 @@
 
 int UDPSocketWin::SetDoNotFragment() {
   DCHECK_NE(socket_, INVALID_SOCKET);
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
   if (addr_family_ == AF_INET6)
     return OK;
@@ -556,7 +557,7 @@
 
 int UDPSocketWin::AllowAddressReuse() {
   DCHECK_NE(socket_, INVALID_SOCKET);
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK(!is_connected());
 
   BOOL true_value = TRUE;
@@ -568,7 +569,7 @@
 
 int UDPSocketWin::SetBroadcast(bool broadcast) {
   DCHECK_NE(socket_, INVALID_SOCKET);
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
   BOOL value = broadcast ? TRUE : FALSE;
   int rv = setsockopt(socket_, SOL_SOCKET, SO_BROADCAST,
@@ -988,7 +989,7 @@
 }
 
 int UDPSocketWin::JoinGroup(const IPAddress& group_address) const {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   if (!is_connected())
     return ERR_SOCKET_NOT_CONNECTED;
 
@@ -1028,7 +1029,7 @@
 }
 
 int UDPSocketWin::LeaveGroup(const IPAddress& group_address) const {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   if (!is_connected())
     return ERR_SOCKET_NOT_CONNECTED;
 
@@ -1066,7 +1067,7 @@
 }
 
 int UDPSocketWin::SetMulticastInterface(uint32_t interface_index) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   if (is_connected())
     return ERR_SOCKET_IS_CONNECTED;
   multicast_interface_ = interface_index;
@@ -1074,7 +1075,7 @@
 }
 
 int UDPSocketWin::SetMulticastTimeToLive(int time_to_live) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   if (is_connected())
     return ERR_SOCKET_IS_CONNECTED;
 
@@ -1085,7 +1086,7 @@
 }
 
 int UDPSocketWin::SetMulticastLoopbackMode(bool loopback) {
-  DCHECK(CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   if (is_connected())
     return ERR_SOCKET_IS_CONNECTED;
 
@@ -1190,7 +1191,7 @@
 }
 
 void UDPSocketWin::DetachFromThread() {
-  base::NonThreadSafe::DetachFromThread();
+  DETACH_FROM_THREAD(thread_checker_);
 }
 
 void UDPSocketWin::UseNonBlockingIO() {
diff --git a/net/socket/udp_socket_win.h b/net/socket/udp_socket_win.h
index 9baeb7ba..d7f8419 100644
--- a/net/socket/udp_socket_win.h
+++ b/net/socket/udp_socket_win.h
@@ -14,7 +14,7 @@
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/threading/non_thread_safe.h"
+#include "base/threading/thread_checker.h"
 #include "base/win/object_watcher.h"
 #include "base/win/scoped_handle.h"
 #include "net/base/address_family.h"
@@ -35,8 +35,7 @@
 struct NetLogSource;
 
 class NET_EXPORT UDPSocketWin
-    : NON_EXPORTED_BASE(public base::NonThreadSafe),
-      NON_EXPORTED_BASE(public base::win::ObjectWatcher::Delegate) {
+    : NON_EXPORTED_BASE(public base::win::ObjectWatcher::Delegate) {
  public:
   UDPSocketWin(DatagramSocket::BindType bind_type,
                const RandIntCallback& rand_int_cb,
@@ -325,6 +324,8 @@
   HANDLE qos_handle_;
   QOS_FLOWID qos_flow_id_;
 
+  THREAD_CHECKER(thread_checker_);
+
   DISALLOW_COPY_AND_ASSIGN(UDPSocketWin);
 };
 
diff --git a/pdf/pdfium/fuzzers/pdfium_fuzzer_helper.cc b/pdf/pdfium/fuzzers/pdfium_fuzzer_helper.cc
index 3d49a0a7..9598caa 100644
--- a/pdf/pdfium/fuzzers/pdfium_fuzzer_helper.cc
+++ b/pdf/pdfium/fuzzers/pdfium_fuzzer_helper.cc
@@ -222,8 +222,12 @@
 // Initialize the library once for all runs of the fuzzer.
 struct TestCase {
   TestCase() {
+#ifdef V8_USE_EXTERNAL_STARTUP_DATA
     InitializeV8ForPDFium(ProgramPath(), "", &natives_blob, &snapshot_blob,
                           &platform);
+#else
+    InitializeV8ForPDFium(ProgramPath(), &platform);
+#endif
 
     memset(&config, '\0', sizeof(config));
     config.version = 2;
diff --git a/testing/buildbot/chromium.perf.json b/testing/buildbot/chromium.perf.json
index 013d28e0..4eb9029 100644
--- a/testing/buildbot/chromium.perf.json
+++ b/testing/buildbot/chromium.perf.json
@@ -6554,6 +6554,65 @@
       },
       {
         "args": [
+          "loading.mobile",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=android-chromium"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "loading.mobile",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "android_devices": "1",
+              "id": "build75-b1--device1",
+              "os": "Android",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 36000,
+          "hard_timeout": 16200,
+          "ignore_task_failure": false,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "loading.mobile",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=reference",
+          "--output-trace-tag=_ref"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "loading.mobile.reference",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "android_devices": "1",
+              "id": "build75-b1--device1",
+              "os": "Android",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 36000,
+          "hard_timeout": 16200,
+          "ignore_task_failure": true,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
           "media.android.tough_video_cases",
           "-v",
           "--upload-results",
@@ -6613,6 +6672,65 @@
       },
       {
         "args": [
+          "media.android.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=android-chromium"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.android.tough_video_cases_tbmv2",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "android_devices": "1",
+              "id": "build75-b1--device1",
+              "os": "Android",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 36000,
+          "hard_timeout": 10800,
+          "ignore_task_failure": false,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "media.android.tough_video_cases_tbmv2",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=reference",
+          "--output-trace-tag=_ref"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "media.android.tough_video_cases_tbmv2.reference",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "android_devices": "1",
+              "id": "build75-b1--device1",
+              "os": "Android",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 36000,
+          "hard_timeout": 10800,
+          "ignore_task_failure": true,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
           "media.mse_cases",
           "-v",
           "--upload-results",
@@ -7468,6 +7586,65 @@
       },
       {
         "args": [
+          "service_worker.service_worker",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=android-chromium"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "service_worker.service_worker",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "android_devices": "1",
+              "id": "build75-b1--device1",
+              "os": "Android",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 36000,
+          "hard_timeout": 10800,
+          "ignore_task_failure": false,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "service_worker.service_worker",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=reference",
+          "--output-trace-tag=_ref"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "service_worker.service_worker.reference",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "android_devices": "1",
+              "id": "build75-b1--device1",
+              "os": "Android",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 36000,
+          "hard_timeout": 10800,
+          "ignore_task_failure": true,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
           "service_worker.service_worker_micro_benchmark",
           "-v",
           "--upload-results",
@@ -8530,6 +8707,65 @@
       },
       {
         "args": [
+          "smoothness.tough_webgl_ad_cases",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=android-chromium"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "smoothness.tough_webgl_ad_cases",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "android_devices": "1",
+              "id": "build75-b1--device1",
+              "os": "Android",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 36000,
+          "hard_timeout": 10800,
+          "ignore_task_failure": false,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
+          "smoothness.tough_webgl_ad_cases",
+          "-v",
+          "--upload-results",
+          "--output-format=chartjson",
+          "--browser=reference",
+          "--output-trace-tag=_ref"
+        ],
+        "isolate_name": "telemetry_perf_tests",
+        "name": "smoothness.tough_webgl_ad_cases.reference",
+        "override_compile_targets": [
+          "telemetry_perf_tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "android_devices": "1",
+              "id": "build75-b1--device1",
+              "os": "Android",
+              "pool": "Chrome-perf"
+            }
+          ],
+          "expiration": 36000,
+          "hard_timeout": 10800,
+          "ignore_task_failure": true,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
           "speedometer",
           "-v",
           "--upload-results",
diff --git a/testing/buildbot/filters/mojo.fyi.browser_tests.filter b/testing/buildbot/filters/mojo.fyi.browser_tests.filter
index d37c9d1..e12b2122 100644
--- a/testing/buildbot/filters/mojo.fyi.browser_tests.filter
+++ b/testing/buildbot/filters/mojo.fyi.browser_tests.filter
@@ -1,4 +1,3 @@
-BrowserTest.*
 # Failing test
 -BrowserTest.FullscreenBookmarkBar
 
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
index 010cbe3..9cb5500 100644
--- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
+++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
@@ -4426,7 +4426,7 @@
 crbug.com/591099 external/wpt/css/CSS2/floats-clear/clear-float-004.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/CSS2/floats-clear/clear-float-005.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/CSS2/floats-clear/clear-float-006.xht [ Failure Pass ]
-crbug.com/591099 external/wpt/css/CSS2/floats-clear/float-003.xht [ Failure ]
+crbug.com/591099 external/wpt/css/CSS2/floats-clear/float-003.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/CSS2/floats-clear/float-applies-to-001a.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/CSS2/floats-clear/float-applies-to-001.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/CSS2/floats-clear/float-applies-to-002.xht [ Failure Pass ]
@@ -4450,11 +4450,11 @@
 crbug.com/591099 external/wpt/css/CSS2/floats-clear/float-replaced-width-002.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/floats-clear/float-replaced-width-003.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/CSS2/floats-clear/float-replaced-width-004.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/floats-clear/float-replaced-width-006.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/floats-clear/float-replaced-width-007.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/floats-clear/float-replaced-width-008.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/floats-clear/float-replaced-width-009.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/floats-clear/float-replaced-width-011.xht [ Failure ]
+crbug.com/591099 external/wpt/css/CSS2/floats-clear/float-replaced-width-006.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/CSS2/floats-clear/float-replaced-width-007.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/CSS2/floats-clear/float-replaced-width-008.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/CSS2/floats-clear/float-replaced-width-009.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/CSS2/floats-clear/float-replaced-width-011.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/CSS2/floats-clear/floats-001.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/CSS2/floats-clear/floats-002.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/CSS2/floats-clear/floats-004.xht [ Failure Pass ]
@@ -4526,7 +4526,7 @@
 crbug.com/591099 external/wpt/css/CSS2/linebox/border-padding-bleed-003.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/CSS2/linebox/empty-inline-002.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/linebox/inline-formatting-context-001.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/linebox/inline-formatting-context-013.xht [ Failure ]
+crbug.com/591099 external/wpt/css/CSS2/linebox/inline-formatting-context-013.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/CSS2/linebox/inline-formatting-context-022.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/CSS2/linebox/line-height-002.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/linebox/line-height-004.xht [ Failure ]
@@ -4558,7 +4558,7 @@
 crbug.com/591099 external/wpt/css/CSS2/linebox/line-height-101.xht [ Crash Failure ]
 crbug.com/591099 external/wpt/css/CSS2/linebox/line-height-103.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/linebox/line-height-104.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/linebox/line-height-125.xht [ Crash Failure ]
+crbug.com/591099 external/wpt/css/CSS2/linebox/line-height-125.xht [ Crash Failure Pass ]
 crbug.com/591099 external/wpt/css/CSS2/linebox/line-height-129.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/linebox/line-height-bleed-001.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/linebox/line-height-bleed-002.xht [ Failure ]
@@ -4633,20 +4633,20 @@
 crbug.com/591099 external/wpt/css/CSS2/normal-flow/height-114.xht [ Crash Failure ]
 crbug.com/591099 external/wpt/css/CSS2/normal-flow/height-percentage-005.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-block-non-replaced-height-002.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-block-replaced-width-001.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-block-replaced-width-002.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-block-replaced-width-003.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-block-replaced-width-006.xht [ Failure ]
+crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-block-replaced-width-001.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-block-replaced-width-002.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-block-replaced-width-003.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-block-replaced-width-006.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-block-valign-002.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-block-zorder-003.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-non-replaced-height-002.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-non-replaced-height-003.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-non-replaced-width-001.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-non-replaced-width-002.xht [ Failure Pass ]
-crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-replaced-width-001.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-replaced-width-002.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-replaced-width-003.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-replaced-width-006.xht [ Failure ]
+crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-replaced-width-001.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-replaced-width-002.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-replaced-width-003.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-replaced-width-006.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-replaced-width-012.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-replaced-width-013.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-replaced-width-015.xht [ Failure ]
@@ -4735,20 +4735,20 @@
 crbug.com/591099 external/wpt/css/CSS2/normal-flow/table-in-inline-001.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/CSS2/normal-flow/width-percentage-001.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/CSS2/normal-flow/width-percentage-002.xht [ Failure Pass ]
-crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-height-003.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-height-004.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-height-005.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-height-006.xht [ Failure ]
+crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-height-003.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-height-004.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-height-005.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-height-006.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-height-008.xht [ Failure Pass ]
-crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-height-010.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-height-011.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-height-012.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-max-height-004.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-max-height-005.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-max-height-006.xht [ Failure ]
+crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-height-010.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-height-011.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-height-012.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-max-height-004.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-max-height-005.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-max-height-006.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-max-height-008.xht [ Failure Pass ]
-crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-max-height-010.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-max-height-012.xht [ Failure ]
+crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-max-height-010.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-max-height-012.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-width-015.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-width-019.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-width-020.xht [ Failure ]
@@ -5090,9 +5090,11 @@
 crbug.com/591099 external/wpt/css/css-grid-1/abspos/orthogonal-positioned-grid-items-009.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-grid-1/abspos/orthogonal-positioned-grid-items-011.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-grid-1/abspos/orthogonal-positioned-grid-items-012.html [ Failure ]
+crbug.com/591099 external/wpt/css/css-grid-1/abspos/orthogonal-positioned-grid-items-013.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-grid-1/abspos/orthogonal-positioned-grid-items-014.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-grid-1/abspos/orthogonal-positioned-grid-items-015.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-grid-1/abspos/orthogonal-positioned-grid-items-016.html [ Failure ]
+crbug.com/591099 external/wpt/css/css-grid-1/abspos/orthogonal-positioned-grid-items-017.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-grid-1/abspos/positioned-grid-items-007.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-grid-1/abspos/positioned-grid-items-008.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-grid-1/abspos/positioned-grid-items-009.html [ Failure ]
@@ -5104,6 +5106,54 @@
 crbug.com/591099 external/wpt/css/css-grid-1/abspos/positioned-grid-items-015.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-grid-1/abspos/positioned-grid-items-016.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-grid-1/abspos/positioned-grid-items-017.html [ Failure ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-001.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-002.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-003.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-004.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-005.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-006.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-007.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-008.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-009.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-010.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-011.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-012.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-013.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-014.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-015.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-016.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-001.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-002.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-003.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-004.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-005.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-006.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-007.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-008.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-009.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-010.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-011.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-012.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-013.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-014.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-015.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-016.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-001.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-002.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-003.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-004.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-005.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-006.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-007.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-008.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-009.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-010.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-011.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-012.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-013.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-014.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-015.html [ Crash ]
+crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-016.html [ Crash ]
 crbug.com/591099 external/wpt/css/css-grid-1/grid-definition/fr-unit.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-grid-1/grid-definition/fr-unit-with-percentage.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-grid-1/grid-definition/grid-inline-template-columns-rows-resolved-values-001.xht [ Failure Pass ]
@@ -5506,8 +5556,8 @@
 crbug.com/591099 external/wpt/css/css-writing-modes-3/baseline-inline-non-replaced-005.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/baseline-inline-replaced-002.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/baseline-inline-replaced-003.xht [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes-3/block-flow-direction-004.xht [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes-3/block-flow-direction-htb-001.xht [ Failure ]
+crbug.com/591099 external/wpt/css/css-writing-modes-3/block-flow-direction-004.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/css-writing-modes-3/block-flow-direction-htb-001.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/block-flow-direction-vlr-003.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/block-flow-direction-vlr-007.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/block-flow-direction-vlr-008.xht [ Failure ]
@@ -5530,8 +5580,8 @@
 crbug.com/591099 external/wpt/css/css-writing-modes-3/block-flow-direction-vrl-026.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/block-override-004.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/block-override-isolate-004.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes-3/block-plaintext-004.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes-3/border-vlr-007.xht [ Failure ]
+crbug.com/591099 external/wpt/css/css-writing-modes-3/block-plaintext-004.html [ Failure Pass ]
+crbug.com/591099 external/wpt/css/css-writing-modes-3/border-vlr-007.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/border-vrl-006.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/box-offsets-rel-pos-vlr-003.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/box-offsets-rel-pos-vrl-002.xht [ Failure ]
@@ -5583,13 +5633,13 @@
 crbug.com/591099 external/wpt/css/css-writing-modes-3/float-vlr-003.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/float-vlr-005.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/float-vlr-007.xht [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes-3/float-vlr-009.xht [ Failure ]
+crbug.com/591099 external/wpt/css/css-writing-modes-3/float-vlr-009.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/float-vlr-011.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/float-vlr-013.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/float-vrl-002.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/float-vrl-004.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/float-vrl-006.xht [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes-3/float-vrl-008.xht [ Failure ]
+crbug.com/591099 external/wpt/css/css-writing-modes-3/float-vrl-008.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/float-vrl-010.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/float-vrl-012.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/horizontal-rule-vlr-003.xht [ Failure ]
@@ -5597,7 +5647,7 @@
 crbug.com/591099 external/wpt/css/css-writing-modes-3/inline-block-alignment-002.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/inline-block-alignment-004.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/inline-block-alignment-006.xht [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes-3/inline-replaced-vlr-005.xht [ Failure ]
+crbug.com/591099 external/wpt/css/css-writing-modes-3/inline-replaced-vlr-005.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/inline-replaced-vrl-002.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/inline-replaced-vrl-004.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/inline-table-alignment-002.xht [ Failure ]
@@ -5608,14 +5658,14 @@
 crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vlr-010.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vlr-013.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vlr-014.xht [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vlr-018.xht [ Failure ]
+crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vlr-018.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vlr-020.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vrl-002.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vrl-005.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vrl-006.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vrl-011.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vrl-012.xht [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vrl-017.xht [ Failure ]
+crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vrl-017.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vrl-019.xht [ Crash Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/margin-collapse-vlr-011.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/margin-collapse-vrl-010.xht [ Failure ]
@@ -5648,11 +5698,11 @@
 crbug.com/591099 external/wpt/css/css-writing-modes-3/ortho-htb-alongside-vrl-floats-002.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/ortho-htb-alongside-vrl-floats-010.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/outline-inline-block-vrl-006.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes-3/outline-inline-vlr-006.html [ Failure ]
+crbug.com/591099 external/wpt/css/css-writing-modes-3/outline-inline-vlr-006.html [ Failure Pass ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/outline-inline-vrl-006.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/overconstrained-rel-pos-ltr-left-right-vlr-005.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/overconstrained-rel-pos-ltr-left-right-vrl-004.xht [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes-3/padding-vlr-005.xht [ Failure ]
+crbug.com/591099 external/wpt/css/css-writing-modes-3/padding-vlr-005.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/padding-vrl-004.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/percent-margin-vlr-003.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/percent-margin-vlr-007.xht [ Failure ]
@@ -5664,14 +5714,14 @@
 crbug.com/591099 external/wpt/css/css-writing-modes-3/percent-padding-vrl-002.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/percent-padding-vrl-004.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/percent-padding-vrl-006.xht [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes-3/row-progression-vlr-003.xht [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes-3/row-progression-vlr-005.xht [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes-3/row-progression-vlr-007.xht [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes-3/row-progression-vlr-009.xht [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes-3/row-progression-vrl-002.xht [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes-3/row-progression-vrl-004.xht [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes-3/row-progression-vrl-006.xht [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes-3/row-progression-vrl-008.xht [ Failure ]
+crbug.com/591099 external/wpt/css/css-writing-modes-3/row-progression-vlr-003.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/css-writing-modes-3/row-progression-vlr-005.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/css-writing-modes-3/row-progression-vlr-007.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/css-writing-modes-3/row-progression-vlr-009.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/css-writing-modes-3/row-progression-vrl-002.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/css-writing-modes-3/row-progression-vrl-004.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/css-writing-modes-3/row-progression-vrl-006.xht [ Failure Pass ]
+crbug.com/591099 external/wpt/css/css-writing-modes-3/row-progression-vrl-008.xht [ Failure Pass ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/sizing-orthog-htb-in-vlr-003.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/sizing-orthog-htb-in-vlr-007.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/sizing-orthog-htb-in-vlr-009.xht [ Failure ]
@@ -6877,6 +6927,7 @@
 crbug.com/591099 external/wpt/service-workers/service-worker/unregister-controller.https.html [ Crash ]
 crbug.com/591099 external/wpt/service-workers/service-worker/unregister-then-register.https.html [ Crash ]
 crbug.com/591099 external/wpt/service-workers/service-worker/unregister-then-register-new-script.https.html [ Crash ]
+crbug.com/591099 external/wpt/service-workers/service-worker/windowclient-navigate.https.html [ Crash ]
 crbug.com/591099 external/wpt/shadow-dom/leaktests/html-collection.html [ Crash ]
 crbug.com/591099 external/wpt/shadow-dom/leaktests/window-frames.html [ Crash ]
 crbug.com/591099 external/wpt/shadow-dom/MouseEvent-prototype-offsetX-offsetY.html [ Failure ]
@@ -7054,12 +7105,12 @@
 crbug.com/591099 fast/block/align-inverted-direction.html [ Failure ]
 crbug.com/591099 fast/block/available-width-changes-vertical.html [ Failure ]
 crbug.com/591099 fast/block/basic/001.html [ Failure Pass ]
-crbug.com/591099 fast/block/basic/003.html [ Failure ]
+crbug.com/591099 fast/block/basic/003.html [ Failure Pass ]
 crbug.com/591099 fast/block/basic/006.html [ Failure ]
 crbug.com/591099 fast/block/basic/011.html [ Failure ]
 crbug.com/591099 fast/block/basic/013.html [ Failure ]
 crbug.com/591099 fast/block/basic/014.html [ Failure ]
-crbug.com/591099 fast/block/basic/015.html [ Failure ]
+crbug.com/591099 fast/block/basic/015.html [ Failure Pass ]
 crbug.com/591099 fast/block/basic/016.html [ Failure ]
 crbug.com/591099 fast/block/basic/020.html [ Failure ]
 crbug.com/591099 fast/block/basic/adding-near-anonymous-block.html [ Failure ]
@@ -7781,7 +7832,7 @@
 crbug.com/591099 fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-subscript.html [ Crash Failure Pass ]
 crbug.com/591099 fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-under.html [ Failure ]
 crbug.com/591099 fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-under-out-of-flow.html [ Failure ]
-crbug.com/591099 fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-under-vertical.html [ Failure ]
+crbug.com/591099 fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-under-vertical.html [ Failure Pass ]
 crbug.com/591099 fast/css3-text/css3-text-indent/getComputedStyle/getComputedStyle-text-indent.html [ Failure Timeout ]
 crbug.com/591099 fast/css3-text/css3-text-indent/getComputedStyle/getComputedStyle-text-indent-inherited.html [ Failure ]
 crbug.com/591099 fast/css3-text/css3-text-indent/negative-text-indent-leading-out-of-flow.html [ Failure ]
@@ -8150,7 +8201,7 @@
 crbug.com/591099 fast/css/getComputedStyle/computed-style-grid-layout.html [ Failure ]
 crbug.com/591099 fast/css/getComputedStyle/computed-style-listing.html [ Failure Timeout ]
 crbug.com/591099 fast/css/getComputedStyle/computed-style-page-break-inside.html [ Failure ]
-crbug.com/591099 fast/css/getComputedStyle/computed-style-percentage-top-with-position.html [ Failure ]
+crbug.com/591099 fast/css/getComputedStyle/computed-style-percentage-top-with-position.html [ Failure Pass ]
 crbug.com/591099 fast/css/getComputedStyle/computed-style-properties.html [ Failure ]
 crbug.com/591099 fast/css/getComputedStyle/computed-style-recalc.html [ Failure ]
 crbug.com/591099 fast/css/getComputedStyle/computed-style-redistribution.html [ Failure ]
@@ -8327,6 +8378,7 @@
 crbug.com/591099 fast/css-grid-layout/grid-item-spanning-resolution.html [ Failure ]
 crbug.com/591099 fast/css-grid-layout/grid-items-should-not-be-stretched-when-height-or-width-or-margin-change.html [ Failure ]
 crbug.com/591099 fast/css-grid-layout/grid-item-start-before-get-set.html [ Failure ]
+crbug.com/591099 fast/css-grid-layout/grid-item-stretching-must-not-depend-on-previous-layouts.html [ Failure ]
 crbug.com/591099 fast/css-grid-layout/grid-item-stretch-with-margins-borders-padding.html [ Failure ]
 crbug.com/591099 fast/css-grid-layout/grid-item-stretch-with-margins-borders-padding-vertical-lr.html [ Failure ]
 crbug.com/591099 fast/css-grid-layout/grid-item-stretch-with-margins-borders-padding-vertical-rl.html [ Failure ]
@@ -14771,10 +14823,10 @@
 crbug.com/591099 fast/text/international/unicode-bidi-isolate-nested-with-removes-not-adjacent.html [ Crash ]
 crbug.com/591099 fast/text/international/unicode-bidi-plaintext.html [ Failure ]
 crbug.com/591099 fast/text/international/unicode-bidi-plaintext-in-textarea.html [ Crash Failure ]
-crbug.com/591099 fast/text/international/unicode-bidi-plaintext-line-wrap.html [ Failure ]
+crbug.com/591099 fast/text/international/unicode-bidi-plaintext-line-wrap.html [ Failure Pass ]
 crbug.com/591099 fast/text/international/vertical-text-glyph-test.html [ Failure ]
 crbug.com/591099 fast/text/international/vertical-text-metrics-test.html [ Crash Failure ]
-crbug.com/591099 fast/text/international/wrap-CJK-001.html [ Failure ]
+crbug.com/591099 fast/text/international/wrap-CJK-001.html [ Failure Pass ]
 crbug.com/591099 fast/text/ipa-tone-letters.html [ Failure ]
 crbug.com/591099 fast/text/justified-selection-at-edge.html [ Failure ]
 crbug.com/591099 fast/text/justified-selection.html [ Failure ]
@@ -14798,7 +14850,7 @@
 crbug.com/591099 fast/text/line-breaks-after-hyphen-before-number.html [ Failure Pass ]
 crbug.com/591099 fast/text/line-breaks-after-ideographic-comma-or-full-stop-2.html [ Failure ]
 crbug.com/591099 fast/text/line-breaks-after-ideographic-comma-or-full-stop.html [ Failure ]
-crbug.com/591099 fast/text/line-breaks-after-white-space.html [ Failure ]
+crbug.com/591099 fast/text/line-breaks-after-white-space.html [ Failure Pass ]
 crbug.com/591099 fast/text/line-breaks.html [ Failure ]
 crbug.com/591099 fast/text/line-initial-and-final-swashes.html [ Failure ]
 crbug.com/591099 fast/text/long-word.html [ Failure Timeout ]
@@ -14908,16 +14960,16 @@
 crbug.com/591099 fast/text/whitespace/023.html [ Failure ]
 crbug.com/591099 fast/text/whitespace/024.html [ Failure ]
 crbug.com/591099 fast/text/whitespace/025.html [ Failure ]
-crbug.com/591099 fast/text/whitespace/027.html [ Failure ]
+crbug.com/591099 fast/text/whitespace/027.html [ Failure Pass ]
 crbug.com/591099 fast/text/whitespace/028.html [ Failure ]
 crbug.com/591099 fast/text/whitespace/029.html [ Failure ]
-crbug.com/591099 fast/text/whitespace/030.html [ Failure ]
+crbug.com/591099 fast/text/whitespace/030.html [ Failure Pass ]
 crbug.com/591099 fast/text/whitespace/inline-whitespace-wrapping-2.html [ Failure Pass ]
 crbug.com/591099 fast/text/whitespace/inline-whitespace-wrapping-3.html [ Failure Pass ]
 crbug.com/591099 fast/text/whitespace/inline-whitespace-wrapping-4.html [ Failure Pass ]
 crbug.com/591099 fast/text/whitespace/inline-whitespace-wrapping-5.html [ Failure Pass ]
 crbug.com/591099 fast/text/whitespace/justification-expansion-crash.html [ Crash Pass ]
-crbug.com/591099 fast/text/whitespace/nbsp-mode-and-linewraps.html [ Failure ]
+crbug.com/591099 fast/text/whitespace/nbsp-mode-and-linewraps.html [ Failure Pass ]
 crbug.com/591099 fast/text/whitespace/normal-after-nowrap-breaking.html [ Crash Failure ]
 crbug.com/591099 fast/text/whitespace/nowrap-clear-float.html [ Failure ]
 crbug.com/591099 fast/text/whitespace/nowrap-line-break-after-white-space.html [ Failure ]
@@ -16914,7 +16966,7 @@
 crbug.com/591099 http/tests/sendbeacon/beacon-same-origin.html [ Failure ]
 crbug.com/591099 http/tests/serviceworker/chromium.fetch-csp.html [ Crash Pass ]
 crbug.com/591099 http/tests/serviceworker/chromium/frame-detached-by-navigation.html [ Crash ]
-crbug.com/591099 http/tests/serviceworker/chromium/resolve-after-window-close.html [ Failure ]
+crbug.com/591099 http/tests/serviceworker/chromium/resolve-after-window-close.html [ Crash Failure ]
 crbug.com/591099 http/tests/serviceworker/chromium/service-worker-gc.html [ Failure ]
 crbug.com/591099 http/tests/serviceworker/chromium/window-close-during-registration.html [ Failure ]
 crbug.com/591099 http/tests/serviceworker/navigation-preload/chromium/navigation-preload-resource-timing.html [ Failure Pass ]
@@ -18241,7 +18293,7 @@
 crbug.com/591099 inspector/sources/debugger/dynamic-scripts.html [ Failure ]
 crbug.com/591099 inspector/sources/debugger/dynamic-script-tag.html [ Failure ]
 crbug.com/591099 inspector/sources/debugger/extract-javascript-identifiers.html [ Failure ]
-crbug.com/591099 inspector/sources/debugger-frameworks/frameworks-blackbox-by-source-code.html [ Failure ]
+crbug.com/591099 inspector/sources/debugger-frameworks/frameworks-blackbox-by-source-code.html [ Crash Failure ]
 crbug.com/591099 inspector/sources/debugger-frameworks/frameworks-blackbox-patterns.html [ Crash Failure ]
 crbug.com/591099 inspector/sources/debugger-frameworks/frameworks-jquery.html [ Crash Failure ]
 crbug.com/591099 inspector/sources/debugger-frameworks/frameworks-skip-break-program.html [ Crash Failure ]
@@ -23564,6 +23616,7 @@
 crbug.com/591099 virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/unregister-controller.https.html [ Crash ]
 crbug.com/591099 virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/unregister-then-register.https.html [ Crash ]
 crbug.com/591099 virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/unregister-then-register-new-script.https.html [ Crash ]
+crbug.com/591099 virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/windowclient-navigate.https.html [ Crash ]
 crbug.com/591099 virtual/off-main-thread-fetch/http/tests/fetch/chromium/discarded-window.html [ Crash ]
 crbug.com/591099 virtual/off-main-thread-fetch/http/tests/inspector/service-workers/lazy-addeventlisteners.html [ Failure ]
 crbug.com/591099 virtual/off-main-thread-fetch/http/tests/inspector/service-workers/service-worker-agents.html [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-network-service b/third_party/WebKit/LayoutTests/FlagExpectations/enable-network-service
new file mode 100644
index 0000000..592df35
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-network-service
@@ -0,0 +1,5189 @@
+# These tests currently fail when run with --enable-network-service
+# See https://crbug.com/598073
+
+Bug(none) accessibility/table-cell-for-column-and-row-crash.html [ Timeout ]
+Bug(none) battery-status/api-defined.html [ Timeout ]
+Bug(none) battery-status/multiple-promises-after-resolve.html [ Timeout ]
+Bug(none) battery-status/multiple-promises.html [ Timeout ]
+Bug(none) battery-status/multiple-windows-page-visibility.html [ Timeout ]
+Bug(none) battery-status/multiple-windows.html [ Timeout ]
+Bug(none) battery-status/no-gc-with-eventlisteners.html [ Timeout ]
+Bug(none) battery-status/no-leak-on-detached-use.html [ Timeout ]
+Bug(none) battery-status/page-visibility.html [ Timeout ]
+Bug(none) battery-status/promise-with-eventlisteners.html [ Timeout ]
+Bug(none) battery-status/restricted-level-precision.html [ Timeout ]
+Bug(none) bluetooth/characteristic/notifications/gc-with-pending-start.html [ Timeout ]
+Bug(none) bluetooth/characteristic/readValue/gen-gatt-op-garbage-collection-ran-during-error.html [ Timeout ]
+Bug(none) bluetooth/idl/idl-BluetoothDevice.html [ Timeout ]
+Bug(none) bluetooth/requestDevice/acceptAllDevices/device-with-empty-name.html [ Timeout ]
+Bug(none) bluetooth/requestDevice/acceptAllDevices/device-with-name.html [ Timeout ]
+Bug(none) bluetooth/requestDevice/blocklisted-service-in-filter.html [ Timeout ]
+Bug(none) bluetooth/requestDevice/canonicalizeFilter/device-name-longer-than-29-bytes.html [ Timeout ]
+Bug(none) bluetooth/requestDevice/canonicalizeFilter/max-length-name-unicode.html [ Timeout ]
+Bug(none) bluetooth/requestDevice/canonicalizeFilter/max-length-name.html [ Timeout ]
+Bug(none) bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix-unicode.html [ Timeout ]
+Bug(none) bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix.html [ Timeout ]
+Bug(none) bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-name.html [ Timeout ]
+Bug(none) bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-namePrefix.html [ Timeout ]
+Bug(none) bluetooth/requestDevice/consumes-user-gesture.html [ Timeout ]
+Bug(none) bluetooth/requestDevice/le-not-supported.html [ Timeout ]
+Bug(none) bluetooth/requestDevice/name-empty-device-from-name-empty-filter.html [ Timeout ]
+Bug(none) bluetooth/requestDevice/not-processing-user-gesture.html [ Timeout ]
+Bug(none) bluetooth/requestDevice/radio-not-present.html [ Timeout ]
+Bug(none) bluetooth/requestDevice/radio-off.html [ Timeout ]
+Bug(none) bluetooth/requestDevice/request-from-iframe.html [ Timeout ]
+Bug(none) bluetooth/requestDevice/same-device.html [ Timeout ]
+Bug(none) bluetooth/requestDevice/single-filter-single-service.html [ Timeout ]
+Bug(none) compositing/iframes/iframe-in-composited-layer.html [ Failure ]
+Bug(none) compositing/layers-inside-overflow-scroll.html [ Timeout ]
+Bug(none) compositing/self-painting-layers2.html [ Timeout ]
+Bug(none) compositing/video/video-reflection.html [ Timeout ]
+Bug(none) crypto/gc.html [ Timeout ]
+Bug(none) css-parser/color3.html [ Failure ]
+Bug(none) css-parser/color3_hsl.html [ Failure ]
+Bug(none) css-parser/color3_hsla_1.html [ Failure ]
+Bug(none) css-parser/color3_hsla_2.html [ Failure ]
+Bug(none) css-parser/color3_keywords.html [ Failure ]
+Bug(none) css2.1/t040304-c64-uri-00-a-g.html [ Failure ]
+Bug(none) css3/filters/effect-reference-removed-while-pending-resources.html [ Timeout ]
+Bug(none) dom/attr/access-after-element-destruction.html [ Timeout ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/Attribute_Nodes.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/Attribute_Nodes_xmlns.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/Comment_Nodes.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/Conformance_Expressions.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/Conformance_hasFeature_3.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/Conformance_hasFeature_empty.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/Conformance_hasFeature_null.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/Conformance_ID.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/Element_Nodes.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/Processing_Instruction_Nodes.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/Text_Nodes.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathEvaluator_createExpression_INVALID_EXPRESSION_ERR.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathEvaluator_createExpression_NAMESPACE_ERR_01.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathEvaluator_createExpression_NAMESPACE_ERR_02.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathEvaluator_createExpression_no_NS.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathEvaluator_createExpression_NS.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathEvaluator_createNSResolver_all.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathEvaluator_createNSResolver_document.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathEvaluator_createNSResolver_documentElement.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathEvaluator_evaluate_document.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathEvaluator_evaluate_documentElement.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathEvaluator_evaluate_INVALID_EXPRESSION_ERR.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathEvaluator_evaluate_NAMESPACE_ERR.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathEvaluator_evaluate_NOT_SUPPORTED_ERR.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathEvaluator_evaluate_WRONG_DOCUMENT_ERR.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathEvaluatorCast01.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathExpression_evaluate_document.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathExpression_evaluate_documentElement.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathExpression_evaluate_NOT_SUPPORTED_ERR.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathExpression_evaluate_WRONG_DOCUMENT_ERR.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathNSResolver_lookupNamespaceURI_nist_dmstc.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathNSResolver_lookupNamespaceURI_null.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathNSResolver_lookupNamespaceURI_prefix.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathNSResolver_lookupNamespaceURI_xml.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_booleanValue_false.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_booleanValue_true.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_invalidIteratorState_ANY_TYPE.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_invalidIteratorState_ANY_UNORDERED_NODE_TYPE.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_invalidIteratorState_BOOLEAN_TYPE.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_invalidIteratorState_FIRST_ORDERED_NODE_TYPE.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_invalidIteratorState_NUMBER_TYPE.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_invalidIteratorState_ORDERED_NODE_ITERATOR_TYPE.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_invalidIteratorState_ORDERED_NODE_SNAPSHOT_TYPE.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_invalidIteratorState_STRING_TYPE.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_invalidIteratorState_UNORDERED_NODE_ITERATOR_TYPE.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_invalidIteratorState_UNORDERED_NODE_SNAPSHOT_TYPE.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_iterateNext_INVALID_STATE_ERR.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_iteratorNext_ORDERED_NODE_ITERATOR_TYPE.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_numberValue.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_resultType.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_singleNodeValue_ANY_UNORDERED_NODE_TYPE.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_singleNodeValue_FIRST_ORDERED_NODE_TYPE.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_snapshotItem_ORDERED_NODE_SNAPSHOT_TYPE_null.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_snapshotItem_ORDERED_NODE_SNAPSHOT_TYPE_order.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_snapshotItem_UNORDERED_NODE_SNAPSHOT_TYPE_count.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_snapshotItem_UNORDERED_NODE_SNAPSHOT_TYPE_null.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_snapshotLength_ORDERED_NODE_SNAPSHOT_TYPE.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_snapshotLength_UNORDERED_NODE_SNAPSHOT_TYPE.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_stringValue.svg [ Failure ]
+Bug(none) dom/legacy_dom_conformance/svg/level3/xpath/XPathResult_TYPE_ERR.svg [ Failure ]
+Bug(none) editing/input/text-input-controller-leak-document.html [ Timeout ]
+Bug(none) editing/inserting/delete-insignificant-text-crash.html [ Timeout ]
+Bug(none) editing/inserting/insert-html-crash.html [ Timeout ]
+Bug(none) editing/style/apply-style-join-child-text-nodes-crash.html [ Timeout ]
+Bug(none) external/wpt/background-fetch/interfaces-worker.https.html [ Timeout ]
+Bug(none) external/wpt/battery-status/battery-discharging-manual.https.html [ Timeout ]
+Bug(none) external/wpt/battery-status/battery-full-manual.https.html [ Timeout ]
+Bug(none) external/wpt/battery-status/battery-iframe.https.html [ Timeout ]
+Bug(none) external/wpt/battery-status/battery-interface-idlharness.https.html [ Timeout ]
+Bug(none) external/wpt/battery-status/battery-promise-window.https.html [ Timeout ]
+Bug(none) external/wpt/battery-status/battery-promise.https.html [ Timeout ]
+Bug(none) external/wpt/beacon/headers/header-content-type.html [ Timeout ]
+Bug(none) external/wpt/beacon/headers/header-referrer-no-referrer-when-downgrade.https.html [ Timeout ]
+Bug(none) external/wpt/beacon/headers/header-referrer-strict-origin-when-cross-origin.https.html [ Timeout ]
+Bug(none) external/wpt/beacon/headers/header-referrer-strict-origin.https.html [ Timeout ]
+Bug(none) external/wpt/beacon/headers/header-referrer-unsafe-url.https.html [ Timeout ]
+Bug(none) external/wpt/content-security-policy/child-src/child-src-about-blank-allowed-by-default.sub.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/child-src/child-src-about-blank-allowed-by-scheme.sub.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/child-src/child-src-allowed.sub.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/child-src/child-src-blocked.sub.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/child-src/child-src-conflicting-frame-src.sub.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/child-src/child-src-cross-origin-load.sub.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/child-src/child-src-redirect-blocked.sub.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/generic/generic-0_1-img-src.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/generic/generic-0_1-script-src.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/generic/generic-0_10.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/generic/generic-0_10_1.sub.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/generic/generic-0_2.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/generic/generic-0_2_2.sub.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/generic/generic-0_2_3.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/generic/generic-0_8.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/generic/generic-0_8_1.sub.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/generic/generic-0_9.sub.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/generic/no-default-src.sub.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/inside-worker/dedicated-inheritance.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/inside-worker/dedicated-script.html [ Failure Timeout ]
+Bug(none) external/wpt/content-security-policy/media-src/media-src-7_1.html [ Timeout ]
+Bug(none) external/wpt/content-security-policy/media-src/media-src-7_1_2.sub.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/media-src/media-src-7_2.html [ Timeout ]
+Bug(none) external/wpt/content-security-policy/media-src/media-src-7_2_2.sub.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/media-src/media-src-7_3.sub.html [ Timeout ]
+Bug(none) external/wpt/content-security-policy/media-src/media-src-7_3_2.sub.html [ Timeout Failure ]
+Bug(none) external/wpt/content-security-policy/media-src/media-src-blocked.sub.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/media-src/media-src-redir-bug.sub.html [ Timeout ]
+Bug(none) external/wpt/content-security-policy/script-src/script-src-1_1.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/script-src/script-src-1_10_1.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/script-src/script-src-1_2.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/script-src/script-src-1_2_1.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/script-src/script-src-1_3.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/script-src/script-src-1_4.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/script-src/script-src-1_4_1.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/script-src/script-src-1_4_2.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/script-src/script-src-strict_dynamic_worker.https.html [ Timeout ]
+Bug(none) external/wpt/content-security-policy/securitypolicyviolation/img-src-redirect-upgrade-reporting.https.html [ Timeout ]
+Bug(none) external/wpt/content-security-policy/securitypolicyviolation/inside-service-worker.https.html [ Timeout ]
+Bug(none) external/wpt/content-security-policy/securitypolicyviolation/upgrade-insecure-requests-reporting.https.html [ Timeout ]
+Bug(none) external/wpt/content-security-policy/svg/svg-inline.sub.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/worker-src/dedicated-child.sub.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/worker-src/dedicated-fallback.sub.html [ Timeout Failure ]
+Bug(none) external/wpt/content-security-policy/worker-src/dedicated-list.sub.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/worker-src/dedicated-self.sub.html [ Timeout ]
+Bug(none) external/wpt/content-security-policy/worker-src/service-child.https.sub.html [ Timeout ]
+Bug(none) external/wpt/content-security-policy/worker-src/service-fallback.https.sub.html [ Timeout ]
+Bug(none) external/wpt/content-security-policy/worker-src/service-list.https.sub.html [ Timeout ]
+Bug(none) external/wpt/content-security-policy/worker-src/service-none.https.sub.html [ Timeout ]
+Bug(none) external/wpt/content-security-policy/worker-src/service-self.https.sub.html [ Timeout ]
+Bug(none) external/wpt/content-security-policy/worker-src/shared-child.sub.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/worker-src/shared-fallback.sub.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/worker-src/shared-list.sub.html [ Failure ]
+Bug(none) external/wpt/content-security-policy/worker-src/shared-self.sub.html [ Timeout ]
+Bug(none) external/wpt/cookies/secure/set-from-dom.https.sub.html [ Timeout ]
+Bug(none) external/wpt/cookies/secure/set-from-http.https.sub.html [ Timeout ]
+Bug(none) external/wpt/cookies/secure/set-from-ws.https.sub.html [ Timeout ]
+Bug(none) external/wpt/cookies/secure/set-from-wss.https.sub.html [ Timeout ]
+Bug(none) external/wpt/cors/allow-headers.htm [ Failure ]
+Bug(none) external/wpt/cors/basic.htm [ Failure ]
+Bug(none) external/wpt/cors/origin.htm [ Failure ]
+Bug(none) external/wpt/cors/preflight-cache.htm [ Failure ]
+Bug(none) external/wpt/cors/request-headers.htm [ Failure ]
+Bug(none) external/wpt/cors/response-headers.htm [ Failure ]
+Bug(none) external/wpt/cors/simple-requests.htm [ Failure ]
+Bug(none) external/wpt/credential-management/credentialscontainer-create-basics.https.html [ Timeout ]
+Bug(none) external/wpt/credential-management/idl.https.html [ Timeout ]
+Bug(none) external/wpt/css/css-grid-1/alignment/grid-content-distribution-018.html [ Timeout ]
+Bug(none) external/wpt/css/css-shapes-1/shape-outside/shape-box/shape-outside-box-003.html [ Timeout ]
+Bug(none) external/wpt/css/css-shapes-1/shape-outside/values/shape-outside-ellipse-004.html [ Timeout ]
+Bug(none) external/wpt/css/CSS2/floats-clear/floats-015.xht [ Timeout ]
+Bug(none) external/wpt/cssom-view/scrolling-quirks-vs-nonquirks.html [ Timeout ]
+Bug(none) external/wpt/cssom-view/scrollingElement.html [ Failure ]
+Bug(none) external/wpt/custom-elements/custom-element-registry/per-global.html [ Timeout ]
+Bug(none) external/wpt/dom/nodes/Document-characterSet-normalization.html [ Crash ]
+Bug(none) external/wpt/dom/nodes/Document-createElement-namespace.html [ Timeout ]
+Bug(none) external/wpt/dom/nodes/Document-URL.sub.html [ Timeout ]
+Bug(none) external/wpt/dom/nodes/Element-remove.html [ Timeout ]
+Bug(none) external/wpt/domxpath/xml_xpath_runner.html [ Timeout ]
+Bug(none) external/wpt/eventsource/dedicated-worker/eventsource-onopen.htm [ Timeout ]
+Bug(none) external/wpt/fetch/api/basic/mode-no-cors-worker.html [ Failure ]
+Bug(none) external/wpt/fetch/api/basic/mode-no-cors.html [ Failure ]
+Bug(none) external/wpt/fetch/api/basic/scheme-blob-worker.html [ Failure ]
+Bug(none) external/wpt/fetch/api/basic/scheme-blob.html [ Failure ]
+Bug(none) external/wpt/fetch/api/basic/scheme-others-worker.html [ Timeout ]
+Bug(none) external/wpt/fetch/api/policies/referrer-no-referrer-service-worker.https.html [ Timeout ]
+Bug(none) external/wpt/fetch/api/policies/referrer-origin-service-worker.https.html [ Timeout ]
+Bug(none) external/wpt/fetch/api/policies/referrer-origin-when-cross-origin-service-worker.https.html [ Timeout ]
+Bug(none) external/wpt/fetch/api/policies/referrer-origin-when-cross-origin-worker.html [ Failure ]
+Bug(none) external/wpt/fetch/api/policies/referrer-origin-when-cross-origin.html [ Failure ]
+Bug(none) external/wpt/fetch/api/policies/referrer-unsafe-url-service-worker.https.html [ Timeout ]
+Bug(none) external/wpt/fetch/api/redirect/redirect-location-worker.html [ Timeout ]
+Bug(none) external/wpt/fetch/api/request/request-consume-empty.html [ Failure ]
+Bug(none) external/wpt/fetch/api/request/request-consume.html [ Failure ]
+Bug(none) external/wpt/fetch/api/request/request-init-002.html [ Failure ]
+Bug(none) external/wpt/fetch/api/response/response-cancel-stream.html [ Failure ]
+Bug(none) external/wpt/fetch/api/response/response-clone.html [ Failure ]
+Bug(none) external/wpt/fetch/api/response/response-consume-empty.html [ Failure ]
+Bug(none) external/wpt/fetch/api/response/response-consume-stream.html [ Failure ]
+Bug(none) external/wpt/fetch/api/response/response-consume.html [ Failure ]
+Bug(none) external/wpt/fetch/api/response/response-init-002.html [ Failure ]
+Bug(none) external/wpt/fetch/http-cache/vary.html [ Timeout ]
+Bug(none) external/wpt/fetch/nosniff/importscripts.html [ Timeout ]
+Bug(none) external/wpt/FileAPI/blob/Blob-constructor.html [ Failure ]
+Bug(none) external/wpt/FileAPI/blob/Blob-slice.html [ Failure ]
+Bug(none) external/wpt/FileAPI/blob/Blob-XHR-revoke.html [ Failure ]
+Bug(none) external/wpt/FileAPI/file/File-constructor.html [ Timeout ]
+Bug(none) external/wpt/FileAPI/historical.https.html [ Timeout ]
+Bug(none) external/wpt/FileAPI/reading-data-section/Determining-Encoding.html [ Failure ]
+Bug(none) external/wpt/FileAPI/reading-data-section/FileReader-multiple-reads.html [ Timeout ]
+Bug(none) external/wpt/FileAPI/reading-data-section/filereader_abort.html [ Failure ]
+Bug(none) external/wpt/FileAPI/reading-data-section/filereader_readAsArrayBuffer.html [ Timeout ]
+Bug(none) external/wpt/FileAPI/reading-data-section/filereader_readAsDataURL.html [ Timeout ]
+Bug(none) external/wpt/FileAPI/reading-data-section/filereader_readAsText.html [ Timeout ]
+Bug(none) external/wpt/FileAPI/reading-data-section/filereader_result.html [ Failure ]
+Bug(none) external/wpt/FileAPI/url/blob-url-in-sandboxed-iframe.html [ Timeout ]
+Bug(none) external/wpt/FileAPI/url/url_xmlhttprequest.html [ Timeout ]
+Bug(none) external/wpt/fullscreen/api/document-exit-fullscreen-active-document.html [ Timeout ]
+Bug(none) external/wpt/fullscreen/api/document-fullscreen-enabled-active-document.html [ Timeout ]
+Bug(none) external/wpt/fullscreen/api/element-request-fullscreen-active-document.html [ Timeout ]
+Bug(none) external/wpt/geolocation-API/getCurrentPosition_IDL.https.html [ Timeout ]
+Bug(none) external/wpt/geolocation-API/getCurrentPosition_permission_allow.https.html [ Timeout ]
+Bug(none) external/wpt/geolocation-API/getCurrentPosition_permission_deny.https.html [ Timeout ]
+Bug(none) external/wpt/geolocation-API/PositionOptions.https.html [ Timeout ]
+Bug(none) external/wpt/geolocation-API/watchPosition_permission_deny.https.html [ Timeout ]
+Bug(none) external/wpt/hr-time/test_cross_frame_start.html [ Timeout ]
+Bug(none) external/wpt/hr-time/window-worker-time-origin.html [ Timeout ]
+Bug(none) external/wpt/html/browsers/browsing-the-web/navigating-across-documents/012.html [ Failure ]
+Bug(none) external/wpt/html/browsers/browsing-the-web/read-media/pageload-video.html [ Timeout ]
+Bug(none) external/wpt/html/browsers/history/the-location-interface/location-pathname-setter-question-mark.html [ Timeout ]
+Bug(none) external/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken-weird.html [ Timeout ]
+Bug(none) external/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html [ Timeout ]
+Bug(none) external/wpt/html/browsers/history/the-location-interface/location-prototype-setting-cross-origin.sub.html [ Timeout ]
+Bug(none) external/wpt/html/browsers/history/the-location-interface/location-prototype-setting-goes-cross-origin-domain.sub.html [ Timeout ]
+Bug(none) external/wpt/html/browsers/offline/application-cache-api/api_status_idle.html [ Timeout ]
+Bug(none) external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html [ Timeout ]
+Bug(none) external/wpt/html/browsers/the-window-object/Window-document.html [ Timeout ]
+Bug(none) external/wpt/html/browsers/the-windowproxy-exotic-object/windowproxy-prototype-setting-cross-origin.sub.html [ Timeout ]
+Bug(none) external/wpt/html/browsers/the-windowproxy-exotic-object/windowproxy-prototype-setting-goes-cross-origin-domain.sub.html [ Timeout ]
+Bug(none) external/wpt/html/browsers/windows/browsing-context-names/choose-_blank-002.html [ Timeout ]
+Bug(none) external/wpt/html/browsers/windows/browsing-context-names/choose-default-001.html [ Timeout ]
+Bug(none) external/wpt/html/browsers/windows/nested-browsing-contexts/window-parent-null.html [ Timeout ]
+Bug(none) external/wpt/html/browsers/windows/nested-browsing-contexts/window-parent.html [ Timeout ]
+Bug(none) external/wpt/html/browsers/windows/nested-browsing-contexts/window-top-null.html [ Timeout ]
+Bug(none) external/wpt/html/browsers/windows/nested-browsing-contexts/window-top.html [ Timeout ]
+Bug(none) external/wpt/html/browsers/windows/noreferrer-null-opener.html [ Timeout ]
+Bug(none) external/wpt/html/dom/self-origin.sub.html [ Failure ]
+Bug(none) external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-serviceworker-failure.https.html [ Timeout ]
+Bug(none) external/wpt/html/infrastructure/urls/terminology-0/document-base-url.html [ Timeout ]
+Bug(none) external/wpt/html/rendering/non-replaced-elements/the-page/iframe-marginwidth-marginheight.html [ Timeout ]
+Bug(none) external/wpt/html/semantics/embedded-content/media-elements/playing-the-media-resource/playbackRate.html [ Timeout ]
+Bug(none) external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay-with-slow-text-tracks.html [ Timeout ]
+Bug(none) external/wpt/html/semantics/embedded-content/media-elements/video_008.htm [ Timeout ]
+Bug(none) external/wpt/html/semantics/embedded-content/media-elements/volume_nonfinite.html [ Timeout ]
+Bug(none) external/wpt/html/semantics/forms/form-submission-0/getactionurl.html [ Timeout ]
+Bug(none) external/wpt/html/semantics/forms/form-submission-0/submit-entity-body.html [ Timeout ]
+Bug(none) external/wpt/html/semantics/forms/the-legend-element/legend-form.html [ Timeout ]
+Bug(none) external/wpt/html/semantics/scripting-1/the-script-element/async_003.htm [ Timeout ]
+Bug(none) external/wpt/html/semantics/scripting-1/the-script-element/script-crossorigin-network.html [ Failure ]
+Bug(none) external/wpt/html/webappapis/idle-callbacks/callback-suspended.html [ Timeout ]
+Bug(none) external/wpt/html/webappapis/scripting/events/messageevent-constructor.https.html [ Timeout ]
+Bug(none) external/wpt/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/html/webappapis/the-windoworworkerglobalscope-mixin/Worker_Self_Origin.html [ Timeout ]
+Bug(none) external/wpt/IndexedDB/idbcursor-advance-invalid.htm [ Timeout ]
+Bug(none) external/wpt/IndexedDB/idbcursor-advance.htm [ Timeout ]
+Bug(none) external/wpt/IndexedDB/idbcursor_delete_index.htm [ Timeout ]
+Bug(none) external/wpt/IndexedDB/idbcursor_update_objectstore3.htm [ Timeout ]
+Bug(none) external/wpt/IndexedDB/idbindex-rename-errors.html [ Timeout ]
+Bug(none) external/wpt/IndexedDB/idbindex_getAllKeys.html [ Timeout ]
+Bug(none) external/wpt/IndexedDB/idbobjectstore-rename-errors.html [ Timeout ]
+Bug(none) external/wpt/IndexedDB/idbobjectstore_getAll.html [ Timeout ]
+Bug(none) external/wpt/IndexedDB/idbobjectstore_getAllKeys.html [ Timeout ]
+Bug(none) external/wpt/IndexedDB/idbobjectstore_put2.htm [ Timeout ]
+Bug(none) external/wpt/IndexedDB/idbtransaction_objectStoreNames.html [ Timeout ]
+Bug(none) external/wpt/IndexedDB/key_invalid.htm [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-activesourcebuffers.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-append-buffer.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-appendwindow.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-avtracks.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-buffered.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-config-change-webm-a-bitrate.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-config-change-webm-av-audio-bitrate.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-config-change-webm-av-framesize.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-config-change-webm-av-video-bitrate.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-config-change-webm-v-bitrate.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-detach.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-duration-boundaryconditions.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-duration.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-endofstream.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-errors.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-liveseekable.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-play-then-seek-back.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-play.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-remove.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-removesourcebuffer.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-seek-beyond-duration.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-seek-during-pending-seek.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-seekable.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-sequencemode-append-buffer.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-sourcebuffer-mode.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-sourcebuffer-trackdefaults.html [ Timeout ]
+Bug(none) external/wpt/media-source/mediasource-timestamp-offset.html [ Timeout ]
+Bug(none) external/wpt/mediacapture-streams/GUM-api.https.html [ Timeout ]
+Bug(none) external/wpt/mediacapture-streams/GUM-deny.https.html [ Timeout ]
+Bug(none) external/wpt/mediacapture-streams/GUM-empty-option-param.https.html [ Timeout ]
+Bug(none) external/wpt/mediacapture-streams/GUM-impossible-constraint.https.html [ Timeout ]
+Bug(none) external/wpt/mediacapture-streams/GUM-optional-constraint.https.html [ Timeout ]
+Bug(none) external/wpt/mediacapture-streams/GUM-trivial-constraint.https.html [ Timeout ]
+Bug(none) external/wpt/mediacapture-streams/GUM-unknownkey-option-param.https.html [ Timeout ]
+Bug(none) external/wpt/mediacapture-streams/MediaDevices-enumerateDevices.https.html [ Timeout ]
+Bug(none) external/wpt/mediacapture-streams/MediaDevices-getUserMedia.https.html [ Timeout ]
+Bug(none) external/wpt/mediacapture-streams/MediaStream-add-audio-track.https.html [ Timeout ]
+Bug(none) external/wpt/mediacapture-streams/MediaStream-audio-only.https.html [ Timeout ]
+Bug(none) external/wpt/mediacapture-streams/MediaStream-finished-add.https.html [ Timeout ]
+Bug(none) external/wpt/mediacapture-streams/MediaStream-gettrackid.https.html [ Timeout ]
+Bug(none) external/wpt/mediacapture-streams/MediaStream-id-manual.https.html [ Timeout ]
+Bug(none) external/wpt/mediacapture-streams/MediaStream-idl.https.html [ Timeout ]
+Bug(none) external/wpt/mediacapture-streams/MediaStream-MediaElement-preload-none.https.html [ Timeout ]
+Bug(none) external/wpt/mediacapture-streams/MediaStream-MediaElement-srcObject.https.html [ Timeout ]
+Bug(none) external/wpt/mediacapture-streams/MediaStream-removetrack.https.html [ Timeout ]
+Bug(none) external/wpt/mediacapture-streams/MediaStream-video-only.https.html [ Timeout ]
+Bug(none) external/wpt/mediacapture-streams/MediaStreamTrack-id.https.html [ Timeout ]
+Bug(none) external/wpt/mediacapture-streams/MediaStreamTrack-init.https.html [ Timeout ]
+Bug(none) external/wpt/mediacapture-streams/MediaStreamTrack-MediaElement-disabled-video-is-black.https.html [ Timeout ]
+Bug(none) external/wpt/mediacapture-streams/MediaStreamTrackEvent-constructor.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/audio-tag/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/audio-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/fetch-request/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/fetch-request/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/form-tag/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/form-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/iframe-tag/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/iframe-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/img-tag/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/img-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/link-css-tag/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/link-css-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/link-prefetch-tag/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/link-prefetch-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/object-tag/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/object-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/picture-tag/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/picture-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/script-tag/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/script-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/video-tag/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/video-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/worker-request/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/worker-request/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/xhr-request/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-https/xhr-request/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-wss/websocket-request/top-level/keep-scheme-redirect/websocket-allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/http-csp/same-host-wss/websocket-request/top-level/no-redirect/websocket-allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/meta-csp/same-host-https/audio-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/meta-csp/same-host-https/fetch-request/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/meta-csp/same-host-https/form-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/meta-csp/same-host-https/iframe-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/meta-csp/same-host-https/img-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/meta-csp/same-host-https/link-css-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/meta-csp/same-host-https/link-prefetch-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/meta-csp/same-host-https/object-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/meta-csp/same-host-https/picture-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/meta-csp/same-host-https/script-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/meta-csp/same-host-https/video-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/meta-csp/same-host-https/worker-request/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/meta-csp/same-host-https/xhr-request/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/meta-csp/same-host-wss/websocket-request/top-level/no-redirect/websocket-allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/audio-tag/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/audio-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/fetch-request/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/fetch-request/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/form-tag/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/form-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/iframe-tag/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/iframe-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/img-tag/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/img-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/link-css-tag/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/link-css-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/link-prefetch-tag/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/link-prefetch-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/object-tag/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/object-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/picture-tag/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/picture-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/script-tag/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/script-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/video-tag/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/video-tag/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/worker-request/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/worker-request/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/xhr-request/top-level/keep-scheme-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-https/xhr-request/top-level/no-redirect/allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-wss/websocket-request/top-level/keep-scheme-redirect/websocket-allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/allowed/no-opt-in/same-host-wss/websocket-request/top-level/no-redirect/websocket-allowed.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/cross-origin-http/fetch-request/top-level/keep-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/cross-origin-http/fetch-request/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/cross-origin-http/fetch-request/top-level/swap-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/cross-origin-http/link-css-tag/top-level/keep-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/cross-origin-http/link-css-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/cross-origin-http/link-css-tag/top-level/swap-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/cross-origin-http/object-tag/top-level/keep-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/cross-origin-http/object-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/cross-origin-http/object-tag/top-level/swap-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/cross-origin-http/picture-tag/top-level/keep-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/cross-origin-http/picture-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/cross-origin-http/picture-tag/top-level/swap-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/cross-origin-http/script-tag/top-level/keep-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/cross-origin-http/script-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/cross-origin-http/script-tag/top-level/swap-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/cross-origin-http/worker-request/top-level/keep-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/cross-origin-http/worker-request/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/cross-origin-http/worker-request/top-level/swap-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/cross-origin-http/xhr-request/top-level/keep-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/cross-origin-http/xhr-request/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/cross-origin-http/xhr-request/top-level/swap-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/cross-origin-ws/websocket-request/top-level/keep-scheme-redirect/ws-downgrade-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/cross-origin-ws/websocket-request/top-level/no-redirect/ws-downgrade-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/cross-origin-ws/websocket-request/top-level/swap-scheme-redirect/ws-downgrade-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/same-host-http/fetch-request/top-level/keep-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/same-host-http/fetch-request/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/same-host-http/fetch-request/top-level/swap-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/same-host-http/link-css-tag/top-level/keep-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/same-host-http/link-css-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/same-host-http/link-css-tag/top-level/swap-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/same-host-http/object-tag/top-level/keep-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/same-host-http/object-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/same-host-http/object-tag/top-level/swap-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/same-host-http/picture-tag/top-level/keep-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/same-host-http/picture-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/same-host-http/picture-tag/top-level/swap-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/same-host-http/script-tag/top-level/keep-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/same-host-http/script-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/same-host-http/script-tag/top-level/swap-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/same-host-http/worker-request/top-level/keep-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/same-host-http/worker-request/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/same-host-http/worker-request/top-level/swap-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/same-host-http/xhr-request/top-level/keep-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/same-host-http/xhr-request/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/same-host-http/xhr-request/top-level/swap-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/same-host-ws/websocket-request/top-level/keep-scheme-redirect/ws-downgrade-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/same-host-ws/websocket-request/top-level/no-redirect/ws-downgrade-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/http-csp/same-host-ws/websocket-request/top-level/swap-scheme-redirect/ws-downgrade-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/meta-csp/cross-origin-http/fetch-request/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/meta-csp/cross-origin-http/link-css-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/meta-csp/cross-origin-http/object-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/meta-csp/cross-origin-http/picture-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/meta-csp/cross-origin-http/script-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/meta-csp/cross-origin-http/worker-request/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/meta-csp/cross-origin-http/xhr-request/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/meta-csp/cross-origin-ws/websocket-request/top-level/no-redirect/ws-downgrade-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/meta-csp/same-host-http/fetch-request/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/meta-csp/same-host-http/link-css-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/meta-csp/same-host-http/object-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/meta-csp/same-host-http/picture-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/meta-csp/same-host-http/script-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/meta-csp/same-host-http/worker-request/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/meta-csp/same-host-http/xhr-request/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/meta-csp/same-host-ws/websocket-request/top-level/no-redirect/ws-downgrade-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/cross-origin-http/fetch-request/top-level/keep-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/cross-origin-http/fetch-request/top-level/no-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/cross-origin-http/fetch-request/top-level/swap-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/cross-origin-http/link-css-tag/top-level/keep-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/cross-origin-http/link-css-tag/top-level/no-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/cross-origin-http/link-css-tag/top-level/swap-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/cross-origin-http/object-tag/top-level/keep-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/cross-origin-http/object-tag/top-level/no-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/cross-origin-http/object-tag/top-level/swap-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/cross-origin-http/picture-tag/top-level/keep-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/cross-origin-http/picture-tag/top-level/no-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/cross-origin-http/picture-tag/top-level/swap-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/cross-origin-http/script-tag/top-level/keep-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/cross-origin-http/script-tag/top-level/no-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/cross-origin-http/script-tag/top-level/swap-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/cross-origin-http/worker-request/top-level/keep-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/cross-origin-http/worker-request/top-level/no-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/cross-origin-http/worker-request/top-level/swap-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/cross-origin-http/xhr-request/top-level/keep-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/cross-origin-http/xhr-request/top-level/no-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/cross-origin-http/xhr-request/top-level/swap-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/cross-origin-ws/websocket-request/top-level/keep-scheme-redirect/ws-downgrade-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/cross-origin-ws/websocket-request/top-level/no-redirect/ws-downgrade-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/cross-origin-ws/websocket-request/top-level/swap-scheme-redirect/ws-downgrade-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/same-host-http/fetch-request/top-level/keep-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/same-host-http/fetch-request/top-level/no-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/same-host-http/fetch-request/top-level/swap-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/same-host-http/link-css-tag/top-level/keep-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/same-host-http/link-css-tag/top-level/no-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/same-host-http/link-css-tag/top-level/swap-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/same-host-http/object-tag/top-level/keep-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/same-host-http/object-tag/top-level/no-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/same-host-http/object-tag/top-level/swap-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/same-host-http/picture-tag/top-level/keep-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/same-host-http/picture-tag/top-level/no-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/same-host-http/picture-tag/top-level/swap-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/same-host-http/script-tag/top-level/keep-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/same-host-http/script-tag/top-level/no-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/same-host-http/script-tag/top-level/swap-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/same-host-http/worker-request/top-level/keep-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/same-host-http/worker-request/top-level/no-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/same-host-http/worker-request/top-level/swap-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/same-host-http/xhr-request/top-level/keep-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/same-host-http/xhr-request/top-level/no-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/same-host-http/xhr-request/top-level/swap-scheme-redirect/no-opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/same-host-ws/websocket-request/top-level/keep-scheme-redirect/ws-downgrade-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/same-host-ws/websocket-request/top-level/no-redirect/ws-downgrade-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/blockable/no-opt-in/same-host-ws/websocket-request/top-level/swap-scheme-redirect/ws-downgrade-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/imageset.https.sub.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/http-csp/cross-origin-http/audio-tag/top-level/keep-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/http-csp/cross-origin-http/audio-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/http-csp/cross-origin-http/audio-tag/top-level/swap-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/http-csp/cross-origin-http/img-tag/top-level/keep-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/http-csp/cross-origin-http/img-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/http-csp/cross-origin-http/img-tag/top-level/swap-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/http-csp/cross-origin-http/link-prefetch-tag/top-level/keep-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/http-csp/cross-origin-http/link-prefetch-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/http-csp/cross-origin-http/link-prefetch-tag/top-level/swap-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/http-csp/cross-origin-http/video-tag/top-level/keep-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/http-csp/cross-origin-http/video-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/http-csp/cross-origin-http/video-tag/top-level/swap-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/http-csp/same-host-http/audio-tag/top-level/keep-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/http-csp/same-host-http/audio-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/http-csp/same-host-http/audio-tag/top-level/swap-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/http-csp/same-host-http/img-tag/top-level/keep-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/http-csp/same-host-http/img-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/http-csp/same-host-http/img-tag/top-level/swap-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/http-csp/same-host-http/link-prefetch-tag/top-level/keep-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/http-csp/same-host-http/link-prefetch-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/http-csp/same-host-http/link-prefetch-tag/top-level/swap-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/http-csp/same-host-http/video-tag/top-level/keep-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/http-csp/same-host-http/video-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/http-csp/same-host-http/video-tag/top-level/swap-scheme-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/meta-csp/cross-origin-http/audio-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/meta-csp/cross-origin-http/img-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/meta-csp/cross-origin-http/link-prefetch-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/meta-csp/cross-origin-http/video-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/meta-csp/same-host-http/audio-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/meta-csp/same-host-http/img-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/meta-csp/same-host-http/link-prefetch-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/meta-csp/same-host-http/video-tag/top-level/no-redirect/opt-in-blocks.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/no-opt-in/cross-origin-http/audio-tag/top-level/keep-scheme-redirect/no-opt-in-allows.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/no-opt-in/cross-origin-http/audio-tag/top-level/no-redirect/no-opt-in-allows.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/no-opt-in/cross-origin-http/audio-tag/top-level/swap-scheme-redirect/no-opt-in-allows.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/no-opt-in/cross-origin-http/img-tag/top-level/keep-scheme-redirect/no-opt-in-allows.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/no-opt-in/cross-origin-http/img-tag/top-level/no-redirect/no-opt-in-allows.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/no-opt-in/cross-origin-http/img-tag/top-level/swap-scheme-redirect/no-opt-in-allows.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/no-opt-in/cross-origin-http/link-prefetch-tag/top-level/keep-scheme-redirect/no-opt-in-allows.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/no-opt-in/cross-origin-http/link-prefetch-tag/top-level/no-redirect/no-opt-in-allows.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/no-opt-in/cross-origin-http/link-prefetch-tag/top-level/swap-scheme-redirect/no-opt-in-allows.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/no-opt-in/cross-origin-http/video-tag/top-level/keep-scheme-redirect/no-opt-in-allows.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/no-opt-in/cross-origin-http/video-tag/top-level/no-redirect/no-opt-in-allows.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/no-opt-in/cross-origin-http/video-tag/top-level/swap-scheme-redirect/no-opt-in-allows.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/no-opt-in/same-host-http/audio-tag/top-level/keep-scheme-redirect/no-opt-in-allows.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/no-opt-in/same-host-http/audio-tag/top-level/no-redirect/no-opt-in-allows.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/no-opt-in/same-host-http/audio-tag/top-level/swap-scheme-redirect/no-opt-in-allows.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/no-opt-in/same-host-http/img-tag/top-level/keep-scheme-redirect/no-opt-in-allows.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/no-opt-in/same-host-http/img-tag/top-level/no-redirect/no-opt-in-allows.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/no-opt-in/same-host-http/img-tag/top-level/swap-scheme-redirect/no-opt-in-allows.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/no-opt-in/same-host-http/link-prefetch-tag/top-level/keep-scheme-redirect/no-opt-in-allows.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/no-opt-in/same-host-http/link-prefetch-tag/top-level/no-redirect/no-opt-in-allows.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/no-opt-in/same-host-http/link-prefetch-tag/top-level/swap-scheme-redirect/no-opt-in-allows.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/no-opt-in/same-host-http/video-tag/top-level/keep-scheme-redirect/no-opt-in-allows.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/no-opt-in/same-host-http/video-tag/top-level/no-redirect/no-opt-in-allows.https.html [ Timeout ]
+Bug(none) external/wpt/mixed-content/optionally-blockable/no-opt-in/same-host-http/video-tag/top-level/swap-scheme-redirect/no-opt-in-allows.https.html [ Timeout ]
+Bug(none) external/wpt/navigation-timing/nav2_test_attributes_values.html [ Failure ]
+Bug(none) external/wpt/navigation-timing/nav2_test_unloadEvents_previous_document_cross_origin.sub.html [ Timeout ]
+Bug(none) external/wpt/notifications/shownotification-resolve-manual.https.html [ Timeout ]
+Bug(none) external/wpt/orientation-sensor/idlharness.https.html [ Timeout ]
+Bug(none) external/wpt/payment-request/allowpaymentrequest/active-document-cross-origin.https.sub.html [ Timeout ]
+Bug(none) external/wpt/payment-request/allowpaymentrequest/active-document-same-origin.https.html [ Timeout ]
+Bug(none) external/wpt/payment-request/allowpaymentrequest/allowpaymentrequest-attribute-cross-origin-bc-containers.https.html [ Timeout ]
+Bug(none) external/wpt/payment-request/allowpaymentrequest/allowpaymentrequest-attribute-same-origin-bc-containers.https.html [ Timeout ]
+Bug(none) external/wpt/payment-request/allowpaymentrequest/basic.https.html [ Timeout ]
+Bug(none) external/wpt/payment-request/allowpaymentrequest/no-attribute-cross-origin-bc-containers.https.html [ Timeout ]
+Bug(none) external/wpt/payment-request/allowpaymentrequest/no-attribute-same-origin-bc-containers.https.html [ Timeout ]
+Bug(none) external/wpt/payment-request/allowpaymentrequest/removing-allowpaymentrequest.https.sub.html [ Timeout ]
+Bug(none) external/wpt/payment-request/allowpaymentrequest/setting-allowpaymentrequest-timing.https.sub.html [ Timeout ]
+Bug(none) external/wpt/payment-request/allowpaymentrequest/setting-allowpaymentrequest.https.sub.html [ Timeout ]
+Bug(none) external/wpt/payment-request/historical.https.html [ Timeout ]
+Bug(none) external/wpt/payment-request/interfaces.https.html [ Timeout ]
+Bug(none) external/wpt/payment-request/payment-request-constructor.https.html [ Timeout ]
+Bug(none) external/wpt/payment-request/payment-request-id.https.html [ Timeout ]
+Bug(none) external/wpt/payment-request/payment-request-show-method.https.html [ Timeout ]
+Bug(none) external/wpt/pointerevents/pointerevent_touch-action-table-test_touch-manual.html [ Timeout ]
+Bug(none) external/wpt/preload/delaying-onload-link-preload-after-discovery.html [ Timeout ]
+Bug(none) external/wpt/preload/download-resources.html [ Timeout ]
+Bug(none) external/wpt/preload/fetch-destination.https.html [ Timeout ]
+Bug(none) external/wpt/preload/link-header-preload.html [ Timeout ]
+Bug(none) external/wpt/preload/onerror-event.html [ Timeout ]
+Bug(none) external/wpt/preload/onload-event.html [ Timeout ]
+Bug(none) external/wpt/preload/preload-csp.sub.html [ Timeout ]
+Bug(none) external/wpt/preload/preload-default-csp.sub.html [ Timeout ]
+Bug(none) external/wpt/preload/preload-with-type.html [ Timeout ]
+Bug(none) external/wpt/preload/single-download-preload.html [ Timeout ]
+Bug(none) external/wpt/presentation-api/controlling-ua/defaultRequest.https.html [ Timeout ]
+Bug(none) external/wpt/presentation-api/controlling-ua/getAvailability_sandboxing_success.https.html [ Timeout ]
+Bug(none) external/wpt/presentation-api/controlling-ua/idlharness.https.html [ Timeout ]
+Bug(none) external/wpt/presentation-api/controlling-ua/PresentationRequest_error.https.html [ Timeout ]
+Bug(none) external/wpt/presentation-api/controlling-ua/PresentationRequest_mixedcontent.https.html [ Timeout ]
+Bug(none) external/wpt/presentation-api/controlling-ua/PresentationRequest_mixedcontent_multiple.https.html [ Timeout ]
+Bug(none) external/wpt/presentation-api/controlling-ua/PresentationRequest_sandboxing_error.https.html [ Timeout ]
+Bug(none) external/wpt/presentation-api/controlling-ua/PresentationRequest_sandboxing_success.https.html [ Timeout ]
+Bug(none) external/wpt/presentation-api/controlling-ua/PresentationRequest_success.https.html [ Timeout ]
+Bug(none) external/wpt/presentation-api/controlling-ua/reconnectToPresentation_notfound_error.https.html [ Timeout ]
+Bug(none) external/wpt/presentation-api/controlling-ua/reconnectToPresentation_sandboxing_success.https.html [ Timeout ]
+Bug(none) external/wpt/presentation-api/controlling-ua/startNewPresentation_error.https.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/attr-referrer/cross-origin/http-https/iframe-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/attr-referrer/cross-origin/http-https/iframe-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/attr-referrer/cross-origin/http-https/iframe-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/attr-referrer/cross-origin/http-https/img-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/attr-referrer/cross-origin/http-https/img-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/attr-referrer/cross-origin/http-https/img-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/attr-referrer/same-origin/http-https/iframe-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/attr-referrer/same-origin/http-https/iframe-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/attr-referrer/same-origin/http-https/iframe-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/attr-referrer/same-origin/http-https/img-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/attr-referrer/same-origin/http-https/img-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/attr-referrer/same-origin/http-https/img-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/cross-origin/http-https/fetch-request/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/cross-origin/http-https/fetch-request/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/cross-origin/http-https/fetch-request/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/cross-origin/http-https/iframe-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/cross-origin/http-https/iframe-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/cross-origin/http-https/iframe-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/cross-origin/http-https/img-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/cross-origin/http-https/img-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/cross-origin/http-https/img-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/cross-origin/http-https/script-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/cross-origin/http-https/script-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/cross-origin/http-https/script-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/cross-origin/http-https/xhr-request/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/cross-origin/http-https/xhr-request/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/cross-origin/http-https/xhr-request/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-https/fetch-request/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-https/fetch-request/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-https/fetch-request/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-https/iframe-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-https/iframe-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-https/iframe-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-https/img-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-https/img-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-https/img-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-https/script-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-https/script-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-https/script-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-https/xhr-request/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-https/xhr-request/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-https/xhr-request/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/cross-origin/http-https/fetch-request/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/cross-origin/http-https/fetch-request/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/cross-origin/http-https/fetch-request/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/cross-origin/http-https/iframe-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/cross-origin/http-https/iframe-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/cross-origin/http-https/iframe-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/cross-origin/http-https/img-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/cross-origin/http-https/img-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/cross-origin/http-https/img-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/cross-origin/http-https/script-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/cross-origin/http-https/script-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/cross-origin/http-https/script-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/cross-origin/http-https/xhr-request/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/cross-origin/http-https/xhr-request/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/cross-origin/http-https/xhr-request/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-https/fetch-request/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-https/fetch-request/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-https/fetch-request/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-https/iframe-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-https/iframe-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-https/iframe-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-https/img-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-https/img-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-https/img-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-https/script-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-https/script-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-https/script-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-https/xhr-request/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-https/xhr-request/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-https/xhr-request/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/attr-referrer/cross-origin/http-https/iframe-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/attr-referrer/cross-origin/http-https/iframe-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/attr-referrer/cross-origin/http-https/iframe-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/attr-referrer/cross-origin/http-https/img-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/attr-referrer/cross-origin/http-https/img-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/attr-referrer/cross-origin/http-https/img-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/attr-referrer/same-origin/http-https/iframe-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/attr-referrer/same-origin/http-https/iframe-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/attr-referrer/same-origin/http-https/iframe-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/attr-referrer/same-origin/http-https/img-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/attr-referrer/same-origin/http-https/img-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/attr-referrer/same-origin/http-https/img-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/cross-origin/http-https/fetch-request/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/cross-origin/http-https/fetch-request/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/cross-origin/http-https/fetch-request/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/cross-origin/http-https/iframe-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/cross-origin/http-https/iframe-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/cross-origin/http-https/iframe-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/cross-origin/http-https/img-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/cross-origin/http-https/img-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/cross-origin/http-https/img-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/cross-origin/http-https/script-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/cross-origin/http-https/script-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/cross-origin/http-https/script-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/cross-origin/http-https/xhr-request/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/cross-origin/http-https/xhr-request/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/cross-origin/http-https/xhr-request/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/same-origin/http-https/fetch-request/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/same-origin/http-https/fetch-request/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/same-origin/http-https/fetch-request/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/same-origin/http-https/iframe-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/same-origin/http-https/iframe-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/same-origin/http-https/iframe-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/same-origin/http-https/img-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/same-origin/http-https/img-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/same-origin/http-https/img-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/same-origin/http-https/script-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/same-origin/http-https/script-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/same-origin/http-https/script-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/same-origin/http-https/xhr-request/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/same-origin/http-https/xhr-request/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/http-rp/same-origin/http-https/xhr-request/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/cross-origin/http-https/fetch-request/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/cross-origin/http-https/fetch-request/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/cross-origin/http-https/fetch-request/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/cross-origin/http-https/iframe-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/cross-origin/http-https/iframe-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/cross-origin/http-https/iframe-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/cross-origin/http-https/img-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/cross-origin/http-https/img-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/cross-origin/http-https/img-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/cross-origin/http-https/script-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/cross-origin/http-https/script-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/cross-origin/http-https/script-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/cross-origin/http-https/xhr-request/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/cross-origin/http-https/xhr-request/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/cross-origin/http-https/xhr-request/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/same-origin/http-http/iframe-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/same-origin/http-https/fetch-request/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/same-origin/http-https/fetch-request/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/same-origin/http-https/fetch-request/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/same-origin/http-https/iframe-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/same-origin/http-https/iframe-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/same-origin/http-https/iframe-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/same-origin/http-https/img-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/same-origin/http-https/img-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/same-origin/http-https/img-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/same-origin/http-https/script-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/same-origin/http-https/script-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/same-origin/http-https/script-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/same-origin/http-https/xhr-request/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/same-origin/http-https/xhr-request/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/no-referrer/meta-referrer/same-origin/http-https/xhr-request/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/attr-referrer/cross-origin/http-https/iframe-tag/cross-origin.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/attr-referrer/cross-origin/http-https/iframe-tag/cross-origin.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/attr-referrer/cross-origin/http-https/iframe-tag/cross-origin.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/attr-referrer/cross-origin/http-https/img-tag/cross-origin.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/attr-referrer/cross-origin/http-https/img-tag/cross-origin.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/attr-referrer/cross-origin/http-https/img-tag/cross-origin.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/attr-referrer/same-origin/http-https/iframe-tag/same-origin-downgrade.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/attr-referrer/same-origin/http-https/iframe-tag/same-origin-downgrade.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/attr-referrer/same-origin/http-https/iframe-tag/same-origin-downgrade.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/attr-referrer/same-origin/http-https/iframe-tag/same-origin-insecure.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/attr-referrer/same-origin/http-https/iframe-tag/same-origin-upgrade.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/attr-referrer/same-origin/http-https/iframe-tag/same-origin-upgrade.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/attr-referrer/same-origin/http-https/iframe-tag/same-origin-upgrade.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/attr-referrer/same-origin/http-https/img-tag/same-origin-downgrade.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/attr-referrer/same-origin/http-https/img-tag/same-origin-downgrade.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/attr-referrer/same-origin/http-https/img-tag/same-origin-downgrade.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/attr-referrer/same-origin/http-https/img-tag/same-origin-insecure.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/attr-referrer/same-origin/http-https/img-tag/same-origin-upgrade.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/attr-referrer/same-origin/http-https/img-tag/same-origin-upgrade.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/attr-referrer/same-origin/http-https/img-tag/same-origin-upgrade.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/cross-origin/http-https/fetch-request/cross-origin.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/cross-origin/http-https/fetch-request/cross-origin.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/cross-origin/http-https/fetch-request/cross-origin.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/cross-origin/http-https/iframe-tag/cross-origin.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/cross-origin/http-https/iframe-tag/cross-origin.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/cross-origin/http-https/iframe-tag/cross-origin.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/cross-origin/http-https/img-tag/cross-origin.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/cross-origin/http-https/img-tag/cross-origin.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/cross-origin/http-https/img-tag/cross-origin.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/cross-origin/http-https/script-tag/cross-origin.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/cross-origin/http-https/script-tag/cross-origin.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/cross-origin/http-https/script-tag/cross-origin.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/cross-origin/http-https/xhr-request/cross-origin.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/cross-origin/http-https/xhr-request/cross-origin.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/cross-origin/http-https/xhr-request/cross-origin.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-http/iframe-tag/same-origin-insecure.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-http/img-tag/same-origin-insecure.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-http/script-tag/same-origin-insecure.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/fetch-request/same-origin-downgrade.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/fetch-request/same-origin-downgrade.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/fetch-request/same-origin-downgrade.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/fetch-request/same-origin-insecure.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/fetch-request/same-origin-upgrade.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/fetch-request/same-origin-upgrade.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/fetch-request/same-origin-upgrade.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/iframe-tag/same-origin-downgrade.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/iframe-tag/same-origin-downgrade.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/iframe-tag/same-origin-downgrade.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/iframe-tag/same-origin-insecure.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/iframe-tag/same-origin-upgrade.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/iframe-tag/same-origin-upgrade.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/iframe-tag/same-origin-upgrade.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/img-tag/same-origin-downgrade.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/img-tag/same-origin-downgrade.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/img-tag/same-origin-downgrade.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/img-tag/same-origin-insecure.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/img-tag/same-origin-upgrade.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/img-tag/same-origin-upgrade.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/img-tag/same-origin-upgrade.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/script-tag/same-origin-downgrade.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/script-tag/same-origin-downgrade.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/script-tag/same-origin-downgrade.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/script-tag/same-origin-insecure.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/script-tag/same-origin-upgrade.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/script-tag/same-origin-upgrade.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/script-tag/same-origin-upgrade.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/xhr-request/same-origin-downgrade.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/xhr-request/same-origin-downgrade.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/xhr-request/same-origin-downgrade.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/xhr-request/same-origin-insecure.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/xhr-request/same-origin-upgrade.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/xhr-request/same-origin-upgrade.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-https/xhr-request/same-origin-upgrade.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/cross-origin/http-https/fetch-request/cross-origin.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/cross-origin/http-https/fetch-request/cross-origin.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/cross-origin/http-https/fetch-request/cross-origin.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/cross-origin/http-https/iframe-tag/cross-origin.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/cross-origin/http-https/iframe-tag/cross-origin.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/cross-origin/http-https/iframe-tag/cross-origin.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/cross-origin/http-https/img-tag/cross-origin.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/cross-origin/http-https/img-tag/cross-origin.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/cross-origin/http-https/img-tag/cross-origin.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/cross-origin/http-https/script-tag/cross-origin.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/cross-origin/http-https/script-tag/cross-origin.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/cross-origin/http-https/script-tag/cross-origin.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/cross-origin/http-https/xhr-request/cross-origin.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/cross-origin/http-https/xhr-request/cross-origin.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/cross-origin/http-https/xhr-request/cross-origin.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/fetch-request/same-origin-downgrade.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/fetch-request/same-origin-downgrade.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/fetch-request/same-origin-downgrade.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/fetch-request/same-origin-insecure.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/fetch-request/same-origin-upgrade.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/fetch-request/same-origin-upgrade.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/fetch-request/same-origin-upgrade.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/iframe-tag/same-origin-downgrade.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/iframe-tag/same-origin-downgrade.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/iframe-tag/same-origin-downgrade.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/iframe-tag/same-origin-insecure.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/iframe-tag/same-origin-upgrade.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/iframe-tag/same-origin-upgrade.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/iframe-tag/same-origin-upgrade.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/img-tag/same-origin-downgrade.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/img-tag/same-origin-downgrade.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/img-tag/same-origin-downgrade.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/img-tag/same-origin-insecure.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/img-tag/same-origin-upgrade.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/img-tag/same-origin-upgrade.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/img-tag/same-origin-upgrade.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/script-tag/same-origin-downgrade.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/script-tag/same-origin-downgrade.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/script-tag/same-origin-downgrade.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/script-tag/same-origin-insecure.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/script-tag/same-origin-upgrade.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/script-tag/same-origin-upgrade.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/script-tag/same-origin-upgrade.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/xhr-request/same-origin-downgrade.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/xhr-request/same-origin-downgrade.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/xhr-request/same-origin-downgrade.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/xhr-request/same-origin-insecure.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/xhr-request/same-origin-upgrade.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/xhr-request/same-origin-upgrade.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-https/xhr-request/same-origin-upgrade.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/attr-referrer/cross-origin/http-https/iframe-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/attr-referrer/cross-origin/http-https/iframe-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/attr-referrer/cross-origin/http-https/iframe-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/attr-referrer/cross-origin/http-https/img-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/attr-referrer/cross-origin/http-https/img-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/attr-referrer/cross-origin/http-https/img-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/attr-referrer/same-origin/http-https/iframe-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/attr-referrer/same-origin/http-https/iframe-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/attr-referrer/same-origin/http-https/iframe-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/attr-referrer/same-origin/http-https/img-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/attr-referrer/same-origin/http-https/img-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/attr-referrer/same-origin/http-https/img-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/cross-origin/http-http/fetch-request/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/cross-origin/http-https/fetch-request/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/cross-origin/http-https/fetch-request/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/cross-origin/http-https/fetch-request/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/cross-origin/http-https/iframe-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/cross-origin/http-https/iframe-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/cross-origin/http-https/iframe-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/cross-origin/http-https/img-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/cross-origin/http-https/img-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/cross-origin/http-https/img-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/cross-origin/http-https/script-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/cross-origin/http-https/script-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/cross-origin/http-https/script-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/cross-origin/http-https/xhr-request/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/cross-origin/http-https/xhr-request/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/cross-origin/http-https/xhr-request/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/same-origin/http-https/fetch-request/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/same-origin/http-https/fetch-request/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/same-origin/http-https/fetch-request/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/same-origin/http-https/iframe-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/same-origin/http-https/iframe-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/same-origin/http-https/iframe-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/same-origin/http-https/img-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/same-origin/http-https/img-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/same-origin/http-https/img-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/same-origin/http-https/script-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/same-origin/http-https/script-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/same-origin/http-https/script-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/same-origin/http-https/xhr-request/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/same-origin/http-https/xhr-request/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/http-rp/same-origin/http-https/xhr-request/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/cross-origin/http-http/img-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/cross-origin/http-https/fetch-request/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/cross-origin/http-https/fetch-request/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/cross-origin/http-https/fetch-request/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/cross-origin/http-https/iframe-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/cross-origin/http-https/iframe-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/cross-origin/http-https/iframe-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/cross-origin/http-https/img-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/cross-origin/http-https/img-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/cross-origin/http-https/img-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/cross-origin/http-https/script-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/cross-origin/http-https/script-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/cross-origin/http-https/script-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/cross-origin/http-https/xhr-request/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/cross-origin/http-https/xhr-request/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/cross-origin/http-https/xhr-request/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/same-origin/http-https/fetch-request/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/same-origin/http-https/fetch-request/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/same-origin/http-https/fetch-request/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/same-origin/http-https/iframe-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/same-origin/http-https/iframe-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/same-origin/http-https/iframe-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/same-origin/http-https/img-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/same-origin/http-https/img-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/same-origin/http-https/img-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/same-origin/http-https/script-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/same-origin/http-https/script-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/same-origin/http-https/script-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/same-origin/http-https/xhr-request/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/same-origin/http-https/xhr-request/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/origin/meta-referrer/same-origin/http-https/xhr-request/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/attr-referrer/cross-origin/http-https/iframe-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/attr-referrer/cross-origin/http-https/iframe-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/attr-referrer/cross-origin/http-https/iframe-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/attr-referrer/cross-origin/http-https/img-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/attr-referrer/cross-origin/http-https/img-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/attr-referrer/cross-origin/http-https/img-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/attr-referrer/same-origin/http-https/iframe-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/attr-referrer/same-origin/http-https/iframe-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/attr-referrer/same-origin/http-https/iframe-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/attr-referrer/same-origin/http-https/img-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/attr-referrer/same-origin/http-https/img-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/attr-referrer/same-origin/http-https/img-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/cross-origin/http-https/fetch-request/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/cross-origin/http-https/fetch-request/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/cross-origin/http-https/fetch-request/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/cross-origin/http-https/iframe-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/cross-origin/http-https/iframe-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/cross-origin/http-https/iframe-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/cross-origin/http-https/img-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/cross-origin/http-https/img-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/cross-origin/http-https/img-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/cross-origin/http-https/script-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/cross-origin/http-https/script-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/cross-origin/http-https/script-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/cross-origin/http-https/xhr-request/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/cross-origin/http-https/xhr-request/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/cross-origin/http-https/xhr-request/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/same-origin/http-https/fetch-request/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/same-origin/http-https/fetch-request/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/same-origin/http-https/fetch-request/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/same-origin/http-https/iframe-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/same-origin/http-https/iframe-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/same-origin/http-https/iframe-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/same-origin/http-https/img-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/same-origin/http-https/img-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/same-origin/http-https/img-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/same-origin/http-https/script-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/same-origin/http-https/script-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/same-origin/http-https/script-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/same-origin/http-https/xhr-request/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/same-origin/http-https/xhr-request/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/http-rp/same-origin/http-https/xhr-request/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/cross-origin/http-https/fetch-request/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/cross-origin/http-https/fetch-request/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/cross-origin/http-https/fetch-request/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/cross-origin/http-https/iframe-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/cross-origin/http-https/iframe-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/cross-origin/http-https/iframe-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/cross-origin/http-https/img-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/cross-origin/http-https/img-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/cross-origin/http-https/img-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/cross-origin/http-https/script-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/cross-origin/http-https/script-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/cross-origin/http-https/script-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/cross-origin/http-https/xhr-request/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/cross-origin/http-https/xhr-request/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/cross-origin/http-https/xhr-request/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/same-origin/http-https/fetch-request/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/same-origin/http-https/fetch-request/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/same-origin/http-https/fetch-request/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/same-origin/http-https/iframe-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/same-origin/http-https/iframe-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/same-origin/http-https/iframe-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/same-origin/http-https/img-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/same-origin/http-https/img-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/same-origin/http-https/img-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/same-origin/http-https/script-tag/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/same-origin/http-https/script-tag/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/same-origin/http-https/script-tag/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/same-origin/http-https/xhr-request/generic.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/same-origin/http-https/xhr-request/generic.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unsafe-url/meta-referrer/same-origin/http-https/xhr-request/generic.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/attr-referrer/cross-origin/http-https/iframe-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/attr-referrer/cross-origin/http-https/iframe-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/attr-referrer/cross-origin/http-https/iframe-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/attr-referrer/cross-origin/http-https/img-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/attr-referrer/cross-origin/http-https/img-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/attr-referrer/cross-origin/http-https/img-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/attr-referrer/same-origin/http-https/iframe-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/attr-referrer/same-origin/http-https/iframe-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/attr-referrer/same-origin/http-https/iframe-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/attr-referrer/same-origin/http-https/img-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/attr-referrer/same-origin/http-https/img-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/attr-referrer/same-origin/http-https/img-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/cross-origin/http-https/fetch-request/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/cross-origin/http-https/fetch-request/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/cross-origin/http-https/fetch-request/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/cross-origin/http-https/iframe-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/cross-origin/http-https/iframe-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/cross-origin/http-https/iframe-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/cross-origin/http-https/img-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/cross-origin/http-https/img-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/cross-origin/http-https/img-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/cross-origin/http-https/script-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/cross-origin/http-https/script-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/cross-origin/http-https/script-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/cross-origin/http-https/xhr-request/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/cross-origin/http-https/xhr-request/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/cross-origin/http-https/xhr-request/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/same-origin/http-https/fetch-request/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/same-origin/http-https/fetch-request/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/same-origin/http-https/fetch-request/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/same-origin/http-https/iframe-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/same-origin/http-https/iframe-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/same-origin/http-https/iframe-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/same-origin/http-https/img-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/same-origin/http-https/img-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/same-origin/http-https/img-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/same-origin/http-https/script-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/same-origin/http-https/script-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/same-origin/http-https/script-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/same-origin/http-https/xhr-request/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/same-origin/http-https/xhr-request/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/http-rp/same-origin/http-https/xhr-request/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/cross-origin/http-https/fetch-request/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/cross-origin/http-https/fetch-request/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/cross-origin/http-https/fetch-request/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/cross-origin/http-https/iframe-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/cross-origin/http-https/iframe-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/cross-origin/http-https/iframe-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/cross-origin/http-https/img-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/cross-origin/http-https/img-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/cross-origin/http-https/img-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/cross-origin/http-https/script-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/cross-origin/http-https/script-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/cross-origin/http-https/script-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/cross-origin/http-https/xhr-request/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/cross-origin/http-https/xhr-request/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/cross-origin/http-https/xhr-request/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-https/fetch-request/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-https/fetch-request/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-https/fetch-request/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-https/iframe-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-https/iframe-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-https/iframe-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-https/img-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-https/img-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-https/img-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-https/script-tag/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-https/script-tag/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-https/script-tag/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-https/xhr-request/upgrade-protocol.keep-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-https/xhr-request/upgrade-protocol.no-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-https/xhr-request/upgrade-protocol.swap-origin-redirect.http.html [ Timeout ]
+Bug(none) external/wpt/resource-timing/resource_cached.htm [ Failure ]
+Bug(none) external/wpt/resource-timing/resource_connection_reuse.html [ Failure ]
+Bug(none) external/wpt/resource-timing/resource_TAO_match_origin.htm [ Failure ]
+Bug(none) external/wpt/resource-timing/resource_TAO_match_wildcard.htm [ Failure ]
+Bug(none) external/wpt/resource-timing/resource_TAO_multi.htm [ Failure ]
+Bug(none) external/wpt/resource-timing/test_resource_timing.html [ Failure ]
+Bug(none) external/wpt/secure-contexts/basic-popup-and-iframe-tests.html [ Failure ]
+Bug(none) external/wpt/service-workers/cache-storage/common.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/serviceworker/cache-add.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/serviceworker/cache-delete.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/serviceworker/cache-keys.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/serviceworker/cache-match.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/serviceworker/cache-matchAll.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/serviceworker/cache-put.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/serviceworker/cache-storage-keys.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/serviceworker/cache-storage-match.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/serviceworker/cache-storage.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/serviceworker/credentials.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/window/cache-add.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/window/cache-delete.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/window/cache-keys.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/window/cache-match.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/window/cache-matchAll.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/window/cache-put.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/window/cache-storage-keys.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/window/cache-storage-match.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/window/cache-storage.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/window/sandboxed-iframes.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/worker/cache-add.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/worker/cache-delete.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/worker/cache-keys.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/worker/cache-match.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/worker/cache-matchAll.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/worker/cache-put.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/worker/cache-storage-keys.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/worker/cache-storage-match.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/cache-storage/worker/cache-storage.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/activate-event-after-install-state-change.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/activation-after-registration.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/activation.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/active.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/appcache-ordering-main.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/claim-affect-other-registration.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/claim-fetch.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/claim-not-using-registration.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/claim-using-registration.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/client-id.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/clients-get-client-types.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/clients-get.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/clients-matchall-exact-controller.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/clients-matchall-include-uncontrolled.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/clients-matchall-on-evaluation.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/clients-matchall-order.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/clients-matchall.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/controller-on-disconnect.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/controller-on-load.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/controller-on-reload.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/extendable-event-async-waituntil.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/extendable-event-waituntil.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-canvas-tainting.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-cors-xhr.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-csp.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-event-after-navigation-within-page.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-event-async-respond-with.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-event-network-error.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-event-redirect.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-event-respond-with-argument.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-event-respond-with-readable-stream.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-event-respond-with-response-body-with-invalid-chunk.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-event-respond-with-stops-propagation.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-event-throws-after-respond-with.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-event-within-sw-manual.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-event-within-sw.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-event.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-header-visibility.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-mixed-content-to-inscope.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-mixed-content-to-outscope.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-request-css-base-url.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-request-css-cross-origin-mime-check.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-request-css-images.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-request-fallback.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-request-html-imports.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-request-no-freshness-headers.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-request-redirect.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-request-resources.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-response-taint.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-response-xhr.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/fetch-waits-for-activate.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/foreign-fetch-basics.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/foreign-fetch-cors.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/foreign-fetch-event.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/foreign-fetch-workers.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/getregistration.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/getregistrations.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/iframe-sandbox-register-link-element.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/import-scripts-resource-map.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/import-scripts-updated-flag.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/indexeddb.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/install-event-type.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/installing.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/interfaces.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/iso-latin1-header.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/multi-globals/url-parsing.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/multiple-register.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/multiple-update.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/navigate-window.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/navigation-preload/broken-chunked-encoding.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/navigation-preload/chunked-encoding.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/navigation-preload/empty-preload-response-body.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/navigation-preload/get-state.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/navigation-preload/redirect.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/navigation-preload/request-headers.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/navigation-preload/resource-timing.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/navigation-redirect-body.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/navigation-redirect-to-http.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/navigation-redirect.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/onactivate-script-error.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/oninstall-script-error.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/opaque-response-preloaded.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/performance-timeline.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/postmessage-blob-url.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/postmessage-from-waiting-serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/postmessage-msgport-to-client.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/postmessage-to-client.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/postmessage.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/ready.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/redirected-response.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/referer.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/referrer-policy-header.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/register-closed-window.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/register-default-scope.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/register-foreign-fetch-errors.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/register-link-element.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/register-link-header.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/register-same-scope-different-script-url.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/register-wait-forever-in-install-worker.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/registration-end-to-end.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/registration-events.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/registration-iframe.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/registration-service-worker-attributes.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/registration.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/rejections.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/request-body-blob.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/resource-timing.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/service-worker-csp-connect.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/service-worker-csp-default.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/service-worker-csp-script.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/serviceworker-message-event-historical.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/close.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/extendable-message-event-constructor.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/extendable-message-event.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/postmessage.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/registration-attribute.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/service-worker-error-event.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/unregister.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/update.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/serviceworkerobject-scripturl.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/shared-worker-controlled.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/skip-waiting-installed.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/skip-waiting-using-registration.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/skip-waiting-without-client.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/skip-waiting-without-using-registration.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/skip-waiting.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/state.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/synced-state.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/uncontrolled-page.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/unregister-controller.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/unregister-then-register-new-script.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/unregister-then-register.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/unregister.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/update-after-navigation-fetch-event.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/update-recovery.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/update.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/waiting.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/websocket.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/worker-interception.https.html [ Timeout ]
+Bug(none) external/wpt/service-workers/service-worker/xhr.https.html [ Timeout ]
+Bug(none) external/wpt/storage/estimate-indexeddb-worker.https.html [ Timeout ]
+Bug(none) external/wpt/storage/estimate-indexeddb.https.html [ Timeout ]
+Bug(none) external/wpt/storage/interfaces.https.html [ Timeout ]
+Bug(none) external/wpt/storage/opaque-origin.https.html [ Timeout ]
+Bug(none) external/wpt/storage/persist-permission-manual.https.html [ Timeout ]
+Bug(none) external/wpt/storage/persisted-worker.https.html [ Timeout ]
+Bug(none) external/wpt/storage/persisted.https.html [ Timeout ]
+Bug(none) external/wpt/storage/storagemanager-estimate.https.html [ Timeout ]
+Bug(none) external/wpt/storage/storagemanager-persist-worker.https.html [ Timeout ]
+Bug(none) external/wpt/storage/storagemanager-persist.https.html [ Timeout ]
+Bug(none) external/wpt/storage/storagemanager-persisted-worker.https.html [ Timeout ]
+Bug(none) external/wpt/storage/storagemanager-persisted.https.html [ Timeout ]
+Bug(none) external/wpt/streams/byte-length-queuing-strategy.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/count-queuing-strategy.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/piping/close-propagation-backward.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/piping/close-propagation-forward.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/piping/error-propagation-backward.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/piping/error-propagation-forward.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/piping/flow-control.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/piping/general.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/piping/multiple-propagation.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/piping/pipe-through.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/piping/transform-streams.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/readable-byte-streams/general.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/readable-streams/bad-strategies.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/readable-streams/bad-underlying-sources.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/readable-streams/brand-checks.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/readable-streams/cancel.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/readable-streams/count-queuing-strategy-integration.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/readable-streams/default-reader.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/readable-streams/floating-point-total-queue-size.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/readable-streams/garbage-collection.dedicatedworker.html [ Timeout ]
+Bug(none) external/wpt/streams/readable-streams/garbage-collection.html [ Timeout ]
+Bug(none) external/wpt/streams/readable-streams/garbage-collection.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/readable-streams/general.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/readable-streams/pipe-through.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/readable-streams/tee.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/readable-streams/templated.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/writable-streams/aborting.html [ Timeout ]
+Bug(none) external/wpt/streams/writable-streams/aborting.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/writable-streams/bad-strategies.dedicatedworker.html [ Timeout ]
+Bug(none) external/wpt/streams/writable-streams/bad-strategies.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/writable-streams/bad-underlying-sinks.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/writable-streams/bad-underlying-sinks.sharedworker.html [ Timeout ]
+Bug(none) external/wpt/streams/writable-streams/brand-checks.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/writable-streams/byte-length-queuing-strategy.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/writable-streams/close.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/writable-streams/close.sharedworker.html [ Timeout ]
+Bug(none) external/wpt/streams/writable-streams/constructor.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/writable-streams/count-queuing-strategy.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/writable-streams/error.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/writable-streams/floating-point-total-queue-size.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/writable-streams/general.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/writable-streams/properties.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/writable-streams/reentrant-strategy.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/writable-streams/start.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/streams/writable-streams/write.serviceworker.https.html [ Timeout ]
+Bug(none) external/wpt/webaudio/the-audio-api/the-audiobuffer-interface/idl-test.html [ Timeout ]
+Bug(none) external/wpt/webaudio/the-audio-api/the-audiodestinationnode-interface/idl-test.html [ Timeout ]
+Bug(none) external/wpt/webaudio/the-audio-api/the-audioparam-interface/idl-test.html [ Timeout ]
+Bug(none) external/wpt/webaudio/the-audio-api/the-constantsourcenode-interface/test-constantsourcenode.html [ Timeout ]
+Bug(none) external/wpt/webaudio/the-audio-api/the-delaynode-interface/idl-test.html [ Timeout ]
+Bug(none) external/wpt/webaudio/the-audio-api/the-gainnode-interface/idl-test.html [ Timeout ]
+Bug(none) external/wpt/webaudio/the-audio-api/the-iirfilternode-interface/test-iirfilternode.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/derive_bits_keys/test_ecdh_keys.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/derive_bits_keys/test_hkdf.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_empty.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_long.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_short.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_empty.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_long.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_short.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_empty.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_long.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_short.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/digest/test_digest.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/encrypt_decrypt/test_aes_cbc.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/encrypt_decrypt/test_aes_ctr.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/encrypt_decrypt/test_aes_gcm.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/encrypt_decrypt/test_rsa_oaep.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/generateKey/test_aes-cbc.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/generateKey/test_aes-ctr.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/generateKey/test_failures.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/generateKey/test_failures_AES-CBC.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/generateKey/test_failures_AES-CTR.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/generateKey/test_failures_AES-GCM.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/generateKey/test_failures_AES-KW.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/generateKey/test_failures_ECDH.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/generateKey/test_failures_ECDSA.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/generateKey/test_failures_HMAC.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/generateKey/test_failures_RSA-OAEP.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/generateKey/test_failures_RSA-PSS.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/generateKey/test_successes_AES-CBC.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/generateKey/test_successes_AES-CTR.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/generateKey/test_successes_AES-GCM.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/generateKey/test_successes_AES-KW.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/generateKey/test_successes_ECDH.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/generateKey/test_successes_ECDSA.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/generateKey/test_successes_HMAC.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/generateKey/test_successes_RSA-OAEP.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/generateKey/test_successes_RSA-PSS.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/import_export/test_ec_importKey.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/import_export/test_rsa_importKey.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/import_export/test_symmetric_importKey.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/secure_context/crypto-subtle-non-secure-context-not-available.sub.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/secure_context/crypto-subtle-secure-context-available.https.sub.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/sign_verify/test_ecdsa.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/sign_verify/test_hmac.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/sign_verify/test_rsa_pkcs.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/sign_verify/test_rsa_pss.https.html [ Timeout ]
+Bug(none) external/wpt/WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.https.html [ Timeout ]
+Bug(none) external/wpt/WebIDL/ecmascript-binding/es-exceptions/exceptions.html [ Timeout ]
+Bug(none) external/wpt/WebIDL/ecmascript-binding/has-instance.html [ Timeout ]
+Bug(none) external/wpt/webmessaging/broadcastchannel/blobs.html [ Failure ]
+Bug(none) external/wpt/websockets/Secure-Send-binary-blob.htm [ Timeout ]
+Bug(none) external/wpt/websockets/Send-binary-blob.htm [ Timeout ]
+Bug(none) external/wpt/webusb/idlharness.https.html [ Timeout ]
+Bug(none) external/wpt/webusb/usb-allowed-by-feature-policy-attribute.https.sub.html [ Timeout ]
+Bug(none) external/wpt/webusb/usb-allowed-by-feature-policy.https.sub.html [ Timeout ]
+Bug(none) external/wpt/webusb/usb-default-feature-policy.https.sub.html [ Timeout ]
+Bug(none) external/wpt/webusb/usb-disabled-by-feature-policy.https.sub.html [ Timeout ]
+Bug(none) external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_timestamp_future.html [ Timeout ]
+Bug(none) external/wpt/workers/constructors/Worker/Blob-url.html [ Timeout ]
+Bug(none) external/wpt/workers/name-property.html [ Failure Timeout ]
+Bug(none) external/wpt/workers/SharedWorker_blobUrl.html [ Timeout ]
+Bug(none) external/wpt/XMLHttpRequest/abort-during-done.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/anonymous-mode-unsupported.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/event-upload-progress-crossorigin.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/event-upload-progress.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/formdata-blob.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/formdata.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/getallresponseheaders-cl.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/headers-normalize-response.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/open-method-case-insensitive.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/open-method-case-sensitive.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/open-open-sync-send.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/open-referer.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/open-url-about-blank-window.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/open-url-base-inserted-after-open.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/open-url-base-inserted.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/open-url-base.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/open-url-encoding.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/open-url-fragment.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/open-url-javascript-window-2.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/open-url-javascript-window.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/open-url-worker-origin.htm [ Timeout ]
+Bug(none) external/wpt/XMLHttpRequest/overridemimetype-blob.html [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/response-data-blob.htm [ Timeout ]
+Bug(none) external/wpt/XMLHttpRequest/response-data-deflate.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/response-data-gzip.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/response-data-progress.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/response-method.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/responsetype.html [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/responseurl.html [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/responsexml-basic.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/responsexml-media-type.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/responsexml-non-well-formed.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-accept-language.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-accept.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-after-setting-document-domain.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-authentication-basic-repeat-no-args.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-authentication-basic-setrequestheader-and-arguments.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-authentication-basic-setrequestheader-existing-session.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-authentication-basic-setrequestheader.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-authentication-basic.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-authentication-competing-names-passwords.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-authentication-prompt-manual.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-blob-with-no-mime-type.html [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-conditional.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-content-type-charset.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-content-type-string.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-data-blob.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-entity-body-basic.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-entity-body-empty.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-entity-body-get-head.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-entity-body-none.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-redirect-infinite.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-redirect-post-upload.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-response-upload-event-loadend.htm [ Timeout ]
+Bug(none) external/wpt/XMLHttpRequest/send-response-upload-event-progress.htm [ Timeout ]
+Bug(none) external/wpt/XMLHttpRequest/send-sync-blocks-async.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-sync-no-response-event-load.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-sync-no-response-event-loadend.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-sync-no-response-event-order.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-sync-response-event-order.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/send-sync-timeout.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/setrequestheader-case-insensitive.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/setrequestheader-header-forbidden.htm [ Failure ]
+Bug(none) external/wpt/XMLHttpRequest/status-basic.htm [ Failure ]
+Bug(none) fast/canvas/canvas-createImageBitmap-blob-in-workers.html [ Timeout ]
+Bug(none) fast/canvas/canvas-createImageBitmap-drawImage.html [ Failure ]
+Bug(none) fast/canvas/canvas-createImageBitmap-from-canvas-toBlob.html [ Timeout ]
+Bug(none) fast/canvas/canvas-createImageBitmap-immutable.html [ Timeout ]
+Bug(none) fast/canvas/canvas-createImageBitmap-resize.html [ Failure ]
+Bug(none) fast/canvas/canvas-drawImage-live-video.html [ Timeout ]
+Bug(none) fast/canvas/canvas-toBlob-defaultpng.html [ Timeout ]
+Bug(none) fast/canvas/canvas-toBlob-jpeg-maximum-quality.html [ Timeout ]
+Bug(none) fast/canvas/canvas-toBlob-jpeg-medium-quality.html [ Timeout ]
+Bug(none) fast/canvas/canvas-toBlob-toDataURL-race-imageEncoder-jpeg.html [ Timeout ]
+Bug(none) fast/canvas/canvas-toBlob-toDataURL-race-imageEncoder-png.html [ Timeout ]
+Bug(none) fast/canvas/canvas-toBlob-webp-maximum-quality.html [ Timeout ]
+Bug(none) fast/canvas/fillrect-gradient-zero-stops.html [ Timeout ]
+Bug(none) fast/canvas/OffscreenCanvas-2d-drawImage-in-worker.html [ Timeout ]
+Bug(none) fast/canvas/OffscreenCanvas-2d-gradients-in-worker.html [ Timeout ]
+Bug(none) fast/canvas/OffscreenCanvas-2d-imageData-in-worker.html [ Timeout ]
+Bug(none) fast/canvas/OffscreenCanvas-2d-imageSmoothing-in-worker.html [ Timeout ]
+Bug(none) fast/canvas/OffscreenCanvas-2d-pattern-in-worker.html [ Timeout ]
+Bug(none) fast/canvas/OffscreenCanvas-clearRect-in-worker.html [ Timeout ]
+Bug(none) fast/canvas/OffscreenCanvas-commit-invalid-call.html [ Timeout ]
+Bug(none) fast/canvas/OffscreenCanvas-constructor-in-worker.html [ Timeout ]
+Bug(none) fast/canvas/OffscreenCanvas-convertToBlob-noIdleTask-worker.html [ Timeout ]
+Bug(none) fast/canvas/OffscreenCanvas-convertToBlob-noIdleTask.html [ Timeout ]
+Bug(none) fast/canvas/OffscreenCanvas-fillRect-in-worker.html [ Timeout ]
+Bug(none) fast/canvas/OffscreenCanvas-filter-in-worker.html [ Timeout ]
+Bug(none) fast/canvas/OffscreenCanvas-invalid-args-in-worker.html [ Timeout ]
+Bug(none) fast/canvas/OffscreenCanvas-multiple-worker-commit.html [ Timeout ]
+Bug(none) fast/canvas/OffscreenCanvas-paths-in-worker.html [ Timeout ]
+Bug(none) fast/canvas/OffscreenCanvas-placeholder-image-source-with-worker.html [ Timeout ]
+Bug(none) fast/canvas/OffscreenCanvas-placeholder-image-source.html [ Timeout ]
+Bug(none) fast/canvas/OffscreenCanvas-strokeRect-in-worker.html [ Timeout ]
+Bug(none) fast/canvas/OffscreenCanvas-transform-shadow-in-worker.html [ Timeout ]
+Bug(none) fast/canvas/webgl/offscreenCanvas-context-lost-restored-worker.html [ Timeout ]
+Bug(none) fast/canvas/webgl/offscreenCanvas-context-lost-worker.html [ Timeout ]
+Bug(none) fast/canvas/webgl/offscreenCanvas-transferToImageBitmap-texImage2D.html [ Timeout ]
+Bug(none) fast/canvas/webgl/texImage-imageBitmap-from-blob-resize.html [ Failure ]
+Bug(none) fast/canvas/webgl/texImage-imageBitmap-from-blob.html [ Failure ]
+Bug(none) fast/canvas/webgl/texImage-imageBitmap-from-imageBitmap-from-blob.html [ Failure ]
+Bug(none) fast/css/counters/counter-traverse-table-cell.html [ Failure ]
+Bug(none) fast/css/font-face-attribute-remove.html [ Timeout ]
+Bug(none) fast/dnd/file-drag-drop-on-page.html [ Failure ]
+Bug(none) fast/dom/child-insertion-notify-crash.html [ Timeout ]
+Bug(none) fast/dom/css-delete-doc.html [ Timeout ]
+Bug(none) fast/dom/document-navigation-error-no-crash.html [ Timeout ]
+Bug(none) fast/dom/Document/xml-document-focus.xml [ Failure ]
+Bug(none) fast/dom/Element/offsetLeft-offsetTop-body-quirk.html [ Failure ]
+Bug(none) fast/dom/Element/offsetLeft-offsetTop-html.html [ Failure ]
+Bug(none) fast/dom/gc-dom-tree-lifetime.html [ Timeout ]
+Bug(none) fast/dom/gc-image-element-2.html [ Timeout ]
+Bug(none) fast/dom/HTMLAnchorElement/anchor-download-unset.html [ Timeout ]
+Bug(none) fast/dom/HTMLAnchorElement/anchor-nodownload.html [ Timeout ]
+Bug(none) fast/dom/HTMLLinkElement/prefetch.html [ Failure ]
+Bug(none) fast/dom/HTMLLinkElement/subresource.html [ Failure ]
+Bug(none) fast/dom/HTMLObjectElement/update-data.html [ Timeout ]
+Bug(none) fast/dom/node-filter-gc.html [ Timeout ]
+Bug(none) fast/dom/NodeList/nodelist-reachable.html [ Timeout ]
+Bug(none) fast/dom/Range/surround-contents-font-face-crash.svg [ Timeout ]
+Bug(none) fast/dom/split-cdata.xml [ Timeout ]
+Bug(none) fast/dom/StyleSheet/gc-parent-rule.html [ Timeout ]
+Bug(none) fast/dom/StyleSheet/gc-rule-children-wrappers.html [ Timeout ]
+Bug(none) fast/dom/StyleSheet/gc-styleheet-wrapper.xhtml [ Timeout ]
+Bug(none) fast/dom/Window/customized-property-survives-gc.html [ Timeout ]
+Bug(none) fast/dom/Window/property-access-on-cached-properties-after-frame-navigated.html [ Timeout ]
+Bug(none) fast/dom/Window/property-access-on-cached-window-after-frame-navigated.html [ Timeout ]
+Bug(none) fast/dom/Window/property-access-on-cached-window-after-frame-removed-and-gced.html [ Timeout ]
+Bug(none) fast/encoding/char-encoding.html [ Timeout ]
+Bug(none) fast/events/attribute-listener-cloned-from-frameless-doc-context-2.html [ Timeout ]
+Bug(none) fast/events/attribute-listener-cloned-from-frameless-doc.xhtml [ Timeout ]
+Bug(none) fast/events/attribute-listener-extracted-from-frameless-doc-context-2.html [ Timeout ]
+Bug(none) fast/events/before-unload-adopt-within-subframes.html [ Timeout ]
+Bug(none) fast/events/before-unload-remove-and-add-subframe.html [ Timeout ]
+Bug(none) fast/events/click-after-mousedown-cancel.html [ Timeout ]
+Bug(none) fast/events/crash-on-querying-event-path.html [ Timeout ]
+Bug(none) fast/events/drag-and-drop-autoscroll-inner-frame.html [ Failure ]
+Bug(none) fast/events/event-on-xhr-document.html [ Failure ]
+Bug(none) fast/events/event-properties-gc.html [ Timeout ]
+Bug(none) fast/events/media-focus-in-standalone-media-document.html [ Timeout ]
+Bug(none) fast/events/message-port-gc-closed-cloned.html [ Timeout ]
+Bug(none) fast/events/message-port-gc-closed.html [ Timeout ]
+Bug(none) fast/events/message-port-transferables.html [ Timeout ]
+Bug(none) fast/events/resize-subframe.html [ Failure ]
+Bug(none) fast/events/touch/gesture/long-press-focuses-frame.html [ Failure ]
+Bug(none) fast/files/apply-blob-url-to-img.html [ Timeout ]
+Bug(none) fast/files/apply-blob-url-to-xhr.html [ Timeout ]
+Bug(none) fast/files/blob-close-read.html [ Failure ]
+Bug(none) fast/files/blob-close-revoke.html [ Failure ]
+Bug(none) fast/files/blob-constructor.html [ Timeout ]
+Bug(none) fast/files/blob-parts-slice-test.html [ Failure ]
+Bug(none) fast/files/blob-reading-from-form-file.html [ Failure ]
+Bug(none) fast/files/blob-slice-test.html [ Failure ]
+Bug(none) fast/files/file-reader-abort.html [ Failure ]
+Bug(none) fast/files/file-reader-done-reading-abort.html [ Failure ]
+Bug(none) fast/files/file-reader-event-listener.html [ Failure ]
+Bug(none) fast/files/file-reader-fffd.html [ Timeout ]
+Bug(none) fast/files/file-reader-file-url.html [ Failure ]
+Bug(none) fast/files/file-reader-result-twice.html [ Failure ]
+Bug(none) fast/files/file-reader-sandbox-iframe.html [ Failure ]
+Bug(none) fast/files/null-origin-string.html [ Failure ]
+Bug(none) fast/files/read-blob-as-array-buffer.html [ Failure ]
+Bug(none) fast/files/read-blob-async.html [ Failure ]
+Bug(none) fast/files/read-file-async.html [ Failure ]
+Bug(none) fast/files/workers/inline-worker-via-blob-url.html [ Timeout ]
+Bug(none) fast/files/workers/worker-apply-blob-url-to-xhr.html [ Timeout ]
+Bug(none) fast/files/workers/worker-read-blob-async.html [ Failure ]
+Bug(none) fast/files/workers/worker-read-blob-sync.html [ Failure ]
+Bug(none) fast/files/workers/worker-read-file-async.html [ Failure ]
+Bug(none) fast/files/workers/worker-read-file-constructor-async.html [ Timeout ]
+Bug(none) fast/files/workers/worker-read-file-sync.html [ Failure ]
+Bug(none) fast/files/xhr-response-blob.html [ Failure ]
+Bug(none) fast/filesystem/file-writer-truncate-extend.html [ Failure ]
+Bug(none) fast/filesystem/file-writer-write-overlapped.html [ Failure ]
+Bug(none) fast/filesystem/filesystem-reference.html [ Timeout ]
+Bug(none) fast/filesystem/form-reading-from-file.html [ Failure ]
+Bug(none) fast/filesystem/snapshot-file-with-gc.html [ Failure ]
+Bug(none) fast/filesystem/workers/file-writer-sync-truncate-extend.html [ Failure ]
+Bug(none) fast/filesystem/workers/file-writer-sync-write-overlapped.html [ Failure ]
+Bug(none) fast/filesystem/workers/file-writer-truncate-extend.html [ Failure ]
+Bug(none) fast/filesystem/workers/file-writer-write-overlapped.html [ Failure ]
+Bug(none) fast/forms/file/recover-file-input-in-unposted-form.html [ Timeout ]
+Bug(none) fast/forms/select/input-select-after-resize.html [ Failure ]
+Bug(none) fast/forms/select/option-add-crash.html [ Timeout ]
+Bug(none) fast/forms/select/select-set-length-with-mutation-remove.html [ Timeout ]
+Bug(none) fast/frames/content-opacity-1.html [ Failure ]
+Bug(none) fast/frames/frame-src-attribute.html [ Timeout ]
+Bug(none) fast/frames/frameset-style-recalc.html [ Failure ]
+Bug(none) fast/frames/negative-remaining-length-crash.html [ Failure ]
+Bug(none) fast/harness/internals-observe-gc.html [ Timeout ]
+Bug(none) fast/harness/perftests/measure-time.html [ Timeout ]
+Bug(none) fast/harness/perftests/runs-per-second-iterations.html [ Timeout ]
+Bug(none) fast/harness/perftests/runs-per-second-log.html [ Timeout ]
+Bug(none) fast/history/history-back-twice-with-subframes-assert.html [ Timeout ]
+Bug(none) fast/html/imports/import-expando-gc.html [ Timeout ]
+Bug(none) fast/js/nested-object-gc.html [ Timeout ]
+Bug(none) fast/js/with-scope-gc.html [ Timeout ]
+Bug(none) fast/loader/local-svg-parsed-as-svg.svg [ Timeout ]
+Bug(none) fast/loader/reload-zero-byte-plugin.html [ Timeout ]
+Bug(none) fast/loader/sandboxed-plugin-crash.html [ Crash ]
+Bug(none) fast/loader/simultaneous-reloads-assert.html [ Failure ]
+Bug(none) fast/loader/stateobjects/pushstate-in-data-url-denied.html [ Failure ]
+Bug(none) fast/loader/url-strip-cr-lf-tab.html [ Failure ]
+Bug(none) fast/mediacapturefromelement/HTMLMediaElementCapture-capture.html [ Timeout ]
+Bug(none) fast/mediacapturefromelement/HTMLMediaElementCapture-creation.html [ Timeout ]
+Bug(none) fast/mediacapturefromelement/HTMLMediaElementCapture-ended.html [ Timeout ]
+Bug(none) fast/mediarecorder/BlobEvent-basic.html [ Failure ]
+Bug(none) fast/mediastream/MediaStreamTrack-clone.html [ Timeout ]
+Bug(none) fast/mediastream/MediaStreamTrack-contentHint.html [ Timeout ]
+Bug(none) fast/parser/compatMode-in-xhtml.xhtml [ Timeout ]
+Bug(none) fast/parser/external-entities-in-xslt.xml [ Failure ]
+Bug(none) fast/parser/xhtml-document-with-html-object.xhtml [ Timeout ]
+Bug(none) fast/peerconnection/RTCPeerConnection-lifetime.html [ Timeout ]
+Bug(none) fast/replaced/frame-removed-during-resize-smaller.html [ Timeout ]
+Bug(none) fast/replaced/frame-removed-during-resize.html [ Timeout ]
+Bug(none) fast/spatial-navigation/snav-hidden-iframe-zero-size.html [ Failure ]
+Bug(none) fast/spatial-navigation/snav-hidden-iframe.html [ Failure ]
+Bug(none) fast/spatial-navigation/snav-iframe-nested.html [ Failure ]
+Bug(none) fast/spatial-navigation/snav-iframe-no-focusable-content.html [ Failure ]
+Bug(none) fast/spatial-navigation/snav-iframe-no-scrollable-content.html [ Failure ]
+Bug(none) fast/spatial-navigation/snav-iframe-recursive-offset-parent.html [ Failure ]
+Bug(none) fast/spatial-navigation/snav-iframe-with-offscreen-focusable-element.html [ Failure ]
+Bug(none) fast/spatial-navigation/snav-media-elements.html [ Timeout ]
+Bug(none) fast/tokenizer/image-empty-crash.html [ Timeout ]
+Bug(none) fast/workers/close-context-messageport-crash.html [ Timeout ]
+Bug(none) fast/workers/dedicated-worker-lifecycle.html [ Timeout ]
+Bug(none) fast/workers/shared-worker-console-log.html [ Timeout ]
+Bug(none) fast/workers/shared-worker-lifecycle.html [ Timeout ]
+Bug(none) fast/workers/shared-worker-name.html [ Timeout ]
+Bug(none) fast/workers/worker-close-more.html [ Timeout ]
+Bug(none) fast/workers/worker-close.html [ Timeout ]
+Bug(none) fast/workers/worker-console-log.html [ Timeout ]
+Bug(none) fast/workers/worker-document-leak.html [ Timeout ]
+Bug(none) fast/workers/worker-exception-during-navigation.html [ Timeout ]
+Bug(none) fast/workers/worker-init.html [ Timeout ]
+Bug(none) fast/workers/worker-messageport-gc.html [ Timeout ]
+Bug(none) fast/workers/worker-multi-startup.html [ Timeout ]
+Bug(none) fast/workers/worker-navigator.html [ Timeout ]
+Bug(none) fast/workers/worker-onerror-01.html [ Failure ]
+Bug(none) fast/workers/worker-onerror-02.html [ Failure ]
+Bug(none) fast/workers/worker-onerror-03.html [ Failure ]
+Bug(none) fast/workers/worker-onerror-04.html [ Timeout ]
+Bug(none) fast/workers/worker-onerror-05.html [ Failure ]
+Bug(none) fast/workers/worker-onerror-06.html [ Failure ]
+Bug(none) fast/workers/worker-onerror-07.html [ Timeout ]
+Bug(none) fast/workers/worker-onerror-08.html [ Failure ]
+Bug(none) fast/workers/worker-onerror-09.html [ Failure ]
+Bug(none) fast/workers/worker-shared-asm-buffer.html [ Timeout ]
+Bug(none) fast/workers/worker-supplement-gc.html [ Timeout ]
+Bug(none) fast/xmlhttprequest/xmlhttprequest-bad-mimetype.html [ Failure ]
+Bug(none) fast/xmlhttprequest/xmlhttprequest-html-response-encoding.html [ Failure ]
+Bug(none) fast/xmlhttprequest/xmlhttprequest-nonexistent-file.html [ Timeout ]
+Bug(none) fast/xmlhttprequest/xmlhttprequest-responsetype-arraybuffer.html [ Timeout ]
+Bug(none) fast/xpath/4XPath/Borrowed/od_20000608.html [ Failure ]
+Bug(none) fast/xsl/document-function.xml [ Failure ]
+Bug(none) fast/xsl/dtd-in-source-document.xml [ Failure ]
+Bug(none) fast/xsl/transform-xhr-doc.xhtml [ Failure ]
+Bug(none) fast/xsl/xslt-import-depth.xml [ Failure ]
+Bug(none) fast/xsl/xslt-import-enc16.xml [ Failure ]
+Bug(none) fast/xsl/xslt-processor-template.html [ Failure ]
+Bug(none) fast/xsl/xslt-processor.html [ Failure ]
+Bug(none) fast/xsl/xslt-relative-path.xml [ Failure ]
+Bug(none) fullscreen/full-screen-iframe-allowed-video.html [ Timeout ]
+Bug(none) fullscreen/full-screen-iframe-legacy.html [ Timeout ]
+Bug(none) fullscreen/full-screen-iframe-without-allow-attribute-allowed-from-parent.html [ Failure ]
+Bug(none) fullscreen/video-controls-timeline.html [ Timeout ]
+Bug(none) fullscreen/video-specified-size.html [ Timeout ]
+Bug(none) geolocation-api/cached-position-called-once.html [ Timeout ]
+Bug(none) geolocation-api/callback-exception.html [ Timeout ]
+Bug(none) geolocation-api/callback-to-deleted-context.html [ Timeout ]
+Bug(none) geolocation-api/callback-to-remote-context.html [ Timeout ]
+Bug(none) geolocation-api/callback-to-remote-context2.html [ Timeout ]
+Bug(none) geolocation-api/clear-watch-invalid-id-crash.html [ Timeout ]
+Bug(none) geolocation-api/coordinates-interface-attributes.html [ Timeout ]
+Bug(none) geolocation-api/delayed-permission-allowed-for-multiple-requests.html [ Timeout ]
+Bug(none) geolocation-api/delayed-permission-allowed.html [ Timeout ]
+Bug(none) geolocation-api/delayed-permission-denied-for-multiple-requests.html [ Timeout ]
+Bug(none) geolocation-api/delayed-permission-denied.html [ Timeout ]
+Bug(none) geolocation-api/disconnected-frame-already.html [ Timeout ]
+Bug(none) geolocation-api/disconnected-frame-permission-denied.html [ Timeout ]
+Bug(none) geolocation-api/disconnected-frame.html [ Timeout ]
+Bug(none) geolocation-api/error-clear-watch.html [ Timeout ]
+Bug(none) geolocation-api/error-service-connection-error.html [ Timeout ]
+Bug(none) geolocation-api/error.html [ Timeout ]
+Bug(none) geolocation-api/maximum-age.html [ Timeout ]
+Bug(none) geolocation-api/multiple-requests.html [ Timeout ]
+Bug(none) geolocation-api/notimer-after-unload.html [ Timeout ]
+Bug(none) geolocation-api/permission-denied-already-clear-watch.html [ Timeout ]
+Bug(none) geolocation-api/permission-denied-already-error.html [ Timeout ]
+Bug(none) geolocation-api/permission-denied-already-success.html [ Timeout ]
+Bug(none) geolocation-api/permission-denied-stops-watches.html [ Timeout ]
+Bug(none) geolocation-api/permission-denied.html [ Timeout ]
+Bug(none) geolocation-api/permission-service-connection-error.html [ Timeout ]
+Bug(none) geolocation-api/position-string.html [ Timeout ]
+Bug(none) geolocation-api/reentrant-error.html [ Timeout ]
+Bug(none) geolocation-api/reentrant-permission-denied.html [ Timeout ]
+Bug(none) geolocation-api/reentrant-success.html [ Timeout ]
+Bug(none) geolocation-api/remove-remote-context-in-error-callback-crash.html [ Timeout ]
+Bug(none) geolocation-api/success-clear-watch.html [ Timeout ]
+Bug(none) geolocation-api/success.html [ Timeout ]
+Bug(none) geolocation-api/timeout-clear-watch.html [ Timeout ]
+Bug(none) geolocation-api/timeout-negative.html [ Timeout ]
+Bug(none) geolocation-api/timeout-over-max-of-unsigned.html [ Timeout ]
+Bug(none) geolocation-api/timeout-zero.html [ Timeout ]
+Bug(none) geolocation-api/timeout.html [ Timeout ]
+Bug(none) geolocation-api/timestamp.html [ Timeout ]
+Bug(none) geolocation-api/watch.html [ Timeout ]
+Bug(none) geolocation-api/watchPosition-page-visibility.html [ Timeout ]
+Bug(none) geolocation-api/watchPosition-unique.html [ Timeout ]
+Bug(none) geolocation-api/window-close-crash.html [ Timeout ]
+Bug(none) harness-tests/mojo-helpers.html [ Timeout ]
+Bug(none) html/document_metadata/head-check.html [ Timeout ]
+Bug(none) html/marquee/marquee-clone-crash.html [ Timeout ]
+Bug(none) html5lib/generated/run-tests1-data.html [ Timeout ]
+Bug(none) http/tests/appcache/404-manifest.html [ Failure ]
+Bug(none) http/tests/appcache/abort-cache-ondownloading-manifest-404.html [ Timeout ]
+Bug(none) http/tests/appcache/access-via-redirect.php [ Timeout ]
+Bug(none) http/tests/appcache/cyrillic-uri.html [ Failure ]
+Bug(none) http/tests/appcache/different-https-origin-resource-main.html [ Timeout ]
+Bug(none) http/tests/appcache/fallback.html [ Timeout ]
+Bug(none) http/tests/appcache/main-resource-hash.html [ Timeout ]
+Bug(none) http/tests/appcache/main-resource-redirect.html [ Timeout ]
+Bug(none) http/tests/appcache/manifest-parsing.html [ Failure ]
+Bug(none) http/tests/appcache/multi-fallback.html [ Failure Timeout ]
+Bug(none) http/tests/appcache/non-html.xhtml [ Timeout ]
+Bug(none) http/tests/appcache/offline-access.html [ Timeout ]
+Bug(none) http/tests/appcache/online-fallback-layering.html [ Timeout ]
+Bug(none) http/tests/appcache/online-whitelist.html [ Failure ]
+Bug(none) http/tests/appcache/remove-cache.html [ Timeout ]
+Bug(none) http/tests/appcache/simple.html [ Timeout ]
+Bug(none) http/tests/appcache/top-frame-1.html [ Timeout ]
+Bug(none) http/tests/appcache/top-frame-2.html [ Timeout ]
+Bug(none) http/tests/appcache/update-cache.html [ Timeout ]
+Bug(none) http/tests/appcache/video.html [ Timeout ]
+Bug(none) http/tests/appcache/whitelist-wildcard.html [ Failure ]
+Bug(none) http/tests/appcache/xhr-foreign-resource.html [ Failure ]
+Bug(none) http/tests/background_fetch/background-fetch-click-event.https.html [ Timeout ]
+Bug(none) http/tests/background_fetch/background-fetch-event.https.html [ Timeout ]
+Bug(none) http/tests/background_fetch/background-fetch-fail-event.https.html [ Timeout ]
+Bug(none) http/tests/background_fetch/background-fetch-manager-fetch.https.html [ Timeout ]
+Bug(none) http/tests/background_fetch/background-fetch-manager-get.https.html [ Timeout ]
+Bug(none) http/tests/background_fetch/background-fetch-manager-getTags.https.html [ Timeout ]
+Bug(none) http/tests/background_fetch/background-fetch-registration-abort.https.html [ Timeout ]
+Bug(none) http/tests/background_fetch/background-fetched-event.https.html [ Timeout ]
+Bug(none) http/tests/background_sync/chromium/stop-worker-no-crash.html [ Failure ]
+Bug(none) http/tests/background_sync/interfaces.html [ Failure ]
+Bug(none) http/tests/background_sync/oneshot-register-failure-worker-not-activated.html [ Failure ]
+Bug(none) http/tests/background_sync/oneshot.html [ Failure ]
+Bug(none) http/tests/background_sync/permission_denied.html [ Failure ]
+Bug(none) http/tests/bluetooth/https/requestDevice/cross-origin-iframe.html [ Timeout ]
+Bug(none) http/tests/budget/get-budget-in-service-worker.html [ Timeout ]
+Bug(none) http/tests/budget/get-budget.html [ Timeout ]
+Bug(none) http/tests/budget/get-cost-fails-in-service-worker.html [ Timeout ]
+Bug(none) http/tests/budget/get-cost-in-service-worker.html [ Timeout ]
+Bug(none) http/tests/budget/get-cost.html [ Timeout ]
+Bug(none) http/tests/budget/interfaces-in-service-worker.html [ Failure ]
+Bug(none) http/tests/budget/reserve-in-service-worker.html [ Timeout ]
+Bug(none) http/tests/budget/reserve.html [ Timeout ]
+Bug(none) http/tests/cache/cached-main-resource.html [ Timeout ]
+Bug(none) http/tests/cache/history-only-cached-subresource-loads-max-age-https.html [ Timeout ]
+Bug(none) http/tests/cache/iframe-304-crash.html [ Timeout ]
+Bug(none) http/tests/cache/network-error-during-revalidation.html [ Timeout ]
+Bug(none) http/tests/cache/post-redirect-get.php [ Timeout ]
+Bug(none) http/tests/cache/post-with-cached-subresources.php [ Timeout ]
+Bug(none) http/tests/cache/reload-main-resource.php [ Timeout ]
+Bug(none) http/tests/cache/stopped-revalidation.html [ Failure ]
+Bug(none) http/tests/cache/subresource-expiration-1.html [ Failure ]
+Bug(none) http/tests/cache/subresource-expiration-2.html [ Failure ]
+Bug(none) http/tests/cache/subresource-failover-to-network.html [ Failure ]
+Bug(none) http/tests/cache/subresource-fragment-identifier.html [ Failure ]
+Bug(none) http/tests/cache/sync-xhr-304.html [ Failure ]
+Bug(none) http/tests/cachestorage/serviceworker/credentials.html [ Failure ]
+Bug(none) http/tests/canvas/webgl/origin-clean-conformance.html [ Timeout ]
+Bug(none) http/tests/cookies/double-quoted-value-with-semi-colon.html [ Failure ]
+Bug(none) http/tests/cookies/http-get-cookie-set-in-js.html [ Failure ]
+Bug(none) http/tests/cookies/js-get-and-set-http-only-cookie.html [ Failure ]
+Bug(none) http/tests/cookies/js-set-null.html [ Failure ]
+Bug(none) http/tests/cookies/multiple-cookies.html [ Failure ]
+Bug(none) http/tests/cookies/same-site/basics.html [ Failure ]
+Bug(none) http/tests/cookies/same-site/popup-cross-site-post.html [ Failure ]
+Bug(none) http/tests/cookies/same-site/popup-cross-site.html [ Failure ]
+Bug(none) http/tests/cookies/same-site/popup-same-site-post.html [ Failure ]
+Bug(none) http/tests/cookies/same-site/popup-same-site.html [ Failure ]
+Bug(none) http/tests/cookies/simple-cookies-expired.html [ Failure ]
+Bug(none) http/tests/cookies/simple-cookies-max-age.html [ Failure ]
+Bug(none) http/tests/cookies/single-quoted-value.html [ Failure ]
+Bug(none) http/tests/credentialmanager/credentialscontainer-frame-errors.html [ Timeout ]
+Bug(none) http/tests/credentialmanager/passwordcredential-fetch.html [ Failure ]
+Bug(none) http/tests/css/border-image-loading.html [ Failure ]
+Bug(none) http/tests/css/css-image-loading.html [ Failure ]
+Bug(none) http/tests/css/font-face-src-cached.html [ Failure ]
+Bug(none) http/tests/css/image-value-cached.html [ Failure ]
+Bug(none) http/tests/css/mask-image-loading.html [ Failure ]
+Bug(none) http/tests/css/reflection-mask-image-loading.html [ Failure ]
+Bug(none) http/tests/csspaint/background-image-alpha.html [ Timeout ]
+Bug(none) http/tests/csspaint/background-image-multiple.html [ Timeout ]
+Bug(none) http/tests/csspaint/background-image-tiled.html [ Timeout ]
+Bug(none) http/tests/csspaint/invalid-image-constructor-error.html [ Timeout ]
+Bug(none) http/tests/csspaint/invalid-image-paint-error.html [ Timeout ]
+Bug(none) http/tests/csspaint/invalidation-background-image.html [ Failure ]
+Bug(none) http/tests/csspaint/invalidation-border-image.html [ Failure ]
+Bug(none) http/tests/csspaint/invalidation-content-image.html [ Failure ]
+Bug(none) http/tests/csspaint/overdraw.html [ Timeout ]
+Bug(none) http/tests/csspaint/paint-arguments.html [ Timeout ]
+Bug(none) http/tests/csspaint/paint-function-arguments.html [ Timeout ]
+Bug(none) http/tests/csspaint/paint2d-composite.html [ Timeout ]
+Bug(none) http/tests/csspaint/paint2d-gradient.html [ Timeout ]
+Bug(none) http/tests/csspaint/paint2d-image.html [ Timeout ]
+Bug(none) http/tests/csspaint/paint2d-paths.html [ Timeout ]
+Bug(none) http/tests/csspaint/paint2d-rects.html [ Timeout ]
+Bug(none) http/tests/csspaint/paint2d-shadows.html [ Timeout ]
+Bug(none) http/tests/csspaint/paint2d-transform.html [ Timeout ]
+Bug(none) http/tests/csspaint/paint2d-zoom.html [ Timeout ]
+Bug(none) http/tests/csspaint/parse-input-arguments.html [ Timeout ]
+Bug(none) http/tests/csspaint/registered-properties-in-custom-paint.html [ Timeout ]
+Bug(none) http/tests/csspaint/registerPaint.html [ Timeout ]
+Bug(none) http/tests/csspaint/style-background-image.html [ Timeout ]
+Bug(none) http/tests/csspaint/style-before-pseudo.html [ Timeout ]
+Bug(none) http/tests/csspaint/style-first-letter-pseudo.html [ Timeout ]
+Bug(none) http/tests/csspaint/valid-image-after-load.html [ Timeout ]
+Bug(none) http/tests/csspaint/valid-image-before-load.html [ Timeout ]
+Bug(none) http/tests/dom/create-contextual-fragment-from-bodyless-svg-document-range.html [ Timeout ]
+Bug(none) http/tests/download/basic-ascii.html [ Crash ]
+Bug(none) http/tests/download/literal-utf-8.html [ Crash ]
+Bug(none) http/tests/encoding/meta-switch-mid-parse-with-title.html [ Timeout ]
+Bug(none) http/tests/encoding/meta-switch-mid-parse.html [ Timeout ]
+Bug(none) http/tests/fetch/referrer/origin-when-cross-origin-serviceworker-from-document.html [ Failure ]
+Bug(none) http/tests/fetch/referrer/serviceworker-echo-referrer-from-default-document.html [ Failure ]
+Bug(none) http/tests/fetch/referrer/serviceworker-from-origin-only-document.html [ Failure ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/access-control-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/access-control.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/auth-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/auth-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/auth-nocors-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/auth-nocors.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/auth-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/auth.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/cookie-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/cookie-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/cookie-nocors-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/cookie-nocors.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/cookie-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/cookie.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/cors-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/cors-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/cors-preflight-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/cors-preflight-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/cors-preflight.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/cors-preflight2-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/cors-preflight2-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/cors-preflight2.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/cors.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/nocors-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/nocors-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/nocors.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/redirect-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/redirect-credentials-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/redirect-credentials-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/redirect-credentials.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/redirect-loop-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/redirect-loop-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/redirect-loop.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/redirect-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/redirect-nocors-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/redirect-nocors.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/redirect-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/redirect-password-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/redirect-password-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/redirect-password.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/redirect.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/scheme-blob-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/scheme-blob-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/scheme-blob.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/scheme-data-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/scheme-data-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker-proxied/thorough/scheme-data.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/block-mixed-content-base-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/block-mixed-content-nocors-base-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/body-mixin-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/body-mixin.html [ Failure ]
+Bug(none) http/tests/fetch/serviceworker/cache-override-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/cache-override.html [ Failure ]
+Bug(none) http/tests/fetch/serviceworker/fetch-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/fetch.html [ Failure ]
+Bug(none) http/tests/fetch/serviceworker/filtered-response-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/filtered-response-other-https.html [ Failure ]
+Bug(none) http/tests/fetch/serviceworker/filtered-response.html [ Failure ]
+Bug(none) http/tests/fetch/serviceworker/headers-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/headers-guard-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/headers-guard.html [ Failure ]
+Bug(none) http/tests/fetch/serviceworker/headers.html [ Failure ]
+Bug(none) http/tests/fetch/serviceworker/referrer-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/referrer.html [ Failure ]
+Bug(none) http/tests/fetch/serviceworker/request-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/request.html [ Failure ]
+Bug(none) http/tests/fetch/serviceworker/response-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/response-content-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/response-content.html [ Failure ]
+Bug(none) http/tests/fetch/serviceworker/response.html [ Failure ]
+Bug(none) http/tests/fetch/serviceworker/stream-reader-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/stream-reader.html [ Failure ]
+Bug(none) http/tests/fetch/serviceworker/thorough/access-control-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/access-control.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/auth-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/auth-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/auth-nocors-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/auth-nocors.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/auth-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/auth.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/cookie-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/cookie-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/cookie-nocors-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/cookie-nocors.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/cookie-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/cookie.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/cors-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/cors-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/cors-preflight-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/cors-preflight-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/cors-preflight.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/cors-preflight2-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/cors-preflight2-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/cors-preflight2.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/cors.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/nocors-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/nocors-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/nocors.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/redirect-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/redirect-credentials-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/redirect-credentials-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/redirect-credentials.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/redirect-loop-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/redirect-loop-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/redirect-loop.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/redirect-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/redirect-nocors-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/redirect-nocors.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/redirect-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/redirect-password-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/redirect-password-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/redirect-password.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/redirect.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/scheme-blob-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/scheme-blob-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/scheme-blob.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/scheme-data-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/scheme-data-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/serviceworker/thorough/scheme-data.html [ Timeout ]
+Bug(none) http/tests/fetch/window/block-mixed-content-base-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/block-mixed-content-nocors-base-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/body-mixin-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/body-mixin.html [ Failure ]
+Bug(none) http/tests/fetch/window/cache-override-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/fetch-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/fetch.html [ Failure ]
+Bug(none) http/tests/fetch/window/filtered-response-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/filtered-response-other-https.html [ Failure ]
+Bug(none) http/tests/fetch/window/headers-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/headers-guard-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/referrer-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/request-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/request.html [ Failure ]
+Bug(none) http/tests/fetch/window/response-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/response-content-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/response-content.html [ Failure ]
+Bug(none) http/tests/fetch/window/response.html [ Failure ]
+Bug(none) http/tests/fetch/window/stream-reader-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/stream-reader.html [ Failure ]
+Bug(none) http/tests/fetch/window/thorough/access-control-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/access-control.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/auth-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/auth-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/auth-nocors-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/auth-nocors.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/auth-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/auth.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/cookie-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/cookie-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/cookie-nocors-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/cookie-nocors.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/cookie-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/cookie.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/cors-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/cors-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/cors-preflight-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/cors-preflight-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/cors-preflight.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/cors-preflight2-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/cors-preflight2-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/cors-preflight2.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/cors.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/nocors-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/nocors-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/nocors.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/redirect-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/redirect-credentials-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/redirect-credentials-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/redirect-credentials.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/redirect-loop-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/redirect-loop-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/redirect-loop.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/redirect-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/redirect-nocors-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/redirect-nocors.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/redirect-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/redirect-password-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/redirect-password-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/redirect-password.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/redirect.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/scheme-blob-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/scheme-blob-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/scheme-blob.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/scheme-data-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/scheme-data-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/window/thorough/scheme-data.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/block-mixed-content-base-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/block-mixed-content-nocors-base-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/body-mixin-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/body-mixin.html [ Failure ]
+Bug(none) http/tests/fetch/workers/cache-override-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/fetch-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/fetch.html [ Failure ]
+Bug(none) http/tests/fetch/workers/filtered-response-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/filtered-response-other-https.html [ Failure ]
+Bug(none) http/tests/fetch/workers/headers-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/headers-guard-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/referrer-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/request-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/request.html [ Failure ]
+Bug(none) http/tests/fetch/workers/response-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/response-content-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/response-content.html [ Failure ]
+Bug(none) http/tests/fetch/workers/response.html [ Failure ]
+Bug(none) http/tests/fetch/workers/stream-reader-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/stream-reader.html [ Failure ]
+Bug(none) http/tests/fetch/workers/thorough/access-control-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/access-control.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/auth-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/auth-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/auth-nocors-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/auth-nocors.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/auth-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/auth.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/cookie-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/cookie-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/cookie-nocors-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/cookie-nocors.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/cookie-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/cookie.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/cors-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/cors-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/cors-preflight-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/cors-preflight-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/cors-preflight.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/cors-preflight2-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/cors-preflight2-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/cors-preflight2.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/cors.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/nocors-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/nocors-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/nocors.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/redirect-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/redirect-credentials-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/redirect-credentials-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/redirect-credentials.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/redirect-loop-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/redirect-loop-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/redirect-loop.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/redirect-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/redirect-nocors-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/redirect-nocors.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/redirect-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/redirect-password-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/redirect-password-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/redirect-password.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/redirect.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/scheme-blob-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/scheme-blob-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/scheme-blob.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/scheme-data-base-https-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/scheme-data-other-https.html [ Timeout ]
+Bug(none) http/tests/fetch/workers/thorough/scheme-data.html [ Timeout ]
+Bug(none) http/tests/fileapi/blob-url-in-subframe.html [ Timeout ]
+Bug(none) http/tests/history/push-state-in-new-frame.html [ Timeout ]
+Bug(none) http/tests/htmlimports/import-cors-credentials.html [ Failure ]
+Bug(none) http/tests/https/verify-ssl-enabled.php [ Timeout ]
+Bug(none) http/tests/inspector-enabled/console-stack-overflow-source-url.html [ Timeout ]
+Bug(none) http/tests/inspector-enabled/database-open.html [ Timeout ]
+Bug(none) http/tests/inspector-enabled/dedicated-workers-list.html [ Timeout ]
+Bug(none) http/tests/inspector-enabled/shadow-dom-rules.html [ Timeout ]
+Bug(none) http/tests/inspector-protocol/cookies-protocol-test.html [ Timeout ]
+Bug(none) http/tests/inspector-protocol/network-data-length.html [ Failure Timeout ]
+Bug(none) http/tests/inspector-protocol/network-fetch-content-with-error-status-code.html [ Timeout ]
+Bug(none) http/tests/inspector-protocol/override-referrer.html [ Timeout ]
+Bug(none) http/tests/inspector-protocol/request-mixed-content-status-blockable.html [ Timeout ]
+Bug(none) http/tests/inspector-protocol/request-mixed-content-status-none.html [ Timeout ]
+Bug(none) http/tests/inspector-protocol/request-mixed-content-status-optionally-blockable.html [ Timeout ]
+Bug(none) http/tests/inspector-protocol/request-referrer-policy.html [ Timeout ]
+Bug(none) http/tests/inspector-protocol/websocket/websocket-user-agent-override.html [ Timeout ]
+Bug(none) http/tests/inspector/appcache/appcache-iframe-manifests.html [ Timeout ]
+Bug(none) http/tests/inspector/appcache/appcache-manifest-with-non-existing-file.html [ Timeout ]
+Bug(none) http/tests/inspector/appcache/appcache-swap.html [ Timeout ]
+Bug(none) http/tests/inspector/audits/set-cookie-header-audit-no-false-positive.html [ Timeout ]
+Bug(none) http/tests/inspector/console-resource-errors.html [ Timeout ]
+Bug(none) http/tests/inspector/console-xhr-logging.html [ Failure ]
+Bug(none) http/tests/inspector/elements/event-listeners-framework-with-service-worker.html [ Failure ]
+Bug(none) http/tests/inspector/extensions-headers.html [ Failure ]
+Bug(none) http/tests/inspector/extensions-ignore-cache.html [ Timeout ]
+Bug(none) http/tests/inspector/extensions-useragent.html [ Failure ]
+Bug(none) http/tests/inspector/fragment.html [ Timeout ]
+Bug(none) http/tests/inspector/network-preflight-options.html [ Timeout ]
+Bug(none) http/tests/inspector/network/download.html [ Crash ]
+Bug(none) http/tests/inspector/network/from-disk-cache-timing.html [ Timeout ]
+Bug(none) http/tests/inspector/network/har-content.html [ Timeout ]
+Bug(none) http/tests/inspector/network/load-resource-for-frontend.html [ Timeout ]
+Bug(none) http/tests/inspector/network/network-content-replacement-xhr.html [ Timeout ]
+Bug(none) http/tests/inspector/network/network-cyrillic-xhr.html [ Timeout ]
+Bug(none) http/tests/inspector/network/network-datareceived.html [ Failure ]
+Bug(none) http/tests/inspector/network/network-empty-xhr.html [ Timeout ]
+Bug(none) http/tests/inspector/network/network-initiator.html [ Timeout ]
+Bug(none) http/tests/inspector/network/network-request-type.html [ Timeout ]
+Bug(none) http/tests/inspector/network/network-xhr-binary-content.html [ Failure ]
+Bug(none) http/tests/inspector/network/network-xhr-replay.html [ Timeout ]
+Bug(none) http/tests/inspector/network/network-xhr-same-url-as-main-resource.html [ Timeout ]
+Bug(none) http/tests/inspector/network/network-xhr-sync.html [ Timeout ]
+Bug(none) http/tests/inspector/network/ping-response.html [ Failure ]
+Bug(none) http/tests/inspector/network/resource-priority.html [ Timeout ]
+Bug(none) http/tests/inspector/network/warning-for-long-cookie.html [ Failure ]
+Bug(none) http/tests/inspector/network/x-frame-options-deny.html [ Failure ]
+Bug(none) http/tests/inspector/persistence/automapping-sourcemap-nameclash.html [ Failure ]
+Bug(none) http/tests/inspector/persistence/persistence-do-not-overwrite-css.html [ Failure ]
+Bug(none) http/tests/inspector/persistence/persistence-merge-editor-tabs.html [ Failure ]
+Bug(none) http/tests/inspector/persistence/persistence-mimetype-on-rename.html [ Failure ]
+Bug(none) http/tests/inspector/persistence/persistence-move-breakpoints-on-reload.html [ Failure ]
+Bug(none) http/tests/inspector/persistence/persistence-move-breakpoints.html [ Failure ]
+Bug(none) http/tests/inspector/persistence/persistence-navigator.html [ Timeout ]
+Bug(none) http/tests/inspector/persistence/persistence-search-across-all-files.html [ Failure Timeout ]
+Bug(none) http/tests/inspector/persistence/persistence-sourceframe-messages.html [ Failure ]
+Bug(none) http/tests/inspector/persistence/persistence-sync-content-nodejs.html [ Failure ]
+Bug(none) http/tests/inspector/persistence/persistence-sync-content.html [ Failure ]
+Bug(none) http/tests/inspector/persistence/persistence-tabbed-editor-tabs-order.html [ Failure ]
+Bug(none) http/tests/inspector/resource-har-conversion.html [ Failure Timeout ]
+Bug(none) http/tests/inspector/resource-parameters-ipv6.html [ Timeout ]
+Bug(none) http/tests/inspector/resource-parameters.html [ Failure ]
+Bug(none) http/tests/inspector/resource-tree/cached-resource-metadata.html [ Failure ]
+Bug(none) http/tests/inspector/resource-tree/resource-tree-no-xhrs.html [ Timeout ]
+Bug(none) http/tests/inspector/search/sources-search-scope-in-files.html [ Failure ]
+Bug(none) http/tests/inspector/search/sources-search-scope-many-projects.html [ Failure ]
+Bug(none) http/tests/inspector/search/sources-search-scope.html [ Failure Timeout ]
+Bug(none) http/tests/inspector/service-workers/lazy-addeventlisteners.html [ Failure ]
+Bug(none) http/tests/inspector/service-workers/service-worker-agents.html [ Failure ]
+Bug(none) http/tests/inspector/service-workers/service-worker-manager.html [ Failure ]
+Bug(none) http/tests/inspector/service-workers/service-worker-pause.html [ Failure ]
+Bug(none) http/tests/inspector/service-workers/service-workers-bypass-for-network-redirect.html [ Timeout ]
+Bug(none) http/tests/inspector/service-workers/service-workers-force-update-on-page-load.html [ Failure ]
+Bug(none) http/tests/inspector/service-workers/service-workers-navigation-preload.html [ Failure ]
+Bug(none) http/tests/inspector/service-workers/service-workers-redundant.html [ Failure ]
+Bug(none) http/tests/inspector/service-workers/service-workers-view.html [ Failure ]
+Bug(none) http/tests/inspector/service-workers/user-agent-override.html [ Failure ]
+Bug(none) http/tests/inspector/sources/debugger/pause-in-removed-frame.html [ Timeout ]
+Bug(none) http/tests/inspector/sources/ui-source-code-metadata.html [ Failure ]
+Bug(none) http/tests/inspector/workers-on-navigation.html [ Timeout ]
+Bug(none) http/tests/linkHeader/link-preconnect-schemeless.https.php [ Timeout ]
+Bug(none) http/tests/loading/307-after-303-after-post.html [ Failure ]
+Bug(none) http/tests/loading/bad-scheme-subframe.html [ Failure ]
+Bug(none) http/tests/loading/pdf-commit-load-callbacks.html [ Timeout ]
+Bug(none) http/tests/loading/preload-image-sizes-2x.html [ Failure ]
+Bug(none) http/tests/loading/preload-picture-sizes-2x.html [ Failure ]
+Bug(none) http/tests/loading/redirect-with-no-location-crash.html [ Timeout ]
+Bug(none) http/tests/loading/text-content-type-with-binary-extension.html [ Failure ]
+Bug(none) http/tests/loading/window-open-onblur-reentrancy.html [ Timeout ]
+Bug(none) http/tests/local/blob/send-data-blob.html [ Failure ]
+Bug(none) http/tests/local/blob/send-hybrid-blob.html [ Failure ]
+Bug(none) http/tests/local/blob/send-sliced-data-blob.html [ Failure ]
+Bug(none) http/tests/local/fileapi/file-last-modified-after-delete.html [ Failure ]
+Bug(none) http/tests/local/fileapi/file-last-modified.html [ Failure ]
+Bug(none) http/tests/local/fileapi/send-dragged-file.html [ Failure ]
+Bug(none) http/tests/local/fileapi/send-sliced-dragged-file.html [ Failure ]
+Bug(none) http/tests/local/formdata/formdata-methods.html [ Failure ]
+Bug(none) http/tests/local/formdata/send-form-data-constructed-from-form.html [ Timeout ]
+Bug(none) http/tests/local/formdata/send-form-data-with-bad-string.html [ Failure ]
+Bug(none) http/tests/local/formdata/send-form-data-with-filename.html [ Failure ]
+Bug(none) http/tests/local/formdata/send-form-data-with-null-string.html [ Failure ]
+Bug(none) http/tests/local/formdata/send-form-data-with-sliced-file.html [ Failure ]
+Bug(none) http/tests/local/formdata/send-form-data-with-string-containing-null.html [ Failure ]
+Bug(none) http/tests/local/formdata/send-form-data.html [ Failure ]
+Bug(none) http/tests/local/formdata/upload-events.html [ Failure ]
+Bug(none) http/tests/local/serviceworker/fetch-request-body-file.html [ Timeout ]
+Bug(none) http/tests/media/audio-seekable-contains-zero-without-ranges.html [ Timeout ]
+Bug(none) http/tests/media/audio-timeline-seek-outside-seekable.html [ Timeout ]
+Bug(none) http/tests/media/autoplay-crossorigin.html [ Timeout ]
+Bug(none) http/tests/media/controls/controls-list-add-hide.html [ Timeout ]
+Bug(none) http/tests/media/controls/controls-list-remove-show.html [ Timeout ]
+Bug(none) http/tests/media/encrypted-media/encrypted-media-encrypted-event-same-origin.html [ Timeout ]
+Bug(none) http/tests/media/gc-while-network-loading.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-addsourcebuffer.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-append-buffer.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-appendwindow.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-avtracks.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-buffered.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-config-change-webm-a-bitrate.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-config-change-webm-av-audio-bitrate.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-config-change-webm-av-framesize.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-config-change-webm-av-video-bitrate.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-detach.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-duration-boundaryconditions.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-duration.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-errors.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-getvideoplaybackquality.html [ Failure Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-initsegmentreceived-alg.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-play-then-seek-back.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-play.html [ Failure Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-precise-duration.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-redundant-seek.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-remove.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-removesourcebuffer.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-seek-beyond-duration.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-seek-during-pending-seek.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-seekable.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-sequencemode-append-buffer.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-sequencemode-crbug-616565.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-sourcebuffer-mode.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-sourcebuffer-trackdefaults.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-sourcebufferlist.html [ Timeout ]
+Bug(none) http/tests/media/media-source/mediasource-timestamp-offset.html [ Timeout ]
+Bug(none) http/tests/media/media-source/stream_memory_tests/mediasource-appendbuffer-quota-exceeded-default-buffers.html [ Timeout ]
+Bug(none) http/tests/media/mixed-range-response.html [ Timeout ]
+Bug(none) http/tests/media/preload-conditions.html [ Timeout ]
+Bug(none) http/tests/media/progress-events-generated-correctly.html [ Timeout ]
+Bug(none) http/tests/media/reload-after-dialog.html [ Timeout ]
+Bug(none) http/tests/media/remove-while-loading.html [ Timeout ]
+Bug(none) http/tests/media/video-buffered-range-contains-currentTime.html [ Timeout ]
+Bug(none) http/tests/media/video-buffered.html [ Timeout ]
+Bug(none) http/tests/media/video-cancel-load.html [ Timeout ]
+Bug(none) http/tests/media/video-controls-download-button-displayed.html [ Timeout ]
+Bug(none) http/tests/media/video-controls-download-button-not-displayed-hide-download-ui.html [ Timeout ]
+Bug(none) http/tests/media/video-controls-download-button-not-displayed-mediastream.html [ Timeout ]
+Bug(none) http/tests/media/video-controls-download-button-saves-media.html [ Timeout ]
+Bug(none) http/tests/media/video-controls-overflow-menu-correct-ordering.html [ Timeout ]
+Bug(none) http/tests/media/video-controls-overflow-menu-download-button.html [ Timeout ]
+Bug(none) http/tests/media/video-controls-overflow-menu-updates-appropriately.html [ Timeout ]
+Bug(none) http/tests/media/video-cookie.html [ Timeout ]
+Bug(none) http/tests/media/video-error-abort.html [ Timeout ]
+Bug(none) http/tests/media/video-in-iframe-crash.html [ Crash ]
+Bug(none) http/tests/media/video-load-metadata-decode-error.html [ Timeout ]
+Bug(none) http/tests/media/video-load-suspend.html [ Timeout ]
+Bug(none) http/tests/media/video-load-twice.html [ Timeout ]
+Bug(none) http/tests/media/video-load-with-userpass.html [ Timeout ]
+Bug(none) http/tests/media/video-play-progress.html [ Timeout ]
+Bug(none) http/tests/media/video-play-stall-before-meta-data.html [ Timeout ]
+Bug(none) http/tests/media/video-preload-metadata.html [ Timeout ]
+Bug(none) http/tests/media/video-query-url.html [ Timeout ]
+Bug(none) http/tests/media/video-referer.html [ Timeout ]
+Bug(none) http/tests/media/video-seek-to-duration.html [ Timeout ]
+Bug(none) http/tests/media/video-seek-to-middle.html [ Timeout ]
+Bug(none) http/tests/media/video-served-as-text.html [ Timeout ]
+Bug(none) http/tests/media/video-throttled-load-metadata.html [ Timeout ]
+Bug(none) http/tests/media/video-useragent.html [ Timeout ]
+Bug(none) http/tests/misc/adopt-iframe-src-attr-after-remove.html [ Timeout ]
+Bug(none) http/tests/misc/createElementNamespace1.xml [ Failure ]
+Bug(none) http/tests/misc/detach-and-location-change-in-onload.html [ Timeout ]
+Bug(none) http/tests/misc/image-checks-for-accept.html [ Failure ]
+Bug(none) http/tests/misc/link-preconnect-schemeless.https.html [ Timeout ]
+Bug(none) http/tests/misc/link-rel-prefetch.html [ Failure ]
+Bug(none) http/tests/misc/onload-detach-during-csp-frame-src-none.html [ Failure ]
+Bug(none) http/tests/misc/redirect-to-about-blank.html [ Timeout ]
+Bug(none) http/tests/misc/resource-timing-sizes-cache-worker.html [ Failure ]
+Bug(none) http/tests/misc/resource-timing-sizes-cache.html [ Failure ]
+Bug(none) http/tests/misc/resource-timing-sizes-content-encoding-worker.html [ Failure ]
+Bug(none) http/tests/misc/resource-timing-sizes-content-encoding.html [ Failure ]
+Bug(none) http/tests/misc/resource-timing-sizes-redirect-worker.html [ Failure ]
+Bug(none) http/tests/misc/resource-timing-sizes-redirect.html [ Failure ]
+Bug(none) http/tests/misc/resource-timing-sizes-sync-xhr-transfer-size.html [ Timeout ]
+Bug(none) http/tests/misc/resource-timing-sizes-tags.html [ Timeout ]
+Bug(none) http/tests/misc/resource-timing-sizes-xhr-fetch-worker.html [ Failure ]
+Bug(none) http/tests/misc/resource-timing-sizes-xhr-fetch.html [ Timeout ]
+Bug(none) http/tests/misc/tests-finishing-simultaneously.html [ Timeout ]
+Bug(none) http/tests/misc/webtiming-ssl.php [ Timeout ]
+Bug(none) http/tests/misc/xhtml.php [ Failure ]
+Bug(none) http/tests/navigation/image-load-in-unload-handler.html [ Failure ]
+Bug(none) http/tests/navigation/multiple-back-forward-entries.html [ Timeout ]
+Bug(none) http/tests/navigation/navigation-interrupted-by-fragment.html [ Timeout ]
+Bug(none) http/tests/navigation/onload-navigation-iframe-2.html [ Timeout ]
+Bug(none) http/tests/navigation/onload-navigation-iframe-timeout.html [ Timeout ]
+Bug(none) http/tests/navigation/onload-navigation-iframe.html [ Timeout ]
+Bug(none) http/tests/navigation/ping-cookie.html [ Failure ]
+Bug(none) http/tests/navigation/ping-cross-origin-from-https.html [ Timeout ]
+Bug(none) http/tests/navigation/ping-same-origin.html [ Failure ]
+Bug(none) http/tests/navigation/post-frames-goback1.html [ Failure ]
+Bug(none) http/tests/navigation/post-goback1.html [ Failure ]
+Bug(none) http/tests/navigation/pushstate-whitelisted-at-blob-denied.html [ Timeout ]
+Bug(none) http/tests/navigation/redirect-on-back-updates-history-item.html [ Timeout ]
+Bug(none) http/tests/navigation/redirect-on-reload-updates-history-item.html [ Timeout ]
+Bug(none) http/tests/navigation/rename-subframe-goback.html [ Failure ]
+Bug(none) http/tests/navigation/same-and-different-back.html [ Failure ]
+Bug(none) http/tests/navigation/same-url-iframes-defer-crash.html [ Timeout ]
+Bug(none) http/tests/navigation/start-load-during-provisional-loader-detach.html [ Timeout ]
+Bug(none) http/tests/notifications/request-permission-in-service-workers.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworker-notification-event.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworker-notification-properties.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworker-notificationclick-event-action-reflection.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworker-notificationclick-event-data-reflection.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworker-notificationclick-event-reply-reflection.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworker-notificationclick-openwindow-crash.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworker-notificationclose-event-data-reflection.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworker-throw-constructor.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-document-actions-throw.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-document-click.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-document-close.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-document-data-invalid.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-document-data-throw.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-document-direction.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-document-fetch-resources.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-document-image-404.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-document-image-redirect-loop.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-document-image-redirect.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-document-image-slow-404.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-document-image-slow.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-document-no-permission.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-document-not-activated.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-document-vibrate-throw.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-get-close.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-get-empty.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-get-filter.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-get-from-service-worker.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-get-replacement.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-get.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-page-notification-fetch-resources.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-service-worker-click.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-service-worker-fetch-resources.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-service-worker-get-filter.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-service-worker-get.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-service-worker-image-404.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-service-worker-image-abort.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-service-worker-image-redirect-loop.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-service-worker-image-redirect.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-service-worker-image-slow-404.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-service-worker-image-slow.html [ Failure ]
+Bug(none) http/tests/notifications/serviceworkerregistration-service-worker-no-permission.html [ Failure ]
+Bug(none) http/tests/origin_trials/sample-api-workers.html [ Failure ]
+Bug(none) http/tests/origin_trials/webexposed/budget-api-origin-trial-interfaces.html [ Failure ]
+Bug(none) http/tests/origin_trials/webexposed/foreignfetch-origin-trial-interfaces.html [ Failure ]
+Bug(none) http/tests/payments/payment-app-interfaces.html [ Failure ]
+Bug(none) http/tests/payments/payment-instruments.html [ Failure ]
+Bug(none) http/tests/payments/payment-request-event.html [ Failure ]
+Bug(none) http/tests/permissions/test-api-surface.html [ Failure ]
+Bug(none) http/tests/permissions/test-query.html [ Failure ]
+Bug(none) http/tests/push_messaging/application-server-key-format-test.html [ Failure ]
+Bug(none) http/tests/push_messaging/application-server-key-standard-endpoint.html [ Failure ]
+Bug(none) http/tests/push_messaging/get-subscription-in-document.html [ Failure ]
+Bug(none) http/tests/push_messaging/get-subscription-in-service-worker.html [ Failure ]
+Bug(none) http/tests/push_messaging/permission-state-denied-in-document.html [ Failure ]
+Bug(none) http/tests/push_messaging/permission-state-denied-in-service-worker.html [ Failure ]
+Bug(none) http/tests/push_messaging/permission-state-exception-in-document.html [ Failure ]
+Bug(none) http/tests/push_messaging/permission-state-exception-in-service-worker.html [ Failure ]
+Bug(none) http/tests/push_messaging/permission-state-granted-in-service-worker.html [ Failure ]
+Bug(none) http/tests/push_messaging/permission-state-prompt-in-document.html [ Failure ]
+Bug(none) http/tests/push_messaging/permission-state-prompt-in-service-worker.html [ Failure ]
+Bug(none) http/tests/push_messaging/push-subscription-options.html [ Failure ]
+Bug(none) http/tests/push_messaging/push-subscription-stringification.html [ Failure ]
+Bug(none) http/tests/push_messaging/pushevent-extendable-event.html [ Failure ]
+Bug(none) http/tests/push_messaging/pushmessagedata.html [ Failure ]
+Bug(none) http/tests/push_messaging/subscribe-encryption-public-key.html [ Failure ]
+Bug(none) http/tests/push_messaging/subscribe-failure-mismatched-sender-id.html [ Failure ]
+Bug(none) http/tests/push_messaging/subscribe-failure-no-manifest-in-service-worker.html [ Failure ]
+Bug(none) http/tests/push_messaging/subscribe-failure-permission-default-in-service-worker.html [ Failure ]
+Bug(none) http/tests/push_messaging/subscribe-failure-permission-denied-in-document.html [ Failure ]
+Bug(none) http/tests/push_messaging/subscribe-failure-permission-denied-in-service-worker.html [ Failure ]
+Bug(none) http/tests/push_messaging/subscribe-failure-worker-not-activated.html [ Failure ]
+Bug(none) http/tests/push_messaging/subscribe-success-in-document.html [ Failure ]
+Bug(none) http/tests/push_messaging/subscribe-success-in-service-worker.html [ Failure ]
+Bug(none) http/tests/push_messaging/unsubscribe-in-document.html [ Failure ]
+Bug(none) http/tests/push_messaging/unsubscribe-in-service-worker.html [ Failure ]
+Bug(none) http/tests/security/contentSecurityPolicy/1.1/form-action-src-get-blocked-with-redirect.html [ Failure ]
+Bug(none) http/tests/security/contentSecurityPolicy/1.1/form-action-src-redirect-blocked.html [ Failure ]
+Bug(none) http/tests/security/contentSecurityPolicy/block-mixed-content-hides-warning.html [ Failure ]
+Bug(none) http/tests/security/contentSecurityPolicy/cascade/same-origin-window-open.html [ Timeout ]
+Bug(none) http/tests/security/contentSecurityPolicy/cascade/same-origin-with-own-policy-window-open.html [ Timeout ]
+Bug(none) http/tests/security/contentSecurityPolicy/cascade/same-origin-with-own-policy.html [ Timeout ]
+Bug(none) http/tests/security/contentSecurityPolicy/cascade/same-origin.html [ Timeout ]
+Bug(none) http/tests/security/contentSecurityPolicy/frame-src-child-frame-navigates-to-blocked-origin.html [ Timeout ]
+Bug(none) http/tests/security/contentSecurityPolicy/frame-src-cross-origin-load.html [ Failure ]
+Bug(none) http/tests/security/contentSecurityPolicy/frame-src-redirect-blocked.html [ Failure ]
+Bug(none) http/tests/security/contentSecurityPolicy/register-bypassing-scheme-script.https.html [ Timeout ]
+Bug(none) http/tests/security/contentSecurityPolicy/report-same-origin-with-cookies.php [ Failure ]
+Bug(none) http/tests/security/contentSecurityPolicy/script-src-star-cross-scheme.html [ Failure ]
+Bug(none) http/tests/security/contentSecurityPolicy/source-list-parsing-10.html [ Failure ]
+Bug(none) http/tests/security/cookies/first-party-cookie-allow-xslt.xml [ Failure ]
+Bug(none) http/tests/security/cookies/third-party-cookie-blocking-main-frame.html [ Failure ]
+Bug(none) http/tests/security/cookies/third-party-cookie-blocking-worker.html [ Failure ]
+Bug(none) http/tests/security/cookies/xmlhttprequest.html [ Timeout ]
+Bug(none) http/tests/security/cors-rfc1918/addressspace-serviceworker-basic.html [ Timeout ]
+Bug(none) http/tests/security/cross-frame-access-parent-explicit-domain-isolated-world.html [ Timeout ]
+Bug(none) http/tests/security/cross-frame-access-parent-isolated-world.html [ Timeout ]
+Bug(none) http/tests/security/cross-frame-access-protocol-explicit-domain.html [ Timeout ]
+Bug(none) http/tests/security/cross-frame-access-protocol.html [ Timeout ]
+Bug(none) http/tests/security/cross-origin-createImageBitmap.html [ Timeout ]
+Bug(none) http/tests/security/cross-origin-OffscreenCanvas2D-transferToImageBitmap.html [ Timeout ]
+Bug(none) http/tests/security/cross-origin-OffscreenCanvasWebGL-texImage2D.html [ Timeout ]
+Bug(none) http/tests/security/detached-window-cross-origin-access.html [ Timeout ]
+Bug(none) http/tests/security/document-all.html [ Failure ]
+Bug(none) http/tests/security/img-crossorigin-cookies.html [ Failure ]
+Bug(none) http/tests/security/img-redirect-to-crossorigin-credentials.html [ Failure ]
+Bug(none) http/tests/security/listener/xss-XMLHttpRequest-addEventListener.html [ Timeout ]
+Bug(none) http/tests/security/local-video-source-from-remote.html [ Timeout ]
+Bug(none) http/tests/security/location-change-from-detached-DOMWindow.html [ Timeout ]
+Bug(none) http/tests/security/media-element-audio-source-node-cross-origin-allowed.html [ Timeout ]
+Bug(none) http/tests/security/media-element-audio-source-node-cross-origin-with-credentials.html [ Timeout ]
+Bug(none) http/tests/security/media-element-audio-source-node-cross-origin.html [ Timeout ]
+Bug(none) http/tests/security/media-element-audio-source-node-same-origin.html [ Timeout ]
+Bug(none) http/tests/security/mime-type-execute-as-html-01.html [ Failure ]
+Bug(none) http/tests/security/mime-type-execute-as-html-04.html [ Failure ]
+Bug(none) http/tests/security/mixedContent/about-blank-iframe-in-main-frame.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/active-subresource-in-http-iframe-not-blocked.https.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/active-subresource-in-iframe-blocked.https.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/blob-url-in-iframe.html [ Failure Timeout ]
+Bug(none) http/tests/security/mixedContent/blob-url-script-in-data-iframe.https.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/blob-url-script-in-sandboxed-iframe.https.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/blocked-blob-url-script-in-data-iframe.https.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/data-url-iframe-in-main-frame.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/data-url-script-in-data-iframe.https.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/filesystem-url-in-iframe.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-async-post-xhr-blocked.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-audio-video-in-main-frame.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-css-image-with-reload.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-css-in-iframe.html [ Failure ]
+Bug(none) http/tests/security/mixedContent/insecure-css-in-main-frame.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-css-resources.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-empty-srcset-in-main-frame-blocked.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-eventsource-in-main-frame.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-fetch-blocked.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-font-in-main-frame.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-formSubmission-in-invisible-DOM.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-formSubmission-in-main-frame-allowed.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-formSubmission-in-main-frame-blocked.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-formSubmission-in-main-frame-javascript-allowed.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-formSubmission-in-main-frame.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-frame-in-data-iframe-in-main-frame-blocked.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-iframe-in-iframe.html [ Failure ]
+Bug(none) http/tests/security/mixedContent/insecure-iframe-in-main-frame-allowed.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-iframe-in-main-frame-blocked.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-iframe-in-main-frame.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-iframe-with-hsts.https.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-image-in-iframe.html [ Failure ]
+Bug(none) http/tests/security/mixedContent/insecure-image-in-main-frame-allowed.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-image-in-main-frame-blocked.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-image-in-main-frame.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-localhost-allowed.https.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-picture-in-main-frame-blocked.https.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-plugin-in-iframe.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-prefetch-in-main-frame.html [ Failure ]
+Bug(none) http/tests/security/mixedContent/insecure-script-in-data-iframe-in-main-frame-blocked.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-script-in-iframe.html [ Failure ]
+Bug(none) http/tests/security/mixedContent/insecure-script-in-main-frame-allowed.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-script-in-main-frame-blocked.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-script-through-redirection.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-srcset-in-main-frame-blocked.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-sync-post-xhr-allowed.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-sync-post-xhr-blocked.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-texttrack-in-main-frame-blocked.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/insecure-xhr-in-main-frame.https.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/nonwebby-scheme-in-iframe-allowed.https.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/preload-insecure-image-in-main-frame-blocked.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/redirect-http-to-https-iframe-in-main-frame.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/redirect-http-to-https-script-in-iframe.html [ Failure ]
+Bug(none) http/tests/security/mixedContent/redirect-https-to-http-iframe-in-main-frame.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/redirect-https-to-http-script-in-iframe.html [ Failure ]
+Bug(none) http/tests/security/mixedContent/strict-mode-image-blocked.https.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/strict-mode-image-in-frame-blocked.https.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/strict-mode-image-no-policy.https.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/strict-mode-image-reportonly.https.php [ Timeout ]
+Bug(none) http/tests/security/mixedContent/strict-mode-via-pref-image-blocked.https.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/strict-mode-websocket-blocked.https.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/websocket/insecure-websocket-in-sandbox-in-secure-page.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/websocket/insecure-websocket-in-secure-page-allowed.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/websocket/insecure-websocket-in-secure-page-worker-allowed.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/websocket/insecure-websocket-in-secure-page-worker.html [ Timeout ]
+Bug(none) http/tests/security/mixedContent/websocket/insecure-websocket-in-secure-page.html [ Timeout ]
+Bug(none) http/tests/security/no-indexeddb-from-sandbox.html [ Failure ]
+Bug(none) http/tests/security/no-popup-from-sandbox-top.html [ Failure ]
+Bug(none) http/tests/security/no-popup-from-sandbox.html [ Failure ]
+Bug(none) http/tests/security/no-referrer.html [ Timeout ]
+Bug(none) http/tests/security/offscreen-canvas-worker-read-blocked-by-setting.html [ Timeout ]
+Bug(none) http/tests/security/opened-document-security-origin-resets-on-navigation.html [ Timeout ]
+Bug(none) http/tests/security/originHeader/origin-header-for-https.html [ Timeout ]
+Bug(none) http/tests/security/popup-allowed-by-sandbox-can-navigate.html [ Failure ]
+Bug(none) http/tests/security/popup-allowed-by-sandbox-is-sandboxed-control.html [ Failure ]
+Bug(none) http/tests/security/popup-allowed-by-sandbox-is-sandboxed.html [ Failure ]
+Bug(none) http/tests/security/popup-allowed-by-sandbox-when-allowed.html [ Failure ]
+Bug(none) http/tests/security/powerfulFeatureRestrictions/geolocation-on-sandboxed-insecure-origin.html [ Timeout ]
+Bug(none) http/tests/security/powerfulFeatureRestrictions/geolocation-on-secure-origin-in-insecure-origin.html [ Timeout ]
+Bug(none) http/tests/security/powerfulFeatureRestrictions/geolocation-on-secure-origin-in-secure-origin.html [ Timeout ]
+Bug(none) http/tests/security/powerfulFeatureRestrictions/webshare-on-insecure-origin.html [ Timeout ]
+Bug(none) http/tests/security/referrer-on-client-redirect.html [ Timeout ]
+Bug(none) http/tests/security/referrer-policy-attribute-anchor-no-referrer-when-downgrade.html [ Timeout ]
+Bug(none) http/tests/security/referrer-policy-attribute-area-no-referrer-when-downgrade.html [ Timeout ]
+Bug(none) http/tests/security/referrer-policy-attribute-iframe-no-referrer-when-downgrade.html [ Timeout ]
+Bug(none) http/tests/security/referrer-policy-attribute-img-no-referrer-when-downgrade.html [ Timeout ]
+Bug(none) http/tests/security/referrer-policy-conflicting-policies.html [ Timeout ]
+Bug(none) http/tests/security/referrer-policy-https-always.html [ Timeout ]
+Bug(none) http/tests/security/referrer-policy-https-default.html [ Timeout ]
+Bug(none) http/tests/security/referrer-policy-https-never.html [ Timeout ]
+Bug(none) http/tests/security/referrer-policy-https-no-referrer-when-downgrade.html [ Timeout ]
+Bug(none) http/tests/security/referrer-policy-https-no-referrer.html [ Timeout ]
+Bug(none) http/tests/security/referrer-policy-https-origin-when-crossorigin.html [ Timeout ]
+Bug(none) http/tests/security/referrer-policy-https-origin.html [ Timeout ]
+Bug(none) http/tests/security/referrer-policy-https-unsafe-url.html [ Timeout ]
+Bug(none) http/tests/security/referrer-policy-redirect-link.html [ Timeout ]
+Bug(none) http/tests/security/referrer-policy-redirect.html [ Timeout ]
+Bug(none) http/tests/security/referrerPolicyHeader/basic-header-cross-origin-with-origin-when-cross-origin.php [ Timeout ]
+Bug(none) http/tests/security/referrerPolicyHeader/basic-header-cross-origin-with-origin.php [ Timeout ]
+Bug(none) http/tests/security/referrerPolicyHeader/basic-header-downgrade-with-no-referrer-when-downgrade.https.php [ Timeout ]
+Bug(none) http/tests/security/referrerPolicyHeader/basic-header-no-downgrade-with-no-referrer-when-downgrade.https.php [ Timeout ]
+Bug(none) http/tests/security/referrerPolicyHeader/basic-header-unsafe-url.https.php [ Timeout ]
+Bug(none) http/tests/security/referrerPolicyHeader/legacy-always.php [ Timeout ]
+Bug(none) http/tests/security/referrerPolicyHeader/legacy-default.php [ Timeout ]
+Bug(none) http/tests/security/referrerPolicyHeader/legacy-never.php [ Timeout ]
+Bug(none) http/tests/security/referrerPolicyHeader/legacy-origin-when-crossorigin.php [ Timeout ]
+Bug(none) http/tests/security/referrerPolicyHeader/referrer-policy-cross-origin-redirect.php [ Timeout ]
+Bug(none) http/tests/security/referrerPolicyHeader/referrer-policy-header-on-cross-origin-redirect-response.https.html [ Timeout ]
+Bug(none) http/tests/security/sandboxed-opener-can-close-window.html [ Failure ]
+Bug(none) http/tests/security/secureContexts/authenticated.html [ Timeout ]
+Bug(none) http/tests/security/secureContexts/authenticated_sandbox.html [ Timeout ]
+Bug(none) http/tests/security/secureContexts/authenticated_srcdoc.html [ Timeout ]
+Bug(none) http/tests/security/secureContexts/authenticated_worker.https.html [ Timeout ]
+Bug(none) http/tests/security/secureContexts/unauthenticated.html [ Timeout ]
+Bug(none) http/tests/security/secureContexts/unauthenticated_sandbox.html [ Timeout ]
+Bug(none) http/tests/security/secureContexts/unauthenticated_srcdoc.html [ Timeout ]
+Bug(none) http/tests/security/secureContexts/unauthenticated_worker.html [ Timeout ]
+Bug(none) http/tests/security/suborigins/suborigin-cookies.php [ Timeout ]
+Bug(none) http/tests/security/suborigins/suborigin-service-worker-fetch-event.html [ Timeout ]
+Bug(none) http/tests/security/suborigins/suborigin-service-worker-no-xorigin-caching.html [ Timeout ]
+Bug(none) http/tests/security/suborigins/suborigin-unsafe-cookies.php [ Timeout ]
+Bug(none) http/tests/security/upgrade-insecure-requests/basic-upgrade.https.html [ Timeout ]
+Bug(none) http/tests/security/upgrade-insecure-requests/form-upgrade.html [ Timeout ]
+Bug(none) http/tests/security/upgrade-insecure-requests/iframe-upgrade.https.html [ Timeout ]
+Bug(none) http/tests/security/upgrade-insecure-requests/sandbox-upgrade.https.php [ Timeout ]
+Bug(none) http/tests/security/video-cross-origin-readback.html [ Timeout ]
+Bug(none) http/tests/security/video-cross-origin-via-dom.html [ Timeout ]
+Bug(none) http/tests/security/webgl-remote-read-remote-image-allowed-with-credentials.html [ Timeout ]
+Bug(none) http/tests/security/webgl-remote-read-remote-image-allowed.html [ Timeout ]
+Bug(none) http/tests/security/webgl-remote-read-remote-image-blocked-no-crossorigin.html [ Timeout ]
+Bug(none) http/tests/security/window-named-proto.html [ Failure ]
+Bug(none) http/tests/security/window-named-valueOf.html [ Failure ]
+Bug(none) http/tests/security/xss-exception.html [ Timeout ]
+Bug(none) http/tests/sendbeacon/beacon-cookie.html [ Failure ]
+Bug(none) http/tests/sendbeacon/beacon-cross-origin.https.html [ Timeout ]
+Bug(none) http/tests/sendbeacon/beacon-same-origin.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium.fetch-canvas-tainting.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium.fetch-cors-xhr.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium.fetch-csp.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium.fetch-event-async-respond-with.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium.fetch-event-headers.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium.fetch-event-respond-with-stops-propagation.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium.fetch-request-css-base-url.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium.fetch-request-resources.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium.fetch-request-xhr.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium.fetch-response-xhr.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium.getregistrations.html [ Timeout ]
+Bug(none) http/tests/serviceworker/chromium.performance-timeline.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium.redirected-response.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium.referer.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium.register-wait-forever-in-install-worker.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium.request-end-to-end.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/claim-with-redirect.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/clients-openwindow.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/css-import-crash.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/extendable-message-event.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/fetch-error-messages.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/fetch-event-synthetic-respond-with.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/fetch-request-with-gc.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/fetch-script-onerror.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/force-refresh-ready.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/force-refresh-registration.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/load-flushed-script.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/memory-cache.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/no-filesystem.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/notificationclick-can-focus.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/notificationclick-can-openwindow.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/postmessage-after-terminate.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/postmessage-cross-process.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/register-different-script-many-times.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/register-error-messages.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/registration-stress.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/request-body-blob-crash.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/resolve-after-window-close.html [ Timeout ]
+Bug(none) http/tests/serviceworker/chromium/respond-with-body-accessed-response.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/sandboxed-iframe-fetch-event.html [ Timeout ]
+Bug(none) http/tests/serviceworker/chromium/sandboxed-iframe-navigator-serviceworker.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/service-worker-allowed.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/service-worker-gc.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/service-worker-mixed-response.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/stop-worker-during-respond-with.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/stop-worker-with-pending-fetch.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/unregister-on-detached-iframe.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/usecounter-on-claim.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/usecounter-on-load.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/usecounter-on-reload.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/usecounter.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/window-close-during-registration.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/windowclient-focus.html [ Failure ]
+Bug(none) http/tests/serviceworker/chromium/xhr-is-not-exposed-to-service-workers.html [ Failure ]
+Bug(none) http/tests/serviceworker/immutable-prototype-serviceworker.html [ Failure ]
+Bug(none) http/tests/serviceworker/indexeddb.html [ Failure ]
+Bug(none) http/tests/serviceworker/insecure-parent-frame.html [ Failure ]
+Bug(none) http/tests/serviceworker/navigation-preload/chromium/navigation-preload-after-gc.html [ Failure ]
+Bug(none) http/tests/serviceworker/navigation-preload/chromium/navigation-preload-resource-timing.html [ Failure ]
+Bug(none) http/tests/serviceworker/navigation-preload/chromium/preload-response-after-gc.html [ Failure ]
+Bug(none) http/tests/serviceworker/navigation-preload/chromium/use-counter.html [ Failure ]
+Bug(none) http/tests/serviceworker/ServiceWorkerGlobalScope/registration-attribute.html [ Failure ]
+Bug(none) http/tests/serviceworker/ServiceWorkerGlobalScope/unregister.html [ Failure ]
+Bug(none) http/tests/serviceworker/ServiceWorkerGlobalScope/update.html [ Failure ]
+Bug(none) http/tests/serviceworker/sync-xhr-doesnt-deadlock.html [ Failure ]
+Bug(none) http/tests/serviceworker/waiting.html [ Failure ]
+Bug(none) http/tests/serviceworker/webexposed/global-interface-listing-service-worker.html [ Failure ]
+Bug(none) http/tests/serviceworker/websocket/websocket-in-service-worker.html [ Failure ]
+Bug(none) http/tests/storage/callbacks-are-called-in-correct-context.html [ Timeout ]
+Bug(none) http/tests/usb/secure-context.html [ Timeout ]
+Bug(none) http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_redirects.html [ Failure ]
+Bug(none) http/tests/webaudio/autoplay-crossorigin.html [ Timeout ]
+Bug(none) http/tests/webfont/crbug-655076.html [ Timeout ]
+Bug(none) http/tests/webfont/font-display-intervention.html [ Timeout ]
+Bug(none) http/tests/webfont/font-display.html [ Timeout ]
+Bug(none) http/tests/webfont/same-origin-credentials.html [ Failure ]
+Bug(none) http/tests/webfont/slow-loading.html [ Timeout ]
+Bug(none) http/tests/websocket/bufferedAmount-after-send.html [ Failure ]
+Bug(none) http/tests/websocket/cookie-http-to-ws.pl [ Failure ]
+Bug(none) http/tests/websocket/fragmented-binary-frames.html [ Failure ]
+Bug(none) http/tests/websocket/httponly-cookie.pl [ Failure ]
+Bug(none) http/tests/websocket/receive-blob.html [ Failure ]
+Bug(none) http/tests/websocket/send-blob-onmessage-origin.html [ Failure ]
+Bug(none) http/tests/websocket/send-blob.html [ Failure ]
+Bug(none) http/tests/websocket/send-file-blob-fail.html [ Failure ]
+Bug(none) http/tests/websocket/send-file-blob.html [ Failure ]
+Bug(none) http/tests/websocket/workers/receive-blob.html [ Failure ]
+Bug(none) http/tests/websocket/workers/send-blob.html [ Failure ]
+Bug(none) http/tests/websocket/workers/worker-reload.html [ Timeout ]
+Bug(none) http/tests/workers/shared-worker-secure-context.https.html [ Timeout ]
+Bug(none) http/tests/workers/text-encoding.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/abort-should-destroy-responseText.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/access-control-allow-lists-starting-with-comma.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/access-control-basic-allow-access-control-origin-header-data-url.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/access-control-basic-allow-access-control-origin-header.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/access-control-basic-allow-star.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/access-control-basic-allow.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/access-control-basic-denied.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/access-control-basic-get-fail-non-simple.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/access-control-basic-non-simple-allow.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/access-control-basic-non-simple-deny-cached.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/access-control-basic-post-fail-non-simple-content-type.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/access-control-basic-whitelist-request-headers.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/access-control-basic-whitelist-response-headers.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/access-control-preflight-async-header-denied.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/access-control-preflight-async-method-denied.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/access-control-preflight-async-not-supported.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/access-control-preflight-credential-sync.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/access-control-preflight-headers-async.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/access-control-preflight-headers-sync.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/access-control-preflight-request-must-not-contain-cookie.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/access-control-preflight-sync-header-denied.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/access-control-preflight-sync-method-denied.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/access-control-preflight-sync-not-supported.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/access-control-response-with-body-sync.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/access-control-sandboxed-iframe-allow-origin-null.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/access-control-sandboxed-iframe-allow.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/access-control-sandboxed-iframe-denied-without-wildcard.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/access-control-sandboxed-iframe-denied.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/async-xhr-revalidate-after-sync-xhr.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/authorization-header.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/binary-x-user-defined.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/blob-response-type-warm-cache.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/broken-xml-encoding.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/cache-override.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/cookies.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/cross-origin-cookie-storage.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/cross-origin-preflight-get-response-type-blob.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/cross-site-denied-response-sync-2.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/cross-site-denied-response-sync.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/document-domain-set.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/duplicate-revalidation-reload.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/encode-request-url-2.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/encode-request-url.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/encoding-send-latin-1.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/event-target.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/exceptions.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/extra-parameters.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/failed-auth.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/filename-encoding.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/get-dangerous-headers.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/logout.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/methods-lower-case.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/methods.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/newline-in-request-uri.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/null-auth.php [ Failure ]
+Bug(none) http/tests/xmlhttprequest/onloadend-event-after-sync-requests.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/open-async-overload.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/00.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/01.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/02.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/03.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/04.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/05.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/06.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/07.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/08.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/09.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/10.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/11.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/12.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/13.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/14.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/15.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/16.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/17.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/18.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/19.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/20.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/21.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/22.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/23.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/24.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/25.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/26.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/27.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/28.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/29.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/30.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/31.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/32.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/33.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/34.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/35.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/36.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/37.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/38.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/39.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/40.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/41.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/42.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/43.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/44.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/45.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/46.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-exact-matching/47.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-header-cross-origin-get-sync.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-header-cross-origin-post-sync.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-header-same-origin-get-sync.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-header-same-origin-post-sync.html [ Timeout Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-whitelisting-all.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-whitelisting-exact-match.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-whitelisting-https.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-whitelisting-ip-addresses-with-subdomains.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-whitelisting-ip-addresses.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-whitelisting-removal.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/origin-whitelisting-subdomains.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/post-blob-content-type-sync.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/post-content-type.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/post-formdata.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/post-with-boundary.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/redirect-cross-origin-tripmine.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/referer.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/remember-bad-password.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/reopen-encoding.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/request-encoding.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/request-encoding2.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/request-encoding3.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/request-encoding4.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/response-blob-mimetype.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/response-blob-size.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/response-encoding.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/response-encoding2.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/send-entity-body-basic.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/send-entity-body-charset.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/serialize-document.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/set-dangerous-headers.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/simple-cross-origin-denied-events-post-sync.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/simple-cross-origin-denied-events-sync.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/state-after-network-error.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/sync-after-async-same-resource.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/sync-repeated-and-caching.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/sync-xhr-revalidate-after-async-xhr.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-aborted.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-twice.html [ Failure Timeout ]
+Bug(none) http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-aborted.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-simple.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-synconworker.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-twice.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/upload-onload-event.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/upload-onloadend-event-after-abort.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/upload-onloadend-event-after-load.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/upload-onloadend-event-after-sync-requests.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/upload-onprogress-event.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/upload-progress-events.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/web-apps/002-simple.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/web-apps/002.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/web-apps/003.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/web-apps/004.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/web-apps/005.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/web-apps/007.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/web-apps/008.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/web-apps/010.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/web-apps/011.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/web-apps/012.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/web-apps/014.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/web-apps/015.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/web-apps/018.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/withCredentials-after-send.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/workers/post-formdata.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/workers/shared-worker-response-type-blob-sync.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/workers/shared-worker-response-type-blob.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/workers/upload-onprogress-event.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/workers/xmlhttprequest-response-type-blob-sync.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/workers/xmlhttprequest-response-type-blob.html [ Timeout ]
+Bug(none) http/tests/xmlhttprequest/xhr-to-blob-in-isolated-world.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/xml-encoding.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/xmlhttprequest-latin1.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/xmlhttprequest-missing-file-exception.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/xmlhttprequest-response-type-blob.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/xmlhttprequest-setrequestheader-no-value.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/xmlhttprequest-sync-no-progress-events.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/xmlhttprequest-sync-no-timers.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/xmlhttprequest-sync-vs-async-assertion-failure.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/xmlhttprequest-unload-sync.html [ Failure ]
+Bug(none) http/tests/xmlhttprequest/zero-length-response-sync.html [ Failure ]
+Bug(none) imagecapture/getPhotoCapabilities.html [ Timeout ]
+Bug(none) imagecapture/MediaStreamTrack-applyConstraints-getSettings.html [ Timeout ]
+Bug(none) imagecapture/MediaStreamTrack-applyConstraints-reject.html [ Timeout ]
+Bug(none) imagecapture/MediaStreamTrack-applyConstraints.html [ Timeout ]
+Bug(none) imagecapture/MediaStreamTrack-getCapabilities.html [ Timeout ]
+Bug(none) imagecapture/MediaStreamTrack-getSettings.html [ Timeout ]
+Bug(none) imagecapture/setOptions-reject.html [ Timeout ]
+Bug(none) imagecapture/setOptions.html [ Timeout ]
+Bug(none) imagecapture/takePhoto-with-PhotoSettings.html [ Timeout ]
+Bug(none) imagecapture/takePhoto.html [ Timeout ]
+Bug(none) images/destroyed-image-load-event.html [ Timeout ]
+Bug(none) inspector-enabled/console/console-uncaught-promise-no-inspector.html [ Timeout ]
+Bug(none) inspector-protocol/accessibility/accessibility-nameSources-buttons.html [ Timeout ]
+Bug(none) inspector-protocol/css/css-get-background-colors.html [ Timeout ]
+Bug(none) inspector-protocol/css/cssom-modify-rule-and-get-rule-list.html [ Timeout ]
+Bug(none) inspector-protocol/heap-profiler/heap-samples-in-snapshot.html [ Failure ]
+Bug(none) inspector-protocol/heap-profiler/heap-snapshot-with-active-dom-object.html [ Failure ]
+Bug(none) inspector-protocol/heap-profiler/heap-snapshot-with-detached-dom-tree.html [ Failure ]
+Bug(none) inspector-protocol/heap-profiler/heap-snapshot-with-event-listener.html [ Failure ]
+Bug(none) inspector-protocol/network/resource-type.html [ Timeout ]
+Bug(none) inspector-protocol/network/websocket-initiator.html [ Timeout ]
+Bug(none) inspector-protocol/worker/exception-from-worker-contains-stack.html [ Timeout ]
+Bug(none) inspector-protocol/worker/worker-console.html [ Timeout ]
+Bug(none) inspector/agents-enable-disable.html [ Timeout ]
+Bug(none) inspector/animation/animation-group-matching-animations.html [ Timeout ]
+Bug(none) inspector/animation/animation-group-matching-transitions.html [ Timeout ]
+Bug(none) inspector/animation/animation-KeyframeEffectReadOnly-crash.html [ Timeout ]
+Bug(none) inspector/animation/animation-transition-setTiming-crash.html [ Timeout ]
+Bug(none) inspector/audits/audits-empty-stylesheet.html [ Timeout ]
+Bug(none) inspector/audits/audits-panel-functional.html [ Timeout ]
+Bug(none) inspector/audits/audits-panel-noimages-functional.html [ Timeout ]
+Bug(none) inspector/changes/changes-highlighter.html [ Timeout ]
+Bug(none) inspector/changes/changes-sidebar.html [ Timeout ]
+Bug(none) inspector/components/chunked-file-reader.html [ Failure Timeout ]
+Bug(none) inspector/components/dom-extension.html [ Timeout ]
+Bug(none) inspector/components/file-path-scoring.html [ Timeout ]
+Bug(none) inspector/components/parsed-url.html [ Timeout ]
+Bug(none) inspector/components/progress-bar.html [ Timeout ]
+Bug(none) inspector/components/segmented-range.html [ Timeout ]
+Bug(none) inspector/components/throttler.html [ Failure ]
+Bug(none) inspector/console/console-copy-treeoutline.html [ Failure ]
+Bug(none) inspector/console/console-export.html [ Failure ]
+Bug(none) inspector/console/console-filter-level-test.html [ Failure ]
+Bug(none) inspector/console/console-format-collections.html [ Failure ]
+Bug(none) inspector/console/console-format-perfomance.html [ Failure ]
+Bug(none) inspector/console/console-format-table.html [ Failure ]
+Bug(none) inspector/console/console-format.html [ Failure ]
+Bug(none) inspector/console/console-functions.html [ Failure ]
+Bug(none) inspector/console/console-log-short-hand-method.html [ Failure ]
+Bug(none) inspector/console/console-object-constructor-name.html [ Failure ]
+Bug(none) inspector/console/console-tests.html [ Failure ]
+Bug(none) inspector/coverage/coverage-repeated.html [ Failure Timeout ]
+Bug(none) inspector/coverage/coverage-view-filter.html [ Failure ]
+Bug(none) inspector/coverage/coverage-view.html [ Failure Timeout ]
+Bug(none) inspector/coverage/decorations-after-script-formatter.html [ Timeout ]
+Bug(none) inspector/coverage/gutter-js.html [ Timeout ]
+Bug(none) inspector/coverage/multiple-instances-merge.html [ Timeout Failure ]
+Bug(none) inspector/coverage/reveal-autoformat.html [ Timeout ]
+Bug(none) inspector/coverage/segments-merge.html [ Timeout ]
+Bug(none) inspector/device-mode/device-mode-responsive.html [ Timeout ]
+Bug(none) inspector/device-mode/device-mode-switching-devices.html [ Timeout ]
+Bug(none) inspector/domdebugger/domdebugger-getEventListeners.html [ Timeout ]
+Bug(none) inspector/editor/text-editor-ctrl-d-2.html [ Timeout ]
+Bug(none) inspector/editor/text-editor-enter-behaviour.html [ Timeout ]
+Bug(none) inspector/editor/text-editor-reveal-line.html [ Timeout ]
+Bug(none) inspector/editor/text-editor-selection-to-search.html [ Timeout ]
+Bug(none) inspector/editor/text-editor-smart-braces.html [ Timeout ]
+Bug(none) inspector/editor/text-editor-token-at-position.html [ Timeout ]
+Bug(none) inspector/elements/accessibility/autocomplete-attribute.html [ Timeout ]
+Bug(none) inspector/elements/accessibility/edit-aria-attributes.html [ Timeout ]
+Bug(none) inspector/elements/attribute-modified-ns.html [ Timeout ]
+Bug(none) inspector/elements/bidi-dom-tree.html [ Timeout ]
+Bug(none) inspector/elements/dom-search-crash.html [ Timeout ]
+Bug(none) inspector/elements/edit/edit-dom-actions-4.html [ Timeout ]
+Bug(none) inspector/elements/elements-img-tooltip.html [ Timeout ]
+Bug(none) inspector/elements/elements-panel-reload-assert.html [ Timeout ]
+Bug(none) inspector/elements/elements-panel-restore-selection-when-node-comes-later.html [ Timeout ]
+Bug(none) inspector/elements/elements-panel-rewrite-href.html [ Timeout ]
+Bug(none) inspector/elements/elements-panel-search.html [ Timeout ]
+Bug(none) inspector/elements/elements-panel-selection-on-refresh.html [ Timeout ]
+Bug(none) inspector/elements/elements-panel-styles.html [ Timeout ]
+Bug(none) inspector/elements/event-listener-sidebar-remove.html [ Timeout ]
+Bug(none) inspector/elements/hide-shortcut.html [ Timeout ]
+Bug(none) inspector/elements/highlight/highlight-css-shapes-outside-scroll.html [ Timeout ]
+Bug(none) inspector/elements/highlight/highlight-dom-updates.html [ Timeout ]
+Bug(none) inspector/elements/highlight/highlight-node-transformed.html [ Timeout ]
+Bug(none) inspector/elements/highlight/highlight-node.html [ Timeout ]
+Bug(none) inspector/elements/highlight/highlight-svg-root-zoomed.html [ Timeout ]
+Bug(none) inspector/elements/highlight/highlight-svg-root.html [ Timeout ]
+Bug(none) inspector/elements/shadow/breadcrumb-shadow-roots.html [ Timeout ]
+Bug(none) inspector/elements/shadow/create-shadow-root.html [ Timeout ]
+Bug(none) inspector/elements/shadow/elements-panel-shadow-selection-on-refresh-1.html [ Timeout ]
+Bug(none) inspector/elements/shadow/elements-panel-shadow-selection-on-refresh-2.html [ Timeout ]
+Bug(none) inspector/elements/shadow/elements-panel-shadow-selection-on-refresh-3.html [ Timeout ]
+Bug(none) inspector/elements/shadow/inspect-deep-shadow-element.html [ Timeout ]
+Bug(none) inspector/elements/shadow/update-shadowdom.html [ Timeout ]
+Bug(none) inspector/elements/styles-1/color-aware-property-value-edit.html [ Timeout ]
+Bug(none) inspector/elements/styles-1/css-live-edit.html [ Timeout ]
+Bug(none) inspector/elements/styles-1/disable-property-workingcopy-update.html [ Timeout ]
+Bug(none) inspector/elements/styles-1/edit-media-text.html [ Timeout ]
+Bug(none) inspector/elements/styles-1/edit-name-with-trimmed-value.html [ Timeout ]
+Bug(none) inspector/elements/styles-1/edit-value-inside-property.html [ Timeout ]
+Bug(none) inspector/elements/styles-1/empty-background-url.html [ Failure ]
+Bug(none) inspector/elements/styles-2/add-import-rule.html [ Timeout ]
+Bug(none) inspector/elements/styles-2/cssom-shorthand-important.html [ Timeout ]
+Bug(none) inspector/elements/styles-2/force-pseudo-state.html [ Timeout ]
+Bug(none) inspector/elements/styles-2/inactive-properties.html [ Timeout ]
+Bug(none) inspector/elements/styles-2/inject-stylesheet.html [ Timeout ]
+Bug(none) inspector/elements/styles-2/media-emulation.html [ Timeout ]
+Bug(none) inspector/elements/styles-2/mixed-case-color-aware-properties.html [ Timeout ]
+Bug(none) inspector/elements/styles-2/page-reload-update-sidebar.html [ Timeout ]
+Bug(none) inspector/elements/styles-2/property-ui-location.html [ Timeout Failure ]
+Bug(none) inspector/elements/styles-3/style-autocomplete.html [ Timeout ]
+Bug(none) inspector/elements/styles-3/styles-add-blank-property.html [ Timeout ]
+Bug(none) inspector/elements/styles-3/styles-add-new-rule-colon.html [ Timeout ]
+Bug(none) inspector/elements/styles-3/styles-add-new-rule-to-stylesheet.html [ Timeout ]
+Bug(none) inspector/elements/styles-3/styles-add-new-rule.html [ Timeout ]
+Bug(none) inspector/elements/styles-3/styles-change-node-while-editing.html [ Timeout ]
+Bug(none) inspector/elements/styles-3/styles-commit-editing.html [ Timeout ]
+Bug(none) inspector/elements/styles-3/styles-disable-inherited.html [ Timeout ]
+Bug(none) inspector/elements/styles-3/styles-disable-then-change.html [ Timeout ]
+Bug(none) inspector/elements/styles-3/styles-disable-then-enable-overriden-ua.html [ Timeout ]
+Bug(none) inspector/elements/styles-3/styles-variables.html [ Timeout ]
+Bug(none) inspector/elements/styles-4/styles-formatting.html [ Timeout ]
+Bug(none) inspector/elements/styles-4/styles-inline-element-style-changes-should-not-force-style-recalc.html [ Timeout ]
+Bug(none) inspector/elements/styles-4/styles-live-locations-leak.html [ Timeout ]
+Bug(none) inspector/elements/styles-4/styles-new-API.html [ Timeout ]
+Bug(none) inspector/elements/styles-4/styles-properties-overload.html [ Timeout ]
+Bug(none) inspector/elements/styles-4/styles-should-not-force-sync-style-recalc.html [ Timeout ]
+Bug(none) inspector/elements/styles-4/styles-update-from-js.html [ Timeout ]
+Bug(none) inspector/elements/styles-4/styles-update-links-3.html [ Timeout ]
+Bug(none) inspector/elements/styles-4/styles-url-linkify.html [ Timeout ]
+Bug(none) inspector/elements/styles-4/stylesheet-source-url-comment.html [ Timeout ]
+Bug(none) inspector/elements/styles/cancel-upon-invalid-property.html [ Timeout ]
+Bug(none) inspector/elements/styles/original-content-provider.html [ Timeout ]
+Bug(none) inspector/elements/styles/url-multiple-collapsing.html [ Timeout ]
+Bug(none) inspector/extensions/extensions-api.html [ Timeout ]
+Bug(none) inspector/extensions/extensions-audits-api.html [ Timeout ]
+Bug(none) inspector/extensions/extensions-audits-content-script.html [ Timeout ]
+Bug(none) inspector/extensions/extensions-audits.html [ Timeout ]
+Bug(none) inspector/extensions/extensions-events.html [ Timeout ]
+Bug(none) inspector/extensions/extensions-network.html [ Timeout ]
+Bug(none) inspector/extensions/extensions-reload.html [ Timeout ]
+Bug(none) inspector/extensions/extensions-resources.html [ Timeout ]
+Bug(none) inspector/extensions/extensions-timeline-api.html [ Timeout ]
+Bug(none) inspector/extensions/multiple-extensions.html [ Timeout ]
+Bug(none) inspector/file-system-mapping.html [ Timeout ]
+Bug(none) inspector/file-system-project.html [ Failure ]
+Bug(none) inspector/geolocation-emulation-tests.html [ Timeout ]
+Bug(none) inspector/import-open-inspector.html [ Timeout ]
+Bug(none) inspector/initial-modules-load.html [ Timeout ]
+Bug(none) inspector/input-event-warning.html [ Timeout ]
+Bug(none) inspector/inspected-objects-not-overriden.html [ Timeout ]
+Bug(none) inspector/layers/layer-replay-scale.html [ Timeout ]
+Bug(none) inspector/layers/layers-3d-view-hit-testing.html [ Timeout ]
+Bug(none) inspector/network/network-cookies-pane.html [ Timeout ]
+Bug(none) inspector/network/network-json-parser.html [ Timeout ]
+Bug(none) inspector/profiler/cpu-profiler-save-load.html [ Timeout ]
+Bug(none) inspector/profiler/heap-snapshot-loader.html [ Timeout ]
+Bug(none) inspector/quick-open/command-menu.html [ Timeout ]
+Bug(none) inspector/runtime/runtime-es6-setSymbolPropertyValue.html [ Timeout ]
+Bug(none) inspector/sass/test-ast-css-1.html [ Timeout ]
+Bug(none) inspector/sass/test-ast-diff-1.html [ Timeout ]
+Bug(none) inspector/sass/test-ast-editing-1.html [ Timeout ]
+Bug(none) inspector/sass/test-ast-scss-3.html [ Timeout ]
+Bug(none) inspector/sass/test-ast-scss-6.html [ Timeout ]
+Bug(none) inspector/sass/test-edit-remove-property.html [ Timeout ]
+Bug(none) inspector/sass/test-edit-toggle-property.html [ Timeout ]
+Bug(none) inspector/sass/test-mapping-bad.html [ Timeout ]
+Bug(none) inspector/sass/test-mapping-good.html [ Timeout ]
+Bug(none) inspector/sass/test-mapping-with-cache-busting-url.html [ Timeout ]
+Bug(none) inspector/screen-orientation-override.html [ Timeout ]
+Bug(none) inspector/sha1.html [ Timeout ]
+Bug(none) inspector/sources/debugger-breakpoints/breakpoint-manager-listeners-count.html [ Failure ]
+Bug(none) inspector/sources/debugger-breakpoints/breakpoints-in-anonymous-script-with-two-targets.html [ Timeout ]
+Bug(none) inspector/sources/debugger-breakpoints/event-listener-breakpoints-xhr.html [ Timeout ]
+Bug(none) inspector/sources/debugger-pause/pause-in-inline-script.html [ Timeout ]
+Bug(none) inspector/sources/debugger-step/debugger-step-out-document-write.html [ Timeout ]
+Bug(none) inspector/sources/debugger-ui/script-snippet-model.html [ Timeout ]
+Bug(none) inspector/sources/debugger-ui/watch-expressions-preserve-expansion.html [ Failure ]
+Bug(none) inspector/sources/debugger/dynamic-script-tag.html [ Failure ]
+Bug(none) inspector/tabbed-pane-closeable-persistence.html [ Timeout ]
+Bug(none) inspector/tabbed-pane-max-tab-width-calculation.html [ Timeout ]
+Bug(none) inspector/tracing-session-id.html [ Timeout ]
+Bug(none) inspector/tracing/timeline-network/timeline-network-resource-details.html [ Failure ]
+Bug(none) inspector/tracing/timeline-network/timeline-network-resource.html [ Failure ]
+Bug(none) inspector/user-agent-setting.html [ Timeout ]
+Bug(none) inspector/version-controller.html [ Timeout ]
+Bug(none) installedapp/getinstalledrelatedapps-empty.html [ Timeout ]
+Bug(none) installedapp/getinstalledrelatedapps.html [ Timeout ]
+Bug(none) loader/iframe-src-change-onload-crash.html [ Timeout ]
+Bug(none) media/audio-concurrent-supported.html [ Timeout ]
+Bug(none) media/audio-constructor-preload.html [ Timeout ]
+Bug(none) media/audio-constructor-src.html [ Timeout ]
+Bug(none) media/audio-constructor.html [ Timeout ]
+Bug(none) media/audio-controls-captions.html [ Timeout ]
+Bug(none) media/audio-controls-do-not-fade-out.html [ Timeout ]
+Bug(none) media/audio-controls-rendering.html [ Timeout ]
+Bug(none) media/audio-data-url.html [ Timeout ]
+Bug(none) media/audio-delete-while-slider-thumb-clicked.html [ Timeout ]
+Bug(none) media/audio-garbage-collect.html [ Timeout ]
+Bug(none) media/audio-only-video-intrinsic-size.html [ Timeout ]
+Bug(none) media/audio-play-event.html [ Timeout ]
+Bug(none) media/auto-play-in-sandbox-with-allow-scripts.html [ Timeout ]
+Bug(none) media/autoplay-clears-autoplaying-flag.html [ Timeout ]
+Bug(none) media/autoplay-document-move.html [ Timeout ]
+Bug(none) media/autoplay-from-mediastream-to-src.html [ Timeout ]
+Bug(none) media/autoplay-muted-conditions.html [ Timeout ]
+Bug(none) media/autoplay-muted-datasaver-off.html [ Timeout ]
+Bug(none) media/autoplay-muted-datasaver-on.html [ Timeout ]
+Bug(none) media/autoplay-muted.html [ Timeout ]
+Bug(none) media/autoplay-never-visible.html [ Timeout ]
+Bug(none) media/autoplay-non-whitelisted-scope.html [ Timeout ]
+Bug(none) media/autoplay-unmute-offscreen.html [ Timeout ]
+Bug(none) media/autoplay-when-visible-multiple-times.html [ Timeout ]
+Bug(none) media/autoplay-when-visible.html [ Timeout ]
+Bug(none) media/autoplay-whitelisted-scope.html [ Timeout ]
+Bug(none) media/autoplay-with-preload-none.html [ Timeout ]
+Bug(none) media/autoplay.html [ Timeout ]
+Bug(none) media/avtrack/addtrack.html [ Timeout ]
+Bug(none) media/avtrack/audio-track-enabled.html [ Timeout ]
+Bug(none) media/avtrack/audio-track-properties.html [ Timeout ]
+Bug(none) media/avtrack/forget-on-load.html [ Timeout ]
+Bug(none) media/avtrack/gc.html [ Timeout ]
+Bug(none) media/avtrack/getTrackById.html [ Timeout ]
+Bug(none) media/avtrack/track-switching.html [ Timeout ]
+Bug(none) media/avtrack/video-track-properties.html [ Timeout ]
+Bug(none) media/avtrack/video-track-selected.html [ Timeout ]
+Bug(none) media/color-profile-video-seek-filter.html [ Timeout ]
+Bug(none) media/color-profile-video-seek-object-fit.html [ Timeout ]
+Bug(none) media/color-profile-video-seek.html [ Timeout ]
+Bug(none) media/color-profile-video.html [ Timeout ]
+Bug(none) media/controls-after-reload.html [ Timeout ]
+Bug(none) media/controls-drag-timebar-rendering.html [ Timeout ]
+Bug(none) media/controls-drag-timebar.html [ Timeout ]
+Bug(none) media/controls-right-click-on-timebar.html [ Timeout ]
+Bug(none) media/controls-strict.html [ Timeout ]
+Bug(none) media/controls-styling-strict.html [ Timeout ]
+Bug(none) media/controls-styling.html [ Timeout ]
+Bug(none) media/controls-timeline.html [ Timeout ]
+Bug(none) media/controls-volume-slider-keynav.html [ Timeout ]
+Bug(none) media/controls-volume-slider.html [ Timeout ]
+Bug(none) media/controls-without-preload.html [ Timeout ]
+Bug(none) media/controls/buttons-after-reset.html [ Timeout ]
+Bug(none) media/controls/closed-captions-switch-track.html [ Timeout ]
+Bug(none) media/controls/controls-cast-button-narrow.html [ Timeout ]
+Bug(none) media/controls/controls-cast-button.html [ Timeout ]
+Bug(none) media/controls/controls-cast-do-not-fade-out.html [ Timeout ]
+Bug(none) media/controls/controls-cast-overlay-slow-fade.html [ Timeout ]
+Bug(none) media/controls/controls-overlay-cast-button.html [ Timeout ]
+Bug(none) media/controls/overflow-fully-hidden.html [ Timeout ]
+Bug(none) media/controls/overlay-play-button-document-move.html [ Timeout ]
+Bug(none) media/controls/overlay-play-button-narrow.html [ Timeout ]
+Bug(none) media/controls/settings-disable-controls.html [ Timeout ]
+Bug(none) media/controls/time-update-after-unload.html [ Timeout ]
+Bug(none) media/controls/video-controls-overflow-menu-hide-on-click-outside.html [ Timeout ]
+Bug(none) media/controls/video-controls-overflow-menu-hide-on-click-panel.html [ Timeout ]
+Bug(none) media/controls/video-controls-overflow-menu-hide-on-click.html [ Timeout ]
+Bug(none) media/controls/video-controls-overflow-menu-hide-on-resize.html [ Timeout ]
+Bug(none) media/controls/video-controls-overflow-menu-text.html [ Timeout ]
+Bug(none) media/controls/video-controls-overflow-menu-visibility.html [ Timeout ]
+Bug(none) media/controls/video-controls-with-cast-rendering.html [ Timeout ]
+Bug(none) media/controls/video-enter-exit-fullscreen-while-hovering-shows-controls.html [ Timeout ]
+Bug(none) media/controls/video-overlay-cast-covering.html [ Timeout ]
+Bug(none) media/controls/video-overlay-cast-dark-rendering.html [ Timeout ]
+Bug(none) media/controls/video-overlay-play-button.html [ Timeout ]
+Bug(none) media/controls/volumechange-muted-attribute.html [ Timeout ]
+Bug(none) media/controls/volumechange-stopimmediatepropagation.html [ Timeout ]
+Bug(none) media/encrypted-media/encrypted-media-async-creation-with-gc.html [ Timeout ]
+Bug(none) media/encrypted-media/encrypted-media-async-setcert-with-gc.html [ Timeout ]
+Bug(none) media/encrypted-media/encrypted-media-lifetime-mediakeys-with-session.html [ Timeout ]
+Bug(none) media/encrypted-media/encrypted-media-lifetime-mediakeys.html [ Timeout ]
+Bug(none) media/encrypted-media/encrypted-media-lifetime-mediakeysession-reference.html [ Timeout ]
+Bug(none) media/encrypted-media/encrypted-media-lifetime-mediakeysession-release-noreference.html [ Timeout ]
+Bug(none) media/encrypted-media/encrypted-media-lifetime-mediakeysession-release.html [ Timeout ]
+Bug(none) media/encrypted-media/encrypted-media-lifetime-multiple-mediakeys.html [ Timeout ]
+Bug(none) media/encrypted-media/encrypted-media-lifetime-reload.html [ Timeout ]
+Bug(none) media/encrypted-media/encrypted-media-onencrypted.html [ Timeout ]
+Bug(none) media/encrypted-media/encrypted-media-playback-encrypted-and-clear-sources.html [ Timeout ]
+Bug(none) media/encrypted-media/encrypted-media-playback-multiple-sessions.html [ Timeout ]
+Bug(none) media/encrypted-media/encrypted-media-playback-setmediakeys-after-src.html [ Timeout ]
+Bug(none) media/encrypted-media/encrypted-media-playback-setmediakeys-before-src.html [ Timeout ]
+Bug(none) media/encrypted-media/encrypted-media-playback-two-videos.html [ Timeout ]
+Bug(none) media/encrypted-media/encrypted-media-reset-src-after-setmediakeys.html [ Timeout ]
+Bug(none) media/encrypted-media/encrypted-media-reset-src-during-setmediakeys.html [ Timeout ]
+Bug(none) media/encrypted-media/encrypted-media-setmediakeys-again-after-playback.html [ Timeout ]
+Bug(none) media/encrypted-media/encrypted-media-setmediakeys-again-after-resetting-src.html [ Timeout ]
+Bug(none) media/encrypted-media/encrypted-media-setmediakeys-at-same-time.html [ Timeout ]
+Bug(none) media/encrypted-media/encrypted-media-setmediakeys-multiple-times-with-different-mediakeys.html [ Timeout ]
+Bug(none) media/encrypted-media/encrypted-media-waiting-for-a-key.html [ Timeout ]
+Bug(none) media/event-attributes.html [ Timeout ]
+Bug(none) media/fullscreen-controls-visible-last.html [ Timeout ]
+Bug(none) media/gc-while-playing.html [ Timeout ]
+Bug(none) media/gc-while-seeking.html [ Timeout ]
+Bug(none) media/media-can-load-when-hidden.html [ Timeout ]
+Bug(none) media/media-captions-no-controls.html [ Timeout ]
+Bug(none) media/media-continues-playing-after-replace-source.html [ Timeout ]
+Bug(none) media/media-controls-hide-menu-stoppropagation-iframe.html [ Timeout ]
+Bug(none) media/media-controls-hide-menu-stoppropagation.html [ Timeout ]
+Bug(none) media/media-controls-invalid-url.html [ Timeout ]
+Bug(none) media/media-controls-overflow-hidden.html [ Timeout ]
+Bug(none) media/media-controls-overflow-visible.html [ Timeout ]
+Bug(none) media/media-controls-tap-show-controls-without-activating.html [ Timeout ]
+Bug(none) media/media-document-audio-repaint.html [ Timeout ]
+Bug(none) media/media-document-audio-size.html [ Timeout ]
+Bug(none) media/media-element-play-after-eos.html [ Timeout ]
+Bug(none) media/media-ended.html [ Timeout ]
+Bug(none) media/media-extension-with-fragment.html [ Timeout ]
+Bug(none) media/media-load-event.html [ Timeout ]
+Bug(none) media/media-play-promise.html [ Timeout ]
+Bug(none) media/media-source-append-multiple.html [ Timeout ]
+Bug(none) media/mediasession/mojo/callback-alive-after-gc.html [ Timeout ]
+Bug(none) media/mediasession/mojo/file-image-removed.html [ Timeout ]
+Bug(none) media/mediasession/mojo/media-control-action-reaches-client.html [ Timeout ]
+Bug(none) media/mediasession/mojo/media-control-set-handler-notifies-service.html [ Timeout ]
+Bug(none) media/mediasession/mojo/metadata-async.html [ Timeout ]
+Bug(none) media/mediasession/mojo/metadata-propagated-twice.html [ Timeout ]
+Bug(none) media/mediasession/mojo/metadata-propagated.html [ Timeout ]
+Bug(none) media/mediasession/mojo/metadata-session-link.html [ Timeout ]
+Bug(none) media/mediasession/mojo/playback-state-propagated.html [ Timeout ]
+Bug(none) media/mediasession/mojo/set-null-metadata.html [ Timeout ]
+Bug(none) media/no-autoplay-with-user-gesture-requirement.html [ Timeout ]
+Bug(none) media/play-promise-crash.html [ Timeout ]
+Bug(none) media/remove-from-document.html [ Timeout ]
+Bug(none) media/seek-to-currentTime.html [ Timeout ]
+Bug(none) media/sources-fallback-codecs.html [ Timeout ]
+Bug(none) media/track/css-cue-for-video-in-shadow-2.html [ Timeout ]
+Bug(none) media/track/css-cue-for-video-in-shadow.html [ Timeout ]
+Bug(none) media/track/cue-style-invalidation.html [ Timeout ]
+Bug(none) media/track/regions-webvtt/vtt-region-display.html [ Timeout ]
+Bug(none) media/track/regions-webvtt/vtt-region-dom-layout.html [ Timeout ]
+Bug(none) media/track/regions-webvtt/vtt-region-parser.html [ Timeout ]
+Bug(none) media/track/text-track-selection-menu-add-track.html [ Timeout ]
+Bug(none) media/track/track-active-cues.html [ Timeout ]
+Bug(none) media/track/track-css-all-cues.html [ Timeout ]
+Bug(none) media/track/track-css-cue-lifetime.html [ Timeout ]
+Bug(none) media/track/track-css-matching-default.html [ Timeout ]
+Bug(none) media/track/track-css-matching-lang.html [ Timeout ]
+Bug(none) media/track/track-css-matching-timestamps.html [ Timeout ]
+Bug(none) media/track/track-css-matching.html [ Timeout ]
+Bug(none) media/track/track-css-property-whitelist.html [ Timeout ]
+Bug(none) media/track/track-css-user-settings-override-author-settings.html [ Timeout ]
+Bug(none) media/track/track-css-user-settings-override-internal-settings.html [ Timeout ]
+Bug(none) media/track/track-cue-container-rendering-position.html [ Timeout ]
+Bug(none) media/track/track-cue-gc-wrapper.html [ Timeout ]
+Bug(none) media/track/track-cue-inline-assertion-crash.html [ Timeout ]
+Bug(none) media/track/track-cue-rendering-empty-cue-crash.html [ Timeout ]
+Bug(none) media/track/track-cue-rendering-first-line-box.html [ Timeout ]
+Bug(none) media/track/track-cue-rendering-horizontal.html [ Timeout ]
+Bug(none) media/track/track-cue-rendering-line-doesnt-fit.html [ Timeout ]
+Bug(none) media/track/track-cue-rendering-mode-changed.html [ Timeout ]
+Bug(none) media/track/track-cue-rendering-on-resize.html [ Timeout ]
+Bug(none) media/track/track-cue-rendering-overscan.html [ Timeout ]
+Bug(none) media/track/track-cue-rendering-position-auto-rtl.html [ Timeout ]
+Bug(none) media/track/track-cue-rendering-position-auto.html [ Timeout ]
+Bug(none) media/track/track-cue-rendering-rtl.html [ Timeout ]
+Bug(none) media/track/track-cue-rendering-snap-to-lines-not-set.html [ Timeout ]
+Bug(none) media/track/track-cue-rendering-transformed-video.html [ Timeout ]
+Bug(none) media/track/track-cue-rendering-tree-is-removed-properly.html [ Timeout ]
+Bug(none) media/track/track-cue-rendering-vertical.html [ Timeout ]
+Bug(none) media/track/track-cue-rendering-wider-than-controls.html [ Timeout ]
+Bug(none) media/track/track-cue-rendering-with-padding.html [ Timeout ]
+Bug(none) media/track/track-cue-rendering.html [ Timeout ]
+Bug(none) media/track/track-cues-missed.html [ Timeout ]
+Bug(none) media/track/track-cues-pause-on-exit.html [ Timeout ]
+Bug(none) media/track/track-cues-seeking.html [ Timeout ]
+Bug(none) media/track/track-cues-sorted-before-dispatch.html [ Timeout ]
+Bug(none) media/track/track-delete-during-setup.html [ Timeout ]
+Bug(none) media/track/track-disabled-addcue.html [ Timeout ]
+Bug(none) media/track/track-disabled.html [ Timeout ]
+Bug(none) media/track/track-insert-after-load-crash.html [ Timeout ]
+Bug(none) media/track/track-kind-user-preference.html [ Timeout ]
+Bug(none) media/track/track-mode-not-changed-by-new-track.html [ Timeout ]
+Bug(none) media/track/track-mode-triggers-loading.html [ Timeout ]
+Bug(none) media/track/track-mode.html [ Timeout ]
+Bug(none) media/track/track-remove-active-cue-crash.html [ Timeout ]
+Bug(none) media/track/track-remove-insert-ready-state.html [ Timeout ]
+Bug(none) media/track/track-remove-quickly.html [ Timeout ]
+Bug(none) media/track/track-remove-track.html [ Timeout ]
+Bug(none) media/track/track-selection-metadata.html [ Timeout ]
+Bug(none) media/track/track-word-breaking.html [ Timeout ]
+Bug(none) media/video-append-source.html [ Timeout ]
+Bug(none) media/video-aspect-ratio.html [ Timeout ]
+Bug(none) media/video-autoplay.html [ Timeout ]
+Bug(none) media/video-buffered-unknown-duration.html [ Timeout ]
+Bug(none) media/video-buffered.html [ Timeout ]
+Bug(none) media/video-canvas-alpha.html [ Timeout ]
+Bug(none) media/video-canvas-draw.html [ Timeout ]
+Bug(none) media/video-controls-always-visible-when-control-hovered.html [ Timeout ]
+Bug(none) media/video-controls-attribute-fullscreen.html [ Timeout ]
+Bug(none) media/video-controls-auto-hide-after-play-by-touch.html [ Timeout ]
+Bug(none) media/video-controls-dont-show-on-focus-when-disabled.html [ Timeout ]
+Bug(none) media/video-controls-download-button-not-displayed-local.html [ Timeout ]
+Bug(none) media/video-controls-focus-movement-on-hide.html [ Timeout ]
+Bug(none) media/video-controls-fullscreen-iframe-allowed.html [ Timeout ]
+Bug(none) media/video-controls-fullscreen-iframe-not-allowed.html [ Timeout ]
+Bug(none) media/video-controls-fullscreen-not-supported.html [ Timeout ]
+Bug(none) media/video-controls-fullscreen.html [ Timeout ]
+Bug(none) media/video-controls-hidden-audio.html [ Timeout ]
+Bug(none) media/video-controls-hide-after-touch-on-control.html [ Timeout ]
+Bug(none) media/video-controls-hide-on-move-outside-controls.html [ Timeout ]
+Bug(none) media/video-controls-in-media-document.html [ Timeout ]
+Bug(none) media/video-controls-mouse-events-captured.html [ Timeout ]
+Bug(none) media/video-controls-muted-video-can-unmute.html [ Timeout ]
+Bug(none) media/video-controls-overflow-menu-closed-captions-button.html [ Timeout ]
+Bug(none) media/video-controls-overflow-menu-closed-captions-list-hide-on-click-outside.html [ Timeout ]
+Bug(none) media/video-controls-overflow-menu-fullscreen-button.html [ Timeout ]
+Bug(none) media/video-controls-overflow-menu-last-button-visible.html [ Timeout ]
+Bug(none) media/video-controls-overflow-menu-mute-button.html [ Timeout ]
+Bug(none) media/video-controls-overflow-menu-play-button.html [ Timeout ]
+Bug(none) media/video-controls-rendering.html [ Timeout ]
+Bug(none) media/video-controls-show-on-focus.html [ Timeout ]
+Bug(none) media/video-controls-toggling.html [ Timeout ]
+Bug(none) media/video-controls-touch-events-captured.html [ Timeout ]
+Bug(none) media/video-controls-track-selection-menu.html [ Timeout ]
+Bug(none) media/video-controls-transformed.html [ Timeout ]
+Bug(none) media/video-controls-visibility-multimodal-mouse-after-touch.html [ Timeout ]
+Bug(none) media/video-controls-visibility-multimodal-touch-after-mouse.html [ Timeout ]
+Bug(none) media/video-controls-visible-audio-only.html [ Timeout ]
+Bug(none) media/video-controls-zoomed.html [ Timeout ]
+Bug(none) media/video-controls.html [ Timeout ]
+Bug(none) media/video-currentTime-before-have-metadata-media-fragment-uri.html [ Timeout ]
+Bug(none) media/video-currentTime-before-have-metadata.html [ Timeout ]
+Bug(none) media/video-currentTime-delay.html [ Timeout ]
+Bug(none) media/video-currentTime-set.html [ Timeout ]
+Bug(none) media/video-currentTime-set2.html [ Timeout ]
+Bug(none) media/video-currentTime.html [ Timeout ]
+Bug(none) media/video-defaultmuted.html [ Timeout ]
+Bug(none) media/video-delay-load-event.html [ Timeout Failure ]
+Bug(none) media/video-display-aspect-ratio.html [ Timeout ]
+Bug(none) media/video-display-none-crash.html [ Timeout ]
+Bug(none) media/video-display-toggle.html [ Timeout ]
+Bug(none) media/video-dom-autoplay.html [ Timeout ]
+Bug(none) media/video-dom-src.html [ Timeout ]
+Bug(none) media/video-double-seek-currentTime.html [ Timeout ]
+Bug(none) media/video-duration-known-after-eos.html [ Timeout ]
+Bug(none) media/video-enter-fullscreen-without-user-gesture.html [ Timeout ]
+Bug(none) media/video-force-preload-none-to-metadata-on-load.html [ Timeout ]
+Bug(none) media/video-force-preload-none-to-metadata-on-play.html [ Timeout ]
+Bug(none) media/video-frame-accurate-seek.html [ Timeout ]
+Bug(none) media/video-layer-crash.html [ Timeout ]
+Bug(none) media/video-load-networkState.html [ Timeout ]
+Bug(none) media/video-load-preload-none.html [ Timeout ]
+Bug(none) media/video-load-readyState.html [ Timeout ]
+Bug(none) media/video-loop-from-ended.html [ Timeout ]
+Bug(none) media/video-loop.html [ Timeout ]
+Bug(none) media/video-move-to-new-document-crash.html [ Timeout ]
+Bug(none) media/video-move-to-new-document.html [ Timeout ]
+Bug(none) media/video-muted.html [ Timeout ]
+Bug(none) media/video-no-autoplay.html [ Timeout ]
+Bug(none) media/video-no-controls-events-not-absorbed.html [ Timeout ]
+Bug(none) media/video-no-timeupdate-before-playback.html [ Timeout ]
+Bug(none) media/video-not-paused-while-looping.html [ Timeout ]
+Bug(none) media/video-object-fit-change.html [ Timeout ]
+Bug(none) media/video-object-fit.html [ Timeout ]
+Bug(none) media/video-pause-empty-events.html [ Timeout ]
+Bug(none) media/video-pause-immediately.html [ Failure Pass Timeout ]
+Bug(none) media/video-persistence.html [ Timeout ]
+Bug(none) media/video-play-empty-events.html [ Timeout ]
+Bug(none) media/video-play-pause-events.html [ Timeout ]
+Bug(none) media/video-play-require-user-gesture.html [ Timeout ]
+Bug(none) media/video-playbackrate.html [ Timeout ]
+Bug(none) media/video-played-collapse.html [ Timeout ]
+Bug(none) media/video-played-ranges-1.html [ Timeout ]
+Bug(none) media/video-played-reset.html [ Failure Pass Timeout ]
+Bug(none) media/video-playing-and-pause.html [ Timeout ]
+Bug(none) media/video-plays-past-end-of-test.html [ Timeout ]
+Bug(none) media/video-poster-delayed.html [ Timeout ]
+Bug(none) media/video-prefixed-fullscreen.html [ Timeout ]
+Bug(none) media/video-preload-none-to-metadata-after-load-crash.html [ Timeout ]
+Bug(none) media/video-preload.html [ Timeout ]
+Bug(none) media/video-remove-insert-repaints.html [ Timeout ]
+Bug(none) media/video-replaces-poster.html [ Timeout ]
+Bug(none) media/video-seek-by-small-increment.html [ Timeout ]
+Bug(none) media/video-seek-past-end-paused.html [ Timeout ]
+Bug(none) media/video-seek-past-end-playing.html [ Timeout ]
+Bug(none) media/video-seek-to-duration-with-playbackrate-zero.html [ Timeout ]
+Bug(none) media/video-seekable.html [ Timeout ]
+Bug(none) media/video-seeking.html [ Timeout ]
+Bug(none) media/video-set-rate-from-pause.html [ Timeout ]
+Bug(none) media/video-single-valid-source.html [ Timeout ]
+Bug(none) media/video-size.html [ Timeout ]
+Bug(none) media/video-source-add-after-remove.html [ Timeout ]
+Bug(none) media/video-source-error.html [ Timeout ]
+Bug(none) media/video-source-load.html [ Timeout ]
+Bug(none) media/video-source-type-params.html [ Timeout ]
+Bug(none) media/video-source-type.html [ Timeout ]
+Bug(none) media/video-source.html [ Timeout ]
+Bug(none) media/video-src-blob.html [ Failure ]
+Bug(none) media/video-src-change.html [ Timeout ]
+Bug(none) media/video-src-empty.html [ Timeout ]
+Bug(none) media/video-src-remove.html [ Timeout ]
+Bug(none) media/video-src-set.html [ Timeout ]
+Bug(none) media/video-src-source.html [ Timeout ]
+Bug(none) media/video-src.html [ Timeout ]
+Bug(none) media/video-srcobject-mediastream-src-file.html [ Timeout ]
+Bug(none) media/video-timeupdate-during-playback.html [ Timeout ]
+Bug(none) media/video-transformed.html [ Timeout ]
+Bug(none) media/video-volume.html [ Timeout ]
+Bug(none) media/video-webkit-appearance.html [ Timeout ]
+Bug(none) media/video-zoom.html [ Failure Timeout ]
+Bug(none) media/video-zoom-controls.html [ Failure Timeout ]
+Bug(none) media/W3C/audio/events/event_canplay.html [ Timeout ]
+Bug(none) media/W3C/audio/events/event_canplay_manual.html [ Timeout ]
+Bug(none) media/W3C/audio/events/event_canplaythrough.html [ Timeout ]
+Bug(none) media/W3C/audio/events/event_canplaythrough_manual.html [ Timeout ]
+Bug(none) media/W3C/audio/events/event_loadeddata.html [ Timeout ]
+Bug(none) media/W3C/audio/events/event_loadeddata_manual.html [ Timeout ]
+Bug(none) media/W3C/audio/events/event_loadedmetadata.html [ Timeout ]
+Bug(none) media/W3C/audio/events/event_loadedmetadata_manual.html [ Timeout ]
+Bug(none) media/W3C/audio/events/event_loadstart.html [ Timeout ]
+Bug(none) media/W3C/audio/events/event_loadstart_manual.html [ Timeout ]
+Bug(none) media/W3C/audio/events/event_order_canplay_canplaythrough.html [ Timeout ]
+Bug(none) media/W3C/audio/events/event_order_canplay_playing.html [ Timeout ]
+Bug(none) media/W3C/audio/events/event_order_loadedmetadata_loadeddata.html [ Timeout ]
+Bug(none) media/W3C/audio/events/event_order_loadstart_progress.html [ Timeout ]
+Bug(none) media/W3C/audio/events/event_pause_manual.html [ Timeout ]
+Bug(none) media/W3C/audio/events/event_play.html [ Timeout ]
+Bug(none) media/W3C/audio/events/event_play_manual.html [ Failure Timeout ]
+Bug(none) media/W3C/audio/events/event_playing.html [ Timeout ]
+Bug(none) media/W3C/audio/events/event_playing_manual.html [ Timeout ]
+Bug(none) media/W3C/audio/events/event_progress.html [ Timeout ]
+Bug(none) media/W3C/audio/events/event_progress_manual.html [ Timeout ]
+Bug(none) media/W3C/audio/events/event_timeupdate.html [ Timeout ]
+Bug(none) media/W3C/audio/events/event_timeupdate_manual.html [ Timeout ]
+Bug(none) media/W3C/audio/networkState/networkState_during_loadstart.html [ Timeout ]
+Bug(none) media/W3C/audio/paused/paused_false_during_play.html [ Timeout ]
+Bug(none) media/W3C/audio/paused/paused_true_during_pause.html [ Timeout ]
+Bug(none) media/W3C/audio/readyState/readyState_during_canplay.html [ Timeout ]
+Bug(none) media/W3C/audio/readyState/readyState_during_canplaythrough.html [ Timeout ]
+Bug(none) media/W3C/audio/readyState/readyState_during_loadeddata.html [ Timeout ]
+Bug(none) media/W3C/audio/readyState/readyState_during_loadedmetadata.html [ Timeout ]
+Bug(none) media/W3C/audio/readyState/readyState_during_playing.html [ Timeout ]
+Bug(none) media/W3C/audio/src/src_removal_does_not_trigger_loadstart.html [ Timeout ]
+Bug(none) media/W3C/video/events/event_canplay.html [ Timeout ]
+Bug(none) media/W3C/video/events/event_canplay_manual.html [ Timeout ]
+Bug(none) media/W3C/video/events/event_canplaythrough.html [ Timeout ]
+Bug(none) media/W3C/video/events/event_canplaythrough_manual.html [ Timeout ]
+Bug(none) media/W3C/video/events/event_loadeddata.html [ Timeout ]
+Bug(none) media/W3C/video/events/event_loadeddata_manual.html [ Timeout ]
+Bug(none) media/W3C/video/events/event_loadedmetadata.html [ Timeout ]
+Bug(none) media/W3C/video/events/event_loadedmetadata_manual.html [ Timeout ]
+Bug(none) media/W3C/video/events/event_loadstart.html [ Timeout ]
+Bug(none) media/W3C/video/events/event_loadstart_manual.html [ Timeout ]
+Bug(none) media/W3C/video/events/event_order_canplay_canplaythrough.html [ Timeout ]
+Bug(none) media/W3C/video/events/event_order_canplay_playing.html [ Timeout ]
+Bug(none) media/W3C/video/events/event_order_loadedmetadata_loadeddata.html [ Timeout ]
+Bug(none) media/W3C/video/events/event_order_loadstart_progress.html [ Timeout ]
+Bug(none) media/W3C/video/events/event_pause_manual.html [ Timeout ]
+Bug(none) media/W3C/video/events/event_play.html [ Timeout ]
+Bug(none) media/W3C/video/events/event_play_manual.html [ Timeout ]
+Bug(none) media/W3C/video/events/event_playing.html [ Timeout ]
+Bug(none) media/W3C/video/events/event_playing_manual.html [ Timeout ]
+Bug(none) media/W3C/video/events/event_progress.html [ Timeout ]
+Bug(none) media/W3C/video/events/event_progress_manual.html [ Timeout ]
+Bug(none) media/W3C/video/events/event_timeupdate.html [ Timeout ]
+Bug(none) media/W3C/video/events/event_timeupdate_manual.html [ Timeout ]
+Bug(none) media/W3C/video/networkState/networkState_during_loadstart.html [ Timeout ]
+Bug(none) media/W3C/video/networkState/networkState_during_progress.html [ Timeout ]
+Bug(none) media/W3C/video/paused/paused_false_during_play.html [ Timeout ]
+Bug(none) media/W3C/video/paused/paused_true_during_pause.html [ Timeout ]
+Bug(none) media/W3C/video/readyState/readyState_during_canplay.html [ Timeout ]
+Bug(none) media/W3C/video/readyState/readyState_during_canplaythrough.html [ Timeout ]
+Bug(none) media/W3C/video/readyState/readyState_during_loadeddata.html [ Timeout ]
+Bug(none) media/W3C/video/readyState/readyState_during_loadedmetadata.html [ Timeout ]
+Bug(none) media/W3C/video/readyState/readyState_during_playing.html [ Timeout ]
+Bug(none) media/W3C/video/src/src_removal_does_not_trigger_loadstart.html [ Timeout ]
+Bug(none) mhtml/invalid-bad-boundary.mht [ Timeout ]
+Bug(none) netinfo/gc-frame-listeners.html [ Timeout ]
+Bug(none) nfc/mock-nfc.html [ Timeout ]
+Bug(none) nfc/nfc-block-iframe.html [ Timeout ]
+Bug(none) nfc/push.html [ Timeout ]
+Bug(none) nfc/watch.html [ Timeout ]
+Bug(none) paint/invalidation/media-audio-no-spurious-repaints.html [ Timeout ]
+Bug(none) paint/invalidation/video-mute-repaint.html [ Timeout ]
+Bug(none) paint/invalidation/video-paint-invalidation.html [ Timeout ]
+Bug(none) paint/invalidation/video-unmute-repaint.html [ Timeout ]
+Bug(none) payments/payment-request-interface.html [ Failure ]
+Bug(none) payments/promises-keep-request-alive.html [ Timeout ]
+Bug(none) plugins/createScriptableObject-before-start.html [ Failure ]
+Bug(none) plugins/gesture-events-scrolled.html [ Timeout Failure ]
+Bug(none) plugins/gesture-events.html [ Timeout ]
+Bug(none) plugins/iframe-plugin-bgcolor.html [ Timeout ]
+Bug(none) plugins/plugin-document-back-forward.html [ Timeout ]
+Bug(none) plugins/plugin-initiate-popup-window.html [ Timeout ]
+Bug(none) presentation/presentation-controller-close-connection.html [ Timeout ]
+Bug(none) presentation/presentation-controller-connection-closed-by-receiver.html [ Timeout ]
+Bug(none) presentation/presentation-controller-terminate-connection.html [ Timeout ]
+Bug(none) presentation/presentation-navigation-multipleurls.html [ Timeout ]
+Bug(none) presentation/presentation-navigation.html [ Timeout ]
+Bug(none) presentation/presentation-onreceiverconnection.html [ Timeout ]
+Bug(none) presentation/presentation-receiver-terminate-connection.html [ Timeout ]
+Bug(none) presentation/presentation-reconnect.html [ Timeout ]
+Bug(none) presentation/presentation-start-error.html [ Timeout ]
+Bug(none) presentation/presentation-start.html [ Timeout ]
+Bug(none) presentation/presentationconnectionavailableevent-ctor-mock.html [ Timeout ]
+Bug(none) printing/subframes-percentage-height.html [ Failure ]
+Bug(none) sensor/absolute-orientation-sensor.html [ Timeout ]
+Bug(none) sensor/accelerometer.html [ Timeout ]
+Bug(none) sensor/ambient-light-sensor.html [ Timeout ]
+Bug(none) sensor/gyroscope.html [ Timeout ]
+Bug(none) sensor/magnetometer.html [ Timeout ]
+Bug(none) sensor/mock-sensor.html [ Timeout ]
+Bug(none) shapedetection/detection-HTMLCanvasElement.html [ Timeout ]
+Bug(none) shapedetection/detection-HTMLImageElement.html [ Timeout ]
+Bug(none) shapedetection/detection-HTMLVideoElement.html [ Timeout ]
+Bug(none) shapedetection/detection-ImageBitmap.html [ Timeout ]
+Bug(none) shapedetection/detection-ImageData.html [ Timeout ]
+Bug(none) shapedetection/detection-on-worker.html [ Timeout ]
+Bug(none) shapedetection/detection-options.html [ Timeout ]
+Bug(none) shapedetection/detection-security-test.html [ Timeout ]
+Bug(none) shapedetection/detector-same-object.html [ Timeout ]
+Bug(none) storage/domstorage/events/basic.html [ Failure Timeout ]
+Bug(none) storage/indexeddb/blob-contenttype.html [ Failure ]
+Bug(none) storage/indexeddb/blob-valid-after-deletion.html [ Failure ]
+Bug(none) storage/indexeddb/blob-valid-before-commit.html [ Failure ]
+Bug(none) storage/indexeddb/cursor-request-cycle.html [ Timeout ]
+Bug(none) storage/indexeddb/cursor-value.html [ Timeout ]
+Bug(none) storage/indexeddb/empty-crash.html [ Timeout ]
+Bug(none) storage/indexeddb/key-cursor-request-cycle.html [ Timeout ]
+Bug(none) storage/indexeddb/key-generator.html [ Timeout ]
+Bug(none) storage/indexeddb/structured-clone.html [ Failure ]
+Bug(none) storage/indexeddb/versionchangerequest-activedomobject.html [ Timeout ]
+Bug(none) storage/websql/change-version.html [ Timeout ]
+Bug(none) storage/websql/database-removed-context-crash.html [ Timeout ]
+Bug(none) storage/websql/multiple-transactions.html [ Timeout ]
+Bug(none) storage/websql/transaction-error-callback-isolated-world.html [ Timeout ]
+Bug(none) storage/websql/transaction-success-callback-isolated-world.html [ Timeout ]
+Bug(none) svg/animations/mpath-remove-from-dependents-on-delete-crash.html [ Timeout ]
+Bug(none) svg/animations/target-condition-crash.html [ Timeout ]
+Bug(none) svg/custom/g-outside-svg.html [ Failure ]
+Bug(none) svg/dom/getScreenCTM-ancestor-transform.html [ Failure ]
+Bug(none) svg/dom/SVGAnimatedListPropertyTearOff-crash.html [ Timeout ]
+Bug(none) svg/dom/SVGMatrixTearOff-crash.html [ Timeout ]
+Bug(none) tables/mozilla/core/col_widths_fix_autoFixPer.html [ Timeout ]
+Bug(none) tables/mozilla_expected_failures/marvin/backgr_fixed-bg.html [ Failure ]
+Bug(none) traversal/node-iterator-009.html [ Failure ]
+Bug(none) traversal/tree-walker-006.html [ Failure ]
+Bug(none) usb/test-polyfil.html [ Timeout ]
+Bug(none) usb/usb-connection-event.html [ Timeout ]
+Bug(none) usb/usb.html [ Timeout ]
+Bug(none) usb/usbDevice-iframe.html [ Timeout ]
+Bug(none) usb/usbDevice.html [ Timeout ]
+Bug(none) vibration/vibration-iframe.html [ Timeout ]
+Bug(none) vibration/vibration.html [ Timeout ]
+Bug(none) virtual/android/fullscreen/full-screen-iframe-allowed-video.html [ Timeout ]
+Bug(none) virtual/android/fullscreen/full-screen-iframe-legacy.html [ Timeout ]
+Bug(none) virtual/android/fullscreen/full-screen-iframe-without-allow-attribute-allowed-from-parent.html [ Failure ]
+Bug(none) virtual/android/fullscreen/video-controls-timeline.html [ Timeout ]
+Bug(none) virtual/android/fullscreen/video-fixed-background.html [ Timeout ]
+Bug(none) virtual/android/fullscreen/video-scrolled-iframe.html [ Timeout ]
+Bug(none) virtual/android/fullscreen/video-specified-size.html [ Timeout ]
+Bug(none) virtual/android/media/mediadocument/media-document-with-download-button.html [ Timeout ]
+Bug(none) virtual/disable-spinvalidation/compositing/animation/busy-indicator.html [ Timeout ]
+Bug(none) virtual/disable-spinvalidation/compositing/iframes/iframe-in-composited-layer.html [ Failure Timeout ]
+Bug(none) virtual/disable-spinvalidation/compositing/video/video-reflection.html [ Timeout ]
+Bug(none) virtual/disable-spinvalidation/paint/invalidation/media-audio-no-spurious-repaints.html [ Timeout ]
+Bug(none) virtual/disable-spinvalidation/paint/invalidation/video-mute-repaint.html [ Timeout ]
+Bug(none) virtual/disable-spinvalidation/paint/invalidation/video-paint-invalidation.html [ Timeout ]
+Bug(none) virtual/disable-spinvalidation/paint/invalidation/video-unmute-repaint.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-blob-in-workers.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-drawImage.html [ Failure ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-from-canvas-toBlob.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-immutable.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-resize.html [ Failure Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/canvas-drawImage-live-video.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/canvas-toBlob-defaultpng.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/canvas-toBlob-jpeg-maximum-quality.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/canvas-toBlob-jpeg-medium-quality.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/canvas-toBlob-toDataURL-race-imageEncoder-jpeg.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/canvas-toBlob-toDataURL-race-imageEncoder-png.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/canvas-toBlob-webp-maximum-quality.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-2d-drawImage-in-worker.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-2d-gradients-in-worker.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-2d-imageData-in-worker.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-2d-imageSmoothing-in-worker.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-2d-pattern-in-worker.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-clearRect-in-worker.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-commit-invalid-call.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-constructor-in-worker.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-convertToBlob-noIdleTask-worker.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-convertToBlob-noIdleTask.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-fillRect-in-worker.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-filter-in-worker.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-invalid-args-in-worker.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-multiple-worker-commit.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-paths-in-worker.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-placeholder-image-source-with-worker.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-placeholder-image-source.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-strokeRect-in-worker.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-transform-shadow-in-worker.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/webgl/offscreenCanvas-context-lost-restored-worker.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/webgl/offscreenCanvas-context-lost-worker.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/webgl/offscreenCanvas-transferToImageBitmap-texImage2D.html [ Timeout ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/webgl/texImage-imageBitmap-from-blob-resize.html [ Failure ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/webgl/texImage-imageBitmap-from-blob.html [ Failure ]
+Bug(none) virtual/display_list_2d_canvas/fast/canvas/webgl/texImage-imageBitmap-from-imageBitmap-from-blob.html [ Failure ]
+Bug(none) virtual/enable_asmjs/http/tests/asmjs/asm-warnings.html [ Failure ]
+Bug(none) virtual/enable_wasm/http/tests/wasm/wasm_indexeddb_test.html [ Timeout ]
+Bug(none) virtual/enable_wasm/http/tests/wasm/wasm_local_iframe_test.html [ Failure ]
+Bug(none) virtual/enable_wasm/http/tests/wasm/wasm_remote_postMessage_test.https.html [ Timeout ]
+Bug(none) virtual/enable_wasm/http/tests/wasm/wasm_serialization_tests.html [ Failure ]
+Bug(none) virtual/enable_wasm/http/tests/wasm/wasm_service_worker_test.html [ Failure ]
+Bug(none) virtual/enable_wasm_streaming/http/tests/wasm_streaming/wasm_response_apis.html [ Failure ]
+Bug(none) virtual/gpu/fast/canvas/canvas-composite-video-shadow.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/canvas-createImageBitmap-blob-in-workers.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/canvas-createImageBitmap-drawImage.html [ Failure ]
+Bug(none) virtual/gpu/fast/canvas/canvas-createImageBitmap-from-canvas-toBlob.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/canvas-createImageBitmap-immutable.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/canvas-createImageBitmap-resize.html [ Failure ]
+Bug(none) virtual/gpu/fast/canvas/canvas-drawImage-live-video.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/canvas-toBlob-defaultpng.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/canvas-toBlob-jpeg-maximum-quality.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/canvas-toBlob-jpeg-medium-quality.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/canvas-toBlob-toDataURL-race-imageEncoder-jpeg.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/canvas-toBlob-toDataURL-race-imageEncoder-png.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/canvas-toBlob-webp-maximum-quality.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/OffscreenCanvas-2d-drawImage-in-worker.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/OffscreenCanvas-2d-gradients-in-worker.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/OffscreenCanvas-2d-imageData-in-worker.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/OffscreenCanvas-2d-imageSmoothing-in-worker.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/OffscreenCanvas-2d-pattern-in-worker.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/OffscreenCanvas-clearRect-in-worker.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/OffscreenCanvas-commit-invalid-call.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/OffscreenCanvas-constructor-in-worker.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/OffscreenCanvas-convertToBlob-noIdleTask-worker.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/OffscreenCanvas-convertToBlob-noIdleTask.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/OffscreenCanvas-fillRect-in-worker.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/OffscreenCanvas-filter-in-worker.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/OffscreenCanvas-invalid-args-in-worker.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/OffscreenCanvas-multiple-worker-commit.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/OffscreenCanvas-paths-in-worker.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/OffscreenCanvas-placeholder-image-source-with-worker.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/OffscreenCanvas-placeholder-image-source.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/OffscreenCanvas-strokeRect-in-worker.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/OffscreenCanvas-transform-shadow-in-worker.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/webgl/offscreenCanvas-context-lost-restored-worker.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/webgl/offscreenCanvas-context-lost-worker.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/webgl/offscreenCanvas-transferToImageBitmap-texImage2D.html [ Timeout ]
+Bug(none) virtual/gpu/fast/canvas/webgl/texImage-imageBitmap-from-blob-resize.html [ Failure ]
+Bug(none) virtual/gpu/fast/canvas/webgl/texImage-imageBitmap-from-blob.html [ Failure ]
+Bug(none) virtual/gpu/fast/canvas/webgl/texImage-imageBitmap-from-imageBitmap-from-blob.html [ Failure Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/appcache/404-manifest.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/appcache/access-via-redirect.php [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/appcache/cyrillic-uri.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/appcache/different-https-origin-resource-main.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/appcache/fallback.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/appcache/main-resource-hash.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/appcache/main-resource-redirect.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/appcache/manifest-parsing.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/appcache/multi-fallback.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/appcache/non-html.xhtml [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/appcache/offline-access.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/appcache/online-fallback-layering.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/appcache/online-whitelist.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/appcache/remove-cache.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/appcache/simple.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/appcache/top-frame-1.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/appcache/top-frame-2.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/appcache/update-cache.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/appcache/video.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/appcache/whitelist-wildcard.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/appcache/xhr-foreign-resource.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/background_fetch/background-fetch-click-event.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/background_fetch/background-fetch-event.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/background_fetch/background-fetch-fail-event.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/background_fetch/background-fetch-manager-fetch.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/background_fetch/background-fetch-manager-get.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/background_fetch/background-fetch-manager-getTags.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/background_fetch/background-fetch-registration-abort.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/background_fetch/background-fetched-event.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/background_sync/chromium/stop-worker-no-crash.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/background_sync/interfaces.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/background_sync/oneshot-register-failure-worker-not-activated.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/background_sync/oneshot.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/background_sync/permission_denied.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/bluetooth/https/requestDevice/cross-origin-iframe.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/budget/get-budget-in-service-worker.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/budget/get-budget.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/budget/get-cost-fails-in-service-worker.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/budget/get-cost-in-service-worker.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/budget/get-cost.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/budget/interfaces-in-service-worker.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/budget/reserve-in-service-worker.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/budget/reserve.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/cache/cached-main-resource.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/cache/history-only-cached-subresource-loads-max-age-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/cache/iframe-304-crash.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/cache/network-error-during-revalidation.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/cache/post-redirect-get.php [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/cache/post-with-cached-subresources.php [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/cache/reload-main-resource.php [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/cache/stopped-revalidation.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/cache/subresource-expiration-1.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/cache/subresource-expiration-2.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/cache/subresource-failover-to-network.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/cache/subresource-fragment-identifier.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/cache/sync-xhr-304.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/cachestorage/serviceworker/credentials.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/canvas/webgl/origin-clean-conformance.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/cookies/double-quoted-value-with-semi-colon.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/cookies/http-get-cookie-set-in-js.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/cookies/js-get-and-set-http-only-cookie.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/cookies/js-set-null.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/cookies/multiple-cookies.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/cookies/same-site/basics.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/cookies/same-site/popup-cross-site-post.html [ Failure Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/cookies/same-site/popup-cross-site.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/cookies/same-site/popup-same-site-post.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/cookies/same-site/popup-same-site.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/cookies/simple-cookies-expired.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/cookies/simple-cookies-max-age.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/cookies/single-quoted-value.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/credentialmanager/credentialscontainer-frame-errors.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/credentialmanager/passwordcredential-fetch.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/css/border-image-loading.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/css/css-image-loading.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/css/font-face-src-cached.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/css/image-value-cached.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/css/mask-image-loading.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/css/reflection-mask-image-loading.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/background-image-alpha.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/background-image-multiple.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/background-image-tiled.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/invalid-image-constructor-error.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/invalid-image-paint-error.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/invalidation-background-image.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/invalidation-border-image.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/invalidation-content-image.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/overdraw.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/paint-arguments.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/paint-function-arguments.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/paint2d-composite.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/paint2d-gradient.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/paint2d-image.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/paint2d-paths.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/paint2d-rects.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/paint2d-shadows.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/paint2d-transform.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/paint2d-zoom.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/parse-input-arguments.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/registered-properties-in-custom-paint.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/registerPaint.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/style-background-image.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/style-before-pseudo.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/style-first-letter-pseudo.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/valid-image-after-load.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/csspaint/valid-image-before-load.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/dom/create-contextual-fragment-from-bodyless-svg-document-range.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/download/basic-ascii.html [ Crash ]
+Bug(none) virtual/mojo-loading/http/tests/download/literal-utf-8.html [ Crash ]
+Bug(none) virtual/mojo-loading/http/tests/encoding/meta-switch-mid-parse-with-title.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/encoding/meta-switch-mid-parse.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/chromium/data-saver.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/referrer/origin-when-cross-origin-serviceworker-from-document.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/referrer/serviceworker-echo-referrer-from-default-document.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/referrer/serviceworker-from-origin-only-document.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/access-control-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/access-control.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/auth-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/auth-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/auth-nocors-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/auth-nocors.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/auth-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/auth.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/cookie-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/cookie-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/cookie-nocors-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/cookie-nocors.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/cookie-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/cookie.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/cors-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/cors-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/cors-preflight-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/cors-preflight-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/cors-preflight.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/cors-preflight2-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/cors-preflight2-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/cors-preflight2.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/cors.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/nocors-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/nocors-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/nocors.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/redirect-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/redirect-credentials-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/redirect-credentials-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/redirect-credentials.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/redirect-loop-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/redirect-loop-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/redirect-loop.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/redirect-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/redirect-nocors-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/redirect-nocors.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/redirect-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/redirect-password-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/redirect-password-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/redirect-password.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/redirect.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/scheme-blob-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/scheme-blob-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/scheme-blob.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/scheme-data-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/scheme-data-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker-proxied/thorough/scheme-data.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/block-mixed-content-base-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/block-mixed-content-nocors-base-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/body-mixin-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/body-mixin.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/cache-override-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/cache-override.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/fetch-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/fetch.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/filtered-response-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/filtered-response-other-https.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/filtered-response.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/headers-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/headers-guard-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/headers-guard.html [ Timeout Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/headers.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/referrer-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/referrer.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/request-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/request.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/response-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/response-content-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/response-content.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/response.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/stream-reader-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/stream-reader.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/access-control-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/access-control.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/auth-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/auth-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/auth-nocors-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/auth-nocors.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/auth-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/auth.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cookie-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cookie-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cookie-nocors-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cookie-nocors.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cookie-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cookie.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cors-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cors-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cors-preflight-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cors-preflight-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cors-preflight.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cors-preflight2-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cors-preflight2-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cors-preflight2.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/cors.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/nocors-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/nocors-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/nocors.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect-credentials-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect-credentials-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect-credentials.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect-loop-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect-loop-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect-loop.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect-nocors-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect-nocors.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect-password-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect-password-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect-password.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/redirect.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/scheme-blob-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/scheme-blob-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/scheme-blob.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/scheme-data-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/scheme-data-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/serviceworker/thorough/scheme-data.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/block-mixed-content-base-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/block-mixed-content-nocors-base-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/body-mixin-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/body-mixin.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/cache-override-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/fetch-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/fetch.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/filtered-response-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/filtered-response-other-https.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/headers-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/headers-guard-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/referrer-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/request-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/request.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/response-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/response-content-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/response-content.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/response.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/stream-reader-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/stream-reader.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/access-control-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/access-control.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/auth-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/auth-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/auth-nocors-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/auth-nocors.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/auth-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/auth.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/cookie-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/cookie-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/cookie-nocors-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/cookie-nocors.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/cookie-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/cookie.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/cors-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/cors-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/cors-preflight-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/cors-preflight-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/cors-preflight.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/cors-preflight2-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/cors-preflight2-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/cors-preflight2.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/cors.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/nocors-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/nocors-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/nocors.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/redirect-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/redirect-credentials-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/redirect-credentials-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/redirect-credentials.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/redirect-loop-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/redirect-loop-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/redirect-loop.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/redirect-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/redirect-nocors-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/redirect-nocors.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/redirect-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/redirect-password-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/redirect-password-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/redirect-password.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/redirect.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/scheme-blob-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/scheme-blob-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/scheme-blob.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/scheme-data-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/scheme-data-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/window/thorough/scheme-data.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/block-mixed-content-base-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/block-mixed-content-nocors-base-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/body-mixin-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/body-mixin.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/cache-override-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/fetch-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/fetch.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/filtered-response-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/filtered-response-other-https.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/headers-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/headers-guard-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/referrer-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/request-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/request.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/response-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/response-content-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/response-content.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/response.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/stream-reader-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/stream-reader.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/access-control-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/access-control.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/auth-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/auth-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/auth-nocors-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/auth-nocors.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/auth-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/auth.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/cookie-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/cookie-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/cookie-nocors-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/cookie-nocors.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/cookie-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/cookie.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/cors-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/cors-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/cors-preflight-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/cors-preflight-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/cors-preflight.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/cors-preflight2-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/cors-preflight2-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/cors-preflight2.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/cors.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/nocors-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/nocors-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/nocors.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/redirect-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/redirect-credentials-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/redirect-credentials-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/redirect-credentials.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/redirect-loop-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/redirect-loop-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/redirect-loop.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/redirect-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/redirect-nocors-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/redirect-nocors.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/redirect-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/redirect-password-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/redirect-password-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/redirect-password.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/redirect.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/scheme-blob-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/scheme-blob-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/scheme-blob.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/scheme-data-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/scheme-data-other-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fetch/workers/thorough/scheme-data.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/fileapi/blob-url-in-subframe.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/history/push-state-in-new-frame.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/htmlimports/import-cors-credentials.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/https/verify-ssl-enabled.php [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector-protocol/network-data-length.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector-protocol/network-fetch-content-with-error-status-code.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector-protocol/reload-memory-cache.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector-protocol/request-mixed-content-status-blockable.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector-protocol/request-mixed-content-status-none.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector-protocol/request-mixed-content-status-optionally-blockable.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/appcache/appcache-iframe-manifests.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/appcache/appcache-manifest-with-non-existing-file.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/appcache/appcache-swap.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/audits/set-cookie-header-audit-no-false-positive.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/console-resource-errors.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/console-xhr-logging.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/elements/event-listeners-framework-with-service-worker.html [ Failure Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/extensions-headers.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/extensions-useragent.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/network-preflight-options.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/network/download.html [ Crash ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/network/from-disk-cache-timing.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/network/har-content.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/network/load-resource-for-frontend.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/network/network-columns-sorted.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/network/network-content-replacement-xhr.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/network/network-cyrillic-xhr.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/network/network-datareceived.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/network/network-disable-cache-memory.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/network/network-empty-xhr.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/network/network-filters.html [ Timeout Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/network/network-initiator-from-console.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/network/network-initiator.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/network/network-memory-cached-resource.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/network/network-request-type.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/network/network-xhr-async-response-type-blob.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/network/network-xhr-binary-content.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/network/network-xhr-replay.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/network/network-xhr-sync.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/network/ping-response.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/network/resource-priority.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/network/warning-for-long-cookie.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/network/x-frame-options-deny.html [ Failure Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/persistence/automapping-rename-files.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/persistence/automapping-sourcemap-nameclash.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/persistence/persistence-do-not-overwrite-css.html [ Failure Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/persistence/persistence-merge-editor-tabs.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/persistence/persistence-mimetype-on-rename.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/persistence/persistence-move-breakpoints-on-reload.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/persistence/persistence-move-breakpoints.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/persistence/persistence-navigator.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/persistence/persistence-search-across-all-files.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/persistence/persistence-sourceframe-messages.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/persistence/persistence-sync-content-nodejs.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/persistence/persistence-sync-content.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/persistence/persistence-tabbed-editor-tabs-order.html [ Failure Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/resource-har-conversion.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/resource-parameters.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/resource-tree/cached-resource-metadata.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/resource-tree/resource-tree-no-xhrs.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/search/sources-search-scope-in-files.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/search/sources-search-scope-many-projects.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/search/sources-search-scope.html [ Failure Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/service-workers/lazy-addeventlisteners.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/service-workers/service-worker-agents.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/service-workers/service-worker-manager.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/service-workers/service-worker-pause.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/service-workers/service-workers-bypass-for-network-redirect.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/service-workers/service-workers-force-update-on-page-load.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/service-workers/service-workers-navigation-preload.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/service-workers/service-workers-redundant.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/service-workers/service-workers-view.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/service-workers/user-agent-override.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/sources/debugger/pause-in-removed-frame.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/inspector/sources/ui-source-code-metadata.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/linkHeader/link-preconnect-schemeless.https.php [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/loading/307-after-303-after-post.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/loading/bad-scheme-subframe.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/loading/pdf-commit-load-callbacks.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/loading/preload-image-sizes-2x.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/loading/redirect-with-no-location-crash.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/loading/text-content-type-with-binary-extension.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/loading/window-open-onblur-reentrancy.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/local/blob/send-data-blob.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/local/blob/send-hybrid-blob.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/local/blob/send-sliced-data-blob.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/local/fileapi/file-last-modified-after-delete.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/local/fileapi/file-last-modified.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/local/fileapi/send-dragged-file.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/local/fileapi/send-sliced-dragged-file.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/local/formdata/formdata-methods.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/local/formdata/send-form-data-constructed-from-form.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/local/formdata/send-form-data-with-bad-string.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/local/formdata/send-form-data-with-filename.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/local/formdata/send-form-data-with-null-string.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/local/formdata/send-form-data-with-sliced-file.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/local/formdata/send-form-data-with-string-containing-null.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/local/formdata/send-form-data.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/local/formdata/upload-events.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/local/serviceworker/fetch-request-body-file.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/audio-seekable-contains-zero-without-ranges.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/audio-timeline-seek-outside-seekable.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/autoplay-crossorigin.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/controls/controls-list-add-hide.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/controls/controls-list-remove-show.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/encrypted-media/encrypted-media-encrypted-event-same-origin.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/gc-while-network-loading.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-addsourcebuffer.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-append-buffer.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-appendwindow.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-avtracks.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-buffered.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-config-change-webm-a-bitrate.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-config-change-webm-av-audio-bitrate.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-config-change-webm-av-framesize.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-config-change-webm-av-video-bitrate.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-config-change-webm-v-framesize.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-detach.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-duration-boundaryconditions.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-duration.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-errors.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-getvideoplaybackquality.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-initsegmentreceived-alg.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-play-then-seek-back.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-play.html [ Failure Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-precise-duration.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-redundant-seek.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-remove.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-removesourcebuffer.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-seek-beyond-duration.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-seek-during-pending-seek.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-seekable.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-sequencemode-append-buffer.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-sequencemode-crbug-616565.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-sourcebuffer-mode.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-sourcebuffer-trackdefaults.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-sourcebufferlist-crash.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-sourcebufferlist.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/mediasource-timestamp-offset.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/media-source/stream_memory_tests/mediasource-appendbuffer-quota-exceeded-default-buffers.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/mixed-range-response.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/preload-conditions.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/progress-events-generated-correctly.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/reload-after-dialog.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/remove-while-loading.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/video-buffered-range-contains-currentTime.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/video-buffered.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/video-cancel-load.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/video-controls-download-button-displayed.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/video-controls-download-button-not-displayed-hide-download-ui.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/video-controls-download-button-not-displayed-mediastream.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/video-controls-download-button-saves-media.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/video-controls-overflow-menu-correct-ordering.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/video-controls-overflow-menu-download-button.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/video-controls-overflow-menu-updates-appropriately.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/video-cookie.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/video-error-abort.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/video-in-iframe-crash.html [ Crash ]
+Bug(none) virtual/mojo-loading/http/tests/media/video-load-metadata-decode-error.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/video-load-twice.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/video-load-with-userpass.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/video-preload-metadata.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/video-query-url.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/video-referer.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/video-seek-to-duration.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/video-seek-to-middle.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/video-served-as-text.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/video-throttled-load-metadata.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/media/video-useragent.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/misc/adopt-iframe-src-attr-after-remove.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/misc/createElementNamespace1.xml [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/misc/detach-and-location-change-in-onload.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/misc/image-checks-for-accept.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/misc/link-preconnect-schemeless.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/misc/link-rel-prefetch.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/misc/onload-detach-during-csp-frame-src-none.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/misc/redirect-to-about-blank.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/misc/resource-timing-sizes-cache-worker.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/misc/resource-timing-sizes-cache.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/misc/resource-timing-sizes-content-encoding-worker.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/misc/resource-timing-sizes-content-encoding.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/misc/resource-timing-sizes-redirect-worker.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/misc/resource-timing-sizes-redirect.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/misc/resource-timing-sizes-sync-xhr-transfer-size.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/misc/resource-timing-sizes-tags.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/misc/resource-timing-sizes-xhr-fetch-worker.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/misc/resource-timing-sizes-xhr-fetch.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/misc/tests-finishing-simultaneously.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/misc/webtiming-ssl.php [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/misc/xhtml.php [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/navigation/multiple-back-forward-entries.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/navigation/navigation-interrupted-by-fragment.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/navigation/onload-navigation-iframe-2.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/navigation/onload-navigation-iframe-timeout.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/navigation/onload-navigation-iframe.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/navigation/ping-cookie.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/navigation/ping-cross-origin-from-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/navigation/pushstate-whitelisted-at-blob-denied.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/navigation/redirect-on-back-updates-history-item.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/navigation/redirect-on-reload-updates-history-item.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/navigation/same-and-different-back.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/navigation/same-url-iframes-defer-crash.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/navigation/start-load-during-provisional-loader-detach.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/request-permission-in-service-workers.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworker-notification-event.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworker-notification-properties.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworker-notificationclick-event-action-reflection.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworker-notificationclick-event-data-reflection.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworker-notificationclick-event-reply-reflection.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworker-notificationclick-openwindow-crash.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworker-notificationclose-event-data-reflection.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworker-throw-constructor.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-document-actions-throw.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-document-click.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-document-close.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-document-data-invalid.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-document-data-throw.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-document-direction.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-document-fetch-resources.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-document-image-404.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-document-image-redirect-loop.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-document-image-redirect.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-document-image-slow-404.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-document-image-slow.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-document-no-permission.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-document-not-activated.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-document-vibrate-throw.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-get-close.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-get-empty.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-get-filter.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-get-from-service-worker.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-get-replacement.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-get.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-page-notification-fetch-resources.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-service-worker-click.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-service-worker-fetch-resources.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-service-worker-get-filter.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-service-worker-get.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-service-worker-image-404.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-service-worker-image-abort.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-service-worker-image-redirect-loop.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-service-worker-image-redirect.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-service-worker-image-slow-404.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-service-worker-image-slow.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/notifications/serviceworkerregistration-service-worker-no-permission.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/origin_trials/sample-api-workers.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/origin_trials/webexposed/budget-api-origin-trial-interfaces.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/origin_trials/webexposed/foreignfetch-origin-trial-interfaces.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/payments/payment-app-interfaces.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/payments/payment-instruments.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/payments/payment-request-event.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/permissions/test-api-surface.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/permissions/test-query.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/application-server-key-format-test.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/application-server-key-standard-endpoint.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/get-subscription-in-document.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/get-subscription-in-service-worker.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/permission-state-denied-in-document.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/permission-state-denied-in-service-worker.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/permission-state-exception-in-document.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/permission-state-exception-in-service-worker.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/permission-state-granted-in-service-worker.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/permission-state-prompt-in-document.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/permission-state-prompt-in-service-worker.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/push-subscription-options.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/push-subscription-stringification.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/pushevent-extendable-event.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/pushmessagedata.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/subscribe-encryption-public-key.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/subscribe-failure-mismatched-sender-id.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/subscribe-failure-no-manifest-in-service-worker.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/subscribe-failure-permission-default-in-service-worker.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/subscribe-failure-permission-denied-in-document.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/subscribe-failure-permission-denied-in-service-worker.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/subscribe-failure-worker-not-activated.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/subscribe-success-in-document.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/subscribe-success-in-service-worker.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/unsubscribe-in-document.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/push_messaging/unsubscribe-in-service-worker.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/contentSecurityPolicy/1.1/form-action-src-get-blocked-with-redirect.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/contentSecurityPolicy/1.1/form-action-src-redirect-blocked.html [ Failure Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/contentSecurityPolicy/block-mixed-content-hides-warning.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/contentSecurityPolicy/cascade/same-origin-window-open.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/contentSecurityPolicy/cascade/same-origin-with-own-policy-window-open.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/contentSecurityPolicy/cascade/same-origin-with-own-policy.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/contentSecurityPolicy/cascade/same-origin.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/contentSecurityPolicy/frame-src-child-frame-navigates-to-blocked-origin.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/contentSecurityPolicy/frame-src-cross-origin-load.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/contentSecurityPolicy/frame-src-redirect-blocked.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/contentSecurityPolicy/register-bypassing-scheme-script.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/contentSecurityPolicy/report-same-origin-with-cookies.php [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/contentSecurityPolicy/script-src-star-cross-scheme.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/contentSecurityPolicy/source-list-parsing-10.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/cookies/first-party-cookie-allow-xslt.xml [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/cookies/third-party-cookie-blocking-main-frame.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/cookies/third-party-cookie-blocking-worker.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/cookies/xmlhttprequest.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/cors-rfc1918/addressspace-serviceworker-basic.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/cross-frame-access-parent-explicit-domain-isolated-world.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/cross-frame-access-parent-isolated-world.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/cross-frame-access-protocol-explicit-domain.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/cross-frame-access-protocol.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/cross-origin-createImageBitmap.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/cross-origin-OffscreenCanvas2D-transferToImageBitmap.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/cross-origin-OffscreenCanvasWebGL-texImage2D.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/detached-window-cross-origin-access.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/document-all.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/img-crossorigin-cookies.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/img-redirect-to-crossorigin-credentials.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/link-crossorigin-preload-no-cors.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/listener/xss-XMLHttpRequest-addEventListener.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/local-video-source-from-remote.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/location-change-from-detached-DOMWindow.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/media-element-audio-source-node-cross-origin-allowed.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/media-element-audio-source-node-cross-origin-with-credentials.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/media-element-audio-source-node-cross-origin.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/media-element-audio-source-node-same-origin.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mime-type-execute-as-html-01.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/mime-type-execute-as-html-04.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/about-blank-iframe-in-main-frame.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/active-subresource-in-http-iframe-not-blocked.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/active-subresource-in-iframe-blocked.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/blob-url-in-iframe.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/blob-url-script-in-data-iframe.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/blob-url-script-in-sandboxed-iframe.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/blocked-blob-url-script-in-data-iframe.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/data-url-iframe-in-main-frame.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/data-url-script-in-data-iframe.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/filesystem-url-in-iframe.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-async-post-xhr-blocked.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-audio-video-in-main-frame.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-css-image-with-reload.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-css-in-iframe.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-css-in-main-frame.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-css-resources.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-empty-srcset-in-main-frame-blocked.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-eventsource-in-main-frame.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-fetch-blocked.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-font-in-main-frame.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-formSubmission-in-invisible-DOM.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-formSubmission-in-main-frame-allowed.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-formSubmission-in-main-frame-blocked.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-formSubmission-in-main-frame-javascript-allowed.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-formSubmission-in-main-frame.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-frame-in-data-iframe-in-main-frame-blocked.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-iframe-in-iframe.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-iframe-in-main-frame-allowed.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-iframe-in-main-frame-blocked.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-iframe-in-main-frame.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-iframe-with-hsts.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-image-in-iframe.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-image-in-main-frame-allowed.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-image-in-main-frame-blocked.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-image-in-main-frame.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-localhost-allowed.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-picture-in-main-frame-blocked.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-plugin-in-iframe.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-prefetch-in-main-frame.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-script-in-data-iframe-in-main-frame-blocked.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-script-in-iframe.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-script-in-main-frame-allowed.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-script-in-main-frame-blocked.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-script-through-redirection.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-srcset-in-main-frame-blocked.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-sync-post-xhr-allowed.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-sync-post-xhr-blocked.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-texttrack-in-main-frame-blocked.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/insecure-xhr-in-main-frame.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/nonwebby-scheme-in-iframe-allowed.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/preload-insecure-image-in-main-frame-blocked.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/redirect-http-to-https-iframe-in-main-frame.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/redirect-http-to-https-script-in-iframe.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/redirect-https-to-http-iframe-in-main-frame.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/redirect-https-to-http-script-in-iframe.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/strict-mode-image-blocked.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/strict-mode-image-in-frame-blocked.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/strict-mode-image-no-policy.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/strict-mode-image-reportonly.https.php [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/strict-mode-via-pref-image-blocked.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/strict-mode-websocket-blocked.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/websocket/insecure-websocket-in-sandbox-in-secure-page.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/websocket/insecure-websocket-in-secure-page-allowed.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/websocket/insecure-websocket-in-secure-page-worker-allowed.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/websocket/insecure-websocket-in-secure-page-worker.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/mixedContent/websocket/insecure-websocket-in-secure-page.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/no-indexeddb-from-sandbox.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/no-popup-from-sandbox-top.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/no-popup-from-sandbox.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/no-referrer.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/offscreen-canvas-worker-read-blocked-by-setting.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/opened-document-security-origin-resets-on-navigation.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/originHeader/origin-header-for-https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/popup-allowed-by-sandbox-can-navigate.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/popup-allowed-by-sandbox-is-sandboxed-control.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/popup-allowed-by-sandbox-is-sandboxed.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/popup-allowed-by-sandbox-when-allowed.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/powerfulFeatureRestrictions/geolocation-on-sandboxed-insecure-origin.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/powerfulFeatureRestrictions/geolocation-on-secure-origin-in-insecure-origin.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/powerfulFeatureRestrictions/geolocation-on-secure-origin-in-secure-origin.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/powerfulFeatureRestrictions/webshare-on-insecure-origin.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrer-on-client-redirect.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrer-policy-attribute-anchor-no-referrer-when-downgrade.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrer-policy-attribute-area-no-referrer-when-downgrade.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrer-policy-attribute-iframe-no-referrer-when-downgrade.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrer-policy-attribute-img-no-referrer-when-downgrade.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrer-policy-conflicting-policies.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrer-policy-https-always.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrer-policy-https-default.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrer-policy-https-never.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrer-policy-https-no-referrer-when-downgrade.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrer-policy-https-no-referrer.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrer-policy-https-origin-when-crossorigin.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrer-policy-https-origin.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrer-policy-https-unsafe-url.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrer-policy-redirect-link.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrer-policy-redirect.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrerPolicyHeader/basic-header-cross-origin-with-origin-when-cross-origin.php [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrerPolicyHeader/basic-header-cross-origin-with-origin.php [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrerPolicyHeader/basic-header-downgrade-with-no-referrer-when-downgrade.https.php [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrerPolicyHeader/basic-header-no-downgrade-with-no-referrer-when-downgrade.https.php [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrerPolicyHeader/basic-header-unsafe-url.https.php [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrerPolicyHeader/legacy-always.php [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrerPolicyHeader/legacy-default.php [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrerPolicyHeader/legacy-never.php [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrerPolicyHeader/legacy-origin-when-crossorigin.php [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrerPolicyHeader/referrer-policy-cross-origin-redirect.php [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/referrerPolicyHeader/referrer-policy-header-on-cross-origin-redirect-response.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/sandboxed-opener-can-close-window.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/secureContexts/authenticated.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/secureContexts/authenticated_sandbox.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/secureContexts/authenticated_srcdoc.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/secureContexts/authenticated_worker.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/secureContexts/unauthenticated.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/secureContexts/unauthenticated_sandbox.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/secureContexts/unauthenticated_srcdoc.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/secureContexts/unauthenticated_worker.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/suborigins/suborigin-cookies.php [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/suborigins/suborigin-service-worker-fetch-event.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/suborigins/suborigin-service-worker-no-xorigin-caching.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/suborigins/suborigin-unsafe-cookies.php [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/upgrade-insecure-requests/basic-upgrade.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/upgrade-insecure-requests/form-upgrade.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/upgrade-insecure-requests/iframe-upgrade.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/upgrade-insecure-requests/sandbox-upgrade.https.php [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/video-cross-origin-readback.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/video-cross-origin-via-dom.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/webgl-remote-read-remote-image-allowed-with-credentials.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/webgl-remote-read-remote-image-allowed.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/webgl-remote-read-remote-image-blocked-no-crossorigin.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/window-named-proto.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/window-named-valueOf.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/security/xss-exception.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/xssAuditor/base-href-unterminated.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/security/xssAuditor/no-protection-script-tag.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/sendbeacon/beacon-cookie.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/sendbeacon/beacon-cross-origin.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/sendbeacon/beacon-same-origin.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium.fetch-canvas-tainting.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium.fetch-cors-xhr.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium.fetch-csp.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium.fetch-event-async-respond-with.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium.fetch-event-headers.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium.fetch-event-respond-with-stops-propagation.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium.fetch-request-css-base-url.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium.fetch-request-resources.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium.fetch-request-xhr.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium.fetch-response-xhr.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium.getregistrations.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium.performance-timeline.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium.redirected-response.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium.referer.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium.register-wait-forever-in-install-worker.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium.request-end-to-end.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/claim-with-redirect.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/clients-openwindow.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/css-import-crash.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/extendable-message-event.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/fetch-error-messages.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/fetch-event-synthetic-respond-with.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/fetch-request-with-gc.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/fetch-script-onerror.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/force-refresh-ready.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/force-refresh-registration.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/load-flushed-script.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/memory-cache.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/no-filesystem.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/notificationclick-can-focus.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/notificationclick-can-openwindow.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/postmessage-after-terminate.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/postmessage-cross-process.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/register-different-script-many-times.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/register-error-messages.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/registration-stress.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/request-body-blob-crash.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/resolve-after-window-close.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/respond-with-body-accessed-response.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/sandboxed-iframe-fetch-event.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/sandboxed-iframe-navigator-serviceworker.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/service-worker-allowed.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/service-worker-gc.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/service-worker-mixed-response.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/stop-worker-during-respond-with.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/stop-worker-with-pending-fetch.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/unregister-on-detached-iframe.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/usecounter-on-claim.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/usecounter-on-load.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/usecounter-on-reload.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/usecounter.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/window-close-during-registration.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/windowclient-focus.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/chromium/xhr-is-not-exposed-to-service-workers.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/immutable-prototype-serviceworker.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/indexeddb.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/insecure-parent-frame.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/navigation-preload/chromium/navigation-preload-after-gc.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/navigation-preload/chromium/navigation-preload-resource-timing.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/navigation-preload/chromium/preload-response-after-gc.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/navigation-preload/chromium/use-counter.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/ServiceWorkerGlobalScope/registration-attribute.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/ServiceWorkerGlobalScope/unregister.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/ServiceWorkerGlobalScope/update.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/sync-xhr-doesnt-deadlock.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/waiting.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/webexposed/global-interface-listing-service-worker.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/serviceworker/websocket/websocket-in-service-worker.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/storage/callbacks-are-called-in-correct-context.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/usb/secure-context.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_redirects.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/webaudio/autoplay-crossorigin.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/webfont/same-origin-credentials.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/webfont/slow-loading.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/websocket/bufferedAmount-after-send.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/websocket/cookie-http-to-ws.pl [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/websocket/fragmented-binary-frames.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/websocket/httponly-cookie.pl [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/websocket/receive-blob.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/websocket/send-blob-onmessage-origin.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/websocket/send-blob.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/websocket/send-file-blob-fail.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/websocket/send-file-blob.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/websocket/workers/receive-blob.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/websocket/workers/send-blob.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/workers/shared-worker-secure-context.https.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/workers/text-encoding.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/abort-should-destroy-responseText.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-allow-lists-starting-with-comma.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-basic-allow-access-control-origin-header-data-url.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-basic-allow-access-control-origin-header.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-basic-allow-star.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-basic-allow.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-basic-denied.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-basic-get-fail-non-simple.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-basic-non-simple-allow.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-basic-non-simple-deny-cached.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-basic-post-fail-non-simple-content-type.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-basic-whitelist-request-headers.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-basic-whitelist-response-headers.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-preflight-async-header-denied.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-preflight-async-method-denied.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-preflight-async-not-supported.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-preflight-credential-sync.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-preflight-headers-async.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-preflight-headers-sync.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-preflight-request-must-not-contain-cookie.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-preflight-sync-header-denied.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-preflight-sync-method-denied.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-preflight-sync-not-supported.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-response-with-body-sync.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-sandboxed-iframe-allow-origin-null.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-sandboxed-iframe-allow.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-sandboxed-iframe-denied-without-wildcard.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/access-control-sandboxed-iframe-denied.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/async-xhr-revalidate-after-sync-xhr.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/authorization-header.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/binary-x-user-defined.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/blob-response-type-warm-cache.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/broken-xml-encoding.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/cache-override.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/cookies.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/cross-origin-cookie-storage.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/cross-origin-preflight-get-response-type-blob.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/cross-site-denied-response-sync-2.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/cross-site-denied-response-sync.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/document-domain-set.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/duplicate-revalidation-reload.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/encode-request-url-2.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/encode-request-url.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/encoding-send-latin-1.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/event-target.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/exceptions.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/extra-parameters.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/failed-auth.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/filename-encoding.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/get-dangerous-headers.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/logout.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/methods-lower-case.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/methods.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/newline-in-request-uri.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/null-auth.php [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/onloadend-event-after-sync-requests.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/open-async-overload.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/00.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/01.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/02.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/03.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/04.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/05.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/06.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/07.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/08.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/09.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/10.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/11.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/12.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/13.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/14.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/15.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/16.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/17.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/18.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/19.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/20.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/21.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/22.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/23.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/24.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/25.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/26.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/27.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/28.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/29.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/30.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/31.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/32.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/33.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/34.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/35.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/36.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/37.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/38.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/39.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/40.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/41.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/42.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/43.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/44.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/45.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/46.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/47.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-header-cross-origin-get-sync.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-header-cross-origin-post-sync.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-header-same-origin-get-sync.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-header-same-origin-post-sync.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-whitelisting-all.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-whitelisting-exact-match.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-whitelisting-https.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-whitelisting-ip-addresses-with-subdomains.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-whitelisting-ip-addresses.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-whitelisting-removal.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/origin-whitelisting-subdomains.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/post-blob-content-type-sync.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/post-content-type.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/post-formdata.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/post-with-boundary.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/redirect-cross-origin-tripmine.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/referer.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/remember-bad-password.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/reopen-encoding.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/request-encoding.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/request-encoding2.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/request-encoding3.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/request-encoding4.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/response-blob-mimetype.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/response-blob-size.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/response-encoding.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/response-encoding2.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/send-entity-body-basic.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/send-entity-body-charset.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/serialize-document.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/set-dangerous-headers.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/simple-cross-origin-denied-events-post-sync.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/simple-cross-origin-denied-events-sync.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/state-after-network-error.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/sync-after-async-same-resource.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/sync-repeated-and-caching.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/sync-xhr-revalidate-after-async-xhr.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-aborted.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-simple.html [ Failure Pass Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-aborted.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-simple.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-synconworker.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-twice.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/upload-onload-event.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/upload-onloadend-event-after-abort.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/upload-onloadend-event-after-load.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/upload-onloadend-event-after-sync-requests.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/upload-onprogress-event.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/upload-progress-events.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/web-apps/002-simple.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/web-apps/002.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/web-apps/003.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/web-apps/004.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/web-apps/005.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/web-apps/007.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/web-apps/008.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/web-apps/010.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/web-apps/011.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/web-apps/012.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/web-apps/014.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/web-apps/015.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/web-apps/018.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/withCredentials-after-send.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/workers/post-formdata.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/workers/shared-worker-response-type-blob-sync.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/workers/shared-worker-response-type-blob.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/workers/upload-onprogress-event.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/workers/xmlhttprequest-response-type-blob-sync.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/workers/xmlhttprequest-response-type-blob.html [ Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/xhr-to-blob-in-isolated-world.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/xml-encoding.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/xmlhttprequest-latin1.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/xmlhttprequest-missing-file-exception.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/xmlhttprequest-response-type-blob.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/xmlhttprequest-setrequestheader-no-value.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/xmlhttprequest-sync-no-progress-events.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/xmlhttprequest-sync-no-timers.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/xmlhttprequest-sync-vs-async-assertion-failure.html [ Failure Timeout ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/xmlhttprequest-unload-sync.html [ Failure ]
+Bug(none) virtual/mojo-loading/http/tests/xmlhttprequest/zero-length-response-sync.html [ Failure ]
+Bug(none) virtual/mojo-localstorage/external/wpt/webstorage/event_no_duplicates.html [ Failure Timeout ]
+Bug(none) virtual/mse-1mb-buffers/http/tests/media/media-source/stream_memory_tests/mediasource-appendbuffer-quota-exceeded-1mb-buffers.html [ Timeout ]
+Bug(none) virtual/new-remote-playback-pipeline/media/controls/buttons-after-reset.html [ Timeout ]
+Bug(none) virtual/new-remote-playback-pipeline/media/controls/closed-captions-switch-track.html [ Timeout ]
+Bug(none) virtual/new-remote-playback-pipeline/media/controls/controls-cast-button-narrow.html [ Timeout ]
+Bug(none) virtual/new-remote-playback-pipeline/media/controls/controls-cast-button.html [ Timeout ]
+Bug(none) virtual/new-remote-playback-pipeline/media/controls/controls-cast-do-not-fade-out.html [ Timeout ]
+Bug(none) virtual/new-remote-playback-pipeline/media/controls/controls-cast-overlay-slow-fade.html [ Timeout ]
+Bug(none) virtual/new-remote-playback-pipeline/media/controls/controls-overlay-cast-button.html [ Timeout ]
+Bug(none) virtual/new-remote-playback-pipeline/media/controls/overflow-fully-hidden.html [ Timeout ]
+Bug(none) virtual/new-remote-playback-pipeline/media/controls/overlay-play-button-document-move.html [ Timeout ]
+Bug(none) virtual/new-remote-playback-pipeline/media/controls/overlay-play-button-narrow.html [ Timeout ]
+Bug(none) virtual/new-remote-playback-pipeline/media/controls/settings-disable-controls.html [ Timeout ]
+Bug(none) virtual/new-remote-playback-pipeline/media/controls/time-update-after-unload.html [ Timeout ]
+Bug(none) virtual/new-remote-playback-pipeline/media/controls/video-controls-overflow-menu-hide-on-click-outside.html [ Timeout ]
+Bug(none) virtual/new-remote-playback-pipeline/media/controls/video-controls-overflow-menu-hide-on-click-panel.html [ Timeout ]
+Bug(none) virtual/new-remote-playback-pipeline/media/controls/video-controls-overflow-menu-hide-on-click.html [ Timeout ]
+Bug(none) virtual/new-remote-playback-pipeline/media/controls/video-controls-overflow-menu-hide-on-resize.html [ Timeout ]
+Bug(none) virtual/new-remote-playback-pipeline/media/controls/video-controls-overflow-menu-text.html [ Timeout ]
+Bug(none) virtual/new-remote-playback-pipeline/media/controls/video-controls-overflow-menu-visibility.html [ Timeout ]
+Bug(none) virtual/new-remote-playback-pipeline/media/controls/video-controls-with-cast-rendering.html [ Timeout ]
+Bug(none) virtual/new-remote-playback-pipeline/media/controls/video-enter-exit-fullscreen-while-hovering-shows-controls.html [ Timeout ]
+Bug(none) virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-dark-rendering.html [ Timeout ]
+Bug(none) virtual/new-remote-playback-pipeline/media/controls/video-overlay-play-button.html [ Timeout ]
+Bug(none) virtual/new-remote-playback-pipeline/media/controls/volumechange-muted-attribute.html [ Timeout ]
+Bug(none) virtual/new-remote-playback-pipeline/media/controls/volumechange-stopimmediatepropagation.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/common.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/serviceworker/cache-add.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/serviceworker/cache-delete.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/serviceworker/cache-keys.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/serviceworker/cache-match.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/serviceworker/cache-matchAll.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/serviceworker/cache-put.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/serviceworker/cache-storage-keys.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/serviceworker/cache-storage-match.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/serviceworker/cache-storage.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/serviceworker/credentials.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/window/cache-add.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/window/cache-delete.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/window/cache-keys.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/window/cache-match.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/window/cache-matchAll.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/window/cache-put.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/window/cache-storage-keys.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/window/cache-storage-match.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/window/cache-storage.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/window/sandboxed-iframes.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/worker/cache-add.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/worker/cache-delete.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/worker/cache-keys.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/worker/cache-match.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/worker/cache-matchAll.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/worker/cache-put.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/worker/cache-storage-keys.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/worker/cache-storage-match.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/cache-storage/worker/cache-storage.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/activate-event-after-install-state-change.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/activation-after-registration.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/activation.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/active.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/appcache-ordering-main.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/claim-affect-other-registration.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/claim-fetch.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/claim-not-using-registration.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/claim-using-registration.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/client-id.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/clients-get-client-types.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/clients-get.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/clients-matchall-exact-controller.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/clients-matchall-include-uncontrolled.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/clients-matchall-on-evaluation.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/clients-matchall-order.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/clients-matchall.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/controller-on-disconnect.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/controller-on-load.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/controller-on-reload.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/extendable-event-async-waituntil.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/extendable-event-waituntil.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-canvas-tainting.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-cors-xhr.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-csp.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-event-after-navigation-within-page.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-event-async-respond-with.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-event-network-error.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-event-respond-with-argument.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-event-respond-with-readable-stream.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-event-respond-with-response-body-with-invalid-chunk.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-event-respond-with-stops-propagation.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-event-throws-after-respond-with.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-event-within-sw-manual.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-event-within-sw.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-event.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-header-visibility.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-mixed-content-to-inscope.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-mixed-content-to-outscope.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-request-css-base-url.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-request-css-cross-origin-mime-check.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-request-css-images.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-request-fallback.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-request-html-imports.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-request-no-freshness-headers.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-request-redirect.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-request-resources.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-response-taint.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-response-xhr.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-waits-for-activate.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/foreign-fetch-basics.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/foreign-fetch-cors.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/foreign-fetch-event.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/foreign-fetch-workers.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/getregistration.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/getregistrations.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/iframe-sandbox-register-link-element.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/import-scripts-resource-map.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/import-scripts-updated-flag.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/indexeddb.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/install-event-type.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/installing.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/interfaces.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/iso-latin1-header.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/multi-globals/url-parsing.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/multiple-register.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/multiple-update.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/navigate-window.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/navigation-preload/broken-chunked-encoding.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/navigation-preload/chunked-encoding.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/navigation-preload/empty-preload-response-body.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/navigation-preload/get-state.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/navigation-preload/redirect.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/navigation-preload/request-headers.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/navigation-preload/resource-timing.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/navigation-redirect-body.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/navigation-redirect-to-http.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/navigation-redirect.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/onactivate-script-error.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/oninstall-script-error.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/opaque-response-preloaded.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/performance-timeline.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/postmessage-blob-url.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/postmessage-from-waiting-serviceworker.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/postmessage-msgport-to-client.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/postmessage-to-client.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/postmessage.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/ready.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/redirected-response.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/referer.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/referrer-policy-header.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/register-closed-window.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/register-default-scope.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/register-foreign-fetch-errors.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/register-link-element.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/register-link-header.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/register-same-scope-different-script-url.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/register-wait-forever-in-install-worker.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/registration-end-to-end.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/registration-events.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/registration-iframe.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/registration-service-worker-attributes.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/registration.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/rejections.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/request-body-blob.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/resource-timing.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/service-worker-csp-connect.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/service-worker-csp-default.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/service-worker-csp-script.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/serviceworker-message-event-historical.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/close.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/extendable-message-event-constructor.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/extendable-message-event.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/postmessage.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/registration-attribute.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/service-worker-error-event.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/unregister.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/update.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/serviceworkerobject-scripturl.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/shared-worker-controlled.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/skip-waiting-installed.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/skip-waiting-using-registration.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/skip-waiting-without-client.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/skip-waiting-without-using-registration.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/skip-waiting.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/state.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/synced-state.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/uncontrolled-page.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/unregister-controller.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/unregister-then-register-new-script.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/unregister-then-register.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/unregister.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/update-after-navigation-fetch-event.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/update-recovery.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/update.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/waiting.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/websocket.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/worker-interception.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/xhr.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/block-mixed-content-base-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/block-mixed-content-nocors-base-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/body-mixin-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/body-mixin.html [ Failure Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/cache-override-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/fetch-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/fetch.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/filtered-response-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/filtered-response-other-https.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/headers-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/headers-guard-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/referrer-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/request-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/request.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/response-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/response-content-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/response-content.html [ Timeout Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/response.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/stream-reader-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/stream-reader.html [ Failure Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/access-control-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/access-control.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/auth-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/auth-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/auth-nocors-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/auth-nocors.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/auth-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/auth.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/cookie-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/cookie-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/cookie-nocors-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/cookie-nocors.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/cookie-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/cookie.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/cors-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/cors-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/cors-preflight-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/cors-preflight-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/cors-preflight.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/cors-preflight2-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/cors-preflight2-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/cors-preflight2.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/cors.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/nocors-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/nocors-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/nocors.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/redirect-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/redirect-credentials-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/redirect-credentials-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/redirect-credentials.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/redirect-loop-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/redirect-loop-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/redirect-loop.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/redirect-nocors-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/redirect-nocors-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/redirect-nocors.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/redirect-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/redirect-password-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/redirect-password-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/redirect-password.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/redirect.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/scheme-blob-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/scheme-blob-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/scheme-blob.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/scheme-data-base-https-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/scheme-data-other-https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/fetch/workers/thorough/scheme-data.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/inspector/service-workers/lazy-addeventlisteners.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/inspector/service-workers/service-worker-agents.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/inspector/service-workers/service-worker-manager.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/inspector/service-workers/service-worker-pause.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/inspector/service-workers/service-workers-bypass-for-network-redirect.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/inspector/service-workers/service-workers-force-update-on-page-load.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/inspector/service-workers/service-workers-navigation-preload.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/inspector/service-workers/service-workers-redundant.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/inspector/service-workers/service-workers-view.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/misc/adopt-iframe-src-attr-after-remove.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/misc/createElementNamespace1.xml [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/misc/detach-and-location-change-in-onload.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/misc/image-checks-for-accept.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/misc/link-preconnect-schemeless.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/misc/link-rel-prefetch.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2.htm [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/misc/onload-detach-during-csp-frame-src-none.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/misc/redirect-to-about-blank.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/misc/resource-timing-sizes-cache-worker.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/misc/resource-timing-sizes-cache.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/misc/resource-timing-sizes-content-encoding-worker.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/misc/resource-timing-sizes-content-encoding.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/misc/resource-timing-sizes-redirect-worker.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/misc/resource-timing-sizes-redirect.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/misc/resource-timing-sizes-sync-xhr-transfer-size.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/misc/resource-timing-sizes-tags.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/misc/resource-timing-sizes-xhr-fetch-worker.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/misc/resource-timing-sizes-xhr-fetch.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/misc/tests-finishing-simultaneously.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/misc/webtiming-ssl.php [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/misc/xhtml.php [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/security/cookies/first-party-cookie-allow-xslt.xml [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/security/cookies/third-party-cookie-blocking-main-frame.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/security/cookies/third-party-cookie-blocking-worker.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/security/cookies/xmlhttprequest.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium.fetch-canvas-tainting.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium.fetch-cors-xhr.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium.fetch-csp.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium.fetch-event-async-respond-with.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium.fetch-event-headers.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium.fetch-event-respond-with-stops-propagation.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium.fetch-request-css-base-url.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium.fetch-request-resources.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium.fetch-request-xhr.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium.fetch-response-xhr.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium.getregistrations.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium.performance-timeline.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium.redirected-response.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium.referer.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium.register-wait-forever-in-install-worker.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium.request-end-to-end.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/claim-with-redirect.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/clients-openwindow.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/css-import-crash.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/extendable-message-event.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/fetch-error-messages.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/fetch-event-synthetic-respond-with.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/fetch-request-with-gc.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/fetch-script-onerror.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/force-refresh-ready.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/force-refresh-registration.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/load-flushed-script.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/memory-cache.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/no-filesystem.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/notificationclick-can-focus.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/notificationclick-can-openwindow.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/postmessage-after-terminate.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/postmessage-cross-process.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/register-different-script-many-times.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/register-error-messages.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/registration-stress.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/request-body-blob-crash.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/resolve-after-window-close.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/respond-with-body-accessed-response.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/sandboxed-iframe-fetch-event.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/sandboxed-iframe-navigator-serviceworker.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/service-worker-allowed.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/service-worker-gc.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/service-worker-mixed-response.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/stop-worker-during-respond-with.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/stop-worker-with-pending-fetch.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/unregister-on-detached-iframe.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/usecounter-on-claim.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/usecounter-on-load.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/usecounter-on-reload.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/usecounter.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/window-close-during-registration.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/windowclient-focus.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/xhr-is-not-exposed-to-service-workers.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/immutable-prototype-serviceworker.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/indexeddb.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/insecure-parent-frame.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/navigation-preload/chromium/navigation-preload-after-gc.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/navigation-preload/chromium/navigation-preload-resource-timing.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/navigation-preload/chromium/preload-response-after-gc.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/navigation-preload/chromium/use-counter.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/ServiceWorkerGlobalScope/registration-attribute.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/ServiceWorkerGlobalScope/unregister.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/ServiceWorkerGlobalScope/update.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/sync-xhr-doesnt-deadlock.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/waiting.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/webexposed/global-interface-listing-service-worker.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/serviceworker/websocket/websocket-in-service-worker.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/workers/shared-worker-secure-context.https.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/workers/text-encoding.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/xmlhttprequest/workers/cross-origin-unsupported-url.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/xmlhttprequest/workers/post-formdata.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/xmlhttprequest/workers/shared-worker-response-type-blob-sync.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/xmlhttprequest/workers/shared-worker-response-type-blob.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/xmlhttprequest/workers/upload-onprogress-event.html [ Failure ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/xmlhttprequest/workers/xmlhttprequest-response-type-blob-sync.html [ Timeout ]
+Bug(none) virtual/off-main-thread-fetch/http/tests/xmlhttprequest/workers/xmlhttprequest-response-type-blob.html [ Timeout ]
+Bug(none) virtual/origin-trials-runtimeflags-disabled/http/tests/origin_trials/webexposed/budget-api-origin-trial-interfaces.html [ Failure ]
+Bug(none) virtual/origin-trials-runtimeflags-disabled/http/tests/origin_trials/webexposed/foreignfetch-origin-trial-interfaces.html [ Failure ]
+Bug(none) virtual/scroll_customization/fast/events/touch/gesture/long-press-focuses-frame.html [ Failure Timeout ]
+Bug(none) virtual/service-worker-navigation-preload-disabled/http/tests/serviceworker/webexposed/global-interface-listing-service-worker.html [ Failure ]
+Bug(none) virtual/stable/http/tests/navigation/multiple-back-forward-entries.html [ Timeout ]
+Bug(none) virtual/stable/http/tests/navigation/navigation-interrupted-by-fragment.html [ Timeout ]
+Bug(none) virtual/stable/http/tests/navigation/onload-navigation-iframe-2.html [ Timeout ]
+Bug(none) virtual/stable/http/tests/navigation/onload-navigation-iframe-timeout.html [ Timeout ]
+Bug(none) virtual/stable/http/tests/navigation/onload-navigation-iframe.html [ Timeout ]
+Bug(none) virtual/stable/http/tests/navigation/ping-cookie.html [ Failure ]
+Bug(none) virtual/stable/http/tests/navigation/ping-cross-origin-from-https.html [ Timeout ]
+Bug(none) virtual/stable/http/tests/navigation/pushstate-whitelisted-at-blob-denied.html [ Timeout ]
+Bug(none) virtual/stable/http/tests/navigation/redirect-on-back-updates-history-item.html [ Timeout ]
+Bug(none) virtual/stable/http/tests/navigation/redirect-on-reload-updates-history-item.html [ Timeout ]
+Bug(none) virtual/stable/http/tests/navigation/same-url-iframes-defer-crash.html [ Timeout ]
+Bug(none) virtual/stable/http/tests/navigation/start-load-during-provisional-loader-detach.html [ Timeout ]
+Bug(none) virtual/stable/http/tests/sendbeacon/beacon-cookie.html [ Failure ]
+Bug(none) virtual/stable/http/tests/sendbeacon/beacon-cross-origin.https.html [ Timeout ]
+Bug(none) virtual/stable/http/tests/sendbeacon/beacon-same-origin.html [ Failure ]
+Bug(none) virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker.html [ Failure ]
+Bug(none) virtual/stable/media/stable/video-object-fit-stable.html [ Timeout ]
+Bug(none) virtual/threaded/animations/animation-end-event-destroy-renderer.html [ Timeout ]
+Bug(none) virtual/threaded/animations/responsive-neutral-keyframe.html [ Timeout ]
+Bug(none) virtual/threaded/fast/compositorworker/animation-worklet-animator-registration.html [ Timeout ]
+Bug(none) virtual/threaded/fast/compositorworker/basic-plumbing-worker-to-main.html [ Failure Timeout ]
+Bug(none) virtual/threaded/fast/idleToBlob/OffscreenCanvas-convertToBlob-2d-main.html [ Timeout ]
+Bug(none) virtual/threaded/fast/idleToBlob/OffscreenCanvas-convertToBlob-2d-worker.html [ Timeout ]
+Bug(none) virtual/threaded/fast/idleToBlob/OffscreenCanvas-convertToBlob-webgl-main.html [ Timeout ]
+Bug(none) virtual/threaded/fast/idleToBlob/OffscreenCanvas-convertToBlob-webgl-worker.html [ Timeout ]
+Bug(none) virtual/threaded/fast/scroll-behavior/smooth-scroll/main-thread-scrolling-reason-added.html [ Failure Timeout ]
+Bug(none) virtual/threaded/inspector/tracing/timeline-network/timeline-network-resource-details.html [ Failure ]
+Bug(none) virtual/threaded/inspector/tracing/timeline-network/timeline-network-resource.html [ Failure ]
+Bug(none) virtual/threaded/printing/subframes-percentage-height.html [ Failure Timeout ]
+Bug(none) virtual/threaded/transitions/transition-end-event-multiple-03.html [ Failure Timeout ]
+Bug(none) virtual/wheelscrolllatching/fast/events/wheel/mainthread-touchpad-fling-latching.html [ Failure Timeout ]
+Bug(none) vr/events_vrdisplayactivate.html [ Timeout ]
+Bug(none) vr/events_vrdisplayconnect.html [ Timeout ]
+Bug(none) vr/events_vrdisplaypresentchange.html [ Timeout ]
+Bug(none) vr/exitPresent_reject_notpresenting.html [ Timeout ]
+Bug(none) vr/exitPresent_resolve.html [ Timeout ]
+Bug(none) vr/getEyeParameters_match.html [ Timeout ]
+Bug(none) vr/getFrameData_noupdate.html [ Timeout ]
+Bug(none) vr/getFrameData_oneframeupdate.html [ Timeout ]
+Bug(none) vr/getFrameData_samewithinframe.html [ Timeout ]
+Bug(none) vr/getLayers_notpresenting.html [ Timeout ]
+Bug(none) vr/getLayers_presenting.html [ Timeout ]
+Bug(none) vr/getLayers_presenting_nondefaultbounds.html [ Timeout ]
+Bug(none) vr/getLayers_update.html [ Timeout ]
+Bug(none) vr/getVRDisplays_one_display.html [ Timeout ]
+Bug(none) vr/getVRDisplays_two_display.html [ Timeout ]
+Bug(none) vr/getVRDisplays_zero_display.html [ Timeout ]
+Bug(none) vr/multiple_requestAnimationFrame_called.html [ Timeout ]
+Bug(none) vr/requestAnimationFrame_called.html [ Timeout ]
+Bug(none) vr/requestAnimationFrame_handoff.html [ Timeout ]
+Bug(none) vr/requestAnimationFrame_invalidhandle.html [ Timeout ]
+Bug(none) vr/requestAnimationFrame_submitFrame_combinations.html [ Timeout ]
+Bug(none) vr/requestAnimationFrame_unregister.html [ Timeout ]
+Bug(none) vr/requestPresent_reject_badleftbounds.html [ Timeout ]
+Bug(none) vr/requestPresent_reject_badrightbounds.html [ Timeout ]
+Bug(none) vr/requestPresent_reject_nogesture.html [ Timeout ]
+Bug(none) vr/requestPresent_reject_nolayers.html [ Timeout ]
+Bug(none) vr/requestPresent_reject_nosource.html [ Timeout ]
+Bug(none) vr/requestPresent_reject_notsupported.html [ Timeout ]
+Bug(none) vr/requestPresent_reject_nowebgl.html [ Timeout ]
+Bug(none) vr/requestPresent_reject_nullsource.html [ Timeout ]
+Bug(none) vr/requestPresent_reject_toomanylayers.html [ Timeout ]
+Bug(none) vr/requestPresent_resolve.html [ Timeout ]
+Bug(none) vr/requestPresent_resolve_repeatwithgesture.html [ Timeout ]
+Bug(none) vr/requestPresent_resolve_repeatwithoutgesture.html [ Timeout ]
+Bug(none) vr/requestPresent_resolve_then_reject.html [ Timeout ]
+Bug(none) vr/requestPresent_resolve_webgl2.html [ Timeout ]
+Bug(none) vr/stageParameters_match.html [ Timeout ]
+Bug(none) web-animations-api/animation-finish-promise-gc.html [ Timeout ]
+Bug(none) webaudio/Analyser/realtimeanalyser-basic.html [ Timeout ]
+Bug(none) webaudio/Analyser/realtimeanalyser-fft-scaling.html [ Timeout ]
+Bug(none) webaudio/Analyser/realtimeanalyser-fft-sizing.html [ Timeout ]
+Bug(none) webaudio/Analyser/realtimeanalyser-float-data.html [ Timeout ]
+Bug(none) webaudio/Analyser/realtimeanalyser-freq-data.html [ Timeout ]
+Bug(none) webaudio/audio-scheduled-source-basic.html [ Timeout ]
+Bug(none) webaudio/AudioBuffer/audiobuffer-copy-channel.html [ Timeout ]
+Bug(none) webaudio/AudioBuffer/audiobuffer-getChannelData.html [ Timeout ]
+Bug(none) webaudio/AudioBuffer/audiobuffer.html [ Timeout ]
+Bug(none) webaudio/AudioBufferSource/audiobuffersource-channels.html [ Timeout ]
+Bug(none) webaudio/AudioContext/audiocontext-close-basic.html [ Timeout ]
+Bug(none) webaudio/AudioContext/audiocontext-getoutputtimestamp.html [ Timeout ]
+Bug(none) webaudio/AudioContext/audiocontext-listener-should-not-crash.html [ Timeout ]
+Bug(none) webaudio/AudioContext/audiocontext-max-contexts.html [ Timeout ]
+Bug(none) webaudio/AudioContext/audiocontext-suspend-resume.html [ Timeout ]
+Bug(none) webaudio/AudioContext/audiocontextoptions.html [ Timeout ]
+Bug(none) webaudio/AudioNode/audionode-connect-method-chaining.html [ Timeout ]
+Bug(none) webaudio/AudioNode/audionode-disconnect-audioparam.html [ Timeout ]
+Bug(none) webaudio/AudioNode/audionode.html [ Timeout ]
+Bug(none) webaudio/AudioParam/audioparam-exceptional-values.html [ Timeout ]
+Bug(none) webaudio/AudioParam/audioparam-method-chaining.html [ Timeout ]
+Bug(none) webaudio/BiquadFilter/biquad-automation.html [ Timeout ]
+Bug(none) webaudio/BiquadFilter/biquad-getFrequencyResponse.html [ Timeout ]
+Bug(none) webaudio/BiquadFilter/biquadfilternode-basic.html [ Timeout ]
+Bug(none) webaudio/codec-tests/webm/webm-decode.html [ Timeout ]
+Bug(none) webaudio/ConstantSource/constant-source-basic.html [ Timeout ]
+Bug(none) webaudio/constructor/mediastreamaudiodestination.html [ Timeout ]
+Bug(none) webaudio/constructor/mediastreamaudiosource.html [ Timeout ]
+Bug(none) webaudio/Convolver/convolver-setBuffer-null.html [ Timeout ]
+Bug(none) webaudio/decodeAudioData/decode-audio-data-basic.html [ Timeout ]
+Bug(none) webaudio/dom-exceptions.html [ Timeout ]
+Bug(none) webaudio/DynamicsCompressor/dynamicscompressor-basic.html [ Timeout ]
+Bug(none) webaudio/Gain/gain-basic.html [ Timeout ]
+Bug(none) webaudio/IIRFilter/iir-tail-time.html [ Timeout ]
+Bug(none) webaudio/IIRFilter/iirfilter.html [ Timeout ]
+Bug(none) webaudio/internals/audiocontext-close.html [ Timeout ]
+Bug(none) webaudio/internals/audiocontext-lock-threading-race.html [ Timeout ]
+Bug(none) webaudio/internals/audiosummingjunction-crash.html [ Timeout ]
+Bug(none) webaudio/internals/mediaelementaudiosourcenode-wrapper.html [ Timeout ]
+Bug(none) webaudio/MediaElementAudioSource/mediaelementaudiosourcenode.html [ Timeout ]
+Bug(none) webaudio/MediaStreamAudioDestination/mediastreamaudiodestinationnode.html [ Timeout ]
+Bug(none) webaudio/MediaStreamAudioSource/mediastreamaudiosourcenode.html [ Timeout ]
+Bug(none) webaudio/OfflineAudioContext/offlineaudiocontext-thread-smoke-test.html [ Timeout ]
+Bug(none) webaudio/Panner/pannernode-basic.html [ Timeout ]
+Bug(none) webaudio/PeriodicWave/periodicwave-lengths.html [ Timeout ]
+Bug(none) webaudio/StereoPanner/stereopannernode-basic.html [ Timeout ]
+Bug(none) webaudio/test-basic.html [ Timeout ]
+Bug(none) webaudio/unit-tests/audit.html [ Timeout ]
+Bug(none) webshare/share-arity.html [ Timeout ]
+Bug(none) webshare/share-error.html [ Timeout ]
+Bug(none) webshare/share-success.html [ Timeout ]
+Bug(none) webshare/share-types.html [ Timeout ]
+Bug(none) webshare/share-without-user-gesture.html [ Timeout ]
diff --git a/third_party/WebKit/LayoutTests/external/wpt/fetch/dangling-markup-mitigation.tentative.html b/third_party/WebKit/LayoutTests/external/wpt/fetch/dangling-markup-mitigation.tentative.html
new file mode 100644
index 0000000..53d74ba0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/fetch/dangling-markup-mitigation.tentative.html
@@ -0,0 +1,158 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="./resources/helper.js"></script>
+<body>
+<script>
+  function readableURL(url) {
+    return url.replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\t/g, "\\t");
+  }
+
+  var should_load = [
+    `/images/green-1x1.png`,
+    `/images/gre\nen-1x1.png`,
+    `/images/gre\ten-1x1.png`,
+    `/images/gre\ren-1x1.png`,
+    `/images/green-1x1.png?img=<`,
+    `/images/green-1x1.png?img=&lt;`,
+    `/images/green-1x1.png?img=%3C`,
+    `/images/gr\neen-1x1.png?img=%3C`,
+    `/images/gr\reen-1x1.png?img=%3C`,
+    `/images/gr\teen-1x1.png?img=%3C`,
+    `/images/green-1x1.png?img=&#10;`,
+    `/images/gr\neen-1x1.png?img=&#10;`,
+    `/images/gr\reen-1x1.png?img=&#10;`,
+    `/images/gr\teen-1x1.png?img=&#10;`,
+  ];
+  should_load.forEach(url => async_test(t => {
+    fetch(url)
+      .then(t.step_func_done(r => {
+        assert_equals(r.status, 200);
+      }))
+      .catch(t.unreached_func("Fetch should succeed."));
+  }, "Fetch: " + readableURL(url)));
+
+  var should_block = [
+    `/images/gre\nen-1x1.png?img=<`,
+    `/images/gre\ren-1x1.png?img=<`,
+    `/images/gre\ten-1x1.png?img=<`,
+    `/images/green-1x1.png?<\n=block`,
+    `/images/green-1x1.png?<\r=block`,
+    `/images/green-1x1.png?<\t=block`,
+  ];
+  should_block.forEach(url => async_test(t => {
+    fetch(url)
+      .then(t.unreached_func("Fetch should fail."))
+      .catch(t.step_func_done());
+  }, "Fetch: " + readableURL(url)));
+
+
+  // For each of the following tests, we'll inject a frame containing the HTML we'd like to poke at
+  // as a `srcdoc` attribute. Because we're injecting markup via `srcdoc`, we need to entity-escape
+  // the content we'd like to treat as "raw" (e.g. `\n` => `&#10;`, `<` => `&lt;`), and
+  // double-escape the "escaped" content.
+  var rawBrace = "&lt;";
+  var escapedBrace = "&amp;lt;";
+  var rawNewline = "&#10;";
+  var escapedNewline = "&amp;#10;";
+
+  function appendFrameAndGetElement(test, frame) {
+    return new Promise((resolve, reject) => {
+      frame.onload = test.step_func(_ => {
+        frame.onload = null;
+        resolve(frame.contentDocument.querySelector('#dangling'));
+      });
+      document.body.appendChild(frame);
+    });
+  }
+
+  function assert_img_loaded(test, frame) {
+    appendFrameAndGetElement(test, frame)
+      .then(test.step_func_done(img => {
+        assert_equals(img.naturalHeight, 1, "Height");
+        frame.remove();
+      }));
+  }
+
+  function assert_img_not_loaded(test, frame) {
+    appendFrameAndGetElement(test, frame)
+      .then(test.step_func_done(img => {
+        assert_equals(img.naturalHeight, 0, "Height");
+        assert_equals(img.naturalWidth, 0, "Width");
+      }));
+  }
+
+  function createFrame(markup) {
+    var i = document.createElement('iframe');
+    i.srcdoc = `${markup}sekrit`;
+    return i;
+  }
+
+  // The following resources should not be blocked, as their URLs do not contain both a `\n` and `<`
+  // character in the body of the URL.
+  var should_load = [
+    // Brace alone doesn't block:
+    `<img id="dangling" src="/images/green-1x1.png?img=${rawBrace}b">`,
+
+    // Newline alone doesn't block:
+    `<img id="dangling" src="/images/green-1x1.png?img=${rawNewline}b">`,
+
+    // Entity-escaped characters don't trigger blocking:
+    `<img id="dangling" src="/images/green-1x1.png?img=${escapedNewline}b">`,
+    `<img id="dangling" src="/images/green-1x1.png?img=${escapedBrace}b">`,
+    `<img id="dangling" src="/images/green-1x1.png?img=${escapedNewline}b${escapedBrace}c">`,
+
+    // Leading and trailing whitespace is stripped:
+    `
+      <img id="dangling" src="
+        /images/green-1x1.png?img=
+      ">
+    `,
+    `
+      <img id="dangling" src="
+        /images/green-1x1.png?img=${escapedBrace}
+      ">
+    `,
+    `
+      <img id="dangling" src="
+        /images/green-1x1.png?img=${escapedNewline}
+      ">
+    `,
+
+    // Data URLs don't trigger blocking:
+    `<img id="dangling" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=">`,
+    `<img id="dangling" src="data:image/png;base64,${rawNewline}iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=">`,
+    `<img id="dangling" src="data:image/png;base64,i${rawNewline}VBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=">`,
+    `<img id="dangling" src="data:image/svg+xml;utf8,
+      <svg width='1' height='1' xmlns='http://www.w3.org/2000/svg'>
+        <rect width='100%' height='100%' fill='rebeccapurple'/>
+        <rect x='10%' y='10%' width='80%' height='80%' fill='lightgreen'/>
+      </svg>">`
+  ];
+
+  should_load.forEach(markup => {
+    async_test(t => {
+      var i = createFrame(`${markup} <element attr="" another=''>`);
+      assert_img_loaded(t, i);
+    }, readableURL(markup));
+  });
+
+  // The following resources should be blocked, as their URLs contain both `\n` and `<` characters:
+  var should_block = [
+    `<img id="dangling" src="/images/green-1x1.png?img=${rawNewline}${rawBrace}b">`,
+    `<img id="dangling" src="/images/green-1x1.png?img=${rawBrace}${rawNewline}b">`,
+    `
+      <img id="dangling" src="/images/green-1x1.png?img=
+        ${rawBrace}
+        ${rawNewline}b
+      ">
+    `,
+  ];
+
+  should_block.forEach(markup => {
+    async_test(t => {
+      var i = createFrame(`${markup}`);
+      assert_img_not_loaded(t, i);
+    }, readableURL(markup));
+  });
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/pointerevents/pointerlock/pointerevent_pointerlock_after_pointercapture-manual.html b/third_party/WebKit/LayoutTests/external/wpt/pointerevents/pointerlock/pointerevent_pointerlock_after_pointercapture-manual.html
new file mode 100644
index 0000000..92fe7f26
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/pointerevents/pointerlock/pointerevent_pointerlock_after_pointercapture-manual.html
@@ -0,0 +1,69 @@
+<!doctype html>
+<html>
+    <head>
+        <title>Pointer Events pointer lock test</title>
+        <meta name="viewport" content="width=device-width">
+        <link rel="stylesheet" type="text/css" href="../pointerevent_styles.css">
+        <script src="/resources/testharness.js"></script>
+        <script src="/resources/testharnessreport.js"></script>
+        <!-- Additional helper script for common checks across event types -->
+        <script type="text/javascript" src="../pointerevent_support.js"></script>
+        <script>
+            var got_capture = false;
+            var lost_capture = false;
+            var lock_requested = false;
+
+            function resetTestState() {
+            }
+
+            function run() {
+                var test_pointerEvent = setup_pointerevent_test("no pointercapture while pointerlock", ['mouse']);
+                var div1 = document.getElementById("div1");
+                var div2 = document.getElementById("div2");
+                
+                on_event(div1, 'pointerdown', function(event) {
+                    div2.setPointerCapture(event.pointerId);
+                });
+                on_event(div1, 'pointermove', function(event) {
+                    if (lost_capture) {
+                        test_pointerEvent.step(function() {
+                            assert_equals(document.pointerLockElement, div1, "document.pointerLockElement should be div1.");
+                            assert_true(lost_capture, "Pointer capture was lost after got a pointer lock.");
+                        });
+                        test_pointerEvent.done(); 
+                    }
+                });
+                on_event(div2, 'pointermove', function(event) {
+                    if (got_capture && !lock_requested) {
+                        div1.requestPointerLock();
+                        lock_requested = true;
+                    }
+                });
+                on_event(div2, 'gotpointercapture', function(event) {
+                    got_capture = true;
+                });
+                on_event(div2, 'lostpointercapture', function(event) {
+                    lost_capture = true;
+                });
+            }
+        </script>
+    </head>
+    <body onload="run()">
+        <h1>Pointer Events pointer lock test</h1>
+        <h2 id="pointerTypeDescription"></h2>
+        <h4>
+            Test Description: This test checks that we release the exsiting pointer capture when any element in the page gets a pointer lock.
+            <ol>
+                 <li>Press left button down on the green rectangle and hold it.</li>
+                 <li>Move the mouse inside the green rectangle.</li>
+            </ol>
+
+            Test passes if the pointer capture is released on the yellow rectangle when the green rectangle gets the pointer lock.
+        </h4>
+        <div id="testContainer">
+            <div id="div1" style="width:800px;height:250px;background:green"></div>
+            <div id="div2" style="width:800px;height:250px;background:yellow"></div>
+        </div>
+        <div class="spacer"></div>
+    </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/pointerevents/pointerlock/pointerevent_pointerlock_supercedes_capture-manual.html b/third_party/WebKit/LayoutTests/external/wpt/pointerevents/pointerlock/pointerevent_pointerlock_supercedes_capture-manual.html
new file mode 100644
index 0000000..d8dbeaa
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/pointerevents/pointerlock/pointerevent_pointerlock_supercedes_capture-manual.html
@@ -0,0 +1,93 @@
+<!doctype html>
+<html>
+    <head>
+        <title>Pointer Events pointer lock tests</title>
+        <meta name="viewport" content="width=device-width">
+        <link rel="stylesheet" type="text/css" href="../pointerevent_styles.css">
+        <script src="/resources/testharness.js"></script>
+        <script src="/resources/testharnessreport.js"></script>
+        <!-- Additional helper script for common checks across event types -->
+        <script type="text/javascript" src="../pointerevent_support.js"></script>
+        <script>
+            var lock_change_count = 0;
+            var capture_count = 0;
+            var mouse_move_count = 0;
+
+            function resetTestState() {
+            }
+
+            function run() {
+                var test_pointerEvent = setup_pointerevent_test("no pointercapture while pointerlock", ['mouse']);
+                var div1 = document.getElementById("div1");
+                var div2 = document.getElementById("div2");
+              
+                on_event(div1, 'pointerdown', function(event) {
+                    div2.setPointerCapture(event.pointerId);
+                    div1.requestPointerLock();
+                });
+                on_event(div1, 'pointermove', function(event) {
+                    if (lock_change_count == 1) {
+                        mouse_move_count++;
+                        if (mouse_move_count == 2) {
+                            try {
+                                div2.setPointerCapture(event.pointerId);
+                                test_pointerEvent.step(function () {
+                                    assert_unreached("DOMException: InvalidStateError should have been thrown.");
+                                });
+                            } catch (e) {
+                                test_pointerEvent.step(function () {
+                                    assert_equals(e.name, "InvalidStateError", "DOMException should be InvalidStateError");
+                                });
+                            }
+                        } else if (mouse_move_count == 3) {
+                            document.exitPointerLock();
+                            mouse_move_count = 0;
+                        }
+
+                    } else if (lock_change_count == 2) {
+                        mouse_move_count++;
+                        if (mouse_move_count == 2) {
+                            test_pointerEvent.step(function() {
+                                assert_equals(capture_count, 0, "There shouldn't be any capture events fired.");
+                            });
+                            test_pointerEvent.done();
+                        }
+                    }
+                });
+                on_event(div2, 'gotpointercapture', function(event) {
+                    capture_count++;
+                });
+                on_event(div2, 'lostpointercapture', function(event) {
+                    capture_count++;
+                });
+                on_event(document, 'pointerlockchange', function(event) {
+                    lock_change_count++;
+                    test_pointerEvent.step(function() {
+                        if (lock_change_count == 1)
+                            assert_equals(document.pointerLockElement, div1, "document.pointerLockElement should be div1.");
+                        else if (lock_change_count == 2)
+                            assert_equals(document.pointerLockElement, null, "document.pointerLockElement should be null.");
+                    });
+                });
+            }
+        </script>
+    </head>
+    <body onload="run()">
+        <h1>Pointer Events pointer lock test</h1>
+        <h2 id="pointerTypeDescription"></h2>
+        <h4>
+            Test Description: This test checks that we do not set the pointer capture when any element in the page gets a pointer lock.
+            <ol>
+                 <li>Press left button down on the green rectangle and hold it.</li>
+                 <li>Move the mouse inside the green rectangle.</li>
+            </ol>
+
+            Test passes if the pointer capture is not set when the green rectangle gets the pointer lock.
+        </h4>
+        <div id="testContainer">
+            <div id="div1" style="width:800px;height:250px;background:green"></div>
+            <div id="div2" style="width:800px;height:250px;background:yellow"></div>
+        </div>
+        <div class="spacer"></div>
+    </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt_automation/pointerevents/pointerevent_common_input.js b/third_party/WebKit/LayoutTests/external/wpt_automation/pointerevents/pointerevent_common_input.js
index d8b682c..7216010 100644
--- a/third_party/WebKit/LayoutTests/external/wpt_automation/pointerevents/pointerevent_common_input.js
+++ b/third_party/WebKit/LayoutTests/external/wpt_automation/pointerevents/pointerevent_common_input.js
@@ -193,6 +193,44 @@
   });
 }
 
+// Request a pointer lock and capture.
+function mouseRequestPointerLockAndCaptureInTarget(targetSelector, targetFrame) {
+  var targetDocument = document;
+  var frameLeft = 0;
+  var frameTop = 0;
+  var button = 'left';
+  if (targetFrame !== undefined) {
+    targetDocument = targetFrame.contentDocument;
+    var frameRect = targetFrame.getBoundingClientRect();
+    frameLeft = frameRect.left;
+    frameTop = frameRect.top;
+  }
+  return new Promise(function(resolve, reject) {
+    if (window.chrome && chrome.gpuBenchmarking) {
+      scrollPageIfNeeded(targetSelector, targetDocument);
+      var target = targetDocument.querySelector(targetSelector);
+      var targetRect = target.getBoundingClientRect();
+      var xPosition = frameLeft + targetRect.left + boundaryOffset;
+      var yPosition = frameTop + targetRect.top + boundaryOffset;
+
+      chrome.gpuBenchmarking.pointerActionSequence( [
+        {source: 'mouse',
+         actions: [
+            {name: 'pointerMove', x: xPosition, y: yPosition},
+            {name: 'pointerDown', x: xPosition, y: yPosition, button: 'left'},
+            {name: 'pointerMove', x: xPosition + 30, y: yPosition + 30},
+            {name: 'pointerMove', x: xPosition + 30, y: yPosition},
+            {name: 'pointerMove', x: xPosition + 60, y: yPosition + 30},
+            {name: 'pointerMove', x: xPosition + 30, y: yPosition + 20},
+            {name: 'pointerMove', x: xPosition + 10, y: yPosition + 50},
+            {name: 'pointerMove', x: xPosition + 40, y: yPosition + 10},
+        ]}], resolve);
+    } else {
+      reject();
+    }
+  });
+}
+
 // Touch inputs.
 function touchTapInTarget(targetSelector, targetFrame) {
   var targetDocument = document;
diff --git a/third_party/WebKit/LayoutTests/external/wpt_automation/pointerevents/pointerlock/pointerevent_pointerlock_after_pointercapture-manual-automation.js b/third_party/WebKit/LayoutTests/external/wpt_automation/pointerevents/pointerlock/pointerevent_pointerlock_after_pointercapture-manual-automation.js
new file mode 100644
index 0000000..94765a11
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt_automation/pointerevents/pointerlock/pointerevent_pointerlock_after_pointercapture-manual-automation.js
@@ -0,0 +1,5 @@
+importAutomationScript('/pointerevents/pointerevent_common_input.js');
+
+function inject_input() {
+  return mouseRequestPointerLockAndCaptureInTarget('#div1');
+}
diff --git a/third_party/WebKit/LayoutTests/external/wpt_automation/pointerevents/pointerlock/pointerevent_pointerlock_supercedes_capture-manual-automation.js b/third_party/WebKit/LayoutTests/external/wpt_automation/pointerevents/pointerlock/pointerevent_pointerlock_supercedes_capture-manual-automation.js
new file mode 100644
index 0000000..94765a11
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt_automation/pointerevents/pointerlock/pointerevent_pointerlock_supercedes_capture-manual-automation.js
@@ -0,0 +1,5 @@
+importAutomationScript('/pointerevents/pointerevent_common_input.js');
+
+function inject_input() {
+  return mouseRequestPointerLockAndCaptureInTarget('#div1');
+}
diff --git a/third_party/WebKit/LayoutTests/fast/css/usecounter-angle-zero-gradient.html b/third_party/WebKit/LayoutTests/fast/css/usecounter-angle-zero-gradient.html
index 106288b..4036ead4 100644
--- a/third_party/WebKit/LayoutTests/fast/css/usecounter-angle-zero-gradient.html
+++ b/third_party/WebKit/LayoutTests/fast/css/usecounter-angle-zero-gradient.html
@@ -14,6 +14,9 @@
     div.style = 'image-orientation: 0;';
     div.style = 'rotate: 0;';
     div.style = 'offset-path: ray(0 closest-side);';
+    div.style = 'background-image: conic-gradient(from 0 at left top, red 0deg, green 180deg);';
+    div.style = 'background-image: conic-gradient(from 0deg at left top, red 0, green 180deg);';
+
     // These properties have their own counters.
     div.style = 'filter: hue-rotate(0);';
     div.style = 'offset-rotate: 0;';
@@ -28,5 +31,5 @@
     div.style = 'background-image: linear-gradient(0, red, black);';
     assert_true(isCounted(),
                 '0 should be counted');
-}, 'angle 0 is use counted for gradient');
+}, 'angle 0 is use counted for linear gradient');
 </script>
diff --git a/third_party/WebKit/LayoutTests/fast/gradients/conic-gradient-parsing.html b/third_party/WebKit/LayoutTests/fast/gradients/conic-gradient-parsing.html
index 4118478..0eae6168 100644
--- a/third_party/WebKit/LayoutTests/fast/gradients/conic-gradient-parsing.html
+++ b/third_party/WebKit/LayoutTests/fast/gradients/conic-gradient-parsing.html
@@ -32,16 +32,21 @@
     { style: "conic-gradient(at left left, black, white)"                  , computed: "none" },
     { style: "conic-gradient(at top left black, white)"                    , computed: "none" },
     { style: "conic-gradient(black 0%, 10%, 10%, green .5turn, 50%, white)", computed: "none" },
+    { style: "conic-gradient(black 0, white)"                              , computed: "none" },
+    { style: "conic-gradient(black 10%, white 0)"                          , computed: "none" },
+    { style: "conic-gradient(from 0, black, white)"                        , computed: "none" },
     { style: "conic-gradient(from 0 black, white)"                         , computed: "none" },
+    { style: "conic-gradient(from 0deg black, white)"                      , computed: "none" },
     { style: "conic-gradient(from 0 at top left black, white)"             , computed: "none" },
+    { style: "conic-gradient(from 0deg at top left black, white)"          , computed: "none" },
     { style: "conic-gradient(from 0, at top left, black, white)"           , computed: "none" },
+    { style: "conic-gradient(from 0deg, at top left, black, white)"        , computed: "none" },
     { style: "conic-gradient(at top left from 0, black, white)"            , computed: "none" },
     { style: "conic-gradient(black 10% 20% 30%, white)"                    , computed: "none" },
     { style: "conic-gradient(black, 30% 50%, white)"                       , computed: "none" },
     { style: "conic-gradient(black, white calc(360deg / 10 + 50%)"         , computed: "none" },
 
     { style: "conic-gradient(black, white)"           , computed: "conic-gradient(black, white)" },
-    { style: "conic-gradient(black 0, white)"         , computed: "conic-gradient(black 0deg, white)" },
     { style: "conic-gradient(black 0%, white)"        , computed: "conic-gradient(black 0%, white)" },
     { style: "conic-gradient(black 0deg, white)"      , computed: "conic-gradient(black 0deg, white)" },
     { style: "conic-gradient(black 0grad, white)"     , computed: "conic-gradient(black 0grad, white)" },
@@ -66,7 +71,7 @@
     { style: "conic-gradient(at center, black, white)"       , computed: "conic-gradient(at center center, black, white)" },
     { style: "conic-gradient(at center center, black, white)", computed: "conic-gradient(at center center, black, white)" },
 
-    { style: "conic-gradient(from 0, black, white)"              , computed: "conic-gradient(from 0deg, black, white)" },
+    { style: "conic-gradient(from 0deg, black, white)"           , computed: "conic-gradient(from 0deg, black, white)" },
     { style: "conic-gradient(from 10deg, black, white)"          , computed: "conic-gradient(from 10deg, black, white)" },
     { style: "conic-gradient(from 10deg at center, black, white)", computed: "conic-gradient(from 10deg at center center, black, white)" },
 
diff --git a/third_party/WebKit/LayoutTests/fast/gradients/conic-gradient-positioning.html b/third_party/WebKit/LayoutTests/fast/gradients/conic-gradient-positioning.html
index 0b7bedd..79deaff 100644
--- a/third_party/WebKit/LayoutTests/fast/gradients/conic-gradient-positioning.html
+++ b/third_party/WebKit/LayoutTests/fast/gradients/conic-gradient-positioning.html
@@ -20,7 +20,7 @@
   }
 
   var pos = [ '25%', 'center', '75%' ];
-  var rot = [ '0', '20deg', '40deg', '60deg', '80deg' ];
+  var rot = [ '0deg', '20deg', '40deg', '60deg', '80deg' ];
 
   rot.forEach(function(r) {
     pos.forEach(function(x) {
diff --git a/third_party/WebKit/LayoutTests/fast/gradients/conic-gradient.html b/third_party/WebKit/LayoutTests/fast/gradients/conic-gradient.html
index 8f7823b4..a318c08 100644
--- a/third_party/WebKit/LayoutTests/fast/gradients/conic-gradient.html
+++ b/third_party/WebKit/LayoutTests/fast/gradients/conic-gradient.html
@@ -23,11 +23,11 @@
 }
 
 .conic4 {
-  background: conic-gradient(yellowgreen 40%, gold 0, gold 70%, #f06 0);
+  background: conic-gradient(yellowgreen 40%, gold 0%, gold 70%, #f06 0%);
 }
 
 .conic5 {
-  background: conic-gradient(black 25%, white 0, white 50%, black 0, black 75%, white 0);
+  background: conic-gradient(black 25%, white 0%, white 50%, black 0%, black 75%, white 0%);
   background-size: 4em 4em;
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/gradients/repeating-conic-gradient.html b/third_party/WebKit/LayoutTests/fast/gradients/repeating-conic-gradient.html
index 165e57b..c0efa07a 100644
--- a/third_party/WebKit/LayoutTests/fast/gradients/repeating-conic-gradient.html
+++ b/third_party/WebKit/LayoutTests/fast/gradients/repeating-conic-gradient.html
@@ -12,7 +12,7 @@
 
 /* basic */
 .conic1 {
-  background: #0ac repeating-conic-gradient(hsla(0,0%,100%,.2) 0, hsla(0,0%,100%,.2) 15deg, hsla(0,0%,100%,0) 15deg, hsla(0,0%,100%,0) 30deg);
+  background: #0ac repeating-conic-gradient(hsla(0,0%,100%,.2) 0deg, hsla(0,0%,100%,.2) 15deg, hsla(0,0%,100%,0) 15deg, hsla(0,0%,100%,0) 30deg);
 }
 
 /* kitchen sink */
@@ -21,7 +21,7 @@
     radial-gradient(#000 3%, rgba(0,0,0,0.3) 10%, rgba(0,0,0,0) 30%),
     conic-gradient(red, orange, lime, aqua, blue, magenta, red),
     radial-gradient(closest-side, #444 0%, #444 1%, #bbb 0%, #bbb 2%, #444 0%, #444 4%, #bbb 0%, #bbb 8%, #444 0%, #444 16%, #bbb 0%, #bbb 32%, #444 0%, #444 64%, #bbb 0%, #bbb 100%),
-    repeating-conic-gradient(#bbb 0, #bbb 6.25%, #444 0, #444 12.5%);
+    repeating-conic-gradient(#bbb 0%, #bbb 6.25%, #444 0%, #444 12.5%);
   background-blend-mode: normal, multiply, exclusion, normal;
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/lists/list-marker-avoid-float-expected.html b/third_party/WebKit/LayoutTests/fast/lists/list-marker-avoid-float-expected.html
new file mode 100644
index 0000000..5736b3b3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/lists/list-marker-avoid-float-expected.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<style>
+body {
+  padding: 0px;
+  margin: 0px;
+}
+.float {
+  height: 10px;
+  width: 100%;
+}
+</style>
+<div class="float"></div>
+<ul style="position: absolute; top: 10px;">
+  <li>crbug.com/726583: The list marker should be to the left, not the right.</li>
+</ul>
diff --git a/third_party/WebKit/LayoutTests/fast/lists/list-marker-avoid-float.html b/third_party/WebKit/LayoutTests/fast/lists/list-marker-avoid-float.html
new file mode 100644
index 0000000..7cab7b1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/lists/list-marker-avoid-float.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<style>
+body {
+  padding: 0px;
+  margin: 0px;
+}
+.float {
+  float: left;
+  height: 10px;
+  width: 100%;
+}
+</style>
+<div class="float"></div>
+<ul>
+  <li>crbug.com/726583: The list marker should be to the left, not the right.</li>
+</ul>
diff --git a/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp b/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp
index a934b157..9a507a38 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp
+++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp
@@ -978,7 +978,7 @@
     UnitlessQuirk) {
   const CSSParserToken& token = range.Peek();
   if (token.GetType() == kDimensionToken || token.GetType() == kNumberToken) {
-    return ConsumeAngle(range, context, UseCounter::kUnitlessZeroAngleGradient);
+    return ConsumeAngle(range, context, WTF::Optional<UseCounter::Feature>());
   }
   if (token.GetType() == kPercentageToken)
     return ConsumePercent(range, value_range);
@@ -1222,7 +1222,7 @@
   const CSSPrimitiveValue* from_angle = nullptr;
   if (ConsumeIdent<CSSValueFrom>(args)) {
     if (!(from_angle = ConsumeAngle(args, context,
-                                    UseCounter::kUnitlessZeroAngleGradient)))
+                                    WTF::Optional<UseCounter::Feature>())))
       return nullptr;
   }
 
diff --git a/third_party/WebKit/Source/core/dom/Element.cpp b/third_party/WebKit/Source/core/dom/Element.cpp
index 65a83f2..9b3b1c92 100644
--- a/third_party/WebKit/Source/core/dom/Element.cpp
+++ b/third_party/WebKit/Source/core/dom/Element.cpp
@@ -3073,14 +3073,19 @@
                                 ExceptionState& exception_state) {
   if (GetDocument().GetFrame()) {
     if (!GetDocument().GetFrame()->GetEventHandler().IsPointerEventActive(
-            pointer_id))
+            pointer_id)) {
       exception_state.ThrowDOMException(kInvalidPointerId, "InvalidPointerId");
-    else if (!isConnected())
+    } else if (!isConnected() ||
+               (GetDocument().GetPage() && GetDocument()
+                                               .GetPage()
+                                               ->GetPointerLockController()
+                                               .GetElement())) {
       exception_state.ThrowDOMException(kInvalidStateError,
                                         "InvalidStateError");
-    else
+    } else {
       GetDocument().GetFrame()->GetEventHandler().SetPointerCapture(pointer_id,
                                                                     this);
+    }
   }
 }
 
diff --git a/third_party/WebKit/Source/core/dom/Fullscreen.cpp b/third_party/WebKit/Source/core/dom/Fullscreen.cpp
index be50d99..f5d0797 100644
--- a/third_party/WebKit/Source/core/dom/Fullscreen.cpp
+++ b/third_party/WebKit/Source/core/dom/Fullscreen.cpp
@@ -823,27 +823,26 @@
   }
 }
 
-void Fullscreen::ElementRemoved(Element& old_node) {
-  // Whenever the removing steps run with an |oldNode| and |oldNode| is in its
-  // node document's fullscreen element stack, run these steps:
+void Fullscreen::ElementRemoved(Element& node) {
+  // |Fullscreen::ElementRemoved| is called for each removed element, so only
+  // the body of the spec "removing steps" loop appears here:
 
-  // 1. If |oldNode| is at the top of its node document's fullscreen element
-  // stack, act as if the exitFullscreen() method was invoked on that document.
-  if (FullscreenElement() == &old_node) {
-    ExitFullscreen(old_node.GetDocument());
+  // 2.1. If |node| is its node document's fullscreen element, exit fullscreen
+  // that document.
+  if (FullscreenElement() == &node) {
+    ExitFullscreen(node.GetDocument());
     return;
   }
 
-  // 2. Otherwise, remove |oldNode| from its node document's fullscreen element
-  // stack.
+  // 2.2. Otherwise, unfullscreen |node| within its node document.
   for (size_t i = 0; i < fullscreen_element_stack_.size(); ++i) {
-    if (fullscreen_element_stack_[i].first.Get() == &old_node) {
+    if (fullscreen_element_stack_[i].first.Get() == &node) {
       fullscreen_element_stack_.erase(i);
       return;
     }
   }
 
-  // NOTE: |oldNode| was not in the fullscreen element stack.
+  // Note: |node| was not in the fullscreen element stack.
 }
 
 void Fullscreen::ClearFullscreenElementStack() {
diff --git a/third_party/WebKit/Source/core/dom/TaskRunnerHelper.cpp b/third_party/WebKit/Source/core/dom/TaskRunnerHelper.cpp
index 5cece113..215e8bd 100644
--- a/third_party/WebKit/Source/core/dom/TaskRunnerHelper.cpp
+++ b/third_party/WebKit/Source/core/dom/TaskRunnerHelper.cpp
@@ -53,6 +53,11 @@
     case TaskType::kWebGL:
     case TaskType::kUnspecedTimer:
     case TaskType::kMiscPlatformAPI:
+      // TODO(altimin): Move all these tasks to suspendable or unthrottled
+      // task runner.
+      return frame
+                 ? frame->FrameScheduler()->UnthrottledButBlockableTaskRunner()
+                 : Platform::Current()->CurrentThread()->GetWebTaskRunner();
     case TaskType::kUnthrottled:
       return frame ? frame->FrameScheduler()->UnthrottledTaskRunner()
                    : Platform::Current()->CurrentThread()->GetWebTaskRunner();
diff --git a/third_party/WebKit/Source/core/frame/Deprecation.cpp b/third_party/WebKit/Source/core/frame/Deprecation.cpp
index 1a8b242..cbffee42 100644
--- a/third_party/WebKit/Source/core/frame/Deprecation.cpp
+++ b/third_party/WebKit/Source/core/frame/Deprecation.cpp
@@ -396,14 +396,13 @@
                                    M60, "5922594955984896");
 
     case UseCounter::kCanRequestURLHTTPContainingNewline:
-      return String::Format(
-          "Resource requests whose URLs contain raw newline characters are "
-          "deprecated, and may be blocked in %s. Please remove newlines from "
-          "places like element attribute values in order to continue loading "
-          "those resources. See "
-          "https://www.chromestatus.com/features/5735596811091968 for more "
-          "details.",
-          milestoneString(M60));
+      return "Resource requests whose URLs contained both removed whitespace "
+             "(`\\n`, `\\r`, `\\t`) characters and less-than characters (`<`) "
+             "are blocked. Please remove newlines and encode less-than "
+             "characters from places like element attribute values in order to "
+             "load these resources. See "
+             "https://www.chromestatus.com/feature/5735596811091968 for more "
+             "details.";
 
     case UseCounter::kV8RTCPeerConnection_GetStreamById_Method:
       return willBeRemoved("RTCPeerConnection.getStreamById()", M62,
diff --git a/third_party/WebKit/Source/core/frame/UseCounter.h b/third_party/WebKit/Source/core/frame/UseCounter.h
index 59c431c..b5e4f8d9 100644
--- a/third_party/WebKit/Source/core/frame/UseCounter.h
+++ b/third_party/WebKit/Source/core/frame/UseCounter.h
@@ -1617,6 +1617,9 @@
     kCredentialManagerPreventSilentAccess = 2012,
     kNetInfoEffectiveType = 2013,
     kV8SpeechRecognition_Start_Method = 2014,
+    kTableRowDirectionDifferentFromTable = 2015,
+    kTableSectionDirectionDifferentFromTable = 2016,
+    // The above items are available in M60 branch.
 
     // 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/frame/WebFrameWidgetBase.cpp b/third_party/WebKit/Source/core/frame/WebFrameWidgetBase.cpp
index ceb6c60f..ee49720 100644
--- a/third_party/WebKit/Source/core/frame/WebFrameWidgetBase.cpp
+++ b/third_party/WebKit/Source/core/frame/WebFrameWidgetBase.cpp
@@ -237,6 +237,11 @@
 
 void WebFrameWidgetBase::DidAcquirePointerLock() {
   GetPage()->GetPointerLockController().DidAcquirePointerLock();
+
+  LocalFrame* focusedFrame = FocusedLocalFrameInWidget();
+  if (focusedFrame) {
+    focusedFrame->GetEventHandler().ReleaseMousePointerCapture();
+  }
 }
 
 void WebFrameWidgetBase::DidNotAcquirePointerLock() {
@@ -248,10 +253,25 @@
   GetPage()->GetPointerLockController().DidLosePointerLock();
 }
 
-void WebFrameWidgetBase::PointerLockMouseEvent(const WebInputEvent& event) {
+// TODO(665924): Remove direct dispatches of mouse events from
+// PointerLockController, instead passing them through EventHandler.
+void WebFrameWidgetBase::PointerLockMouseEvent(
+    const WebCoalescedInputEvent& coalesced_event) {
+  const WebInputEvent& input_event = coalesced_event.Event();
+  const WebMouseEvent& mouse_event =
+      static_cast<const WebMouseEvent&>(input_event);
+  WebMouseEvent transformed_event = TransformWebMouseEvent(
+      ToWebLocalFrameBase(LocalRoot())->GetFrameView(), mouse_event);
+
+  LocalFrame* focusedFrame = FocusedLocalFrameInWidget();
+  if (focusedFrame) {
+    focusedFrame->GetEventHandler().ProcessPendingPointerCaptureForPointerLock(
+        transformed_event);
+  }
+
   std::unique_ptr<UserGestureIndicator> gesture_indicator;
   AtomicString event_type;
-  switch (event.GetType()) {
+  switch (input_event.GetType()) {
     case WebInputEvent::kMouseDown:
       event_type = EventTypeNames::mousedown;
       if (!GetPage() || !GetPage()->GetPointerLockController().GetElement())
@@ -276,11 +296,7 @@
       NOTREACHED();
   }
 
-  const WebMouseEvent& mouse_event = static_cast<const WebMouseEvent&>(event);
-
   if (GetPage()) {
-    WebMouseEvent transformed_event = TransformWebMouseEvent(
-        ToWebLocalFrameBase(LocalRoot())->GetFrameView(), mouse_event);
     GetPage()->GetPointerLockController().DispatchLockedMouseEvent(
         transformed_event, event_type);
   }
@@ -301,4 +317,11 @@
   }
 }
 
+LocalFrame* WebFrameWidgetBase::FocusedLocalFrameInWidget() const {
+  LocalFrame* frame = GetPage()->GetFocusController().FocusedFrame();
+  return (frame && frame->LocalFrameRoot() == ToCoreFrame(LocalRoot()))
+             ? frame
+             : nullptr;
+}
+
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/frame/WebFrameWidgetBase.h b/third_party/WebKit/Source/core/frame/WebFrameWidgetBase.h
index 286092e..eecd3144 100644
--- a/third_party/WebKit/Source/core/frame/WebFrameWidgetBase.h
+++ b/third_party/WebKit/Source/core/frame/WebFrameWidgetBase.h
@@ -9,6 +9,7 @@
 #include "core/clipboard/DataObject.h"
 #include "core/dom/UserGestureIndicator.h"
 #include "platform/wtf/Assertions.h"
+#include "public/platform/WebCoalescedInputEvent.h"
 #include "public/platform/WebDragData.h"
 #include "public/web/WebFrameWidget.h"
 
@@ -118,10 +119,11 @@
   WebDragOperation drag_operation_ = kWebDragOperationNone;
 
   // Helper function to process events while pointer locked.
-  void PointerLockMouseEvent(const WebInputEvent&);
+  void PointerLockMouseEvent(const WebCoalescedInputEvent&);
 
  private:
   void CancelDrag();
+  LocalFrame* FocusedLocalFrameInWidget() const;
 
   static bool ignore_input_events_;
   RefPtr<UserGestureToken> pointer_lock_gesture_token_;
diff --git a/third_party/WebKit/Source/core/input/EventHandler.cpp b/third_party/WebKit/Source/core/input/EventHandler.cpp
index 24e8bc9d..0032b57 100644
--- a/third_party/WebKit/Source/core/input/EventHandler.cpp
+++ b/third_party/WebKit/Source/core/input/EventHandler.cpp
@@ -1215,6 +1215,10 @@
   }
 }
 
+void EventHandler::ReleaseMousePointerCapture() {
+  pointer_event_manager_->ReleaseMousePointerCapture();
+}
+
 bool EventHandler::HasPointerCapture(int pointer_id,
                                      const EventTarget* target) const {
   if (RootFrameTouchPointerActiveInCurrentFrame(pointer_id)) {
@@ -1230,6 +1234,12 @@
   return pointer_event_manager_->HasProcessedPointerCapture(pointer_id, target);
 }
 
+void EventHandler::ProcessPendingPointerCaptureForPointerLock(
+    const WebMouseEvent& mouse_event) {
+  pointer_event_manager_->ProcessPendingPointerCaptureForPointerLock(
+      mouse_event);
+}
+
 void EventHandler::ElementRemoved(EventTarget* target) {
   pointer_event_manager_->ElementRemoved(target);
 }
diff --git a/third_party/WebKit/Source/core/input/EventHandler.h b/third_party/WebKit/Source/core/input/EventHandler.h
index 48d1ce3c..0604f27 100644
--- a/third_party/WebKit/Source/core/input/EventHandler.h
+++ b/third_party/WebKit/Source/core/input/EventHandler.h
@@ -203,8 +203,10 @@
 
   void SetPointerCapture(int, EventTarget*);
   void ReleasePointerCapture(int, EventTarget*);
+  void ReleaseMousePointerCapture();
   bool HasPointerCapture(int, const EventTarget*) const;
   bool HasProcessedPointerCapture(int, const EventTarget*) const;
+  void ProcessPendingPointerCaptureForPointerLock(const WebMouseEvent&);
 
   void ElementRemoved(EventTarget*);
 
diff --git a/third_party/WebKit/Source/core/input/PointerEventManager.cpp b/third_party/WebKit/Source/core/input/PointerEventManager.cpp
index f699e37..ccafa27e 100644
--- a/third_party/WebKit/Source/core/input/PointerEventManager.cpp
+++ b/third_party/WebKit/Source/core/input/PointerEventManager.cpp
@@ -549,6 +549,8 @@
   return pointer_capture_target_temp != pending_pointercapture_target_temp;
 }
 
+// TODO(lanwei): Replace the last two parameters by a single WebMouseEvent
+// pointer which defaults to null, crbug.com/727333.
 EventTarget* PointerEventManager::ProcessCaptureAndPositionOfPointerEvent(
     PointerEvent* pointer_event,
     EventTarget* hit_test_target,
@@ -608,6 +610,14 @@
   }
 }
 
+void PointerEventManager::ProcessPendingPointerCaptureForPointerLock(
+    const WebMouseEvent& mouse_event) {
+  PointerEvent* pointer_event = pointer_event_factory_.Create(
+      EventTypeNames::mousemove, mouse_event, Vector<WebMouseEvent>(),
+      frame_->GetDocument()->domWindow());
+  ProcessPendingPointerCapture(pointer_event);
+}
+
 void PointerEventManager::RemoveTargetFromPointerCapturingMapping(
     PointerCapturingMap& map,
     const EventTarget* target) {
@@ -667,6 +677,10 @@
     ReleasePointerCapture(pointer_id);
 }
 
+void PointerEventManager::ReleaseMousePointerCapture() {
+  ReleasePointerCapture(PointerEventFactory::kMouseId);
+}
+
 bool PointerEventManager::HasPointerCapture(int pointer_id,
                                             const EventTarget* target) const {
   return pending_pointer_capture_target_.at(pointer_id) == target;
diff --git a/third_party/WebKit/Source/core/input/PointerEventManager.h b/third_party/WebKit/Source/core/input/PointerEventManager.h
index 6d1280c8..d8b97b4 100644
--- a/third_party/WebKit/Source/core/input/PointerEventManager.h
+++ b/third_party/WebKit/Source/core/input/PointerEventManager.h
@@ -62,6 +62,7 @@
 
   void SetPointerCapture(int, EventTarget*);
   void ReleasePointerCapture(int, EventTarget*);
+  void ReleaseMousePointerCapture();
 
   // See Element::hasPointerCapture(int).
   bool HasPointerCapture(int, const EventTarget*) const;
@@ -83,6 +84,8 @@
   // |m_touchIdsForCanceledPointerdowns|.
   bool PrimaryPointerdownCanceled(uint32_t unique_touch_event_id);
 
+  void ProcessPendingPointerCaptureForPointerLock(const WebMouseEvent&);
+
  private:
   typedef HeapHashMap<int,
                       Member<EventTarget>,
diff --git a/third_party/WebKit/Source/core/layout/LayoutListMarker.cpp b/third_party/WebKit/Source/core/layout/LayoutListMarker.cpp
index 524bb08e..d3bdb80b 100644
--- a/third_party/WebKit/Source/core/layout/LayoutListMarker.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutListMarker.cpp
@@ -139,7 +139,7 @@
   DCHECK(NeedsLayout());
   LayoutAnalyzer::Scope analyzer(*this);
 
-  LayoutUnit block_offset;
+  LayoutUnit block_offset = LogicalTop();
   for (LayoutBox* o = ParentBox(); o && o != ListItem(); o = o->ParentBox()) {
     block_offset += o->LogicalTop();
   }
diff --git a/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp b/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp
index bbe76909..efd0a2d 100644
--- a/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp
@@ -969,9 +969,19 @@
         row_logical_top = row->LogicalBottom();
         row_logical_top += LayoutUnit(Table()->VBorderSpacing());
       }
+
+      if (!Table()->HasSameDirectionAs(row)) {
+        UseCounter::Count(GetDocument(),
+                          UseCounter::kTableRowDirectionDifferentFromTable);
+      }
     }
   }
 
+  if (!Table()->HasSameDirectionAs(this)) {
+    UseCounter::Count(GetDocument(),
+                      UseCounter::kTableSectionDirectionDifferentFromTable);
+  }
+
   ClearNeedsLayout();
 }
 
diff --git a/third_party/WebKit/Source/core/loader/EmptyClients.cpp b/third_party/WebKit/Source/core/loader/EmptyClients.cpp
index ec637fc..003ff95 100644
--- a/third_party/WebKit/Source/core/loader/EmptyClients.cpp
+++ b/third_party/WebKit/Source/core/loader/EmptyClients.cpp
@@ -76,6 +76,7 @@
   RefPtr<WebTaskRunner> TimerTaskRunner() override;
   RefPtr<WebTaskRunner> UnthrottledTaskRunner() override;
   RefPtr<WebTaskRunner> SuspendableTaskRunner() override;
+  RefPtr<WebTaskRunner> UnthrottledButBlockableTaskRunner() override;
 };
 
 RefPtr<WebTaskRunner> EmptyFrameScheduler::LoadingTaskRunner() {
@@ -94,6 +95,10 @@
   return Platform::Current()->MainThread()->GetWebTaskRunner();
 }
 
+RefPtr<WebTaskRunner> EmptyFrameScheduler::UnthrottledButBlockableTaskRunner() {
+  return Platform::Current()->MainThread()->GetWebTaskRunner();
+}
+
 PopupMenu* EmptyChromeClient::OpenPopupMenu(LocalFrame&, HTMLSelectElement&) {
   return new EmptyPopupMenu();
 }
diff --git a/third_party/WebKit/Source/core/svg/SVGAngleTearOff.cpp b/third_party/WebKit/Source/core/svg/SVGAngleTearOff.cpp
index f7784a1..928139d 100644
--- a/third_party/WebKit/Source/core/svg/SVGAngleTearOff.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGAngleTearOff.cpp
@@ -129,6 +129,11 @@
   CommitChange();
 }
 
+SVGAngleTearOff* SVGAngleTearOff::CreateDetached() {
+  return Create(SVGAngle::Create(), nullptr, kPropertyIsNotAnimVal,
+                QualifiedName::Null());
+}
+
 DEFINE_TRACE_WRAPPERS(SVGAngleTearOff) {
   visitor->TraceWrappers(contextElement());
 }
diff --git a/third_party/WebKit/Source/core/svg/SVGAngleTearOff.h b/third_party/WebKit/Source/core/svg/SVGAngleTearOff.h
index 12472ca..7bd77a5 100644
--- a/third_party/WebKit/Source/core/svg/SVGAngleTearOff.h
+++ b/third_party/WebKit/Source/core/svg/SVGAngleTearOff.h
@@ -42,14 +42,14 @@
   DEFINE_WRAPPERTYPEINFO();
 
  public:
-  static SVGAngleTearOff* Create(
-      SVGAngle* target,
-      SVGElement* context_element,
-      PropertyIsAnimValType property_is_anim_val,
-      const QualifiedName& attribute_name = QualifiedName::Null()) {
+  static SVGAngleTearOff* Create(SVGAngle* target,
+                                 SVGElement* context_element,
+                                 PropertyIsAnimValType property_is_anim_val,
+                                 const QualifiedName& attribute_name) {
     return new SVGAngleTearOff(target, context_element, property_is_anim_val,
                                attribute_name);
   }
+  static SVGAngleTearOff* CreateDetached();
 
   enum {
     kSvgAngletypeUnknown = SVGAngle::kSvgAngletypeUnknown,
diff --git a/third_party/WebKit/Source/core/svg/SVGGeometryElement.cpp b/third_party/WebKit/Source/core/svg/SVGGeometryElement.cpp
index 041195d..eda675c1 100644
--- a/third_party/WebKit/Source/core/svg/SVGGeometryElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGGeometryElement.cpp
@@ -130,8 +130,7 @@
   FloatPoint point;
   if (GetLayoutObject())
     point = AsPath().PointAtLength(length);
-  return SVGPointTearOff::Create(SVGPoint::Create(point), 0,
-                                 kPropertyIsNotAnimVal);
+  return SVGPointTearOff::CreateDetached(point);
 }
 
 float SVGGeometryElement::ComputePathLength() const {
diff --git a/third_party/WebKit/Source/core/svg/SVGGraphicsElement.cpp b/third_party/WebKit/Source/core/svg/SVGGraphicsElement.cpp
index d8cb10c7..02665ba 100644
--- a/third_party/WebKit/Source/core/svg/SVGGraphicsElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGGraphicsElement.cpp
@@ -173,8 +173,7 @@
   FloatRect boundingBox;
   if (GetLayoutObject())
     boundingBox = GetBBox();
-  return SVGRectTearOff::Create(SVGRect::Create(boundingBox), 0,
-                                kPropertyIsNotAnimVal);
+  return SVGRectTearOff::CreateDetached(boundingBox);
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/svg/SVGLengthTearOff.cpp b/third_party/WebKit/Source/core/svg/SVGLengthTearOff.cpp
index 2a29c26..9145a353 100644
--- a/third_party/WebKit/Source/core/svg/SVGLengthTearOff.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGLengthTearOff.cpp
@@ -244,6 +244,11 @@
                                     property_is_anim_val,
                                     attribute_name) {}
 
+SVGLengthTearOff* SVGLengthTearOff::CreateDetached() {
+  return Create(SVGLength::Create(), nullptr, kPropertyIsNotAnimVal,
+                QualifiedName::Null());
+}
+
 DEFINE_TRACE_WRAPPERS(SVGLengthTearOff) {
   visitor->TraceWrappers(contextElement());
 }
diff --git a/third_party/WebKit/Source/core/svg/SVGLengthTearOff.h b/third_party/WebKit/Source/core/svg/SVGLengthTearOff.h
index 52439d57..8bf94ef 100644
--- a/third_party/WebKit/Source/core/svg/SVGLengthTearOff.h
+++ b/third_party/WebKit/Source/core/svg/SVGLengthTearOff.h
@@ -57,14 +57,14 @@
     kSvgLengthtypePc = 10
   };
 
-  static SVGLengthTearOff* Create(
-      SVGLength* target,
-      SVGElement* context_element,
-      PropertyIsAnimValType property_is_anim_val,
-      const QualifiedName& attribute_name = QualifiedName::Null()) {
+  static SVGLengthTearOff* Create(SVGLength* target,
+                                  SVGElement* context_element,
+                                  PropertyIsAnimValType property_is_anim_val,
+                                  const QualifiedName& attribute_name) {
     return new SVGLengthTearOff(target, context_element, property_is_anim_val,
                                 attribute_name);
   }
+  static SVGLengthTearOff* CreateDetached();
 
   unsigned short unitType();
   SVGLengthMode UnitMode();
@@ -87,7 +87,7 @@
   SVGLengthTearOff(SVGLength*,
                    SVGElement* context_element,
                    PropertyIsAnimValType,
-                   const QualifiedName& attribute_name = QualifiedName::Null());
+                   const QualifiedName& attribute_name);
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/svg/SVGNumberListTearOff.h b/third_party/WebKit/Source/core/svg/SVGNumberListTearOff.h
index f93c924..ba394ef 100644
--- a/third_party/WebKit/Source/core/svg/SVGNumberListTearOff.h
+++ b/third_party/WebKit/Source/core/svg/SVGNumberListTearOff.h
@@ -46,7 +46,7 @@
       SVGNumberList* target,
       SVGElement* context_element,
       PropertyIsAnimValType property_is_anim_val,
-      const QualifiedName& attribute_name = QualifiedName::Null()) {
+      const QualifiedName& attribute_name) {
     return new SVGNumberListTearOff(target, context_element,
                                     property_is_anim_val, attribute_name);
   }
@@ -56,11 +56,10 @@
   }
 
  private:
-  SVGNumberListTearOff(
-      SVGNumberList* target,
-      SVGElement* context_element,
-      PropertyIsAnimValType property_is_anim_val,
-      const QualifiedName& attribute_name = QualifiedName::Null())
+  SVGNumberListTearOff(SVGNumberList* target,
+                       SVGElement* context_element,
+                       PropertyIsAnimValType property_is_anim_val,
+                       const QualifiedName& attribute_name)
       : SVGListPropertyTearOffHelper<SVGNumberListTearOff, SVGNumberList>(
             target,
             context_element,
diff --git a/third_party/WebKit/Source/core/svg/SVGNumberTearOff.cpp b/third_party/WebKit/Source/core/svg/SVGNumberTearOff.cpp
index e05c20a..c274ff7e 100644
--- a/third_party/WebKit/Source/core/svg/SVGNumberTearOff.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGNumberTearOff.cpp
@@ -52,6 +52,11 @@
   CommitChange();
 }
 
+SVGNumberTearOff* SVGNumberTearOff::CreateDetached() {
+  return Create(SVGNumber::Create(), nullptr, kPropertyIsNotAnimVal,
+                QualifiedName::Null());
+}
+
 DEFINE_TRACE_WRAPPERS(SVGNumberTearOff) {
   visitor->TraceWrappers(contextElement());
 }
diff --git a/third_party/WebKit/Source/core/svg/SVGNumberTearOff.h b/third_party/WebKit/Source/core/svg/SVGNumberTearOff.h
index 903e9c6..d05f6b4 100644
--- a/third_party/WebKit/Source/core/svg/SVGNumberTearOff.h
+++ b/third_party/WebKit/Source/core/svg/SVGNumberTearOff.h
@@ -42,14 +42,14 @@
   DEFINE_WRAPPERTYPEINFO();
 
  public:
-  static SVGNumberTearOff* Create(
-      SVGNumber* target,
-      SVGElement* context_element,
-      PropertyIsAnimValType property_is_anim_val,
-      const QualifiedName& attribute_name = QualifiedName::Null()) {
+  static SVGNumberTearOff* Create(SVGNumber* target,
+                                  SVGElement* context_element,
+                                  PropertyIsAnimValType property_is_anim_val,
+                                  const QualifiedName& attribute_name) {
     return new SVGNumberTearOff(target, context_element, property_is_anim_val,
                                 attribute_name);
   }
+  static SVGNumberTearOff* CreateDetached();
 
   DECLARE_VIRTUAL_TRACE_WRAPPERS();
 
@@ -60,7 +60,7 @@
   SVGNumberTearOff(SVGNumber*,
                    SVGElement* context_element,
                    PropertyIsAnimValType,
-                   const QualifiedName& attribute_name = QualifiedName::Null());
+                   const QualifiedName& attribute_name);
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/svg/SVGPathElement.cpp b/third_party/WebKit/Source/core/svg/SVGPathElement.cpp
index 113b027..1ed87f83 100644
--- a/third_party/WebKit/Source/core/svg/SVGPathElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGPathElement.cpp
@@ -72,8 +72,7 @@
 SVGPointTearOff* SVGPathElement::getPointAtLength(float length) {
   GetDocument().UpdateStyleAndLayoutIgnorePendingStylesheets();
   FloatPoint point = SVGPathQuery(PathByteStream()).GetPointAtLength(length);
-  return SVGPointTearOff::Create(SVGPoint::Create(point), 0,
-                                 kPropertyIsNotAnimVal);
+  return SVGPointTearOff::CreateDetached(point);
 }
 
 unsigned SVGPathElement::getPathSegAtLength(float length) {
diff --git a/third_party/WebKit/Source/core/svg/SVGPointListTearOff.h b/third_party/WebKit/Source/core/svg/SVGPointListTearOff.h
index d1bda31..db3e349 100644
--- a/third_party/WebKit/Source/core/svg/SVGPointListTearOff.h
+++ b/third_party/WebKit/Source/core/svg/SVGPointListTearOff.h
@@ -42,11 +42,10 @@
   DEFINE_WRAPPERTYPEINFO();
 
  public:
-  static SVGPointListTearOff* Create(
-      SVGPointList* target,
-      SVGElement* context_element,
-      PropertyIsAnimValType property_is_anim_val,
-      const QualifiedName& attribute_name = QualifiedName::Null()) {
+  static SVGPointListTearOff* Create(SVGPointList* target,
+                                     SVGElement* context_element,
+                                     PropertyIsAnimValType property_is_anim_val,
+                                     const QualifiedName& attribute_name) {
     return new SVGPointListTearOff(target, context_element,
                                    property_is_anim_val, attribute_name);
   }
@@ -56,11 +55,10 @@
   }
 
  private:
-  SVGPointListTearOff(
-      SVGPointList* target,
-      SVGElement* context_element,
-      PropertyIsAnimValType property_is_anim_val,
-      const QualifiedName& attribute_name = QualifiedName::Null())
+  SVGPointListTearOff(SVGPointList* target,
+                      SVGElement* context_element,
+                      PropertyIsAnimValType property_is_anim_val,
+                      const QualifiedName& attribute_name)
       : SVGListPropertyTearOffHelper<SVGPointListTearOff, SVGPointList>(
             target,
             context_element,
diff --git a/third_party/WebKit/Source/core/svg/SVGPointTearOff.cpp b/third_party/WebKit/Source/core/svg/SVGPointTearOff.cpp
index 1d8de80..bc69419 100644
--- a/third_party/WebKit/Source/core/svg/SVGPointTearOff.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGPointTearOff.cpp
@@ -64,8 +64,12 @@
 
 SVGPointTearOff* SVGPointTearOff::matrixTransform(SVGMatrixTearOff* matrix) {
   FloatPoint point = Target()->MatrixTransform(matrix->Value());
-  return SVGPointTearOff::Create(SVGPoint::Create(point), 0,
-                                 kPropertyIsNotAnimVal);
+  return CreateDetached(point);
+}
+
+SVGPointTearOff* SVGPointTearOff::CreateDetached(const FloatPoint& point) {
+  return Create(SVGPoint::Create(point), nullptr, kPropertyIsNotAnimVal,
+                QualifiedName::Null());
 }
 
 DEFINE_TRACE_WRAPPERS(SVGPointTearOff) {
diff --git a/third_party/WebKit/Source/core/svg/SVGPointTearOff.h b/third_party/WebKit/Source/core/svg/SVGPointTearOff.h
index 5057fdf..3a5869da 100644
--- a/third_party/WebKit/Source/core/svg/SVGPointTearOff.h
+++ b/third_party/WebKit/Source/core/svg/SVGPointTearOff.h
@@ -44,14 +44,14 @@
   DEFINE_WRAPPERTYPEINFO();
 
  public:
-  static SVGPointTearOff* Create(
-      SVGPoint* target,
-      SVGElement* context_element,
-      PropertyIsAnimValType property_is_anim_val,
-      const QualifiedName& attribute_name = QualifiedName::Null()) {
+  static SVGPointTearOff* Create(SVGPoint* target,
+                                 SVGElement* context_element,
+                                 PropertyIsAnimValType property_is_anim_val,
+                                 const QualifiedName& attribute_name) {
     return new SVGPointTearOff(target, context_element, property_is_anim_val,
                                attribute_name);
   }
+  static SVGPointTearOff* CreateDetached(const FloatPoint&);
 
   void setX(float, ExceptionState&);
   void setY(float, ExceptionState&);
@@ -66,7 +66,7 @@
   SVGPointTearOff(SVGPoint*,
                   SVGElement* context_element,
                   PropertyIsAnimValType,
-                  const QualifiedName& attribute_name = QualifiedName::Null());
+                  const QualifiedName& attribute_name);
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/svg/SVGPreserveAspectRatioTearOff.h b/third_party/WebKit/Source/core/svg/SVGPreserveAspectRatioTearOff.h
index 5efdbaf..8f8ad21 100644
--- a/third_party/WebKit/Source/core/svg/SVGPreserveAspectRatioTearOff.h
+++ b/third_party/WebKit/Source/core/svg/SVGPreserveAspectRatioTearOff.h
@@ -79,7 +79,7 @@
       SVGPreserveAspectRatio* target,
       SVGElement* context_element,
       PropertyIsAnimValType property_is_anim_val,
-      const QualifiedName& attribute_name = QualifiedName::Null()) {
+      const QualifiedName& attribute_name) {
     return new SVGPreserveAspectRatioTearOff(
         target, context_element, property_is_anim_val, attribute_name);
   }
@@ -92,11 +92,10 @@
   DECLARE_VIRTUAL_TRACE_WRAPPERS();
 
  private:
-  SVGPreserveAspectRatioTearOff(
-      SVGPreserveAspectRatio*,
-      SVGElement* context_element,
-      PropertyIsAnimValType,
-      const QualifiedName& attribute_name = QualifiedName::Null());
+  SVGPreserveAspectRatioTearOff(SVGPreserveAspectRatio*,
+                                SVGElement* context_element,
+                                PropertyIsAnimValType,
+                                const QualifiedName& attribute_name);
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/svg/SVGRectTearOff.cpp b/third_party/WebKit/Source/core/svg/SVGRectTearOff.cpp
index 29d6e69..14820d6d 100644
--- a/third_party/WebKit/Source/core/svg/SVGRectTearOff.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGRectTearOff.cpp
@@ -79,6 +79,11 @@
   CommitChange();
 }
 
+SVGRectTearOff* SVGRectTearOff::CreateDetached(const FloatRect& rect) {
+  return Create(SVGRect::Create(rect), nullptr, kPropertyIsNotAnimVal,
+                QualifiedName::Null());
+}
+
 DEFINE_TRACE_WRAPPERS(SVGRectTearOff) {
   visitor->TraceWrappers(contextElement());
 }
diff --git a/third_party/WebKit/Source/core/svg/SVGRectTearOff.h b/third_party/WebKit/Source/core/svg/SVGRectTearOff.h
index b959b21..366a1dd 100644
--- a/third_party/WebKit/Source/core/svg/SVGRectTearOff.h
+++ b/third_party/WebKit/Source/core/svg/SVGRectTearOff.h
@@ -42,14 +42,14 @@
   DEFINE_WRAPPERTYPEINFO();
 
  public:
-  static SVGRectTearOff* Create(
-      SVGRect* target,
-      SVGElement* context_element,
-      PropertyIsAnimValType property_is_anim_val,
-      const QualifiedName& attribute_name = QualifiedName::Null()) {
+  static SVGRectTearOff* Create(SVGRect* target,
+                                SVGElement* context_element,
+                                PropertyIsAnimValType property_is_anim_val,
+                                const QualifiedName& attribute_name) {
     return new SVGRectTearOff(target, context_element, property_is_anim_val,
                               attribute_name);
   }
+  static SVGRectTearOff* CreateDetached(const FloatRect&);
 
   void setX(float, ExceptionState&);
   void setY(float, ExceptionState&);
@@ -66,7 +66,7 @@
   SVGRectTearOff(SVGRect*,
                  SVGElement* context_element,
                  PropertyIsAnimValType,
-                 const QualifiedName& attribute_name = QualifiedName::Null());
+                 const QualifiedName& attribute_name);
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/svg/SVGSVGElement.cpp b/third_party/WebKit/Source/core/svg/SVGSVGElement.cpp
index e2c60f6..deaca43e 100644
--- a/third_party/WebKit/Source/core/svg/SVGSVGElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGSVGElement.cpp
@@ -130,7 +130,8 @@
   SVGCurrentTranslateTearOff(SVGSVGElement* context_element)
       : SVGPointTearOff(context_element->translation_,
                         context_element,
-                        kPropertyIsNotAnimVal) {}
+                        kPropertyIsNotAnimVal,
+                        QualifiedName::Null()) {}
 };
 
 SVGPointTearOff* SVGSVGElement::currentTranslateFromJavascript() {
@@ -421,21 +422,19 @@
 }
 
 SVGNumberTearOff* SVGSVGElement::createSVGNumber() {
-  return SVGNumberTearOff::Create(SVGNumber::Create(0.0f), 0,
-                                  kPropertyIsNotAnimVal);
+  return SVGNumberTearOff::CreateDetached();
 }
 
 SVGLengthTearOff* SVGSVGElement::createSVGLength() {
-  return SVGLengthTearOff::Create(SVGLength::Create(), 0,
-                                  kPropertyIsNotAnimVal);
+  return SVGLengthTearOff::CreateDetached();
 }
 
 SVGAngleTearOff* SVGSVGElement::createSVGAngle() {
-  return SVGAngleTearOff::Create(SVGAngle::Create(), 0, kPropertyIsNotAnimVal);
+  return SVGAngleTearOff::CreateDetached();
 }
 
 SVGPointTearOff* SVGSVGElement::createSVGPoint() {
-  return SVGPointTearOff::Create(SVGPoint::Create(), 0, kPropertyIsNotAnimVal);
+  return SVGPointTearOff::CreateDetached(FloatPoint(0, 0));
 }
 
 SVGMatrixTearOff* SVGSVGElement::createSVGMatrix() {
@@ -443,12 +442,11 @@
 }
 
 SVGRectTearOff* SVGSVGElement::createSVGRect() {
-  return SVGRectTearOff::Create(SVGRect::Create(), 0, kPropertyIsNotAnimVal);
+  return SVGRectTearOff::CreateDetached(FloatRect(0, 0, 0, 0));
 }
 
 SVGTransformTearOff* SVGSVGElement::createSVGTransform() {
-  return SVGTransformTearOff::Create(SVGTransform::Create(kSvgTransformMatrix),
-                                     0, kPropertyIsNotAnimVal);
+  return SVGTransformTearOff::CreateDetached();
 }
 
 SVGTransformTearOff* SVGSVGElement::createSVGTransformFromMatrix(
diff --git a/third_party/WebKit/Source/core/svg/SVGStringListTearOff.h b/third_party/WebKit/Source/core/svg/SVGStringListTearOff.h
index 2fa2b2c..7006ae3 100644
--- a/third_party/WebKit/Source/core/svg/SVGStringListTearOff.h
+++ b/third_party/WebKit/Source/core/svg/SVGStringListTearOff.h
@@ -46,7 +46,7 @@
       SVGStringList* target,
       SVGElement* context_element,
       PropertyIsAnimValType property_is_anim_val,
-      const QualifiedName& attribute_name = QualifiedName::Null()) {
+      const QualifiedName& attribute_name) {
     return new SVGStringListTearOff(target, context_element,
                                     property_is_anim_val, attribute_name);
   }
diff --git a/third_party/WebKit/Source/core/svg/SVGTextContentElement.cpp b/third_party/WebKit/Source/core/svg/SVGTextContentElement.cpp
index 7ff71ab8..d5e3180 100644
--- a/third_party/WebKit/Source/core/svg/SVGTextContentElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGTextContentElement.cpp
@@ -138,8 +138,7 @@
 
   FloatPoint point =
       SVGTextQuery(GetLayoutObject()).StartPositionOfCharacter(charnum);
-  return SVGPointTearOff::Create(SVGPoint::Create(point), 0,
-                                 kPropertyIsNotAnimVal);
+  return SVGPointTearOff::CreateDetached(point);
 }
 
 SVGPointTearOff* SVGTextContentElement::getEndPositionOfChar(
@@ -156,8 +155,7 @@
 
   FloatPoint point =
       SVGTextQuery(GetLayoutObject()).EndPositionOfCharacter(charnum);
-  return SVGPointTearOff::Create(SVGPoint::Create(point), 0,
-                                 kPropertyIsNotAnimVal);
+  return SVGPointTearOff::CreateDetached(point);
 }
 
 SVGRectTearOff* SVGTextContentElement::getExtentOfChar(
@@ -173,8 +171,7 @@
   }
 
   FloatRect rect = SVGTextQuery(GetLayoutObject()).ExtentOfCharacter(charnum);
-  return SVGRectTearOff::Create(SVGRect::Create(rect), 0,
-                                kPropertyIsNotAnimVal);
+  return SVGRectTearOff::CreateDetached(rect);
 }
 
 float SVGTextContentElement::getRotationOfChar(
diff --git a/third_party/WebKit/Source/core/svg/SVGTransformListTearOff.h b/third_party/WebKit/Source/core/svg/SVGTransformListTearOff.h
index 19ef25a..c85db9c 100644
--- a/third_party/WebKit/Source/core/svg/SVGTransformListTearOff.h
+++ b/third_party/WebKit/Source/core/svg/SVGTransformListTearOff.h
@@ -50,7 +50,7 @@
       SVGTransformList* target,
       SVGElement* context_element,
       PropertyIsAnimValType property_is_anim_val,
-      const QualifiedName& attribute_name = QualifiedName::Null()) {
+      const QualifiedName& attribute_name) {
     return new SVGTransformListTearOff(target, context_element,
                                        property_is_anim_val, attribute_name);
   }
diff --git a/third_party/WebKit/Source/core/svg/SVGTransformTearOff.cpp b/third_party/WebKit/Source/core/svg/SVGTransformTearOff.cpp
index fa1f5b56..4f2b54ca 100644
--- a/third_party/WebKit/Source/core/svg/SVGTransformTearOff.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGTransformTearOff.cpp
@@ -52,9 +52,14 @@
   SVGPropertyTearOff<SVGTransform>::Trace(visitor);
 }
 
+SVGTransformTearOff* SVGTransformTearOff::CreateDetached() {
+  return Create(SVGTransform::Create(blink::kSvgTransformMatrix), nullptr,
+                kPropertyIsNotAnimVal, QualifiedName::Null());
+}
+
 SVGTransformTearOff* SVGTransformTearOff::Create(SVGMatrixTearOff* matrix) {
   return Create(SVGTransform::Create(matrix->Value()), nullptr,
-                kPropertyIsNotAnimVal);
+                kPropertyIsNotAnimVal, QualifiedName::Null());
 }
 
 SVGMatrixTearOff* SVGTransformTearOff::matrix() {
diff --git a/third_party/WebKit/Source/core/svg/SVGTransformTearOff.h b/third_party/WebKit/Source/core/svg/SVGTransformTearOff.h
index 1e6da270..f200e7d16 100644
--- a/third_party/WebKit/Source/core/svg/SVGTransformTearOff.h
+++ b/third_party/WebKit/Source/core/svg/SVGTransformTearOff.h
@@ -55,14 +55,14 @@
     kSvgTransformSkewy = blink::kSvgTransformSkewy,
   };
 
-  static SVGTransformTearOff* Create(
-      SVGTransform* target,
-      SVGElement* context_element,
-      PropertyIsAnimValType property_is_anim_val,
-      const QualifiedName& attribute_name = QualifiedName::Null()) {
+  static SVGTransformTearOff* Create(SVGTransform* target,
+                                     SVGElement* context_element,
+                                     PropertyIsAnimValType property_is_anim_val,
+                                     const QualifiedName& attribute_name) {
     return new SVGTransformTearOff(target, context_element,
                                    property_is_anim_val, attribute_name);
   }
+  static SVGTransformTearOff* CreateDetached();
   static SVGTransformTearOff* Create(SVGMatrixTearOff*);
 
   ~SVGTransformTearOff() override;
diff --git a/third_party/WebKit/Source/core/svg/properties/SVGPropertyTearOff.h b/third_party/WebKit/Source/core/svg/properties/SVGPropertyTearOff.h
index a78c3f97..70edbe586 100644
--- a/third_party/WebKit/Source/core/svg/properties/SVGPropertyTearOff.h
+++ b/third_party/WebKit/Source/core/svg/properties/SVGPropertyTearOff.h
@@ -74,10 +74,9 @@
   static void ThrowReadOnly(ExceptionState&);
 
  protected:
-  SVGPropertyTearOffBase(
-      SVGElement* context_element,
-      PropertyIsAnimValType property_is_anim_val,
-      const QualifiedName& attribute_name = QualifiedName::Null())
+  SVGPropertyTearOffBase(SVGElement* context_element,
+                         PropertyIsAnimValType property_is_anim_val,
+                         const QualifiedName& attribute_name)
       : context_element_(context_element),
         property_is_anim_val_(property_is_anim_val),
         attribute_name_(attribute_name) {}
@@ -110,11 +109,10 @@
   }
 
  protected:
-  SVGPropertyTearOff(
-      Property* target,
-      SVGElement* context_element,
-      PropertyIsAnimValType property_is_anim_val,
-      const QualifiedName& attribute_name = QualifiedName::Null())
+  SVGPropertyTearOff(Property* target,
+                     SVGElement* context_element,
+                     PropertyIsAnimValType property_is_anim_val,
+                     const QualifiedName& attribute_name)
       : SVGPropertyTearOffBase(context_element,
                                property_is_anim_val,
                                attribute_name),
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 d911c77a..538e463 100644
--- a/third_party/WebKit/Source/devtools/front_end/main/module.json
+++ b/third_party/WebKit/Source/devtools/front_end/main/module.json
@@ -386,14 +386,17 @@
             "options": [
                 {
                     "value": "right",
+                    "text": "Right",
                     "title": "Dock to right"
                 },
                 {
                     "value": "bottom",
+                    "text": "Bottom",
                     "title": "Dock to bottom"
                 },
                 {
                     "value": "undocked",
+                    "text": "Undocked",
                     "title": "Undock into separate window"
                 }
             ]
diff --git a/third_party/WebKit/Source/devtools/front_end/settings/SettingsScreen.js b/third_party/WebKit/Source/devtools/front_end/settings/SettingsScreen.js
index 0b949eae..098edceb 100644
--- a/third_party/WebKit/Source/devtools/front_end/settings/SettingsScreen.js
+++ b/third_party/WebKit/Source/devtools/front_end/settings/SettingsScreen.js
@@ -132,29 +132,6 @@
       block.createChild('div', 'help-section-title').textContent = name;
     return block;
   }
-
-  _createSelectSetting(name, options, setting) {
-    var p = createElement('p');
-    p.createChild('label').textContent = name;
-
-    var select = p.createChild('select', 'chrome-select');
-    var settingValue = setting.get();
-
-    for (var i = 0; i < options.length; ++i) {
-      var option = options[i];
-      select.add(new Option(option[0], option[1]));
-      if (settingValue === option[1])
-        select.selectedIndex = i;
-    }
-
-    function changeListener(e) {
-      // Don't use e.target.value to avoid conversion of the value to string.
-      setting.set(options[select.selectedIndex][1]);
-    }
-
-    select.addEventListener('change', changeListener, false);
-    return p;
-  }
 };
 
 /**
@@ -218,22 +195,19 @@
         settingControl = UI.SettingsUI.createSettingCheckbox(uiTitle, setting);
         break;
       case 'enum':
-        var descriptorOptions = descriptor['options'];
-        var options = new Array(descriptorOptions.length);
-        for (var i = 0; i < options.length; ++i) {
-          // The "raw" flag indicates text is non-i18n-izable.
-          var optionName = descriptorOptions[i]['raw'] ? descriptorOptions[i]['text'] :
-                                                         Common.UIString(descriptorOptions[i]['text']);
-          options[i] = [optionName, descriptorOptions[i]['value']];
-        }
-        settingControl = this._createSelectSetting(uiTitle, options, setting);
+        if (Array.isArray(descriptor['options']))
+          settingControl = UI.SettingsUI.createSettingSelect(uiTitle, descriptor['options'], setting);
+        else
+          console.error('Enum setting defined without options');
         break;
       default:
         console.error('Invalid setting type: ' + descriptor['settingType']);
         return;
     }
-    this._nameToSettingElement.set(settingName, settingControl);
-    sectionElement.appendChild(/** @type {!Element} */ (settingControl));
+    if (settingControl) {
+      this._nameToSettingElement.set(settingName, settingControl);
+      sectionElement.appendChild(settingControl);
+    }
   }
 
   /**
diff --git a/third_party/WebKit/Source/devtools/front_end/ui/SettingsUI.js b/third_party/WebKit/Source/devtools/front_end/ui/SettingsUI.js
index 7cc50ad..c16b5458 100644
--- a/third_party/WebKit/Source/devtools/front_end/ui/SettingsUI.js
+++ b/third_party/WebKit/Source/devtools/front_end/ui/SettingsUI.js
@@ -54,6 +54,43 @@
 };
 
 /**
+ * @param {string} name
+ * @param {!Array<!{text: string, value: *, raw: (boolean|undefined)}>} options
+ * @param {!Common.Setting} setting
+ * @return {!Element}
+ */
+UI.SettingsUI.createSettingSelect = function(name, options, setting) {
+  var p = createElement('p');
+  p.createChild('label').textContent = name;
+  var select = p.createChild('select', 'chrome-select');
+
+  for (var i = 0; i < options.length; ++i) {
+    // The "raw" flag indicates text is non-i18n-izable.
+    var option = options[i];
+    var optionName = option.raw ? option.text : Common.UIString(option.text);
+    select.add(new Option(optionName, option.value));
+  }
+
+  setting.addChangeListener(settingChanged);
+  settingChanged();
+  select.addEventListener('change', selectChanged, false);
+  return p;
+
+  function settingChanged() {
+    var newValue = setting.get();
+    for (var i = 0; i < options.length; i++) {
+      if (options[i].value === newValue)
+        select.selectedIndex = i;
+    }
+  }
+
+  function selectChanged() {
+    // Don't use event.target.value to avoid conversion of the value to string.
+    setting.set(options[select.selectedIndex].value);
+  }
+};
+
+/**
  * @param {!Element} input
  * @param {!Common.Setting} setting
  */
diff --git a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5 b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5
index cc91807..70e102ed6 100644
--- a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5
+++ b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5
@@ -848,7 +848,7 @@
     },
     {
       name: "RestrictCanRequestURLCharacterSet",
-      status: "experimental",
+      status: "stable",
     },
     // Handles frame scrolling via the root PaintLayer instead of the FrameView.
     // crbug.com/417782 tracks enabling this by default.
diff --git a/third_party/WebKit/Source/platform/WebFrameScheduler.h b/third_party/WebKit/Source/platform/WebFrameScheduler.h
index f1ea4505..c312378 100644
--- a/third_party/WebKit/Source/platform/WebFrameScheduler.h
+++ b/third_party/WebKit/Source/platform/WebFrameScheduler.h
@@ -43,14 +43,31 @@
   // frames.
   virtual void SetCrossOrigin(bool) {}
 
-  // Returns the WebTaskRunner for loading tasks.
-  // WebFrameScheduler owns the returned WebTaskRunner.
-  virtual RefPtr<WebTaskRunner> LoadingTaskRunner() = 0;
+  // The tasks runners below are listed in increasing QoS order.
+  // - timer task queue. Designed for custom user-provided javascript tasks.
+  //   Lowest guarantees. Can be suspended, blocked during user gesture or
+  //   throttled when backgrounded.
+  // - loading task queue. Can be suspended or blocked during user gesture.
+  //   Throttling might be considered in the future.
+  // - suspendable task queue. Can be suspended and blocked during user gesture,
+  //   can't be throttled.
+  // - unthrottled-but-blockable task queue. Can't be throttled, can't
+  //   be suspended but can be blocked during user gesture.
+  //   NOTE: existence of this queue is a temporary fix for scroll latency
+  //   regression. All tasks should be moved from this queue to suspendable
+  //   or unthrottled queues and it should be deleted.
+  // - unthrottled task queue. Highest guarantees. Can't be throttled,
+  //   suspended or blocked. Should be used only when necessary after
+  //   consulting scheduler-dev@.
 
   // Returns the WebTaskRunner for timer tasks.
   // WebFrameScheduler owns the returned WebTaskRunner.
   virtual RefPtr<WebTaskRunner> TimerTaskRunner() = 0;
 
+  // Returns the WebTaskRunner for loading tasks.
+  // WebFrameScheduler owns the returned WebTaskRunner.
+  virtual RefPtr<WebTaskRunner> LoadingTaskRunner() = 0;
+
   // Returns the WebTaskRunner for tasks which shouldn't get throttled,
   // but can be suspended.
   // TODO(altimin): This is a transitional task runner. Unthrottled task runner
@@ -58,6 +75,13 @@
   // task runner will be added.
   virtual RefPtr<WebTaskRunner> SuspendableTaskRunner() = 0;
 
+  // Retuns the WebTaskRunner for tasks which should not be suspended or
+  // throttled, but should be blocked during user gesture.
+  // This is a temporary task runner needed for a fix for touch latency
+  // regression. All tasks from it should be moved to suspendable or
+  // unthrottled task runner.
+  virtual RefPtr<WebTaskRunner> UnthrottledButBlockableTaskRunner() = 0;
+
   // Returns the WebTaskRunner for tasks which should never get throttled.
   // This is generally used for executing internal browser tasks which should
   // never be throttled. Ideally only tasks whose performance characteristics
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc
index fa6a06c..2f708ac 100644
--- a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc
+++ b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc
@@ -1168,13 +1168,6 @@
       ShouldDisableThrottlingBecauseOfAudio(now) ||
       GetMainThreadOnly().use_virtual_time;
 
-  // TODO(altimin): Consider adding default timer tq to background time
-  // budget pool.
-  if (GetMainThreadOnly().renderer_backgrounded &&
-      RuntimeEnabledFeatures::timerThrottlingForBackgroundTabsEnabled()) {
-    new_policy.timer_queue_policy.time_domain_type = TimeDomainType::THROTTLED;
-  }
-
   // Tracing is done before the early out check, because it's quite possible we
   // will otherwise miss this information in traces.
   CreateTraceEventObjectSnapshotLocked();
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl_unittest.cc b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl_unittest.cc
index 80e9810..9f0e220f 100644
--- a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl_unittest.cc
+++ b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl_unittest.cc
@@ -3837,8 +3837,10 @@
 
 }  // namespace
 
+// TODO(altimin@): Re-enable after splitting the timer policy into separate
+// policies.
 TEST_F(RendererSchedulerImplTest,
-       DefaultTimerTasksAreThrottledWhenBackgrounded) {
+       DISABLED_DefaultTimerTasksAreThrottledWhenBackgrounded) {
   ScopedAutoAdvanceNowEnabler enable_auto_advance_now(mock_task_runner_);
 
   scheduler_->OnRendererBackgrounded();
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.cc b/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.cc
index 3dce41cf..ee0fe8c 100644
--- a/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.cc
+++ b/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.cc
@@ -70,6 +70,11 @@
     suspendable_task_queue_->SetBlameContext(nullptr);
   }
 
+  if (unthrottled_but_blockable_task_queue_) {
+    unthrottled_but_blockable_task_queue_->UnregisterTaskQueue();
+    unthrottled_but_blockable_task_queue_->SetBlameContext(nullptr);
+  }
+
   if (parent_web_view_scheduler_) {
     parent_web_view_scheduler_->Unregister(this);
 
@@ -187,6 +192,20 @@
   return unthrottled_web_task_runner_;
 }
 
+RefPtr<blink::WebTaskRunner>
+WebFrameSchedulerImpl::UnthrottledButBlockableTaskRunner() {
+  DCHECK(parent_web_view_scheduler_);
+  if (!unthrottled_but_blockable_web_task_runner_) {
+    unthrottled_but_blockable_task_queue_ =
+        renderer_scheduler_->NewTimerTaskQueue(
+            TaskQueue::QueueType::FRAME_UNTHROTTLED);
+    unthrottled_but_blockable_task_queue_->SetBlameContext(blame_context_);
+    unthrottled_but_blockable_web_task_runner_ =
+        WebTaskRunnerImpl::Create(unthrottled_but_blockable_task_queue_);
+  }
+  return unthrottled_but_blockable_web_task_runner_;
+}
+
 blink::WebViewScheduler* WebFrameSchedulerImpl::GetWebViewScheduler() {
   return parent_web_view_scheduler_;
 }
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.h b/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.h
index ae88331..f6f491c3 100644
--- a/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.h
+++ b/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.h
@@ -47,6 +47,7 @@
   RefPtr<WebTaskRunner> TimerTaskRunner() override;
   RefPtr<WebTaskRunner> SuspendableTaskRunner() override;
   RefPtr<WebTaskRunner> UnthrottledTaskRunner() override;
+  RefPtr<WebTaskRunner> UnthrottledButBlockableTaskRunner() override;
   WebViewScheduler* GetWebViewScheduler() override;
   void DidStartLoading(unsigned long identifier) override;
   void DidStopLoading(unsigned long identifier) override;
@@ -87,6 +88,7 @@
   scoped_refptr<TaskQueue> timer_task_queue_;
   scoped_refptr<TaskQueue> unthrottled_task_queue_;
   scoped_refptr<TaskQueue> suspendable_task_queue_;
+  scoped_refptr<TaskQueue> unthrottled_but_blockable_task_queue_;
   std::unique_ptr<TaskQueue::QueueEnabledVoter> loading_queue_enabled_voter_;
   std::unique_ptr<TaskQueue::QueueEnabledVoter> timer_queue_enabled_voter_;
   std::unique_ptr<TaskQueue::QueueEnabledVoter>
@@ -95,6 +97,7 @@
   RefPtr<WebTaskRunnerImpl> timer_web_task_runner_;
   RefPtr<WebTaskRunnerImpl> unthrottled_web_task_runner_;
   RefPtr<WebTaskRunnerImpl> suspendable_web_task_runner_;
+  RefPtr<WebTaskRunnerImpl> unthrottled_but_blockable_web_task_runner_;
   RendererSchedulerImpl* renderer_scheduler_;        // NOT OWNED
   WebViewSchedulerImpl* parent_web_view_scheduler_;  // NOT OWNED
   base::trace_event::BlameContext* blame_context_;   // NOT OWNED
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl_unittest.cc b/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl_unittest.cc
index ab04a98..05a63ea 100644
--- a/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl_unittest.cc
+++ b/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl_unittest.cc
@@ -209,18 +209,20 @@
       BLINK_FROM_HERE, WTF::Bind(&IncrementCounter, WTF::Unretained(&counter)));
   web_frame_scheduler_->SuspendableTaskRunner()->PostTask(
       BLINK_FROM_HERE, WTF::Bind(&IncrementCounter, WTF::Unretained(&counter)));
+  web_frame_scheduler_->UnthrottledButBlockableTaskRunner()->PostTask(
+      BLINK_FROM_HERE, WTF::Bind(&IncrementCounter, WTF::Unretained(&counter)));
 
   web_frame_scheduler_->SetSuspended(true);
 
   EXPECT_EQ(0, counter);
   mock_task_runner_->RunUntilIdle();
-  EXPECT_EQ(1, counter);
+  EXPECT_EQ(2, counter);
 
   web_frame_scheduler_->SetSuspended(false);
 
-  EXPECT_EQ(1, counter);
+  EXPECT_EQ(2, counter);
   mock_task_runner_->RunUntilIdle();
-  EXPECT_EQ(4, counter);
+  EXPECT_EQ(5, counter);
 }
 
 }  // namespace scheduler
diff --git a/third_party/WebKit/Source/platform/threading/BackgroundTaskRunner.cpp b/third_party/WebKit/Source/platform/threading/BackgroundTaskRunner.cpp
index 7f865c4..ea04b97b8 100644
--- a/third_party/WebKit/Source/platform/threading/BackgroundTaskRunner.cpp
+++ b/third_party/WebKit/Source/platform/threading/BackgroundTaskRunner.cpp
@@ -5,7 +5,7 @@
 #include "platform/threading/BackgroundTaskRunner.h"
 
 #include "base/location.h"
-#include "base/threading/worker_pool.h"
+#include "base/task_scheduler/post_task.h"
 #include "public/platform/WebTraceLocation.h"
 
 namespace blink {
@@ -13,8 +13,9 @@
 void BackgroundTaskRunner::PostOnBackgroundThread(
     const WebTraceLocation& location,
     std::unique_ptr<CrossThreadClosure> closure) {
-  base::WorkerPool::PostTask(
-      location, ConvertToBaseCallback(std::move(closure)), false /* ignored */);
+  base::PostTaskWithTraits(location,
+                           {base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+                           ConvertToBaseCallback(std::move(closure)));
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/platform/threading/DEPS b/third_party/WebKit/Source/platform/threading/DEPS
index 0beb744..831fae7 100644
--- a/third_party/WebKit/Source/platform/threading/DEPS
+++ b/third_party/WebKit/Source/platform/threading/DEPS
@@ -1,5 +1,6 @@
 include_rules = [
     # To whitelist base/ stuff Blink is allowed to include, we list up all
     # directories and files instead of writing 'base/'.
-    "+base/threading",
+    "+base/task_scheduler",
+    "+base/test",
 ]
diff --git a/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp b/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp
index 5b818322..76d4b0b 100644
--- a/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp
+++ b/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp
@@ -377,7 +377,7 @@
   DCHECK(client_);
   if (client_->IsPointerLocked() &&
       WebInputEvent::IsMouseEventType(input_event.GetType())) {
-    PointerLockMouseEvent(input_event);
+    PointerLockMouseEvent(coalesced_event);
     return WebInputEventResult::kHandledSystem;
   }
 
diff --git a/third_party/WebKit/Source/web/WebViewImpl.cpp b/third_party/WebKit/Source/web/WebViewImpl.cpp
index ef1f8a5..9d68a677 100644
--- a/third_party/WebKit/Source/web/WebViewImpl.cpp
+++ b/third_party/WebKit/Source/web/WebViewImpl.cpp
@@ -2196,7 +2196,7 @@
 
   if (is_pointer_locked &&
       WebInputEvent::IsMouseEventType(input_event.GetType())) {
-    MainFrameImpl()->FrameWidget()->PointerLockMouseEvent(input_event);
+    MainFrameImpl()->FrameWidget()->PointerLockMouseEvent(coalesced_event);
     return WebInputEventResult::kHandledSystem;
   }
 
diff --git a/third_party/WebKit/Source/web/tests/scheduler/ThrottlingTest.cpp b/third_party/WebKit/Source/web/tests/scheduler/ThrottlingTest.cpp
index f3aede4..4814e1e 100644
--- a/third_party/WebKit/Source/web/tests/scheduler/ThrottlingTest.cpp
+++ b/third_party/WebKit/Source/web/tests/scheduler/ThrottlingTest.cpp
@@ -68,7 +68,8 @@
 
 class BackgroundRendererThrottlingTest : public SimTest {};
 
-TEST_F(BackgroundRendererThrottlingTest, BackgroundRenderersAreThrottled) {
+TEST_F(BackgroundRendererThrottlingTest,
+       DISABLED_BackgroundRenderersAreThrottled) {
   SimRequest main_resource("https://example.com/", "text/html");
 
   LoadURL("https://example.com/");
diff --git a/tools/gn/args.cc b/tools/gn/args.cc
index 800996b..0dcceecd 100644
--- a/tools/gn/args.cc
+++ b/tools/gn/args.cc
@@ -307,6 +307,8 @@
 #else
   #error Unknown OS type.
 #endif
+  // NOTE: Adding a new port? Please follow
+  // https://chromium.googlesource.com/chromium/src/+/master/docs/new_port_policy.md
 
   // Host architecture.
   static const char kX86[] = "x86";
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 1ff9e030..d0115d2 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -7792,8 +7792,6 @@
   <int value="22" label="Completed with content length mismatch"/>
   <int value="23" label="More bytes received after content length mismatch"/>
   <int value="24" label="No bytes received after content length mismatch"/>
-  <int value="25"
-      label="Cross origin download without content disposition headers"/>
 </enum>
 
 <enum name="DownloadDatabaseRecordDroppedType" type="int">
@@ -12466,6 +12464,7 @@
   <int value="2" label="NOTIFICATION_TYPE_IMAGE"/>
   <int value="3" label="NOTIFICATION_TYPE_MULTIPLE"/>
   <int value="4" label="NOTIFICATION_TYPE_PROGRESS"/>
+  <int value="5" label="NOTIFICATION_TYPE_CUSTOM"/>
 </enum>
 
 <enum name="ExtensionPermission" type="int">
@@ -15077,6 +15076,8 @@
   <int value="2012" label="CredentialManagerPreventSilentAccess"/>
   <int value="2013" label="NetInfoEffectiveType"/>
   <int value="2014" label="V8SpeechRecognition_Start_Method"/>
+  <int value="2015" label="TableRowDirectionDifferentFromTable"/>
+  <int value="2016" label="TableSectionDirectionDifferentFromTable"/>
 </enum>
 
 <enum name="FeedbackSource" type="int">
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 6ed192b3..ca99234 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -91537,6 +91537,14 @@
   <suffix name="HTTPSNotHTTP"
       label="The credential was suppressed because it was for an HTTPS origin
              whereas the observed form was for an HTTP origin."/>
+  <suffix name="PSLMatching"
+      label="The credential was suppressed and not auto-filled because it was
+             a PSL-match."/>
+  <suffix name="SameOrganizationName"
+      label="The credential was suppressed because it was for an HTTP/HTTPS
+             origin that was neither an exact nor PSL-match to that of the
+             observed form. Its origin had, however, the same
+             organization-identifying name."/>
   <affected-histogram name="PasswordManager.SuppressedAccount.Manual"/>
 </histogram_suffixes>
 
diff --git a/tools/perf/core/perf_data_generator.py b/tools/perf/core/perf_data_generator.py
index d0c4e33..61a7d2d 100755
--- a/tools/perf/core/perf_data_generator.py
+++ b/tools/perf/core/perf_data_generator.py
@@ -692,9 +692,7 @@
 
 # Devices which are broken right now. Tests will not be scheduled on them.
 # Please add a comment with a bug for replacing the device.
-BLACKLISTED_DEVICES = [
-  'build75-b1--device1',  # crbug.com/726874
-]
+BLACKLISTED_DEVICES = []
 
 
 # List of benchmarks that are to never be run with reference builds.
diff --git a/ui/aura/mus/window_port_mus.cc b/ui/aura/mus/window_port_mus.cc
index 14ae20a3..e32e474 100644
--- a/ui/aura/mus/window_port_mus.cc
+++ b/ui/aura/mus/window_port_mus.cc
@@ -105,9 +105,10 @@
       mojo::MakeRequest(&client);
   constexpr bool enable_surface_synchronization = true;
   auto compositor_frame_sink = base::MakeUnique<viz::ClientCompositorFrameSink>(
-      std::move(context_provider), gpu_memory_buffer_manager,
-      std::move(sink_info), std::move(client_request),
-      enable_surface_synchronization);
+      std::move(context_provider), nullptr /* worker_context_provider */,
+      gpu_memory_buffer_manager, nullptr /* shared_bitmap_manager */,
+      nullptr /* synthetic_begin_frame_source */, std::move(sink_info),
+      std::move(client_request), enable_surface_synchronization);
   window_tree_client_->AttachCompositorFrameSink(
       server_id(), std::move(sink_request), std::move(client));
   return std::move(compositor_frame_sink);