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 = ⌖ 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 = ⌖ 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',