diff --git a/DEPS b/DEPS
index 57e3b00..8977498 100644
--- a/DEPS
+++ b/DEPS
@@ -69,10 +69,6 @@
   # and whatever else without interference from each other.
   'boringssl_revision': '0fe4d8bef5918f84a7f260c34c26dd13c0d70ade',
   # Three lines of non-changing comments so that
-  # the commit queue can handle CLs rolling nss
-  # and whatever else without interference from each other.
-  'nss_revision': 'ccb083050bac653bd6b98c38237fdf93c5d64a7a',
-  # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling google-toolbox-for-mac
   # and whatever else without interference from each other.
   'google_toolbox_for_mac_revision': '401878398253074c515c03cb3a3f8bb0cc8da6e9',
@@ -309,10 +305,6 @@
     'src/third_party/pefile':
      Var('chromium_git') + '/external/pefile.git' + '@' + '72c6ae42396cb913bcab63c15585dc3b5c3f92f1',
 
-    # NSS, for SSLClientSocketNSS.
-    'src/third_party/nss':
-     Var('chromium_git') + '/chromium/deps/nss.git' + '@' + Var('nss_revision'),
-
     # GNU binutils assembler for x86-32.
     'src/third_party/gnu_binutils':
       Var('chromium_git') + '/native_client/deps/third_party/gnu_binutils.git' + '@' + 'f4003433b61b25666565690caf3d7a7a1a4ec436',
@@ -348,9 +340,6 @@
     'src/third_party/google_toolbox_for_mac/src':
       Var('chromium_git') + '/external/github.com/google/google-toolbox-for-mac.git' + '@' + Var('google_toolbox_for_mac_revision'),
 
-    'src/third_party/nss':
-     Var('chromium_git') + '/chromium/deps/nss.git' + '@' + Var('nss_revision'),
-
     # class-dump utility to generate header files for undocumented SDKs
     'src/third_party/class-dump/src':
      Var('chromium_git') + '/external/github.com/nygard/class-dump.git' + '@' + '978d177ca6f0d2e5e34acf3e8dadc63e3140ebbc',
@@ -374,10 +363,6 @@
     'src/third_party/lighttpd':
      Var('chromium_git') + '/chromium/deps/lighttpd.git' + '@' + Var('lighttpd_revision'),
 
-    # NSS, for SSLClientSocketNSS.
-    'src/third_party/nss':
-     Var('chromium_git') + '/chromium/deps/nss.git' + '@' + Var('nss_revision'),
-
     'src/chrome/installer/mac/third_party/xz/xz':
      Var('chromium_git') + '/chromium/deps/xz.git' + '@' + 'eecaf55632ca72e90eb2641376bce7cdbc7284f7',
   },
diff --git a/base/strings/string_util.cc b/base/strings/string_util.cc
index e8000ab..6bbc2158 100644
--- a/base/strings/string_util.cc
+++ b/base/strings/string_util.cc
@@ -888,6 +888,7 @@
     const std::vector<OutStringType>& subst,
     std::vector<size_t>* offsets) {
   size_t substitutions = subst.size();
+  DCHECK_LT(substitutions, 10U);
 
   size_t sub_length = 0;
   for (const auto& cur : subst)
@@ -901,7 +902,6 @@
     if ('$' == *i) {
       if (i + 1 != format_string.end()) {
         ++i;
-        DCHECK('$' == *i || '1' <= *i) << "Invalid placeholder: " << *i;
         if ('$' == *i) {
           while (i != format_string.end() && '$' == *i) {
             formatted.push_back('$');
@@ -909,14 +909,11 @@
           }
           --i;
         } else {
-          uintptr_t index = 0;
-          while (i != format_string.end() && '0' <= *i && *i <= '9') {
-            index *= 10;
-            index += *i - '0';
-            ++i;
+          if (*i < '1' || *i > '9') {
+            DLOG(ERROR) << "Invalid placeholder: $" << *i;
+            continue;
           }
-          --i;
-          index -= 1;
+          uintptr_t index = *i - '1';
           if (offsets) {
             ReplacementOffset r_offset(index,
                 static_cast<int>(formatted.size()));
diff --git a/base/strings/string_util.h b/base/strings/string_util.h
index 8d8da9b..31c90036 100644
--- a/base/strings/string_util.h
+++ b/base/strings/string_util.h
@@ -437,7 +437,7 @@
 BASE_EXPORT string16 JoinString(const std::vector<string16>& parts,
                                 StringPiece16 separator);
 
-// Replace $1-$2-$3..$9 in the format string with |a|-|b|-|c|..|i| respectively.
+// Replace $1-$2-$3..$9 in the format string with values from |subst|.
 // Additionally, any number of consecutive '$' characters is replaced by that
 // number less one. Eg $$->$, $$$->$$, etc. The offsets parameter here can be
 // NULL. This only allows you to use up to nine replacements.
diff --git a/base/strings/string_util_unittest.cc b/base/strings/string_util_unittest.cc
index 79eed61d..df2226e 100644
--- a/base/strings/string_util_unittest.cc
+++ b/base/strings/string_util_unittest.cc
@@ -820,9 +820,9 @@
 
   string16 formatted =
       ReplaceStringPlaceholders(
-          ASCIIToUTF16("$1a,$2b,$3c,$4d,$5e,$6f,$1g,$2h,$3i"), subst, NULL);
+          ASCIIToUTF16("$1a,$2b,$3c,$4d,$5e,$6f,$1g,$2h,$3i"), subst, nullptr);
 
-  EXPECT_EQ(formatted, ASCIIToUTF16("9aa,8bb,7cc,d,e,f,9ag,8bh,7ci"));
+  EXPECT_EQ(ASCIIToUTF16("9aa,8bb,7cc,d,e,f,9ag,8bh,7ci"), formatted);
 }
 
 TEST(StringUtilTest, ReplaceStringPlaceholders) {
@@ -839,35 +839,25 @@
 
   string16 formatted =
       ReplaceStringPlaceholders(
-          ASCIIToUTF16("$1a,$2b,$3c,$4d,$5e,$6f,$7g,$8h,$9i"), subst, NULL);
+          ASCIIToUTF16("$1a,$2b,$3c,$4d,$5e,$6f,$7g,$8h,$9i"), subst, nullptr);
 
-  EXPECT_EQ(formatted, ASCIIToUTF16("9aa,8bb,7cc,6dd,5ee,4ff,3gg,2hh,1ii"));
+  EXPECT_EQ(ASCIIToUTF16("9aa,8bb,7cc,6dd,5ee,4ff,3gg,2hh,1ii"), formatted);
 }
 
-TEST(StringUtilTest, ReplaceStringPlaceholdersMoreThan9Replacements) {
+TEST(StringUtilTest, ReplaceStringPlaceholdersOneDigit) {
   std::vector<string16> subst;
-  subst.push_back(ASCIIToUTF16("9a"));
-  subst.push_back(ASCIIToUTF16("8b"));
-  subst.push_back(ASCIIToUTF16("7c"));
-  subst.push_back(ASCIIToUTF16("6d"));
-  subst.push_back(ASCIIToUTF16("5e"));
-  subst.push_back(ASCIIToUTF16("4f"));
-  subst.push_back(ASCIIToUTF16("3g"));
-  subst.push_back(ASCIIToUTF16("2h"));
-  subst.push_back(ASCIIToUTF16("1i"));
-  subst.push_back(ASCIIToUTF16("0j"));
-  subst.push_back(ASCIIToUTF16("-1k"));
-  subst.push_back(ASCIIToUTF16("-2l"));
-  subst.push_back(ASCIIToUTF16("-3m"));
-  subst.push_back(ASCIIToUTF16("-4n"));
-
+  subst.push_back(ASCIIToUTF16("1a"));
   string16 formatted =
-      ReplaceStringPlaceholders(
-          ASCIIToUTF16("$1a,$2b,$3c,$4d,$5e,$6f,$7g,$8h,$9i,"
-                       "$10j,$11k,$12l,$13m,$14n,$1"), subst, NULL);
+      ReplaceStringPlaceholders(ASCIIToUTF16(" $16 "), subst, nullptr);
+  EXPECT_EQ(ASCIIToUTF16(" 1a6 "), formatted);
+}
 
-  EXPECT_EQ(formatted, ASCIIToUTF16("9aa,8bb,7cc,6dd,5ee,4ff,3gg,2hh,"
-                                    "1ii,0jj,-1kk,-2ll,-3mm,-4nn,9a"));
+TEST(StringUtilTest, ReplaceStringPlaceholdersInvalidPlaceholder) {
+  std::vector<string16> subst;
+  subst.push_back(ASCIIToUTF16("1a"));
+  string16 formatted =
+      ReplaceStringPlaceholders(ASCIIToUTF16("+$-+$A+$1+"), subst, nullptr);
+  EXPECT_EQ(ASCIIToUTF16("+++1a+"), formatted);
 }
 
 TEST(StringUtilTest, StdStringReplaceStringPlaceholders) {
@@ -884,9 +874,9 @@
 
   std::string formatted =
       ReplaceStringPlaceholders(
-          "$1a,$2b,$3c,$4d,$5e,$6f,$7g,$8h,$9i", subst, NULL);
+          "$1a,$2b,$3c,$4d,$5e,$6f,$7g,$8h,$9i", subst, nullptr);
 
-  EXPECT_EQ(formatted, "9aa,8bb,7cc,6dd,5ee,4ff,3gg,2hh,1ii");
+  EXPECT_EQ("9aa,8bb,7cc,6dd,5ee,4ff,3gg,2hh,1ii", formatted);
 }
 
 TEST(StringUtilTest, ReplaceStringPlaceholdersConsecutiveDollarSigns) {
@@ -894,7 +884,7 @@
   subst.push_back("a");
   subst.push_back("b");
   subst.push_back("c");
-  EXPECT_EQ(ReplaceStringPlaceholders("$$1 $$$2 $$$$3", subst, NULL),
+  EXPECT_EQ(ReplaceStringPlaceholders("$$1 $$$2 $$$$3", subst, nullptr),
             "$1 $$2 $$$3");
 }
 
diff --git a/build/args/bots/chromium.fyi/headless_linux_dbg.gn b/build/args/bots/chromium.fyi/headless_linux_dbg.gn
new file mode 100644
index 0000000..2e8224dfc
--- /dev/null
+++ b/build/args/bots/chromium.fyi/headless_linux_dbg.gn
@@ -0,0 +1,2 @@
+import("//build/args/headless.gn")
+is_debug = true
diff --git a/build/common.gypi b/build/common.gypi
index 06ef8dd..2f5025a 100644
--- a/build/common.gypi
+++ b/build/common.gypi
@@ -4945,6 +4945,15 @@
                   }],
                 ],
               }],
+              ['asan==1', {
+                'cflags': [
+                  # Android build relies on -Wl,--gc-sections removing
+                  # unreachable code. ASan instrumentation for globals inhibits
+                  # this and results in a library with unresolvable relocations.
+                  # TODO(eugenis): find a way to reenable this.
+                  '-mllvm -asan-globals=0',
+                ],
+              }],
               ['target_arch == "arm" and order_profiling==0', {
                 'ldflags': [
                   # Enable identical code folding to reduce size.
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index 13dea91..3cf7222 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -1246,6 +1246,10 @@
     if (!using_sanitizer && target_cpu != "arm64") {
       cflags += [ "-fomit-frame-pointer" ]
     }
+
+    # Don't use gc-sections since it can cause links to succeed when they
+    # actually shouldn't. http://crbug.com/159847
+    ldflags = common_optimize_on_ldflags - [ "-Wl,--gc-sections" ]
   } else {
     cflags = [ "-O0" ]
     ldflags = []
diff --git a/build/config/sanitizers/BUILD.gn b/build/config/sanitizers/BUILD.gn
index 258d69f..ce48fed 100644
--- a/build/config/sanitizers/BUILD.gn
+++ b/build/config/sanitizers/BUILD.gn
@@ -152,7 +152,16 @@
           [ "-fsanitize-blacklist=" +
             rebase_path("//tools/memory/asan/blacklist.txt", root_build_dir) ]
     }
-    if (is_mac) {
+    if (is_android) {
+      # Android build relies on -Wl,--gc-sections removing unreachable code.
+      # ASan instrumentation for globals inhibits this and results in a
+      # library with unresolvable relocations.
+      # TODO(eugenis): find a way to reenable this.
+      cflags += [
+        "-mllvm",
+        "-asan-globals=0",
+      ]
+    } else if (is_mac) {
       # http://crbug.com/352073
       cflags += [
         "-mllvm",
diff --git a/build/linux/unbundle/replace_gn_files.py b/build/linux/unbundle/replace_gn_files.py
index 196ee2fb..2087e1b 100755
--- a/build/linux/unbundle/replace_gn_files.py
+++ b/build/linux/unbundle/replace_gn_files.py
@@ -18,6 +18,7 @@
 
 REPLACEMENTS = {
   'libxml': 'third_party/libxml/BUILD.gn',
+  'zlib': 'third_party/zlib/BUILD.gn',
 }
 
 
diff --git a/build/linux/unbundle/zlib.gn b/build/linux/unbundle/zlib.gn
new file mode 100644
index 0000000..ecde1c9
--- /dev/null
+++ b/build/linux/unbundle/zlib.gn
@@ -0,0 +1,61 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//build/shim_headers.gni")
+
+shim_headers("zlib_shim") {
+  root_path = "."
+  headers = [ "zlib.h" ]
+}
+
+source_set("zlib") {
+  deps = [
+    ":zlib_shim",
+  ]
+  libs = [ "z" ]
+}
+
+shim_headers("minizip_shim") {
+  root_path = "contrib"
+  headers = [
+    "minizip/crypt.h",
+    "minizip/ioapi.h",
+    "minizip/iowin32.h",
+    "minizip/mztools.h",
+    "minizip/unzip.h",
+    "minizip/zip.h",
+  ]
+}
+
+source_set("minizip") {
+  deps = [
+    ":minizip_shim",
+  ]
+  libs = [ "minizip" ]
+}
+
+static_library("zip") {
+  sources = [
+    "google/zip.cc",
+    "google/zip.h",
+    "google/zip_internal.cc",
+    "google/zip_internal.h",
+    "google/zip_reader.cc",
+    "google/zip_reader.h",
+  ]
+  deps = [
+    ":minizip",
+    "//base",
+  ]
+}
+
+static_library("compression_utils") {
+  sources = [
+    "google/compression_utils.cc",
+    "google/compression_utils.h",
+  ]
+  deps = [
+    ":zlib",
+  ]
+}
diff --git a/build/shim_headers.gni b/build/shim_headers.gni
new file mode 100644
index 0000000..a37bd4a
--- /dev/null
+++ b/build/shim_headers.gni
@@ -0,0 +1,34 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+template("shim_headers") {
+  action_name = "gen_${target_name}"
+  config_name = "${target_name}_config"
+  shim_headers_path = "${root_gen_dir}/shim_headers/${target_name}"
+
+  config(config_name) {
+    include_dirs = [ shim_headers_path ]
+  }
+
+  action(action_name) {
+    script = "//tools/generate_shim_headers/generate_shim_headers.py"
+    args = [
+             "--generate",
+             "--headers-root",
+             rebase_path(invoker.root_path),
+             "--output-directory",
+             rebase_path(shim_headers_path),
+           ] + invoker.headers
+
+    outputs = process_file_template(invoker.headers,
+                                    "${shim_headers_path}/{{source_file_part}}")
+  }
+
+  group(target_name) {
+    deps = [
+      ":${action_name}",
+    ]
+    all_dependent_configs = [ ":${config_name}" ]
+  }
+}
diff --git a/cc/animation/animation_host.cc b/cc/animation/animation_host.cc
index 6acf62e..824f8a6 100644
--- a/cc/animation/animation_host.cc
+++ b/cc/animation/animation_host.cc
@@ -79,7 +79,6 @@
     DCHECK_EQ(layer_id, scroll_offset_animation_player_->layer_id());
 
     Animation* animation = scroll_offset_animation_player_->element_animations()
-                               ->layer_animation_controller()
                                ->GetAnimation(TargetProperty::SCROLL_OFFSET);
     if (!animation) {
       scroll_offset_animation_player_->DetachLayer();
@@ -337,7 +336,7 @@
   if (!element_animations)
     return nullptr;
 
-  return element_animations->layer_animation_controller();
+  return element_animations->layer_animation_controller_.get();
 }
 
 ElementAnimations* AnimationHost::GetElementAnimationsForLayerId(
diff --git a/cc/animation/animation_player.cc b/cc/animation/animation_player.cc
index a609c25e..73eff56 100644
--- a/cc/animation/animation_player.cc
+++ b/cc/animation/animation_player.cc
@@ -105,8 +105,7 @@
 
   // Pass all accumulated animations to LAC.
   for (auto& animation : animations_) {
-    element_animations_->layer_animation_controller()->AddAnimation(
-        std::move(animation));
+    element_animations_->AddAnimation(std::move(animation));
   }
   if (!animations_.empty())
     SetNeedsCommit();
@@ -123,8 +122,7 @@
          (animation_host_ && animation_host_->SupportsScrollAnimations()));
 
   if (element_animations_) {
-    element_animations_->layer_animation_controller()->AddAnimation(
-        std::move(animation));
+    element_animations_->AddAnimation(std::move(animation));
     SetNeedsCommit();
   } else {
     animations_.push_back(std::move(animation));
@@ -133,15 +131,14 @@
 
 void AnimationPlayer::PauseAnimation(int animation_id, double time_offset) {
   DCHECK(element_animations_);
-  element_animations_->layer_animation_controller()->PauseAnimation(
+  element_animations_->PauseAnimation(
       animation_id, base::TimeDelta::FromSecondsD(time_offset));
   SetNeedsCommit();
 }
 
 void AnimationPlayer::RemoveAnimation(int animation_id) {
   if (element_animations_) {
-    element_animations_->layer_animation_controller()->RemoveAnimation(
-        animation_id);
+    element_animations_->RemoveAnimation(animation_id);
     SetNeedsCommit();
   } else {
     auto animations_to_remove = std::remove_if(
@@ -155,16 +152,14 @@
 
 void AnimationPlayer::AbortAnimation(int animation_id) {
   DCHECK(element_animations_);
-  element_animations_->layer_animation_controller()->AbortAnimation(
-      animation_id);
+  element_animations_->AbortAnimation(animation_id);
   SetNeedsCommit();
 }
 
 void AnimationPlayer::AbortAnimations(TargetProperty::Type target_property,
                                       bool needs_completion) {
   if (element_animations_) {
-    element_animations_->layer_animation_controller()->AbortAnimations(
-        target_property, needs_completion);
+    element_animations_->AbortAnimations(target_property, needs_completion);
     SetNeedsCommit();
   } else {
     auto animations_to_remove = std::remove_if(
diff --git a/cc/animation/animation_player_unittest.cc b/cc/animation/animation_player_unittest.cc
index de5b2c1..dbec1fe 100644
--- a/cc/animation/animation_player_unittest.cc
+++ b/cc/animation/animation_player_unittest.cc
@@ -268,10 +268,8 @@
 
   EXPECT_TRUE(player_->element_animations());
   EXPECT_FALSE(player_->element_animations()
-                   ->layer_animation_controller()
                    ->GetAnimationById(filter_id));
   EXPECT_TRUE(player_->element_animations()
-                  ->layer_animation_controller()
                   ->GetAnimationById(opacity_id));
 
   host_->PushPropertiesTo(host_impl_);
diff --git a/cc/animation/element_animations.cc b/cc/animation/element_animations.cc
index b982444..9b2d73d3 100644
--- a/cc/animation/element_animations.cc
+++ b/cc/animation/element_animations.cc
@@ -150,10 +150,52 @@
 void ElementAnimations::PushPropertiesTo(
     ElementAnimations* element_animations_impl) {
   DCHECK(layer_animation_controller_);
-  DCHECK(element_animations_impl->layer_animation_controller());
+  DCHECK(element_animations_impl->layer_animation_controller_);
 
   layer_animation_controller_->PushAnimationUpdatesTo(
-      element_animations_impl->layer_animation_controller());
+      element_animations_impl->layer_animation_controller_.get());
+}
+
+void ElementAnimations::AddAnimation(std::unique_ptr<Animation> animation) {
+  layer_animation_controller_->AddAnimation(std::move(animation));
+}
+
+void ElementAnimations::PauseAnimation(int animation_id,
+                                       base::TimeDelta time_offset) {
+  layer_animation_controller_->PauseAnimation(animation_id, time_offset);
+}
+
+void ElementAnimations::RemoveAnimation(int animation_id) {
+  layer_animation_controller_->RemoveAnimation(animation_id);
+}
+
+void ElementAnimations::AbortAnimation(int animation_id) {
+  layer_animation_controller_->AbortAnimation(animation_id);
+}
+
+void ElementAnimations::AbortAnimations(TargetProperty::Type target_property,
+                                        bool needs_completion) {
+  layer_animation_controller_->AbortAnimations(target_property,
+                                               needs_completion);
+}
+
+Animation* ElementAnimations::GetAnimation(
+    TargetProperty::Type target_property) const {
+  return layer_animation_controller_->GetAnimation(target_property);
+}
+
+Animation* ElementAnimations::GetAnimationById(int animation_id) const {
+  return layer_animation_controller_->GetAnimationById(animation_id);
+}
+
+void ElementAnimations::AddEventObserver(
+    LayerAnimationEventObserver* observer) {
+  layer_animation_controller_->AddEventObserver(observer);
+}
+
+void ElementAnimations::RemoveEventObserver(
+    LayerAnimationEventObserver* observer) {
+  layer_animation_controller_->RemoveEventObserver(observer);
 }
 
 void ElementAnimations::SetFilterMutated(LayerTreeType tree_type,
diff --git a/cc/animation/element_animations.h b/cc/animation/element_animations.h
index 9eb41b5..1f60958 100644
--- a/cc/animation/element_animations.h
+++ b/cc/animation/element_animations.h
@@ -50,10 +50,6 @@
   AnimationHost* animation_host() { return animation_host_; }
   const AnimationHost* animation_host() const { return animation_host_; }
 
-  LayerAnimationController* layer_animation_controller() const {
-    return layer_animation_controller_.get();
-  }
-
   void CreateLayerAnimationController(int layer_id);
   void DestroyLayerAnimationController();
 
@@ -77,7 +73,27 @@
 
   void PushPropertiesTo(ElementAnimations* element_animations_impl);
 
+  void AddAnimation(std::unique_ptr<Animation> animation);
+  void PauseAnimation(int animation_id, base::TimeDelta time_offset);
+  void RemoveAnimation(int animation_id);
+  void AbortAnimation(int animation_id);
+  void AbortAnimations(TargetProperty::Type target_property,
+                       bool needs_completion = false);
+
+  // Returns the active animation animating the given property that is either
+  // running, or is next to run, if such an animation exists.
+  Animation* GetAnimation(TargetProperty::Type target_property) const;
+
+  // Returns the active animation for the given unique animation id.
+  Animation* GetAnimationById(int animation_id) const;
+
+  void AddEventObserver(LayerAnimationEventObserver* observer);
+  void RemoveEventObserver(LayerAnimationEventObserver* observer);
+
  private:
+  // TODO(loyso): Erase this when LAC merged into ElementAnimations.
+  friend class AnimationHost;
+
   explicit ElementAnimations(AnimationHost* host);
 
   void SetFilterMutated(LayerTreeType tree_type,
diff --git a/cc/trees/layer_tree_host_unittest_animation.cc b/cc/trees/layer_tree_host_unittest_animation.cc
index d43b9a86..30715fb 100644
--- a/cc/trees/layer_tree_host_unittest_animation.cc
+++ b/cc/trees/layer_tree_host_unittest_animation.cc
@@ -160,9 +160,8 @@
                               int group) override {
     EXPECT_LT(base::TimeTicks(), monotonic_time);
 
-    LayerAnimationController* controller =
-        player_->element_animations()->layer_animation_controller();
-    Animation* animation = controller->GetAnimation(TargetProperty::OPACITY);
+    Animation* animation =
+        player_->element_animations()->GetAnimation(TargetProperty::OPACITY);
     if (animation)
       player_->RemoveAnimation(animation->id());
 
@@ -294,10 +293,9 @@
     scoped_refptr<AnimationPlayer> player_child_impl =
         timeline_impl->GetPlayerById(player_child_id_);
 
-    LayerAnimationController* controller_impl =
-        player_child_impl->element_animations()->layer_animation_controller();
     Animation* animation =
-        controller_impl->GetAnimation(TargetProperty::OPACITY);
+        player_child_impl->element_animations()->GetAnimation(
+            TargetProperty::OPACITY);
 
     const FloatAnimationCurve* curve =
         animation->curve()->ToFloatAnimationCurve();
@@ -348,11 +346,10 @@
   void NotifyAnimationStarted(base::TimeTicks monotonic_time,
                               TargetProperty::Type target_property,
                               int group) override {
-    LayerAnimationController* controller =
-        player_child_->element_animations()->layer_animation_controller();
-    Animation* animation = controller->GetAnimation(TargetProperty::OPACITY);
+    Animation* animation = player_child_->element_animations()->GetAnimation(
+        TargetProperty::OPACITY);
     main_start_time_ = animation->start_time();
-    controller->RemoveAnimation(animation->id());
+    player_child_->element_animations()->RemoveAnimation(animation->id());
     EndTest();
   }
 
@@ -363,9 +360,9 @@
     scoped_refptr<AnimationPlayer> player_child_impl =
         timeline_impl->GetPlayerById(player_child_id_);
 
-    LayerAnimationController* controller =
-        player_child_impl->element_animations()->layer_animation_controller();
-    Animation* animation = controller->GetAnimation(TargetProperty::OPACITY);
+    Animation* animation =
+        player_child_impl->element_animations()->GetAnimation(
+            TargetProperty::OPACITY);
     if (!animation)
       return;
 
@@ -400,11 +397,10 @@
   void NotifyAnimationFinished(base::TimeTicks monotonic_time,
                                TargetProperty::Type target_property,
                                int group) override {
-    LayerAnimationController* controller =
-        player_->element_animations()->layer_animation_controller();
-    Animation* animation = controller->GetAnimation(TargetProperty::OPACITY);
+    Animation* animation =
+        player_->element_animations()->GetAnimation(TargetProperty::OPACITY);
     if (animation)
-      controller->RemoveAnimation(animation->id());
+      player_->element_animations()->RemoveAnimation(animation->id());
     EndTest();
   }
 
@@ -443,11 +439,9 @@
     scoped_refptr<AnimationPlayer> player_impl =
         timeline_impl->GetPlayerById(player_id_);
 
-    LayerAnimationController* controller_impl =
-        player_impl->element_animations()->layer_animation_controller();
-    Animation* animation_impl =
-        controller_impl->GetAnimation(TargetProperty::OPACITY);
-    controller_impl->RemoveAnimation(animation_impl->id());
+    Animation* animation_impl = player_impl->element_animations()->GetAnimation(
+        TargetProperty::OPACITY);
+    player_impl->element_animations()->RemoveAnimation(animation_impl->id());
     EndTest();
   }
 
@@ -801,7 +795,6 @@
       case 1: {
         Animation* animation =
             player_child_->element_animations()
-                ->layer_animation_controller()
                 ->GetAnimation(TargetProperty::SCROLL_OFFSET);
         player_child_->RemoveAnimation(animation->id());
         scroll_layer_->SetScrollOffset(final_postion_);
@@ -834,7 +827,6 @@
     LayerImpl* scroll_layer_impl =
         host_impl->active_tree()->root_layer()->children()[0];
     Animation* animation = player_impl->element_animations()
-                               ->layer_animation_controller()
                                ->GetAnimation(TargetProperty::SCROLL_OFFSET);
 
     if (!animation || animation->run_state() != Animation::RUNNING) {
@@ -950,22 +942,21 @@
     if (!player_impl->element_animations())
       return;
 
-    LayerAnimationController* root_controller_impl =
-        player_impl->element_animations()->layer_animation_controller();
-    Animation* root_animation =
-        root_controller_impl->GetAnimation(TargetProperty::OPACITY);
+    Animation* root_animation = player_impl->element_animations()->GetAnimation(
+        TargetProperty::OPACITY);
     if (!root_animation || root_animation->run_state() != Animation::RUNNING)
       return;
 
-    LayerAnimationController* child_controller_impl =
-        player_child_impl->element_animations()->layer_animation_controller();
     Animation* child_animation =
-        child_controller_impl->GetAnimation(TargetProperty::OPACITY);
+        player_child_impl->element_animations()->GetAnimation(
+            TargetProperty::OPACITY);
     EXPECT_EQ(Animation::RUNNING, child_animation->run_state());
     EXPECT_EQ(root_animation->start_time(), child_animation->start_time());
-    root_controller_impl->AbortAnimations(TargetProperty::OPACITY);
-    root_controller_impl->AbortAnimations(TargetProperty::TRANSFORM);
-    child_controller_impl->AbortAnimations(TargetProperty::OPACITY);
+    player_impl->element_animations()->AbortAnimations(TargetProperty::OPACITY);
+    player_impl->element_animations()->AbortAnimations(
+        TargetProperty::TRANSFORM);
+    player_child_impl->element_animations()->AbortAnimations(
+        TargetProperty::OPACITY);
     EndTest();
   }
 
@@ -1024,13 +1015,10 @@
     scoped_refptr<AnimationPlayer> player_impl =
         timeline_impl->GetPlayerById(player_id_);
 
-    LayerAnimationController* controller_impl =
-        player_impl->element_animations()->layer_animation_controller();
-
     LayerImpl* root = host_impl->sync_tree()->root_layer();
     LayerImpl* child = root->children()[0];
-    Animation* animation =
-        controller_impl->GetAnimation(TargetProperty::TRANSFORM);
+    Animation* animation = player_impl->element_animations()->GetAnimation(
+        TargetProperty::TRANSFORM);
 
     // The animation should be starting for the first frame.
     EXPECT_EQ(Animation::STARTING, animation->run_state());
@@ -1043,7 +1031,8 @@
     // And the sync tree layer should know it is animating.
     EXPECT_TRUE(child->screen_space_transform_is_animating());
 
-    controller_impl->AbortAnimations(TargetProperty::TRANSFORM);
+    player_impl->element_animations()->AbortAnimations(
+        TargetProperty::TRANSFORM);
     EndTest();
   }
 
@@ -1225,10 +1214,9 @@
         AddAnimatedTransformToPlayer(player_child_.get(), 1.0, 5, 5);
         break;
       case 2:
-        LayerAnimationController* controller =
-            player_child_->element_animations()->layer_animation_controller();
         Animation* animation =
-            controller->GetAnimation(TargetProperty::TRANSFORM);
+            player_child_->element_animations()->GetAnimation(
+                TargetProperty::TRANSFORM);
         player_child_->RemoveAnimation(animation->id());
         gfx::Transform transform;
         transform.Translate(10.f, 10.f);
@@ -1305,10 +1293,8 @@
         AddAnimatedTransformToPlayer(player_.get(), 1.0, 5, 5);
         break;
       case 2:
-        LayerAnimationController* controller =
-            player_->element_animations()->layer_animation_controller();
-        Animation* animation =
-            controller->GetAnimation(TargetProperty::TRANSFORM);
+        Animation* animation = player_->element_animations()->GetAnimation(
+            TargetProperty::TRANSFORM);
         player_->RemoveAnimation(animation->id());
         break;
     }
diff --git a/chrome/VERSION b/chrome/VERSION
index 1c180f29..c8328ce 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=52
 MINOR=0
-BUILD=2709
+BUILD=2710
 PATCH=0
diff --git a/chrome/browser/OWNERS b/chrome/browser/OWNERS
index 29b259d88..72140aa 100644
--- a/chrome/browser/OWNERS
+++ b/chrome/browser/OWNERS
@@ -23,6 +23,11 @@
 per-file chrome_elf_init_*=csharp@chromium.org
 per-file chrome_elf_init_*=robertshield@chromium.org
 
+per-file chrome_navigation_browsertest.cc=alexmos@chromium.org
+per-file chrome_navigation_browsertest.cc=creis@chromium.org
+per-file chrome_navigation_browsertest.cc=nasko@chromium.org
+per-file chrome_navigation_browsertest.cc=nick@chromium.org
+
 per-file chrome_webusb_browser_client*=juncai@chromium.org
 per-file chrome_webusb_browser_client*=reillyg@chromium.org
 per-file chrome_webusb_browser_client*=rockot@chromium.org
@@ -54,6 +59,11 @@
 per-file shell_integration_win*=grt@chromium.org
 per-file shell_integration_linux*=erg@chromium.org
 
+per-file site_per_process_interactive_browsertest.cc=alexmos@chromium.org
+per-file site_per_process_interactive_browsertest.cc=creis@chromium.org
+per-file site_per_process_interactive_browsertest.cc=nasko@chromium.org
+per-file site_per_process_interactive_browsertest.cc=nick@chromium.org
+
 per-file PRESUBMIT.py=dbeam@chromium.org
 per-file test_presubmit.py=dbeam@chromium.org
 
diff --git a/chrome/browser/chrome_navigation_browsertest.cc b/chrome/browser/chrome_navigation_browsertest.cc
new file mode 100644
index 0000000..6e64e469
--- /dev/null
+++ b/chrome/browser/chrome_navigation_browsertest.cc
@@ -0,0 +1,128 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "chrome/test/base/ui_test_utils.h"
+#include "content/public/browser/navigation_handle.h"
+#include "content/public/browser/notification_service.h"
+#include "content/public/browser/web_contents_observer.h"
+#include "content/public/test/browser_test_utils.h"
+#include "content/public/test/test_navigation_observer.h"
+
+class ChromeNavigationBrowserTest : public InProcessBrowserTest {
+ public:
+  ChromeNavigationBrowserTest() {}
+  ~ChromeNavigationBrowserTest() override {}
+
+  void SetUpCommandLine(base::CommandLine* command_line) override {
+    ASSERT_TRUE(embedded_test_server()->Start());
+  }
+
+  void StartServerWithExpiredCert() {
+    expired_https_server_.reset(
+        new net::EmbeddedTestServer(net::EmbeddedTestServer::TYPE_HTTPS));
+    expired_https_server_->SetSSLConfig(net::EmbeddedTestServer::CERT_EXPIRED);
+    expired_https_server_->AddDefaultHandlers(
+        base::FilePath(FILE_PATH_LITERAL("chrome/test/data")));
+    ASSERT_TRUE(expired_https_server_->Start());
+  }
+
+  net::EmbeddedTestServer* expired_https_server() {
+    return expired_https_server_.get();
+  }
+
+ private:
+  std::unique_ptr<net::EmbeddedTestServer> expired_https_server_;
+
+  DISALLOW_COPY_AND_ASSIGN(ChromeNavigationBrowserTest);
+};
+
+// Helper class to track and allow waiting for navigation start events.
+class DidStartNavigationObserver : public content::WebContentsObserver {
+ public:
+  explicit DidStartNavigationObserver(content::WebContents* web_contents)
+      : content::WebContentsObserver(web_contents),
+        message_loop_runner_(new content::MessageLoopRunner) {}
+  ~DidStartNavigationObserver() override {}
+
+  // Runs a nested message loop and blocks until the full load has
+  // completed.
+  void Wait() { message_loop_runner_->Run(); }
+
+ private:
+  // WebContentsObserver
+  void DidStartNavigation(content::NavigationHandle* handle) override {
+    if (message_loop_runner_->loop_running())
+      message_loop_runner_->Quit();
+  }
+
+  // The MessageLoopRunner used to spin the message loop.
+  scoped_refptr<content::MessageLoopRunner> message_loop_runner_;
+
+  DISALLOW_COPY_AND_ASSIGN(DidStartNavigationObserver);
+};
+
+// Test to verify that navigations are not deleting the transient
+// NavigationEntry when showing an interstitial page and the old renderer
+// process is trying to navigate. See https://crbug.com/600046.
+IN_PROC_BROWSER_TEST_F(
+    ChromeNavigationBrowserTest,
+    TransientEntryPreservedOnMultipleNavigationsDuringInterstitial) {
+  StartServerWithExpiredCert();
+
+  GURL setup_url =
+      embedded_test_server()->GetURL("/window_open_and_navigate.html");
+  GURL initial_url = embedded_test_server()->GetURL("/title1.html");
+  GURL error_url(expired_https_server()->GetURL("/ssl/blank_page.html"));
+
+  ui_test_utils::NavigateToURL(browser(), setup_url);
+  content::WebContents* main_web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+
+  // Call the JavaScript method in the test page, which opens a new window
+  // and stores a handle to it.
+  content::WindowedNotificationObserver tab_added_observer(
+      chrome::NOTIFICATION_TAB_ADDED,
+      content::NotificationService::AllSources());
+  EXPECT_TRUE(content::ExecuteScript(main_web_contents, "openWin();"));
+  tab_added_observer.Wait();
+  content::WebContents* new_web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+
+  // Navigate the opened window to a page that will successfully commit and
+  // create a NavigationEntry.
+  {
+    content::TestNavigationObserver observer(new_web_contents);
+    EXPECT_TRUE(content::ExecuteScript(
+        main_web_contents, "navigate('" + initial_url.spec() + "');"));
+    observer.Wait();
+    EXPECT_EQ(initial_url, new_web_contents->GetLastCommittedURL());
+  }
+
+  // Navigate the opened window to a page which will trigger an
+  // interstitial.
+  {
+    content::TestNavigationObserver observer(new_web_contents);
+    EXPECT_TRUE(content::ExecuteScript(
+        main_web_contents, "navigate('" + error_url.spec() + "');"));
+    observer.Wait();
+    EXPECT_EQ(initial_url, new_web_contents->GetLastCommittedURL());
+    EXPECT_EQ(error_url, new_web_contents->GetVisibleURL());
+  }
+
+  // Navigate again the opened window to the same page. It should not cause
+  // WebContents::GetVisibleURL to return the last committed one.
+  {
+    DidStartNavigationObserver nav_observer(new_web_contents);
+    EXPECT_TRUE(content::ExecuteScript(
+        main_web_contents, "navigate('" + error_url.spec() + "');"));
+    nav_observer.Wait();
+    EXPECT_EQ(error_url, new_web_contents->GetVisibleURL());
+    EXPECT_TRUE(new_web_contents->GetController().GetTransientEntry());
+    EXPECT_FALSE(new_web_contents->IsLoading());
+  }
+}
diff --git a/chrome/browser/chromeos/login/existing_user_controller_browsertest.cc b/chrome/browser/chromeos/login/existing_user_controller_browsertest.cc
index 5046cfe..f121d89 100644
--- a/chrome/browser/chromeos/login/existing_user_controller_browsertest.cc
+++ b/chrome/browser/chromeos/login/existing_user_controller_browsertest.cc
@@ -289,8 +289,14 @@
   existing_user_controller()->Login(user_context, SigninSpecifics());
 }
 
+// Per http://crbug.com/603735, NewUserLoginForbidden fails.
+#if defined(LINUX)
+#define MAYBE_NewUserLoginForbidden DISABLED_NewUserLoginForbidden
+#else
+#define MAYBE_NewUserLoginForbidden NewUserLoginForbidden
+#endif
 IN_PROC_BROWSER_TEST_F(ExistingUserControllerUntrustedTest,
-                       NewUserLoginForbidden) {
+                       MAYBE_NewUserLoginForbidden) {
   UserContext user_context(account_id_);
   user_context.SetKey(Key(kPassword));
   user_context.SetUserIDHash(account_id_.GetUserEmail());
diff --git a/chrome/browser/extensions/extension_util.cc b/chrome/browser/extensions/extension_util.cc
index 4f8ffbd..4a86165 100644
--- a/chrome/browser/extensions/extension_util.cc
+++ b/chrome/browser/extensions/extension_util.cc
@@ -28,6 +28,7 @@
 #include "extensions/common/extension_icon_set.h"
 #include "extensions/common/feature_switch.h"
 #include "extensions/common/features/behavior_feature.h"
+#include "extensions/common/features/feature.h"
 #include "extensions/common/features/feature_provider.h"
 #include "extensions/common/manifest.h"
 #include "extensions/common/manifest_handlers/app_isolation_info.h"
@@ -55,10 +56,9 @@
 
 // Returns true if |extension| should always be enabled in incognito mode.
 bool IsWhitelistedForIncognito(const Extension* extension) {
-  return FeatureProvider::GetBehaviorFeature(
-             BehaviorFeature::kWhitelistedForIncognito)
-      ->IsAvailableToExtension(extension)
-      .is_available();
+  const Feature* feature = FeatureProvider::GetBehaviorFeature(
+      BehaviorFeature::kWhitelistedForIncognito);
+  return feature && feature->IsAvailableToExtension(extension).is_available();
 }
 
 // Returns |extension_id|. See note below.
diff --git a/chrome/browser/metrics/perf/perf_provider_chromeos.cc b/chrome/browser/metrics/perf/perf_provider_chromeos.cc
index 443714a6..64cab45 100644
--- a/chrome/browser/metrics/perf/perf_provider_chromeos.cc
+++ b/chrome/browser/metrics/perf/perf_provider_chromeos.cc
@@ -221,7 +221,6 @@
 
 PerfProvider::PerfProvider()
     : login_observer_(this),
-      next_profiling_interval_start_(base::TimeTicks::Now()),
       weak_factory_(this) {
 }
 
@@ -520,7 +519,9 @@
 }
 
 void PerfProvider::OnUserLoggedIn() {
-  login_time_ = base::TimeTicks::Now();
+  const base::TimeTicks now = base::TimeTicks::Now();
+  login_time_ = now;
+  next_profiling_interval_start_ = now;
   ScheduleIntervalCollection();
 }
 
@@ -534,14 +535,22 @@
   if (timer_.IsRunning())
     return;
 
+  const base::TimeTicks now = base::TimeTicks::Now();
+
+  base::TimeTicks interval_end =
+      next_profiling_interval_start_ + collection_params_.periodic_interval();
+  if (now > interval_end) {
+    // We somehow missed at least one window. Start over.
+    next_profiling_interval_start_ = now;
+    interval_end = now + collection_params_.periodic_interval();
+  }
+
   // Pick a random time in the current interval.
   base::TimeTicks scheduled_time =
       next_profiling_interval_start_ +
       RandomTimeDelta(collection_params_.periodic_interval());
-
   // If the scheduled time has already passed in the time it took to make the
   // above calculations, trigger the collection event immediately.
-  base::TimeTicks now = base::TimeTicks::Now();
   if (scheduled_time < now)
     scheduled_time = now;
 
@@ -549,7 +558,7 @@
                &PerfProvider::DoPeriodicCollection);
 
   // Update the profiling interval tracker to the start of the next interval.
-  next_profiling_interval_start_ += collection_params_.periodic_interval();
+  next_profiling_interval_start_ = interval_end;
 }
 
 void PerfProvider::CollectIfNecessary(
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index d3762cb..3fc52ec 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -651,8 +651,6 @@
       "exclusive_access/fullscreen_controller_state_tests.h",
       "exclusive_access/fullscreen_controller_test.cc",
       "exclusive_access/fullscreen_controller_test.h",
-      "passwords/manage_passwords_ui_controller_mock.cc",
-      "passwords/manage_passwords_ui_controller_mock.h",
       "test/test_confirm_bubble_model.cc",
       "test/test_confirm_bubble_model.h",
     ]
diff --git a/chrome/browser/ui/extensions/application_launch.cc b/chrome/browser/ui/extensions/application_launch.cc
index aaf02a2..3670921 100644
--- a/chrome/browser/ui/extensions/application_launch.cc
+++ b/chrome/browser/ui/extensions/application_launch.cc
@@ -410,5 +410,5 @@
 bool CanLaunchViaEvent(const extensions::Extension* extension) {
   const extensions::Feature* feature =
       extensions::FeatureProvider::GetAPIFeature("app.runtime");
-  return feature->IsAvailableToExtension(extension).is_available();
+  return feature && feature->IsAvailableToExtension(extension).is_available();
 }
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index e6cd49b..7ab70d5 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -89,6 +89,7 @@
       'browser/chrome_browser_main_mac_browsertest.mm',
       'browser/chrome_content_browser_client_browsertest.cc',
       'browser/chrome_main_browsertest.cc',
+      'browser/chrome_navigation_browsertest.cc',
       'browser/chrome_plugin_browsertest.cc',
       'browser/chrome_security_exploit_browsertest.cc',
       'browser/chrome_service_worker_browsertest.cc',
diff --git a/chrome/chrome_tests_unit.gypi b/chrome/chrome_tests_unit.gypi
index 8a684d9..9639d3a 100644
--- a/chrome/chrome_tests_unit.gypi
+++ b/chrome/chrome_tests_unit.gypi
@@ -1924,8 +1924,6 @@
             'browser/ui/exclusive_access/fullscreen_controller_state_tests.h',
             'browser/ui/exclusive_access/fullscreen_controller_test.cc',
             'browser/ui/exclusive_access/fullscreen_controller_test.h',
-            'browser/ui/passwords/manage_passwords_ui_controller_mock.cc',
-            'browser/ui/passwords/manage_passwords_ui_controller_mock.h',
             'browser/ui/test/test_confirm_bubble_model.cc',
             'browser/ui/test/test_confirm_bubble_model.h',
             'renderer/safe_browsing/mock_feature_extractor_clock.cc',
@@ -2261,6 +2259,7 @@
             '../components/components.gyp:webdata_services_test_support',
             '../components/components_strings.gyp:components_strings',
             '../content/app/resources/content_resources.gyp:content_resources',
+            '../device/core/core.gyp:device_core_mocks',
             '../device/bluetooth/bluetooth.gyp:device_bluetooth_mocks',
             '../device/usb/usb.gyp:device_usb_mocks',
             '../gpu/gpu.gyp:gpu_unittest_utils',
@@ -2303,6 +2302,11 @@
           'dependencies!': [
             '../third_party/libaddressinput/libaddressinput.gyp:libaddressinput',
           ],
+          'ldflags': [
+            # Some android targets still depend on --gc-sections to link.
+            # TODO: remove --gc-sections for Debug builds (crbug.com/159847).
+            '-Wl,--gc-sections',
+          ],
           'dependencies': [
             '../testing/android/native_test.gyp:native_test_native_code',
             '../components/components.gyp:offline_pages',
@@ -2363,9 +2367,8 @@
           'sources': [ '<@(chrome_unit_tests_extensions_sources)' ],
           'dependencies': [
             'common/extensions/api/api.gyp:chrome_api',
-            '../components/components.gyp:audio_modem_test_support',
-            '../device/core/core.gyp:device_core_mocks',
             '../device/hid/hid.gyp:device_hid_mocks',
+            '../components/components.gyp:audio_modem_test_support',
             '../extensions/extensions_resources.gyp:extensions_resources',
             '../extensions/extensions_strings.gyp:extensions_strings',
           ],
diff --git a/chrome/common/extensions/sync_helper.cc b/chrome/common/extensions/sync_helper.cc
index 1219073..1a73e4b 100644
--- a/chrome/common/extensions/sync_helper.cc
+++ b/chrome/common/extensions/sync_helper.cc
@@ -10,6 +10,7 @@
 #include "extensions/common/constants.h"
 #include "extensions/common/extension.h"
 #include "extensions/common/features/behavior_feature.h"
+#include "extensions/common/features/feature.h"
 #include "extensions/common/features/feature_provider.h"
 #include "extensions/common/manifest.h"
 #include "extensions/common/manifest_url_handlers.h"
@@ -19,11 +20,10 @@
 namespace sync_helper {
 
 bool IsSyncable(const Extension* extension) {
-  if (FeatureProvider::GetBehaviorFeature(BehaviorFeature::kDoNotSync)
-          ->IsAvailableToExtension(extension)
-          .is_available()) {
+  const Feature* feature =
+      FeatureProvider::GetBehaviorFeature(BehaviorFeature::kDoNotSync);
+  if (feature && feature->IsAvailableToExtension(extension).is_available())
     return false;
-  }
 
   // Default apps are not synced because otherwise they will pollute profiles
   // that don't already have them. Specially, if a user doesn't have default
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index fba1569c..0a9ab3e 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -1674,6 +1674,7 @@
       "//components/webdata_services:test_support",
       "//content/app/resources",
       "//device/bluetooth:mocks",
+      "//device/core:mocks",
       "//device/usb:mocks",
       "//gpu:test_support",
       "//media:test_support",
@@ -1708,6 +1709,10 @@
         "//chrome/test/android/unit_tests_apk/AndroidManifest.xml"
     enable_multidex = true
     isolate_file = "../unit_tests.isolate"
+
+    # Some android targets still depend on --gc-sections to link.
+    # TODO: remove --gc-sections for Debug builds (crbug.com/159847).
+    ldflags = [ "-Wl,--gc-sections" ]
   } else {
     sources += rebase_path(
             chrome_tests_unit_gypi_values.chrome_unit_tests_non_android_sources,
@@ -1776,8 +1781,6 @@
     deps += [
       "//chrome/common/extensions/api",
       "//components/audio_modem:test_support",
-      "//device/core:mocks",
-      "//device/hid:mocks",
       "//extensions:extensions_resources",
       "//extensions/strings",
     ]
diff --git a/chrome/test/data/window_open_and_navigate.html b/chrome/test/data/window_open_and_navigate.html
new file mode 100644
index 0000000..2aa68b8
--- /dev/null
+++ b/chrome/test/data/window_open_and_navigate.html
@@ -0,0 +1,13 @@
+<script>
+var win = null;
+
+function openWin() {
+  win = window.open();
+}
+
+function navigate(url) {
+  setTimeout(function() {
+    win.location = url;
+  }, 10);
+}
+</script>
diff --git a/components/webcrypto/BUILD.gn b/components/webcrypto/BUILD.gn
index 7e1f7500..d824d54 100644
--- a/components/webcrypto/BUILD.gn
+++ b/components/webcrypto/BUILD.gn
@@ -118,13 +118,6 @@
     # PartitionAlloc initialization).
     "//components/test_runner:test_runner",
   ]
-
-  # These should be generated by the blink_headers target but they don't yet.
-  # TODO(ortuno): Remove once blink_headers generates bindings.
-  # http://crbug.com/600384
-  public_deps = [
-    "//third_party/WebKit/public:mojo_bindings",
-  ]
 }
 
 # Tests the import of PKCS8 formatted EC keys.
diff --git a/content/browser/frame_host/navigator_impl.cc b/content/browser/frame_host/navigator_impl.cc
index 009e0135..d7c1ca0 100644
--- a/content/browser/frame_host/navigator_impl.cc
+++ b/content/browser/frame_host/navigator_impl.cc
@@ -1030,7 +1030,12 @@
   NavigationEntryImpl* pending_entry = controller_->GetPendingEntry();
   bool has_browser_initiated_pending_entry =
       pending_entry && !pending_entry->is_renderer_initiated();
-  if (!has_browser_initiated_pending_entry) {
+
+  // If there is a transient entry, creating a new pending entry will result
+  // in deleting it, which leads to inconsistent state.
+  bool has_transient_entry = !!controller_->GetTransientEntry();
+
+  if (!has_browser_initiated_pending_entry && !has_transient_entry) {
     std::unique_ptr<NavigationEntryImpl> entry =
         NavigationEntryImpl::FromNavigationEntry(
             controller_->CreateNavigationEntry(
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/PopupTouchHandleDrawable.java b/content/public/android/java/src/org/chromium/content/browser/input/PopupTouchHandleDrawable.java
index d5fa3f26..52cfd8f 100644
--- a/content/public/android/java/src/org/chromium/content/browser/input/PopupTouchHandleDrawable.java
+++ b/content/public/android/java/src/org/chromium/content/browser/input/PopupTouchHandleDrawable.java
@@ -68,11 +68,15 @@
     private static final int FADE_IN_DURATION_MS = 200;
     private Runnable mDeferredHandleFadeInRunnable;
     private long mFadeStartTime;
+    private Runnable mTemporarilyHiddenExpiredRunnable;
     private long mTemporarilyHiddenExpireTime;
     private boolean mVisible;
     private boolean mScrolling;
     private boolean mFocused;
     private boolean mTemporarilyHidden;
+    private boolean mAttachedToWindow;
+    // This should be set only from onVisibilityInputChanged.
+    private boolean mWasShowingAllowed;
 
     // Gesture accounting for handle hiding while scrolling.
     private final GestureStateListener mGestureStateListener;
@@ -263,11 +267,11 @@
     }
 
     private boolean isShowingAllowed() {
-        return mVisible && mFocused && !mScrolling;
+        return mAttachedToWindow && mVisible && mFocused && !mScrolling && !mTemporarilyHidden;
     }
 
     private void updateVisibility() {
-        int newVisibility = isShowingAllowed() && !mTemporarilyHidden ? VISIBLE : INVISIBLE;
+        int newVisibility = isShowingAllowed() ? VISIBLE : INVISIBLE;
 
         // When regaining visibility, delay the visibility update by one frame
         // to ensure the PopupWindow has first been positioned properly.
@@ -295,12 +299,46 @@
         onVisibilityInputChanged();
     }
 
+    private void setTemporarilyHidden(boolean hidden) {
+        if (mTemporarilyHidden == hidden) return;
+
+        mTemporarilyHidden = hidden;
+        if (mTemporarilyHidden) {
+            if (mTemporarilyHiddenExpiredRunnable == null) {
+                mTemporarilyHiddenExpiredRunnable = new Runnable() {
+                    @Override
+                    public void run() {
+                        setTemporarilyHidden(false);
+                    }
+                };
+            }
+            removeCallbacks(mTemporarilyHiddenExpiredRunnable);
+            long now = SystemClock.uptimeMillis();
+            long delay = Math.max(0, mTemporarilyHiddenExpireTime - now);
+            postDelayed(mTemporarilyHiddenExpiredRunnable, delay);
+        } else if (mTemporarilyHiddenExpiredRunnable != null) {
+            removeCallbacks(mTemporarilyHiddenExpiredRunnable);
+        }
+        onVisibilityInputChanged();
+    }
+
     private void onVisibilityInputChanged() {
         if (!mContainer.isShowing()) return;
-        if (isShowingAllowed()) {
-            rescheduleFadeIn();
+        boolean allowed = isShowingAllowed();
+        if (mWasShowingAllowed == allowed) return;
+        mWasShowingAllowed = allowed;
+        cancelFadeIn();
+        if (allowed) {
+            if (mDeferredHandleFadeInRunnable == null) {
+                mDeferredHandleFadeInRunnable = new Runnable() {
+                    @Override
+                    public void run() {
+                        beginFadeIn();
+                    }
+                };
+            }
+            postOnAnimation(mDeferredHandleFadeInRunnable);
         } else {
-            cancelFadeIn();
             updateVisibility();
         }
     }
@@ -315,10 +353,8 @@
 
     private void temporarilyHide() {
         if (!mContainer.isShowing()) return;
-        mTemporarilyHidden = true;
         mTemporarilyHiddenExpireTime = SystemClock.uptimeMillis() + MOVING_FADE_IN_DELAY_MS;
-        updateVisibility();
-        rescheduleFadeIn();
+        setTemporarilyHidden(true);
     }
 
     private void doInvalidate() {
@@ -344,26 +380,6 @@
         postOnAnimation(mInvalidationRunnable);
     }
 
-    private void rescheduleFadeIn() {
-        if (!isShowingAllowed()) return;
-        if (mDeferredHandleFadeInRunnable == null) {
-            mDeferredHandleFadeInRunnable = new Runnable() {
-                @Override
-                public void run() {
-                    assert isShowingAllowed();
-                    mTemporarilyHidden = false;
-                    mTemporarilyHiddenExpireTime = 0;
-                    beginFadeIn();
-                }
-            };
-        }
-
-        cancelFadeIn();
-        long now = SystemClock.uptimeMillis();
-        long delay = Math.max(0, mTemporarilyHiddenExpireTime - now);
-        postOnAnimationDelayed(mDeferredHandleFadeInRunnable, delay);
-    }
-
     private void cancelFadeIn() {
         if (mDeferredHandleFadeInRunnable == null) return;
         removeCallbacks(mDeferredHandleFadeInRunnable);
@@ -402,9 +418,17 @@
     }
 
     @Override
+    protected void onAttachedToWindow() {
+        super.onAttachedToWindow();
+        mAttachedToWindow = true;
+        onVisibilityInputChanged();
+    }
+
+    @Override
     protected void onDetachedFromWindow() {
         super.onDetachedFromWindow();
-        hide();
+        mAttachedToWindow = false;
+        onVisibilityInputChanged();
     }
 
     @CalledByNative
@@ -437,10 +461,9 @@
 
     @CalledByNative
     private void hide() {
-        mTemporarilyHidden = false;
         mTemporarilyHiddenExpireTime = 0;
+        setTemporarilyHidden(false);
         mAlpha = 1.0f;
-        cancelFadeIn();
         if (mContainer.isShowing()) mContainer.dismiss();
         mParentPositionObserver.clearListener();
     }
diff --git a/content/renderer/media/video_track_recorder.cc b/content/renderer/media/video_track_recorder.cc
index 60b919c..6a2e68f 100644
--- a/content/renderer/media/video_track_recorder.cc
+++ b/content/renderer/media/video_track_recorder.cc
@@ -30,6 +30,40 @@
 
 namespace content {
 
+// Base class to describe a generic Encoder. This class is used to encapsulate
+// interactions with actual encoders, encoding and delivery of received frames.
+// This class is ref-counted to allow the MediaStreamVideoTrack to hold a
+// reference to it, via the callback that MediaStreamVideoSink passes along.
+// Also, it is quite common that encoders run in a background thread.
+class VideoTrackRecorder::Encoder : public base::RefCountedThreadSafe<Encoder> {
+ public:
+  Encoder(const OnEncodedVideoCB& on_encoded_video_callback,
+          int32_t bits_per_second)
+      : paused_(false),
+        on_encoded_video_callback_(on_encoded_video_callback),
+        bits_per_second_(bits_per_second) {}
+
+  virtual void StartFrameEncode(const scoped_refptr<VideoFrame>& frame,
+                                base::TimeTicks capture_timestamp) = 0;
+
+  void set_paused(bool paused) { paused_ = paused; }
+
+ protected:
+  friend class base::RefCountedThreadSafe<Encoder>;
+  virtual ~Encoder() {}
+
+  // While |paused_|, frames are not encoded.
+  bool paused_;
+
+  // This callback should be exercised on IO thread.
+  const OnEncodedVideoCB on_encoded_video_callback_;
+
+  // Target bitrate or video encoding. If 0, a standard bitrate is used.
+  const int32_t bits_per_second_;
+
+  DISALLOW_COPY_AND_ASSIGN(Encoder);
+};
+
 namespace {
 
 const vpx_codec_flags_t kNoFlags = 0;
@@ -59,13 +93,8 @@
   on_encoded_video_cb.Run(frame, std::move(data), capture_timestamp, keyframe);
 }
 
-}  // anonymous namespace
-
-// Inner class encapsulating all libvpx interactions and the encoding+delivery
-// of received frames. Limitation: Only VP8 is supported for the time being.
-// This class must be ref-counted because the MediaStreamVideoTrack will hold a
-// reference to it, via the callback MediaStreamVideoSink passes along, and it's
-// unknown when exactly it will release that reference. This class:
+// Class encapsulating libvpx interactions, encoding and delivery of received
+// frames. This class:
 // - is created and destroyed on its parent's thread (usually the main Render
 // thread);
 // - receives VideoFrames and Run()s the callbacks on |origin_task_runner_|,
@@ -73,24 +102,21 @@
 // thread, but this is not enforced;
 // - uses an internal |encoding_thread_| for libvpx interactions, notably for
 // encoding (which might take some time).
-class VideoTrackRecorder::VpxEncoder final
-    : public base::RefCountedThreadSafe<VpxEncoder> {
+class VpxEncoder final : public VideoTrackRecorder::Encoder {
  public:
   static void ShutdownEncoder(std::unique_ptr<base::Thread> encoding_thread,
                               ScopedVpxCodecCtxPtr encoder);
 
-  VpxEncoder(bool use_vp9,
-             const OnEncodedVideoCB& on_encoded_video_callback,
-             int32_t bits_per_second);
+  VpxEncoder(
+      bool use_vp9,
+      const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback,
+      int32_t bits_per_second);
 
   void StartFrameEncode(const scoped_refptr<VideoFrame>& frame,
-                        base::TimeTicks capture_timestamp);
-
-  void set_paused(bool paused) { paused_ = paused; }
+                        base::TimeTicks capture_timestamp) override;
 
  private:
-  friend class base::RefCountedThreadSafe<VpxEncoder>;
-  ~VpxEncoder();
+  ~VpxEncoder() override;
 
   void EncodeOnEncodingThread(const scoped_refptr<VideoFrame>& frame,
                               base::TimeTicks capture_timestamp);
@@ -104,18 +130,9 @@
   base::TimeDelta CalculateFrameDuration(
       const scoped_refptr<VideoFrame>& frame);
 
-  // While |paused_|, frames are not encoded.
-  bool paused_;
-
   // Force usage of VP9 for encoding, instead of VP8 which is the default.
   const bool use_vp9_;
 
-  // This callback should be exercised on IO thread.
-  const OnEncodedVideoCB on_encoded_video_callback_;
-
-  // Target bitrate or video encoding. If 0, a standard bitrate is used.
-  const int32_t bits_per_second_;
-
   // Used to shutdown properly on the same thread we were created.
   const scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
 
@@ -139,22 +156,19 @@
 };
 
 // static
-void VideoTrackRecorder::VpxEncoder::ShutdownEncoder(
-    std::unique_ptr<base::Thread> encoding_thread,
-    ScopedVpxCodecCtxPtr encoder) {
+void VpxEncoder::ShutdownEncoder(std::unique_ptr<base::Thread> encoding_thread,
+                                 ScopedVpxCodecCtxPtr encoder) {
   DCHECK(encoding_thread->IsRunning());
   encoding_thread->Stop();
   // Both |encoding_thread| and |encoder| will be destroyed at end-of-scope.
 }
 
-VideoTrackRecorder::VpxEncoder::VpxEncoder(
+VpxEncoder::VpxEncoder(
     bool use_vp9,
-    const OnEncodedVideoCB& on_encoded_video_callback,
+    const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback,
     int32_t bits_per_second)
-    : paused_(false),
+    : Encoder(on_encoded_video_callback, bits_per_second),
       use_vp9_(use_vp9),
-      on_encoded_video_callback_(on_encoded_video_callback),
-      bits_per_second_(bits_per_second),
       main_task_runner_(base::MessageLoop::current()->task_runner()),
       encoding_thread_(new base::Thread("EncodingThread")) {
   DCHECK(!on_encoded_video_callback_.is_null());
@@ -165,16 +179,15 @@
   encoding_thread_->Start();
 }
 
-VideoTrackRecorder::VpxEncoder::~VpxEncoder() {
+VpxEncoder::~VpxEncoder() {
   main_task_runner_->PostTask(FROM_HERE,
                               base::Bind(&VpxEncoder::ShutdownEncoder,
                                          base::Passed(&encoding_thread_),
                                          base::Passed(&encoder_)));
 }
 
-void VideoTrackRecorder::VpxEncoder::StartFrameEncode(
-    const scoped_refptr<VideoFrame>& frame,
-    base::TimeTicks capture_timestamp) {
+void VpxEncoder::StartFrameEncode(const scoped_refptr<VideoFrame>& frame,
+                                  base::TimeTicks capture_timestamp) {
   // Cache the thread sending frames on first frame arrival.
   if (!origin_task_runner_.get())
     origin_task_runner_ = base::MessageLoop::current()->task_runner();
@@ -186,11 +199,10 @@
                             this, frame, capture_timestamp));
 }
 
-void VideoTrackRecorder::VpxEncoder::EncodeOnEncodingThread(
+void VpxEncoder::EncodeOnEncodingThread(
     const scoped_refptr<VideoFrame>& video_frame,
     base::TimeTicks capture_timestamp) {
-  TRACE_EVENT0("video",
-               "VideoTrackRecorder::VpxEncoder::EncodeOnEncodingThread");
+  TRACE_EVENT0("video", "VpxEncoder::EncodeOnEncodingThread");
   DCHECK(encoding_thread_->task_runner()->BelongsToCurrentThread());
 
   if (!(video_frame->format() == media::PIXEL_FORMAT_I420 ||
@@ -259,7 +271,7 @@
                  keyframe));
 }
 
-void VideoTrackRecorder::VpxEncoder::ConfigureEncoding(const gfx::Size& size) {
+void VpxEncoder::ConfigureEncoding(const gfx::Size& size) {
   if (IsInitialized()) {
     // TODO(mcasas) VP8 quirk/optimisation: If the new |size| is strictly less-
     // than-or-equal than the old size, in terms of area, the existing encoder
@@ -351,12 +363,12 @@
   }
 }
 
-bool VideoTrackRecorder::VpxEncoder::IsInitialized() const {
+bool VpxEncoder::IsInitialized() const {
   DCHECK(encoding_thread_->task_runner()->BelongsToCurrentThread());
   return codec_config_.g_timebase.den != 0;
 }
 
-base::TimeDelta VideoTrackRecorder::VpxEncoder::CalculateFrameDuration(
+base::TimeDelta VpxEncoder::CalculateFrameDuration(
     const scoped_refptr<VideoFrame>& frame) {
   DCHECK(encoding_thread_->task_runner()->BelongsToCurrentThread());
 
@@ -381,6 +393,8 @@
                                               kMinFrameDuration));
 }
 
+}  // anonymous namespace
+
 VideoTrackRecorder::VideoTrackRecorder(
     CodecId codec,
     const blink::WebMediaStreamTrack& track,
@@ -397,7 +411,7 @@
   // StartFrameEncode() will be called on Render IO thread.
   MediaStreamVideoSink::ConnectToTrack(
       track_,
-      base::Bind(&VideoTrackRecorder::VpxEncoder::StartFrameEncode, encoder_));
+      base::Bind(&VideoTrackRecorder::Encoder::StartFrameEncode, encoder_));
 }
 
 VideoTrackRecorder::~VideoTrackRecorder() {
diff --git a/content/renderer/media/video_track_recorder.h b/content/renderer/media/video_track_recorder.h
index 6478873e..aa2a4b2e 100644
--- a/content/renderer/media/video_track_recorder.h
+++ b/content/renderer/media/video_track_recorder.h
@@ -20,11 +20,11 @@
 namespace content {
 
 // VideoTrackRecorder is a MediaStreamVideoSink that encodes the video frames
-// received from a Stream Video Track. The class is constructed and used on a
-// single thread, namely the main Render thread. It has an internal VpxEncoder
-// with its own threading subtleties, see the implementation file. This mirrors
-// the other MediaStreamVideo* classes that are constructed/configured on Main
-// Render thread but that pass frames on Render IO thread.
+// received from a Stream Video Track. This class is constructed and used on a
+// single thread, namely the main Render thread. This mirrors the other
+// MediaStreamVideo* classes that are constructed/configured on Main Render
+// thread but that pass frames on Render IO thread. It has an internal Encoder
+// with its own threading subtleties, see the implementation file.
 class CONTENT_EXPORT VideoTrackRecorder
     : NON_EXPORTED_BASE(public MediaStreamVideoSink) {
  public:
@@ -32,6 +32,7 @@
     VP8,
     VP9,
   };
+  class Encoder;
 
   using OnEncodedVideoCB =
       base::Callback<void(const scoped_refptr<media::VideoFrame>& video_frame,
@@ -60,8 +61,7 @@
   blink::WebMediaStreamTrack track_;
 
   // Inner class to encode using whichever codec is configured.
-  class VpxEncoder;
-  const scoped_refptr<VpxEncoder> encoder_;
+  const scoped_refptr<Encoder> encoder_;
 
   DISALLOW_COPY_AND_ASSIGN(VideoTrackRecorder);
 };
diff --git a/device/bluetooth/bluetooth_gatt_descriptor_bluez.cc b/device/bluetooth/bluetooth_gatt_descriptor_bluez.cc
index 32f1ad7..1284e84 100644
--- a/device/bluetooth/bluetooth_gatt_descriptor_bluez.cc
+++ b/device/bluetooth/bluetooth_gatt_descriptor_bluez.cc
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <iostream>
 #include <iterator>
+#include <ostream>
 
 #include "base/bind.h"
 #include "base/callback.h"
diff --git a/device/bluetooth/bluetooth_local_gatt_characteristic_bluez.cc b/device/bluetooth/bluetooth_local_gatt_characteristic_bluez.cc
index b62a3f3d..06e0d4b1 100644
--- a/device/bluetooth/bluetooth_local_gatt_characteristic_bluez.cc
+++ b/device/bluetooth/bluetooth_local_gatt_characteristic_bluez.cc
@@ -4,7 +4,6 @@
 
 #include "device/bluetooth/bluetooth_local_gatt_characteristic_bluez.h"
 
-#include <iostream>
 #include <string>
 
 #include "base/callback_forward.h"
diff --git a/device/bluetooth/bluetooth_local_gatt_service_bluez.cc b/device/bluetooth/bluetooth_local_gatt_service_bluez.cc
index c63e2287..7a20602 100644
--- a/device/bluetooth/bluetooth_local_gatt_service_bluez.cc
+++ b/device/bluetooth/bluetooth_local_gatt_service_bluez.cc
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <iostream>
-
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/logging.h"
diff --git a/device/bluetooth/bluetooth_remote_gatt_characteristic_bluez.cc b/device/bluetooth/bluetooth_remote_gatt_characteristic_bluez.cc
index c2436cd..71201fdf 100644
--- a/device/bluetooth/bluetooth_remote_gatt_characteristic_bluez.cc
+++ b/device/bluetooth/bluetooth_remote_gatt_characteristic_bluez.cc
@@ -4,9 +4,9 @@
 
 #include "device/bluetooth/bluetooth_remote_gatt_characteristic_bluez.h"
 
-#include <iostream>
 #include <iterator>
 #include <limits>
+#include <ostream>
 
 #include "base/bind.h"
 #include "base/callback.h"
diff --git a/device/bluetooth/bluetooth_remote_gatt_service_bluez.cc b/device/bluetooth/bluetooth_remote_gatt_service_bluez.cc
index bd6b203d..98abdbb 100644
--- a/device/bluetooth/bluetooth_remote_gatt_service_bluez.cc
+++ b/device/bluetooth/bluetooth_remote_gatt_service_bluez.cc
@@ -4,7 +4,6 @@
 
 #include "device/bluetooth/bluetooth_remote_gatt_service_bluez.h"
 
-#include <iostream>
 #include <iterator>
 
 #include "base/callback.h"
diff --git a/extensions/browser/extension_zoom_request_client.cc b/extensions/browser/extension_zoom_request_client.cc
index ce8b45ce..c462a2a 100644
--- a/extensions/browser/extension_zoom_request_client.cc
+++ b/extensions/browser/extension_zoom_request_client.cc
@@ -5,6 +5,7 @@
 #include "extensions/browser/extension_zoom_request_client.h"
 
 #include "extensions/common/features/behavior_feature.h"
+#include "extensions/common/features/feature.h"
 #include "extensions/common/features/feature_provider.h"
 
 namespace extensions {
@@ -15,10 +16,9 @@
 }
 
 bool ExtensionZoomRequestClient::ShouldSuppressBubble() const {
-  return FeatureProvider::GetBehaviorFeature(
-             BehaviorFeature::kZoomWithoutBubble)
-      ->IsAvailableToExtension(extension())
-      .is_available();
+  const Feature* feature =
+      FeatureProvider::GetBehaviorFeature(BehaviorFeature::kZoomWithoutBubble);
+  return feature && feature->IsAvailableToExtension(extension()).is_available();
 }
 
 ExtensionZoomRequestClient::~ExtensionZoomRequestClient() {
diff --git a/extensions/browser/guest_view/extensions_guest_view_manager_delegate.cc b/extensions/browser/guest_view/extensions_guest_view_manager_delegate.cc
index ec44ed2..f7d5923 100644
--- a/extensions/browser/guest_view/extensions_guest_view_manager_delegate.cc
+++ b/extensions/browser/guest_view/extensions_guest_view_manager_delegate.cc
@@ -67,7 +67,8 @@
     GuestViewBase* guest) {
   const Feature* feature =
       FeatureProvider::GetAPIFeature(guest->GetAPINamespace());
-  CHECK(feature);
+  if (!feature)
+    return false;
 
   ProcessMap* process_map = ProcessMap::Get(context_);
   CHECK(process_map);
diff --git a/extensions/common/features/feature_provider.cc b/extensions/common/features/feature_provider.cc
index e420094a..7d25717 100644
--- a/extensions/common/features/feature_provider.cc
+++ b/extensions/common/features/feature_provider.cc
@@ -13,6 +13,7 @@
 #include "base/trace_event/trace_event.h"
 #include "content/public/common/content_switches.h"
 #include "extensions/common/extensions_client.h"
+#include "extensions/common/features/feature.h"
 #include "extensions/common/features/feature_util.h"
 #include "extensions/common/switches.h"
 
@@ -67,10 +68,10 @@
                                             const std::string& feature_name) {
   const Feature* feature =
       FeatureProvider::GetByName(provider_name)->GetFeature(feature_name);
-  if (!feature) {
-    CRASH_WITH_MINIDUMP("Feature \"" + feature_name + "\" not found in " +
-                        "FeatureProvider \"" + provider_name + "\"");
-  }
+  // We should always refer to existing features, but we can't CHECK here
+  // due to flaky JSONReader fails, see: crbug.com/176381, crbug.com/602936
+  DCHECK(feature) << "Feature \"" << feature_name << "\" not found in "
+                  << "FeatureProvider \"" << provider_name << "\"";
   return feature;
 }
 
diff --git a/extensions/common/features/feature_provider.h b/extensions/common/features/feature_provider.h
index ae97513..824ce85 100644
--- a/extensions/common/features/feature_provider.h
+++ b/extensions/common/features/feature_provider.h
@@ -39,6 +39,8 @@
 
   // Directly get Features from the common FeatureProvider types.
   // Each is equivalent to GetByName('featuretype')->GetFeature(name).
+  // NOTE: These functions may return |nullptr| in case corresponding JSON file
+  // got corrupted.
   static const Feature* GetAPIFeature(const std::string& name);
   static const Feature* GetManifestFeature(const std::string& name);
   static const Feature* GetPermissionFeature(const std::string& name);
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index 61ff1738..cd5cb7a 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -6858,6 +6858,20 @@
       }
     ]
   },
+  "Headless Linux (dbg)": {
+    "additional_compile_targets": [
+      "headless_libs",
+      "headless_tests"
+    ],
+    "gtest_tests": [
+      {
+        "test": "headless_browsertests"
+      },
+      {
+        "test": "headless_unittests"
+      }
+    ]
+  },
   "Linux ARM": {
     "gtest_tests": [
       {
diff --git a/testing/buildbot/gn_isolate_map.pyl b/testing/buildbot/gn_isolate_map.pyl
index 28aba22..d883f1a 100644
--- a/testing/buildbot/gn_isolate_map.pyl
+++ b/testing/buildbot/gn_isolate_map.pyl
@@ -299,6 +299,14 @@
     "label": "//gpu:gpu_unittests",
     "type": "windowed_test_launcher",
   },
+  "headless_browsertests": {
+    "label": "//headless:headless_browsertests",
+    "type": "console_test_launcher",
+  },
+  "headless_unittests": {
+    "label": "//headless:headless_unittests",
+    "type": "console_test_launcher",
+  },
   "installer_util_unittests": {
     "label": "//chrome/installer/util:installer_util_unittests",
     "type": "console_test_launcher",
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index d9f33230..4b6cfcd 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -343,450 +343,450 @@
 crbug.com/498539 [ Win7 Debug ] inspector/elements/styles-3/styles-computed-trace.html [ Crash Pass ]
 crbug.com/498539 [ Win7 ] inspector/elements/styles-4/styles-update-from-js.html [ Crash Pass ]
 
-crbug.com/602483 compositing/overflow/fixed-scroll-in-empty-root-layer.html [ NeedsRebaseline ]
-crbug.com/602483 compositing/overflow/text-color-change.html [ NeedsRebaseline ]
-crbug.com/602483 compositing/overflow/text-match-highlight.html [ NeedsRebaseline ]
-crbug.com/602483 compositing/overflow/updating-scrolling-container-and-content.html [ NeedsRebaseline ]
-crbug.com/602483 compositing/repaint/fixed-pos-inside-composited-intermediate-layer.html [ NeedsRebaseline ]
-crbug.com/602483 compositing/repaint/fixed-pos-with-abs-pos-child-scroll.html [ NeedsRebaseline ]
-crbug.com/602483 compositing/repaint/resize-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 compositing/repaint/should-not-clip-composited-overflow-scrolling-layer.html [ NeedsRebaseline ]
-crbug.com/602483 compositing/repaint/should-not-clip-composited-viewport-scrolling-layer.html [ NeedsRebaseline ]
-crbug.com/602483 compositing/repaint/should-not-repaint-composited-descendants-on-overflow-change.html [ NeedsRebaseline ]
-crbug.com/602483 compositing/squashing/add-remove-squashed-layers.html [ NeedsRebaseline ]
-crbug.com/602483 compositing/squashing/iframe-inside-squashed-layer.html [ NeedsRebaseline ]
-crbug.com/602483 compositing/squashing/invalidations-with-large-negative-margin.html [ NeedsRebaseline ]
-crbug.com/602483 compositing/squashing/remove-squashed-layer-plus-move.html [ NeedsRebaseline ]
-crbug.com/602483 compositing/squashing/selection-repaint-with-gaps.html [ NeedsRebaseline ]
-crbug.com/602483 compositing/squashing/squash-above-fixed-1.html [ NeedsRebaseline ]
-crbug.com/602483 compositing/squashing/squashed-layer-loses-graphicslayer.html [ NeedsRebaseline ]
-crbug.com/602483 compositing/squashing/squashed-repaints.html [ NeedsRebaseline ]
-crbug.com/602483 compositing/will-change/containing-block-removed.html [ NeedsRebaseline ]
-crbug.com/602483 css3/flexbox/repaint-during-resize-no-flex.html [ NeedsRebaseline ]
-crbug.com/602483 css3/flexbox/repaint-on-layout.html [ NeedsRebaseline ]
-crbug.com/602483 css3/flexbox/repaint-on-margin-change.html [ NeedsRebaseline ]
-crbug.com/602483 css3/flexbox/repaint-opacity-change.html [ NeedsRebaseline ]
-crbug.com/602483 css3/flexbox/repaint-rtl-column.html [ NeedsRebaseline ]
-crbug.com/602483 css3/flexbox/repaint.html [ NeedsRebaseline ]
-crbug.com/602483 editing/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root.html [ NeedsRebaseline ]
-crbug.com/602483 fast/box-shadow/negative-shadow-box-expand.html [ NeedsRebaseline ]
-crbug.com/602483 fast/box-shadow/negative-shadow-box-shrink.html [ NeedsRebaseline ]
-crbug.com/602483 fast/box-shadow/shadow-box-resize-writing-mode.html [ NeedsRebaseline ]
-crbug.com/602483 fast/box-shadow/shadow-box-resize.html [ NeedsRebaseline ]
-crbug.com/602483 fast/canvas/canvas-composite-repaint-by-all-imagesource.html [ NeedsRebaseline ]
-crbug.com/602483 fast/css-grid-layout/grid-element-change-columns-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/css-grid-layout/grid-element-change-rows-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/css-grid-layout/grid-item-change-row-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/css-grid-layout/grid-item-z-index-change-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/forms/button/button-reset-focus-by-mouse-then-keydown.html [ NeedsRebaseline ]
-crbug.com/602483 fast/forms/range/range-focus-by-mouse-then-keydown.html [ NeedsRebaseline ]
-crbug.com/602483 fast/forms/submit/submit-focus-by-mouse-then-keydown.html [ NeedsRebaseline ]
-crbug.com/602483 fast/images/fixed-img-src-change-after-scroll.html [ NeedsRebaseline ]
-crbug.com/602483 fast/images/repaint-subrect-grid.html [ NeedsRebaseline ]
-crbug.com/602483 fast/layers/scroll-descendant-with-cached-cliprects.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/4776765.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/absolute-margin-change-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/absolute-position-change-containing-block.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/absolute-position-changed.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/abspos-shift-image-incorrect-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/add-table-overpaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/align-content-change.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/align-content-distribution-change-grid.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/align-content-position-change-grid.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/align-self-change-grid.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/align-self-change.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/align-self-overflow-change.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/background-currentColor-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/background-image-paint-invalidation.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/background-shorthand-with-gradient-and-height-changes.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/background-size-auto-with-gradient-and-height-changes.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/backgroundSizeRepaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/block-layout-inline-children-float-positioned.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/block-no-inflow-children.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/block-shift-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/body-background-image.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/border-radius-repaint-2.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/border-radius-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/border-radius-without-border.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/border-repaint-glitch.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/box-inline-resize.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/box-shadow-dynamic.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/box-shadow-inset-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/box-sizing-border-keeping-size.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/box-sizing.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/bugzilla-3509.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/bugzilla-5699.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/bugzilla-6278.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/bugzilla-6388.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/bugzilla-6473.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/bugzilla-7235.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/caret-with-transformation.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/change-text-content-and-background-color.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/clip-with-layout-delta.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/clipped-overflow-visible-subtree.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/clipped-relative.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/containing-block-position-change.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/content-into-overflow.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/control-clip.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/crbug-371640-2.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/crbug-371640-3.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/crbug-371640-4.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/crbug-371640.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/destroy-composited-scrollbar.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/destroy-overlay-scrollbar.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/destroy-scrollbar.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/details-open-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/dont-invalidate-root-layer-when-composited-layer-becomes-visible.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/dynamic-table-vertical-alignment-change.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/erase-overflow.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/fixed-after-scroll.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/fixed-and-absolute-position-scrolled.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/fixed-child-move-after-scroll.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/fixed-child-of-fixed-move-after-scroll.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/fixed-child-of-transformed-move-after-scroll.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/fixed-margin-change-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/fixed-move-after-scroll.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/fixed-scroll-simple.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/fixed-table-cell.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/fixed-table-overflow-zindex.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/fixed-table-overflow.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/fixed-to-relative-position-with-absolute-child.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/float-in-new-block-with-layout-delta.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/float-move-during-layout.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/float-overflow-right.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/float-overflow.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/focus-continuations.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/focus-enable-continuations.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/focus-ring-on-child-move.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/focus-ring-on-continuation-move.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/gradients-em-stops-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/hover-invalidation-table.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/hover-pseudo-borders-whitespace.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/hover-pseudo-borders.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/inline-block-resize.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/inline-color-change.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/inline-focus.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/inline-outline-repaint-2.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/inline-outline-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/inline-overflow.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/inline-reflow.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/inline-relative-positioned.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/inline-style-change-in-scrolled-view.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/inline-vertical-lr-overflow.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/inline-vertical-rl-overflow.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/intermediate-layout-position.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/invalidation-after-opacity-change-subtree.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/invisible-objects.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/japanese-rl-selection-clear.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/japanese-rl-selection-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/justify-content-change.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/justify-content-distribution-change-grid.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/justify-content-position-change-grid.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/justify-content-position-change.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/justify-items-change.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/justify-items-legacy-change.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/justify-items-overflow-change.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/justify-self-change.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/justify-self-overflow-change.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/layout-state-only-positioned.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/layout-state-relative.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/layout-state-scrolloffset.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/layout-state-scrolloffset2.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/layout-state-scrolloffset3.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/layoutstate-invalid-invalidation-inline-relative-positioned.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/line-flow-with-floats-1.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/line-flow-with-floats-10.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/line-flow-with-floats-2.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/line-flow-with-floats-3.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/line-flow-with-floats-4.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/line-flow-with-floats-5.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/line-flow-with-floats-6.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/line-flow-with-floats-7.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/line-flow-with-floats-8.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/line-flow-with-floats-9.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/line-in-scrolled-clipped-block.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/line-overflow.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/lines-with-layout-delta.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/list-marker-2.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/make-children-non-inline.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/margin.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/mix-blend-mode-separate-stacking-context.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/multi-layout-one-frame.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/multicol-as-paint-container.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/multicol-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/multicol-with-abspos-in-relpos.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/multicol-with-abspos.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/multicol-with-block.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/multicol-with-inline.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/multicol-with-text.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/negative-text-indent-with-overflow-hidden.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/offset-change-wrong-invalidation-with-float.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/opacity-change-on-overflow-float.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/outline-change-continuations.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/outline-change-invalidation.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/outline-child-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/outline-clip-change.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/outline-continuations.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/outline-inset.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/outline-repaint-glitch.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/overflow-auto-in-overflow-auto-scrolled.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/overflow-clip-subtree-layout.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/overflow-delete-line.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/overflow-hide.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/overflow-into-content.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/overflow-scroll-after-move.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/overflow-scroll-body-appear.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/overflow-scroll-delete.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/overflow-scroll-in-overflow-scroll-scrolled.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/overflow-show.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/overhanging-float-detach-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/padding-keeping-content-size.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/paint-invalidation-with-reparent-across-frame-boundaries.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/percent-size-image-resize-container.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/position-change-keeping-geometry.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/positioned-document-element.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/positioned-great-grandparent-change-location.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/positioned-list-offset-change-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/push-block-with-first-line.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/quotes.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/reflection-redraw.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/reflection-repaint-test.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/relative-inline-positioned-movement-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/relative-margin-change-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/remove-block-after-layout.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/remove-inline-after-layout.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/remove-inline-block-descendant-of-flex.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/remove-inline-layer-after-layout.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/repaint-across-writing-mode-boundary.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/repaint-composited-child-in-scrolled-container.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/repaint-descandant-on-ancestor-layer-move.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/repaint-during-scroll-with-zoom.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/repaint-table-row-in-composited-document.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/replaced-clipped-positioned-not-wrong-incremental-repainting.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/requestAnimation-translation-leave-traces.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/resize-scrollable-div.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/resize-scrollable-iframe.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/resize-with-border-clipped.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/resize-with-border.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/scroll-in-transformed-layer.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/scroll-inside-table-cell.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/scroll-relative-table-inside-table-cell.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/scroll-stacking-context-backface-visiblity-leaves-traces.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/scrollbar-damage-and-full-viewport-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/scrollbar-invalidation-on-resize-with-border.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/scrollbar-invalidation-on-resize.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/scrollbar-parts.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/search-field-cancel.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/select-option-background-color.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/selected-replaced.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/selection-after-delete.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/selection-after-remove.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/selection-change-in-iframe-with-relative-parent.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/selection-clear.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/selection-partial-invalidation-between-blocks.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/selection-rl.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/shift-relative-positioned-container-with-image-addition.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/shift-relative-positioned-container-with-image-removal.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/stacked-diacritics.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/stacking-context-lost.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/static-to-positioned.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/subtree-root-skipped.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/table-cell-collapsed-border.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/table-cell-move.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/table-col-background-offset.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/table-col-background.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/table-collapsed-border.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/table-outer-border.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/table-overflow-auto-in-overflow-auto-scrolled.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/table-overflow-scroll-in-overflow-scroll-scrolled.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/table-row-bg-change.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/table-row.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/table-section-overflow.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/table-section-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/table-shrink-row-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/table-with-padding-row-invalidation.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/text-append-dirty-lines.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/text-in-relative-positioned-inline.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/text-match-document-change.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/text-selection-rect-in-overflow-2.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/text-selection-rect-in-overflow.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/textarea-appearance-none-resize-handle.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/textarea-set-disabled.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/transform-disable-layoutstate.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/transform-inline-layered-child.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/transform-layout-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/transform-rotate-and-remove.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/transform-translate.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/vertical-align-length1.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/vertical-align-length2.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/vertical-align1.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/vertical-align2.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/vertical-rl-as-paint-container.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/video-mute-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/video-unmute-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/view-background-from-body-2.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/window-resize-background-image-fixed-centered-composited.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/window-resize-background-image-fixed-centered.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/window-resize-background-image-generated.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/window-resize-background-image-non-fixed.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/window-resize-media-query.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/window-resize-percent-html.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/window-resize-percent-width-height.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/window-resize-positioned-bottom.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/window-resize-positioned-percent-top.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/window-resize-vertical-writing-mode.html [ NeedsRebaseline ]
-crbug.com/602483 fast/repaint/window-resize-viewport-percent.html [ NeedsRebaseline ]
-crbug.com/602483 fast/table/border-collapsing/border-collapse-change-collapse-to-separate.html [ NeedsRebaseline ]
-crbug.com/602483 fast/table/border-collapsing/border-collapse-change-separate-to-collapse.html [ NeedsRebaseline ]
-crbug.com/602483 fast/table/border-collapsing/cached-69296.html [ NeedsRebaseline ]
-crbug.com/602483 fast/table/border-collapsing/cached-cell-append.html [ NeedsRebaseline ]
-crbug.com/602483 fast/table/border-collapsing/cached-cell-remove.html [ NeedsRebaseline ]
-crbug.com/602483 fast/table/border-collapsing/cached-change-cell-border-color.html [ NeedsRebaseline ]
-crbug.com/602483 fast/table/border-collapsing/cached-change-cell-border-width.html [ NeedsRebaseline ]
-crbug.com/602483 fast/table/border-collapsing/cached-change-cell-sl-border-color.html [ NeedsRebaseline ]
-crbug.com/602483 fast/table/border-collapsing/cached-change-col-border-color.html [ NeedsRebaseline ]
-crbug.com/602483 fast/table/border-collapsing/cached-change-col-border-width.html [ NeedsRebaseline ]
-crbug.com/602483 fast/table/border-collapsing/cached-change-colgroup-border-color.html [ NeedsRebaseline ]
-crbug.com/602483 fast/table/border-collapsing/cached-change-colgroup-border-width.html [ NeedsRebaseline ]
-crbug.com/602483 fast/table/border-collapsing/cached-change-row-border-color.html [ NeedsRebaseline ]
-crbug.com/602483 fast/table/border-collapsing/cached-change-row-border-width.html [ NeedsRebaseline ]
-crbug.com/602483 fast/table/border-collapsing/cached-change-table-border-color.html [ NeedsRebaseline ]
-crbug.com/602483 fast/table/border-collapsing/cached-change-table-border-width.html [ NeedsRebaseline ]
-crbug.com/602483 fast/table/border-collapsing/cached-change-tbody-border-color.html [ NeedsRebaseline ]
-crbug.com/602483 fast/table/border-collapsing/cached-change-tbody-border-width.html [ NeedsRebaseline ]
-crbug.com/602483 fast/table/resize-table-repaint-percent-size-cell.html [ NeedsRebaseline ]
-crbug.com/602483 fast/table/resize-table-repaint-vertical-align-cell.html [ NeedsRebaseline ]
-crbug.com/602483 fast/table/resize-table-row-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 media/media-audio-no-spurious-repaints.html [ NeedsRebaseline ]
-crbug.com/602483 media/video-paint-invalidation.html [ NeedsRebaseline ]
-crbug.com/602483 paint/invalidation/animated-gif-background.html [ NeedsRebaseline ]
-crbug.com/602483 paint/invalidation/invalidate-box-shadow-currentColor.html [ NeedsRebaseline ]
-crbug.com/602483 paint/invalidation/invalidate-descendants-when-receiving-paint-layer.html [ NeedsRebaseline ]
-crbug.com/602483 paint/invalidation/non-text-link-invalidation-optimization.html [ NeedsRebaseline ]
-crbug.com/602483 paint/selection/invalidation-rect-includes-newline-for-rtl.html [ NeedsRebaseline ]
-crbug.com/602483 paint/selection/invalidation-rect-includes-newline-for-vertical-lr.html [ NeedsRebaseline ]
-crbug.com/602483 paint/selection/invalidation-rect-includes-newline-for-vertical-rl.html [ NeedsRebaseline ]
-crbug.com/602483 paint/selection/invalidation-rect-includes-newline.html [ NeedsRebaseline ]
-crbug.com/602483 paint/selection/invalidation-rect-with-br-includes-newline.html [ NeedsRebaseline ]
-crbug.com/602483 paint/selection/selection-within-composited-scroller.html [ NeedsRebaseline ]
-crbug.com/602483 svg/as-image/svg-image-change-content-size.xhtml [ NeedsRebaseline ]
-crbug.com/602483 svg/as-object/embedded-svg-size-changes-no-layout-triggers.html [ NeedsRebaseline ]
-crbug.com/602483 svg/as-object/nested-embedded-svg-size-changes-no-layout-triggers-1.html [ NeedsRebaseline ]
-crbug.com/602483 svg/as-object/nested-embedded-svg-size-changes-no-layout-triggers-2.html [ NeedsRebaseline ]
-crbug.com/602483 svg/carto.net/window.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/absolute-sized-content-with-resources.xhtml [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/circle-move-invalidation.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/clip-path-child-changes.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/clip-path-href-changes.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/clip-path-id-changes.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/clip-path-units-changes.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/deep-dynamic-updates.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/gradient-add-stops.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/gradient-stop-style-change.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/js-late-clipPath-and-object-creation.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/js-late-clipPath-creation.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/js-late-gradient-and-object-creation.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/js-late-gradient-creation.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/js-late-marker-and-object-creation.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/js-late-marker-creation.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/js-late-mask-and-object-creation.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/js-late-mask-creation.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/js-late-pattern-and-object-creation.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/js-late-pattern-creation.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/js-repaint-rect-on-path-with-stroke.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/js-update-bounce.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/js-update-container.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/js-update-gradient.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/js-update-pattern-child.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/js-update-pattern.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/js-update-polygon-changes.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/js-update-polygon-removal.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/js-update-stop-linked-gradient.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/js-update-stop.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/js-update-style.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/marker-viewBox-changes.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/mask-invalidation.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/object-sizing-no-width-height-change-content-box-size.xhtml [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/pending-resource-after-removal.xhtml [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/relative-sized-content-with-resources.xhtml [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/relative-sized-content.xhtml [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/relative-sized-deep-shadow-tree-content.xhtml [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/relative-sized-image.xhtml [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/relative-sized-inner-svg.xhtml [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/relative-sized-shadow-tree-content-with-symbol.xhtml [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/relative-sized-shadow-tree-content.xhtml [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/relative-sized-use-on-symbol.xhtml [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/relative-sized-use-without-attributes-on-symbol.xhtml [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/repaint-moving-svg-and-div.xhtml [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/resource-client-removal.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/resource-invalidate-on-target-update.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/scrolling-embedded-svg-file-image-repaint-problem.html [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/text-dom-removal.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/text-repaint-including-stroke.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/text-xy-updates-SVGList.xhtml [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/use-clipped-hit.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/use-detach.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/custom/use-setAttribute-crash.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/filters/feImage-change-target-id.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/filters/feImage-multiple-targets-id-change.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/filters/feImage-reference-invalidation.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/filters/feImage-remove-target.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/filters/feImage-target-add-to-document.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/filters/feImage-target-attribute-change-with-use-indirection-2.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/filters/feImage-target-attribute-change-with-use-indirection.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/filters/feImage-target-attribute-change.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/filters/feImage-target-changes-id.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/filters/feImage-target-id-change.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/filters/feImage-target-property-change.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/filters/feImage-target-reappend-to-document.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/filters/feImage-target-remove-from-document.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/filters/filter-width-update.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/filters/invalidate-on-child-layout.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/add-background-property-on-root.html [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/add-outline-property-on-root.html [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/container-repaint.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/fecomponenttransfer-in1-change.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/foreign-object-repaint.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/image-with-clip-path.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/inner-svg-change-viewBox-contract.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/inner-svg-change-viewPort-relative.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/mask-clip-target-transform.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/modify-inserted-listitem.html [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/modify-transferred-listitem-different-attr.html [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/modify-transferred-listitem.html [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/outline-offset-text.html [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/paintorder-filtered.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/remove-background-property-on-root.html [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/remove-outline-property-on-root.html [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/repaint-non-scaling-stroke-text-decoration.html [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/repaint-non-scaling-stroke-text.html [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/repaint-paintorder.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/text-mask-update.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/text-pattern-update-2.html [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/text-pattern-update.html [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/transform-changed-state.html [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/transform-foreign-object.html [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/transform-text-element.html [ NeedsRebaseline ]
-crbug.com/602483 svg/repaint/tspan-pattern-update.html [ NeedsRebaseline ]
-crbug.com/602483 svg/text/append-text-node-to-tspan.html [ NeedsRebaseline ]
-crbug.com/602483 svg/text/ems-display-none.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/text/exs-display-none.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/text/modify-text-node-in-tspan.html [ NeedsRebaseline ]
-crbug.com/602483 svg/text/remove-text-node-from-tspan.html [ NeedsRebaseline ]
-crbug.com/602483 svg/text/remove-tspan-from-text.html [ NeedsRebaseline ]
-crbug.com/602483 svg/text/text-rescale.html [ NeedsRebaseline ]
-crbug.com/602483 svg/text/text-selection-text-05-t.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/text/text-viewbox-rescale.html [ NeedsRebaseline ]
-crbug.com/602483 svg/text/tspan-dynamic-positioning.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/zoom/page/absolute-sized-document-no-scrollbars.svg [ NeedsRebaseline ]
-crbug.com/602483 svg/zoom/page/relative-sized-document-scrollbars.svg [ NeedsRebaseline ]
-crbug.com/602483 transforms/transform-focus-ring-repaint.html [ NeedsRebaseline ]
-crbug.com/602483 virtual/display_list_2d_canvas/fast/canvas/canvas-composite-repaint-by-all-imagesource.html [ NeedsRebaseline ]
-crbug.com/602483 virtual/gpu-rasterization/fast/images/fixed-img-src-change-after-scroll.html [ NeedsRebaseline ]
-crbug.com/602483 virtual/gpu-rasterization/fast/images/repaint-subrect-grid.html [ NeedsRebaseline ]
-crbug.com/602483 virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-color-change.html [ NeedsRebaseline ]
-crbug.com/602483 virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-match-highlight.html [ NeedsRebaseline ]
-crbug.com/602483 virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-container-and-content.html [ NeedsRebaseline ]
+crbug.com/602483 compositing/overflow/fixed-scroll-in-empty-root-layer.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 compositing/overflow/text-color-change.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 compositing/overflow/text-match-highlight.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 compositing/overflow/updating-scrolling-container-and-content.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 compositing/repaint/fixed-pos-inside-composited-intermediate-layer.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 compositing/repaint/fixed-pos-with-abs-pos-child-scroll.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 compositing/repaint/resize-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 compositing/repaint/should-not-clip-composited-overflow-scrolling-layer.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 compositing/repaint/should-not-clip-composited-viewport-scrolling-layer.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 compositing/repaint/should-not-repaint-composited-descendants-on-overflow-change.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 compositing/squashing/add-remove-squashed-layers.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 compositing/squashing/iframe-inside-squashed-layer.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 compositing/squashing/invalidations-with-large-negative-margin.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 compositing/squashing/remove-squashed-layer-plus-move.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 compositing/squashing/selection-repaint-with-gaps.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 compositing/squashing/squash-above-fixed-1.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 compositing/squashing/squashed-layer-loses-graphicslayer.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 compositing/squashing/squashed-repaints.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 compositing/will-change/containing-block-removed.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 css3/flexbox/repaint-during-resize-no-flex.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 css3/flexbox/repaint-on-layout.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 css3/flexbox/repaint-on-margin-change.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 css3/flexbox/repaint-opacity-change.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 css3/flexbox/repaint-rtl-column.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 css3/flexbox/repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 editing/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/box-shadow/negative-shadow-box-expand.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/box-shadow/negative-shadow-box-shrink.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/box-shadow/shadow-box-resize-writing-mode.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/box-shadow/shadow-box-resize.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/canvas/canvas-composite-repaint-by-all-imagesource.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/css-grid-layout/grid-element-change-columns-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/css-grid-layout/grid-element-change-rows-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/css-grid-layout/grid-item-change-row-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/css-grid-layout/grid-item-z-index-change-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/forms/button/button-reset-focus-by-mouse-then-keydown.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/forms/range/range-focus-by-mouse-then-keydown.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/forms/submit/submit-focus-by-mouse-then-keydown.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/images/fixed-img-src-change-after-scroll.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/images/repaint-subrect-grid.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/layers/scroll-descendant-with-cached-cliprects.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/4776765.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/absolute-margin-change-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/absolute-position-change-containing-block.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/absolute-position-changed.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/abspos-shift-image-incorrect-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/add-table-overpaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/align-content-change.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/align-content-distribution-change-grid.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/align-content-position-change-grid.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/align-self-change-grid.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/align-self-change.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/align-self-overflow-change.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/background-currentColor-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/background-image-paint-invalidation.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/background-shorthand-with-gradient-and-height-changes.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/background-size-auto-with-gradient-and-height-changes.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/backgroundSizeRepaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/block-layout-inline-children-float-positioned.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/block-no-inflow-children.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/block-shift-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/body-background-image.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/border-radius-repaint-2.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/border-radius-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/border-radius-without-border.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/border-repaint-glitch.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/box-inline-resize.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/box-shadow-dynamic.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/box-shadow-inset-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/box-sizing-border-keeping-size.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/box-sizing.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/bugzilla-3509.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/bugzilla-5699.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/bugzilla-6278.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/bugzilla-6388.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/bugzilla-6473.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/bugzilla-7235.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/caret-with-transformation.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/change-text-content-and-background-color.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/clip-with-layout-delta.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/clipped-overflow-visible-subtree.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/clipped-relative.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/containing-block-position-change.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/content-into-overflow.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/control-clip.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/crbug-371640-2.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/crbug-371640-3.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/crbug-371640-4.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/crbug-371640.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/destroy-composited-scrollbar.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/destroy-overlay-scrollbar.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/destroy-scrollbar.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/details-open-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/dont-invalidate-root-layer-when-composited-layer-becomes-visible.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/dynamic-table-vertical-alignment-change.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/erase-overflow.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/fixed-after-scroll.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/fixed-and-absolute-position-scrolled.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/fixed-child-move-after-scroll.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/fixed-child-of-fixed-move-after-scroll.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/fixed-child-of-transformed-move-after-scroll.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/fixed-margin-change-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/fixed-move-after-scroll.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/fixed-scroll-simple.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/fixed-table-cell.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/fixed-table-overflow-zindex.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/fixed-table-overflow.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/fixed-to-relative-position-with-absolute-child.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/float-in-new-block-with-layout-delta.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/float-move-during-layout.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/float-overflow-right.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/float-overflow.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/focus-continuations.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/focus-enable-continuations.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/focus-ring-on-child-move.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/focus-ring-on-continuation-move.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/gradients-em-stops-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/hover-invalidation-table.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/hover-pseudo-borders-whitespace.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/hover-pseudo-borders.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/inline-block-resize.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/inline-color-change.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/inline-focus.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/inline-outline-repaint-2.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/inline-outline-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/inline-overflow.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/inline-reflow.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/inline-relative-positioned.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/inline-style-change-in-scrolled-view.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/inline-vertical-lr-overflow.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/inline-vertical-rl-overflow.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/intermediate-layout-position.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/invalidation-after-opacity-change-subtree.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/invisible-objects.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/japanese-rl-selection-clear.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/japanese-rl-selection-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/justify-content-change.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/justify-content-distribution-change-grid.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/justify-content-position-change-grid.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/justify-content-position-change.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/justify-items-change.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/justify-items-legacy-change.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/justify-items-overflow-change.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/justify-self-change.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/justify-self-overflow-change.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/layout-state-only-positioned.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/layout-state-relative.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/layout-state-scrolloffset.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/layout-state-scrolloffset2.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/layout-state-scrolloffset3.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/layoutstate-invalid-invalidation-inline-relative-positioned.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/line-flow-with-floats-1.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/line-flow-with-floats-10.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/line-flow-with-floats-2.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/line-flow-with-floats-3.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/line-flow-with-floats-4.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/line-flow-with-floats-5.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/line-flow-with-floats-6.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/line-flow-with-floats-7.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/line-flow-with-floats-8.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/line-flow-with-floats-9.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/line-in-scrolled-clipped-block.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/line-overflow.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/lines-with-layout-delta.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/list-marker-2.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/make-children-non-inline.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/margin.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/mix-blend-mode-separate-stacking-context.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/multi-layout-one-frame.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/multicol-as-paint-container.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/multicol-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/multicol-with-abspos-in-relpos.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/multicol-with-abspos.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/multicol-with-block.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/multicol-with-inline.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/multicol-with-text.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/negative-text-indent-with-overflow-hidden.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/offset-change-wrong-invalidation-with-float.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/opacity-change-on-overflow-float.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/outline-change-continuations.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/outline-change-invalidation.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/outline-child-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/outline-clip-change.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/outline-continuations.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/outline-inset.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/outline-repaint-glitch.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/overflow-auto-in-overflow-auto-scrolled.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/overflow-clip-subtree-layout.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/overflow-delete-line.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/overflow-hide.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/overflow-into-content.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/overflow-scroll-after-move.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/overflow-scroll-body-appear.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/overflow-scroll-delete.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/overflow-scroll-in-overflow-scroll-scrolled.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/overflow-show.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/overhanging-float-detach-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/padding-keeping-content-size.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/paint-invalidation-with-reparent-across-frame-boundaries.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/percent-size-image-resize-container.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/position-change-keeping-geometry.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/positioned-document-element.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/positioned-great-grandparent-change-location.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/positioned-list-offset-change-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/push-block-with-first-line.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/quotes.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/reflection-redraw.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/reflection-repaint-test.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/relative-inline-positioned-movement-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/relative-margin-change-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/remove-block-after-layout.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/remove-inline-after-layout.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/remove-inline-block-descendant-of-flex.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/remove-inline-layer-after-layout.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/repaint-across-writing-mode-boundary.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/repaint-composited-child-in-scrolled-container.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/repaint-descandant-on-ancestor-layer-move.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/repaint-during-scroll-with-zoom.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/repaint-table-row-in-composited-document.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/replaced-clipped-positioned-not-wrong-incremental-repainting.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/requestAnimation-translation-leave-traces.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/resize-scrollable-div.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/resize-scrollable-iframe.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/resize-with-border-clipped.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/resize-with-border.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/scroll-in-transformed-layer.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/scroll-inside-table-cell.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/scroll-relative-table-inside-table-cell.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/scroll-stacking-context-backface-visiblity-leaves-traces.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/scrollbar-damage-and-full-viewport-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/scrollbar-invalidation-on-resize-with-border.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/scrollbar-invalidation-on-resize.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/scrollbar-parts.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/search-field-cancel.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/select-option-background-color.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/selected-replaced.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/selection-after-delete.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/selection-after-remove.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/selection-change-in-iframe-with-relative-parent.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/selection-clear.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/selection-partial-invalidation-between-blocks.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/selection-rl.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/shift-relative-positioned-container-with-image-addition.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/shift-relative-positioned-container-with-image-removal.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/stacked-diacritics.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/stacking-context-lost.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/static-to-positioned.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/subtree-root-skipped.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/table-cell-collapsed-border.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/table-cell-move.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/table-col-background-offset.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/table-col-background.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/table-collapsed-border.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/table-outer-border.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/table-overflow-auto-in-overflow-auto-scrolled.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/table-overflow-scroll-in-overflow-scroll-scrolled.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/table-row-bg-change.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/table-row.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/table-section-overflow.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/table-section-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/table-shrink-row-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/table-with-padding-row-invalidation.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/text-append-dirty-lines.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/text-in-relative-positioned-inline.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/text-match-document-change.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/text-selection-rect-in-overflow-2.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/text-selection-rect-in-overflow.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/textarea-appearance-none-resize-handle.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/textarea-set-disabled.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/transform-disable-layoutstate.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/transform-inline-layered-child.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/transform-layout-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/transform-rotate-and-remove.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/transform-translate.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/vertical-align-length1.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/vertical-align-length2.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/vertical-align1.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/vertical-align2.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/vertical-rl-as-paint-container.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/video-mute-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/video-unmute-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/view-background-from-body-2.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/window-resize-background-image-fixed-centered-composited.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/window-resize-background-image-fixed-centered.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/window-resize-background-image-generated.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/window-resize-background-image-non-fixed.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/window-resize-media-query.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/window-resize-percent-html.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/window-resize-percent-width-height.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/window-resize-positioned-bottom.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/window-resize-positioned-percent-top.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/window-resize-vertical-writing-mode.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/repaint/window-resize-viewport-percent.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/table/border-collapsing/border-collapse-change-collapse-to-separate.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/table/border-collapsing/border-collapse-change-separate-to-collapse.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/table/border-collapsing/cached-69296.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/table/border-collapsing/cached-cell-append.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/table/border-collapsing/cached-cell-remove.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/table/border-collapsing/cached-change-cell-border-color.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/table/border-collapsing/cached-change-cell-border-width.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/table/border-collapsing/cached-change-cell-sl-border-color.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/table/border-collapsing/cached-change-col-border-color.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/table/border-collapsing/cached-change-col-border-width.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/table/border-collapsing/cached-change-colgroup-border-color.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/table/border-collapsing/cached-change-colgroup-border-width.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/table/border-collapsing/cached-change-row-border-color.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/table/border-collapsing/cached-change-row-border-width.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/table/border-collapsing/cached-change-table-border-color.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/table/border-collapsing/cached-change-table-border-width.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/table/border-collapsing/cached-change-tbody-border-color.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/table/border-collapsing/cached-change-tbody-border-width.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/table/resize-table-repaint-percent-size-cell.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/table/resize-table-repaint-vertical-align-cell.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 fast/table/resize-table-row-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 media/media-audio-no-spurious-repaints.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 media/video-paint-invalidation.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 paint/invalidation/animated-gif-background.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 paint/invalidation/invalidate-box-shadow-currentColor.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 paint/invalidation/invalidate-descendants-when-receiving-paint-layer.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 paint/invalidation/non-text-link-invalidation-optimization.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 paint/selection/invalidation-rect-includes-newline-for-rtl.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 paint/selection/invalidation-rect-includes-newline-for-vertical-lr.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 paint/selection/invalidation-rect-includes-newline-for-vertical-rl.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 paint/selection/invalidation-rect-includes-newline.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 paint/selection/invalidation-rect-with-br-includes-newline.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 paint/selection/selection-within-composited-scroller.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/as-image/svg-image-change-content-size.xhtml [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/as-object/embedded-svg-size-changes-no-layout-triggers.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/as-object/nested-embedded-svg-size-changes-no-layout-triggers-1.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/as-object/nested-embedded-svg-size-changes-no-layout-triggers-2.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/carto.net/window.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/absolute-sized-content-with-resources.xhtml [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/circle-move-invalidation.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/clip-path-child-changes.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/clip-path-href-changes.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/clip-path-id-changes.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/clip-path-units-changes.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/deep-dynamic-updates.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/gradient-add-stops.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/gradient-stop-style-change.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/js-late-clipPath-and-object-creation.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/js-late-clipPath-creation.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/js-late-gradient-and-object-creation.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/js-late-gradient-creation.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/js-late-marker-and-object-creation.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/js-late-marker-creation.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/js-late-mask-and-object-creation.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/js-late-mask-creation.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/js-late-pattern-and-object-creation.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/js-late-pattern-creation.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/js-repaint-rect-on-path-with-stroke.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/js-update-bounce.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/js-update-container.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/js-update-gradient.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/js-update-pattern-child.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/js-update-pattern.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/js-update-polygon-changes.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/js-update-polygon-removal.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/js-update-stop-linked-gradient.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/js-update-stop.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/js-update-style.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/marker-viewBox-changes.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/mask-invalidation.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/object-sizing-no-width-height-change-content-box-size.xhtml [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/pending-resource-after-removal.xhtml [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/relative-sized-content-with-resources.xhtml [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/relative-sized-content.xhtml [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/relative-sized-deep-shadow-tree-content.xhtml [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/relative-sized-image.xhtml [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/relative-sized-inner-svg.xhtml [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/relative-sized-shadow-tree-content-with-symbol.xhtml [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/relative-sized-shadow-tree-content.xhtml [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/relative-sized-use-on-symbol.xhtml [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/relative-sized-use-without-attributes-on-symbol.xhtml [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/repaint-moving-svg-and-div.xhtml [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/resource-client-removal.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/resource-invalidate-on-target-update.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/scrolling-embedded-svg-file-image-repaint-problem.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/text-dom-removal.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/text-repaint-including-stroke.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/text-xy-updates-SVGList.xhtml [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/use-clipped-hit.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/use-detach.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/custom/use-setAttribute-crash.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/filters/feImage-change-target-id.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/filters/feImage-multiple-targets-id-change.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/filters/feImage-reference-invalidation.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/filters/feImage-remove-target.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/filters/feImage-target-add-to-document.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/filters/feImage-target-attribute-change-with-use-indirection-2.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/filters/feImage-target-attribute-change-with-use-indirection.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/filters/feImage-target-attribute-change.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/filters/feImage-target-changes-id.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/filters/feImage-target-id-change.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/filters/feImage-target-property-change.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/filters/feImage-target-reappend-to-document.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/filters/feImage-target-remove-from-document.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/filters/filter-width-update.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/filters/invalidate-on-child-layout.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/add-background-property-on-root.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/add-outline-property-on-root.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/container-repaint.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/fecomponenttransfer-in1-change.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/foreign-object-repaint.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/image-with-clip-path.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/inner-svg-change-viewBox-contract.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/inner-svg-change-viewPort-relative.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/mask-clip-target-transform.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/modify-inserted-listitem.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/modify-transferred-listitem-different-attr.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/modify-transferred-listitem.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/outline-offset-text.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/paintorder-filtered.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/remove-background-property-on-root.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/remove-outline-property-on-root.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/repaint-non-scaling-stroke-text-decoration.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/repaint-non-scaling-stroke-text.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/repaint-paintorder.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/text-mask-update.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/text-pattern-update-2.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/text-pattern-update.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/transform-changed-state.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/transform-foreign-object.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/transform-text-element.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/repaint/tspan-pattern-update.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/text/append-text-node-to-tspan.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/text/ems-display-none.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/text/exs-display-none.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/text/modify-text-node-in-tspan.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/text/remove-text-node-from-tspan.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/text/remove-tspan-from-text.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/text/text-rescale.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/text/text-selection-text-05-t.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/text/text-viewbox-rescale.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/text/tspan-dynamic-positioning.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/zoom/page/absolute-sized-document-no-scrollbars.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 svg/zoom/page/relative-sized-document-scrollbars.svg [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 transforms/transform-focus-ring-repaint.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 virtual/display_list_2d_canvas/fast/canvas/canvas-composite-repaint-by-all-imagesource.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 virtual/gpu-rasterization/fast/images/fixed-img-src-change-after-scroll.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 virtual/gpu-rasterization/fast/images/repaint-subrect-grid.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-color-change.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-match-highlight.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
+crbug.com/602483 virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-container-and-content.html [ NeedsManualRebaseline ] # should be NeedsRebaseline, crbug.com/603753
 
 crbug.com/596968 [ Win ] inspector-protocol/input/eventTimestamp.html [ Failure Pass ]
 
@@ -1768,6 +1768,7 @@
 
 # DocumentWriteEvaluator is still experimental
 crbug.com/599115 http/tests/preload/document-write [ Failure ]
+crbug.com/599115 http/tests/preload/document-write/document_write_no_preload.html [ Pass ]
 
 crbug.com/601669 [ Win ] svg/as-image/svg-nested.html [ Crash ]
 
diff --git a/third_party/WebKit/LayoutTests/animations/translate-neutral-keyframe-easing-expected.html b/third_party/WebKit/LayoutTests/animations/translate-neutral-keyframe-easing-expected.html
new file mode 100644
index 0000000..39712c9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/animations/translate-neutral-keyframe-easing-expected.html
@@ -0,0 +1,2 @@
+<!DOCTYPE html>
+<div id="target" style="translate: 50px">TEST</div>
diff --git a/third_party/WebKit/LayoutTests/animations/translate-neutral-keyframe-easing.html b/third_party/WebKit/LayoutTests/animations/translate-neutral-keyframe-easing.html
new file mode 100644
index 0000000..51a6737
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/animations/translate-neutral-keyframe-easing.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<div id="target">TEST</div>
+<script>
+target.animate({translate: '100px'}, {duration: 2e10, delay: -1e10});
+</script>
diff --git a/third_party/WebKit/LayoutTests/fast/events/select-event-on-input-and-textarea-expected.txt b/third_party/WebKit/LayoutTests/fast/events/select-event-on-input-and-textarea-expected.txt
index 92f8359..75d99749 100644
--- a/third_party/WebKit/LayoutTests/fast/events/select-event-on-input-and-textarea-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/events/select-event-on-input-and-textarea-expected.txt
@@ -3,8 +3,20 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-PASS select event is triggered on setSelectionRange, setRangeText, selectionStart, selectionEnd and selectionDirection methods of input element.
-PASS select event is triggered on setSelectionRange, setRangeText, selectionStart, selectionEnd and selectionDirection methods of textarea element.
+PASS input.focus()
+PASS input.select()
+PASS input.setSelectionRange()
+PASS input.setRangeText()
+PASS input.selectionStart
+PASS input.selectionEnd
+PASS input.selectionDirection
+PASS textarea.focus()
+PASS textarea.select()
+PASS textarea.setSelectionRange()
+PASS textarea.setRangeText()
+PASS textarea.selectionStart
+PASS textarea.selectionEnd
+PASS textarea.selectionDirection
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/fast/events/select-event-on-input-and-textarea.html b/third_party/WebKit/LayoutTests/fast/events/select-event-on-input-and-textarea.html
index 6301c084..e0509176 100644
--- a/third_party/WebKit/LayoutTests/fast/events/select-event-on-input-and-textarea.html
+++ b/third_party/WebKit/LayoutTests/fast/events/select-event-on-input-and-textarea.html
@@ -3,99 +3,96 @@
 <head>
 <script src="../../resources/js-test.js"></script>
 </head>
-<body onload="runInputTests()">
+<body onload="startTests()">
 <input id="inputId" value="abcd"></input>
 <textarea id="textAreaId">abcd</textarea>
 <script>
 description("Test select event is triggered on input and textarea Elements.");
 var input = document.getElementById("inputId");
 var textarea = document.getElementById("textAreaId");
-var expectedNumOfSelectEvent;
-var actualNumOfSelectEvent;
 var jsTestIsAsync = true;
+var currentCase;
+var lastCase;
 
-var inputTests = [
+var tests = [
+    function() {
+        input.focus();
+        return "input.focus()";
+    },
+    function() {
+        input.select();
+        return "input.select()";
+    },
     function() {
         input.setSelectionRange(1, 2);
+        return "input.setSelectionRange()";
     },
     function() {
         input.setRangeText("efgh");
+        return "input.setRangeText()";
     },
     function() {
         input.selectionStart = 1;
+        return "input.selectionStart";
     },
     function() {
         input.selectionEnd = 3;
+        return "input.selectionEnd";
     },
     function() {
         input.selectionDirection = "forward";
-    }
-];
-
-var textAreaTests = [
+        return "input.selectionDirection";
+    },
+    function() {
+        textarea.focus();
+        return "textarea.focus()";
+    },
+    function() {
+        textarea.select();
+        return "textarea.select()";
+    },
     function() {
         textarea.setSelectionRange(1, 2);
+        return "textarea.setSelectionRange()";
     },
     function() {
         textarea.setRangeText("efgh");
+        return "textarea.setRangeText()";
     },
     function() {
         textarea.selectionStart = 1;
+        return "textarea.selectionStart";
     },
     function() {
         textarea.selectionEnd = 3;
+        return "textarea.selectionEnd";
     },
     function() {
         textarea.selectionDirection = "forward";
+        return "textarea.selectionDirection";
     }
 ];
 
-function handleInputSelectEvent() {
-    actualNumOfSelectEvent++;
-    if (inputTests.length) {
-        inputTests.shift()();
+function runNext() {
+    if (tests.length <= 0)
+        finishJSTest();
+    currentCase = tests.shift()();
+}
+
+function handleSelectEvent() {
+    if (lastCase == currentCase) {
+        testFailed("The above test dispatched mulitiple select events.");
         return;
     }
-
-    if (expectedNumOfSelectEvent == actualNumOfSelectEvent) {
-        testPassed("select event is triggered on setSelectionRange, setRangeText, selectionStart, selectionEnd and selectionDirection methods of input element.");
-    } else {
-        testFailed("select is triggered " + actualNumOfSelectEvent + " times instead of " + expectedNumOfSelectEvent + " times on textarea element.");
-    }
-
-    runTextareaTests();
+    testPassed(currentCase);
+    lastCase = currentCase;
+    setTimeout(runNext, 0);
 }
 
-function handleTextAreaSelectEvent() {
-    actualNumOfSelectEvent++;
-    if (textAreaTests.length) {
-        textAreaTests.shift()();
-        return;
-    }
-
-    if (expectedNumOfSelectEvent == actualNumOfSelectEvent) {
-        testPassed("select event is triggered on setSelectionRange, setRangeText, selectionStart, selectionEnd and selectionDirection methods of textarea element.");
-    } else {
-        testFailed("select is triggered " + actualNumOfSelectEvent + " times instead of " + expectedNumOfSelectEvent + " times on textarea element.");
-    }
-
-    finishJSTest();
-}
-
-function runInputTests() {
-    // incrementing it by 1 as select() is kept outside the inputTests array.
-    expectedNumOfSelectEvent = inputTests.length + 1;
-    actualNumOfSelectEvent = 0;
-    input.addEventListener("select", handleInputSelectEvent);
-    input.select();
-}
-
-function runTextareaTests() {
-    // incrementing it by 1 as select() is kept outside the textAreaTests array.
-    expectedNumOfSelectEvent = textAreaTests.length + 1;
-    actualNumOfSelectEvent = 0;
-    textarea.addEventListener("select", handleTextAreaSelectEvent);
-    textarea.select();
+function startTests() {
+    input.addEventListener("select", handleSelectEvent);
+    textarea.addEventListener("select", handleSelectEvent);
+    runNext();
 }
 </script>
 </body>
diff --git a/third_party/WebKit/LayoutTests/fast/multicol/balance-empty-block-subpixel-column-height-expected.html b/third_party/WebKit/LayoutTests/fast/multicol/balance-empty-block-subpixel-column-height-expected.html
new file mode 100644
index 0000000..9c3cca7e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/multicol/balance-empty-block-subpixel-column-height-expected.html
@@ -0,0 +1,3 @@
+<!DOCTYPE html>
+<p>There should be a papayawhip square below, and no red, and no scrollbars.</p>
+<div style="width:49.5px; height:49.5px; background:papayawhip;"></div>
diff --git a/third_party/WebKit/LayoutTests/fast/multicol/balance-empty-block-subpixel-column-height.html b/third_party/WebKit/LayoutTests/fast/multicol/balance-empty-block-subpixel-column-height.html
new file mode 100644
index 0000000..f24da78
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/multicol/balance-empty-block-subpixel-column-height.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<p>There should be a papayawhip square below, and no red, and no scrollbars.</p>
+<div style="columns:2; column-gap:0; width:49.5px; overflow:auto; background:red;">
+    <div style="height:99px; background:papayawhip;"></div>
+</div>
diff --git a/third_party/WebKit/LayoutTests/fast/multicol/nested-balanced-with-strut-before-first-line-expected.html b/third_party/WebKit/LayoutTests/fast/multicol/nested-balanced-with-strut-before-first-line-expected.html
new file mode 100644
index 0000000..ef3c4100
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/multicol/nested-balanced-with-strut-before-first-line-expected.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<style>
+    .fakeColumn { float:left; width:1em; height:100%; }
+</style>
+<p>The word "PASS" should be seen below.</p>
+<div style="line-height:100px; height:100px;">
+    <div class="fakeColumn"></div>
+    <div class="fakeColumn"></div>
+    <div class="fakeColumn">P</div>
+    <div class="fakeColumn">A</div>
+    <div class="fakeColumn">S</div>
+    <div class="fakeColumn">S</div>
+</div>
diff --git a/third_party/WebKit/LayoutTests/fast/multicol/nested-balanced-with-strut-before-first-line.html b/third_party/WebKit/LayoutTests/fast/multicol/nested-balanced-with-strut-before-first-line.html
new file mode 100644
index 0000000..d492c05
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/multicol/nested-balanced-with-strut-before-first-line.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<p>The word "PASS" should be seen below.</p>
+<div style="columns:3; column-fill:auto; column-gap:0; width:6em; height:100px; line-height:100px;">
+    <div style="columns:2; column-gap:0;">
+        <div style="height:150px;"></div>
+        P<br>
+        A<br>
+        S<br>
+        S<br>
+    </div>
+</div>
diff --git a/third_party/WebKit/LayoutTests/fast/multicol/newmulticol/balance6-expected.txt b/third_party/WebKit/LayoutTests/fast/multicol/newmulticol/balance6-expected.txt
index 0f31ca7..02f535b 100644
--- a/third_party/WebKit/LayoutTests/fast/multicol/newmulticol/balance6-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/multicol/newmulticol/balance6-expected.txt
@@ -1,4 +1,4 @@
-PASS mc.offsetHeight is 34
+PASS mc.offsetHeight is 33
 PASS mc.scrollWidth is 500
 PASS successfullyParsed is true
 
diff --git a/third_party/WebKit/LayoutTests/fast/multicol/newmulticol/balance6.html b/third_party/WebKit/LayoutTests/fast/multicol/newmulticol/balance6.html
index 7bb44a1..bc246d2 100644
--- a/third_party/WebKit/LayoutTests/fast/multicol/newmulticol/balance6.html
+++ b/third_party/WebKit/LayoutTests/fast/multicol/newmulticol/balance6.html
@@ -14,7 +14,7 @@
       <div style="height:100px;"></div>
     </div>
     <script>
-      shouldBe("mc.offsetHeight", "34");
+      shouldBe("mc.offsetHeight", "33");
       shouldBe("mc.scrollWidth", "500");
     </script>
   </body>
diff --git a/third_party/WebKit/LayoutTests/http/tests/preload/document-write/document_write_no_preload.html b/third_party/WebKit/LayoutTests/http/tests/preload/document-write/document_write_no_preload.html
new file mode 100644
index 0000000..048424b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/http/tests/preload/document-write/document_write_no_preload.html
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+
+<script>
+  var t = async_test('Do not preload for document.write for long scripts or scripts that contain non-determinism');
+  // We reject scripts with "for", so rename window.performance.
+  window.perf = window.performance;
+</script>
+
+<script>
+  // This script is too long for preloading.
+  // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+  // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+  // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+  // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+  // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+  // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+  // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+  // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+  // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+  // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+  // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+  // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+  // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+  // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+  if (window.perf)
+    var boundedStart1 = window.perf.now();
+  var src = '../../resources/dummy.js';
+  document.write('<scr' + 'ipt src="' + src + '"></scr' + 'ipt>');
+</script>
+
+<script>
+  // This script has non-determinism.
+  if (window.perf)
+    var boundedStart2 = window.perf.now();
+  var src = '../../loading/resources/empty.js';
+  if (Math.random() < .9) {
+    src = src + "?query=randomly_added_query";
+  }
+  document.write('<scr' + 'ipt src="' + src + '"></scr' + 'ipt>');
+</script>
+
+<script>
+  // This script has non-determinism.
+  if (window.perf)
+    var boundedStart3 = window.perf.now();
+  var src = '../../loading/resources/zero-length.js?date=' + Date.now();
+  document.write('<scr' + 'ipt src="' + src + '"></scr' + 'ipt>');
+</script>
+
+<script>
+  window.addEventListener("load", t.step_func(function() {
+    assert_greater_than_equal(window.performance.getEntriesByType('resource').length, 4);
+    var count = 0;
+    window.performance.getEntriesByType('resource').forEach(function(r) {
+      assert_greater_than(r.startTime, 0);
+      if (r.name.indexOf('dummy.js') != -1) {
+        assert_greater_than(r.startTime, boundedStart1);
+        count++;
+      } else if (r.name.indexOf('empty.js') != -1) {
+        assert_greater_than(r.startTime, boundedStart2);
+        count++;
+      } else if (r.name.indexOf('zero-length.js') != -1) {
+        assert_greater_than(r.startTime, boundedStart3);
+        count++;
+      }
+    });
+    assert_equals(count, 3);
+    t.done();
+  }));
+</script>
+
diff --git a/third_party/WebKit/LayoutTests/http/tests/preload/document-write/document_write_preload.html b/third_party/WebKit/LayoutTests/http/tests/preload/document-write/document_write_preload.html
index 4474a7f..205efee 100644
--- a/third_party/WebKit/LayoutTests/http/tests/preload/document-write/document_write_preload.html
+++ b/third_party/WebKit/LayoutTests/http/tests/preload/document-write/document_write_preload.html
@@ -1,26 +1,29 @@
 <!DOCTYPE html>
 <script src="../../resources/testharness.js"></script>
 <script src="../../resources/testharnessreport.js"></script>
+
 <script>
-var t = async_test('Simple scripts that inject external scripts via document.write should be preloaded');
-// We reject scripts with "for", so rename window.performance.
-window.perf = window.performance;
+  var t = async_test('Simple scripts that inject external scripts via document.write should be preloaded');
+  // We reject scripts with "for", so rename window.performance.
+  window.perf = window.performance;
 </script>
+
 <script>
-if (window.perf)
+  if (window.perf)
     var boundedStart = window.perf.now();
-var src = '../../resources/dummy.js';
-document.write('<scr' + 'ipt src="' + src + '"></scr' + 'ipt>');
+  var src = '../../resources/dummy.js';
+  document.write('<scr' + 'ipt src="' + src + '"></scr' + 'ipt>');
 </script>
+
 <script>
-window.addEventListener("load", t.step_func(function() {
-  window.performance.getEntriesByType('resource').forEach(function(r) {
-    if (r.name.indexOf('dummy.js') != -1) {
-      assert_less_than(r.startTime, boundedStart);
-      assert_greater_than(r.startTime, 0);
-      t.done();
-    }
-  });
-}));
+  window.addEventListener("load", t.step_func(function() {
+    window.performance.getEntriesByType('resource').forEach(function(r) {
+      if (r.name.indexOf('dummy.js') != -1) {
+        assert_less_than(r.startTime, boundedStart);
+        assert_greater_than(r.startTime, 0);
+        t.done();
+      }
+    });
+  }));
 </script>
 
diff --git a/third_party/WebKit/LayoutTests/http/tests/preload/document-write/document_write_preload_stubs.html b/third_party/WebKit/LayoutTests/http/tests/preload/document-write/document_write_preload_stubs.html
new file mode 100644
index 0000000..9d9bdbb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/http/tests/preload/document-write/document_write_preload_stubs.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+
+<script>
+  var t = async_test('Accessors like location should be properly stubbed to aid in preloading scripts injected via document.write');
+  // We reject scripts with "for", so rename window.performance.
+  window.perf = window.performance;
+</script>
+
+<script>
+  if (window.perf)
+    var boundedStart = window.perf.now();
+  var src = window.location.protocol + '//' + window.location.hostname + ':8000' + '/resources/dummy.js';
+  document.write('<scr' + 'ipt src="' + src + '"></scr' + 'ipt>');
+</script>
+
+<script>
+  window.addEventListener("load", t.step_func(function() {
+    window.performance.getEntriesByType('resource').forEach(function(r) {
+      if (r.name.indexOf('dummy.js') != -1) {
+        assert_less_than(r.startTime, boundedStart);
+        assert_greater_than(r.startTime, 0);
+        t.done();
+      }
+    });
+  }));
+</script>
+
diff --git a/third_party/WebKit/LayoutTests/http/tests/preload/without_doc_write_evaluator.html b/third_party/WebKit/LayoutTests/http/tests/preload/without_doc_write_evaluator.html
new file mode 100644
index 0000000..3c784205
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/http/tests/preload/without_doc_write_evaluator.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+
+<script>
+  var t = async_test("Make sure that timing assumptions are accurate when document write preloading is off");
+  // We reject scripts with "for", so rename window.performance.
+  window.perf = window.performance;
+</script>
+
+<script>
+  if (window.perf)
+    var boundedStart = window.perf.now();
+  var src = '../../resources/dummy.js';
+  document.write('<scr' + 'ipt src="' + src + '"></scr' + 'ipt>');
+</script>
+
+<script>
+  window.addEventListener("load", t.step_func(function() {
+    window.performance.getEntriesByType('resource').forEach(function(r) {
+      if (r.name.indexOf('dummy.js') != -1) {
+        assert_greater_than(r.startTime, 0);
+        assert_greater_than(r.startTime, boundedStart);
+        t.done();
+      }
+    });
+  }));
+</script>
+
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/debugger-scope-resolve-identifiers-expected.txt b/third_party/WebKit/LayoutTests/inspector/sources/debugger/debugger-scope-resolve-identifiers-expected.txt
new file mode 100644
index 0000000..51184e59
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/inspector/sources/debugger/debugger-scope-resolve-identifiers-expected.txt
@@ -0,0 +1,15 @@
+CONSOLE MESSAGE: line 4: 0
+Tests resolving variable names via source maps.
+
+Set timer for test function.
+Script execution paused.
+
+Scope variables sidebar pane:
+Local
+    pos: 10
+    pos: 0
+    this: Window
+WindowGlobal
+    <section collapsed>
+Script execution resumed.
+
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/debugger-scope-resolve-identifiers.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger/debugger-scope-resolve-identifiers.html
new file mode 100644
index 0000000..4bf2d5d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/inspector/sources/debugger/debugger-scope-resolve-identifiers.html
@@ -0,0 +1,35 @@
+<html>
+<head>
+<script src="../../../http/tests/inspector/inspector-test.js"></script>
+<script src="../../../http/tests/inspector/debugger-test.js"></script>
+<script src="resources/resolve-identifiers.js"></script>
+<script>
+function test()
+{
+    Runtime.experiments.enableForTest("resolveVariableNames");
+    InspectorTest.startDebuggerTest(() => InspectorTest.runTestFunctionAndWaitUntilPaused());
+
+    InspectorTest.addSniffer(WebInspector.SourceMapNamesResolver, "_scopeResolvedForTest", onAllScopesResolved, true);
+
+    function onAllScopesResolved()
+    {
+        InspectorTest.expandScopeVariablesSidebarPane(onSidebarsExpanded);
+    }
+
+    function onSidebarsExpanded()
+    {
+        InspectorTest.addResult("");
+        InspectorTest.dumpScopeVariablesSidebarPane();
+        InspectorTest.completeDebuggerTest();
+    }
+}
+
+</script>
+</head>
+
+<body onload="runTest()">
+<p>
+Tests resolving variable names via source maps.
+</p>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/extract-javascript-identifiers-expected.txt b/third_party/WebKit/LayoutTests/inspector/sources/debugger/extract-javascript-identifiers-expected.txt
new file mode 100644
index 0000000..673cdc35f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/inspector/sources/debugger/extract-javascript-identifiers-expected.txt
@@ -0,0 +1,77 @@
+Tests the extraction of javascript identifier names from function text.
+
+
+Running: testFunctionArguments
+Text:
+    function foo(a, b) { }
+
+Identifiers:
+    id: a    offset: 13
+    id: b    offset: 16
+
+Running: testSimpleVariable
+Text:
+    function foo() { var a = 1; }
+
+Identifiers:
+    id: a    offset: 21
+
+Running: testMemberExpression
+Text:
+    function foo() { var a = b.c.d.e; }
+
+Identifiers:
+    id: a    offset: 21
+    id: b    offset: 25
+
+Running: testFunctionCall
+Text:
+    function foo() { var a = doSomething(b, true, 10); }
+
+Identifiers:
+    id: a    offset: 21
+    id: doSomething    offset: 25
+    id: b    offset: 37
+
+Running: testPropertyLiteral
+Text:
+    function foo() { var a = b['test'];}
+
+Identifiers:
+    id: a    offset: 21
+    id: b    offset: 25
+
+Running: testComputedProperty
+Text:
+    function foo() { var a = b[variableName];}
+
+Identifiers:
+    id: a    offset: 21
+    id: b    offset: 25
+    id: variableName    offset: 27
+
+Running: testNestedFunction1
+Text:
+    function foo() { var a = 1; function bar() { var b = 1; } var c = 3;}
+
+Identifiers:
+    id: a    offset: 21
+    id: bar    offset: 37
+    id: c    offset: 62
+
+Running: testNestedFunction2
+Text:
+    function foo() { var a = 1; var bar = function (){ var b = 1; }; var c = 3;}
+
+Identifiers:
+    id: a    offset: 21
+    id: bar    offset: 32
+    id: c    offset: 69
+
+Running: testNestedFunction3
+Text:
+    function foo() { var a = x => x * 2 }
+
+Identifiers:
+    id: a    offset: 21
+
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/extract-javascript-identifiers.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger/extract-javascript-identifiers.html
new file mode 100644
index 0000000..57fde3e0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/inspector/sources/debugger/extract-javascript-identifiers.html
@@ -0,0 +1,82 @@
+<html>
+<head>
+<script src="../../../http/tests/inspector/inspector-test.js"></script>
+<script>
+
+function test()
+{
+    var worker = WebInspector.SourceMapNamesResolverWorker._instance();
+
+    InspectorTest.runTestSuite([
+        function testFunctionArguments(next)
+        {
+            extract("function foo(a, b) { }", next);
+        },
+
+        function testSimpleVariable(next)
+        {
+            extract("function foo() { var a = 1; }", next);
+        },
+
+        function testMemberExpression(next)
+        {
+            extract("function foo() { var a = b.c.d.e; }", next);
+        },
+
+        function testFunctionCall(next)
+        {
+            extract("function foo() { var a = doSomething(b, true, 10); }", next);
+        },
+
+        function testPropertyLiteral(next)
+        {
+            extract("function foo() { var a = b['test'];}", next);
+        },
+
+        function testComputedProperty(next)
+        {
+            extract("function foo() { var a = b[variableName];}", next);
+        },
+
+        function testNestedFunction1(next)
+        {
+            extract("function foo() { var a = 1; function bar() { var b = 1; } var c = 3;}", next);
+        },
+
+        function testNestedFunction2(next)
+        {
+            extract("function foo() { var a = 1; var bar = function (){ var b = 1; }; var c = 3;}", next);
+        },
+
+        function testNestedFunction3(next)
+        {
+            extract("function foo() { var a = x => x * 2 }", next);
+        },
+    ]);
+
+    function extract(text, next)
+    {
+        InspectorTest.addResult("Text:");
+        InspectorTest.addResult("    " + text + "\n");
+        worker.javaScriptIdentifiers(text)
+            .then(onIdentifiers)
+            .then(next);
+    }
+
+    function onIdentifiers(ids)
+    {
+        InspectorTest.addResult("Identifiers:");
+        for (var id of ids)
+            InspectorTest.addResult(`    id: ${id.name}    offset: ${id.offset}`);
+    }
+}
+
+</script>
+
+</head>
+
+<body onload="runTest()">
+<p>Tests the extraction of javascript identifier names from function text.</p>
+
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-identifiers.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-identifiers.js
new file mode 100644
index 0000000..92eca8e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-identifiers.js
@@ -0,0 +1,8 @@
+function testFunction() {
+    var pos = 10;
+    for (var pos_1 = 0; pos_1 < 1; pos_1++) {
+        console.log(pos_1);
+        debugger;
+    }
+}
+//# sourceMappingURL=resolve-identifiers.js.map
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-identifiers.js.map b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-identifiers.js.map
new file mode 100644
index 0000000..debfb39
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-identifiers.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"resolve-identifiers.js","sourceRoot":"","sources":["resolve-identifiers.ts"],"names":[],"mappings":"AAAA;IACI,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,GAAG,CAAC,CAAC,IAAI,KAAG,GAAG,CAAC,EAAE,KAAG,GAAG,CAAC,EAAE,KAAG,EAAE,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAG,CAAC,CAAC;QACjB,QAAQ,CAAC;IACb,CAAC;AACL,CAAC"}
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-identifiers.ts b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-identifiers.ts
new file mode 100644
index 0000000..d0e277c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-identifiers.ts
@@ -0,0 +1,7 @@
+function testFunction() {
+    let pos = 10;
+    for (let pos = 0; pos < 1; pos++) {
+        console.log(pos);
+        debugger;
+    }
+}
diff --git a/third_party/WebKit/LayoutTests/shadow-dom/query-selector.html b/third_party/WebKit/LayoutTests/shadow-dom/query-selector.html
new file mode 100644
index 0000000..f67bd66
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/shadow-dom/query-selector.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="resources/shadow-dom.js"></script>
+<div id="x"><span></span></div>
+<div id="x"><span></span></div>
+<div id="host">
+  <template data-mode="open">
+    <div id="y"><span></span></div>
+    <div id="y"><span></span></div>
+  </template>
+</div>
+<script>
+convertTemplatesToShadowRootsWithin(host);
+test(() => {
+  assert_equals(document.querySelectorAll('#x').length, 2);
+  assert_equals(document.querySelectorAll('#x span').length, 2);
+}, 'querySelectorAll for multiple #Ids in a document tree');
+
+test(() => {
+  assert_equals(host.shadowRoot.querySelectorAll('#y').length, 2);
+  assert_equals(host.shadowRoot.querySelectorAll('#y span').length, 2);
+}, 'querySelectorAll for multiple #Ids in a shadow tree');
+</script>
diff --git a/third_party/WebKit/Source/build/scripts/templates/OriginTrials.h.tmpl b/third_party/WebKit/Source/build/scripts/templates/OriginTrials.h.tmpl
index 7b4a39e..62f17339 100644
--- a/third_party/WebKit/Source/build/scripts/templates/OriginTrials.h.tmpl
+++ b/third_party/WebKit/Source/build/scripts/templates/OriginTrials.h.tmpl
@@ -5,7 +5,6 @@
 #define OriginTrials_h
 
 #include "core/CoreExport.h"
-#include "wtf/text/StringHash.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/animation/EffectInput.cpp b/third_party/WebKit/Source/core/animation/EffectInput.cpp
index 4d60a9b2..d522676 100644
--- a/third_party/WebKit/Source/core/animation/EffectInput.cpp
+++ b/third_party/WebKit/Source/core/animation/EffectInput.cpp
@@ -104,7 +104,7 @@
     if (encounteredCompositableProperty && element.inActiveDocument())
         element.document().updateLayoutTreeForNode(&element);
 
-    StringKeyframeEffectModel* keyframeEffectModel = StringKeyframeEffectModel::create(keyframes);
+    StringKeyframeEffectModel* keyframeEffectModel = StringKeyframeEffectModel::create(keyframes, LinearTimingFunction::shared());
     if (!RuntimeEnabledFeatures::cssAdditiveAnimationsEnabled()) {
         for (const auto& keyframeGroup : keyframeEffectModel->getPropertySpecificKeyframeGroups()) {
             PropertyHandle property = keyframeGroup.key;
diff --git a/third_party/WebKit/Source/core/core.gypi b/third_party/WebKit/Source/core/core.gypi
index 34ab5825..cdefe32b 100644
--- a/third_party/WebKit/Source/core/core.gypi
+++ b/third_party/WebKit/Source/core/core.gypi
@@ -1848,6 +1848,8 @@
             'inspector/InspectorProfilerAgent.h',
             'inspector/InspectorResourceAgent.cpp',
             'inspector/InspectorResourceAgent.h',
+            'inspector/InspectorResourceContainer.cpp',
+            'inspector/InspectorResourceContainer.h',
             'inspector/InspectorResourceContentLoader.cpp',
             'inspector/InspectorResourceContentLoader.h',
             'inspector/InspectorRuntimeAgent.cpp',
diff --git a/third_party/WebKit/Source/core/dom/ActiveDOMObject.cpp b/third_party/WebKit/Source/core/dom/ActiveDOMObject.cpp
index aea22b1f..d84207e 100644
--- a/third_party/WebKit/Source/core/dom/ActiveDOMObject.cpp
+++ b/third_party/WebKit/Source/core/dom/ActiveDOMObject.cpp
@@ -53,11 +53,6 @@
 #if DCHECK_IS_ON()
     DCHECK(m_suspendIfNeededCalled);
 #endif
-
-    // Oilpan: not valid to access getExecutionContext() in the destructor.
-#if !ENABLE(OILPAN)
-    DCHECK(!getExecutionContext() || getExecutionContext()->isContextThread());
-#endif
 }
 
 void ActiveDOMObject::suspendIfNeeded()
diff --git a/third_party/WebKit/Source/core/dom/ChildNodeList.cpp b/third_party/WebKit/Source/core/dom/ChildNodeList.cpp
index 10de9ad..904f89c 100644
--- a/third_party/WebKit/Source/core/dom/ChildNodeList.cpp
+++ b/third_party/WebKit/Source/core/dom/ChildNodeList.cpp
@@ -40,9 +40,6 @@
 
 ChildNodeList::~ChildNodeList()
 {
-#if !ENABLE(OILPAN)
-    m_parent->nodeLists()->removeChildNodeList(this);
-#endif
 }
 
 Node* ChildNodeList::traverseForwardToOffset(unsigned offset, Node& currentNode, unsigned& currentOffset) const
diff --git a/third_party/WebKit/Source/core/dom/ClassCollection.cpp b/third_party/WebKit/Source/core/dom/ClassCollection.cpp
index 2a55cb2..b64dedf 100644
--- a/third_party/WebKit/Source/core/dom/ClassCollection.cpp
+++ b/third_party/WebKit/Source/core/dom/ClassCollection.cpp
@@ -43,9 +43,6 @@
 
 ClassCollection::~ClassCollection()
 {
-#if !ENABLE(OILPAN)
-    ownerNode().nodeLists()->removeCache(this, ClassCollectionType, m_originalClassNames);
-#endif
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/dom/ContainerNode.cpp b/third_party/WebKit/Source/core/dom/ContainerNode.cpp
index bfa2f95..b52be5b 100644
--- a/third_party/WebKit/Source/core/dom/ContainerNode.cpp
+++ b/third_party/WebKit/Source/core/dom/ContainerNode.cpp
@@ -75,15 +75,6 @@
         oldParent->removeChild(&node, exceptionState);
 }
 
-#if !ENABLE(OILPAN)
-void ContainerNode::removeDetachedChildren()
-{
-    DCHECK(!connectedSubframeCount());
-    DCHECK(needsAttach());
-    removeDetachedChildrenInContainer(*this);
-}
-#endif
-
 void ContainerNode::parserTakeAllChildrenFrom(ContainerNode& oldParent)
 {
     while (Node* child = oldParent.firstChild()) {
@@ -96,10 +87,6 @@
 ContainerNode::~ContainerNode()
 {
     DCHECK(needsAttach());
-#if !ENABLE(OILPAN)
-    willBeDeletedFromDocument();
-    removeDetachedChildren();
-#endif
 }
 
 bool ContainerNode::isChildTypeAllowed(const Node& child) const
@@ -166,12 +153,6 @@
 
 Node* ContainerNode::insertBefore(Node* newChild, Node* refChild, ExceptionState& exceptionState)
 {
-#if !ENABLE(OILPAN)
-    // Check that this node is not "floating".
-    // If it is, it can be deleted as a side effect of sending mutation events.
-    DCHECK(refCount() || parentOrShadowHostNode());
-#endif
-
     // insertBefore(node, 0) is equivalent to appendChild(node)
     if (!refChild) {
         return appendChild(newChild, exceptionState);
@@ -332,12 +313,6 @@
 
 Node* ContainerNode::replaceChild(Node* newChild, Node* oldChild, ExceptionState& exceptionState)
 {
-#if !ENABLE(OILPAN)
-    // Check that this node is not "floating".
-    // If it is, it can be deleted as a side effect of sending mutation events.
-    DCHECK(refCount() || parentOrShadowHostNode());
-#endif
-
     if (oldChild == newChild) // Nothing to do.
         return oldChild;
 
@@ -464,75 +439,6 @@
     ChildFrameDisconnector(*this).disconnect(ChildFrameDisconnector::DescendantsOnly);
 }
 
-#if !ENABLE(OILPAN)
-void ContainerNode::removeDetachedChildrenInContainer(ContainerNode& container)
-{
-    // List of nodes to be deleted.
-    Node* head = nullptr;
-    Node* tail = nullptr;
-
-    addChildNodesToDeletionQueue(head, tail, container);
-
-    Node* n;
-    Node* next;
-    while (head) {
-        n = head;
-        ASSERT_WITH_SECURITY_IMPLICATION(n->m_deletionHasBegun);
-
-        next = n->nextSibling();
-        n->setNextSibling(nullptr);
-
-        head = next;
-        if (!next)
-            tail = nullptr;
-
-        if (n->hasChildren())
-            addChildNodesToDeletionQueue(head, tail, toContainerNode(*n));
-
-        delete n;
-    }
-}
-
-void ContainerNode::addChildNodesToDeletionQueue(Node*& head, Node*& tail, ContainerNode& container)
-{
-    // We have to tell all children that their parent has died.
-    Node* next = nullptr;
-    for (Node* n = container.firstChild(); n; n = next) {
-        ASSERT_WITH_SECURITY_IMPLICATION(!n->m_deletionHasBegun);
-
-        next = n->nextSibling();
-        n->setNextSibling(nullptr);
-        n->setParentOrShadowHostNode(nullptr);
-        container.setFirstChild(next);
-        if (next)
-            next->setPreviousSibling(nullptr);
-
-        if (!n->refCount()) {
-            if (n->inShadowIncludingDocument())
-                container.document().decrementNodeCount();
-
-#if ENABLE(SECURITY_ASSERT)
-            n->m_deletionHasBegun = true;
-#endif
-            // Add the node to the list of nodes to be deleted.
-            // Reuse the nextSibling pointer for this purpose.
-            if (tail)
-                tail->setNextSibling(n);
-            else
-                head = n;
-
-            tail = n;
-        } else {
-            container.document().adoptIfNeeded(*n);
-            if (n->inShadowIncludingDocument())
-                container.notifyNodeRemoved(*n);
-        }
-    }
-
-    container.setLastChild(nullptr);
-}
-#endif
-
 DEFINE_TRACE(ContainerNode)
 {
     visitor->trace(m_firstChild);
@@ -542,12 +448,6 @@
 
 Node* ContainerNode::removeChild(Node* oldChild, ExceptionState& exceptionState)
 {
-#if !ENABLE(OILPAN)
-    // Check that this node is not "floating".
-    // If it is, it can be deleted as a side effect of sending mutation events.
-    DCHECK(refCount() || parentOrShadowHostNode());
-#endif
-
     // NotFoundError: Raised if oldChild is not a child of this node.
     // FIXME: We should never really get PseudoElements in here, but editing will sometimes
     // attempt to remove them still. We should fix that and enable this ASSERT.
@@ -669,14 +569,6 @@
         document().nodeChildrenWillBeRemoved(*this);
     }
 
-#if !ENABLE(OILPAN)
-    // FIXME: Remove this NodeVector. Right now WebPluginContainerImpl::m_element is a
-    // raw ptr which means the code below can drop the last ref to a plugin element and
-    // then the code in UpdateSuspendScope::performDeferredWidgetTreeOperations will
-    // try to destroy the plugin which will be a use-after-free. We should use a RefPtr
-    // in the WebPluginContainerImpl instead.
-    NodeVector removedChildren;
-#endif
     {
         HTMLFrameOwnerElement::UpdateSuspendScope suspendWidgetHierarchyUpdates;
         DocumentOrderedMap::RemoveScope treeRemoveScope;
@@ -684,14 +576,8 @@
             EventDispatchForbiddenScope assertNoEventDispatch;
             ScriptForbiddenScope forbidScript;
 
-#if !ENABLE(OILPAN)
-            removedChildren.reserveInitialCapacity(countChildren());
-#endif
             while (Node* child = m_firstChild) {
                 removeBetween(0, child->nextSibling(), *child);
-#if !ENABLE(OILPAN)
-                removedChildren.append(child);
-#endif
                 notifyNodeRemoved(*child);
             }
         }
@@ -707,12 +593,6 @@
 Node* ContainerNode::appendChild(Node* newChild, ExceptionState& exceptionState)
 {
 
-#if !ENABLE(OILPAN)
-    // Check that this node is not "floating".
-    // If it is, it can be deleted as a side effect of sending mutation events.
-    DCHECK(refCount() || parentOrShadowHostNode());
-#endif
-
     // Make sure adding the new child is ok
     if (!checkAcceptChild(newChild, 0, exceptionState)) {
         if (exceptionState.hadException())
@@ -1274,11 +1154,6 @@
 
 void ContainerNode::updateTreeAfterInsertion(Node& child)
 {
-#if !ENABLE(OILPAN)
-    DCHECK(refCount());
-    DCHECK(child.refCount());
-#endif
-
     ChildListMutationScope(*this).childAdded(child);
 
     notifyNodeInserted(child);
diff --git a/third_party/WebKit/Source/core/dom/ContainerNode.h b/third_party/WebKit/Source/core/dom/ContainerNode.h
index 36334042..0b6302c 100644
--- a/third_party/WebKit/Source/core/dom/ContainerNode.h
+++ b/third_party/WebKit/Source/core/dom/ContainerNode.h
@@ -215,10 +215,6 @@
 
     void invalidateNodeListCachesInAncestors(const QualifiedName* attrName = nullptr, Element* attributeOwnerElement = nullptr);
 
-#if !ENABLE(OILPAN)
-    void removeDetachedChildren();
-#endif
-
     void setFirstChild(Node* child) { m_firstChild = child; }
     void setLastChild(Node* child) { m_lastChild = child; }
 
diff --git a/third_party/WebKit/Source/core/dom/DOMImplementation.h b/third_party/WebKit/Source/core/dom/DOMImplementation.h
index 5428033..6d32ee0 100644
--- a/third_party/WebKit/Source/core/dom/DOMImplementation.h
+++ b/third_party/WebKit/Source/core/dom/DOMImplementation.h
@@ -46,10 +46,6 @@
         return new DOMImplementation(document);
     }
 
-#if !ENABLE(OILPAN)
-    void ref() { m_document->ref(); }
-    void deref() { m_document->deref(); }
-#endif
     Document& document() const { return *m_document; }
 
     // DOM methods & attributes for DOMImplementation
diff --git a/third_party/WebKit/Source/core/dom/DOMNodeIds.cpp b/third_party/WebKit/Source/core/dom/DOMNodeIds.cpp
index 1baf4b2..abcfac3a 100644
--- a/third_party/WebKit/Source/core/dom/DOMNodeIds.cpp
+++ b/third_party/WebKit/Source/core/dom/DOMNodeIds.cpp
@@ -10,18 +10,6 @@
 
 DEFINE_WEAK_IDENTIFIER_MAP(Node);
 
-#if !ENABLE(OILPAN)
-void WeakIdentifierMapTraits<Node>::removedFromIdentifierMap(Node* node)
-{
-    node->clearFlag(Node::HasWeakReferencesFlag);
-}
-
-void WeakIdentifierMapTraits<Node>::addedToIdentifierMap(Node* node)
-{
-    node->setFlag(Node::HasWeakReferencesFlag);
-}
-#endif
-
 // static
 int DOMNodeIds::idForNode(Node* node)
 {
diff --git a/third_party/WebKit/Source/core/dom/DOMNodeIds.h b/third_party/WebKit/Source/core/dom/DOMNodeIds.h
index 52023a4..2b09de72 100644
--- a/third_party/WebKit/Source/core/dom/DOMNodeIds.h
+++ b/third_party/WebKit/Source/core/dom/DOMNodeIds.h
@@ -12,13 +12,6 @@
 
 namespace blink {
 
-#if !ENABLE(OILPAN)
-template<> struct WeakIdentifierMapTraits<Node> {
-    static void removedFromIdentifierMap(Node*);
-    static void addedToIdentifierMap(Node*);
-};
-#endif
-
 DECLARE_WEAK_IDENTIFIER_MAP(Node);
 
 class CORE_EXPORT DOMNodeIds {
diff --git a/third_party/WebKit/Source/core/dom/DOMStringMap.h b/third_party/WebKit/Source/core/dom/DOMStringMap.h
index 81e1731..42d5e99 100644
--- a/third_party/WebKit/Source/core/dom/DOMStringMap.h
+++ b/third_party/WebKit/Source/core/dom/DOMStringMap.h
@@ -42,11 +42,6 @@
     DEFINE_WRAPPERTYPEINFO();
     WTF_MAKE_NONCOPYABLE(DOMStringMap);
 public:
-#if !ENABLE(OILPAN)
-    virtual void ref() = 0;
-    virtual void deref() = 0;
-#endif
-
     virtual void getNames(Vector<String>&) = 0;
     virtual String item(const String& name) = 0;
     virtual bool contains(const String& name) = 0;
diff --git a/third_party/WebKit/Source/core/dom/DatasetDOMStringMap.cpp b/third_party/WebKit/Source/core/dom/DatasetDOMStringMap.cpp
index 6f0c972..57546a5 100644
--- a/third_party/WebKit/Source/core/dom/DatasetDOMStringMap.cpp
+++ b/third_party/WebKit/Source/core/dom/DatasetDOMStringMap.cpp
@@ -141,18 +141,6 @@
     return builder.toAtomicString();
 }
 
-#if !ENABLE(OILPAN)
-void DatasetDOMStringMap::ref()
-{
-    m_element->ref();
-}
-
-void DatasetDOMStringMap::deref()
-{
-    m_element->deref();
-}
-#endif
-
 void DatasetDOMStringMap::getNames(Vector<String>& names)
 {
     AttributeCollection attributes = m_element->attributes();
diff --git a/third_party/WebKit/Source/core/dom/DatasetDOMStringMap.h b/third_party/WebKit/Source/core/dom/DatasetDOMStringMap.h
index 7c7e9a06..8ad8552 100644
--- a/third_party/WebKit/Source/core/dom/DatasetDOMStringMap.h
+++ b/third_party/WebKit/Source/core/dom/DatasetDOMStringMap.h
@@ -41,11 +41,6 @@
         return new DatasetDOMStringMap(element);
     }
 
-#if !ENABLE(OILPAN)
-    void ref() override;
-    void deref() override;
-#endif
-
     void getNames(Vector<String>&) override;
     String item(const String& name) override;
     bool contains(const String& name) override;
diff --git a/third_party/WebKit/Source/core/dom/DocumentParser.cpp b/third_party/WebKit/Source/core/dom/DocumentParser.cpp
index ca62da4..0faa590 100644
--- a/third_party/WebKit/Source/core/dom/DocumentParser.cpp
+++ b/third_party/WebKit/Source/core/dom/DocumentParser.cpp
@@ -42,12 +42,6 @@
 
 DocumentParser::~DocumentParser()
 {
-#if !ENABLE(OILPAN)
-    // Document is expected to call detach() before releasing its ref.
-    // This ASSERT is slightly awkward for parsers with a fragment case
-    // as there is no Document to release the ref.
-    DCHECK(!m_document);
-#endif
 }
 
 DEFINE_TRACE(DocumentParser)
diff --git a/third_party/WebKit/Source/core/dom/DocumentStatisticsCollectorTest.cpp b/third_party/WebKit/Source/core/dom/DocumentStatisticsCollectorTest.cpp
index b41df27..b0b543b 100644
--- a/third_party/WebKit/Source/core/dom/DocumentStatisticsCollectorTest.cpp
+++ b/third_party/WebKit/Source/core/dom/DocumentStatisticsCollectorTest.cpp
@@ -27,12 +27,10 @@
 protected:
     void SetUp() override;
 
-#if ENABLE(OILPAN)
     void TearDown() override
     {
         ThreadHeap::collectAllGarbage();
     }
-#endif
 
     Document& document() const { return m_dummyPageHolder->document(); }
 
diff --git a/third_party/WebKit/Source/core/dom/DocumentTest.cpp b/third_party/WebKit/Source/core/dom/DocumentTest.cpp
index d96b440d..22ccdcc6 100644
--- a/third_party/WebKit/Source/core/dom/DocumentTest.cpp
+++ b/third_party/WebKit/Source/core/dom/DocumentTest.cpp
@@ -48,12 +48,10 @@
 protected:
     void SetUp() override;
 
-#if ENABLE(OILPAN)
     void TearDown() override
     {
         ThreadHeap::collectAllGarbage();
     }
-#endif
 
     Document& document() const { return m_dummyPageHolder->document(); }
     Page& page() const { return m_dummyPageHolder->page(); }
diff --git a/third_party/WebKit/Source/core/dom/DocumentVisibilityObserver.cpp b/third_party/WebKit/Source/core/dom/DocumentVisibilityObserver.cpp
index 9d51005..d683ab29 100644
--- a/third_party/WebKit/Source/core/dom/DocumentVisibilityObserver.cpp
+++ b/third_party/WebKit/Source/core/dom/DocumentVisibilityObserver.cpp
@@ -16,9 +16,6 @@
 
 DocumentVisibilityObserver::~DocumentVisibilityObserver()
 {
-#if !ENABLE(OILPAN)
-    unregisterObserver();
-#endif
 }
 
 DEFINE_TRACE(DocumentVisibilityObserver)
diff --git a/third_party/WebKit/Source/core/dom/Element.cpp b/third_party/WebKit/Source/core/dom/Element.cpp
index 90aaf5d..fe8f945 100644
--- a/third_party/WebKit/Source/core/dom/Element.cpp
+++ b/third_party/WebKit/Source/core/dom/Element.cpp
@@ -174,29 +174,6 @@
 Element::~Element()
 {
     DCHECK(needsAttach());
-
-#if !ENABLE(OILPAN)
-    if (hasRareData()) {
-        elementRareData()->clearShadow();
-        detachAllAttrNodesFromElement();
-    }
-
-    if (isCustomElement())
-        CustomElement::wasDestroyed(this);
-
-    if (RuntimeEnabledFeatures::scrollCustomizationEnabled())
-        scrollCustomizationCallbacks().removeCallbacksForElement(this);
-
-    // With Oilpan, either the Element has been removed from the Document
-    // or the Document is dead as well. If the Element has been removed from
-    // the Document the element has already been removed from the pending
-    // resources. If the document is also dead, there is no need to remove
-    // the element from the pending resources.
-    if (hasPendingResources()) {
-        document().accessSVGExtensions().removeElementFromPendingResources(this);
-        DCHECK(!hasPendingResources());
-    }
-#endif
 }
 
 inline ElementRareData* Element::elementRareData() const
diff --git a/third_party/WebKit/Source/core/dom/ElementData.cpp b/third_party/WebKit/Source/core/dom/ElementData.cpp
index ccae12f2e..5a5a4579 100644
--- a/third_party/WebKit/Source/core/dom/ElementData.cpp
+++ b/third_party/WebKit/Source/core/dom/ElementData.cpp
@@ -79,7 +79,6 @@
     // NOTE: The inline style is copied by the subclass copy constructor since we don't know what to do with it here.
 }
 
-#if ENABLE(OILPAN)
 void ElementData::finalizeGarbageCollectedObject()
 {
     if (m_isUnique)
@@ -87,15 +86,6 @@
     else
         toShareableElementData(this)->~ShareableElementData();
 }
-#else
-void ElementData::destroy()
-{
-    if (m_isUnique)
-        delete toUniqueElementData(this);
-    else
-        delete toShareableElementData(this);
-}
-#endif
 
 UniqueElementData* ElementData::makeUniqueCopy() const
 {
diff --git a/third_party/WebKit/Source/core/dom/ElementData.h b/third_party/WebKit/Source/core/dom/ElementData.h
index 4683290d..6f7d437 100644
--- a/third_party/WebKit/Source/core/dom/ElementData.h
+++ b/third_party/WebKit/Source/core/dom/ElementData.h
@@ -48,15 +48,9 @@
 // data such as attributes, inline style, and parsed class names and ids.
 class ElementData : public GarbageCollectedFinalized<ElementData> {
 public:
-#if ENABLE(OILPAN)
     // Override GarbageCollectedFinalized's finalizeGarbageCollectedObject to
     // dispatch to the correct subclass destructor.
     void finalizeGarbageCollectedObject();
-#else
-    // Override RefCounted's deref() to ensure operator delete is called on
-    // the appropriate subclass type.
-    void deref();
-#endif
 
     void clearClass() const { m_classNames.clear(); }
     void setClass(const AtomicString& className, bool shouldFoldCase) const { m_classNames.set(shouldFoldCase ? className.lowerASCII() : className , SpaceSplitString::ShouldNotFoldCase); }
@@ -103,10 +97,6 @@
     friend class UniqueElementData;
     friend class SVGElement;
 
-#if !ENABLE(OILPAN)
-    void destroy();
-#endif
-
     UniqueElementData* makeUniqueCopy() const;
 };
 
@@ -184,15 +174,6 @@
 
 DEFINE_ELEMENT_DATA_TYPE_CASTS(UniqueElementData, data->isUnique(), data.isUnique());
 
-#if !ENABLE(OILPAN)
-inline void ElementData::deref()
-{
-    if (!derefBase())
-        return;
-    destroy();
-}
-#endif
-
 inline const StylePropertySet* ElementData::presentationAttributeStyle() const
 {
     if (!m_isUnique)
diff --git a/third_party/WebKit/Source/core/dom/ElementRareData.h b/third_party/WebKit/Source/core/dom/ElementRareData.h
index 4320bab..31c1a34f 100644
--- a/third_party/WebKit/Source/core/dom/ElementRareData.h
+++ b/third_party/WebKit/Source/core/dom/ElementRareData.h
@@ -187,13 +187,6 @@
 
 inline ElementRareData::~ElementRareData()
 {
-#if !ENABLE(OILPAN)
-    if (m_elementAnimations)
-        m_elementAnimations->dispose();
-    if (m_intersectionObserverData)
-        m_intersectionObserverData->dispose();
-    DCHECK(!m_shadow);
-#endif
     DCHECK(!m_generatedBefore);
     DCHECK(!m_generatedAfter);
     DCHECK(!m_generatedFirstLetter);
diff --git a/third_party/WebKit/Source/core/dom/EmptyNodeList.cpp b/third_party/WebKit/Source/core/dom/EmptyNodeList.cpp
index 5a009f21..03c104b 100644
--- a/third_party/WebKit/Source/core/dom/EmptyNodeList.cpp
+++ b/third_party/WebKit/Source/core/dom/EmptyNodeList.cpp
@@ -38,9 +38,6 @@
 
 EmptyNodeList::~EmptyNodeList()
 {
-#if !ENABLE(OILPAN)
-    m_owner->nodeLists()->removeEmptyChildNodeList(this);
-#endif
 }
 
 Node* EmptyNodeList::virtualOwnerNode() const
diff --git a/third_party/WebKit/Source/core/dom/ExecutionContext.h b/third_party/WebKit/Source/core/dom/ExecutionContext.h
index 3fd1e9e..bd56227 100644
--- a/third_party/WebKit/Source/core/dom/ExecutionContext.h
+++ b/third_party/WebKit/Source/core/dom/ExecutionContext.h
@@ -130,10 +130,6 @@
 
     // Called after the construction of an ActiveDOMObject to synchronize suspend state.
     void suspendActiveDOMObjectIfNeeded(ActiveDOMObject*);
-#if !ENABLE(OILPAN)
-    void ref() { refExecutionContext(); }
-    void deref() { derefExecutionContext(); }
-#endif
 
     // Gets the next id in a circular sequence from 1 to 2^31-1.
     int circularSequentialID();
@@ -167,12 +163,6 @@
     bool dispatchErrorEvent(ErrorEvent*, AccessControlStatus);
     void runSuspendableTasks();
 
-#if !ENABLE(OILPAN)
-    virtual void refExecutionContext() = 0;
-    virtual void derefExecutionContext() = 0;
-#endif
-    // LifecycleContext implementation.
-
     unsigned m_circularSequentialID;
 
     bool m_inDispatchErrorEvent;
diff --git a/third_party/WebKit/Source/core/dom/IdTargetObserver.cpp b/third_party/WebKit/Source/core/dom/IdTargetObserver.cpp
index 2521217..435419b5 100644
--- a/third_party/WebKit/Source/core/dom/IdTargetObserver.cpp
+++ b/third_party/WebKit/Source/core/dom/IdTargetObserver.cpp
@@ -38,9 +38,6 @@
 
 IdTargetObserver::~IdTargetObserver()
 {
-#if !ENABLE(OILPAN)
-    registry().removeObserver(m_id, this);
-#endif
 }
 
 DEFINE_TRACE(IdTargetObserver)
@@ -50,9 +47,7 @@
 
 void IdTargetObserver::unregister()
 {
-#if ENABLE(OILPAN)
     registry().removeObserver(m_id, this);
-#endif
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/dom/IntersectionObserver.cpp b/third_party/WebKit/Source/core/dom/IntersectionObserver.cpp
index 5fff24b7..805d4d35 100644
--- a/third_party/WebKit/Source/core/dom/IntersectionObserver.cpp
+++ b/third_party/WebKit/Source/core/dom/IntersectionObserver.cpp
@@ -151,7 +151,6 @@
     root.document().ensureIntersectionObserverController().addTrackedObserver(*this);
 }
 
-#if ENABLE(OILPAN)
 void IntersectionObserver::clearWeakMembers(Visitor* visitor)
 {
     if (ThreadHeap::isHeapObjectAlive(m_root))
@@ -159,7 +158,6 @@
     disconnect();
     m_root = nullptr;
 }
-#endif
 
 LayoutObject* IntersectionObserver::rootLayoutObject() const
 {
diff --git a/third_party/WebKit/Source/core/dom/LiveNodeListBase.h b/third_party/WebKit/Source/core/dom/LiveNodeListBase.h
index 1408bbb..221e776 100644
--- a/third_party/WebKit/Source/core/dom/LiveNodeListBase.h
+++ b/third_party/WebKit/Source/core/dom/LiveNodeListBase.h
@@ -57,9 +57,6 @@
 
     virtual ~LiveNodeListBase()
     {
-#if !ENABLE(OILPAN)
-        document().unregisterNodeList(this);
-#endif
     }
 
     ContainerNode& rootNode() const;
diff --git a/third_party/WebKit/Source/core/dom/MainThreadTaskRunner.cpp b/third_party/WebKit/Source/core/dom/MainThreadTaskRunner.cpp
index 2c0df11..5036c65 100644
--- a/third_party/WebKit/Source/core/dom/MainThreadTaskRunner.cpp
+++ b/third_party/WebKit/Source/core/dom/MainThreadTaskRunner.cpp
@@ -37,9 +37,6 @@
 
 MainThreadTaskRunner::MainThreadTaskRunner(ExecutionContext* context)
     : m_context(context)
-#if !ENABLE(OILPAN)
-    , m_weakFactory(this)
-#endif
     , m_pendingTasksTimer(this, &MainThreadTaskRunner::pendingTasksTimerFired)
     , m_suspended(false)
 {
@@ -58,11 +55,7 @@
 {
     Platform::current()->mainThread()->getWebTaskRunner()->postTask(location, threadSafeBind(
         &MainThreadTaskRunner::perform,
-#if ENABLE(OILPAN)
         CrossThreadWeakPersistentThisPointer<MainThreadTaskRunner>(this),
-#else
-        AllowCrossThreadAccess(m_weakFactory.createWeakPtr()),
-#endif
         task,
         isInspectorTask));
 }
diff --git a/third_party/WebKit/Source/core/dom/MainThreadTaskRunner.h b/third_party/WebKit/Source/core/dom/MainThreadTaskRunner.h
index 3977f31..efcc7dc 100644
--- a/third_party/WebKit/Source/core/dom/MainThreadTaskRunner.h
+++ b/third_party/WebKit/Source/core/dom/MainThreadTaskRunner.h
@@ -35,7 +35,6 @@
 #include "wtf/OwnPtr.h"
 #include "wtf/PassOwnPtr.h"
 #include "wtf/Vector.h"
-#include "wtf/WeakPtr.h"
 
 namespace blink {
 
@@ -66,9 +65,6 @@
     void postTaskInternal(const WebTraceLocation&, PassOwnPtr<ExecutionContextTask>, bool isInspectorTask);
 
     Member<ExecutionContext> m_context;
-#if !ENABLE(OILPAN)
-    WeakPtrFactory<MainThreadTaskRunner> m_weakFactory;
-#endif
     Timer<MainThreadTaskRunner> m_pendingTasksTimer;
     Vector<OwnPtr<ExecutionContextTask>> m_pendingTasks;
     bool m_suspended;
diff --git a/third_party/WebKit/Source/core/dom/MutationObserver.cpp b/third_party/WebKit/Source/core/dom/MutationObserver.cpp
index 7f3c259..3c2625ab 100644
--- a/third_party/WebKit/Source/core/dom/MutationObserver.cpp
+++ b/third_party/WebKit/Source/core/dom/MutationObserver.cpp
@@ -66,9 +66,6 @@
 
 MutationObserver::~MutationObserver()
 {
-#if !ENABLE(OILPAN)
-    DCHECK(m_registrations.isEmpty());
-#endif
     cancelInspectorAsyncTasks();
 }
 
diff --git a/third_party/WebKit/Source/core/dom/MutationObserverRegistration.cpp b/third_party/WebKit/Source/core/dom/MutationObserverRegistration.cpp
index e72c3b989..0c321a1 100644
--- a/third_party/WebKit/Source/core/dom/MutationObserverRegistration.cpp
+++ b/third_party/WebKit/Source/core/dom/MutationObserverRegistration.cpp
@@ -51,9 +51,6 @@
 
 MutationObserverRegistration::~MutationObserverRegistration()
 {
-#if !ENABLE(OILPAN)
-    dispose();
-#endif
 }
 
 void MutationObserverRegistration::dispose()
diff --git a/third_party/WebKit/Source/core/dom/NameNodeList.cpp b/third_party/WebKit/Source/core/dom/NameNodeList.cpp
index 1ccc113..a7c74bf 100644
--- a/third_party/WebKit/Source/core/dom/NameNodeList.cpp
+++ b/third_party/WebKit/Source/core/dom/NameNodeList.cpp
@@ -38,9 +38,6 @@
 
 NameNodeList::~NameNodeList()
 {
-#if !ENABLE(OILPAN)
-    ownerNode().nodeLists()->removeCache(this, NameNodeListType, m_name);
-#endif
 }
 
 bool NameNodeList::elementMatches(const Element& element) const
diff --git a/third_party/WebKit/Source/core/dom/NamedNodeMap.cpp b/third_party/WebKit/Source/core/dom/NamedNodeMap.cpp
index 00e7a38..dd2937f 100644
--- a/third_party/WebKit/Source/core/dom/NamedNodeMap.cpp
+++ b/third_party/WebKit/Source/core/dom/NamedNodeMap.cpp
@@ -33,18 +33,6 @@
 
 using namespace HTMLNames;
 
-#if !ENABLE(OILPAN)
-void NamedNodeMap::ref()
-{
-    m_element->ref();
-}
-
-void NamedNodeMap::deref()
-{
-    m_element->deref();
-}
-#endif
-
 Attr* NamedNodeMap::getNamedItem(const AtomicString& name) const
 {
     return m_element->getAttributeNode(name);
diff --git a/third_party/WebKit/Source/core/dom/NamedNodeMap.h b/third_party/WebKit/Source/core/dom/NamedNodeMap.h
index b8a5ee9..f9a33f6 100644
--- a/third_party/WebKit/Source/core/dom/NamedNodeMap.h
+++ b/third_party/WebKit/Source/core/dom/NamedNodeMap.h
@@ -43,11 +43,6 @@
         return new NamedNodeMap(element);
     }
 
-#if !ENABLE(OILPAN)
-    void ref();
-    void deref();
-#endif
-
     // Public DOM interface.
 
     Attr* getNamedItem(const AtomicString&) const;
diff --git a/third_party/WebKit/Source/core/dom/Node.cpp b/third_party/WebKit/Source/core/dom/Node.cpp
index dcb18417..7ff2643 100644
--- a/third_party/WebKit/Source/core/dom/Node.cpp
+++ b/third_party/WebKit/Source/core/dom/Node.cpp
@@ -102,7 +102,7 @@
 
 using namespace HTMLNames;
 
-struct SameSizeAsNode : NODE_BASE_CLASSES {
+struct SameSizeAsNode : EventTarget {
     uint32_t m_nodeFlags;
     Member<void*> m_willbeMember[4];
     void* m_pointer;
@@ -110,20 +110,6 @@
 
 static_assert(sizeof(Node) <= sizeof(SameSizeAsNode), "Node should stay small");
 
-#if !ENABLE(OILPAN)
-void* Node::operator new(size_t size)
-{
-    DCHECK(isMainThread());
-    return partitionAlloc(WTF::Partitions::nodePartition(), size, "blink::Node");
-}
-
-void Node::operator delete(void* ptr)
-{
-    DCHECK(isMainThread());
-    partitionFree(ptr);
-}
-#endif
-
 #if DUMP_NODE_STATISTICS
 using WeakNodeSet = HeapHashSet<WeakMember<Node>>;
 static WeakNodeSet& liveNodeSet()
@@ -265,11 +251,6 @@
     , m_next(nullptr)
 {
     DCHECK(m_treeScope || type == CreateDocument || type == CreateShadowRoot);
-#if !ENABLE(OILPAN)
-    if (m_treeScope)
-        m_treeScope->guardRef();
-#endif
-
 #if !defined(NDEBUG) || (defined(DUMP_NODE_STATISTICS) && DUMP_NODE_STATISTICS)
     trackForDebugging();
 #endif
@@ -278,61 +259,12 @@
 
 Node::~Node()
 {
-#if !ENABLE(OILPAN)
-#if DUMP_NODE_STATISTICS
-    liveNodeSet().remove(this);
-#endif
-
-    if (hasRareData())
-        clearRareData();
-
-    RELEASE_ASSERT(!layoutObject());
-
-    if (!isContainerNode())
-        willBeDeletedFromDocument();
-
-    if (m_previous)
-        m_previous->setNextSibling(nullptr);
-    if (m_next)
-        m_next->setPreviousSibling(nullptr);
-
-    if (m_treeScope)
-        m_treeScope->guardDeref();
-
-    if (getFlag(HasWeakReferencesFlag))
-        WeakIdentifierMap<Node>::notifyObjectDestroyed(this);
-
-    // clearEventTargetData() must be always done,
-    // or eventTargetDataMap() may keep a raw pointer to a deleted object.
-    DCHECK(!hasEventTargetData());
-#else
     // With Oilpan, the rare data finalizer also asserts for
     // this condition (we cannot directly access it here.)
     RELEASE_ASSERT(hasRareData() || !layoutObject());
-#endif
-
     InstanceCounters::decrementCounter(InstanceCounters::NodeCounter);
 }
 
-#if !ENABLE(OILPAN)
-// With Oilpan all of this is handled with weak processing of the document.
-void Node::willBeDeletedFromDocument()
-{
-    if (hasEventTargetData())
-        clearEventTargetData();
-
-    if (!isTreeScopeInitialized())
-        return;
-
-    Document& document = this->document();
-
-    if (document.frameHost())
-        document.frameHost()->eventHandlerRegistry().didRemoveAllEventHandlers(*this);
-
-    document.markers().removeMarkers(this);
-}
-#endif
-
 NodeRareData* Node::rareData() const
 {
     ASSERT_WITH_SECURITY_IMPLICATION(hasRareData());
@@ -355,22 +287,6 @@
     return *rareData();
 }
 
-#if !ENABLE(OILPAN)
-void Node::clearRareData()
-{
-    DCHECK(hasRareData());
-    DCHECK(!transientMutationObserverRegistry() || transientMutationObserverRegistry()->isEmpty());
-
-    LayoutObject* layoutObject = m_data.m_rareData->layoutObject();
-    if (isElementNode())
-        delete static_cast<ElementRareData*>(m_data.m_rareData);
-    else
-        delete static_cast<NodeRareData*>(m_data.m_rareData);
-    m_data.m_layoutObject = layoutObject;
-    clearFlag(HasRareDataFlag);
-}
-#endif
-
 Node* Node::toNode()
 {
     return this;
@@ -843,15 +759,6 @@
     return false;
 }
 
-Node* Node::retarget(const Node& target) const
-{
-    for (const Node* ancestor = &target; ancestor; ancestor = ancestor->shadowHost()) {
-        if (treeScope() == ancestor->treeScope())
-            return const_cast<Node*>(ancestor);
-    }
-    return nullptr;
-}
-
 bool Node::containsIncludingHostElements(const Node& node) const
 {
     const Node* current = &node;
@@ -1940,16 +1847,6 @@
     return *data;
 }
 
-#if !ENABLE(OILPAN)
-void Node::clearEventTargetData()
-{
-    eventTargetDataMap().remove(this);
-#if DCHECK_IS_ON()
-    setHasEventTargetData(false);
-#endif
-}
-#endif
-
 HeapVector<Member<MutationObserverRegistration>>* Node::mutationObserverRegistry()
 {
     if (!hasRareData())
@@ -2030,11 +1927,9 @@
         return;
 
     // FIXME: Simplify the registration/transient registration logic to make this understandable by humans.
-#if ENABLE(OILPAN)
     // The explicit dispose() is needed to have the registration
     // object unregister itself promptly.
     registration->dispose();
-#endif
     registry->remove(index);
 }
 
@@ -2236,53 +2131,6 @@
     return hasEventListeners(EventTypeNames::touchstart) || hasEventListeners(EventTypeNames::touchmove) || hasEventListeners(EventTypeNames::touchcancel) || hasEventListeners(EventTypeNames::touchend);
 }
 
-#if !ENABLE(OILPAN)
-// This is here for inlining
-inline void TreeScope::removedLastRefToScope()
-{
-    ASSERT_WITH_SECURITY_IMPLICATION(!deletionHasBegun());
-    if (m_guardRefCount) {
-        // If removing a child removes the last self-only ref, we don't
-        // want the scope to be destructed until after
-        // removeDetachedChildren returns, so we guard ourselves with an
-        // extra self-only ref.
-        guardRef();
-        dispose();
-#if DCHECK_IS_ON()
-        // We need to do this right now since guardDeref() can delete this.
-        rootNode().m_inRemovedLastRefFunction = false;
-#endif
-        guardDeref();
-    } else {
-#if DCHECK_IS_ON()
-        rootNode().m_inRemovedLastRefFunction = false;
-#endif
-#if ENABLE(SECURITY_ASSERT)
-        beginDeletion();
-#endif
-        delete this;
-    }
-}
-
-// It's important not to inline removedLastRef, because we don't want to inline the code to
-// delete a Node at each deref call site.
-void Node::removedLastRef()
-{
-    // An explicit check for Document here is better than a virtual function since it is
-    // faster for non-Document nodes, and because the call to removedLastRef that is inlined
-    // at all deref call sites is smaller if it's a non-virtual function.
-    if (isTreeScope()) {
-        treeScope().removedLastRefToScope();
-        return;
-    }
-
-#if ENABLE(SECURITY_ASSERT)
-    m_deletionHasBegun = true;
-#endif
-    delete this;
-}
-#endif
-
 unsigned Node::connectedSubframeCount() const
 {
     return hasRareData() ? rareData()->connectedSubframeCount() : 0;
diff --git a/third_party/WebKit/Source/core/dom/Node.h b/third_party/WebKit/Source/core/dom/Node.h
index 794aefb..27e30a4 100644
--- a/third_party/WebKit/Source/core/dom/Node.h
+++ b/third_party/WebKit/Source/core/dom/Node.h
@@ -88,9 +88,6 @@
 class TagCollection;
 class Text;
 class TouchEvent;
-#if !ENABLE(OILPAN)
-template <typename T> struct WeakIdentifierMapTraits;
-#endif
 
 const int nodeStyleChangeShift = 19;
 
@@ -120,19 +117,9 @@
 class Node;
 WILL_NOT_BE_EAGERLY_TRACED_CLASS(Node);
 
-#if ENABLE(OILPAN)
-#define NODE_BASE_CLASSES public EventTarget
-#else
-// TreeShared should be the last to pack TreeShared::m_refCount and
-// Node::m_nodeFlags on 64bit platforms.
-#define NODE_BASE_CLASSES public EventTarget, public TreeShared<Node>
-#endif
-
 // This class represents a DOM node in the DOM tree.
 // https://dom.spec.whatwg.org/#interface-node
-class CORE_EXPORT Node : NODE_BASE_CLASSES {
-#if !ENABLE(OILPAN)
-#endif
+class CORE_EXPORT Node : public EventTarget {
     DEFINE_WRAPPERTYPEINFO();
     friend class TreeScope;
     friend class TreeScopeAdopter;
@@ -170,7 +157,6 @@
         DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20,
     };
 
-#if ENABLE(OILPAN)
     // Override operator new to allocate Node subtype objects onto
     // a dedicated heap.
     GC_PLUGIN_IGNORE("crbug.com/443854")
@@ -184,12 +170,6 @@
         const char typeName[] = "blink::Node";
         return ThreadHeap::allocateOnArenaIndex(state, size, isEager ? BlinkGC::EagerSweepArenaIndex : BlinkGC::NodeArenaIndex, GCInfoTrait<EventTarget>::index(), typeName);
     }
-#else // !ENABLE(OILPAN)
-    // All Nodes are placed in their own heap partition for security.
-    // See http://crbug.com/246860 for detail.
-    void* operator new(size_t);
-    void operator delete(void*);
-#endif
 
     static void dumpStatistics();
 
@@ -222,8 +202,6 @@
     Node* pseudoAwareFirstChild() const;
     Node* pseudoAwareLastChild() const;
 
-    Node* retarget(const Node& target) const;
-
     const KURL& baseURI() const;
 
     Node* insertBefore(Node* newChild, Node* refChild, ExceptionState& = ASSERT_NO_EXCEPTION);
@@ -769,19 +747,10 @@
 
     static void reattachWhitespaceSiblingsIfNeeded(Text* start);
 
-#if !ENABLE(OILPAN)
-    void willBeDeletedFromDocument();
-#endif
-
     bool hasRareData() const { return getFlag(HasRareDataFlag); }
 
     NodeRareData* rareData() const;
     NodeRareData& ensureRareData();
-#if !ENABLE(OILPAN)
-    void clearRareData();
-
-    void clearEventTargetData();
-#endif
 
     void setHasCustomStyleCallbacks() { setFlag(true, HasCustomStyleCallbacksFlag); }
 
@@ -798,12 +767,7 @@
 
 private:
     friend class TreeShared<Node>;
-#if !ENABLE(OILPAN)
-    // FIXME: consider exposing proper API for this instead.
-    friend struct WeakIdentifierMapTraits<Node>;
 
-    void removedLastRef();
-#endif
     bool hasTreeSharedParent() const { return !!parentOrShadowHostNode(); }
 
     // Gets nodeName without caching AtomicStrings. Used by
diff --git a/third_party/WebKit/Source/core/dom/NodeIterator.cpp b/third_party/WebKit/Source/core/dom/NodeIterator.cpp
index 3f8fb631..3110394 100644
--- a/third_party/WebKit/Source/core/dom/NodeIterator.cpp
+++ b/third_party/WebKit/Source/core/dom/NodeIterator.cpp
@@ -80,14 +80,6 @@
         root()->document().attachNodeIterator(this);
 }
 
-#if !ENABLE(OILPAN)
-NodeIterator::~NodeIterator()
-{
-    if (!root()->isAttributeNode())
-        root()->document().detachNodeIterator(this);
-}
-#endif
-
 Node* NodeIterator::nextNode(ExceptionState& exceptionState)
 {
     Node* result = nullptr;
diff --git a/third_party/WebKit/Source/core/dom/NodeIterator.h b/third_party/WebKit/Source/core/dom/NodeIterator.h
index d49f8d3..d2cb390f 100644
--- a/third_party/WebKit/Source/core/dom/NodeIterator.h
+++ b/third_party/WebKit/Source/core/dom/NodeIterator.h
@@ -43,10 +43,6 @@
         return new NodeIterator(rootNode, whatToShow, filter);
     }
 
-#if !ENABLE(OILPAN)
-    ~NodeIterator();
-#endif
-
     Node* nextNode(ExceptionState&);
     Node* previousNode(ExceptionState&);
     void detach();
diff --git a/third_party/WebKit/Source/core/dom/NodeListsNodeData.h b/third_party/WebKit/Source/core/dom/NodeListsNodeData.h
index a085bf1..67615e6 100644
--- a/third_party/WebKit/Source/core/dom/NodeListsNodeData.h
+++ b/third_party/WebKit/Source/core/dom/NodeListsNodeData.h
@@ -60,24 +60,6 @@
         return list;
     }
 
-#if !ENABLE(OILPAN)
-    void removeChildNodeList(ChildNodeList* list)
-    {
-        DCHECK_EQ(m_childNodeList, list);
-        if (deleteThisAndUpdateNodeRareDataIfAboutToRemoveLastList(list->ownerNode()))
-            return;
-        m_childNodeList = nullptr;
-    }
-
-    void removeEmptyChildNodeList(EmptyNodeList* list)
-    {
-        DCHECK_EQ(m_childNodeList, list);
-        if (deleteThisAndUpdateNodeRareDataIfAboutToRemoveLastList(list->ownerNode()))
-            return;
-        m_childNodeList = nullptr;
-    }
-#endif
-
     struct NodeListAtomicCacheMapEntryHash {
         STATIC_ONLY(NodeListAtomicCacheMapEntryHash);
         static unsigned hash(const std::pair<unsigned char, StringImpl*>& entry)
@@ -89,9 +71,7 @@
     };
 
     // Oilpan: keep a weak reference to the collection objects.
-    // Explicit object unregistration in a non-Oilpan setting
-    // on object destruction is replaced by the garbage collector
-    // clearing out their weak reference.
+    // Object unregistration is handled by GC's weak processing.
     typedef HeapHashMap<std::pair<unsigned char, StringImpl*>, WeakMember<LiveNodeListBase>, NodeListAtomicCacheMapEntryHash> NodeListAtomicNameCacheMap;
     typedef HeapHashMap<QualifiedName, WeakMember<TagCollection>> TagCollectionCacheNS;
 
@@ -100,11 +80,7 @@
     {
         NodeListAtomicNameCacheMap::AddResult result = m_atomicNameCaches.add(namedNodeListKey(collectionType, name), nullptr);
         if (!result.isNewEntry) {
-#if ENABLE(OILPAN)
             return static_cast<T*>(result.storedValue->value.get());
-#else
-            return static_cast<T*>(result.storedValue->value);
-#endif
         }
 
         T* list = T::create(node, collectionType, name);
@@ -117,11 +93,7 @@
     {
         NodeListAtomicNameCacheMap::AddResult result = m_atomicNameCaches.add(namedNodeListKey(collectionType, starAtom), nullptr);
         if (!result.isNewEntry) {
-#if ENABLE(OILPAN)
             return static_cast<T*>(result.storedValue->value.get());
-#else
-            return static_cast<T*>(result.storedValue->value);
-#endif
         }
 
         T* list = T::create(node, collectionType);
@@ -147,25 +119,6 @@
         return list;
     }
 
-#if !ENABLE(OILPAN)
-    void removeCache(LiveNodeListBase* list, CollectionType collectionType, const AtomicString& name = starAtom)
-    {
-        DCHECK_EQ(list, m_atomicNameCaches.get(namedNodeListKey(collectionType, name)));
-        if (deleteThisAndUpdateNodeRareDataIfAboutToRemoveLastList(list->ownerNode()))
-            return;
-        m_atomicNameCaches.remove(namedNodeListKey(collectionType, name));
-    }
-
-    void removeCache(LiveNodeListBase* list, const AtomicString& namespaceURI, const AtomicString& localName)
-    {
-        QualifiedName name(nullAtom, localName, namespaceURI);
-        DCHECK_EQ(list, m_tagCollectionCacheNS.get(name));
-        if (deleteThisAndUpdateNodeRareDataIfAboutToRemoveLastList(list->ownerNode()))
-            return;
-        m_tagCollectionCacheNS.remove(name);
-    }
-#endif
-
     static NodeListsNodeData* create()
     {
         return new NodeListsNodeData;
@@ -215,27 +168,12 @@
         return std::pair<unsigned char, StringImpl*>(type, name.impl());
     }
 
-#if !ENABLE(OILPAN)
-    bool deleteThisAndUpdateNodeRareDataIfAboutToRemoveLastList(Node&);
-#endif
-
     // Can be a ChildNodeList or an EmptyNodeList.
     WeakMember<NodeList> m_childNodeList;
     NodeListAtomicNameCacheMap m_atomicNameCaches;
     TagCollectionCacheNS m_tagCollectionCacheNS;
 };
 
-#if !ENABLE(OILPAN)
-inline bool NodeListsNodeData::deleteThisAndUpdateNodeRareDataIfAboutToRemoveLastList(Node& ownerNode)
-{
-    DCHECK_EQ(ownerNode.nodeLists(), this);
-    if ((m_childNodeList ? 1 : 0) + m_atomicNameCaches.size() + m_tagCollectionCacheNS.size() != 1)
-        return false;
-    ownerNode.clearNodeLists();
-    return true;
-}
-#endif
-
 template <typename Collection>
 inline Collection* ContainerNode::ensureCachedCollection(CollectionType type)
 {
diff --git a/third_party/WebKit/Source/core/dom/NthIndexCache.cpp b/third_party/WebKit/Source/core/dom/NthIndexCache.cpp
index 179baaa6..8c6d682e 100644
--- a/third_party/WebKit/Source/core/dom/NthIndexCache.cpp
+++ b/third_party/WebKit/Source/core/dom/NthIndexCache.cpp
@@ -261,10 +261,4 @@
     visitor->trace(m_elementIndexMap);
 }
 
-#if !ENABLE(OILPAN)
-NthIndexData::~NthIndexData()
-{
-}
-#endif
-
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/dom/ProcessingInstruction.cpp b/third_party/WebKit/Source/core/dom/ProcessingInstruction.cpp
index ebad37e..4338ba5 100644
--- a/third_party/WebKit/Source/core/dom/ProcessingInstruction.cpp
+++ b/third_party/WebKit/Source/core/dom/ProcessingInstruction.cpp
@@ -55,17 +55,6 @@
 
 ProcessingInstruction::~ProcessingInstruction()
 {
-#if !ENABLE(OILPAN)
-    if (m_sheet)
-        clearSheet();
-
-    // FIXME: ProcessingInstruction should not be in document here.
-    // However, if we add DCHECK(!inShadowIncludingDocument()), fast/xsl/xslt-entity.xml
-    // crashes. We need to investigate ProcessingInstruction lifetime.
-    if (inShadowIncludingDocument() && m_isCSS)
-        document().styleEngine().removeStyleSheetCandidateNode(this);
-    clearEventListenerForXSLT();
-#endif
 }
 
 EventListener* ProcessingInstruction::eventListenerForXSLT()
diff --git a/third_party/WebKit/Source/core/dom/Range.cpp b/third_party/WebKit/Source/core/dom/Range.cpp
index 803eca5d..9fd0d86 100644
--- a/third_party/WebKit/Source/core/dom/Range.cpp
+++ b/third_party/WebKit/Source/core/dom/Range.cpp
@@ -111,10 +111,8 @@
 
 void Range::dispose()
 {
-#if ENABLE(OILPAN)
     // A prompt detach from the owning Document helps avoid GC overhead.
     m_ownerDocument->detachRange(this);
-#endif
 }
 
 bool Range::inShadowIncludingDocument() const
diff --git a/third_party/WebKit/Source/core/dom/SelectorQuery.cpp b/third_party/WebKit/Source/core/dom/SelectorQuery.cpp
index 52d3fdb..76151d5 100644
--- a/third_party/WebKit/Source/core/dom/SelectorQuery.cpp
+++ b/third_party/WebKit/Source/core/dom/SelectorQuery.cpp
@@ -261,7 +261,7 @@
     bool startFromParent = false;
 
     for (const CSSSelector* selector = m_selectors[0]; selector; selector = selector->tagHistory()) {
-        if (selector->match() == CSSSelector::Id && !rootNode.document().containsMultipleElementsWithId(selector->value())) {
+        if (selector->match() == CSSSelector::Id && !rootNode.treeScope().containsMultipleElementsWithId(selector->value())) {
             Element* element = rootNode.treeScope().getElementById(selector->value());
             ContainerNode* adjustedNode = &rootNode;
             if (element && (isTreeScopeRoot(rootNode) || element->isDescendantOf(&rootNode)))
diff --git a/third_party/WebKit/Source/core/dom/StyleElement.cpp b/third_party/WebKit/Source/core/dom/StyleElement.cpp
index 1f8b20c6..b10eff3 100644
--- a/third_party/WebKit/Source/core/dom/StyleElement.cpp
+++ b/third_party/WebKit/Source/core/dom/StyleElement.cpp
@@ -55,10 +55,6 @@
 
 StyleElement::~StyleElement()
 {
-#if !ENABLE(OILPAN)
-    if (m_sheet)
-        clearSheet();
-#endif
 }
 
 StyleElement::ProcessingResult StyleElement::processStyleSheet(Document& document, Element* element)
diff --git a/third_party/WebKit/Source/core/dom/StyleEngine.cpp b/third_party/WebKit/Source/core/dom/StyleEngine.cpp
index 83f3d4c..bf0ea0d 100644
--- a/third_party/WebKit/Source/core/dom/StyleEngine.cpp
+++ b/third_party/WebKit/Source/core/dom/StyleEngine.cpp
@@ -76,29 +76,6 @@
     return isHTMLStyleElement(node) || isSVGStyleElement(node);
 }
 
-#if !ENABLE(OILPAN)
-void StyleEngine::detachFromDocument()
-{
-    // Cleanup is performed eagerly when the StyleEngine is removed from the
-    // document. The StyleEngine is unreachable after this, since only the
-    // document has a reference to it.
-    for (unsigned i = 0; i < m_injectedAuthorStyleSheets.size(); ++i)
-        m_injectedAuthorStyleSheets[i]->clearOwnerNode();
-
-    if (m_fontSelector) {
-        m_fontSelector->clearDocument();
-        m_fontSelector->unregisterForInvalidationCallbacks(this);
-    }
-
-    // Decrement reference counts for things we could be keeping alive.
-    m_fontSelector.clear();
-    m_resolver.clear();
-    m_styleSheetCollectionMap.clear();
-    m_dirtyTreeScopes.clear();
-    m_activeTreeScopes.clear();
-}
-#endif
-
 inline Document* StyleEngine::master()
 {
     if (isMaster())
diff --git a/third_party/WebKit/Source/core/dom/StyleEngine.h b/third_party/WebKit/Source/core/dom/StyleEngine.h
index 8caa6056..9bbe68d 100644
--- a/third_party/WebKit/Source/core/dom/StyleEngine.h
+++ b/third_party/WebKit/Source/core/dom/StyleEngine.h
@@ -73,10 +73,6 @@
 
     ~StyleEngine();
 
-#if !ENABLE(OILPAN)
-    void detachFromDocument();
-#endif
-
     const HeapVector<Member<StyleSheet>>& styleSheetsForStyleSheetList(TreeScope&);
 
     const HeapVector<Member<CSSStyleSheet>>& injectedAuthorStyleSheets() const { return m_injectedAuthorStyleSheets; }
diff --git a/third_party/WebKit/Source/core/dom/TagCollection.cpp b/third_party/WebKit/Source/core/dom/TagCollection.cpp
index 3cc178bb..e90fe4b 100644
--- a/third_party/WebKit/Source/core/dom/TagCollection.cpp
+++ b/third_party/WebKit/Source/core/dom/TagCollection.cpp
@@ -38,12 +38,6 @@
 
 TagCollection::~TagCollection()
 {
-#if !ENABLE(OILPAN)
-    if (m_namespaceURI == starAtom)
-        ownerNode().nodeLists()->removeCache(this, type(), m_localName);
-    else
-        ownerNode().nodeLists()->removeCache(this, m_namespaceURI, m_localName);
-#endif
 }
 
 bool TagCollection::elementMatches(const Element& testNode) const
diff --git a/third_party/WebKit/Source/core/dom/TemplateContentDocumentFragment.h b/third_party/WebKit/Source/core/dom/TemplateContentDocumentFragment.h
index 8ca6628..1326e948 100644
--- a/third_party/WebKit/Source/core/dom/TemplateContentDocumentFragment.h
+++ b/third_party/WebKit/Source/core/dom/TemplateContentDocumentFragment.h
@@ -39,9 +39,6 @@
     }
 
     Element* host() const { return m_host; }
-#if !ENABLE(OILPAN)
-    void clearHost() { m_host = nullptr; }
-#endif
 
     DEFINE_INLINE_VIRTUAL_TRACE()
     {
diff --git a/third_party/WebKit/Source/core/dom/TreeScope.cpp b/third_party/WebKit/Source/core/dom/TreeScope.cpp
index 3ef349539..3849c934 100644
--- a/third_party/WebKit/Source/core/dom/TreeScope.cpp
+++ b/third_party/WebKit/Source/core/dom/TreeScope.cpp
@@ -60,15 +60,9 @@
     : m_rootNode(&rootNode)
     , m_document(&document)
     , m_parentTreeScope(&document)
-#if !ENABLE(OILPAN)
-    , m_guardRefCount(0)
-#endif
     , m_idTargetObserverRegistry(IdTargetObserverRegistry::create())
 {
     DCHECK_NE(rootNode, document);
-#if !ENABLE(OILPAN)
-    m_parentTreeScope->guardRef();
-#endif
     m_rootNode->setTreeScope(this);
 }
 
@@ -76,9 +70,6 @@
     : m_rootNode(document)
     , m_document(&document)
     , m_parentTreeScope(nullptr)
-#if !ENABLE(OILPAN)
-    , m_guardRefCount(0)
-#endif
     , m_idTargetObserverRegistry(IdTargetObserverRegistry::create())
 {
     m_rootNode->setTreeScope(this);
@@ -86,18 +77,6 @@
 
 TreeScope::~TreeScope()
 {
-#if !ENABLE(OILPAN)
-    DCHECK(!m_guardRefCount);
-    m_rootNode->setTreeScope(nullptr);
-
-    if (m_selection) {
-        m_selection->clearTreeScope();
-        m_selection = nullptr;
-    }
-
-    if (m_parentTreeScope)
-        m_parentTreeScope->guardDeref();
-#endif
 }
 
 TreeScope* TreeScope::olderShadowRootOrParentTreeScope() const
@@ -123,25 +102,11 @@
     return rootNode().hasTreeSharedParent();
 }
 
-#if !ENABLE(OILPAN)
-void TreeScope::destroyTreeScopeData()
-{
-    m_elementsById.clear();
-    m_imageMapsByName.clear();
-    m_labelsByForAttribute.clear();
-}
-#endif
-
 void TreeScope::setParentTreeScope(TreeScope& newParentScope)
 {
     // A document node cannot be re-parented.
     DCHECK(!rootNode().isDocumentNode());
 
-#if !ENABLE(OILPAN)
-    newParentScope.guardRef();
-    if (m_parentTreeScope)
-        m_parentTreeScope->guardDeref();
-#endif
     m_parentTreeScope = &newParentScope;
     setDocument(newParentScope.document());
 }
@@ -412,14 +377,20 @@
 {
     DCHECK(this);
     DCHECK(!node.isDocumentNode());
-#if !ENABLE(OILPAN)
-    ASSERT_WITH_SECURITY_IMPLICATION(!node.m_deletionHasBegun);
-#endif
     TreeScopeAdopter adopter(node, *this);
     if (adopter.needsScopeChange())
         adopter.execute();
 }
 
+Element* TreeScope::retarget(const Element& target) const
+{
+    for (const Element* ancestor = &target; ancestor; ancestor = ancestor->shadowHost()) {
+        if (this == ancestor->treeScope())
+            return const_cast<Element*>(ancestor);
+    }
+    return nullptr;
+}
+
 Element* TreeScope::adjustedFocusedElement() const
 {
     Document& document = rootNode().document();
@@ -430,9 +401,8 @@
         return nullptr;
 
     if (rootNode().isInV1ShadowTree()) {
-        if (Node* retargeted = rootNode().retarget(*element)) {
-            DCHECK(retargeted->isElementNode());
-            return this == &retargeted->treeScope() ? toElement(retargeted) : nullptr;
+        if (Element* retargeted = retarget(*element)) {
+            return (this == &retargeted->treeScope()) ? retargeted : nullptr;
         }
         return nullptr;
     }
@@ -520,25 +490,6 @@
     return const_cast<TreeScope*>(static_cast<const TreeScope&>(*this).commonAncestorTreeScope(other));
 }
 
-#if ENABLE(SECURITY_ASSERT) && !ENABLE(OILPAN)
-bool TreeScope::deletionHasBegun()
-{
-    return rootNode().m_deletionHasBegun;
-}
-
-void TreeScope::beginDeletion()
-{
-    rootNode().m_deletionHasBegun = true;
-}
-#endif
-
-#if !ENABLE(OILPAN)
-int TreeScope::refCount() const
-{
-    return rootNode().refCount();
-}
-#endif
-
 bool TreeScope::isInclusiveAncestorOf(const TreeScope& scope) const
 {
     for (const TreeScope* current = &scope; current; current = current->parentTreeScope()) {
diff --git a/third_party/WebKit/Source/core/dom/TreeScope.h b/third_party/WebKit/Source/core/dom/TreeScope.h
index 93fcd0a..d92e0d42 100644
--- a/third_party/WebKit/Source/core/dom/TreeScope.h
+++ b/third_party/WebKit/Source/core/dom/TreeScope.h
@@ -90,6 +90,8 @@
 
     DOMSelection* getSelection() const;
 
+    Element* retarget(const Element& target) const;
+
     // Find first anchor with the given name.
     // First searches for an element with the given ID, but if that fails, then looks
     // for an anchor with the given name. ID matching is always case sensitive, but
@@ -106,32 +108,6 @@
 
     RadioButtonGroupScope& radioButtonGroupScope() { return m_radioButtonGroupScope; }
 
-#if !ENABLE(OILPAN)
-    // Nodes belonging to this scope hold guard references -
-    // these are enough to keep the scope from being destroyed, but
-    // not enough to keep it from removing its children. This allows a
-    // node that outlives its scope to still have a valid document
-    // pointer without introducing reference cycles.
-    void guardRef()
-    {
-        DCHECK(!deletionHasBegun());
-        ++m_guardRefCount;
-    }
-
-    void guardDeref()
-    {
-        DCHECK_GT(m_guardRefCount, 0);
-        DCHECK(!deletionHasBegun());
-        --m_guardRefCount;
-        if (!m_guardRefCount && !refCount() && !rootNodeHasTreeSharedParent()) {
-            beginDeletion();
-            delete this;
-        }
-    }
-#endif
-
-    void removedLastRefToScope();
-
     bool isInclusiveAncestorOf(const TreeScope&) const;
     unsigned short comparePosition(const TreeScope&) const;
 
@@ -151,44 +127,17 @@
     TreeScope(Document&);
     virtual ~TreeScope();
 
-#if !ENABLE(OILPAN)
-    void destroyTreeScopeData();
-#endif
-
     void setDocument(Document& document) { m_document = &document; }
     void setParentTreeScope(TreeScope&);
-
-#if !ENABLE(OILPAN)
-    bool hasGuardRefCount() const { return m_guardRefCount; }
-#endif
-
     void setNeedsStyleRecalcForViewportUnits();
 
 private:
-#if !ENABLE(OILPAN)
-    virtual void dispose() { }
-
-    int refCount() const;
-
-#if ENABLE(SECURITY_ASSERT)
-    bool deletionHasBegun();
-    void beginDeletion();
-#else
-    bool deletionHasBegun() { return false; }
-    void beginDeletion() { }
-#endif
-#endif
-
     bool rootNodeHasTreeSharedParent() const;
 
     Member<ContainerNode> m_rootNode;
     Member<Document> m_document;
     Member<TreeScope> m_parentTreeScope;
 
-#if !ENABLE(OILPAN)
-    int m_guardRefCount;
-#endif
-
     Member<DocumentOrderedMap> m_elementsById;
     Member<DocumentOrderedMap> m_imageMapsByName;
     Member<DocumentOrderedMap> m_labelsByForAttribute;
diff --git a/third_party/WebKit/Source/core/dom/TreeScopeAdopter.cpp b/third_party/WebKit/Source/core/dom/TreeScopeAdopter.cpp
index c5a5400..210911d 100644
--- a/third_party/WebKit/Source/core/dom/TreeScopeAdopter.cpp
+++ b/third_party/WebKit/Source/core/dom/TreeScopeAdopter.cpp
@@ -36,10 +36,6 @@
 {
     DCHECK(needsScopeChange());
 
-#if !ENABLE(OILPAN)
-    oldScope().guardRef();
-#endif
-
     // If an element is moved from a document and then eventually back again the collection cache for
     // that element may contain stale data as changes made to it will have updated the DOMTreeVersion
     // of the document it was moved to. By increasing the DOMTreeVersion of the donating document here
@@ -76,10 +72,6 @@
                 moveTreeToNewDocument(*shadow, oldDocument, newDocument);
         }
     }
-
-#if !ENABLE(OILPAN)
-    oldScope().guardDeref();
-#endif
 }
 
 void TreeScopeAdopter::moveTreeToNewDocument(Node& root, Document& oldDocument, Document& newDocument) const
@@ -118,10 +110,6 @@
 {
     DCHECK(!node.isTreeScope());
     DCHECK(node.treeScope() == oldScope());
-#if !ENABLE(OILPAN)
-    newScope().guardRef();
-    oldScope().guardDeref();
-#endif
     node.setTreeScope(m_newScope);
 }
 
diff --git a/third_party/WebKit/Source/core/dom/TreeShared.h b/third_party/WebKit/Source/core/dom/TreeShared.h
index 05361386..93cd0b9 100644
--- a/third_party/WebKit/Source/core/dom/TreeShared.h
+++ b/third_party/WebKit/Source/core/dom/TreeShared.h
@@ -32,6 +32,7 @@
 template<typename NodeType> void adopted(TreeShared<NodeType>*);
 #endif
 
+// TODO(Oilpan): Remove TreeShared. It's unused in the oilpan world.
 template<typename NodeType> class TreeShared : public GarbageCollectedFinalized<NodeType> {
     WTF_MAKE_NONCOPYABLE(TreeShared);
 protected:
diff --git a/third_party/WebKit/Source/core/dom/UserActionElementSet.cpp b/third_party/WebKit/Source/core/dom/UserActionElementSet.cpp
index 96334ce..aa7491e6 100644
--- a/third_party/WebKit/Source/core/dom/UserActionElementSet.cpp
+++ b/third_party/WebKit/Source/core/dom/UserActionElementSet.cpp
@@ -45,13 +45,6 @@
     clearFlags(&element, IsActiveFlag | InActiveChainFlag | IsHoveredFlag);
 }
 
-#if !ENABLE(OILPAN)
-void UserActionElementSet::documentDidRemoveLastRef()
-{
-    m_elements.clear();
-}
-#endif
-
 bool UserActionElementSet::hasFlags(const Node* node, unsigned flags) const
 {
     DCHECK(node->isUserActionElement() && node->isElementNode());
diff --git a/third_party/WebKit/Source/core/dom/UserActionElementSet.h b/third_party/WebKit/Source/core/dom/UserActionElementSet.h
index 0db2395..0aab41c9 100644
--- a/third_party/WebKit/Source/core/dom/UserActionElementSet.h
+++ b/third_party/WebKit/Source/core/dom/UserActionElementSet.h
@@ -52,10 +52,6 @@
 
     void didDetach(Element&);
 
-#if !ENABLE(OILPAN)
-    void documentDidRemoveLastRef();
-#endif
-
     DECLARE_TRACE();
 
 private:
diff --git a/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskImportStep.cpp b/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskImportStep.cpp
index 2f51ffe..4e00874 100644
--- a/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskImportStep.cpp
+++ b/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskImportStep.cpp
@@ -38,18 +38,8 @@
 
 namespace blink {
 
-CustomElementMicrotaskImportStep* CustomElementMicrotaskImportStep::create(HTMLImportChild* import)
-{
-    return new CustomElementMicrotaskImportStep(import);
-}
-
 CustomElementMicrotaskImportStep::CustomElementMicrotaskImportStep(HTMLImportChild* import)
-#if ENABLE(OILPAN)
     : m_import(import)
-#else
-    : m_import(import->weakPtr())
-    , m_weakFactory(this)
-#endif
     , m_queue(import->loader()->microtaskQueue())
 {
 }
diff --git a/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskImportStep.h b/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskImportStep.h
index 858b0e2..53eae0d 100644
--- a/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskImportStep.h
+++ b/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskImportStep.h
@@ -33,7 +33,6 @@
 
 #include "core/dom/custom/CustomElementMicrotaskStep.h"
 #include "platform/heap/Handle.h"
-#include "wtf/WeakPtr.h"
 
 namespace blink {
 
@@ -48,15 +47,16 @@
 // import isn't "ready" (finished parsing and running script.)
 class CustomElementMicrotaskImportStep final : public CustomElementMicrotaskStep {
 public:
-    static CustomElementMicrotaskImportStep* create(HTMLImportChild*);
+    static CustomElementMicrotaskImportStep* create(HTMLImportChild* import)
+    {
+        return new CustomElementMicrotaskImportStep(import);
+    }
+
     ~CustomElementMicrotaskImportStep() override;
 
     // API for HTML Imports
     void invalidate();
     void importDidFinishLoading();
-#if !ENABLE(OILPAN)
-    WeakPtr<CustomElementMicrotaskImportStep> weakPtr() { return m_weakFactory.createWeakPtr(); }
-#endif
 
     DECLARE_VIRTUAL_TRACE();
 
@@ -73,9 +73,6 @@
     void show(unsigned indent) override;
 #endif
     WeakMember<HTMLImportChild> m_import;
-#if !ENABLE(OILPAN)
-    WeakPtrFactory<CustomElementMicrotaskImportStep> m_weakFactory;
-#endif
     Member<CustomElementSyncMicrotaskQueue> m_queue;
 };
 
diff --git a/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskRunQueue.cpp b/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskRunQueue.cpp
index 720f799..1697aa0a0 100644
--- a/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskRunQueue.cpp
+++ b/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskRunQueue.cpp
@@ -15,9 +15,6 @@
     : m_syncQueue(CustomElementSyncMicrotaskQueue::create())
     , m_asyncQueue(CustomElementAsyncImportMicrotaskQueue::create())
     , m_dispatchIsPending(false)
-#if !ENABLE(OILPAN)
-    , m_weakFactory(this)
-#endif
 {
 }
 
@@ -39,11 +36,7 @@
 {
     if (m_dispatchIsPending || isEmpty())
         return;
-#if ENABLE(OILPAN)
     Microtask::enqueueMicrotask(WTF::bind(&CustomElementMicrotaskRunQueue::dispatch, WeakPersistentThisPointer<CustomElementMicrotaskRunQueue>(this)));
-#else
-    Microtask::enqueueMicrotask(WTF::bind(&CustomElementMicrotaskRunQueue::dispatch, m_weakFactory.createWeakPtr()));
-#endif
     m_dispatchIsPending = true;
 }
 
diff --git a/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskRunQueue.h b/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskRunQueue.h
index fdfe6c0..fdfc45b 100644
--- a/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskRunQueue.h
+++ b/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskRunQueue.h
@@ -6,7 +6,6 @@
 #define CustomElementMicrotaskRunQueue_h
 
 #include "platform/heap/Handle.h"
-#include "wtf/WeakPtr.h"
 
 namespace blink {
 
@@ -15,9 +14,12 @@
 class CustomElementMicrotaskStep;
 class HTMLImportLoader;
 
-class CustomElementMicrotaskRunQueue : public GarbageCollectedFinalized<CustomElementMicrotaskRunQueue> {
+class CustomElementMicrotaskRunQueue : public GarbageCollected<CustomElementMicrotaskRunQueue> {
 public:
-    static CustomElementMicrotaskRunQueue* create() { return new CustomElementMicrotaskRunQueue(); }
+    static CustomElementMicrotaskRunQueue* create()
+    {
+        return new CustomElementMicrotaskRunQueue;
+    }
 
     void enqueue(HTMLImportLoader* parentLoader, CustomElementMicrotaskStep*, bool importIsSync);
     void requestDispatchIfNeeded();
@@ -33,9 +35,6 @@
     Member<CustomElementSyncMicrotaskQueue> m_syncQueue;
     Member<CustomElementAsyncImportMicrotaskQueue> m_asyncQueue;
     bool m_dispatchIsPending;
-#if !ENABLE(OILPAN)
-    WeakPtrFactory<CustomElementMicrotaskRunQueue> m_weakFactory;
-#endif
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/dom/custom/CustomElementUpgradeCandidateMap.cpp b/third_party/WebKit/Source/core/dom/custom/CustomElementUpgradeCandidateMap.cpp
index 8c4a5c7..dbc26b5 100644
--- a/third_party/WebKit/Source/core/dom/custom/CustomElementUpgradeCandidateMap.cpp
+++ b/third_party/WebKit/Source/core/dom/custom/CustomElementUpgradeCandidateMap.cpp
@@ -41,13 +41,6 @@
 
 CustomElementUpgradeCandidateMap::~CustomElementUpgradeCandidateMap()
 {
-#if !ENABLE(OILPAN)
-    // With Oilpan enabled, the observer table keeps a weak reference to the
-    // element; no need for explicit removal.
-    UpgradeCandidateMap::const_iterator::KeysIterator end = m_upgradeCandidates.end().keys();
-    for (UpgradeCandidateMap::const_iterator::KeysIterator it = m_upgradeCandidates.begin().keys(); it != end; ++it)
-        unobserve(*it);
-#endif
 }
 
 void CustomElementUpgradeCandidateMap::add(const CustomElementDescriptor& descriptor, Element* element)
diff --git a/third_party/WebKit/Source/core/dom/shadow/ElementShadow.cpp b/third_party/WebKit/Source/core/dom/shadow/ElementShadow.cpp
index 5326524c..aa11696 100644
--- a/third_party/WebKit/Source/core/dom/shadow/ElementShadow.cpp
+++ b/third_party/WebKit/Source/core/dom/shadow/ElementShadow.cpp
@@ -142,9 +142,6 @@
 
 ElementShadow::~ElementShadow()
 {
-#if !ENABLE(OILPAN)
-    removeDetachedShadowRoots();
-#endif
 }
 
 ShadowRoot& ElementShadow::addShadowRoot(Element& shadowHost, ShadowRootType type)
@@ -183,25 +180,6 @@
     return *shadowRoot;
 }
 
-#if !ENABLE(OILPAN)
-void ElementShadow::removeDetachedShadowRoots()
-{
-    // Dont protect this ref count.
-    Element* shadowHost = host();
-    DCHECK(shadowHost);
-
-    while (ShadowRoot* oldRoot = m_shadowRoots.head()) {
-        InspectorInstrumentation::willPopShadowRoot(shadowHost, oldRoot);
-        shadowHost->document().removeFocusedElementOfSubtree(oldRoot);
-        m_shadowRoots.removeHead();
-        oldRoot->setParentOrShadowHostNode(0);
-        oldRoot->setParentTreeScope(shadowHost->document());
-        oldRoot->setPrev(0);
-        oldRoot->setNext(0);
-    }
-}
-#endif
-
 void ElementShadow::attach(const Node::AttachContext& context)
 {
     Node::AttachContext childrenContext(context);
@@ -263,11 +241,7 @@
     DCHECK(!key->needsDistributionRecalc());
 #endif
     NodeToDestinationInsertionPoints::const_iterator it = m_nodeToInsertionPoints.find(key);
-#if ENABLE(OILPAN)
-    return it == m_nodeToInsertionPoints.end() ? nullptr : it->value->last().get();
-#else
-    return it == m_nodeToInsertionPoints.end() ? nullptr : it->value.last().get();
-#endif
+    return it == m_nodeToInsertionPoints.end() ? nullptr : it->value->last();
 }
 
 const DestinationInsertionPoints* ElementShadow::destinationInsertionPointsFor(const Node* key) const
@@ -277,11 +251,7 @@
     DCHECK(!key->needsDistributionRecalc());
 #endif
     NodeToDestinationInsertionPoints::const_iterator it = m_nodeToInsertionPoints.find(key);
-#if ENABLE(OILPAN)
-    return it == m_nodeToInsertionPoints.end() ? nullptr : it->value.get();
-#else
-    return it == m_nodeToInsertionPoints.end() ? nullptr : &it->value;
-#endif
+    return it == m_nodeToInsertionPoints.end() ? nullptr : it->value;
 }
 
 void ElementShadow::distribute()
@@ -301,7 +271,7 @@
         HTMLShadowElement* shadowInsertionPoint = 0;
         const HeapVector<Member<InsertionPoint>>& insertionPoints = root->descendantInsertionPoints();
         for (size_t i = 0; i < insertionPoints.size(); ++i) {
-            InsertionPoint* point = insertionPoints[i].get();
+            InsertionPoint* point = insertionPoints[i];
             if (!point->isActive())
                 continue;
             if (isHTMLShadowElement(*point)) {
@@ -337,15 +307,10 @@
 
 void ElementShadow::didDistributeNode(const Node* node, InsertionPoint* insertionPoint)
 {
-#if ENABLE(OILPAN)
     NodeToDestinationInsertionPoints::AddResult result = m_nodeToInsertionPoints.add(node, nullptr);
     if (result.isNewEntry)
-        result.storedValue->value = new DestinationInsertionPoints();
+        result.storedValue->value = new DestinationInsertionPoints;
     result.storedValue->value->append(insertionPoint);
-#else
-    NodeToDestinationInsertionPoints::AddResult result = m_nodeToInsertionPoints.add(node, DestinationInsertionPoints());
-    result.storedValue->value.append(insertionPoint);
-#endif
 }
 
 const SelectRuleFeatureSet& ElementShadow::ensureSelectFeatureSet()
diff --git a/third_party/WebKit/Source/core/dom/shadow/ElementShadow.h b/third_party/WebKit/Source/core/dom/shadow/ElementShadow.h
index c263887..7725df6 100644
--- a/third_party/WebKit/Source/core/dom/shadow/ElementShadow.h
+++ b/third_party/WebKit/Source/core/dom/shadow/ElementShadow.h
@@ -76,10 +76,6 @@
 private:
     ElementShadow();
 
-#if !ENABLE(OILPAN)
-    void removeDetachedShadowRoots();
-#endif
-
     void distribute();
     void clearDistribution();
 
@@ -92,17 +88,11 @@
     bool needsSelectFeatureSet() const { return m_needsSelectFeatureSet; }
     void setNeedsSelectFeatureSet() { m_needsSelectFeatureSet = true; }
 
-#if ENABLE(OILPAN)
-    // The cost of |new| in Oilpan is lower than non-Oilpan.  We should reduce
-    // the size of HashMap entry.
-    typedef HeapHashMap<Member<const Node>, Member<DestinationInsertionPoints>> NodeToDestinationInsertionPoints;
-#else
-    typedef HashMap<const Node*, DestinationInsertionPoints> NodeToDestinationInsertionPoints;
-#endif
+    using NodeToDestinationInsertionPoints = HeapHashMap<Member<const Node>, Member<DestinationInsertionPoints>>;
     NodeToDestinationInsertionPoints m_nodeToInsertionPoints;
 
     SelectRuleFeatureSet m_selectFeatures;
-    // FIXME: Oilpan: add a heap-based version of DoublyLinkedList<>.
+    // TODO(Oilpan): add a heap-based version of DoublyLinkedList<>.
     DoublyLinkedList<ShadowRoot> m_shadowRoots;
     bool m_needsDistributionRecalc;
     bool m_needsSelectFeatureSet;
diff --git a/third_party/WebKit/Source/core/dom/shadow/InsertionPoint.cpp b/third_party/WebKit/Source/core/dom/shadow/InsertionPoint.cpp
index 3010f8a..547c347 100644
--- a/third_party/WebKit/Source/core/dom/shadow/InsertionPoint.cpp
+++ b/third_party/WebKit/Source/core/dom/shadow/InsertionPoint.cpp
@@ -92,11 +92,9 @@
         distributedNodes.at(j)->lazyReattachIfAttached();
 
     m_distributedNodes.swap(distributedNodes);
-#if ENABLE(OILPAN)
-    // Deallocate a Vector and a HashMap explicitly in order that Oilpan can
-    // recycle them without GC.
+    // Deallocate a Vector and a HashMap explicitly so that
+    // Oilpan can recycle them without an intervening GC.
     distributedNodes.clear();
-#endif
     m_distributedNodes.shrinkToFit();
 }
 
diff --git a/third_party/WebKit/Source/core/dom/shadow/ShadowRoot.cpp b/third_party/WebKit/Source/core/dom/shadow/ShadowRoot.cpp
index 012b1ad..1b204033 100644
--- a/third_party/WebKit/Source/core/dom/shadow/ShadowRoot.cpp
+++ b/third_party/WebKit/Source/core/dom/shadow/ShadowRoot.cpp
@@ -43,9 +43,7 @@
 namespace blink {
 
 struct SameSizeAsShadowRoot : public DocumentFragment, public TreeScope, public DoublyLinkedListNode<ShadowRoot> {
-#if ENABLE(OILPAN)
     char emptyClassFieldsDueToGCMixinMarker[1];
-#endif
     Member<void*> willbeMember[4];
     unsigned countersAndFlags[1];
 };
@@ -69,40 +67,8 @@
 
 ShadowRoot::~ShadowRoot()
 {
-#if !ENABLE(OILPAN)
-    DCHECK(!m_prev);
-    DCHECK(!m_next);
-
-    if (m_shadowRootRareData && m_shadowRootRareData->styleSheets())
-        m_shadowRootRareData->styleSheets()->detachFromDocument();
-
-    document().styleEngine().didRemoveShadowRoot(this);
-
-    // We cannot let ContainerNode destructor call willBeDeletedFromDocument()
-    // for this ShadowRoot instance because TreeScope destructor
-    // clears Node::m_treeScope thus ContainerNode is no longer able
-    // to access it Document reference after that.
-    willBeDeletedFromDocument();
-
-    // We must remove all of our children first before the TreeScope destructor
-    // runs so we don't go through TreeScopeAdopter for each child with a
-    // destructed tree scope in each descendant.
-    removeDetachedChildren();
-
-    // We must call clearRareData() here since a ShadowRoot class inherits TreeScope
-    // as well as Node. See a comment on TreeScope.h for the reason.
-    if (hasRareData())
-        clearRareData();
-#endif
 }
 
-#if !ENABLE(OILPAN)
-void ShadowRoot::dispose()
-{
-    removeDetachedChildren();
-}
-#endif
-
 ShadowRoot* ShadowRoot::olderShadowRootForBindings() const
 {
     ShadowRoot* older = olderShadowRoot();
diff --git a/third_party/WebKit/Source/core/dom/shadow/ShadowRoot.h b/third_party/WebKit/Source/core/dom/shadow/ShadowRoot.h
index e9f0a86..2f923bf 100644
--- a/third_party/WebKit/Source/core/dom/shadow/ShadowRoot.h
+++ b/third_party/WebKit/Source/core/dom/shadow/ShadowRoot.h
@@ -154,10 +154,6 @@
     ShadowRoot(Document&, ShadowRootType);
     ~ShadowRoot() override;
 
-#if !ENABLE(OILPAN)
-    void dispose() override;
-#endif
-
     void childrenChanged(const ChildrenChange&) override;
 
     ShadowRootRareData* ensureShadowRootRareData();
diff --git a/third_party/WebKit/Source/core/events/DOMWindowEventQueue.h b/third_party/WebKit/Source/core/events/DOMWindowEventQueue.h
index 8c9b16f..7ca7396 100644
--- a/third_party/WebKit/Source/core/events/DOMWindowEventQueue.h
+++ b/third_party/WebKit/Source/core/events/DOMWindowEventQueue.h
@@ -30,8 +30,6 @@
 #include "core/events/EventQueue.h"
 #include "wtf/HashSet.h"
 #include "wtf/ListHashSet.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/RefCounted.h"
 
 namespace blink {
 
@@ -39,13 +37,7 @@
 class DOMWindowEventQueueTimer;
 class ExecutionContext;
 
-#if ENABLE(OILPAN)
-#define DOMWINDOWEVENTQUEUE_BASE_CLASSES public EventQueue
-#else
-#define DOMWINDOWEVENTQUEUE_BASE_CLASSES public RefCounted<DOMWindowEventQueue>, public EventQueue
-#endif
-
-class DOMWindowEventQueue final : DOMWINDOWEVENTQUEUE_BASE_CLASSES {
+class DOMWindowEventQueue final : public EventQueue {
 public:
     static DOMWindowEventQueue* create(ExecutionContext*);
     ~DOMWindowEventQueue() override;
diff --git a/third_party/WebKit/Source/core/events/EventPath.cpp b/third_party/WebKit/Source/core/events/EventPath.cpp
index 901088c..899b677 100644
--- a/third_party/WebKit/Source/core/events/EventPath.cpp
+++ b/third_party/WebKit/Source/core/events/EventPath.cpp
@@ -131,16 +131,7 @@
             if (m_event && shouldStopAtShadowRoot(*m_event, *toShadowRoot(current), *m_node))
                 break;
             current = current->shadowHost();
-#if !ENABLE(OILPAN)
-            // TODO(kochi): crbug.com/507413 This check is necessary when some asynchronous event
-            // is queued while its shadow host is removed and the shadow root gets the event
-            // immediately after it.  When Oilpan is enabled, this situation does not happen.
-            // Except this case, shadow root's host is assumed to be non-null.
-            if (current)
-                nodesInPath.append(current);
-#else
             nodesInPath.append(current);
-#endif
         } else {
             current = current->parentNode();
             if (current)
@@ -233,11 +224,9 @@
         TreeScopeEventContext* treeScopeEventContext = relatedTargetEventPath->m_treeScopeEventContexts[i].get();
         relatedTargetMap.add(&treeScopeEventContext->treeScope(), treeScopeEventContext->target());
     }
-#if ENABLE(OILPAN)
     // Oilpan: It is important to explicitly clear the vectors to reuse
     // the memory in subsequent event dispatchings.
     relatedTargetEventPath->clear();
-#endif
 }
 
 EventTarget* EventPath::findRelatedNode(TreeScope& scope, RelatedTargetMap& relatedTargetMap)
diff --git a/third_party/WebKit/Source/core/html/HTMLInputElement.cpp b/third_party/WebKit/Source/core/html/HTMLInputElement.cpp
index 29e1417..a31dece 100644
--- a/third_party/WebKit/Source/core/html/HTMLInputElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLInputElement.cpp
@@ -341,7 +341,7 @@
     if (isTextField()) {
         switch (selectionBehavior) {
         case SelectionBehaviorOnFocus::Reset:
-            select(NotDispatchSelectEvent);
+            select(DispatchSelectEvent);
             break;
         case SelectionBehaviorOnFocus::Restore:
             restoreCachedSelection();
diff --git a/third_party/WebKit/Source/core/html/HTMLTextFormControlElement.cpp b/third_party/WebKit/Source/core/html/HTMLTextFormControlElement.cpp
index 03866562..b589dc5 100644
--- a/third_party/WebKit/Source/core/html/HTMLTextFormControlElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLTextFormControlElement.cpp
@@ -575,7 +575,7 @@
 
 void HTMLTextFormControlElement::restoreCachedSelection()
 {
-    setSelectionRange(m_cachedSelectionStart, m_cachedSelectionEnd, m_cachedSelectionDirection, NotDispatchSelectEvent);
+    setSelectionRange(m_cachedSelectionStart, m_cachedSelectionEnd, m_cachedSelectionDirection, DispatchSelectEvent);
 }
 
 void HTMLTextFormControlElement::selectionChanged(bool userTriggered)
diff --git a/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp
index 4db93fd5..ccda7df 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp
@@ -62,6 +62,7 @@
 #include "core/inspector/InspectedFrames.h"
 #include "core/inspector/InspectorHistory.h"
 #include "core/inspector/InspectorResourceAgent.h"
+#include "core/inspector/InspectorResourceContainer.h"
 #include "core/inspector/InspectorResourceContentLoader.h"
 #include "core/inspector/InstrumentingAgents.h"
 #include "core/layout/HitTestResult.h"
@@ -610,12 +611,13 @@
     return toCSSMediaRule(rule);
 }
 
-InspectorCSSAgent::InspectorCSSAgent(InspectorDOMAgent* domAgent, InspectedFrames* inspectedFrames, InspectorResourceAgent* resourceAgent, InspectorResourceContentLoader* resourceContentLoader)
+InspectorCSSAgent::InspectorCSSAgent(InspectorDOMAgent* domAgent, InspectedFrames* inspectedFrames, InspectorResourceAgent* resourceAgent, InspectorResourceContentLoader* resourceContentLoader, InspectorResourceContainer* resourceContainer)
     : InspectorBaseAgent<InspectorCSSAgent, protocol::Frontend::CSS>("CSS")
     , m_domAgent(domAgent)
     , m_inspectedFrames(inspectedFrames)
     , m_resourceAgent(resourceAgent)
     , m_resourceContentLoader(resourceContentLoader)
+    , m_resourceContainer(resourceContainer)
     , m_creatingViaInspectorStyleSheet(false)
     , m_isSettingStyleSheetText(false)
 {
@@ -703,11 +705,8 @@
 
 void InspectorCSSAgent::didCommitLoadForLocalFrame(LocalFrame* frame)
 {
-    if (frame == m_inspectedFrames->root()) {
+    if (frame == m_inspectedFrames->root())
         reset();
-        m_editedStyleSheets.clear();
-        m_editedStyleElements.clear();
-    }
 }
 
 void InspectorCSSAgent::mediaQueryResultChanged()
@@ -787,32 +786,6 @@
     setActiveStyleSheets(document, HeapVector<Member<CSSStyleSheet>>(), ExistingFrontendRefresh);
 }
 
-void InspectorCSSAgent::addEditedStyleSheet(const String& url, const String& content)
-{
-    m_editedStyleSheets.set(url, content);
-}
-
-bool InspectorCSSAgent::getEditedStyleSheet(const String& url, String* content)
-{
-    if (!m_editedStyleSheets.contains(url))
-        return false;
-    *content = m_editedStyleSheets.get(url);
-    return true;
-}
-
-void InspectorCSSAgent::addEditedStyleElement(int backendNodeId, const String& content)
-{
-    m_editedStyleElements.set(backendNodeId, content);
-}
-
-bool InspectorCSSAgent::getEditedStyleElement(int backendNodeId, String* content)
-{
-    if (!m_editedStyleElements.contains(backendNodeId))
-        return false;
-    *content = m_editedStyleElements.get(backendNodeId);
-    return true;
-}
-
 bool InspectorCSSAgent::forcePseudoState(Element* element, CSSSelector::PseudoType pseudoType)
 {
     if (m_nodeIdToForcedPseudoState.isEmpty())
@@ -1612,7 +1585,7 @@
     InspectorStyleSheet* inspectorStyleSheet = m_cssStyleSheetToInspectorStyleSheet.get(styleSheet);
     if (!inspectorStyleSheet) {
         Document* document = styleSheet->ownerDocument();
-        inspectorStyleSheet = InspectorStyleSheet::create(m_resourceAgent, styleSheet, detectOrigin(styleSheet, document), InspectorDOMAgent::documentURLString(document), this);
+        inspectorStyleSheet = InspectorStyleSheet::create(m_resourceAgent, styleSheet, detectOrigin(styleSheet, document), InspectorDOMAgent::documentURLString(document), this, m_resourceContainer);
         m_idToInspectorStyleSheet.set(inspectorStyleSheet->id(), inspectorStyleSheet);
         m_cssStyleSheetToInspectorStyleSheet.set(styleSheet, inspectorStyleSheet);
         if (m_creatingViaInspectorStyleSheet)
@@ -2099,6 +2072,7 @@
     visitor->trace(m_inspectedFrames);
     visitor->trace(m_resourceAgent);
     visitor->trace(m_resourceContentLoader);
+    visitor->trace(m_resourceContainer);
     visitor->trace(m_idToInspectorStyleSheet);
     visitor->trace(m_idToInspectorStyleSheetForInlineStyle);
     visitor->trace(m_cssStyleSheetToInspectorStyleSheet);
diff --git a/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.h b/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.h
index a3bdb1bc..b5072fc 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.h
+++ b/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.h
@@ -53,6 +53,7 @@
 class InspectedFrames;
 class InspectorFrontend;
 class InspectorResourceAgent;
+class InspectorResourceContainer;
 class InspectorResourceContentLoader;
 class MediaList;
 class Node;
@@ -99,9 +100,9 @@
     static CSSStyleRule* asCSSStyleRule(CSSRule*);
     static CSSMediaRule* asCSSMediaRule(CSSRule*);
 
-    static InspectorCSSAgent* create(InspectorDOMAgent* domAgent, InspectedFrames* inspectedFrames, InspectorResourceAgent* resourceAgent, InspectorResourceContentLoader* resourceContentLoader)
+    static InspectorCSSAgent* create(InspectorDOMAgent* domAgent, InspectedFrames* inspectedFrames, InspectorResourceAgent* resourceAgent, InspectorResourceContentLoader* resourceContentLoader, InspectorResourceContainer* resourceContainer)
     {
-        return new InspectorCSSAgent(domAgent, inspectedFrames, resourceAgent, resourceContentLoader);
+        return new InspectorCSSAgent(domAgent, inspectedFrames, resourceAgent, resourceContentLoader, resourceContainer);
     }
 
     static void collectAllDocumentStyleSheets(Document*, HeapVector<Member<CSSStyleSheet>>&);
@@ -120,12 +121,6 @@
     void activeStyleSheetsUpdated(Document*);
     void documentDetached(Document*);
 
-    void addEditedStyleSheet(const String& url, const String& content);
-    bool getEditedStyleSheet(const String& url, String* content);
-
-    void addEditedStyleElement(int backendNodeId, const String& content);
-    bool getEditedStyleElement(int backendNodeId, String* content);
-
     void enable(ErrorString*, PassOwnPtr<EnableCallback>) override;
     void disable(ErrorString*) override;
     void getMatchedStylesForNode(ErrorString*, int nodeId, Maybe<protocol::CSS::CSSStyle>* inlineStyle, Maybe<protocol::CSS::CSSStyle>* attributesStyle, Maybe<protocol::Array<protocol::CSS::RuleMatch>>* matchedCSSRules, Maybe<protocol::Array<protocol::CSS::PseudoElementMatches>>*, Maybe<protocol::Array<protocol::CSS::InheritedStyleEntry>>*, Maybe<protocol::Array<protocol::CSS::CSSKeyframesRule>>*) override;
@@ -165,7 +160,7 @@
 
     static void collectStyleSheets(CSSStyleSheet*, HeapVector<Member<CSSStyleSheet>>&);
 
-    InspectorCSSAgent(InspectorDOMAgent*, InspectedFrames*, InspectorResourceAgent*, InspectorResourceContentLoader*);
+    InspectorCSSAgent(InspectorDOMAgent*, InspectedFrames*, InspectorResourceAgent*, InspectorResourceContentLoader*, InspectorResourceContainer*);
 
     typedef HeapHashMap<String, Member<InspectorStyleSheet>> IdToInspectorStyleSheet;
     typedef HeapHashMap<String, Member<InspectorStyleSheetForInlineStyle>> IdToInspectorStyleSheetForInlineStyle;
@@ -216,6 +211,7 @@
     Member<InspectedFrames> m_inspectedFrames;
     Member<InspectorResourceAgent> m_resourceAgent;
     Member<InspectorResourceContentLoader> m_resourceContentLoader;
+    Member<InspectorResourceContainer> m_resourceContainer;
 
     IdToInspectorStyleSheet m_idToInspectorStyleSheet;
     IdToInspectorStyleSheetForInlineStyle m_idToInspectorStyleSheetForInlineStyle;
@@ -229,8 +225,6 @@
     NodeIdToForcedPseudoState m_nodeIdToForcedPseudoState;
 
     Member<CSSStyleSheet> m_inspectorUserAgentStyleSheet;
-    HashMap<String, String> m_editedStyleSheets;
-    HashMap<int, String> m_editedStyleElements;
 
     bool m_creatingViaInspectorStyleSheet;
     bool m_isSettingStyleSheetText;
diff --git a/third_party/WebKit/Source/core/inspector/InspectorResourceContainer.cpp b/third_party/WebKit/Source/core/inspector/InspectorResourceContainer.cpp
new file mode 100644
index 0000000..ed6d373
--- /dev/null
+++ b/third_party/WebKit/Source/core/inspector/InspectorResourceContainer.cpp
@@ -0,0 +1,59 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "core/inspector/InspectorResourceContainer.h"
+
+#include "core/inspector/InspectedFrames.h"
+
+namespace blink {
+
+InspectorResourceContainer::InspectorResourceContainer(InspectedFrames* inspectedFrames)
+    : m_inspectedFrames(inspectedFrames)
+{
+}
+
+InspectorResourceContainer::~InspectorResourceContainer()
+{
+}
+
+DEFINE_TRACE(InspectorResourceContainer)
+{
+    visitor->trace(m_inspectedFrames);
+}
+
+void InspectorResourceContainer::didCommitLoadForLocalFrame(LocalFrame* frame)
+{
+    if (frame != m_inspectedFrames->root())
+        return;
+    m_styleSheetContents.clear();
+    m_styleElementContents.clear();
+}
+
+void InspectorResourceContainer::storeStyleSheetContent(const String& url, const String& content)
+{
+    m_styleSheetContents.set(url, content);
+}
+
+bool InspectorResourceContainer::loadStyleSheetContent(const String& url, String* content)
+{
+    if (!m_styleSheetContents.contains(url))
+        return false;
+    *content = m_styleSheetContents.get(url);
+    return true;
+}
+
+void InspectorResourceContainer::storeStyleElementContent(int backendNodeId, const String& content)
+{
+    m_styleElementContents.set(backendNodeId, content);
+}
+
+bool InspectorResourceContainer::loadStyleElementContent(int backendNodeId, String* content)
+{
+    if (!m_styleElementContents.contains(backendNodeId))
+        return false;
+    *content = m_styleElementContents.get(backendNodeId);
+    return true;
+}
+
+} // namespace blink
diff --git a/third_party/WebKit/Source/core/inspector/InspectorResourceContainer.h b/third_party/WebKit/Source/core/inspector/InspectorResourceContainer.h
new file mode 100644
index 0000000..7533099
--- /dev/null
+++ b/third_party/WebKit/Source/core/inspector/InspectorResourceContainer.h
@@ -0,0 +1,45 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef InspectorResourceContainer_h
+#define InspectorResourceContainer_h
+
+#include "core/CoreExport.h"
+#include "platform/heap/Handle.h"
+#include "wtf/Forward.h"
+#include "wtf/HashMap.h"
+#include "wtf/Noncopyable.h"
+#include "wtf/text/StringHash.h"
+#include "wtf/text/WTFString.h"
+
+namespace blink {
+
+class InspectedFrames;
+class LocalFrame;
+
+class CORE_EXPORT InspectorResourceContainer : public GarbageCollectedFinalized<InspectorResourceContainer> {
+    WTF_MAKE_NONCOPYABLE(InspectorResourceContainer);
+public:
+    explicit InspectorResourceContainer(InspectedFrames*);
+    ~InspectorResourceContainer();
+    DECLARE_TRACE();
+
+    void didCommitLoadForLocalFrame(LocalFrame*);
+
+    void storeStyleSheetContent(const String& url, const String& content);
+    bool loadStyleSheetContent(const String& url, String* content);
+
+    void storeStyleElementContent(int backendNodeId, const String& content);
+    bool loadStyleElementContent(int backendNodeId, String* content);
+
+private:
+    Member<InspectedFrames> m_inspectedFrames;
+    HashMap<String, String> m_styleSheetContents;
+    HashMap<int, String> m_styleElementContents;
+};
+
+} // namespace blink
+
+
+#endif // !defined(InspectorResourceContainer_h)
diff --git a/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp b/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp
index c1eb7f9..c307f18 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp
@@ -50,6 +50,7 @@
 #include "core/inspector/IdentifiersFactory.h"
 #include "core/inspector/InspectorCSSAgent.h"
 #include "core/inspector/InspectorResourceAgent.h"
+#include "core/inspector/InspectorResourceContainer.h"
 #include "core/svg/SVGStyleElement.h"
 #include "platform/v8_inspector/public/V8ContentSearchUtil.h"
 #include "wtf/OwnPtr.h"
@@ -917,14 +918,14 @@
     return true;
 }
 
-InspectorStyleSheet* InspectorStyleSheet::create(InspectorResourceAgent* resourceAgent, CSSStyleSheet* pageStyleSheet, const String& origin, const String& documentURL, InspectorCSSAgent* cssAgent)
+InspectorStyleSheet* InspectorStyleSheet::create(InspectorResourceAgent* resourceAgent, CSSStyleSheet* pageStyleSheet, const String& origin, const String& documentURL, InspectorStyleSheetBase::Listener* listener, InspectorResourceContainer* resourceContainer)
 {
-    return new InspectorStyleSheet(resourceAgent, pageStyleSheet, origin, documentURL, cssAgent);
+    return new InspectorStyleSheet(resourceAgent, pageStyleSheet, origin, documentURL, listener, resourceContainer);
 }
 
-InspectorStyleSheet::InspectorStyleSheet(InspectorResourceAgent* resourceAgent, CSSStyleSheet* pageStyleSheet, const String& origin, const String& documentURL, InspectorCSSAgent* cssAgent)
-    : InspectorStyleSheetBase(cssAgent)
-    , m_cssAgent(cssAgent)
+InspectorStyleSheet::InspectorStyleSheet(InspectorResourceAgent* resourceAgent, CSSStyleSheet* pageStyleSheet, const String& origin, const String& documentURL, InspectorStyleSheetBase::Listener* listener, InspectorResourceContainer* resourceContainer)
+    : InspectorStyleSheetBase(listener)
+    , m_resourceContainer(resourceContainer)
     , m_resourceAgent(resourceAgent)
     , m_pageStyleSheet(pageStyleSheet)
     , m_origin(origin)
@@ -944,7 +945,7 @@
 
 DEFINE_TRACE(InspectorStyleSheet)
 {
-    visitor->trace(m_cssAgent);
+    visitor->trace(m_resourceContainer);
     visitor->trace(m_resourceAgent);
     visitor->trace(m_pageStyleSheet);
     visitor->trace(m_sourceData);
@@ -1303,9 +1304,9 @@
     if (markAsLocallyModified) {
         Element* element = ownerStyleElement();
         if (element)
-            m_cssAgent->addEditedStyleElement(DOMNodeIds::idForNode(element), text);
+            m_resourceContainer->storeStyleElementContent(DOMNodeIds::idForNode(element), text);
         else
-            m_cssAgent->addEditedStyleSheet(finalURL(), text);
+            m_resourceContainer->storeStyleSheetContent(finalURL(), text);
     }
 }
 
@@ -1670,7 +1671,7 @@
         return false;
 
     KURL url(ParsedURLString, m_pageStyleSheet->href());
-    if (m_cssAgent->getEditedStyleSheet(url, result))
+    if (m_resourceContainer->loadStyleSheetContent(url, result))
         return true;
 
     bool base64Encoded;
@@ -1695,7 +1696,7 @@
     Element* ownerElement = ownerStyleElement();
     if (!ownerElement)
         return false;
-    if (m_cssAgent->getEditedStyleElement(DOMNodeIds::idForNode(ownerElement), result))
+    if (m_resourceContainer->loadStyleElementContent(DOMNodeIds::idForNode(ownerElement), result))
         return true;
     *result = ownerElement->textContent();
     return true;
diff --git a/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.h b/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.h
index 5372708..f260a6a4b 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.h
+++ b/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.h
@@ -46,8 +46,8 @@
 class Document;
 class Element;
 class ExceptionState;
-class InspectorCSSAgent;
 class InspectorResourceAgent;
+class InspectorResourceContainer;
 class InspectorStyleSheetBase;
 
 typedef HeapVector<Member<CSSRule>> CSSRuleVector;
@@ -120,7 +120,7 @@
 
 class InspectorStyleSheet : public InspectorStyleSheetBase {
 public:
-    static InspectorStyleSheet* create(InspectorResourceAgent*, CSSStyleSheet* pageStyleSheet, const String& origin, const String& documentURL, InspectorCSSAgent*);
+    static InspectorStyleSheet* create(InspectorResourceAgent*, CSSStyleSheet* pageStyleSheet, const String& origin, const String& documentURL, InspectorStyleSheetBase::Listener*, InspectorResourceContainer*);
 
     ~InspectorStyleSheet() override;
     DECLARE_VIRTUAL_TRACE();
@@ -154,7 +154,7 @@
     InspectorStyle* inspectorStyle(CSSStyleDeclaration*) override;
 
 private:
-    InspectorStyleSheet(InspectorResourceAgent*, CSSStyleSheet* pageStyleSheet, const String& origin, const String& documentURL, InspectorCSSAgent*);
+    InspectorStyleSheet(InspectorResourceAgent*, CSSStyleSheet* pageStyleSheet, const String& origin, const String& documentURL, InspectorStyleSheetBase::Listener*, InspectorResourceContainer*);
     CSSRuleSourceData* ruleSourceDataAfterSourceRange(const SourceRange&);
     CSSRuleSourceData* findRuleByHeaderRange(const SourceRange&);
     CSSRuleSourceData* findRuleByBodyRange(const SourceRange&);
@@ -176,7 +176,7 @@
     void innerSetText(const String& newText, bool markAsLocallyModified);
     Element* ownerStyleElement();
 
-    Member<InspectorCSSAgent> m_cssAgent;
+    Member<InspectorResourceContainer> m_resourceContainer;
     Member<InspectorResourceAgent> m_resourceAgent;
     Member<CSSStyleSheet> m_pageStyleSheet;
     String m_origin;
diff --git a/third_party/WebKit/Source/core/layout/ColumnBalancer.h b/third_party/WebKit/Source/core/layout/ColumnBalancer.h
index 40fd612..2a4976e 100644
--- a/third_party/WebKit/Source/core/layout/ColumnBalancer.h
+++ b/third_party/WebKit/Source/core/layout/ColumnBalancer.h
@@ -140,8 +140,7 @@
         // breaks assumed so far.
         LayoutUnit columnLogicalHeight(LayoutUnit startOffset) const
         {
-            // TODO(leviw): This should probably be fromFloatCeil.
-            return LayoutUnit(ceilf((m_breakOffset - startOffset) / float(m_assumedImplicitBreaks + 1)));
+            return LayoutUnit::fromFloatCeil(float(m_breakOffset - startOffset) / float(m_assumedImplicitBreaks + 1));
         }
 
     private:
diff --git a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp
index 927e9aa..6a3f128 100644
--- a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp
@@ -726,6 +726,8 @@
         // Keep track of the break-after value of the child, so that it can be joined with the
         // break-before value of the next in-flow object at the next class A break point.
         layoutInfo.setPreviousBreakAfterValue(child.breakAfter());
+
+        paginatedContentWasLaidOut(child.logicalBottom());
     }
 
     if (child.isLayoutMultiColumnSpannerPlaceholder()) {
@@ -787,8 +789,6 @@
         }
     }
 
-    paginatedContentWasLaidOut(newLogicalTop + child.logicalHeight());
-
     // Similar to how we apply clearance. Go ahead and boost height() to be the place where we're going to position the child.
     setLogicalHeight(logicalHeight() + (newLogicalTop - logicalTop));
 
diff --git a/third_party/WebKit/Source/core/origin_trials/OriginTrialContext.h b/third_party/WebKit/Source/core/origin_trials/OriginTrialContext.h
index df27b813..1b4b677 100644
--- a/third_party/WebKit/Source/core/origin_trials/OriginTrialContext.h
+++ b/third_party/WebKit/Source/core/origin_trials/OriginTrialContext.h
@@ -9,6 +9,7 @@
 #include "platform/Supplementable.h"
 #include "wtf/HashSet.h"
 #include "wtf/Vector.h"
+#include "wtf/text/StringHash.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.cpp b/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.cpp
index 9de6192..f6b623e4 100644
--- a/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.cpp
+++ b/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.cpp
@@ -223,11 +223,6 @@
     , m_downloadingToFile(false)
     , m_responseTextOverflow(false)
 {
-#if ENABLE(ASSERT) && !ENABLE(OILPAN)
-    // Verify that this object was allocated on the 'eager' heap.
-    // (this check comes 'for free' with Oilpan enabled.)
-    ASSERT(IS_EAGERLY_FINALIZED());
-#endif
 }
 
 XMLHttpRequest::~XMLHttpRequest()
diff --git a/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.h b/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.h
index 9aa2719..4b33c0e8 100644
--- a/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.h
+++ b/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.h
@@ -147,9 +147,6 @@
     // (Also) eagerly finalized so as to prevent access to the eagerly finalized
     // progress event throttle.
     EAGERLY_FINALIZE();
-#if !ENABLE(OILPAN)
-    DECLARE_EAGER_FINALIZATION_OPERATOR_NEW();
-#endif
     DECLARE_VIRTUAL_TRACE();
 
 private:
diff --git a/third_party/WebKit/Source/devtools/front_end/common/Text.js b/third_party/WebKit/Source/devtools/front_end/common/Text.js
index 3e62f17..cc49351d 100644
--- a/third_party/WebKit/Source/devtools/front_end/common/Text.js
+++ b/third_party/WebKit/Source/devtools/front_end/common/Text.js
@@ -129,6 +129,16 @@
     },
 
     /**
+     * @param {number} offset
+     */
+    resetTo: function(offset)
+    {
+        this._offset = offset;
+        this._lineNumber = this._lineEndings.lowerBound(offset);
+        this._columnNumber = this._lineNumber ? this._offset - this._lineEndings[this._lineNumber - 1] - 1 : this._offset;
+    },
+
+    /**
      * @return {number}
      */
     lineNumber: function()
diff --git a/third_party/WebKit/Source/devtools/front_end/es_tree/ESTreeWalker.js b/third_party/WebKit/Source/devtools/front_end/es_tree/ESTreeWalker.js
index 6f564db..dfa926c0 100644
--- a/third_party/WebKit/Source/devtools/front_end/es_tree/ESTreeWalker.js
+++ b/third_party/WebKit/Source/devtools/front_end/es_tree/ESTreeWalker.js
@@ -5,14 +5,16 @@
 /**
  * @constructor
  * @param {function(!ESTree.Node)} beforeVisit
- * @param {function(!ESTree.Node)} afterVisit
+ * @param {function(!ESTree.Node)=} afterVisit
  */
 WebInspector.ESTreeWalker = function(beforeVisit, afterVisit)
 {
     this._beforeVisit = beforeVisit;
-    this._afterVisit = afterVisit;
+    this._afterVisit = afterVisit || new Function();
 }
 
+WebInspector.ESTreeWalker.SkipSubtree = {};
+
 WebInspector.ESTreeWalker.prototype = {
     /**
      * @param {!ESTree.Node} ast
@@ -32,7 +34,10 @@
             return;
         node.parent = parent;
 
-        this._beforeVisit.call(null, node);
+        if (this._beforeVisit.call(null, node) === WebInspector.ESTreeWalker.SkipSubtree) {
+            this._afterVisit.call(null, node);
+            return;
+        }
 
         var walkOrder = WebInspector.ESTreeWalker._walkOrder[node.type];
         if (!walkOrder) {
diff --git a/third_party/WebKit/Source/devtools/front_end/externs.js b/third_party/WebKit/Source/devtools/front_end/externs.js
index 8933a5f..6104f88 100644
--- a/third_party/WebKit/Source/devtools/front_end/externs.js
+++ b/third_party/WebKit/Source/devtools/front_end/externs.js
@@ -683,6 +683,8 @@
     this.name;
     /** @type {(?ESTree.Node|undefined)} */
     this.id;
+    /** @type {(number|undefined)} */
+    this.length;
 }
 
 /**
diff --git a/third_party/WebKit/Source/devtools/front_end/formatter_worker/FormatterWorker.js b/third_party/WebKit/Source/devtools/front_end/formatter_worker/FormatterWorker.js
index 37014ddcf..2c8fd46 100644
--- a/third_party/WebKit/Source/devtools/front_end/formatter_worker/FormatterWorker.js
+++ b/third_party/WebKit/Source/devtools/front_end/formatter_worker/FormatterWorker.js
@@ -131,11 +131,11 @@
  */
 WebInspector.javaScriptIdentifiers = function(content)
 {
-    var root = acorn.parse(content, {});
+    var root = acorn.parse(content, { ranges: false, ecmaVersion: 6 });
+
     /** @type {!Array<!ESTree.Node>} */
     var identifiers = [];
-    var functionDeclarationCounter = 0;
-    var walker = new WebInspector.ESTreeWalker(beforeVisit, afterVisit);
+    var walker = new WebInspector.ESTreeWalker(beforeVisit);
 
     /**
      * @param {!ESTree.Node} node
@@ -143,7 +143,7 @@
      */
     function isFunction(node)
     {
-        return node.type === "FunctionDeclaration" || node.type === "FunctionExpression";
+        return node.type === "FunctionDeclaration" || node.type === "FunctionExpression" || node.type === "ArrowFunctionExpression";
     }
 
     /**
@@ -151,29 +151,29 @@
      */
     function beforeVisit(node)
     {
-        if (isFunction(node))
-            functionDeclarationCounter++;
+        if (isFunction(node)) {
+            if (node.id)
+                identifiers.push(node.id);
+            return WebInspector.ESTreeWalker.SkipSubtree;
+        }
 
-        if (functionDeclarationCounter > 1)
+        if (node.type !== "Identifier")
             return;
 
-        if (isFunction(node) && node.params)
-            identifiers.pushAll(node.params);
-
-        if (node.type === "VariableDeclarator")
-            identifiers.push(/** @type {!ESTree.Node} */(node.id));
+        if (node.parent && node.parent.type === "MemberExpression" && node.parent.property === node && !node.parent.computed)
+            return;
+        identifiers.push(node);
     }
 
-    /**
-     * @param {!ESTree.Node} node
-     */
-    function afterVisit(node)
-    {
-        if (isFunction(node))
-            functionDeclarationCounter--;
+    if (!root || root.type !== "Program" || root.body.length !== 1 || !isFunction(root.body[0])) {
+        postMessage([]);
+        return;
     }
 
-    walker.walk(root);
+    var functionNode = root.body[0];
+    for (var param of functionNode.params)
+        walker.walk(param);
+    walker.walk(functionNode.body);
     var reduced = identifiers.map(id => ({name: id.name, offset: id.start}));
     postMessage(reduced);
 }
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/DebuggerModel.js b/third_party/WebKit/Source/devtools/front_end/sdk/DebuggerModel.js
index f94d688..2290fec 100644
--- a/third_party/WebKit/Source/devtools/front_end/sdk/DebuggerModel.js
+++ b/third_party/WebKit/Source/devtools/front_end/sdk/DebuggerModel.js
@@ -1038,7 +1038,6 @@
 }
 
 WebInspector.DebuggerModel.CallFrame.prototype = {
-
     /**
      * @return {!WebInspector.Script}
      */
@@ -1206,6 +1205,14 @@
 
 WebInspector.DebuggerModel.Scope.prototype = {
     /**
+     * @return {!WebInspector.DebuggerModel.CallFrame}
+     */
+    callFrame: function()
+    {
+        return this._callFrame;
+    },
+
+    /**
      * @return {string}
      */
     type: function()
diff --git a/third_party/WebKit/Source/devtools/front_end/sources/SourceMapNamesResolver.js b/third_party/WebKit/Source/devtools/front_end/sources/SourceMapNamesResolver.js
index 5449ee59..3eca7c8a 100644
--- a/third_party/WebKit/Source/devtools/front_end/sources/SourceMapNamesResolver.js
+++ b/third_party/WebKit/Source/devtools/front_end/sources/SourceMapNamesResolver.js
@@ -5,53 +5,49 @@
 WebInspector.SourceMapNamesResolver = {};
 
 WebInspector.SourceMapNamesResolver._cachedMapSymbol = Symbol("cache");
-WebInspector.SourceMapNamesResolver._cachedPromiseSymbol = Symbol("cachePromise");
+WebInspector.SourceMapNamesResolver._cachedIdentifiersSymbol = Symbol("cachedIdentifiers");
+
+/**
+ * @constructor
+ * @param {string} name
+ * @param {number} lineNumber
+ * @param {number} columnNumber
+ */
+WebInspector.SourceMapNamesResolver.Identifier = function(name, lineNumber, columnNumber)
+{
+    this.name = name;
+    this.lineNumber = lineNumber;
+    this.columnNumber = columnNumber;
+}
 
 /**
  * @param {!WebInspector.DebuggerModel.Scope} scope
- * @return {!Promise.<!Map<string, string>>}
+ * @return {!Promise<!Array<!WebInspector.SourceMapNamesResolver.Identifier>>}
  */
-WebInspector.SourceMapNamesResolver._resolveScope = function(scope)
+WebInspector.SourceMapNamesResolver._scopeIdentifiers = function(scope)
 {
-    var cachedMap = scope[WebInspector.SourceMapNamesResolver._cachedMapSymbol];
-    if (cachedMap)
-        return Promise.resolve(cachedMap);
-
-    var cachedPromise = scope[WebInspector.SourceMapNamesResolver._cachedPromiseSymbol];
-    if (cachedPromise)
-        return cachedPromise;
-
     var startLocation = scope.startLocation();
     var endLocation = scope.endLocation();
 
     if (scope.type() === DebuggerAgent.ScopeType.Global || !startLocation || !endLocation || !startLocation.script().sourceMapURL || (startLocation.script() !== endLocation.script()))
-        return Promise.resolve(new Map());
+        return Promise.resolve(/** @type {!Array<!WebInspector.SourceMapNamesResolver.Identifier>}*/([]));
 
     var script = startLocation.script();
-    var sourceMap = WebInspector.debuggerWorkspaceBinding.sourceMapForScript(script);
-    if (!sourceMap)
-        return Promise.resolve(new Map());
-
-    var promise = script.requestContent().then(onContent);
-    scope[WebInspector.SourceMapNamesResolver._cachedPromiseSymbol] = promise;
-    return promise;
+    return script.requestContent().then(onContent);
 
     /**
      * @param {?string} content
-     * @return {!Promise<!Map<string, string>>}
+     * @return {!Promise<!Array<!WebInspector.SourceMapNamesResolver.Identifier>>}
      */
     function onContent(content)
     {
         if (!content)
-            return Promise.resolve(new Map());
-
-        var startLocation = scope.startLocation();
-        var endLocation = scope.endLocation();
-        var textRange = new WebInspector.TextRange(startLocation.lineNumber, startLocation.columnNumber, endLocation.lineNumber, endLocation.columnNumber);
+            return Promise.resolve(/** @type {!Array<!WebInspector.SourceMapNamesResolver.Identifier>}*/([]));
 
         var text = new WebInspector.Text(content);
-        var scopeText = text.extract(textRange);
-        var scopeStart = text.toSourceRange(textRange).offset;
+        var scopeRange = new WebInspector.TextRange(startLocation.lineNumber, startLocation.columnNumber, endLocation.lineNumber, endLocation.columnNumber)
+        var scopeText = text.extract(scopeRange);
+        var scopeStart = text.toSourceRange(scopeRange).offset;
         var prefix = "function fui";
 
         return WebInspector.SourceMapNamesResolverWorker._instance().javaScriptIdentifiers(prefix + scopeText)
@@ -63,28 +59,124 @@
      * @param {number} scopeStart
      * @param {string} prefix
      * @param {!Array<!{name: string, offset: number}>} identifiers
-     * @return {!Map<string, string>}
+     * @return {!Array<!WebInspector.SourceMapNamesResolver.Identifier>}
      */
     function onIdentifiers(text, scopeStart, prefix, identifiers)
     {
-        var namesMapping = new Map();
-        var lineEndings = text.lineEndings();
-
+        var result = [];
+        var cursor = new WebInspector.TextCursor(text.lineEndings());
+        var promises = [];
         for (var i = 0; i < identifiers.length; ++i) {
             var id = identifiers[i];
+            if (id.offset < prefix.length)
+                continue;
             var start = scopeStart + id.offset - prefix.length;
+            cursor.resetTo(start);
+            result.push(new WebInspector.SourceMapNamesResolver.Identifier(id.name, cursor.lineNumber(), cursor.columnNumber()));
+        }
+        return result;
+    }
+}
 
-            var lineNumber = lineEndings.lowerBound(start);
-            var columnNumber = start - (lineNumber === 0 ? 0 : (lineEndings[lineNumber - 1] + 1));
-            var entry = sourceMap.findEntry(lineNumber, columnNumber);
-            if (entry)
+/**
+ * @param {!WebInspector.DebuggerModel.Scope} scope
+ * @return {!Promise.<!Map<string, string>>}
+ */
+WebInspector.SourceMapNamesResolver._resolveScope = function(scope)
+{
+    var identifiersPromise = scope[WebInspector.SourceMapNamesResolver._cachedIdentifiersSymbol];
+    if (identifiersPromise)
+        return identifiersPromise;
+
+    var script = scope.callFrame().script;
+    var sourceMap = WebInspector.debuggerWorkspaceBinding.sourceMapForScript(script);
+    if (!sourceMap)
+        return Promise.resolve(new Map());
+
+    /** @type {!Map<string, !WebInspector.Text>} */
+    var textCache = new Map();
+    identifiersPromise = WebInspector.SourceMapNamesResolver._scopeIdentifiers(scope).then(onIdentifiers);
+    scope[WebInspector.SourceMapNamesResolver._cachedIdentifiersSymbol] = identifiersPromise;
+    return identifiersPromise;
+
+    /**
+     * @param {!Array<!WebInspector.SourceMapNamesResolver.Identifier>} identifiers
+     * @return {!Promise<!Map<string, string>>}
+     */
+    function onIdentifiers(identifiers)
+    {
+        var namesMapping = new Map();
+        // Extract as much as possible from SourceMap.
+        for (var i = 0; i < identifiers.length; ++i) {
+            var id = identifiers[i];
+            var entry = sourceMap.findEntry(id.lineNumber, id.columnNumber);
+            if (entry && entry.name)
                 namesMapping.set(id.name, entry.name);
         }
 
-        scope[WebInspector.SourceMapNamesResolver._cachedMapSymbol] = namesMapping;
-        delete scope[WebInspector.SourceMapNamesResolver._cachedPromiseSymbol];
-        WebInspector.SourceMapNamesResolver._scopeResolvedForTest();
-        return namesMapping;
+        // Resolve missing identifier names from sourcemap ranges.
+        var promises = [];
+        for (var i = 0; i < identifiers.length; ++i) {
+            var id = identifiers[i];
+            if (namesMapping.has(id.name))
+                continue;
+            var promise = resolveSourceName(id).then(onSourceNameResolved.bind(null, namesMapping, id));
+            promises.push(promise);
+        }
+        return Promise.all(promises)
+            .then(() => WebInspector.SourceMapNamesResolver._scopeResolvedForTest())
+            .then(() => namesMapping)
+    }
+
+    /**
+     * @param {!Map<string, string>} namesMapping
+     * @param {!WebInspector.SourceMapNamesResolver.Identifier} id
+     * @param {?string} sourceName
+     */
+    function onSourceNameResolved(namesMapping, id, sourceName)
+    {
+        if (!sourceName)
+            return;
+        namesMapping.set(id.name, sourceName);
+    }
+
+    /**
+     * @param {!WebInspector.SourceMapNamesResolver.Identifier} id
+     * @return {!Promise<?string>}
+     */
+    function resolveSourceName(id)
+    {
+        var startEntry = sourceMap.findEntry(id.lineNumber, id.columnNumber);
+        var endEntry = sourceMap.findEntry(id.lineNumber, id.columnNumber + id.name.length);
+        if (!startEntry || !endEntry || !startEntry.sourceURL || startEntry.sourceURL !== endEntry.sourceURL
+            || !startEntry.sourceLineNumber || !startEntry.sourceColumnNumber
+            || !endEntry.sourceLineNumber || !endEntry.sourceColumnNumber)
+            return Promise.resolve(/** @type {?string} */(null));
+        var sourceTextRange = new WebInspector.TextRange(startEntry.sourceLineNumber, startEntry.sourceColumnNumber, endEntry.sourceLineNumber, endEntry.sourceColumnNumber);
+        var uiSourceCode = WebInspector.networkMapping.uiSourceCodeForScriptURL(startEntry.sourceURL, script);
+        if (!uiSourceCode)
+            return Promise.resolve(/** @type {?string} */(null));
+
+        return uiSourceCode.requestContent()
+            .then(onSourceContent.bind(null, sourceTextRange));
+    }
+
+    /**
+     * @param {!WebInspector.TextRange} sourceTextRange
+     * @param {?string} content
+     * @return {?string}
+     */
+    function onSourceContent(sourceTextRange, content)
+    {
+        if (!content)
+            return null;
+        var text = textCache.get(content);
+        if (!text) {
+            text = new WebInspector.Text(content);
+            textCache.set(content, text);
+        }
+        var originalIdentifier = text.extract(sourceTextRange).trim();
+        return /[a-zA-Z0-9_$]+/.test(originalIdentifier) ? originalIdentifier : null;
     }
 }
 
@@ -151,7 +243,7 @@
         if (reverseMapping.has(originalText))
             return Promise.resolve(reverseMapping.get(originalText) || "");
 
-        return WebInspector.SourceMapNamesResolver._resolveExpression(callFrame, uiSourceCode, lineNumber, startColumnNumber, endColumnNumber)
+        return WebInspector.SourceMapNamesResolver._resolveExpression(callFrame, uiSourceCode, lineNumber, startColumnNumber, endColumnNumber);
     }
 }
 
diff --git a/third_party/WebKit/Source/modules/BUILD.gn b/third_party/WebKit/Source/modules/BUILD.gn
index d434475..d027e15 100644
--- a/third_party/WebKit/Source/modules/BUILD.gn
+++ b/third_party/WebKit/Source/modules/BUILD.gn
@@ -49,6 +49,7 @@
     "//device/battery:mojo_bindings",
     "//mojo/public/c/system:for_component",
     "//third_party/WebKit/Source/core",
+    "//third_party/WebKit/public:mojo_bindings",
     "//third_party/WebKit/public:mojo_bindings_blink",
     "//third_party/icu",
     "//third_party/sqlite",
diff --git a/third_party/WebKit/Source/platform/heap/Handle.h b/third_party/WebKit/Source/platform/heap/Handle.h
index 210d88c..e45d1e1 100644
--- a/third_party/WebKit/Source/platform/heap/Handle.h
+++ b/third_party/WebKit/Source/platform/heap/Handle.h
@@ -330,6 +330,33 @@
         Parent::operator=(other);
         return *this;
     }
+
+    // Requests that the thread state clear this handle when the thread shuts
+    // down. This is intended for use with ThreadSpecific<Persistent<T>>.
+    // It's important that the Persistent<T> exist until then, because this
+    // takes a raw pointer to that handle.
+    //
+    // Example:
+    //   Foo& sharedFoo()
+    //   {
+    //        DEFINE_THREAD_SAFE_STATIC_LOCAL(
+    //            ThreadSpecific<Persistent<Foo>>, threadSpecificFoo,
+    //            new ThreadSpecific<Persistent<Foo>>);
+    //        Persistent<Foo>& fooHandle = *threadSpecificFoo;
+    //        if (!fooHandle) {
+    //            fooHandle = new Foo;
+    //            fooHandle.clearOnThreadShutdown();
+    //        }
+    //        return *fooHandle;
+    //   }
+    void clearOnThreadShutdown()
+    {
+        void (*closure)(Persistent<T>*) = [](Persistent<T>* handle)
+        {
+            *handle = nullptr;
+        };
+        ThreadState::current()->registerThreadShutdownHook(WTF::bind(closure, this));
+    }
 };
 
 // WeakPersistent is a way to create a weak pointer from an off-heap object
diff --git a/third_party/WebKit/Source/platform/heap/HeapTest.cpp b/third_party/WebKit/Source/platform/heap/HeapTest.cpp
index 7e480912..0fd79a2 100644
--- a/third_party/WebKit/Source/platform/heap/HeapTest.cpp
+++ b/third_party/WebKit/Source/platform/heap/HeapTest.cpp
@@ -497,6 +497,10 @@
     }
 };
 
+// Needed to give this variable a definition (the initializer above is only a
+// declaration), so that subclasses can use it.
+const int ThreadedTesterBase::numberOfThreads;
+
 class ThreadedHeapTester : public ThreadedTesterBase {
 public:
     static void test()
@@ -6483,4 +6487,45 @@
     EXPECT_EQ(33, heapVectorIntWrapper[0]->value());
 }
 
+namespace {
+
+class ThreadedClearOnShutdownTester : public ThreadedTesterBase {
+public:
+    static void test()
+    {
+        IntWrapper::s_destructorCalls = 0;
+        ThreadedTesterBase::test(new ThreadedClearOnShutdownTester);
+        EXPECT_EQ(numberOfThreads, IntWrapper::s_destructorCalls);
+    }
+
+private:
+    void runThread() override
+    {
+        ThreadState::attach();
+        EXPECT_EQ(42, threadSpecificIntWrapper().value());
+        ThreadState::detach();
+        atomicDecrement(&m_threadsToFinish);
+    }
+
+    static IntWrapper& threadSpecificIntWrapper()
+    {
+        DEFINE_THREAD_SAFE_STATIC_LOCAL(
+            ThreadSpecific<Persistent<IntWrapper>>, intWrapper,
+            new ThreadSpecific<Persistent<IntWrapper>>);
+        Persistent<IntWrapper>& handle = *intWrapper;
+        if (!handle) {
+            handle = new IntWrapper(42);
+            handle.clearOnThreadShutdown();
+        }
+        return *handle;
+    }
+};
+
+} // namespace
+
+TEST(HeapTest, TestClearOnShutdown)
+{
+    ThreadedClearOnShutdownTester::test();
+}
+
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/heap/ThreadState.cpp b/third_party/WebKit/Source/platform/heap/ThreadState.cpp
index 6d2f295..3b3cfd8 100644
--- a/third_party/WebKit/Source/platform/heap/ThreadState.cpp
+++ b/third_party/WebKit/Source/platform/heap/ThreadState.cpp
@@ -292,6 +292,12 @@
         // pointers into the heap owned by this thread.
         m_isTerminating = true;
 
+        // Invoke the cleanup hooks. This gives an opportunity to release any
+        // persistent handles that may exist, e.g. in thread-specific static
+        // locals.
+        for (const OwnPtr<SameThreadClosure>& hook : m_threadShutdownHooks)
+            (*hook)();
+
         // Set the terminate flag on all heap pages of this thread. This is used to
         // ensure we don't trace pages on other threads that are not part of the
         // thread local GC.
@@ -1359,6 +1365,13 @@
     }
 }
 
+void ThreadState::registerThreadShutdownHook(PassOwnPtr<SameThreadClosure> hook)
+{
+    ASSERT(checkThread());
+    ASSERT(!isTerminating());
+    m_threadShutdownHooks.append(hook);
+}
+
 #if defined(LEAK_SANITIZER)
 void ThreadState::registerStaticPersistentNode(PersistentNode* node)
 {
diff --git a/third_party/WebKit/Source/platform/heap/ThreadState.h b/third_party/WebKit/Source/platform/heap/ThreadState.h
index 82c0691..56718f42 100644
--- a/third_party/WebKit/Source/platform/heap/ThreadState.h
+++ b/third_party/WebKit/Source/platform/heap/ThreadState.h
@@ -39,6 +39,7 @@
 #include "wtf/AddressSanitizer.h"
 #include "wtf/Allocator.h"
 #include "wtf/Forward.h"
+#include "wtf/Functional.h"
 #include "wtf/HashMap.h"
 #include "wtf/HashSet.h"
 #include "wtf/ThreadSpecific.h"
@@ -505,6 +506,11 @@
     size_t threadStackSize();
 #endif
 
+    // Registers a closure that will be called while the thread is shutting down
+    // (i.e. ThreadState::isTerminating will be true), in order to allow for any
+    // persistent handles that should be cleared.
+    void registerThreadShutdownHook(PassOwnPtr<SameThreadClosure>);
+
 #if defined(LEAK_SANITIZER)
     void registerStaticPersistentNode(PersistentNode*);
     void releaseStaticPersistentNodes();
@@ -658,6 +664,10 @@
     v8::Isolate* m_isolate;
     void (*m_traceDOMWrappers)(v8::Isolate*, Visitor*);
 
+    // Invoked while the thread is terminating. Intended to be used to free
+    // persistent pointers into the thread's heap.
+    Vector<OwnPtr<SameThreadClosure>> m_threadShutdownHooks;
+
 #if defined(ADDRESS_SANITIZER)
     void* m_asanFakeStack;
 #endif
diff --git a/third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp b/third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp
index 40b669c..fd0200af 100644
--- a/third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp
+++ b/third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp
@@ -50,6 +50,7 @@
 #include "core/inspector/InspectorPageAgent.h"
 #include "core/inspector/InspectorProfilerAgent.h"
 #include "core/inspector/InspectorResourceAgent.h"
+#include "core/inspector/InspectorResourceContainer.h"
 #include "core/inspector/InspectorResourceContentLoader.h"
 #include "core/inspector/InspectorTaskRunner.h"
 #include "core/inspector/InspectorTracingAgent.h"
@@ -307,6 +308,7 @@
     , m_resourceContentLoader(InspectorResourceContentLoader::create(m_webLocalFrameImpl->frame()))
     , m_overlay(overlay)
     , m_inspectedFrames(InspectedFrames::create(m_webLocalFrameImpl->frame()))
+    , m_resourceContainer(new InspectorResourceContainer(m_inspectedFrames))
     , m_domAgent(nullptr)
     , m_pageAgent(nullptr)
     , m_resourceAgent(nullptr)
@@ -361,6 +363,7 @@
     visitor->trace(m_resourceContentLoader);
     visitor->trace(m_overlay);
     visitor->trace(m_inspectedFrames);
+    visitor->trace(m_resourceContainer);
     visitor->trace(m_domAgent);
     visitor->trace(m_pageAgent);
     visitor->trace(m_resourceAgent);
@@ -408,7 +411,7 @@
     m_resourceAgent = resourceAgent;
     m_agents.append(resourceAgent);
 
-    InspectorCSSAgent* cssAgent = InspectorCSSAgent::create(m_domAgent, m_inspectedFrames.get(), m_resourceAgent, m_resourceContentLoader.get());
+    InspectorCSSAgent* cssAgent = InspectorCSSAgent::create(m_domAgent, m_inspectedFrames.get(), m_resourceAgent, m_resourceContentLoader.get(), m_resourceContainer.get());
     m_agents.append(cssAgent);
 
     m_agents.append(InspectorAnimationAgent::create(m_inspectedFrames.get(), m_domAgent, cssAgent, runtimeAgent));
@@ -534,6 +537,7 @@
 
 void WebDevToolsAgentImpl::didCommitLoadForLocalFrame(LocalFrame* frame)
 {
+    m_resourceContainer->didCommitLoadForLocalFrame(frame);
     m_resourceContentLoader->didCommitLoadForLocalFrame(frame);
     m_agents.didCommitLoadForLocalFrame(frame);
 }
diff --git a/third_party/WebKit/Source/web/WebDevToolsAgentImpl.h b/third_party/WebKit/Source/web/WebDevToolsAgentImpl.h
index 0ff7565..e3917c7 100644
--- a/third_party/WebKit/Source/web/WebDevToolsAgentImpl.h
+++ b/third_party/WebKit/Source/web/WebDevToolsAgentImpl.h
@@ -49,6 +49,7 @@
 class GraphicsLayer;
 class InspectedFrames;
 class InspectorOverlay;
+class InspectorResourceContainer;
 class InspectorResourceContentLoader;
 class LocalFrame;
 class Page;
@@ -152,6 +153,7 @@
     Member<InspectorResourceContentLoader> m_resourceContentLoader;
     Member<InspectorOverlay> m_overlay;
     Member<InspectedFrames> m_inspectedFrames;
+    Member<InspectorResourceContainer> m_resourceContainer;
     OwnPtr<V8InspectorSession> m_v8Session;
 
     Member<InspectorDOMAgent> m_domAgent;
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/lint_test_expectations_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/lint_test_expectations_unittest.py
index dd8fa4a..c5e1b15 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/lint_test_expectations_unittest.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/lint_test_expectations_unittest.py
@@ -101,7 +101,8 @@
         self.assertEqual(res, [])
         self.assertEqual(host.ports_parsed, ['a', 'b', 'b-win'])
 
-    def test_lint_test_files(self):
+    # TODO(crbug.com/188963003) - reenable this when the ARB is restarted.
+    def disabled_test_lint_test_files(self):
         logging_stream = StringIO.StringIO()
         options = optparse.Values({'platform': 'test-mac-mac10.10'})
         host = MockHost()
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py
index df9e5ec..a555f766 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py
@@ -170,6 +170,10 @@
         if self.REBASELINE_MODIFIER in expectations:
             expectation_line.warnings.append('REBASELINE should only be used for running rebaseline.py. Cannot be checked in.')
 
+        # TODO(crbug.com/603753) - Don't let NeedsRebaseline be checked in while the auto-rebaseline-bot is down.
+        if self.NEEDS_REBASELINE_MODIFIER in expectations:
+            expectation_line.warnings.append('NeedsRebaseline is broken at the moment. See crbug.com/603753.')
+
         if self.NEEDS_REBASELINE_MODIFIER in expectations or self.NEEDS_MANUAL_REBASELINE_MODIFIER in expectations:
             for test in expectation_line.matching_tests:
                 if self._port.reference_files(test):
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py
index d7e03a8..430f568 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py
@@ -189,7 +189,8 @@
         s = self._exp.get_test_set(CRASH)
         self.assertEqual(s, set(['failures/expected/crash.html', 'failures/expected/image_checksum.html']))
 
-    def test_needs_rebaseline_reftest(self):
+    # TODO(crbug.com/188963003) - reenable this when the ARB is restarted.
+    def disabled_test_needs_rebaseline_reftest(self):
         try:
             filesystem = self._port.host.filesystem
             filesystem.write_text_file(filesystem.join(self._port.layout_tests_dir(),
@@ -208,7 +209,8 @@
 expectations:2 A reftest cannot be marked as NeedsRebaseline/NeedsManualRebaseline failures/expected/needsmanualrebaseline.html"""
             self.assertEqual(str(e), warnings)
 
-    def test_parse_warning(self):
+    # TODO(crbug.com/188963003) - reenable this when the ARB is restarted.
+    def disabled_test_parse_warning(self):
         try:
             filesystem = self._port.host.filesystem
             filesystem.write_text_file(filesystem.join(self._port.layout_tests_dir(), 'disabled-test.html-disabled'), 'content')
diff --git a/third_party/libwebp/libwebp.gyp b/third_party/libwebp/libwebp.gyp
index a0acff1..7174c1f 100644
--- a/third_party/libwebp/libwebp.gyp
+++ b/third_party/libwebp/libwebp.gyp
@@ -97,13 +97,6 @@
         ['OS!="ios" and (target_arch=="ia32" or target_arch=="x64")', {
           'defines': [ 'WEBP_HAVE_SSE2', 'WEBP_HAVE_SSE41' ],
         }],
-        ['order_profiling != 0', {
-          'target_conditions' : [
-            ['_toolset=="target"', {
-              'cflags!': [ '-finstrument-functions' ],
-            }],
-          ],
-        }],
       ],
     },
     {
@@ -131,13 +124,6 @@
           'cflags': [ '-msse2', ],
           'xcode_settings': { 'OTHER_CFLAGS': [ '-msse2' ] },
         }],
-        ['order_profiling != 0', {
-          'target_conditions' : [
-            ['_toolset=="target"', {
-              'cflags!': [ '-finstrument-functions' ],
-            }],
-          ],
-        }],
       ],
     },
     {
@@ -165,13 +151,6 @@
           'cflags': [ '-msse4.1', ],
           'xcode_settings': { 'OTHER_CFLAGS': [ '-msse4.1' ] },
         }],
-        ['order_profiling != 0', {
-          'target_conditions' : [
-            ['_toolset=="target"', {
-              'cflags!': [ '-finstrument-functions' ],
-            }],
-          ],
-        }],
       ],
     },
     {
@@ -210,13 +189,6 @@
         }, {
           'type': 'none',
         }],
-        ['order_profiling != 0', {
-          'target_conditions' : [
-            ['_toolset=="target"', {
-              'cflags!': [ '-finstrument-functions' ],
-            }],
-          ],
-        }],
       ],
     },
     {
diff --git a/tools/mb/mb.py b/tools/mb/mb.py
index b1ecae2d..2eba40ed 100755
--- a/tools/mb/mb.py
+++ b/tools/mb/mb.py
@@ -722,7 +722,7 @@
     self.MaybeMakeDirectory(self.ToAbsPath(build_dir))
 
     gn_args_path = self.ToAbsPath(build_dir, 'args.gn')
-    self.WriteFile(gn_args_path, gn_args)
+    self.WriteFile(gn_args_path, gn_args, force_verbose=True)
 
     swarming_targets = []
     if getattr(self.args, 'swarming_targets_file', None):
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl
index a8ca4a5..2192a72 100644
--- a/tools/mb/mb_config.pyl
+++ b/tools/mb/mb_config.pyl
@@ -197,6 +197,8 @@
       'CrWinClangLLD64 tester': 'none',
       'CrWinClngLLD64dbg tester': 'none',
       'CrWinClngLLDdbg tester': 'none',
+      'Headless Linux (dbg)':
+        '//build/args/bots/chromium.fyi/headless_linux_dbg.gn',
       'LTO Linux Perf': 'gn_official_goma_lto',
       'Libfuzzer Upload Linux ASan': 'gn_release_libfuzzer_asan',
       'Libfuzzer Upload Linux MSan': 'gn_release_libfuzzer_msan',
diff --git a/tools/mb/mb_unittest.py b/tools/mb/mb_unittest.py
index 63b81d5..20ed720e3 100755
--- a/tools/mb/mb_unittest.py
+++ b/tools/mb/mb_unittest.py
@@ -56,6 +56,8 @@
     return self.files[path]
 
   def WriteFile(self, path, contents, force_verbose=False):
+    if self.args.dryrun or self.args.verbose or force_verbose:
+      self.Print('\nWriting """\\\n%s""" to %s.\n' % (contents, path))
     self.files[path] = contents
 
   def Call(self, cmd, env=None, buffer_output=True):
@@ -305,23 +307,26 @@
   def test_gn_gen(self):
     mbw = self.fake_mbw()
     self.check(['gen', '-c', 'gn_debug_goma', '//out/Default', '-g', '/goma'],
-               mbw=mbw, ret=0,
-               out=('/fake_src/buildtools/linux64/gn gen //out/Default '
-                    '--check\n'))
+               mbw=mbw, ret=0)
     self.assertMultiLineEqual(mbw.files['/fake_src/out/Default/args.gn'],
                               ('goma_dir = "/goma"\n'
                                'is_debug = true\n'
                                'use_goma = true\n'))
 
+    # Make sure we log both what is written to args.gn and the command line.
+    self.assertIn('Writing """', mbw.out)
+    self.assertIn('/fake_src/buildtools/linux64/gn gen //out/Default --check',
+                  mbw.out)
+
     mbw = self.fake_mbw(win32=True)
     self.check(['gen', '-c', 'gn_debug_goma', '-g', 'c:\\goma', '//out/Debug'],
-               mbw=mbw, ret=0,
-               out=('c:\\fake_src\\buildtools\\win\\gn.exe gen //out/Debug '
-                    '--check\n'))
+               mbw=mbw, ret=0)
     self.assertMultiLineEqual(mbw.files['c:\\fake_src\\out\\Debug\\args.gn'],
                               ('goma_dir = "c:\\\\goma"\n'
                                'is_debug = true\n'
                                'use_goma = true\n'))
+    self.assertIn('c:\\fake_src\\buildtools\\win\\gn.exe gen //out/Debug '
+                  '--check\n', mbw.out)
 
     mbw = self.fake_mbw()
     self.check(['gen', '-m', 'fake_master', '-b', 'fake_gn_args_bot',
diff --git a/tools/perf/chrome_telemetry_build/binary_dependencies.json b/tools/perf/chrome_telemetry_build/binary_dependencies.json
index 43ab52c5..e6f6d866 100644
--- a/tools/perf/chrome_telemetry_build/binary_dependencies.json
+++ b/tools/perf/chrome_telemetry_build/binary_dependencies.json
@@ -11,8 +11,6 @@
         },
         "win_AMD64": {
           "local_paths": [
-            "../../../out/Debug_x64/crashpad_database_util.exe",
-            "../../../out/Release_x64/crashpad_database_util.exe",
             "../../../out/Debug/crashpad_database_util.exe",
             "../../../out/Release/crashpad_database_util.exe"
           ]
@@ -51,6 +49,11 @@
     },
     "generate_breakpad_symbols": {
       "file_info": {
+        "win_AMD64": {
+          "local_paths": [
+            "../../../components/crash/content/tools/generate_breakpad_symbols.py"
+          ]
+        },
         "mac_x86_64": {
           "local_paths": [
             "../../../components/crash/content/tools/generate_breakpad_symbols.py"
diff --git a/tools/perf/core/stacktrace_unittest.py b/tools/perf/core/stacktrace_unittest.py
index da833b1..856e954 100644
--- a/tools/perf/core/stacktrace_unittest.py
+++ b/tools/perf/core/stacktrace_unittest.py
@@ -15,7 +15,8 @@
   # Stack traces do not currently work on 10.6, but they are also being
   # disabled shortly so just disable it for now.
   # All platforms except chromeos should at least have a valid minidump.
-  @decorators.Disabled('snowleopard', 'chromeos')
+  # TODO(dyen): Investigate why crashpad_database_util is not being included.
+  @decorators.Disabled('snowleopard', 'chromeos', 'win')
   def testValidDump(self):
     with self.assertRaises(exceptions.DevtoolsTargetCrashException) as c:
       self._tab.Navigate('chrome://crash', timeout=5)
diff --git a/ui/compositor/layer_animator.cc b/ui/compositor/layer_animator.cc
index 74e9e32d..787b121 100644
--- a/ui/compositor/layer_animator.cc
+++ b/ui/compositor/layer_animator.cc
@@ -174,16 +174,19 @@
 void LayerAnimator::ResetCompositor(Compositor* compositor) {
   DCHECK(compositor);
 
+  cc::AnimationTimeline* timeline = compositor->GetAnimationTimeline();
+  DCHECK(timeline);
+
+  const int layer_id = animation_player_->layer_id();
+
   // Store a reference to LAC if any so it may be picked up in SetCompositor.
-  if (animation_player_->element_animations()) {
+  if (layer_id) {
     animation_controller_state_ =
-        animation_player_->element_animations()->layer_animation_controller();
+        timeline->animation_host()->GetControllerForLayerId(layer_id);
   }
 
   DetachLayerFromAnimationPlayer();
 
-  cc::AnimationTimeline* timeline = compositor->GetAnimationTimeline();
-  DCHECK(timeline);
   timeline->DetachPlayer(animation_player_);
 }
 
@@ -195,7 +198,6 @@
 
   if (animation_player_->element_animations()) {
     animation_player_->element_animations()
-        ->layer_animation_controller()
         ->AddEventObserver(this);
   }
 }
@@ -203,7 +205,6 @@
 void LayerAnimator::DetachLayerFromAnimationPlayer() {
   if (animation_player_->element_animations()) {
     animation_player_->element_animations()
-        ->layer_animation_controller()
         ->RemoveEventObserver(this);
   }
 
diff --git a/ui/gl/gl_context_stub.cc b/ui/gl/gl_context_stub.cc
index 2304585b..5a55087c 100644
--- a/ui/gl/gl_context_stub.cc
+++ b/ui/gl/gl_context_stub.cc
@@ -34,10 +34,6 @@
 void GLContextStub::OnSetSwapInterval(int interval) {
 }
 
-std::string GLContextStub::GetExtensions() {
-  return std::string();
-}
-
 std::string GLContextStub::GetGLRenderer() {
   return std::string("CHROMIUM");
 }
diff --git a/ui/gl/gl_context_stub.h b/ui/gl/gl_context_stub.h
index 0d62509..af519df 100644
--- a/ui/gl/gl_context_stub.h
+++ b/ui/gl/gl_context_stub.h
@@ -23,7 +23,6 @@
   bool IsCurrent(GLSurface* surface) override;
   void* GetHandle() override;
   void OnSetSwapInterval(int interval) override;
-  std::string GetExtensions() override;
   std::string GetGLRenderer() override;
 
  protected:
diff --git a/ui/views/controls/menu/menu_controller.cc b/ui/views/controls/menu/menu_controller.cc
index 2e74e194..2983139 100644
--- a/ui/views/controls/menu/menu_controller.cc
+++ b/ui/views/controls/menu/menu_controller.cc
@@ -491,6 +491,11 @@
   if (result_event_flags)
     *result_event_flags = accept_event_flags_;
 
+  // The nested message loop could have been killed externally. Check to see if
+  // there are nested asynchronous menus to shutdown.
+  if (async_run_ && delegate_stack_.size() > 1)
+    ExitAsyncRun();
+
   return ExitMenuRun();
 }
 
diff --git a/ui/views/controls/menu/menu_controller.h b/ui/views/controls/menu/menu_controller.h
index 99699b4..e0f2921 100644
--- a/ui/views/controls/menu/menu_controller.h
+++ b/ui/views/controls/menu/menu_controller.h
@@ -53,6 +53,7 @@
 
 namespace test {
 class MenuControllerTest;
+class MenuControllerTestApi;
 }
 
 // MenuController -------------------------------------------------------------
@@ -199,6 +200,7 @@
  private:
   friend class internal::MenuRunnerImpl;
   friend class test::MenuControllerTest;
+  friend class test::MenuControllerTestApi;
   friend class MenuKeyEventHandler;
   friend class MenuHostRootView;
   friend class MenuItemView;
diff --git a/ui/views/controls/menu/menu_controller_unittest.cc b/ui/views/controls/menu/menu_controller_unittest.cc
index c52e8be1..5a890e3 100644
--- a/ui/views/controls/menu/menu_controller_unittest.cc
+++ b/ui/views/controls/menu/menu_controller_unittest.cc
@@ -24,6 +24,7 @@
 #include "ui/views/controls/menu/menu_message_loop.h"
 #include "ui/views/controls/menu/menu_scroll_view_container.h"
 #include "ui/views/controls/menu/submenu_view.h"
+#include "ui/views/test/menu_test_utils.h"
 #include "ui/views/test/views_test_base.h"
 
 #if defined(USE_AURA)
@@ -44,34 +45,6 @@
 
 namespace {
 
-// Test implementation of MenuDelegate that only reports calls of OnPerformDrop.
-class TestMenuDelegate : public MenuDelegate {
- public:
-  TestMenuDelegate();
-  ~TestMenuDelegate() override;
-
-  bool on_perform_drop_called() { return on_perform_drop_called_; }
-
-  int OnPerformDrop(MenuItemView* menu,
-                    DropPosition position,
-                    const ui::DropTargetEvent& event) override;
-
- private:
-  bool on_perform_drop_called_;
-  DISALLOW_COPY_AND_ASSIGN(TestMenuDelegate);
-};
-
-TestMenuDelegate::TestMenuDelegate() : on_perform_drop_called_(false) {}
-
-TestMenuDelegate::~TestMenuDelegate() {}
-
-int TestMenuDelegate::OnPerformDrop(MenuItemView* menu,
-                                    DropPosition position,
-                                    const ui::DropTargetEvent& event) {
-  on_perform_drop_called_ = true;
-  return ui::DragDropTypes::DRAG_COPY;
-}
-
 // Test implementation of MenuControllerDelegate that only reports the values
 // called of OnMenuClosed.
 class TestMenuControllerDelegate : public internal::MenuControllerDelegate {
@@ -181,12 +154,14 @@
 
   bool is_running() const { return is_running_; }
 
+  // MenuMessageLoop:
+  void QuitNow() override;
+
  private:
   // MenuMessageLoop:
   void Run(MenuController* controller,
            Widget* owner,
            bool nested_menu) override;
-  void QuitNow() override;
   void ClearOwner() override;
 
   std::unique_ptr<MenuMessageLoop> original_;
@@ -330,6 +305,17 @@
     EXPECT_FALSE(test_message_loop_->is_running());
   }
 
+  // This nested an asynchronous delegate onto a menu with a nested message
+  // loop, then kills the loop. Simulates the loop being killed not by
+  // MenuController.
+  void TestNestedMessageLoopKillsItself(
+      TestMenuControllerDelegate* nested_delegate) {
+    menu_controller_->AddNestedDelegate(nested_delegate);
+    menu_controller_->SetAsyncRun(true);
+
+    test_message_loop_->QuitNow();
+  }
+
  protected:
   void SetPendingStateItem(MenuItemView* item) {
     menu_controller_->pending_state_.item = item;
@@ -1240,5 +1226,28 @@
   EXPECT_EQ(1, nested_delegate->on_menu_closed_called());
 }
 
+// Tests that when an asynchronous menu is nested, and the nested message loop
+// is kill not by the MenuController, that the nested menu is notified of
+// destruction.
+TEST_F(MenuControllerTest, NestedMessageLoopDiesWithNestedMenu) {
+  menu_controller()->CancelAll();
+  InstallTestMenuMessageLoop();
+  std::unique_ptr<TestMenuControllerDelegate> nested_delegate(
+      new TestMenuControllerDelegate());
+  // This will nest an asynchronous menu, and then kill the nested message loop.
+  base::MessageLoopForUI::current()->PostTask(
+      FROM_HERE,
+      base::Bind(&MenuControllerTest::TestNestedMessageLoopKillsItself,
+                 base::Unretained(this), nested_delegate.get()));
+
+  int result_event_flags = 0;
+  // This creates a nested message loop.
+  EXPECT_EQ(nullptr, menu_controller()->Run(owner(), nullptr, menu_item(),
+                                            gfx::Rect(), MENU_ANCHOR_TOPLEFT,
+                                            false, false, &result_event_flags));
+  EXPECT_FALSE(menu_controller_delegate()->on_menu_closed_called());
+  EXPECT_TRUE(nested_delegate->on_menu_closed_called());
+}
+
 }  // namespace test
 }  // namespace views
diff --git a/ui/views/controls/menu/menu_runner_cocoa_unittest.mm b/ui/views/controls/menu/menu_runner_cocoa_unittest.mm
index 531de3f2..ee86b98 100644
--- a/ui/views/controls/menu/menu_runner_cocoa_unittest.mm
+++ b/ui/views/controls/menu/menu_runner_cocoa_unittest.mm
@@ -137,6 +137,12 @@
     runner_ = nullptr;
   }
 
+  void MenuCancelAndDeleteCallback() {
+    runner_->Cancel();
+    runner_->Release();
+    runner_ = nullptr;
+  }
+
  protected:
   std::unique_ptr<TestModel> menu_;
   internal::MenuRunnerImplCocoa* runner_ = nullptr;
@@ -182,6 +188,15 @@
   EXPECT_EQ(MenuRunner::MENU_DELETED, result);
 }
 
+// Ensure a menu can be safely released immediately after a call to Cancel() in
+// the same run loop iteration.
+TEST_F(MenuRunnerCocoaTest, DestroyAfterCanceling) {
+  MenuRunner::RunResult result =
+      RunMenu(base::Bind(&MenuRunnerCocoaTest::MenuCancelAndDeleteCallback,
+                         base::Unretained(this)));
+  EXPECT_EQ(MenuRunner::MENU_DELETED, result);
+}
+
 TEST_F(MenuRunnerCocoaTest, RunMenuTwice) {
   for (int i = 0; i < 2; ++i) {
     MenuRunner::RunResult result = RunMenu(base::Bind(
diff --git a/ui/views/controls/menu/menu_runner_impl.cc b/ui/views/controls/menu/menu_runner_impl.cc
index b48edcd..4e35f3a 100644
--- a/ui/views/controls/menu/menu_runner_impl.cc
+++ b/ui/views/controls/menu/menu_runner_impl.cc
@@ -60,14 +60,19 @@
       empty_delegate_.reset(new MenuDelegate());
     menu_->set_delegate(empty_delegate_.get());
 
-    DCHECK(controller_);
-    // Release is invoked when MenuRunner is destroyed. Assume this is happening
-    // because the object referencing the menu has been destroyed and the menu
-    // button is no longer valid.
-    controller_->Cancel(MenuController::EXIT_DESTROYED);
-  } else {
-    delete this;
+    // Verify that the MenuController is still active. It may have been
+    // destroyed out of order.
+    if (MenuController::GetActiveInstance()) {
+      DCHECK(controller_);
+      // Release is invoked when MenuRunner is destroyed. Assume this is
+      // happening because the object referencing the menu has been destroyed
+      // and the menu button is no longer valid.
+      controller_->Cancel(MenuController::EXIT_DESTROYED);
+      return;
+    }
   }
+
+  delete this;
 }
 
 MenuRunner::RunResult MenuRunnerImpl::RunMenuAt(Widget* parent,
diff --git a/ui/views/controls/menu/menu_runner_impl.h b/ui/views/controls/menu/menu_runner_impl.h
index 7d0afa67..c893e4a 100644
--- a/ui/views/controls/menu/menu_runner_impl.h
+++ b/ui/views/controls/menu/menu_runner_impl.h
@@ -5,16 +5,17 @@
 #ifndef UI_VIEWS_CONTROLS_MENU_MENU_RUNNER_IMPL_H_
 #define UI_VIEWS_CONTROLS_MENU_MENU_RUNNER_IMPL_H_
 
-#include "ui/views/controls/menu/menu_runner_impl_interface.h"
-
 #include <stdint.h>
 
 #include <set>
 
+#include "base/compiler_specific.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/time/time.h"
 #include "ui/views/controls/menu/menu_controller_delegate.h"
+#include "ui/views/controls/menu/menu_runner_impl_interface.h"
+#include "ui/views/views_export.h"
 
 namespace views {
 
@@ -25,8 +26,9 @@
 namespace internal {
 
 // A menu runner implementation that uses views::MenuItemView to show a menu.
-class MenuRunnerImpl : public MenuRunnerImplInterface,
-                       public MenuControllerDelegate {
+class VIEWS_EXPORT MenuRunnerImpl
+    : NON_EXPORTED_BASE(public MenuRunnerImplInterface),
+      NON_EXPORTED_BASE(public MenuControllerDelegate) {
  public:
   explicit MenuRunnerImpl(MenuItemView* menu);
 
diff --git a/ui/views/controls/menu/menu_runner_impl_cocoa.h b/ui/views/controls/menu/menu_runner_impl_cocoa.h
index f1ae21f..ac5b263 100644
--- a/ui/views/controls/menu/menu_runner_impl_cocoa.h
+++ b/ui/views/controls/menu/menu_runner_impl_cocoa.h
@@ -39,6 +39,9 @@
   // The Cocoa menu controller that this instance is bridging.
   base::scoped_nsobject<MenuController> menu_controller_;
 
+  // Are we in run waiting for it to return?
+  bool running_;
+
   // Set if |running_| and Release() has been invoked.
   bool delete_after_run_;
 
diff --git a/ui/views/controls/menu/menu_runner_impl_cocoa.mm b/ui/views/controls/menu/menu_runner_impl_cocoa.mm
index 454c951..c6802381 100644
--- a/ui/views/controls/menu/menu_runner_impl_cocoa.mm
+++ b/ui/views/controls/menu/menu_runner_impl_cocoa.mm
@@ -93,13 +93,15 @@
 }
 
 MenuRunnerImplCocoa::MenuRunnerImplCocoa(ui::MenuModel* menu)
-    : delete_after_run_(false), closing_event_time_(base::TimeDelta()) {
+    : running_(false),
+      delete_after_run_(false),
+      closing_event_time_(base::TimeDelta()) {
   menu_controller_.reset(
       [[MenuController alloc] initWithModel:menu useWithPopUpButtonCell:NO]);
 }
 
 bool MenuRunnerImplCocoa::IsRunning() const {
-  return [menu_controller_ isMenuOpen];
+  return running_;
 }
 
 void MenuRunnerImplCocoa::Release() {
@@ -123,6 +125,7 @@
   DCHECK(!IsRunning());
   DCHECK(parent);
   closing_event_time_ = base::TimeDelta();
+  running_ = true;
 
   if (run_types & MenuRunner::CONTEXT_MENU) {
     [NSMenu popUpContextMenu:[menu_controller_ menu]
@@ -143,6 +146,7 @@
   }
 
   closing_event_time_ = ui::EventTimeForNow();
+  running_ = false;
 
   if (delete_after_run_) {
     delete this;
diff --git a/ui/views/controls/menu/menu_runner_unittest.cc b/ui/views/controls/menu/menu_runner_unittest.cc
index afbdba75..2f6db02 100644
--- a/ui/views/controls/menu/menu_runner_unittest.cc
+++ b/ui/views/controls/menu/menu_runner_unittest.cc
@@ -14,66 +14,16 @@
 #include "ui/events/test/event_generator.h"
 #include "ui/views/controls/menu/menu_delegate.h"
 #include "ui/views/controls/menu/menu_item_view.h"
+#include "ui/views/controls/menu/menu_runner_impl.h"
 #include "ui/views/controls/menu/menu_types.h"
 #include "ui/views/controls/menu/submenu_view.h"
+#include "ui/views/test/menu_test_utils.h"
 #include "ui/views/test/views_test_base.h"
 #include "ui/views/widget/widget.h"
 
 namespace views {
 namespace test {
 
-// Implementation of MenuDelegate that only reports the values of calls to
-// OnMenuClosed and ExecuteCommand.
-class TestMenuDelegate : public MenuDelegate {
- public:
-  TestMenuDelegate();
-  ~TestMenuDelegate() override;
-
-  int execute_command_id() const { return execute_command_id_; }
-
-  int on_menu_closed_called() const { return on_menu_closed_called_; }
-  MenuItemView* on_menu_closed_menu() const { return on_menu_closed_menu_; }
-  MenuRunner::RunResult on_menu_closed_run_result() const {
-    return on_menu_closed_run_result_;
-  }
-
-  // MenuDelegate:
-  void ExecuteCommand(int id) override;
-  void OnMenuClosed(MenuItemView* menu, MenuRunner::RunResult result) override;
-
- private:
-  // ID of last executed command.
-  int execute_command_id_;
-
-  // The number of times OnMenuClosed was called.
-  int on_menu_closed_called_;
-
-  // The values of the last call to OnMenuClosed.
-  MenuItemView* on_menu_closed_menu_;
-  MenuRunner::RunResult on_menu_closed_run_result_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestMenuDelegate);
-};
-
-TestMenuDelegate::TestMenuDelegate()
-    : execute_command_id_(0),
-      on_menu_closed_called_(0),
-      on_menu_closed_menu_(nullptr),
-      on_menu_closed_run_result_(MenuRunner::MENU_DELETED) {}
-
-TestMenuDelegate::~TestMenuDelegate() {}
-
-void TestMenuDelegate::ExecuteCommand(int id) {
-  execute_command_id_ = id;
-}
-
-void TestMenuDelegate::OnMenuClosed(MenuItemView* menu,
-                                    MenuRunner::RunResult result) {
-  on_menu_closed_called_++;
-  on_menu_closed_menu_ = menu;
-  on_menu_closed_run_result_ = result;
-}
-
 class MenuRunnerTest : public ViewsTestBase {
  public:
   MenuRunnerTest();
@@ -236,5 +186,41 @@
   EXPECT_EQ(MenuRunner::NORMAL_EXIT, delegate->on_menu_closed_run_result());
 }
 
+typedef MenuRunnerTest MenuRunnerImplTest;
+
+// Tests that when nested menu runners are destroyed out of order, that
+// MenuController is not accessed after it has been destroyed. This should not
+// crash on ASAN bots.
+TEST_F(MenuRunnerImplTest, NestedMenuRunnersDestroyedOutOfOrder) {
+  internal::MenuRunnerImpl* menu_runner =
+      new internal::MenuRunnerImpl(menu_item_view());
+  EXPECT_EQ(MenuRunner::NORMAL_EXIT,
+            menu_runner->RunMenuAt(owner(), nullptr, gfx::Rect(),
+                                   MENU_ANCHOR_TOPLEFT, MenuRunner::ASYNC));
+
+  std::unique_ptr<TestMenuDelegate> menu_delegate2(new TestMenuDelegate);
+  MenuItemView* menu_item_view2 = new MenuItemView(menu_delegate2.get());
+  menu_item_view2->AppendMenuItemWithLabel(1, base::ASCIIToUTF16("One"));
+
+  internal::MenuRunnerImpl* menu_runner2 =
+      new internal::MenuRunnerImpl(menu_item_view2);
+  EXPECT_EQ(MenuRunner::NORMAL_EXIT,
+            menu_runner2->RunMenuAt(owner(), nullptr, gfx::Rect(),
+                                    MENU_ANCHOR_TOPLEFT,
+                                    MenuRunner::ASYNC | MenuRunner::IS_NESTED));
+
+  // Hide the controller so we can test out of order destruction.
+  MenuControllerTestApi menu_controller;
+  menu_controller.Hide();
+
+  // This destroyed MenuController
+  menu_runner->OnMenuClosed(internal::MenuControllerDelegate::NOTIFY_DELEGATE,
+                            nullptr, 0);
+
+  // This should not access the destroyed MenuController
+  menu_runner2->Release();
+  menu_runner->Release();
+}
+
 }  // namespace test
 }  // namespace views
diff --git a/ui/views/test/menu_test_utils.cc b/ui/views/test/menu_test_utils.cc
new file mode 100644
index 0000000..659632c
--- /dev/null
+++ b/ui/views/test/menu_test_utils.cc
@@ -0,0 +1,55 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/views/test/menu_test_utils.h"
+
+#include "ui/views/controls/menu/menu_controller.h"
+
+namespace views {
+namespace test {
+
+// TestMenuDelegate -----------------------------------------------------------
+
+TestMenuDelegate::TestMenuDelegate()
+    : execute_command_id_(0),
+      on_menu_closed_called_count_(0),
+      on_menu_closed_menu_(nullptr),
+      on_menu_closed_run_result_(MenuRunner::MENU_DELETED),
+      on_perform_drop_called_(false) {}
+
+TestMenuDelegate::~TestMenuDelegate() {}
+
+void TestMenuDelegate::ExecuteCommand(int id) {
+  execute_command_id_ = id;
+}
+
+void TestMenuDelegate::OnMenuClosed(MenuItemView* menu,
+                                    MenuRunner::RunResult result) {
+  on_menu_closed_called_count_++;
+  on_menu_closed_menu_ = menu;
+  on_menu_closed_run_result_ = result;
+}
+
+int TestMenuDelegate::OnPerformDrop(MenuItemView* menu,
+                                    DropPosition position,
+                                    const ui::DropTargetEvent& event) {
+  on_perform_drop_called_ = true;
+  return ui::DragDropTypes::DRAG_COPY;
+}
+
+// MenuControllerTestApi ------------------------------------------------------
+
+MenuControllerTestApi::MenuControllerTestApi() {}
+
+MenuControllerTestApi::~MenuControllerTestApi() {}
+
+void MenuControllerTestApi::Hide() {
+  MenuController* controller = MenuController::GetActiveInstance();
+  if (!controller)
+    return;
+  controller->showing_ = false;
+}
+
+}  // namespace test
+}  // namespace views
diff --git a/ui/views/test/menu_test_utils.h b/ui/views/test/menu_test_utils.h
new file mode 100644
index 0000000..ee7e127
--- /dev/null
+++ b/ui/views/test/menu_test_utils.h
@@ -0,0 +1,70 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_VIEWS_TEST_MENU_TEST_UTILS_H_
+#define UI_VIEWS_TEST_MENU_TEST_UTILS_H_
+
+#include "base/macros.h"
+#include "ui/views/controls/menu/menu_delegate.h"
+
+namespace views {
+namespace test {
+
+// Test implementation of MenuDelegate that tracks calls to MenuDelegate, along
+// with the provided parameters.
+class TestMenuDelegate : public MenuDelegate {
+ public:
+  TestMenuDelegate();
+  ~TestMenuDelegate() override;
+
+  int execute_command_id() const { return execute_command_id_; }
+
+  int on_menu_closed_called() const { return on_menu_closed_called_count_; }
+  MenuItemView* on_menu_closed_menu() const { return on_menu_closed_menu_; }
+  MenuRunner::RunResult on_menu_closed_run_result() const {
+    return on_menu_closed_run_result_;
+  }
+  bool on_perform_drop_called() { return on_perform_drop_called_; }
+
+  // MenuDelegate:
+  void ExecuteCommand(int id) override;
+  void OnMenuClosed(MenuItemView* menu, MenuRunner::RunResult result) override;
+  int OnPerformDrop(MenuItemView* menu,
+                    DropPosition position,
+                    const ui::DropTargetEvent& event) override;
+
+ private:
+  // ID of last executed command.
+  int execute_command_id_;
+
+  // The number of times OnMenuClosed was called.
+  int on_menu_closed_called_count_;
+
+  // The values of the last call to OnMenuClosed.
+  MenuItemView* on_menu_closed_menu_;
+  MenuRunner::RunResult on_menu_closed_run_result_;
+
+  bool on_perform_drop_called_;
+
+  DISALLOW_COPY_AND_ASSIGN(TestMenuDelegate);
+};
+
+// Test api which can be used to hide the active MenuController, without
+// performing normal shutdown.
+class MenuControllerTestApi {
+ public:
+  MenuControllerTestApi();
+  ~MenuControllerTestApi();
+
+  // Tells the active MenuController to consider itself not showing.
+  void Hide();
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(MenuControllerTestApi);
+};
+
+}  // namespace test
+}  // namespace views
+
+#endif  // UI_VIEWS_TEST_MENU_TEST_UTILS_H_
diff --git a/ui/views/views.gyp b/ui/views/views.gyp
index 837d206..50ad0d5 100644
--- a/ui/views/views.gyp
+++ b/ui/views/views.gyp
@@ -514,6 +514,8 @@
       'test/focus_manager_test.h',
       'test/menu_runner_test_api.cc',
       'test/menu_runner_test_api.h',
+      'test/menu_test_utils.cc',
+      'test/menu_test_utils.h',
       'test/native_widget_factory.cc',
       'test/native_widget_factory.h',
       'test/scoped_views_test_helper.cc',