diff --git a/ash/ash_switches.cc b/ash/ash_switches.cc index 3db6f13..664c269 100644 --- a/ash/ash_switches.cc +++ b/ash/ash_switches.cc
@@ -110,6 +110,30 @@ // enables the IME service (i.e. InputMethodMus) instead. const char kUseIMEService[] = "use-ime-service"; +// Number of recent accelerometer samples to examine to determine if a power +// button event was spurious. +const char kSpuriousPowerButtonWindow[] = "spurious-power-button-window"; + +// Number of recent acceleration samples that must meet or exceed the threshold +// in order for a power button event to be considered spurious. +const char kSpuriousPowerButtonAccelCount[] = + "spurious-power-button-accel-count"; + +// Threshold (in m/s^2, disregarding gravity) that screen acceleration must meet +// or exceed for a power button event to be considered spurious. +const char kSpuriousPowerButtonScreenAccel[] = + "spurious-power-button-screen-accel"; + +// Threshold (in m/s^2, disregarding gravity) that keyboard acceleration must +// meet or exceed for a power button event to be considered spurious. +const char kSpuriousPowerButtonKeyboardAccel[] = + "spurious-power-button-keyboard-accel"; + +// Change in lid angle (i.e. hinge between keyboard and screen) that must be +// exceeded for a power button event to be considered spurious. +const char kSpuriousPowerButtonLidAngleChange[] = + "spurious-power-button-lid-angle-change"; + // Constrains the pointer movement within a root window on desktop. bool ConstrainPointerToRoot() { const char kAshConstrainPointerToRoot[] = "ash-constrain-pointer-to-root";
diff --git a/ash/ash_switches.h b/ash/ash_switches.h index e3e7337..66f8266 100644 --- a/ash/ash_switches.h +++ b/ash/ash_switches.h
@@ -47,6 +47,11 @@ ASH_EXPORT extern const char kAshShelfColorSchemeDarkVibrant[]; ASH_EXPORT extern const char kAshTouchHud[]; ASH_EXPORT extern const char kAuraLegacyPowerButton[]; +ASH_EXPORT extern const char kSpuriousPowerButtonWindow[]; +ASH_EXPORT extern const char kSpuriousPowerButtonAccelCount[]; +ASH_EXPORT extern const char kSpuriousPowerButtonScreenAccel[]; +ASH_EXPORT extern const char kSpuriousPowerButtonKeyboardAccel[]; +ASH_EXPORT extern const char kSpuriousPowerButtonLidAngleChange[]; ASH_EXPORT extern const char kUseIMEService[]; // True if the pointer (cursor) position should be kept inside root windows.
diff --git a/ash/system/power/tablet_power_button_controller.cc b/ash/system/power/tablet_power_button_controller.cc index 0f8dea77..fafda54 100644 --- a/ash/system/power/tablet_power_button_controller.cc +++ b/ash/system/power/tablet_power_button_controller.cc
@@ -5,13 +5,19 @@ #include "ash/system/power/tablet_power_button_controller.h" #include "ash/accessibility_delegate.h" +#include "ash/ash_switches.h" #include "ash/session/session_controller.h" #include "ash/shell.h" #include "ash/shell_delegate.h" #include "ash/wm/lock_state_controller.h" #include "ash/wm/maximize_mode/maximize_mode_controller.h" +#include "base/command_line.h" +#include "base/logging.h" +#include "base/strings/string_number_conversions.h" +#include "base/strings/stringprintf.h" #include "base/time/default_tick_clock.h" #include "chromeos/dbus/dbus_thread_manager.h" +#include "ui/chromeos/accelerometer/accelerometer_util.h" #include "ui/events/devices/input_device_manager.h" #include "ui/events/devices/stylus_state.h" #include "ui/events/event.h" @@ -55,6 +61,36 @@ maximize_mode_controller->IsMaximizeModeWindowManagerEnabled(); } +// Returns the value for the command-line switch identified by |name|. Returns 0 +// if the switch was unset or contained a non-float value. +double GetNumSwitch(const base::CommandLine& command_line, + const std::string& name) { + std::string str = command_line.GetSwitchValueASCII(name); + if (str.empty()) + return 0.0; + + double value = 0.0; + if (!base::StringToDouble(str, &value)) { + LOG(WARNING) << "Failed to parse value \"" << str << "\" from switch " + << "--" << name << " as float"; + return 0.0; + } + return value; +} + +// Computes the lid angle based on readings from accelerometers in the screen +// and keyboard panels. +float GetLidAngle(const gfx::Vector3dF& screen, + const gfx::Vector3dF& keyboard) { + constexpr gfx::Vector3dF kHingeVector(1.0f, 0.0f, 0.0f); + float lid_angle = 180.0f - gfx::ClockwiseAngleBetweenVectorsInDegrees( + keyboard, screen, kHingeVector); + if (lid_angle < 0.0f) + lid_angle += 360.0f; + + return lid_angle; +} + } // namespace TabletPowerButtonController::TestApi::TestApi( @@ -73,10 +109,26 @@ controller_->shutdown_timer_.Stop(); } +bool TabletPowerButtonController::TestApi::IsObservingAccelerometerReader( + chromeos::AccelerometerReader* reader) const { + DCHECK(reader); + return controller_->accelerometer_scoped_observer_.IsObserving(reader); +} + +void TabletPowerButtonController::TestApi::ParseSpuriousPowerButtonSwitches( + const base::CommandLine& command_line) { + controller_->ParseSpuriousPowerButtonSwitches(command_line); +} + +bool TabletPowerButtonController::TestApi::IsSpuriousPowerButtonEvent() const { + return controller_->IsSpuriousPowerButtonEvent(); +} + TabletPowerButtonController::TabletPowerButtonController( LockStateController* controller) : tick_clock_(new base::DefaultTickClock()), controller_(controller), + accelerometer_scoped_observer_(this), weak_ptr_factory_(this) { chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver( this); @@ -87,6 +139,7 @@ ui::InputDeviceManager::GetInstance()->AddObserver(this); Shell::Get()->PrependPreTargetHandler(this); + ParseSpuriousPowerButtonSwitches(*base::CommandLine::ForCurrentProcess()); GetInitialBacklightsForcedOff(); } @@ -107,6 +160,11 @@ bool down, const base::TimeTicks& timestamp) { if (down) { + if ((power_button_down_was_spurious_ = IsSpuriousPowerButtonEvent())) { + LOG(WARNING) << "Ignoring spurious power button down event"; + return; + } + force_off_on_button_up_ = true; // When the system resumes in response to the power button being pressed, // Chrome receives powerd's SuspendDone signal and notification that the @@ -121,6 +179,10 @@ SetDisplayForcedOff(false); StartShutdownTimer(); } else { + // Don't process the up event if we previously ignored the down event. + if (power_button_down_was_spurious_) + return; + // When power button is released, cancel shutdown animation whenever it is // still cancellable. if (controller_->CanCancelShutdownAnimation()) @@ -145,6 +207,25 @@ } } +void TabletPowerButtonController::OnAccelerometerUpdated( + scoped_refptr<const chromeos::AccelerometerUpdate> update) { + const gfx::Vector3dF screen = ui::ConvertAccelerometerReadingToVector3dF( + update->get(chromeos::ACCELEROMETER_SOURCE_SCREEN)); + const gfx::Vector3dF keyboard = ui::ConvertAccelerometerReadingToVector3dF( + update->get(chromeos::ACCELEROMETER_SOURCE_ATTACHED_KEYBOARD)); + + DCHECK_GT(max_accelerometer_samples_, 0u); + if (accelerometer_samples_.size() < max_accelerometer_samples_) { + accelerometer_samples_.push_back(std::make_pair(screen, keyboard)); + last_accelerometer_sample_index_ = accelerometer_samples_.size() - 1; + } else { + last_accelerometer_sample_index_ = + (last_accelerometer_sample_index_ + 1) % max_accelerometer_samples_; + accelerometer_samples_[last_accelerometer_sample_index_] = + std::make_pair(screen, keyboard); + } +} + void TabletPowerButtonController::PowerManagerRestarted() { chromeos::DBusThreadManager::Get() ->GetPowerManagerClient() @@ -213,6 +294,114 @@ tick_clock_ = std::move(tick_clock); } +void TabletPowerButtonController::ParseSpuriousPowerButtonSwitches( + const base::CommandLine& command_line) { + // Support being called multiple times from tests. + max_accelerometer_samples_ = 0; + accelerometer_samples_.clear(); + accelerometer_scoped_observer_.RemoveAll(); + + int window = static_cast<int>( + GetNumSwitch(command_line, switches::kSpuriousPowerButtonWindow)); + if (window <= 0) + return; + + max_accelerometer_samples_ = static_cast<size_t>(window); + accelerometer_samples_.reserve(max_accelerometer_samples_); + accelerometer_scoped_observer_.Add( + chromeos::AccelerometerReader::GetInstance()); + + spurious_accel_count_ = static_cast<size_t>( + GetNumSwitch(command_line, switches::kSpuriousPowerButtonAccelCount)); + spurious_screen_accel_ = + GetNumSwitch(command_line, switches::kSpuriousPowerButtonScreenAccel); + spurious_keyboard_accel_ = + GetNumSwitch(command_line, switches::kSpuriousPowerButtonKeyboardAccel); + spurious_lid_angle_change_ = + GetNumSwitch(command_line, switches::kSpuriousPowerButtonLidAngleChange); +} + +bool TabletPowerButtonController::IsSpuriousPowerButtonEvent() const { + if (max_accelerometer_samples_ <= 0) + return false; + + // Number of screen and keyboard accelerations exceeding the threshold. + size_t num_big_screen_accels = 0; + size_t num_big_keyboard_accels = 0; + + // The last lid angle that we saw. + float last_angle = 0.0f; + // The current distance (in degrees) that we've traveled from the starting + // angle and the max distance that we've seen so far. + float cur_angle_dist = 0.0f, max_angle_dist = 0.0f; + + std::string screen_debug, keyboard_debug, angle_debug; + + // Get the index of the oldest pair of samples. + const size_t start = + accelerometer_samples_.size() == max_accelerometer_samples_ + ? (last_accelerometer_sample_index_ + 1) % max_accelerometer_samples_ + : 0; + for (size_t i = 0; i < accelerometer_samples_.size(); ++i) { + const auto& pair = + accelerometer_samples_[(start + i) % max_accelerometer_samples_]; + const gfx::Vector3dF& screen = pair.first; + const gfx::Vector3dF& keyboard = pair.second; + + const float screen_accel = std::abs(screen.Length() - kGravity); + if (spurious_screen_accel_ > 0 && screen_accel >= spurious_screen_accel_) + num_big_screen_accels++; + + const float keyboard_accel = std::abs(keyboard.Length() - kGravity); + if (spurious_keyboard_accel_ > 0 && + keyboard_accel >= spurious_keyboard_accel_) { + num_big_keyboard_accels++; + } + + float angle = GetLidAngle(screen, keyboard); + if (i > 0u) { + // Lid angle readings are computed based on the screen and keyboard + // acceleration vectors and can be noisy. Compute the minimum angle + // difference between the previous reading and the current one and use it + // to maintain a running total of how far the lid has traveled, also + // keeping track of the max distance from the start that we've seen. + float min_diff = angle - last_angle; + if (min_diff < -180.0f) + min_diff += 360.0f; + else if (min_diff > 180.0f) + min_diff -= 360.0f; + + cur_angle_dist += min_diff; + max_angle_dist = + std::min(std::max(max_angle_dist, std::abs(cur_angle_dist)), 360.0f); + } + last_angle = angle; + + if (VLOG_IS_ON(1)) { + screen_debug = base::StringPrintf("%0.1f", screen_accel) + + (screen_debug.empty() ? "" : " " + screen_debug); + keyboard_debug = base::StringPrintf("%0.1f", keyboard_accel) + + (keyboard_debug.empty() ? "" : " " + keyboard_debug); + angle_debug = base::IntToString(static_cast<int>(angle + 0.5)) + + (angle_debug.empty() ? "" : " " + angle_debug); + } + } + + VLOG(1) << "Screen accelerations (" << num_big_screen_accels << " big): " + << "[" << screen_debug << "]"; + VLOG(1) << "Keyboard accelerations (" << num_big_keyboard_accels << " big): " + << "[" << keyboard_debug << "]"; + VLOG(1) << "Lid angles (" << base::StringPrintf("%0.1f", max_angle_dist) + << " degrees): [" << angle_debug << "]"; + + return (spurious_screen_accel_ > 0 && + num_big_screen_accels >= spurious_accel_count_) || + (spurious_keyboard_accel_ > 0 && + num_big_keyboard_accels >= spurious_accel_count_) || + (spurious_lid_angle_change_ > 0 && + max_angle_dist >= spurious_lid_angle_change_); +} + void TabletPowerButtonController::SetDisplayForcedOff(bool forced_off) { if (backlights_forced_off_ == forced_off) return;
diff --git a/ash/system/power/tablet_power_button_controller.h b/ash/system/power/tablet_power_button_controller.h index 69d32cc1..ab89f72 100644 --- a/ash/system/power/tablet_power_button_controller.h +++ b/ash/system/power/tablet_power_button_controller.h
@@ -6,17 +6,26 @@ #define ASH_SYSTEM_POWER_TABLET_POWER_BUTTON_CONTROLLER_H_ #include <memory> +#include <utility> #include "ash/ash_export.h" #include "ash/shell_observer.h" #include "base/macros.h" #include "base/memory/weak_ptr.h" +#include "base/scoped_observer.h" #include "base/time/tick_clock.h" #include "base/time/time.h" #include "base/timer/timer.h" +#include "chromeos/accelerometer/accelerometer_reader.h" +#include "chromeos/accelerometer/accelerometer_types.h" #include "chromeos/dbus/power_manager_client.h" #include "ui/events/devices/input_device_event_observer.h" #include "ui/events/event_handler.h" +#include "ui/gfx/geometry/vector3d_f.h" + +namespace base { +class CommandLine; +} // namespace base namespace ash { @@ -25,7 +34,8 @@ // Handles power button events on convertible/tablet device. This class is // instantiated and used in PowerButtonController. class ASH_EXPORT TabletPowerButtonController - : public chromeos::PowerManagerClient::Observer, + : public chromeos::AccelerometerReader::Observer, + public chromeos::PowerManagerClient::Observer, public ShellObserver, public ui::EventHandler, public ui::InputDeviceEventObserver { @@ -42,12 +52,26 @@ // Emulates |shutdown_timer_| timeout. void TriggerShutdownTimeout(); + // Returns true if |controller_| is observing |reader|. + bool IsObservingAccelerometerReader( + chromeos::AccelerometerReader* reader) const; + + // Calls |controller_|'s ParseSpuriousPowerButtonSwitches() method. + void ParseSpuriousPowerButtonSwitches( + const base::CommandLine& command_line); + + // Calls |controller_|'s IsSpuriousPowerButtonEvent() method. + bool IsSpuriousPowerButtonEvent() const; + private: TabletPowerButtonController* controller_; // Not owned. DISALLOW_COPY_AND_ASSIGN(TestApi); }; + // Public for tests. + static constexpr float kGravity = 9.80665f; + explicit TabletPowerButtonController(LockStateController* controller); ~TabletPowerButtonController() override; @@ -58,6 +82,10 @@ // Handles a power button event. void OnPowerButtonEvent(bool down, const base::TimeTicks& timestamp); + // Overridden from chromeos::AccelerometerReader::Observer: + void OnAccelerometerUpdated( + scoped_refptr<const chromeos::AccelerometerUpdate> update) override; + // Overridden from chromeos::PowerManagerClient::Observer: void PowerManagerRestarted() override; void BrightnessChanged(int level, bool user_initiated) override; @@ -80,6 +108,15 @@ void SetTickClockForTesting(std::unique_ptr<base::TickClock> tick_clock); private: + // Parses command-line switches that provide settings used to attempt to + // ignore accidental power button presses by looking at accelerometer data. + void ParseSpuriousPowerButtonSwitches(const base::CommandLine& command_line); + + // Returns true if the device's accelerometers have reported enough recent + // movement that we should consider a power button event that was just + // received to be accidental and ignore it. + bool IsSpuriousPowerButtonEvent() const; + // Updates the power manager's backlights-forced-off state and enables or // disables the touchscreen. No-op if |backlights_forced_off_| already equals // |forced_off|. @@ -116,6 +153,10 @@ // True if the screen was off when the power button was pressed. bool screen_off_when_power_button_down_ = false; + // True if the last power button down event was deemed spurious and ignored as + // a result. + bool power_button_down_was_spurious_ = false; + // Time source for performed action times. std::unique_ptr<base::TickClock> tick_clock_; @@ -135,6 +176,30 @@ LockStateController* controller_; // Not owned. + ScopedObserver<chromeos::AccelerometerReader, TabletPowerButtonController> + accelerometer_scoped_observer_; + + // Number of recent screen and keyboard accelerometer samples to retain. + size_t max_accelerometer_samples_ = 0; + + // Circular buffer of recent (screen, keyboard) accelerometer samples. + std::vector<std::pair<gfx::Vector3dF, gfx::Vector3dF>> accelerometer_samples_; + size_t last_accelerometer_sample_index_ = 0; + + // Number of acceleration readings in |accelerometer_samples_| that must + // exceed the threshold in order for a power button event to be considered + // spurious. + size_t spurious_accel_count_ = 0; + + // Thresholds for screen and keyboard accelerations (excluding gravity). See + // |spurious_accel_count_|. + float spurious_screen_accel_ = 0; + float spurious_keyboard_accel_ = 0; + + // Threshold for the lid angle change seen within |accelerometer_samples_| + // in order for a power button event to be considered spurious. + float spurious_lid_angle_change_ = 0; + base::WeakPtrFactory<TabletPowerButtonController> weak_ptr_factory_; DISALLOW_COPY_AND_ASSIGN(TabletPowerButtonController);
diff --git a/ash/system/power/tablet_power_button_controller_unittest.cc b/ash/system/power/tablet_power_button_controller_unittest.cc index 526c9349..f3f0ffc 100644 --- a/ash/system/power/tablet_power_button_controller_unittest.cc +++ b/ash/system/power/tablet_power_button_controller_unittest.cc
@@ -35,6 +35,18 @@ // A non-zero brightness used for test. constexpr int kNonZeroBrightness = 10; +// Vector pointing up (e.g. keyboard in clamshell). +constexpr gfx::Vector3dF kUpVector = {0, 0, + TabletPowerButtonController::kGravity}; + +// Vector pointing down (e.g. keyboard in tablet sitting on table). +constexpr gfx::Vector3dF kDownVector = {0, 0, + -TabletPowerButtonController::kGravity}; + +// Vector pointing sideways (e.g. screen in 90-degree clamshell). +constexpr gfx::Vector3dF kSidewaysVector = { + 0, TabletPowerButtonController::kGravity, 0}; + void CopyResult(bool* dest, bool src) { *dest = src; } @@ -57,7 +69,7 @@ AshTestBase::SetUp(); // Trigger an accelerometer update so that |tablet_controller_| can be // initialized. - SendAccelerometerUpdate(); + SendAccelerometerUpdate(kSidewaysVector, kUpVector); tablet_controller_ = Shell::Get() ->power_button_controller() ->tablet_power_button_controller_for_test(); @@ -87,11 +99,23 @@ } protected: - void SendAccelerometerUpdate() { + // Sends an update with screen and keyboard accelerometer readings to + // PowerButtonController, and also |tablet_controller_| if it's non-null and + // has registered as an observer. + void SendAccelerometerUpdate(const gfx::Vector3dF& screen, + const gfx::Vector3dF& keyboard) { scoped_refptr<chromeos::AccelerometerUpdate> update( new chromeos::AccelerometerUpdate()); - update->Set(chromeos::ACCELEROMETER_SOURCE_SCREEN, 1.0f, 0.0f, 0.0f); + update->Set(chromeos::ACCELEROMETER_SOURCE_SCREEN, screen.x(), screen.y(), + screen.z()); + update->Set(chromeos::ACCELEROMETER_SOURCE_ATTACHED_KEYBOARD, keyboard.x(), + keyboard.y(), keyboard.z()); + Shell::Get()->power_button_controller()->OnAccelerometerUpdated(update); + + if (test_api_ && test_api_->IsObservingAccelerometerReader( + chromeos::AccelerometerReader::GetInstance())) + tablet_controller_->OnAccelerometerUpdated(update); } void PressPowerButton() { @@ -134,14 +158,14 @@ } // Ownership is passed on to chromeos::DBusThreadManager. - chromeos::FakePowerManagerClient* power_manager_client_; + chromeos::FakePowerManagerClient* power_manager_client_ = nullptr; - LockStateController* lock_state_controller_; // Not owned. - TabletPowerButtonController* tablet_controller_; // Not owned. + LockStateController* lock_state_controller_ = nullptr; // Not owned. + TabletPowerButtonController* tablet_controller_ = nullptr; // Not owned. std::unique_ptr<TabletPowerButtonController::TestApi> test_api_; std::unique_ptr<LockStateControllerTestApi> lock_state_test_api_; - base::SimpleTestTickClock* tick_clock_; // Not owned. - TestShellDelegate* shell_delegate_; // Not owned. + base::SimpleTestTickClock* tick_clock_ = nullptr; // Not owned. + TestShellDelegate* shell_delegate_ = nullptr; // Not owned. ui::test::EventGenerator* generator_ = nullptr; DISALLOW_COPY_AND_ASSIGN(TabletPowerButtonControllerTest); @@ -530,7 +554,7 @@ Shell::Get() ->power_button_controller() ->ResetTabletPowerButtonControllerForTest(); - SendAccelerometerUpdate(); + SendAccelerometerUpdate(kSidewaysVector, kSidewaysVector); // Check that the local state of touchscreen enabled state is in line with // backlights forced off state. @@ -550,13 +574,91 @@ ->tablet_power_button_controller_for_test(); EXPECT_FALSE(tablet_controller_); - SendAccelerometerUpdate(); + SendAccelerometerUpdate(kSidewaysVector, kSidewaysVector); tablet_controller_ = Shell::Get() ->power_button_controller() ->tablet_power_button_controller_for_test(); EXPECT_TRUE(tablet_controller_); } +TEST_F(TabletPowerButtonControllerTest, IgnoreSpuriousEventsForAcceleration) { + base::CommandLine cl(base::CommandLine::NO_PROGRAM); + cl.AppendSwitchASCII(switches::kSpuriousPowerButtonWindow, "3"); + cl.AppendSwitchASCII(switches::kSpuriousPowerButtonAccelCount, "2"); + cl.AppendSwitchASCII(switches::kSpuriousPowerButtonKeyboardAccel, "4.5"); + cl.AppendSwitchASCII(switches::kSpuriousPowerButtonScreenAccel, "8.0"); + test_api_->ParseSpuriousPowerButtonSwitches(cl); + ASSERT_FALSE(test_api_->IsSpuriousPowerButtonEvent()); + + // Vectors with varying amounts of acceleration beyond gravity. + static constexpr gfx::Vector3dF kVector0 = { + 0, 0, TabletPowerButtonController::kGravity}; + static constexpr gfx::Vector3dF kVector3 = { + 0, 0, TabletPowerButtonController::kGravity + 3}; + static constexpr gfx::Vector3dF kVector5 = { + 0, 0, TabletPowerButtonController::kGravity + 5}; + static constexpr gfx::Vector3dF kVector9 = { + 0, 0, TabletPowerButtonController::kGravity + 9}; + + // Send two keyboard readings with vectors that exceed the threshold after + // subtracting gravity. + SendAccelerometerUpdate(kVector0, kVector5); + SendAccelerometerUpdate(kVector0, kVector9); + EXPECT_TRUE(test_api_->IsSpuriousPowerButtonEvent()); + + // Now send two more keyboard readings that are close to gravity. We only have + // one large reading saved now, so we should permit power button events again. + SendAccelerometerUpdate(kVector0, kVector0); + SendAccelerometerUpdate(kVector0, kVector0); + EXPECT_FALSE(test_api_->IsSpuriousPowerButtonEvent()); + + // Send a few large screen vectors and check that the button is again blocked. + SendAccelerometerUpdate(kVector9, kVector0); + SendAccelerometerUpdate(kVector9, kVector0); + EXPECT_TRUE(test_api_->IsSpuriousPowerButtonEvent()); +} + +TEST_F(TabletPowerButtonControllerTest, IgnoreSpuriousEventsForLidAngle) { + base::CommandLine cl(base::CommandLine::NO_PROGRAM); + cl.AppendSwitchASCII(switches::kSpuriousPowerButtonWindow, "5"); + cl.AppendSwitchASCII(switches::kSpuriousPowerButtonLidAngleChange, "200"); + test_api_->ParseSpuriousPowerButtonSwitches(cl); + ASSERT_FALSE(test_api_->IsSpuriousPowerButtonEvent()); + + // Send two updates in tablet mode with the screen facing up and the keyboard + // facing down (i.e. 360 degrees between the two). + SendAccelerometerUpdate(kUpVector, kDownVector); + SendAccelerometerUpdate(kUpVector, kDownVector); + EXPECT_FALSE(test_api_->IsSpuriousPowerButtonEvent()); + + // Now keep the screen facing up and report the keyboard as being sideways, as + // if it's been rotated 90 degrees. + SendAccelerometerUpdate(kUpVector, kSidewaysVector); + EXPECT_FALSE(test_api_->IsSpuriousPowerButtonEvent()); + + // Make the keyboard also face up (180 degrees from start). + SendAccelerometerUpdate(kUpVector, kUpVector); + EXPECT_FALSE(test_api_->IsSpuriousPowerButtonEvent()); + + // Now make the screen face sideways, completing the 270-degree change to + // a clamshell orientation. We've exceeded the threshold over the last four + // samples, so events should be ignored. + SendAccelerometerUpdate(kSidewaysVector, kUpVector); + EXPECT_TRUE(test_api_->IsSpuriousPowerButtonEvent()); + + // Make the screen travel 90 more degrees so the lid is closed (360 degrees + // from start). + SendAccelerometerUpdate(kDownVector, kUpVector); + EXPECT_TRUE(test_api_->IsSpuriousPowerButtonEvent()); + + // After two more closed samples, the 5-sample buffer just contains a + // 180-degree transition, so events should be accepted again. + SendAccelerometerUpdate(kDownVector, kUpVector); + EXPECT_TRUE(test_api_->IsSpuriousPowerButtonEvent()); + SendAccelerometerUpdate(kDownVector, kUpVector); + EXPECT_FALSE(test_api_->IsSpuriousPowerButtonEvent()); +} + // Tests that when backlights get forced off due to tablet power button, media // sessions should be suspended. TEST_F(TabletPowerButtonControllerTest, SuspendMediaSessions) {
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 9ec24e72..13ea874 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -508,6 +508,45 @@ cc::switches::kCompositedLayerBorders}, {flag_descriptions::kUiShowCompositedLayerBordersAll, cc::switches::kUIShowCompositedLayerBorders, ""}}; + +const FeatureEntry::Choice kSpuriousPowerButtonWindowChoices[] = { + {"0", "", ""}, + {"5", ash::switches::kSpuriousPowerButtonWindow, "5"}, + {"10", ash::switches::kSpuriousPowerButtonWindow, "10"}, + {"15", ash::switches::kSpuriousPowerButtonWindow, "15"}, + {"20", ash::switches::kSpuriousPowerButtonWindow, "20"}, +}; +const FeatureEntry::Choice kSpuriousPowerButtonAccelCountChoices[] = { + {"0", "", ""}, + {"1", ash::switches::kSpuriousPowerButtonAccelCount, "1"}, + {"2", ash::switches::kSpuriousPowerButtonAccelCount, "2"}, + {"3", ash::switches::kSpuriousPowerButtonAccelCount, "3"}, + {"4", ash::switches::kSpuriousPowerButtonAccelCount, "4"}, + {"5", ash::switches::kSpuriousPowerButtonAccelCount, "5"}, +}; +const FeatureEntry::Choice kSpuriousPowerButtonScreenAccelChoices[] = { + {"0", "", ""}, + {"0.2", ash::switches::kSpuriousPowerButtonScreenAccel, "0.2"}, + {"0.4", ash::switches::kSpuriousPowerButtonScreenAccel, "0.4"}, + {"0.6", ash::switches::kSpuriousPowerButtonScreenAccel, "0.6"}, + {"0.8", ash::switches::kSpuriousPowerButtonScreenAccel, "0.8"}, + {"1.0", ash::switches::kSpuriousPowerButtonScreenAccel, "1.0"}, +}; +const FeatureEntry::Choice kSpuriousPowerButtonKeyboardAccelChoices[] = { + {"0", "", ""}, + {"0.2", ash::switches::kSpuriousPowerButtonKeyboardAccel, "0.2"}, + {"0.4", ash::switches::kSpuriousPowerButtonKeyboardAccel, "0.4"}, + {"0.6", ash::switches::kSpuriousPowerButtonKeyboardAccel, "0.6"}, + {"0.8", ash::switches::kSpuriousPowerButtonKeyboardAccel, "0.8"}, + {"1.0", ash::switches::kSpuriousPowerButtonKeyboardAccel, "1.0"}, +}; +const FeatureEntry::Choice kSpuriousPowerButtonLidAngleChangeChoices[] = { + {"0", "", ""}, + {"45", ash::switches::kSpuriousPowerButtonLidAngleChange, "45"}, + {"90", ash::switches::kSpuriousPowerButtonLidAngleChange, "90"}, + {"135", ash::switches::kSpuriousPowerButtonLidAngleChange, "135"}, + {"180", ash::switches::kSpuriousPowerButtonLidAngleChange, "180"}, +}; #endif // OS_CHROMEOS const FeatureEntry::Choice kV8CacheOptionsChoices[] = { @@ -1341,6 +1380,26 @@ kOsCrOS, SINGLE_VALUE_TYPE( proximity_auth::switches::kEnableBluetoothLowEnergyDiscovery)}, + {"spurious-power-button-window", + flag_descriptions::kSpuriousPowerButtonWindowName, + flag_descriptions::kSpuriousPowerButtonWindowDescription, kOsCrOS, + MULTI_VALUE_TYPE(kSpuriousPowerButtonWindowChoices)}, + {"spurious-power-button-accel-count", + flag_descriptions::kSpuriousPowerButtonAccelCountName, + flag_descriptions::kSpuriousPowerButtonAccelCountDescription, kOsCrOS, + MULTI_VALUE_TYPE(kSpuriousPowerButtonAccelCountChoices)}, + {"spurious-power-button-screen-accel", + flag_descriptions::kSpuriousPowerButtonScreenAccelName, + flag_descriptions::kSpuriousPowerButtonScreenAccelDescription, kOsCrOS, + MULTI_VALUE_TYPE(kSpuriousPowerButtonScreenAccelChoices)}, + {"spurious-power-button-keyboard-accel", + flag_descriptions::kSpuriousPowerButtonKeyboardAccelName, + flag_descriptions::kSpuriousPowerButtonKeyboardAccelDescription, kOsCrOS, + MULTI_VALUE_TYPE(kSpuriousPowerButtonKeyboardAccelChoices)}, + {"spurious-power-button-lid-angle-change", + flag_descriptions::kSpuriousPowerButtonLidAngleChangeName, + flag_descriptions::kSpuriousPowerButtonLidAngleChangeDescription, kOsCrOS, + MULTI_VALUE_TYPE(kSpuriousPowerButtonLidAngleChangeChoices)}, #endif // OS_CHROMEOS #if defined(USE_ASH) {"ash-disable-night-light", flag_descriptions::kDisableNightLightName,
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index e88f4d37..0714a23 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -3049,6 +3049,37 @@ "If enabled and the device supports ARC, the user will be asked to update " "the encryption of user data when the user signs in."; +// Spurious power button detection + +const char kSpuriousPowerButtonWindowName[] = "Spurious power button window"; +const char kSpuriousPowerButtonWindowDescription[] = + "Number of recent accelerometer samples to examine to determine if a power " + "button event was spurious."; + +const char kSpuriousPowerButtonAccelCountName[] = + "Spurious power button acceleration count"; +const char kSpuriousPowerButtonAccelCountDescription[] = + "Number of recent acceleration samples that must meet or exceed exceed the " + "threshold in order for a power button event to be considered spurious."; + +const char kSpuriousPowerButtonScreenAccelName[] = + "Spurious power button screen acceleration threshold"; +const char kSpuriousPowerButtonScreenAccelDescription[] = + "Threshold (in m/s^2, disregarding gravity) that screen acceleration must " + "meet or exceed for a power button event to be considered spurious."; + +const char kSpuriousPowerButtonKeyboardAccelName[] = + "Spurious power button keyboard acceleration threshold"; +const char kSpuriousPowerButtonKeyboardAccelDescription[] = + "Threshold (in m/s^2, disregarding gravity) that keyboard acceleration " + "must meet or exceed for a power button event to be considered spurious."; + +const char kSpuriousPowerButtonLidAngleChangeName[] = + "Spurious power button lid angle change threshold"; +const char kSpuriousPowerButtonLidAngleChangeDescription[] = + "Change in lid angle (i.e. hinge between keyboard and screen) that must be " + "met or exceeded for a power button event to be considered spurious."; + #endif // #if defined(OS_CHROMEOS) #if defined(OS_ANDROID)
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 89342fc..e5a1429 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -1367,6 +1367,17 @@ extern const char kSmartVirtualKeyboardName[]; extern const char kSmartVirtualKeyboardDescription[]; +extern const char kSpuriousPowerButtonWindowName[]; +extern const char kSpuriousPowerButtonWindowDescription[]; +extern const char kSpuriousPowerButtonAccelCountName[]; +extern const char kSpuriousPowerButtonAccelCountDescription[]; +extern const char kSpuriousPowerButtonScreenAccelName[]; +extern const char kSpuriousPowerButtonScreenAccelDescription[]; +extern const char kSpuriousPowerButtonKeyboardAccelName[]; +extern const char kSpuriousPowerButtonKeyboardAccelDescription[]; +extern const char kSpuriousPowerButtonLidAngleChangeName[]; +extern const char kSpuriousPowerButtonLidAngleChangeDescription[]; + extern const char kTeamDrivesName[]; extern const char kTeamDrivesDescription[];
diff --git a/chrome/browser/media/router/mojo/media_route_provider_util_win.cc b/chrome/browser/media/router/mojo/media_route_provider_util_win.cc index 8560ff7..3ffe767 100644 --- a/chrome/browser/media/router/mojo/media_route_provider_util_win.cc +++ b/chrome/browser/media/router/mojo/media_route_provider_util_win.cc
@@ -8,40 +8,37 @@ #include "base/location.h" #include "base/logging.h" #include "base/path_service.h" +#include "base/task_runner_util.h" +#include "base/task_scheduler/post_task.h" #include "chrome/installer/util/browser_distribution.h" #include "chrome/installer/util/firewall_manager_win.h" -#include "content/public/browser/browser_thread.h" namespace media_router { namespace { -void DoCanFirewallUseLocalPorts(const base::Callback<void(bool)>& callback) { - DCHECK_CURRENTLY_ON(content::BrowserThread::FILE); +bool DoCanFirewallUseLocalPorts() { base::FilePath exe_path; - bool can_use_local_ports = false; if (!base::PathService::Get(base::FILE_EXE, &exe_path)) { LOG(WARNING) << "Couldn't get path of current executable."; - return; + return false; } auto firewall_manager = installer::FirewallManager::Create( BrowserDistribution::GetDistribution(), exe_path); if (!firewall_manager) { LOG(WARNING) << "Couldn't get FirewallManager instance."; - return; + return false; } - can_use_local_ports = firewall_manager->CanUseLocalPorts(); - content::BrowserThread::PostTask( - content::BrowserThread::UI, FROM_HERE, - base::Bind(callback, can_use_local_ports)); + return firewall_manager->CanUseLocalPorts(); } } // namespace -void CanFirewallUseLocalPorts(const base::Callback<void(bool)>& callback) { - content::BrowserThread::PostTask( - content::BrowserThread::FILE, FROM_HERE, - base::Bind(&DoCanFirewallUseLocalPorts, callback)); +void CanFirewallUseLocalPorts(base::OnceCallback<void(bool)> callback) { + auto task_runner = base::CreateCOMSTATaskRunnerWithTraits({base::MayBlock()}); + base::PostTaskAndReplyWithResult(task_runner.get(), FROM_HERE, + base::BindOnce(&DoCanFirewallUseLocalPorts), + std::move(callback)); } } // namespace media_router
diff --git a/chrome/browser/media/router/mojo/media_route_provider_util_win.h b/chrome/browser/media/router/mojo/media_route_provider_util_win.h index d82d09140..49709ef 100644 --- a/chrome/browser/media/router/mojo/media_route_provider_util_win.h +++ b/chrome/browser/media/router/mojo/media_route_provider_util_win.h
@@ -12,7 +12,7 @@ // Asynchronously checks whether there will be a firewall prompt for using local // ports on Windows. |callback| will be called with the result where |true| // means that local ports can be used without triggering a firewall prompt. -void CanFirewallUseLocalPorts(const base::Callback<void(bool)>& callback); +void CanFirewallUseLocalPorts(base::OnceCallback<void(bool)> callback); } // namespace media_router
diff --git a/chrome/browser/media/router/mojo/media_router_mojo_impl.cc b/chrome/browser/media/router/mojo/media_router_mojo_impl.cc index 39acd69c..63a0931 100644 --- a/chrome/browser/media/router/mojo/media_router_mojo_impl.cc +++ b/chrome/browser/media/router/mojo/media_router_mojo_impl.cc
@@ -75,8 +75,8 @@ #if defined(OS_WIN) if (check_firewall == FirewallCheck::RUN) { CanFirewallUseLocalPorts( - base::Bind(&MediaRouterMojoImpl::OnFirewallCheckComplete, - weak_factory_.GetWeakPtr())); + base::BindOnce(&MediaRouterMojoImpl::OnFirewallCheckComplete, + weak_factory_.GetWeakPtr())); } #endif }
diff --git a/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc b/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc index 8bd5b218..ea5764be 100644 --- a/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc +++ b/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc
@@ -313,8 +313,16 @@ } void BrowserTabStripController::UpdateLoadingAnimations() { - for (int i = 0, tab_count = tabstrip_->tab_count(); i < tab_count; ++i) - tabstrip_->tab_at(i)->StepLoadingAnimation(); + // Don't use the model count here as it's possible for this to be invoked + // before we've applied an update from the model (Browser::TabInsertedAt may + // be processed before us and invokes this). + for (int i = 0, tab_count = tabstrip_->tab_count(); i < tab_count; ++i) { + if (model_->ContainsIndex(i)) { + Tab* tab = tabstrip_->tab_at(i); + WebContents* contents = model_->GetWebContentsAt(i); + tab->UpdateLoadingAnimation(TabContentsNetworkState(contents)); + } + } } int BrowserTabStripController::HasAvailableDragActions() const {
diff --git a/chrome/browser/ui/views/tabs/tab.cc b/chrome/browser/ui/views/tabs/tab.cc index 19c62f0..babe43fc 100644 --- a/chrome/browser/ui/views/tabs/tab.cc +++ b/chrome/browser/ui/views/tabs/tab.cc
@@ -13,7 +13,6 @@ #include "base/macros.h" #include "base/metrics/user_metrics.h" #include "base/strings/utf_string_conversions.h" -#include "base/time/time.h" #include "build/build_config.h" #include "cc/paint/paint_flags.h" #include "cc/paint/paint_recorder.h" @@ -98,11 +97,6 @@ const char kTabCloseButtonName[] = "TabCloseButton"; -bool ShouldShowThrobber(TabRendererData::NetworkState state) { - return state != TabRendererData::NETWORK_STATE_NONE && - state != TabRendererData::NETWORK_STATE_ERROR; -} - //////////////////////////////////////////////////////////////////////////////// // Drawing and utility functions @@ -367,10 +361,11 @@ // Resets the times tracking when the throbber changes state. void ResetStartTimes(); + private: // views::View: + bool CanProcessEventsWithinSubtree() const override; void OnPaint(gfx::Canvas* canvas) override; - private: Tab* owner_; // Weak. Owns |this|. // The point in time when the tab icon was first painted in the waiting state. @@ -385,9 +380,7 @@ DISALLOW_COPY_AND_ASSIGN(ThrobberView); }; -Tab::ThrobberView::ThrobberView(Tab* owner) : owner_(owner) { - set_can_process_events_within_subtree(false); -} +Tab::ThrobberView::ThrobberView(Tab* owner) : owner_(owner) {} void Tab::ThrobberView::ResetStartTimes() { waiting_start_time_ = base::TimeTicks(); @@ -395,9 +388,15 @@ waiting_state_ = gfx::ThrobberWaitingState(); } +bool Tab::ThrobberView::CanProcessEventsWithinSubtree() const { + return false; +} + void Tab::ThrobberView::OnPaint(gfx::Canvas* canvas) { const TabRendererData::NetworkState state = owner_->data().network_state; - CHECK(ShouldShowThrobber(state)); + if (state == TabRendererData::NETWORK_STATE_NONE || + state == TabRendererData::NETWORK_STATE_ERROR) + return; const ui::ThemeProvider* tp = GetThemeProvider(); const gfx::Rect bounds = GetLocalBounds(); @@ -535,8 +534,8 @@ return; TabRendererData old(data_); + UpdateLoadingAnimation(data.network_state); data_ = data; - UpdateThrobber(old); base::string16 title = data_.title; if (title.empty()) { @@ -570,11 +569,17 @@ SchedulePaint(); } -void Tab::StepLoadingAnimation() { - if (!throbber_->visible()) +void Tab::UpdateLoadingAnimation(TabRendererData::NetworkState state) { + if (state == data_.network_state && + (state == TabRendererData::NETWORK_STATE_NONE || + state == TabRendererData::NETWORK_STATE_ERROR)) { + // If the network state is none or is a network error and hasn't changed, + // do nothing. Otherwise we need to advance the animation frame. return; + } - RefreshThrobber(); + data_.network_state = state; + AdvanceLoadingAnimation(); } void Tab::StartPulse() { @@ -1268,8 +1273,10 @@ return; // Throbber will do its own painting. - if (throbber_->visible()) + if (data().network_state != TabRendererData::NETWORK_STATE_NONE && + data().network_state != TabRendererData::NETWORK_STATE_ERROR) { return; + } // Ensure that |favicon_| is created. if (favicon_.isNull()) { ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); @@ -1299,31 +1306,10 @@ } } -void Tab::UpdateThrobber(const TabRendererData& old) { - const bool should_show = ShouldShowThrobber(data_.network_state); - const bool is_showing = throbber_->visible(); - - // Delay the switch to showing the throbber for short duration resource - // loading that occurs after the initial navigation. See crbug.com/734104 - if (!is_showing && should_show && old.url == data_.url) { - if (!delayed_throbber_show_timer_.IsRunning()) { - delayed_throbber_show_timer_.Start(FROM_HERE, - base::TimeDelta::FromSeconds(3), this, - &Tab::RefreshThrobber); - } - return; - } - - delayed_throbber_show_timer_.Stop(); - - if (!is_showing && !should_show) - return; - - RefreshThrobber(); -} - -void Tab::RefreshThrobber() { - if (!ShouldShowThrobber(data().network_state)) { +void Tab::AdvanceLoadingAnimation() { + const TabRendererData::NetworkState state = data().network_state; + if (state == TabRendererData::NETWORK_STATE_NONE || + state == TabRendererData::NETWORK_STATE_ERROR) { throbber_->ResetStartTimes(); throbber_->SetVisible(false); ScheduleIconPaint();
diff --git a/chrome/browser/ui/views/tabs/tab.h b/chrome/browser/ui/views/tabs/tab.h index d06e74b..573ea77 100644 --- a/chrome/browser/ui/views/tabs/tab.h +++ b/chrome/browser/ui/views/tabs/tab.h
@@ -12,7 +12,6 @@ #include "base/gtest_prod_util.h" #include "base/macros.h" #include "base/memory/ref_counted.h" -#include "base/timer/timer.h" #include "cc/paint/paint_record.h" #include "chrome/browser/ui/views/tabs/tab_renderer_data.h" #include "ui/base/layout.h" @@ -95,8 +94,8 @@ void SetData(const TabRendererData& data); const TabRendererData& data() const { return data_; } - // Redraws the loading animation if one is visible. Otherwise, no-op. - void StepLoadingAnimation(); + // Sets the network state. + void UpdateLoadingAnimation(TabRendererData::NetworkState state); // Starts/Stops a pulse animation. void StartPulse(); @@ -260,11 +259,8 @@ // Paints the favicon, mirrored for RTL if needed. void PaintIcon(gfx::Canvas* canvas); - // Updates the throbber. - void UpdateThrobber(const TabRendererData& old); - - // Sets the throbber visibility according to the state in |data_|. - void RefreshThrobber(); + // Invoked if data_.network_state changes, or the network_state is not none. + void AdvanceLoadingAnimation(); // Returns the number of favicon-size elements that can fit in the tab's // current size. @@ -367,11 +363,6 @@ // and thus may be null. gfx::ImageSkia favicon_; - // This timer allows us to delay updating the visibility of the loading - // indicator so that state changes of a very brief duration aren't visually - // apparent to the user. - base::OneShotTimer delayed_throbber_show_timer_; - class BackgroundCache { public: BackgroundCache();
diff --git a/chrome/browser/ui/views/tabs/tab_unittest.cc b/chrome/browser/ui/views/tabs/tab_unittest.cc index 1b9d686..c751379 100644 --- a/chrome/browser/ui/views/tabs/tab_unittest.cc +++ b/chrome/browser/ui/views/tabs/tab_unittest.cc
@@ -233,13 +233,6 @@ } } - void FastForwardThrobberStateTimer(Tab* tab) { - EXPECT_TRUE(tab->delayed_throbber_show_timer_.IsRunning()); - auto closure = tab->delayed_throbber_show_timer_.user_task(); - tab->delayed_throbber_show_timer_.Stop(); - closure.Run(); - } - protected: void InitWidget(Widget* widget) { Widget::InitParams params(CreateParams(Widget::InitParams::TYPE_WINDOW)); @@ -449,68 +442,47 @@ tab.SetBoundsRect(gfx::Rect(Tab::GetStandardSize())); views::View* throbber = GetThrobberView(tab); - TabRendererData data; - data.url = GURL("http://example.com"); EXPECT_FALSE(throbber->visible()); EXPECT_EQ(TabRendererData::NETWORK_STATE_NONE, tab.data().network_state); EXPECT_EQ(throbber->bounds(), GetFaviconBounds(tab)); + tab.UpdateLoadingAnimation(TabRendererData::NETWORK_STATE_NONE); + EXPECT_FALSE(throbber->visible()); + // Simulate a "normal" tab load: should paint to a layer. - data.network_state = TabRendererData::NETWORK_STATE_WAITING; - tab.SetData(data); + tab.UpdateLoadingAnimation(TabRendererData::NETWORK_STATE_WAITING); EXPECT_TRUE(tab_controller.CanPaintThrobberToLayer()); EXPECT_TRUE(throbber->visible()); EXPECT_TRUE(throbber->layer()); - data.network_state = TabRendererData::NETWORK_STATE_LOADING; - tab.SetData(data); + tab.UpdateLoadingAnimation(TabRendererData::NETWORK_STATE_LOADING); EXPECT_TRUE(throbber->visible()); EXPECT_TRUE(throbber->layer()); - data.network_state = TabRendererData::NETWORK_STATE_NONE; - tab.SetData(data); - EXPECT_FALSE(throbber->visible()); - - // After loading is done, simulate another resource starting to load. The - // throbber shouldn't immediately become visible again. - data.network_state = TabRendererData::NETWORK_STATE_WAITING; - tab.SetData(data); - EXPECT_FALSE(throbber->visible()); - FastForwardThrobberStateTimer(&tab); - EXPECT_TRUE(throbber->visible()); - - // Reset. - data.network_state = TabRendererData::NETWORK_STATE_NONE; - tab.SetData(data); + tab.UpdateLoadingAnimation(TabRendererData::NETWORK_STATE_NONE); EXPECT_FALSE(throbber->visible()); // Simulate a drag started and stopped during a load: layer painting stops // temporarily. - data.network_state = TabRendererData::NETWORK_STATE_WAITING; - tab.SetData(data); - FastForwardThrobberStateTimer(&tab); + tab.UpdateLoadingAnimation(TabRendererData::NETWORK_STATE_WAITING); EXPECT_TRUE(throbber->visible()); EXPECT_TRUE(throbber->layer()); tab_controller.set_paint_throbber_to_layer(false); - tab.StepLoadingAnimation(); + tab.UpdateLoadingAnimation(TabRendererData::NETWORK_STATE_WAITING); EXPECT_TRUE(throbber->visible()); EXPECT_FALSE(throbber->layer()); tab_controller.set_paint_throbber_to_layer(true); - tab.StepLoadingAnimation(); + tab.UpdateLoadingAnimation(TabRendererData::NETWORK_STATE_WAITING); EXPECT_TRUE(throbber->visible()); EXPECT_TRUE(throbber->layer()); - data.network_state = TabRendererData::NETWORK_STATE_NONE; - tab.SetData(data); + tab.UpdateLoadingAnimation(TabRendererData::NETWORK_STATE_NONE); EXPECT_FALSE(throbber->visible()); // Simulate a tab load starting and stopping during tab dragging (or with // stacked tabs): no layer painting. tab_controller.set_paint_throbber_to_layer(false); - data.network_state = TabRendererData::NETWORK_STATE_WAITING; - tab.SetData(data); - FastForwardThrobberStateTimer(&tab); + tab.UpdateLoadingAnimation(TabRendererData::NETWORK_STATE_WAITING); EXPECT_TRUE(throbber->visible()); EXPECT_FALSE(throbber->layer()); - data.network_state = TabRendererData::NETWORK_STATE_NONE; - tab.SetData(data); + tab.UpdateLoadingAnimation(TabRendererData::NETWORK_STATE_NONE); EXPECT_FALSE(throbber->visible()); }
diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn index 5a5cd912..06b8b7a 100644 --- a/chrome/common/BUILD.gn +++ b/chrome/common/BUILD.gn
@@ -553,7 +553,6 @@ "//rlz/features", ] deps = [ - ":channel_info", ":version_header", "//base", "//base/third_party/dynamic_annotations",
diff --git a/chrome/common/channel_info.h b/chrome/common/channel_info.h index 010de41..a633722 100644 --- a/chrome/common/channel_info.h +++ b/chrome/common/channel_info.h
@@ -41,13 +41,6 @@ void SetChannel(const std::string& channel); #endif -#if defined(OS_POSIX) && defined(GOOGLE_CHROME_BUILD) -// Returns a channel-specific suffix to use when constructing the path of the -// default user data directory, allowing multiple channels to run side-by-side. -// In the stable channel, this returns the empty string. -std::string GetChannelSuffixForDataDir(); -#endif - } // namespace chrome #endif // CHROME_COMMON_CHANNEL_INFO_H_
diff --git a/chrome/common/channel_info_posix.cc b/chrome/common/channel_info_posix.cc index 2b4e9792..ff55d20 100644 --- a/chrome/common/channel_info_posix.cc +++ b/chrome/common/channel_info_posix.cc
@@ -15,11 +15,9 @@ // Helper function to return both the channel enum and modifier string. // Implements both together to prevent their behavior from diverging, which has // happened multiple times in the past. -version_info::Channel GetChannelImpl(std::string* modifier_out, - std::string* data_dir_suffix_out) { +version_info::Channel GetChannelImpl(std::string* modifier_out) { version_info::Channel channel = version_info::Channel::UNKNOWN; std::string modifier; - std::string data_dir_suffix; char* env = getenv("CHROME_VERSION_EXTRA"); if (env) @@ -34,10 +32,8 @@ modifier = ""; } else if (modifier == "dev") { channel = version_info::Channel::DEV; - data_dir_suffix = "-unstable"; } else if (modifier == "beta") { channel = version_info::Channel::BETA; - data_dir_suffix = "-beta"; } else { modifier = "unknown"; } @@ -45,8 +41,6 @@ if (modifier_out) modifier_out->swap(modifier); - if (data_dir_suffix_out) - data_dir_suffix_out->swap(data_dir_suffix); return channel; } @@ -55,20 +49,12 @@ std::string GetChannelString() { std::string modifier; - GetChannelImpl(&modifier, nullptr); + GetChannelImpl(&modifier); return modifier; } -#if defined(GOOGLE_CHROME_BUILD) -std::string GetChannelSuffixForDataDir() { - std::string data_dir_suffix; - GetChannelImpl(nullptr, &data_dir_suffix); - return data_dir_suffix; -} -#endif // defined(GOOGLE_CHROME_BUILD) - version_info::Channel GetChannel() { - return GetChannelImpl(nullptr, nullptr); + return GetChannelImpl(nullptr); } } // namespace chrome
diff --git a/chrome/common/chrome_paths_linux.cc b/chrome/common/chrome_paths_linux.cc index 1527b89..aa26cc9b 100644 --- a/chrome/common/chrome_paths_linux.cc +++ b/chrome/common/chrome_paths_linux.cc
@@ -12,7 +12,6 @@ #include "base/nix/xdg_util.h" #include "base/path_service.h" #include "build/build_config.h" -#include "chrome/common/channel_info.h" #include "chrome/common/chrome_paths_internal.h" namespace chrome { @@ -57,29 +56,18 @@ } // namespace -// This returns <config-home>/<product>, where -// <config-home> is: -// $XDG_CONFIG_HOME if set -// otherwise ~/.config -// and <product> is: -// "chromium" for Chromium -// "google-chrome" for stable channel official build -// "google-chrome-beta" for beta channel official build -// "google-chrome-unstable" for dev channel official build -// -// (Note that ChromeMainDelegate will override the value returned by this -// function if $CHROME_USER_DATA_DIR or --user-data-dir is set.) -// // See http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html -// for a spec on where config files go. Using ~/.config also helps us sidestep -// issues with other apps grabbing ~/.chromium . +// for a spec on where config files go. The net effect for most +// systems is we use ~/.config/chromium/ for Chromium and +// ~/.config/google-chrome/ for official builds. +// (This also helps us sidestep issues with other apps grabbing ~/.chromium .) bool GetDefaultUserDataDirectory(base::FilePath* result) { std::unique_ptr<base::Environment> env(base::Environment::Create()); base::FilePath config_dir(GetXDGDirectory(env.get(), kXdgConfigHomeEnvVar, kDotConfigDir)); #if defined(GOOGLE_CHROME_BUILD) - *result = config_dir.Append("google-chrome" + GetChannelSuffixForDataDir()); + *result = config_dir.Append("google-chrome"); #else *result = config_dir.Append("chromium"); #endif
diff --git a/content/browser/service_worker/embedded_worker_test_helper.cc b/content/browser/service_worker/embedded_worker_test_helper.cc index e3b001c..9ab90132 100644 --- a/content/browser/service_worker/embedded_worker_test_helper.cc +++ b/content/browser/service_worker/embedded_worker_test_helper.cc
@@ -299,8 +299,7 @@ new MockServiceWorkerDatabaseTaskManager( base::ThreadTaskRunnerHandle::Get())); wrapper_->InitInternal(user_data_directory, std::move(database_task_manager), - base::ThreadTaskRunnerHandle::Get(), nullptr, nullptr, - nullptr, nullptr); + base::ThreadTaskRunnerHandle::Get(), nullptr, nullptr); wrapper_->process_manager()->SetProcessIdForTest(mock_render_process_id()); wrapper_->process_manager()->SetNewProcessIdForTest(new_render_process_id());
diff --git a/content/browser/service_worker/service_worker_context_core.cc b/content/browser/service_worker/service_worker_context_core.cc index 9933f3c..751da4a 100644 --- a/content/browser/service_worker/service_worker_context_core.cc +++ b/content/browser/service_worker/service_worker_context_core.cc
@@ -33,13 +33,11 @@ #include "content/browser/service_worker/service_worker_registration.h" #include "content/browser/service_worker/service_worker_storage.h" #include "content/browser/service_worker/service_worker_version.h" -#include "content/browser/url_loader_factory_getter.h" #include "content/common/service_worker/service_worker_utils.h" #include "content/public/browser/browser_thread.h" #include "ipc/ipc_message.h" #include "net/http/http_response_headers.h" #include "net/http/http_response_info.h" -#include "storage/browser/blob/blob_storage_context.h" #include "storage/browser/quota/quota_manager_proxy.h" #include "url/gurl.h" @@ -241,16 +239,12 @@ const scoped_refptr<base::SingleThreadTaskRunner>& disk_cache_thread, storage::QuotaManagerProxy* quota_manager_proxy, storage::SpecialStoragePolicy* special_storage_policy, - base::WeakPtr<storage::BlobStorageContext> blob_storage_context, - URLLoaderFactoryGetter* url_loader_factory_getter, base::ObserverListThreadSafe<ServiceWorkerContextCoreObserver>* observer_list, ServiceWorkerContextWrapper* wrapper) : wrapper_(wrapper), providers_(base::MakeUnique<ProcessToProviderMap>()), provider_by_uuid_(base::MakeUnique<ProviderByClientUUIDMap>()), - blob_storage_context_(std::move(blob_storage_context)), - loader_factory_getter_(url_loader_factory_getter), force_update_on_page_load_(false), next_handle_id_(0), next_registration_handle_id_(0),
diff --git a/content/browser/service_worker/service_worker_context_core.h b/content/browser/service_worker/service_worker_context_core.h index 62d6a42..29120b0 100644 --- a/content/browser/service_worker/service_worker_context_core.h +++ b/content/browser/service_worker/service_worker_context_core.h
@@ -35,7 +35,6 @@ } namespace storage { -class BlobStorageContext; class QuotaManagerProxy; class SpecialStoragePolicy; } @@ -52,7 +51,6 @@ class ServiceWorkerProviderHost; class ServiceWorkerRegistration; class ServiceWorkerStorage; -class URLLoaderFactoryGetter; // This class manages data associated with service workers. // The class is single threaded and should only be used on the IO thread. @@ -113,8 +111,6 @@ // ServiceWorkerContextWrapper. When Notify() of |observer_list| is called in // ServiceWorkerContextCore, the methods of ServiceWorkerContextCoreObserver // will be called on the thread which called AddObserver() of |observer_list|. - // |blob_context| and |url_loader_factory_getter| are used only - // when IsServicificationEnabled is true. ServiceWorkerContextCore( const base::FilePath& user_data_directory, std::unique_ptr<ServiceWorkerDatabaseTaskManager> @@ -122,8 +118,6 @@ const scoped_refptr<base::SingleThreadTaskRunner>& disk_cache_thread, storage::QuotaManagerProxy* quota_manager_proxy, storage::SpecialStoragePolicy* special_storage_policy, - base::WeakPtr<storage::BlobStorageContext> blob_context, - URLLoaderFactoryGetter* url_loader_factory_getter, base::ObserverListThreadSafe<ServiceWorkerContextCoreObserver>* observer_list, ServiceWorkerContextWrapper* wrapper); @@ -313,14 +307,6 @@ int service_worker_provider_id, mojom::ServiceWorkerWorkerClientAssociatedPtrInfo client_ptr_info); - base::WeakPtr<storage::BlobStorageContext> blob_storage_context() { - return blob_storage_context_; - } - - URLLoaderFactoryGetter* loader_factory_getter() { - return loader_factory_getter_.get(); - } - base::WeakPtr<ServiceWorkerContextCore> AsWeakPtr() { return weak_factory_.GetWeakPtr(); } @@ -394,10 +380,6 @@ std::map<int, ServiceWorkerNavigationHandleCore*> navigation_handle_cores_map_; - // IsServicificationEnabled - base::WeakPtr<storage::BlobStorageContext> blob_storage_context_; - scoped_refptr<URLLoaderFactoryGetter> loader_factory_getter_; - bool force_update_on_page_load_; int next_handle_id_; int next_registration_handle_id_;
diff --git a/content/browser/service_worker/service_worker_context_request_handler.cc b/content/browser/service_worker/service_worker_context_request_handler.cc index 13b4c483..364e41f7 100644 --- a/content/browser/service_worker/service_worker_context_request_handler.cc +++ b/content/browser/service_worker/service_worker_context_request_handler.cc
@@ -21,6 +21,26 @@ namespace content { +namespace { + +bool IsInstalled(const ServiceWorkerVersion* version) { + switch (version->status()) { + case ServiceWorkerVersion::NEW: + case ServiceWorkerVersion::INSTALLING: + return false; + case ServiceWorkerVersion::INSTALLED: + case ServiceWorkerVersion::ACTIVATING: + case ServiceWorkerVersion::ACTIVATED: + return true; + case ServiceWorkerVersion::REDUNDANT: + return false; + } + NOTREACHED(); + return false; +} + +} // namespace + ServiceWorkerContextRequestHandler::ServiceWorkerContextRequestHandler( base::WeakPtr<ServiceWorkerContextCore> context, base::WeakPtr<ServiceWorkerProviderHost> provider_host, @@ -90,8 +110,7 @@ MaybeCreateJobImpl(request, network_delegate, &status); const bool is_main_script = resource_type_ == RESOURCE_TYPE_SERVICE_WORKER; ServiceWorkerMetrics::RecordContextRequestHandlerStatus( - status, ServiceWorkerVersion::IsInstalled(version_->status()), - is_main_script); + status, IsInstalled(version_.get()), is_main_script); if (job) return job; @@ -151,7 +170,7 @@ int resource_id = version_->script_cache_map()->LookupResourceId(request->url()); if (resource_id != kInvalidServiceWorkerResourceId) { - if (ServiceWorkerVersion::IsInstalled(version_->status())) { + if (IsInstalled(version_.get())) { // An installed worker is loading a stored script. if (is_main_script) version_->embedded_worker()->OnURLJobCreatedForMainScript(); @@ -167,7 +186,7 @@ } // An installed worker is importing a non-stored script. - if (ServiceWorkerVersion::IsInstalled(version_->status())) { + if (IsInstalled(version_.get())) { DCHECK(!is_main_script); *out_status = CreateJobStatus::ERROR_UNINSTALLED_SCRIPT_IMPORT; return nullptr;
diff --git a/content/browser/service_worker/service_worker_context_wrapper.cc b/content/browser/service_worker/service_worker_context_wrapper.cc index a25c00c..fbb00d4fc 100644 --- a/content/browser/service_worker/service_worker_context_wrapper.cc +++ b/content/browser/service_worker/service_worker_context_wrapper.cc
@@ -31,7 +31,6 @@ #include "content/public/browser/browser_thread.h" #include "content/public/browser/service_worker_context_observer.h" #include "net/base/url_util.h" -#include "storage/browser/blob/blob_storage_context.h" #include "storage/browser/quota/quota_manager_proxy.h" #include "storage/browser/quota/special_storage_policy.h" @@ -149,9 +148,7 @@ void ServiceWorkerContextWrapper::Init( const base::FilePath& user_data_directory, storage::QuotaManagerProxy* quota_manager_proxy, - storage::SpecialStoragePolicy* special_storage_policy, - ChromeBlobStorageContext* blob_context, - URLLoaderFactoryGetter* loader_factory_getter) { + storage::SpecialStoragePolicy* special_storage_policy) { DCHECK_CURRENTLY_ON(BrowserThread::UI); is_incognito_ = user_data_directory.empty(); @@ -161,8 +158,7 @@ scoped_refptr<base::SingleThreadTaskRunner> disk_cache_thread = BrowserThread::GetTaskRunnerForThread(BrowserThread::CACHE); InitInternal(user_data_directory, std::move(database_task_manager), - disk_cache_thread, quota_manager_proxy, special_storage_policy, - blob_context, loader_factory_getter); + disk_cache_thread, quota_manager_proxy, special_storage_policy); } void ServiceWorkerContextWrapper::Shutdown() { @@ -793,18 +789,14 @@ std::unique_ptr<ServiceWorkerDatabaseTaskManager> database_task_manager, const scoped_refptr<base::SingleThreadTaskRunner>& disk_cache_thread, storage::QuotaManagerProxy* quota_manager_proxy, - storage::SpecialStoragePolicy* special_storage_policy, - ChromeBlobStorageContext* blob_context, - URLLoaderFactoryGetter* loader_factory_getter) { + storage::SpecialStoragePolicy* special_storage_policy) { if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, base::Bind(&ServiceWorkerContextWrapper::InitInternal, this, user_data_directory, base::Passed(&database_task_manager), disk_cache_thread, base::RetainedRef(quota_manager_proxy), - base::RetainedRef(special_storage_policy), - base::RetainedRef(blob_context), - base::RetainedRef(loader_factory_getter))); + base::RetainedRef(special_storage_policy))); return; } // TODO(pkasting): Remove ScopedTracker below once crbug.com/477117 is fixed. @@ -815,15 +807,10 @@ if (quota_manager_proxy) { quota_manager_proxy->RegisterClient(new ServiceWorkerQuotaClient(this)); } - - base::WeakPtr<storage::BlobStorageContext> blob_storage_context = - blob_context && blob_context->context() - ? blob_context->context()->AsWeakPtr() - : nullptr; context_core_.reset(new ServiceWorkerContextCore( user_data_directory, std::move(database_task_manager), disk_cache_thread, - quota_manager_proxy, special_storage_policy, blob_storage_context, - loader_factory_getter, core_observer_list_.get(), this)); + quota_manager_proxy, special_storage_policy, core_observer_list_.get(), + this)); } void ServiceWorkerContextWrapper::ShutdownOnIO() {
diff --git a/content/browser/service_worker/service_worker_context_wrapper.h b/content/browser/service_worker/service_worker_context_wrapper.h index ea9b7b3..a41d245 100644 --- a/content/browser/service_worker/service_worker_context_wrapper.h +++ b/content/browser/service_worker/service_worker_context_wrapper.h
@@ -34,11 +34,9 @@ namespace content { class BrowserContext; -class ChromeBlobStorageContext; class ResourceContext; class ServiceWorkerContextObserver; class StoragePartitionImpl; -class URLLoaderFactoryGetter; // A refcounted wrapper class for our core object. Higher level content lib // classes keep references to this class on mutliple threads. The inner core @@ -63,13 +61,9 @@ // Init and Shutdown are for use on the UI thread when the profile, // storagepartition is being setup and torn down. - // |blob_context| and |url_loader_factory_getter| are used only - // when IsServicificationEnabled is true. void Init(const base::FilePath& user_data_directory, storage::QuotaManagerProxy* quota_manager_proxy, - storage::SpecialStoragePolicy* special_storage_policy, - ChromeBlobStorageContext* blob_context, - URLLoaderFactoryGetter* url_loader_factory_getter); + storage::SpecialStoragePolicy* special_storage_policy); void Shutdown(); // Must be called on the IO thread. @@ -271,9 +265,7 @@ std::unique_ptr<ServiceWorkerDatabaseTaskManager> database_task_manager, const scoped_refptr<base::SingleThreadTaskRunner>& disk_cache_thread, storage::QuotaManagerProxy* quota_manager_proxy, - storage::SpecialStoragePolicy* special_storage_policy, - ChromeBlobStorageContext* blob_context, - URLLoaderFactoryGetter* url_loader_factory_getter); + storage::SpecialStoragePolicy* special_storage_policy); void ShutdownOnIO(); void DidFindRegistrationForFindReady(
diff --git a/content/browser/service_worker/service_worker_dispatcher_host.h b/content/browser/service_worker/service_worker_dispatcher_host.h index 32029b3..2d6be54 100644 --- a/content/browser/service_worker/service_worker_dispatcher_host.h +++ b/content/browser/service_worker/service_worker_dispatcher_host.h
@@ -55,8 +55,6 @@ int render_process_id, ResourceContext* resource_context); - // |blob_storage_context| and |loader_factory_getter| are used only - // if IsServicificationEnabled is true. void Init(ServiceWorkerContextWrapper* context_wrapper); // BrowserMessageFilter implementation
diff --git a/content/browser/service_worker/service_worker_provider_host.cc b/content/browser/service_worker/service_worker_provider_host.cc index 0f5c67b..5de525ed 100644 --- a/content/browser/service_worker/service_worker_provider_host.cc +++ b/content/browser/service_worker/service_worker_provider_host.cc
@@ -19,7 +19,6 @@ #include "content/browser/service_worker/service_worker_handle.h" #include "content/browser/service_worker/service_worker_registration_handle.h" #include "content/browser/service_worker/service_worker_version.h" -#include "content/browser/url_loader_factory_getter.h" #include "content/common/resource_request_body_impl.h" #include "content/common/service_worker/service_worker_messages.h" #include "content/common/service_worker/service_worker_types.h" @@ -32,7 +31,6 @@ #include "content/public/common/origin_util.h" #include "mojo/public/cpp/bindings/strong_associated_binding.h" #include "net/base/url_util.h" -#include "storage/browser/blob/blob_storage_context.h" namespace content { @@ -100,210 +98,6 @@ context->RemoveProviderHost(process_id, provider_id); } -// Used by a Service Worker for script loading only during the installation -// time. For now this is just a proxy loader for the network loader. -// Eventually this should replace the existing URLRequestJob-based request -// interception for script loading, namely ServiceWorkerWriteToCacheJob. -// TODO(kinuko): Implement this. -class ScriptURLLoader : public mojom::URLLoader, public mojom::URLLoaderClient { - public: - ScriptURLLoader( - int32_t routing_id, - int32_t request_id, - uint32_t options, - const ResourceRequest& resource_request, - mojom::URLLoaderClientPtr client, - base::WeakPtr<ServiceWorkerContextCore> context, - base::WeakPtr<ServiceWorkerProviderHost> provider_host, - base::WeakPtr<storage::BlobStorageContext> blob_storage_context, - scoped_refptr<URLLoaderFactoryGetter> loader_factory_getter, - const net::MutableNetworkTrafficAnnotationTag& traffic_annotation) - : network_client_binding_(this), - forwarding_client_(std::move(client)), - provider_host_(provider_host) { - mojom::URLLoaderClientPtr network_client; - network_client_binding_.Bind(mojo::MakeRequest(&network_client)); - loader_factory_getter->GetNetworkFactory()->get()->CreateLoaderAndStart( - mojo::MakeRequest(&network_loader_), routing_id, request_id, options, - resource_request, std::move(network_client), traffic_annotation); - } - ~ScriptURLLoader() override {} - - // mojom::URLLoader: - void FollowRedirect() override { network_loader_->FollowRedirect(); } - void SetPriority(net::RequestPriority priority, - int32_t intra_priority_value) override { - network_loader_->SetPriority(priority, intra_priority_value); - } - - // mojom::URLLoaderClient for simply proxying network: - void OnReceiveResponse( - const ResourceResponseHead& response_head, - const base::Optional<net::SSLInfo>& ssl_info, - mojom::DownloadedTempFilePtr downloaded_file) override { - if (provider_host_) { - // We don't have complete info here, but fill in what we have now. - // At least we need headers and SSL info. - net::HttpResponseInfo response_info; - response_info.headers = response_head.headers; - if (ssl_info.has_value()) - response_info.ssl_info = *ssl_info; - response_info.was_fetched_via_spdy = response_head.was_fetched_via_spdy; - response_info.was_alpn_negotiated = response_head.was_alpn_negotiated; - response_info.alpn_negotiated_protocol = - response_head.alpn_negotiated_protocol; - response_info.connection_info = response_head.connection_info; - response_info.socket_address = response_head.socket_address; - - DCHECK(provider_host_->IsHostToRunningServiceWorker()); - provider_host_->running_hosted_version()->SetMainScriptHttpResponseInfo( - response_info); - } - forwarding_client_->OnReceiveResponse(response_head, ssl_info, - std::move(downloaded_file)); - } - void OnReceiveRedirect(const net::RedirectInfo& redirect_info, - const ResourceResponseHead& response_head) override { - forwarding_client_->OnReceiveRedirect(redirect_info, response_head); - } - void OnDataDownloaded(int64_t data_len, int64_t encoded_data_len) override { - forwarding_client_->OnDataDownloaded(data_len, encoded_data_len); - } - void OnUploadProgress(int64_t current_position, - int64_t total_size, - OnUploadProgressCallback ack_callback) override { - forwarding_client_->OnUploadProgress(current_position, total_size, - std::move(ack_callback)); - } - void OnReceiveCachedMetadata(const std::vector<uint8_t>& data) override { - forwarding_client_->OnReceiveCachedMetadata(data); - } - void OnTransferSizeUpdated(int32_t transfer_size_diff) override { - forwarding_client_->OnTransferSizeUpdated(transfer_size_diff); - } - void OnStartLoadingResponseBody( - mojo::ScopedDataPipeConsumerHandle body) override { - forwarding_client_->OnStartLoadingResponseBody(std::move(body)); - } - void OnComplete(const ResourceRequestCompletionStatus& status) override { - forwarding_client_->OnComplete(status); - } - - private: - mojom::URLLoaderAssociatedPtr network_loader_; - mojo::Binding<mojom::URLLoaderClient> network_client_binding_; - mojom::URLLoaderClientPtr forwarding_client_; - base::WeakPtr<ServiceWorkerProviderHost> provider_host_; - - DISALLOW_COPY_AND_ASSIGN(ScriptURLLoader); -}; - -// Created per one controller worker for script loading (only during -// installation, eventually). This is kept alive while -// ServiceWorkerNetworkProvider in the renderer process is alive. -// Used only when IsServicificationEnabled is true. -class ScriptURLLoaderFactory : public mojom::URLLoaderFactory { - public: - ScriptURLLoaderFactory( - base::WeakPtr<ServiceWorkerContextCore> context, - base::WeakPtr<ServiceWorkerProviderHost> provider_host, - base::WeakPtr<storage::BlobStorageContext> blob_storage_context, - scoped_refptr<URLLoaderFactoryGetter> loader_factory_getter) - : context_(context), - provider_host_(provider_host), - blob_storage_context_(blob_storage_context), - loader_factory_getter_(loader_factory_getter) {} - ~ScriptURLLoaderFactory() override {} - - // mojom::URLLoaderFactory: - void CreateLoaderAndStart(mojom::URLLoaderAssociatedRequest request, - int32_t routing_id, - int32_t request_id, - uint32_t options, - const ResourceRequest& resource_request, - mojom::URLLoaderClientPtr client, - const net::MutableNetworkTrafficAnnotationTag& - traffic_annotation) override { - if (!ShouldHandleScriptRequest(resource_request)) { - // If the request should not be handled by ScriptURLLoader, just - // fallback to the network. - // TODO(kinuko): Record the reason like what we do with netlog in - // ServiceWorkerContextRequestHandler. - loader_factory_getter_->GetNetworkFactory()->get()->CreateLoaderAndStart( - std::move(request), routing_id, request_id, options, resource_request, - std::move(client), traffic_annotation); - return; - } - mojo::MakeStrongAssociatedBinding( - base::MakeUnique<ScriptURLLoader>( - routing_id, request_id, options, resource_request, - std::move(client), context_, provider_host_, blob_storage_context_, - loader_factory_getter_, traffic_annotation), - std::move(request)); - } - - void SyncLoad(int32_t routing_id, - int32_t request_id, - const ResourceRequest& request, - SyncLoadCallback callback) override { - NOTREACHED(); - } - - private: - bool ShouldHandleScriptRequest(const ResourceRequest& resource_request) { - if (!context_ || !provider_host_) - return false; - - // We only use the script cache for main script loading and - // importScripts(), even if a cached script is xhr'd, we don't - // retrieve it from the script cache. - if (resource_request.resource_type != RESOURCE_TYPE_SERVICE_WORKER && - resource_request.resource_type != RESOURCE_TYPE_SCRIPT) { - // TODO: Record bad message, we shouldn't come here for other - // request types. - return false; - } - - scoped_refptr<ServiceWorkerVersion> version = - provider_host_->running_hosted_version(); - - // This could happen if browser-side has set the status to redundant but - // the worker has not yet stopped. The worker is already doomed so just - // reject the request. Handle it specially here because otherwise it'd be - // unclear whether "REDUNDANT" should count as installed or not installed - // when making decisions about how to handle the request and logging UMA. - if (!version || version->status() == ServiceWorkerVersion::REDUNDANT) - return false; - - // TODO: Make sure we don't handle the redirected request. - - // For installed worker we fallback to the network for now. - // TODO: Make sure we don't come here for installed worker once - // script streaming is enabled. - if (ServiceWorkerVersion::IsInstalled(version->status())) - return false; - - // TODO: Make sure we come here only for new / unknown scripts - // once script streaming manager in the renderer side stops sending - // resource requests for the known script URLs, i.e. add DCHECK for - // version->script_cache_map()->LookupResourceId(url) == - // kInvalidServiceWorkerResourceId. - // - // Currently this could be false for the installing worker that imports - // the same script twice (e.g. importScripts('dupe.js'); - // importScripts('dupe.js');). - - // Request should be served by ScriptURLLoader. - return true; - } - - base::WeakPtr<ServiceWorkerContextCore> context_; - base::WeakPtr<ServiceWorkerProviderHost> provider_host_; - base::WeakPtr<storage::BlobStorageContext> blob_storage_context_; - scoped_refptr<URLLoaderFactoryGetter> loader_factory_getter_; - DISALLOW_COPY_AND_ASSIGN(ScriptURLLoaderFactory); -}; - } // anonymous namespace ServiceWorkerProviderHost::OneShotGetReadyCallback::OneShotGetReadyCallback( @@ -785,7 +579,6 @@ std::unique_ptr<ServiceWorkerProviderHost> ServiceWorkerProviderHost::PrepareForCrossSiteTransfer() { DCHECK(!IsBrowserSideNavigationEnabled()); - DCHECK(!ServiceWorkerUtils::IsServicificationEnabled()); DCHECK_NE(ChildProcessHost::kInvalidUniqueID, render_process_id_); DCHECK_NE(MSG_ROUTING_NONE, info_.route_id); DCHECK_EQ(kDocumentMainThreadId, render_thread_id_); @@ -819,7 +612,6 @@ void ServiceWorkerProviderHost::CompleteCrossSiteTransfer( ServiceWorkerProviderHost* provisional_host) { DCHECK(!IsBrowserSideNavigationEnabled()); - DCHECK(!ServiceWorkerUtils::IsServicificationEnabled()); DCHECK_EQ(ChildProcessHost::kInvalidUniqueID, render_process_id_); DCHECK_NE(ChildProcessHost::kInvalidUniqueID, provisional_host->process_id()); DCHECK_NE(MSG_ROUTING_NONE, provisional_host->frame_id()); @@ -917,18 +709,6 @@ provider_info->attributes = std::move(attrs); provider_info->registration = std::move(info); provider_info->client_request = mojo::MakeRequest(&provider_); - - mojom::URLLoaderFactoryAssociatedPtrInfo loader_factory_ptr_info; - if (ServiceWorkerUtils::IsServicificationEnabled()) { - mojo::MakeStrongAssociatedBinding( - base::MakeUnique<ScriptURLLoaderFactory>( - context_, AsWeakPtr(), context_->blob_storage_context(), - context_->loader_factory_getter()), - mojo::MakeRequest(&loader_factory_ptr_info)); - provider_info->script_loader_factory_ptr_info = - std::move(loader_factory_ptr_info); - } - binding_.Bind(mojo::MakeRequest(&provider_info->host_ptr_info)); binding_.set_connection_error_handler( base::Bind(&RemoveProviderHost, context_, process_id, provider_id()));
diff --git a/content/browser/service_worker/service_worker_provider_host.h b/content/browser/service_worker/service_worker_provider_host.h index 27844dd..b5de3f2 100644 --- a/content/browser/service_worker/service_worker_provider_host.h +++ b/content/browser/service_worker/service_worker_provider_host.h
@@ -30,7 +30,6 @@ #include "content/public/common/request_context_type.h" #include "content/public/common/resource_type.h" #include "mojo/public/cpp/bindings/associated_binding.h" -#include "mojo/public/cpp/bindings/strong_associated_binding_set.h" namespace storage { class BlobStorageContext;
diff --git a/content/browser/service_worker/service_worker_url_loader_job.cc b/content/browser/service_worker/service_worker_url_loader_job.cc index efa00756..70e925b9 100644 --- a/content/browser/service_worker/service_worker_url_loader_job.cc +++ b/content/browser/service_worker/service_worker_url_loader_job.cc
@@ -182,7 +182,9 @@ void ServiceWorkerURLLoaderJob::CommitResponseHeaders() { DCHECK_EQ(Status::kStarted, status_); status_ = Status::kSentHeader; - url_loader_client_->OnReceiveResponse(response_head_, ssl_info_, nullptr); + url_loader_client_->OnReceiveResponse( + response_head_, base::nullopt /* TODO(scottmg): ssl info */, + mojom::DownloadedTempFilePtr()); } void ServiceWorkerURLLoaderJob::CommitCompleted(int error_code) { @@ -245,15 +247,6 @@ return; } - // Creates a new HttpResponseInfo using the the ServiceWorker script's - // HttpResponseInfo to show HTTPS padlock. - // TODO(horo): When we support mixed-content (HTTP) no-cors requests from a - // ServiceWorker, we have to check the security level of the responses. - const net::HttpResponseInfo* main_script_http_info = - version->GetMainScriptHttpResponseInfo(); - DCHECK(main_script_http_info); - ssl_info_ = main_script_http_info->ssl_info; - std::move(loader_callback_) .Run(base::Bind(&ServiceWorkerURLLoaderJob::StartResponse, weak_factory_.GetWeakPtr(), response,
diff --git a/content/browser/service_worker/service_worker_url_loader_job.h b/content/browser/service_worker/service_worker_url_loader_job.h index c876820..df84f4e2 100644 --- a/content/browser/service_worker/service_worker_url_loader_job.h +++ b/content/browser/service_worker/service_worker_url_loader_job.h
@@ -156,7 +156,6 @@ bool did_navigation_preload_ = false; ResourceResponseHead response_head_; - base::Optional<net::SSLInfo> ssl_info_; // URLLoaderClient binding for loading a blob. mojo::Binding<mojom::URLLoaderClient> blob_client_binding_;
diff --git a/content/browser/service_worker/service_worker_version.cc b/content/browser/service_worker/service_worker_version.cc index 8767d26..c7fac32 100644 --- a/content/browser/service_worker/service_worker_version.cc +++ b/content/browser/service_worker/service_worker_version.cc
@@ -135,6 +135,21 @@ *time = base::TimeTicks(); } +bool IsInstalled(ServiceWorkerVersion::Status status) { + switch (status) { + case ServiceWorkerVersion::NEW: + case ServiceWorkerVersion::INSTALLING: + case ServiceWorkerVersion::REDUNDANT: + return false; + case ServiceWorkerVersion::INSTALLED: + case ServiceWorkerVersion::ACTIVATING: + case ServiceWorkerVersion::ACTIVATED: + return true; + } + NOTREACHED() << "Unexpected status: " << status; + return false; +} + std::string VersionStatusToString(ServiceWorkerVersion::Status status) { switch (status) { case ServiceWorkerVersion::NEW: @@ -899,7 +914,14 @@ } void ServiceWorkerVersion::OnScriptLoaded() { - DCHECK(GetMainScriptHttpResponseInfo()); + DCHECK(GetMainScriptHttpResponseInfo() || + // TODO(scottmg|falken): This DCHECK is currently triggered in + // --network-service because ServiceWorkerReadFromCacheJob isn't being + // used to retrieve the service worker js. This should be removed once + // that's done. + (IsBrowserSideNavigationEnabled() && + base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kEnableNetworkService))); if (IsInstalled(status())) UMA_HISTOGRAM_BOOLEAN("ServiceWorker.ScriptLoadSuccess", true); } @@ -1061,21 +1083,6 @@ provider_host_by_uuid.second->CountFeature(feature); } -bool ServiceWorkerVersion::IsInstalled(ServiceWorkerVersion::Status status) { - switch (status) { - case ServiceWorkerVersion::NEW: - case ServiceWorkerVersion::INSTALLING: - case ServiceWorkerVersion::REDUNDANT: - return false; - case ServiceWorkerVersion::INSTALLED: - case ServiceWorkerVersion::ACTIVATING: - case ServiceWorkerVersion::ACTIVATED: - return true; - } - NOTREACHED() << "Unexpected status: " << status; - return false; -} - void ServiceWorkerVersion::OnOpenNewTab(int request_id, const GURL& url) { OnOpenWindow(request_id, url, WindowOpenDisposition::NEW_FOREGROUND_TAB); }
diff --git a/content/browser/service_worker/service_worker_version.h b/content/browser/service_worker/service_worker_version.h index 9e03f59..5ed49bf 100644 --- a/content/browser/service_worker/service_worker_version.h +++ b/content/browser/service_worker/service_worker_version.h
@@ -403,8 +403,6 @@ } const std::set<uint32_t>& used_features() const { return used_features_; } - static bool IsInstalled(ServiceWorkerVersion::Status status); - private: friend class base::RefCounted<ServiceWorkerVersion>; friend class ServiceWorkerReadFromCacheJobTest;
diff --git a/content/browser/storage_partition_impl.cc b/content/browser/storage_partition_impl.cc index 446cce0..3af33049 100644 --- a/content/browser/storage_partition_impl.cc +++ b/content/browser/storage_partition_impl.cc
@@ -496,6 +496,8 @@ partition->cache_storage_context_->Init(path, quota_manager_proxy); partition->service_worker_context_ = new ServiceWorkerContextWrapper(context); + partition->service_worker_context_->Init(path, quota_manager_proxy.get(), + context->GetSpecialStoragePolicy()); partition->service_worker_context_->set_storage_partition(partition.get()); partition->appcache_service_ = @@ -527,9 +529,6 @@ partition->bluetooth_allowed_devices_map_ = new BluetoothAllowedDevicesMap(); - scoped_refptr<ChromeBlobStorageContext> blob_context = - ChromeBlobStorageContext::GetFor(context); - if (base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kEnableNetworkService)) { mojom::NetworkServicePtr network_service; @@ -543,6 +542,8 @@ network_service->CreateNetworkContext( MakeRequest(&partition->network_context_), std::move(context_params)); + scoped_refptr<ChromeBlobStorageContext> blob_context = + ChromeBlobStorageContext::GetFor(context); BlobURLLoaderFactory::BlobContextGetter blob_getter = base::BindOnce(&BlobStorageContextGetter, blob_context); partition->blob_url_loader_factory_ = new BlobURLLoaderFactory( @@ -552,10 +553,6 @@ partition->url_loader_factory_getter_->Initialize(partition.get()); } - partition->service_worker_context_->Init( - path, quota_manager_proxy.get(), context->GetSpecialStoragePolicy(), - blob_context.get(), partition->url_loader_factory_getter_.get()); - return partition; }
diff --git a/content/child/service_worker/service_worker_network_provider.cc b/content/child/service_worker/service_worker_network_provider.cc index e31fb56..19c50777ed 100644 --- a/content/child/service_worker/service_worker_network_provider.cc +++ b/content/child/service_worker/service_worker_network_provider.cc
@@ -216,10 +216,6 @@ std::move(info->client_request), ChildThreadImpl::current()->thread_safe_sender()); - if (info->script_loader_factory_ptr_info.is_valid()) - script_loader_factory_.Bind( - std::move(info->script_loader_factory_ptr_info)); - ServiceWorkerDispatcher* dispatcher = ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance( ChildThreadImpl::current()->thread_safe_sender(),
diff --git a/content/child/service_worker/service_worker_network_provider.h b/content/child/service_worker/service_worker_network_provider.h index bd3fcba..1ca07d96 100644 --- a/content/child/service_worker/service_worker_network_provider.h +++ b/content/child/service_worker/service_worker_network_provider.h
@@ -72,10 +72,6 @@ int provider_id() const { return provider_id_; } ServiceWorkerProviderContext* context() const { return context_.get(); } - mojom::URLLoaderFactory* script_loader_factory() { - return script_loader_factory_.get(); - } - bool IsControlledByServiceWorker() const; private: @@ -83,8 +79,6 @@ scoped_refptr<ServiceWorkerProviderContext> context_; mojom::ServiceWorkerDispatcherHostAssociatedPtr dispatcher_host_; mojom::ServiceWorkerProviderHostAssociatedPtr provider_host_; - mojom::URLLoaderFactoryAssociatedPtr script_loader_factory_; - DISALLOW_COPY_AND_ASSIGN(ServiceWorkerNetworkProvider); };
diff --git a/content/common/service_worker/service_worker_provider.mojom b/content/common/service_worker/service_worker_provider.mojom index f095729..b01b1cf2 100644 --- a/content/common/service_worker/service_worker_provider.mojom +++ b/content/common/service_worker/service_worker_provider.mojom
@@ -6,7 +6,6 @@ import "content/common/service_worker/service_worker_provider_interfaces.mojom"; import "content/common/service_worker/service_worker_types.mojom"; -import "content/common/url_loader_factory.mojom"; // A container object carried from the browser to the renderer process. // This contains the params for the constructor of ServiceWorkerNetworkProvider @@ -20,7 +19,6 @@ associated ServiceWorkerProviderHost host_ptr_info; associated ServiceWorkerProvider& client_request; - associated URLLoaderFactory? script_loader_factory_ptr_info; }; // A container object carried from the renderer to the browser process. @@ -34,4 +32,4 @@ bool is_parent_frame_secure; associated ServiceWorkerProviderHost& host_request; associated ServiceWorkerProvider client_ptr_info; -}; +}; \ No newline at end of file
diff --git a/content/renderer/pepper/pepper_plugin_instance_impl.cc b/content/renderer/pepper/pepper_plugin_instance_impl.cc index 623827f..c2372e0 100644 --- a/content/renderer/pepper/pepper_plugin_instance_impl.cc +++ b/content/renderer/pepper/pepper_plugin_instance_impl.cc
@@ -11,6 +11,7 @@ #include "base/callback_helpers.h" #include "base/location.h" #include "base/logging.h" +#include "base/memory/ptr_util.h" #include "base/metrics/histogram_macros.h" #include "base/single_thread_task_runner.h" #include "base/stl_util.h" @@ -310,7 +311,7 @@ // is not modified. std::unique_ptr<const char* []> StringVectorToArgArray( const std::vector<std::string>& vector) { - std::unique_ptr<const char* []> array(new const char*[vector.size()]); + auto array = base::MakeUnique<const char* []>(vector.size()); for (size_t i = 0; i < vector.size(); ++i) array[i] = vector[i].c_str(); return array; @@ -444,7 +445,7 @@ if (finished_loading_) return; - error_.reset(new WebURLError(error)); + error_ = base::MakeUnique<WebURLError>(error); } PepperPluginInstanceImpl::GamepadImpl::GamepadImpl() @@ -524,7 +525,7 @@ isolate_(v8::Isolate::GetCurrent()), is_deleted_(false), initialized_(false), - audio_controller_(new PepperAudioController(this)), + audio_controller_(base::MakeUnique<PepperAudioController>(this)), view_change_weak_ptr_factory_(this), weak_factory_(this) { pp_instance_ = HostGlobals::Get()->AddInstance(this); @@ -848,6 +849,7 @@ } message_channel_ = MessageChannel::Create(this, &message_channel_object_); + DCHECK(message_channel_); full_frame_ = full_frame; @@ -878,17 +880,11 @@ // // A host for external plugins will call ResetAsProxied later, at which point // we can Start() the MessageChannel. - if (success && (!module_->renderer_ppapi_host()->IsExternalPluginHost())) { - if (message_channel_) - message_channel_->Start(); - } + if (success && !module_->renderer_ppapi_host()->IsExternalPluginHost()) + message_channel_->Start(); - if (success && - render_frame_ && - render_frame_->render_accessibility() && - LoadPdfInterface()) { - plugin_pdf_interface_->EnableAccessibility(pp_instance()); - } + if (success) + AccessibilityModeChanged(); initialized_ = success; return success; @@ -901,7 +897,7 @@ // The external proxy isn't available, so save the response and record // document load notifications for later replay. external_document_response_ = response; - external_document_loader_.reset(new ExternalDocumentLoader()); + external_document_loader_ = base::MakeUnique<ExternalDocumentLoader>(); document_loader_ = external_document_loader_.get(); return true; } @@ -919,19 +915,16 @@ // PPP_Instance.HandleDocumentLoad call below, since this may reentrantly // call into the instance and expect it to be valid. RendererPpapiHostImpl* host_impl = module_->renderer_ppapi_host(); - PepperURLLoaderHost* loader_host = - new PepperURLLoaderHost(host_impl, true, pp_instance(), 0); + auto loader_host = + base::MakeUnique<PepperURLLoaderHost>(host_impl, true, pp_instance(), 0); // TODO(teravest): Remove set_document_loader() from instance and clean up // this relationship. - set_document_loader(loader_host); + set_document_loader(loader_host.get()); loader_host->DidReceiveResponse(response); // This host will be pending until the resource object attaches to it. - // - // PpapiHost now owns the pointer to loader_host, so we don't have to worry - // about managing it. int pending_host_id = host_impl->GetPpapiHost()->AddPendingResourceHost( - std::unique_ptr<ppapi::host::ResourceHost>(loader_host)); + std::unique_ptr<ppapi::host::ResourceHost>(std::move(loader_host))); DCHECK(pending_host_id); DataFromWebURLResponse( @@ -1127,9 +1120,8 @@ result |= HandleInputEvent(event.CoalescedEvent(i), cursor_info); } return result; - } else { - return HandleInputEvent(event.Event(), cursor_info); } + return HandleInputEvent(event.Event(), cursor_info); } bool PepperPluginInstanceImpl::HandleInputEvent( @@ -1998,11 +1990,7 @@ if (fullscreen == IsFullscreenOrPending()) return false; - if (!render_frame_) - return false; - if (fullscreen && !render_frame_->render_view() - ->renderer_preferences() - .plugin_fullscreen_allowed) + if (!SetFullscreenCommon(fullscreen)) return false; // Check whether we are trying to switch while the state is in transition. @@ -2011,9 +1999,6 @@ if (view_data_.is_fullscreen != desired_fullscreen_state_) return false; - if (fullscreen && !IsProcessingUserGesture()) - return false; - DVLOG(1) << "Setting fullscreen to " << (fullscreen ? "on" : "off"); desired_fullscreen_state_ = fullscreen; @@ -2154,8 +2139,7 @@ texture_layer_->SetFlipped(false); } - std::unique_ptr<cc_blink::WebLayerImpl> layer( - new cc_blink::WebLayerImpl(texture_layer_)); + auto layer = base::MakeUnique<cc_blink::WebLayerImpl>(texture_layer_); // Ignore transparency in fullscreen, since that's what Flash always // wants to do, and that lets it not recreate a context if // wmode=transparent was specified. @@ -2165,7 +2149,7 @@ web_layer_ = std::move(layer); } else if (want_compositor_layer) { compositor_layer_ = bound_compositor_->layer(); - web_layer_.reset(new cc_blink::WebLayerImpl(compositor_layer_)); + web_layer_ = base::MakeUnique<cc_blink::WebLayerImpl>(compositor_layer_); } if (web_layer_) { @@ -2231,7 +2215,7 @@ live_plugin_objects_.erase(plugin_object); } -bool PepperPluginInstanceImpl::IsProcessingUserGesture() { +bool PepperPluginInstanceImpl::IsProcessingUserGesture() const { PP_TimeTicks now = ppapi::TimeTicksToPPTimeTicks(base::TimeTicks::Now()); // Give a lot of slack so tests won't be flaky. const PP_TimeTicks kUserGestureDurationInSeconds = 10.0; @@ -2348,10 +2332,10 @@ static_cast<const PPP_ContentDecryptor_Private*>( module_->GetPluginInterface(PPP_CONTENTDECRYPTOR_PRIVATE_INTERFACE)); if (!plugin_decryption_interface) - return NULL; + return nullptr; - content_decryptor_delegate_.reset( - new ContentDecryptorDelegate(pp_instance_, plugin_decryption_interface)); + content_decryptor_delegate_ = base::MakeUnique<ContentDecryptorDelegate>( + pp_instance_, plugin_decryption_interface); return content_decryptor_delegate_.get(); } @@ -2830,7 +2814,8 @@ return PP_FALSE; if (type != PP_MOUSECURSOR_TYPE_CUSTOM) { - DoSetCursor(new WebCursorInfo(static_cast<WebCursorInfo::Type>(type))); + DoSetCursor(base::MakeUnique<WebCursorInfo>( + static_cast<WebCursorInfo::Type>(type))); return PP_TRUE; } @@ -2844,8 +2829,8 @@ if (!auto_mapper.is_valid()) return PP_FALSE; - std::unique_ptr<WebCursorInfo> custom_cursor( - new WebCursorInfo(WebCursorInfo::kTypeCustom)); + auto custom_cursor = + base::MakeUnique<WebCursorInfo>(WebCursorInfo::kTypeCustom); custom_cursor->hot_spot.x = hot_spot->x; custom_cursor->hot_spot.y = hot_spot->y; @@ -2858,7 +2843,7 @@ return PP_FALSE; } - DoSetCursor(custom_cursor.release()); + DoSetCursor(std::move(custom_cursor)); return PP_TRUE; } @@ -3035,7 +3020,7 @@ // For NaCl instances, remember the NaCl plugin instance interface, so we // can shut it down by calling its DidDestroy in our Delete() method. - original_instance_interface_.reset(instance_interface_.release()); + original_instance_interface_ = std::move(instance_interface_); base::Callback<const void*(const char*)> get_plugin_interface_func = base::Bind(&PluginModule::GetPluginInterface, module_); @@ -3085,7 +3070,7 @@ external_document_response_ = blink::WebURLResponse(); // Replay any document load events we've received to the real loader. external_document_loader_->ReplayReceivedData(document_loader_); - external_document_loader_.reset(NULL); + external_document_loader_.reset(); } return PP_EXTERNAL_PLUGIN_OK; @@ -3178,13 +3163,13 @@ always_on_top_ = on_top; } -void PepperPluginInstanceImpl::DoSetCursor(WebCursorInfo* cursor) { - cursor_.reset(cursor); - if (fullscreen_container_) { - fullscreen_container_->PepperDidChangeCursor(*cursor); - } else if (render_frame_) { - render_frame_->PepperDidChangeCursor(this, *cursor); - } +void PepperPluginInstanceImpl::DoSetCursor( + std::unique_ptr<WebCursorInfo> cursor) { + cursor_ = std::move(cursor); + if (fullscreen_container_) + fullscreen_container_->PepperDidChangeCursor(*cursor_); + else if (render_frame_) + render_frame_->PepperDidChangeCursor(this, *cursor_); } bool PepperPluginInstanceImpl::IsFullPagePlugin() { @@ -3209,14 +3194,7 @@ if (fullscreen == FlashIsFullscreenOrPending()) return true; - if (!render_frame_) - return false; - if (fullscreen && !render_frame_->render_view() - ->renderer_preferences() - .plugin_fullscreen_allowed) - return false; - - if (fullscreen && !IsProcessingUserGesture()) + if (!SetFullscreenCommon(fullscreen)) return false; // Unbind current 2D or 3D graphics context. @@ -3380,6 +3358,23 @@ element.SetAttribute(WebString::FromUTF8(kStyle), style_before_fullscreen_); } +bool PepperPluginInstanceImpl::SetFullscreenCommon(bool fullscreen) const { + if (!render_frame_) + return false; + + if (fullscreen) { + if (!render_frame_->render_view() + ->renderer_preferences() + .plugin_fullscreen_allowed) { + return false; + } + + if (!IsProcessingUserGesture()) + return false; + } + return true; +} + bool PepperPluginInstanceImpl::IsMouseLocked() { return GetMouseLockDispatcher()->IsMouseLockedTo( GetOrCreateLockTargetAdapter()); @@ -3391,9 +3386,8 @@ MouseLockDispatcher::LockTarget* PepperPluginInstanceImpl::GetOrCreateLockTargetAdapter() { - if (!lock_target_.get()) { - lock_target_.reset(new PluginInstanceLockTarget(this)); - } + if (!lock_target_) + lock_target_ = base::MakeUnique<PluginInstanceLockTarget>(this); return lock_target_.get(); } @@ -3402,14 +3396,14 @@ RenderWidgetFullscreenPepper* container = static_cast<RenderWidgetFullscreenPepper*>(fullscreen_container_); return container->mouse_lock_dispatcher(); - } else if (render_frame_) { - return render_frame_->render_view()->mouse_lock_dispatcher(); } - return NULL; + if (render_frame_) + return render_frame_->render_view()->mouse_lock_dispatcher(); + return nullptr; } void PepperPluginInstanceImpl::UnSetAndDeleteLockTargetAdapter() { - if (lock_target_.get()) { + if (lock_target_) { GetMouseLockDispatcher()->OnLockTargetDestroyed(lock_target_.get()); lock_target_.reset(); }
diff --git a/content/renderer/pepper/pepper_plugin_instance_impl.h b/content/renderer/pepper/pepper_plugin_instance_impl.h index 6a2b67a..660f3a37 100644 --- a/content/renderer/pepper/pepper_plugin_instance_impl.h +++ b/content/renderer/pepper/pepper_plugin_instance_impl.h
@@ -351,7 +351,7 @@ ppapi::ScopedPPVar* result); // Returns true if the plugin is processing a user gesture. - bool IsProcessingUserGesture(); + bool IsProcessingUserGesture() const; // Returns the user gesture token to use for creating a WebScopedUserGesture, // if IsProcessingUserGesture returned true. @@ -595,6 +595,8 @@ std::list<std::string> data_; bool finished_loading_; std::unique_ptr<blink::WebURLError> error_; + + DISALLOW_COPY_AND_ASSIGN(ExternalDocumentLoader); }; // Implements PPB_Gamepad_API. This is just to avoid having an excessive @@ -672,7 +674,7 @@ int num_ranges, printing::PdfMetafileSkia* metafile); - void DoSetCursor(blink::WebCursorInfo* cursor); + void DoSetCursor(std::unique_ptr<blink::WebCursorInfo> cursor); // Internal helper functions for HandleCompositionXXX(). bool SendCompositionEventToPlugin(PP_InputEvent_Type type, @@ -701,6 +703,9 @@ void SetSizeAttributesForFullscreen(); void ResetSizeAttributesAfterFullscreen(); + // Shared code between SetFullscreen() and FlashSetFullscreen(). + bool SetFullscreenCommon(bool fullscreen) const; + bool IsMouseLocked(); bool LockMouse(); MouseLockDispatcher* GetMouseLockDispatcher();
diff --git a/content/renderer/service_worker/service_worker_context_client.cc b/content/renderer/service_worker/service_worker_context_client.cc index 20489a66..a1e97f3 100644 --- a/content/renderer/service_worker/service_worker_context_client.cc +++ b/content/renderer/service_worker/service_worker_context_client.cc
@@ -75,8 +75,6 @@ #include "third_party/WebKit/public/web/modules/serviceworker/WebServiceWorkerContextClient.h" #include "third_party/WebKit/public/web/modules/serviceworker/WebServiceWorkerContextProxy.h" -using blink::WebURLRequest; - namespace content { namespace { @@ -95,30 +93,19 @@ // Blink calls this method for each request starting with the main script, // we tag them with the provider id. - void WillSendRequest(WebURLRequest& request) override { + void WillSendRequest(blink::WebURLRequest& request) override { std::unique_ptr<RequestExtraData> extra_data(new RequestExtraData); extra_data->set_service_worker_provider_id(provider_->provider_id()); extra_data->set_originated_from_service_worker(true); // Service workers are only available in secure contexts, so all requests // are initiated in a secure context. extra_data->set_initiated_in_secure_context(true); - if (IsScriptRequest(request)) { - extra_data->set_url_loader_factory_override( - provider_->script_loader_factory()); - } request.SetExtraData(extra_data.release()); } int GetProviderID() const override { return provider_->provider_id(); } private: - static bool IsScriptRequest(const WebURLRequest& request) { - auto request_context = request.GetRequestContext(); - return request_context == WebURLRequest::kRequestContextServiceWorker || - request_context == WebURLRequest::kRequestContextScript || - request_context == WebURLRequest::kRequestContextImport; - } - std::unique_ptr<ServiceWorkerNetworkProvider> provider_; }; @@ -150,28 +137,31 @@ return SERVICE_WORKER_ERROR_FAILED; } -WebURLRequest::FetchRequestMode GetBlinkFetchRequestMode( +blink::WebURLRequest::FetchRequestMode GetBlinkFetchRequestMode( FetchRequestMode mode) { - return static_cast<WebURLRequest::FetchRequestMode>(mode); + return static_cast<blink::WebURLRequest::FetchRequestMode>(mode); } -WebURLRequest::FetchCredentialsMode GetBlinkFetchCredentialsMode( +blink::WebURLRequest::FetchCredentialsMode GetBlinkFetchCredentialsMode( FetchCredentialsMode credentials_mode) { - return static_cast<WebURLRequest::FetchCredentialsMode>(credentials_mode); + return static_cast<blink::WebURLRequest::FetchCredentialsMode>( + credentials_mode); } -WebURLRequest::FetchRedirectMode GetBlinkFetchRedirectMode( +blink::WebURLRequest::FetchRedirectMode GetBlinkFetchRedirectMode( FetchRedirectMode redirect_mode) { - return static_cast<WebURLRequest::FetchRedirectMode>(redirect_mode); + return static_cast<blink::WebURLRequest::FetchRedirectMode>(redirect_mode); } -WebURLRequest::RequestContext GetBlinkRequestContext( +blink::WebURLRequest::RequestContext GetBlinkRequestContext( RequestContextType request_context_type) { - return static_cast<WebURLRequest::RequestContext>(request_context_type); + return static_cast<blink::WebURLRequest::RequestContext>( + request_context_type); } -WebURLRequest::FrameType GetBlinkFrameType(RequestContextFrameType frame_type) { - return static_cast<WebURLRequest::FrameType>(frame_type); +blink::WebURLRequest::FrameType GetBlinkFrameType( + RequestContextFrameType frame_type) { + return static_cast<blink::WebURLRequest::FrameType>(frame_type); } blink::WebServiceWorkerClientInfo
diff --git a/content/test/gpu/gpu_tests/pixel_expectations.py b/content/test/gpu/gpu_tests/pixel_expectations.py index 21f3d08a..39781d9 100644 --- a/content/test/gpu/gpu_tests/pixel_expectations.py +++ b/content/test/gpu/gpu_tests/pixel_expectations.py
@@ -34,6 +34,7 @@ # TODO(ccameron): These changed when forcing the display to sRGB, and will # need rebaseline. self.Fail('Pixel_Video_VP9', bug=734255) + self.Fail('Pixel_Video_MP4', bug=734255) self.Fail('Pixel_DirectComposition_Video_VP9', bug=734255) # TODO(vmiura) check / generate reference images for Android devices
diff --git a/content/test/gpu/gpu_tests/pixel_test_pages.py b/content/test/gpu/gpu_tests/pixel_test_pages.py index 200876a..10dde26 100644 --- a/content/test/gpu/gpu_tests/pixel_test_pages.py +++ b/content/test/gpu/gpu_tests/pixel_test_pages.py
@@ -141,7 +141,7 @@ 'pixel_video_mp4.html', base_name + '_Video_MP4', test_rect=[0, 0, 300, 300], - revision=3), + revision=4), PixelTestPage( 'pixel_video_vp9.html',
diff --git a/extensions/browser/api/declarative_webrequest/webrequest_condition_attribute.cc b/extensions/browser/api/declarative_webrequest/webrequest_condition_attribute.cc index 626c2433..95263dc 100644 --- a/extensions/browser/api/declarative_webrequest/webrequest_condition_attribute.cc +++ b/extensions/browser/api/declarative_webrequest/webrequest_condition_attribute.cc
@@ -6,7 +6,6 @@ #include <stddef.h> -#include <algorithm> #include <utility> #include <vector> @@ -14,6 +13,7 @@ #include "base/logging.h" #include "base/macros.h" #include "base/memory/ptr_util.h" +#include "base/stl_util.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/values.h" @@ -182,7 +182,7 @@ if (!(request_data.stage & GetStages())) return false; const auto resource_type = GetWebRequestResourceType(request_data.request); - return std::find(types_.begin(), types_.end(), resource_type) != types_.end(); + return base::ContainsValue(types_, resource_type); } WebRequestConditionAttribute::Type @@ -266,11 +266,9 @@ content_type, &mime_type, &charset, &had_charset, NULL); if (inclusive_) { - return std::find(content_types_.begin(), content_types_.end(), - mime_type) != content_types_.end(); + return base::ContainsValue(content_types_, mime_type); } else { - return std::find(content_types_.begin(), content_types_.end(), - mime_type) == content_types_.end(); + return !base::ContainsValue(content_types_, mime_type); } }
diff --git a/extensions/browser/api/document_scan/document_scan_api.cc b/extensions/browser/api/document_scan/document_scan_api.cc index a89dbb7..317199f 100644 --- a/extensions/browser/api/document_scan/document_scan_api.cc +++ b/extensions/browser/api/document_scan/document_scan_api.cc
@@ -4,8 +4,7 @@ #include "extensions/browser/api/document_scan/document_scan_api.h" -#include <algorithm> - +#include "base/stl_util.h" #include "content/public/browser/browser_thread.h" #include "extensions/browser/extension_system.h" @@ -67,8 +66,7 @@ if (params_->options.mime_types) { std::vector<std::string>& mime_types = *params_->options.mime_types; for (; scanner_i != scanner_descriptions.end(); ++scanner_i) { - if (std::find(mime_types.begin(), mime_types.end(), - scanner_i->image_mime_type) != mime_types.end()) { + if (base::ContainsValue(mime_types, scanner_i->image_mime_type)) { break; } }
diff --git a/extensions/browser/api/management/management_api.cc b/extensions/browser/api/management/management_api.cc index c9bf619..57cbbd3 100644 --- a/extensions/browser/api/management/management_api.cc +++ b/extensions/browser/api/management/management_api.cc
@@ -17,6 +17,7 @@ #include "base/memory/ptr_util.h" #include "base/metrics/histogram.h" #include "base/single_thread_task_runner.h" +#include "base/stl_util.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" @@ -706,8 +707,7 @@ GetAvailableLaunchTypes(*extension, delegate); management::LaunchType app_launch_type = params->launch_type; - if (std::find(available_launch_types.begin(), available_launch_types.end(), - app_launch_type) == available_launch_types.end()) { + if (!base::ContainsValue(available_launch_types, app_launch_type)) { return RespondNow(Error(keys::kLaunchTypeNotAvailableError)); }
diff --git a/extensions/browser/api/socket/udp_socket.cc b/extensions/browser/api/socket/udp_socket.cc index 90aefe7..d4100af 100644 --- a/extensions/browser/api/socket/udp_socket.cc +++ b/extensions/browser/api/socket/udp_socket.cc
@@ -8,6 +8,7 @@ #include "base/callback_helpers.h" #include "base/lazy_instance.h" +#include "base/stl_util.h" #include "extensions/browser/api/api_resource.h" #include "net/base/ip_address.h" #include "net/base/ip_endpoint.h" @@ -260,9 +261,7 @@ return net::ERR_ADDRESS_INVALID; std::string normalized_address = ip.ToString(); - std::vector<std::string>::iterator find_result = std::find( - multicast_groups_.begin(), multicast_groups_.end(), normalized_address); - if (find_result != multicast_groups_.end()) + if (base::ContainsValue(multicast_groups_, normalized_address)) return net::ERR_ADDRESS_INVALID; int rv = socket_.JoinGroup(ip);
diff --git a/extensions/browser/api/web_request/web_request_api.cc b/extensions/browser/api/web_request/web_request_api.cc index 400b02f..d898c33 100644 --- a/extensions/browser/api/web_request/web_request_api.cc +++ b/extensions/browser/api/web_request/web_request_api.cc
@@ -19,6 +19,7 @@ #include "base/memory/ptr_util.h" #include "base/metrics/histogram_macros.h" #include "base/metrics/user_metrics.h" +#include "base/stl_util.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" @@ -1488,8 +1489,7 @@ } const std::vector<WebRequestResourceType>& types = listener->filter.types; - if (!types.empty() && - std::find(types.begin(), types.end(), resource_type) == types.end()) { + if (!types.empty() && !base::ContainsValue(types, resource_type)) { continue; }
diff --git a/extensions/browser/app_window/app_window_registry.cc b/extensions/browser/app_window/app_window_registry.cc index bd259b0b..1eb972f 100644 --- a/extensions/browser/app_window/app_window_registry.cc +++ b/extensions/browser/app_window/app_window_registry.cc
@@ -7,6 +7,7 @@ #include <string> #include <vector> +#include "base/stl_util.h" #include "base/strings/stringprintf.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" #include "content/public/browser/browser_context.h" @@ -188,9 +189,7 @@ } void AppWindowRegistry::AddAppWindowToList(AppWindow* app_window) { - const AppWindowList::iterator it = - std::find(app_windows_.begin(), app_windows_.end(), app_window); - if (it != app_windows_.end()) + if (base::ContainsValue(app_windows_, app_window)) return; app_windows_.push_back(app_window); }
diff --git a/extensions/common/extension_l10n_util.cc b/extensions/common/extension_l10n_util.cc index ac0ac641..1255725 100644 --- a/extensions/common/extension_l10n_util.cc +++ b/extensions/common/extension_l10n_util.cc
@@ -6,7 +6,6 @@ #include <stddef.h> -#include <algorithm> #include <set> #include <string> #include <vector> @@ -16,6 +15,7 @@ #include "base/json/json_file_value_serializer.h" #include "base/logging.h" #include "base/memory/ptr_util.h" +#include "base/stl_util.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" @@ -444,7 +444,7 @@ if (subdir.empty()) return true; // Non-ASCII. - if (std::find(subdir.begin(), subdir.end(), '.') != subdir.end()) + if (base::ContainsValue(subdir, '.')) return true; if (all_locales.find(subdir) == all_locales.end())
diff --git a/extensions/common/permissions/permissions_data.cc b/extensions/common/permissions/permissions_data.cc index 96e8269..835e278 100644 --- a/extensions/common/permissions/permissions_data.cc +++ b/extensions/common/permissions/permissions_data.cc
@@ -4,12 +4,12 @@ #include "extensions/common/permissions/permissions_data.h" -#include <algorithm> #include <utility> #include "base/command_line.h" #include "base/lazy_instance.h" #include "base/macros.h" +#include "base/stl_util.h" #include "content/public/common/url_constants.h" #include "extensions/common/constants.h" #include "extensions/common/error_utils.h" @@ -84,8 +84,7 @@ const ExtensionsClient::ScriptingWhitelist& whitelist = ExtensionsClient::Get()->GetScriptingWhitelist(); - return std::find(whitelist.begin(), whitelist.end(), extension->id()) != - whitelist.end(); + return base::ContainsValue(whitelist, extension->id()); } // static
diff --git a/extensions/common/url_pattern_set_unittest.cc b/extensions/common/url_pattern_set_unittest.cc index bbb72aa7..86e4a4d 100644 --- a/extensions/common/url_pattern_set_unittest.cc +++ b/extensions/common/url_pattern_set_unittest.cc
@@ -8,6 +8,7 @@ #include <sstream> +#include "base/stl_util.h" #include "base/values.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" @@ -467,13 +468,8 @@ EXPECT_EQ(2UL, string_vector->size()); - const auto begin = string_vector->begin(); - const auto end = string_vector->end(); - - auto it = std::find(begin, end, "https://google.com/"); - EXPECT_NE(it, end); - it = std::find(begin, end, "https://yahoo.com/"); - EXPECT_NE(it, end); + EXPECT_TRUE(base::ContainsValue(*string_vector, "https://google.com/")); + EXPECT_TRUE(base::ContainsValue(*string_vector, "https://yahoo.com/")); } } // namespace extensions
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index cd880c9..a9f9b685 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -7525,11 +7525,10 @@ void GLES2DecoderImpl::DoFramebufferRenderbuffer( GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint client_renderbuffer_id) { + const char* func_name = "glFramebufferRenderbuffer"; Framebuffer* framebuffer = GetFramebufferInfoForTarget(target); if (!framebuffer) { - LOCAL_SET_GL_ERROR( - GL_INVALID_OPERATION, - "glFramebufferRenderbuffer", "no framebuffer bound"); + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, func_name, "no framebuffer bound"); return; } GLuint service_id = 0; @@ -7537,9 +7536,13 @@ if (client_renderbuffer_id) { renderbuffer = GetRenderbuffer(client_renderbuffer_id); if (!renderbuffer) { - LOCAL_SET_GL_ERROR( - GL_INVALID_OPERATION, - "glFramebufferRenderbuffer", "unknown renderbuffer"); + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, func_name, + "unknown renderbuffer"); + return; + } + if (!renderbuffer->IsValid()) { + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, func_name, + "renderbuffer never bound or deleted"); return; } service_id = renderbuffer->service_id(); @@ -7551,11 +7554,11 @@ } else { attachments.push_back(attachment); } - LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glFramebufferRenderbuffer"); + LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER(func_name); for (GLenum attachment_point : attachments) { glFramebufferRenderbufferEXT( target, attachment_point, renderbuffertarget, service_id); - GLenum error = LOCAL_PEEK_GL_ERROR("glFramebufferRenderbuffer"); + GLenum error = LOCAL_PEEK_GL_ERROR(func_name); if (error == GL_NO_ERROR) { framebuffer->AttachRenderbuffer(attachment_point, renderbuffer); }
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc index 7a0d658..0cbd66e 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc
@@ -133,6 +133,8 @@ bool valid) { DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId); + DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_, + kServiceRenderbufferId); if (valid) { EXPECT_CALL(*gl_, GetError()) .WillOnce(Return(GL_NO_ERROR))
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc index 03a1d02..b07b2c0 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc
@@ -355,6 +355,8 @@ TEST_P(GLES2DecoderTest, GetFramebufferAttachmentParameterivWithRenderbuffer) { DoBindFramebuffer( GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId); + DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_, + kServiceRenderbufferId); EXPECT_CALL(*gl_, GetError()) .WillRepeatedly(Return(GL_NO_ERROR)); EXPECT_CALL(*gl_, @@ -1489,6 +1491,8 @@ TEST_P(GLES2DecoderTest, FramebufferRenderbufferClearColor) { DoBindFramebuffer( GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId); + DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_, + kServiceRenderbufferId); ClearColor color_cmd; ColorMask color_mask_cmd; Enable enable_cmd; @@ -1527,6 +1531,8 @@ TEST_P(GLES2DecoderTest, FramebufferRenderbufferClearDepth) { DoBindFramebuffer( GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId); + DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_, + kServiceRenderbufferId); ClearDepthf depth_cmd; DepthMask depth_mask_cmd; FramebufferRenderbuffer cmd; @@ -1559,6 +1565,8 @@ TEST_P(GLES2DecoderTest, FramebufferRenderbufferClearStencil) { DoBindFramebuffer( GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId); + DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_, + kServiceRenderbufferId); ClearStencil stencil_cmd; StencilMaskSeparate stencil_mask_separate_cmd; FramebufferRenderbuffer cmd; @@ -1591,6 +1599,8 @@ TEST_P(GLES3DecoderTest, FramebufferRenderbufferClearDepthStencil) { DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId); + DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_, + kServiceRenderbufferId); ClearDepthf depth_cmd; ClearStencil stencil_cmd; FramebufferRenderbuffer cmd; @@ -2008,6 +2018,14 @@ TEST_P(GLES2DecoderTest, FramebufferRenderbufferGLError) { DoBindFramebuffer( GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId); + FramebufferRenderbuffer cmd; + cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, + client_renderbuffer_id_); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); + + DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_, + kServiceRenderbufferId); EXPECT_CALL(*gl_, GetError()) .WillOnce(Return(GL_NO_ERROR)) .WillOnce(Return(GL_OUT_OF_MEMORY)) @@ -2019,11 +2037,6 @@ kServiceRenderbufferId)) .Times(1) .RetiresOnSaturation(); - FramebufferRenderbuffer cmd; - cmd.Init(GL_FRAMEBUFFER, - GL_COLOR_ATTACHMENT0, - GL_RENDERBUFFER, - client_renderbuffer_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); }
diff --git a/ios/chrome/browser/content_suggestions/content_suggestions_coordinator.mm b/ios/chrome/browser/content_suggestions/content_suggestions_coordinator.mm index 8d87baa4..49ac9b68 100644 --- a/ios/chrome/browser/content_suggestions/content_suggestions_coordinator.mm +++ b/ios/chrome/browser/content_suggestions/content_suggestions_coordinator.mm
@@ -374,6 +374,28 @@ NOTREACHED(); } +- (void)updateFakeOmniboxForScrollView:(UIScrollView*)scrollView { + [self.delegate updateNtpBarShadowForPanelController:self]; + + // Unfocus the omnibox when the scroll view is scrolled below the pinned + // offset. + CGFloat pinnedOffsetY = [self pinnedOffsetY]; + if (self.headerController.omniboxFocused && scrollView.dragging && + scrollView.contentOffset.y < pinnedOffsetY) { + [self.dispatcher cancelOmniboxEdit]; + } + + if (IsIPadIdiom()) { + return; + } + + if (self.animateHeader) { + [self.headerController + updateSearchFieldForOffset:self.suggestionsViewController.collectionView + .contentOffset.y]; + } +} + #pragma mark - NewTabPagePanelProtocol - (CGFloat)alphaForBottomShadow { @@ -468,4 +490,18 @@ [MDCSnackbarManager showMessage:message]; } +// Returns the Y value to use for the scroll view's contentOffset when scrolling +// the omnibox to the top of the screen. +- (CGFloat)pinnedOffsetY { + CGFloat headerHeight = content_suggestions::heightForLogoHeader( + self.headerController.logoIsShowing, + [self.contentSuggestionsMediator notificationPromo]->CanShow()); + CGFloat offsetY = + headerHeight - ntp_header::kScrolledToTopOmniboxBottomMargin; + if (!IsIPadIdiom()) + offsetY -= ntp_header::kToolbarHeight; + + return offsetY; +} + @end
diff --git a/ios/chrome/browser/ui/content_suggestions/BUILD.gn b/ios/chrome/browser/ui/content_suggestions/BUILD.gn index 52764808..44f79970 100644 --- a/ios/chrome/browser/ui/content_suggestions/BUILD.gn +++ b/ios/chrome/browser/ui/content_suggestions/BUILD.gn
@@ -10,6 +10,8 @@ "content_suggestions_data_sink.h", "content_suggestions_data_source.h", "content_suggestions_image_fetcher.h", + "content_suggestions_layout.h", + "content_suggestions_layout.mm", "content_suggestions_view_controller.h", "content_suggestions_view_controller.mm", ] @@ -23,6 +25,7 @@ "//ios/chrome/browser/ui/content_suggestions/cells:cells_ui", "//ios/chrome/browser/ui/content_suggestions/identifier", "//ios/chrome/browser/ui/favicon:favicon_ui", + "//ios/chrome/browser/ui/ntp:ntp_header", "//ui/base", ] public_deps = [
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_commands.h b/ios/chrome/browser/ui/content_suggestions/content_suggestions_commands.h index 73a45824..b4ad979 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_commands.h +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_commands.h
@@ -30,6 +30,8 @@ - (void)dismissContextMenu; // Handles the actions following a tap on the promo. - (void)handlePromoTapped; +// Updates the fake omnibox to adapt to the current scrolling. +- (void)updateFakeOmniboxForScrollView:(nonnull UIScrollView*)scrollView; @end
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_layout.h b/ios/chrome/browser/ui/content_suggestions/content_suggestions_layout.h new file mode 100644 index 0000000..860a65736 --- /dev/null +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_layout.h
@@ -0,0 +1,14 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_LAYOUT_H_ +#define IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_LAYOUT_H_ + +#import "ios/third_party/material_components_ios/src/components/Collections/src/MDCCollectionViewFlowLayout.h" + +@interface ContentSuggestionsLayout : MDCCollectionViewFlowLayout + +@end + +#endif // IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_LAYOUT_H_
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_layout.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_layout.mm new file mode 100644 index 0000000..16c1aad --- /dev/null +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_layout.mm
@@ -0,0 +1,99 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_layout.h" + +#import "ios/chrome/browser/ui/ntp/new_tab_page_header_constants.h" +#include "ios/chrome/browser/ui/ui_util.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +@implementation ContentSuggestionsLayout + +- (NSArray*)layoutAttributesForElementsInRect:(CGRect)rect { + NSMutableArray* layoutAttributes = + [[super layoutAttributesForElementsInRect:rect] mutableCopy]; + UICollectionViewLayoutAttributes* fixedHeaderAttributes = nil; + NSIndexPath* fixedHeaderIndexPath = + [NSIndexPath indexPathForItem:0 inSection:0]; + + for (UICollectionViewLayoutAttributes* attributes in layoutAttributes) { + if ([attributes.representedElementKind + isEqualToString:UICollectionElementKindSectionHeader] && + attributes.indexPath.section == fixedHeaderIndexPath.section) { + fixedHeaderAttributes = [self + layoutAttributesForSupplementaryViewOfKind: + UICollectionElementKindSectionHeader + atIndexPath:fixedHeaderIndexPath]; + attributes.zIndex = fixedHeaderAttributes.zIndex; + attributes.frame = fixedHeaderAttributes.frame; + } + } + + // The fixed header's attributes are not updated if the header's default frame + // is far enough away from |rect|, which can occur when the NTP is scrolled + // up. + if (!fixedHeaderAttributes && !IsIPadIdiom()) { + UICollectionViewLayoutAttributes* fixedHeaderAttributes = + [self layoutAttributesForSupplementaryViewOfKind: + UICollectionElementKindSectionHeader + atIndexPath:fixedHeaderIndexPath]; + [layoutAttributes addObject:fixedHeaderAttributes]; + } + + return layoutAttributes; +} + +- (UICollectionViewLayoutAttributes*) +layoutAttributesForSupplementaryViewOfKind:(NSString*)kind + atIndexPath:(NSIndexPath*)indexPath { + UICollectionViewLayoutAttributes* attributes = + [super layoutAttributesForSupplementaryViewOfKind:kind + atIndexPath:indexPath]; + if ([kind isEqualToString:UICollectionElementKindSectionHeader] && + indexPath.section == 0) { + UICollectionView* collectionView = self.collectionView; + CGPoint contentOffset = collectionView.contentOffset; + CGFloat headerHeight = CGRectGetHeight(attributes.frame); + CGPoint origin = attributes.frame.origin; + + // Keep the header in front of all other views. + attributes.zIndex = 1000; + + // Prevent the fake omnibox from scrolling up off of the screen. + CGFloat minY = headerHeight - ntp_header::kMinHeaderHeight; + if (contentOffset.y > minY) + origin.y = contentOffset.y - minY; + attributes.frame = {origin, attributes.frame.size}; + } + return attributes; +} + +- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBound { + return YES; +} + +- (CGSize)collectionViewContentSize { + CGFloat collectionViewHeight = self.collectionView.bounds.size.height; + CGFloat headerHeight = [self headerReferenceSize].height; + + // The minimum height for the collection view content should be the height of + // the header plus the height of the collection view minus the height of the + // NTP bottom bar. This allows the Most Visited cells to be scrolled up to the + // top of the screen. + CGFloat minimumHeight = collectionViewHeight + headerHeight - + ntp_header::kScrolledToTopOmniboxBottomMargin; + if (!IsIPadIdiom()) + minimumHeight -= ntp_header::kToolbarHeight; + + CGSize contentSize = [super collectionViewContentSize]; + if (contentSize.height < minimumHeight) { + contentSize.height = minimumHeight; + } + return contentSize; +} + +@end
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm index 86a4ca92..9d205307 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm
@@ -12,6 +12,7 @@ #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_updater.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_utils.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_commands.h" +#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_layout.h" #import "ios/chrome/browser/ui/uikit_ui_util.h" #if !defined(__has_feature) || !__has_feature(objc_arc) @@ -50,7 +51,7 @@ - (instancetype)initWithStyle:(CollectionViewControllerStyle)style dataSource:(id<ContentSuggestionsDataSource>)dataSource { - UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init]; + UICollectionViewLayout* layout = [[ContentSuggestionsLayout alloc] init]; self = [super initWithLayout:layout style:style]; if (self) { _collectionUpdater = [[ContentSuggestionsCollectionUpdater alloc] @@ -169,6 +170,7 @@ UIEdgeInsetsMake(0, self.cardStyleMargin, 0, self.cardStyleMargin); } [self.collectionUpdater updateMostVisitedForSize:size]; + [self.collectionView.collectionViewLayout invalidateLayout]; } - (void)willTransitionToTraitCollection:(UITraitCollection*)newCollection @@ -278,6 +280,14 @@ return nil; } +- (MDCCollectionViewCellStyle)collectionView:(UICollectionView*)collectionView + cellStyleForSection:(NSInteger)section { + if ([self.collectionUpdater isHeaderSection:section]) { + return MDCCollectionViewCellStyleDefault; + } + return [super collectionView:collectionView cellStyleForSection:section]; +} + - (UIColor*)collectionView:(nonnull UICollectionView*)collectionView cellBackgroundColorAtIndexPath:(nonnull NSIndexPath*)indexPath { if ([self.collectionUpdater @@ -351,6 +361,13 @@ [self dismissEntryAtIndexPath:indexPath]; } +#pragma mark - UIScrollViewDelegate Methods. + +- (void)scrollViewDidScroll:(UIScrollView*)scrollView { + [super scrollViewDidScroll:scrollView]; + [self.suggestionCommandHandler updateFakeOmniboxForScrollView:scrollView]; +} + #pragma mark - Private - (void)handleLongPress:(UILongPressGestureRecognizer*)gestureRecognizer {
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG index d367787..2b283d7f 100644 --- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG +++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
@@ -526,7 +526,6 @@ crbug.com/591099 bindings/location-lifetime.html [ Crash ] crbug.com/591099 bluetooth/requestDevice/request-from-iframe.html [ Crash ] crbug.com/591099 bluetooth/server/getPrimaryService/two-iframes-from-same-origin.html [ Crash ] -crbug.com/591099 compositing/3d-corners.html [ Crash Failure Pass ] crbug.com/591099 compositing/absolute-inside-out-of-view-fixed.html [ Failure Pass ] crbug.com/591099 compositing/animation/busy-indicator.html [ Failure ] crbug.com/591099 compositing/animation/hidden-composited.html [ Failure ] @@ -561,7 +560,6 @@ crbug.com/591099 compositing/filters/sw-shadow-overlaps-hw-layer.html [ Failure Pass ] crbug.com/591099 compositing/filters/sw-shadow-overlaps-hw-shadow.html [ Failure Pass ] crbug.com/591099 compositing/fixed-position-changed-to-absolute.html [ Failure ] -crbug.com/591099 compositing/fixed-position-scroll-offset-history-restore.html [ Failure Pass ] crbug.com/591099 compositing/framesets/composited-frame-alignment.html [ Failure ] crbug.com/591099 compositing/generated-content.html [ Failure Pass ] crbug.com/591099 compositing/geometry/abs-position-inside-opacity.html [ Failure ] @@ -623,7 +621,6 @@ crbug.com/591099 compositing/gestures/gesture-tapHighlight-overflowing-text-crash.html [ Failure ] crbug.com/591099 compositing/gestures/gesture-tapHighlight-pixel-rotated-link.html [ Failure ] crbug.com/591099 compositing/gestures/gesture-tapHighlight-shadow-tree.html [ Failure ] -crbug.com/591099 compositing/gestures/gesture-tapHighlight-skew-matrix.html [ Failure Pass ] crbug.com/591099 compositing/gestures/gesture-tapHighlight-with-box-shadow.html [ Failure ] crbug.com/591099 compositing/iframes/become-composited-nested-iframes.html [ Failure ] crbug.com/591099 compositing/iframes/become-overlapped-iframe.html [ Failure ] @@ -668,7 +665,6 @@ crbug.com/591099 compositing/layer-creation/fixed-position-no-content.html [ Failure Pass ] crbug.com/591099 compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers.html [ Failure ] crbug.com/591099 compositing/layer-creation/fixed-position-nonscrollable-body-overlap.html [ Failure ] -crbug.com/591099 compositing/layer-creation/fixed-position-nonscrollable-body.html [ Failure Pass ] crbug.com/591099 compositing/layer-creation/fixed-position-nonscrollable-iframes-in-scrollable-page.html [ Failure ] crbug.com/591099 compositing/layer-creation/fixed-position-out-of-view-positioning.html [ Failure ] crbug.com/591099 compositing/layer-creation/fixed-position-out-of-view-scaled-scroll.html [ Failure ] @@ -676,7 +672,6 @@ crbug.com/591099 compositing/layer-creation/fixed-position-out-of-view-with-backdrop-filter.html [ Failure Pass ] crbug.com/591099 compositing/layer-creation/fixed-position-out-of-view.html [ Failure Pass ] crbug.com/591099 compositing/layer-creation/fixed-position-under-transform.html [ Failure ] -crbug.com/591099 compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-if-overflow-hidden.html [ Failure Pass ] crbug.com/591099 compositing/layer-creation/no-compositing-for-fixed-position-under-transform.html [ Failure Pass ] crbug.com/591099 compositing/layer-creation/no-compositing-for-preserve-3d.html [ Failure Pass ] crbug.com/591099 compositing/layer-creation/overflow-scroll-overlap.html [ Failure ] @@ -746,14 +741,11 @@ crbug.com/591099 compositing/overflow/overflow-clip-with-accelerated-scrolling-ancestor.html [ Failure ] crbug.com/591099 compositing/overflow/overflow-compositing-descendant.html [ Failure ] crbug.com/591099 compositing/overflow/overflow-positioning.html [ Failure Pass ] -crbug.com/591099 compositing/overflow/overflow-scroll-background-fractional-offset.html [ Failure Pass ] crbug.com/591099 compositing/overflow/overflow-scroll-background-opaque-to-transparent.html [ Failure ] crbug.com/591099 compositing/overflow/overflow-scroll-background-transparent-to-opaque.html [ Failure ] -crbug.com/591099 compositing/overflow/overflow-scroll-content-fractional-offset.html [ Failure Pass ] crbug.com/591099 compositing/overflow/overflow-scroll-with-pointer-events-toggle.html [ Failure ] crbug.com/591099 compositing/overflow/overflow-scroll.html [ Failure ] crbug.com/591099 compositing/overflow/overflow-scrollbar-layers.html [ Failure ] -crbug.com/591099 compositing/overflow/paint-neg-z-order-descendants-into-scrolling-contents-layer.html [ Failure Pass ] crbug.com/591099 compositing/overflow/parent-overflow.html [ Failure ] crbug.com/591099 compositing/overflow/remove-overflow-crash2.html [ Failure ] crbug.com/591099 compositing/overflow/reparented-scrollbars-non-sc-anc.html [ Failure ] @@ -1029,7 +1021,6 @@ crbug.com/591099 css-parser/color3_hsla_1.html [ Timeout ] crbug.com/591099 css-parser/color3_hsla_2.html [ Timeout ] crbug.com/591099 css-parser/color3_keywords.html [ Timeout ] -crbug.com/591099 css1/basic/class_as_selector.html [ Crash Failure Pass ] crbug.com/591099 css1/basic/comments.html [ Failure ] crbug.com/591099 css1/basic/containment.html [ Crash Failure ] crbug.com/591099 css1/basic/contextual_selectors.html [ Crash Failure ] @@ -1183,7 +1174,6 @@ crbug.com/591099 css2.1/20110323/table-caption-optional-002.htm [ Failure ] crbug.com/591099 css2.1/20110323/table-height-algorithm-023.htm [ Failure ] crbug.com/591099 css2.1/20110323/table-height-algorithm-024.htm [ Failure ] -crbug.com/591099 css2.1/20110323/text-indent-intrinsic-001.htm [ Failure Pass ] crbug.com/591099 css2.1/20110323/text-indent-intrinsic-002.htm [ Failure ] crbug.com/591099 css2.1/20110323/text-indent-intrinsic-003.htm [ Failure ] crbug.com/591099 css2.1/20110323/text-indent-intrinsic-004.htm [ Failure ] @@ -1804,16 +1794,12 @@ crbug.com/591099 css3/filters/simple-filter-rendering.html [ Failure ] crbug.com/591099 css3/flexbox/alignContent-applies-with-flexWrap-wrap-with-single-line.html [ Failure ] crbug.com/591099 css3/flexbox/assert-generated-new-flexbox.html [ Failure ] -crbug.com/591099 css3/flexbox/auto-height-column-with-border-and-padding.html [ Failure Pass ] crbug.com/591099 css3/flexbox/box-orient-button.html [ Crash ] crbug.com/591099 css3/flexbox/bug527039.html [ Failure ] crbug.com/591099 css3/flexbox/bug633212.html [ Crash ] crbug.com/591099 css3/flexbox/button.html [ Failure ] crbug.com/591099 css3/flexbox/child-overflow.html [ Failure Pass ] -crbug.com/591099 css3/flexbox/columns-auto-size.html [ Failure Pass ] -crbug.com/591099 css3/flexbox/content-height-with-scrollbars.html [ Failure Pass ] crbug.com/591099 css3/flexbox/crash-removing-out-of-flow-child.html [ Failure ] -crbug.com/591099 css3/flexbox/cross-axis-scrollbar.html [ Failure Pass ] crbug.com/591099 css3/flexbox/css-properties.html [ Failure ] crbug.com/591099 css3/flexbox/definite-cross-sizes.html [ Failure ] crbug.com/591099 css3/flexbox/display-flexbox-set-get.html [ Crash ] @@ -1838,7 +1824,6 @@ crbug.com/591099 css3/flexbox/flex-property-parsing.html [ Failure ] crbug.com/591099 css3/flexbox/flexbox-baseline-margins.html [ Failure ] crbug.com/591099 css3/flexbox/flexbox-baseline.html [ Failure ] -crbug.com/591099 css3/flexbox/flexbox-height-with-overflow-auto.html [ Failure Pass ] crbug.com/591099 css3/flexbox/flexbox-wordwrap.html [ Failure ] crbug.com/591099 css3/flexbox/floated-flexbox.html [ Failure ] crbug.com/591099 css3/flexbox/floated-flexitem.html [ Failure ] @@ -3781,6 +3766,7 @@ crbug.com/591099 editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-rtl-mixed.html [ Failure ] crbug.com/591099 editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-rtl.html [ Failure ] crbug.com/591099 editing/selection/dont-select-text-overflow-ellipsis-when-wrapping.html [ Failure ] +crbug.com/591099 editing/selection/double_click_and_modify.html [ Failure ] crbug.com/591099 editing/selection/doubleclick-beside-cr-span.html [ Failure Timeout ] crbug.com/591099 editing/selection/doubleclick-inline-first-last-contenteditable.html [ Failure ] crbug.com/591099 editing/selection/doubleclick-whitespace-img-crash.html [ Crash ] @@ -4203,14 +4189,6 @@ crbug.com/591099 external/wpt/cors/remote-origin.htm [ Crash ] crbug.com/591099 external/wpt/css/CSS2/abspos/abspos-containing-block-initial-001.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/abspos/abspos-containing-block-initial-009a.xht [ Failure ] -crbug.com/591099 external/wpt/css/CSS2/floats-clear/clear-applies-to-001.xht [ Failure Pass ] -crbug.com/591099 external/wpt/css/CSS2/floats-clear/clear-applies-to-002.xht [ Failure Pass ] -crbug.com/591099 external/wpt/css/CSS2/floats-clear/clear-applies-to-003.xht [ Failure Pass ] -crbug.com/591099 external/wpt/css/CSS2/floats-clear/clear-applies-to-004.xht [ Failure Pass ] -crbug.com/591099 external/wpt/css/CSS2/floats-clear/clear-applies-to-005.xht [ Failure Pass ] -crbug.com/591099 external/wpt/css/CSS2/floats-clear/clear-applies-to-006.xht [ Failure Pass ] -crbug.com/591099 external/wpt/css/CSS2/floats-clear/clear-applies-to-007.xht [ Failure Pass ] -crbug.com/591099 external/wpt/css/CSS2/floats-clear/clear-applies-to-015.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/floats-clear/float-replaced-height-001.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/floats-clear/float-replaced-width-002.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/floats-clear/floats-001.xht [ Failure Pass ] @@ -4218,11 +4196,8 @@ crbug.com/591099 external/wpt/css/CSS2/floats-clear/floats-026.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/floats-clear/floats-027.xht [ Crash Failure ] crbug.com/591099 external/wpt/css/CSS2/floats-clear/floats-029.xht [ Failure ] -crbug.com/591099 external/wpt/css/CSS2/floats-clear/floats-038.xht [ Failure Pass ] -crbug.com/591099 external/wpt/css/CSS2/floats-clear/floats-039.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/floats-clear/floats-101.xht [ Failure ] -crbug.com/591099 external/wpt/css/CSS2/floats-clear/floats-132.xht [ Failure ] -crbug.com/591099 external/wpt/css/CSS2/floats-clear/floats-138.xht [ Failure Pass ] +crbug.com/591099 external/wpt/css/CSS2/floats-clear/floats-132.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/floats-clear/floats-141.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/floats-clear/floats-143.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/floats-clear/floats-144.xht [ Failure ] @@ -4284,9 +4259,9 @@ crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-block-non-replaced-height-002.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-block-valign-001.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-block-valign-002.xht [ Failure ] -crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-replaced-width-012.xht [ Failure ] -crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-replaced-width-013.xht [ Failure ] -crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-replaced-width-015.xht [ Failure ] +crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-replaced-width-012.xht [ Failure Pass ] +crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-replaced-width-013.xht [ Failure Pass ] +crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-replaced-width-015.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/inline-table-zorder-005.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/inlines-013.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/max-height-percentage-002.xht [ Failure ] @@ -4667,6 +4642,9 @@ crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/shape-box/shape-outside-box-007.html [ Failure ] crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/shape-box/shape-outside-box-008.html [ Failure ] crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/shape-image/gradients/shape-outside-linear-gradient-001.html [ Failure ] +crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/shape-image/gradients/shape-outside-linear-gradient-002.html [ Failure Pass ] +crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/shape-image/gradients/shape-outside-linear-gradient-003.html [ Failure Pass ] +crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/shape-image/gradients/shape-outside-linear-gradient-004.html [ Failure Pass ] crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/shape-image/gradients/shape-outside-radial-gradient-001.html [ Failure ] crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/shape-image/gradients/shape-outside-radial-gradient-002.html [ Failure ] crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/shape-image/gradients/shape-outside-radial-gradient-003.html [ Failure ] @@ -4685,6 +4663,9 @@ crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/shape-image/shape-image-012.html [ Failure ] crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/shape-image/shape-image-013.html [ Failure ] crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/shape-image/shape-image-014.html [ Failure ] +crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/shape-image/shape-image-015.html [ Failure Pass ] +crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/shape-image/shape-image-016.html [ Failure Pass ] +crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/shape-image/shape-image-017.html [ Failure Pass ] crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/shape-image/shape-image-018.html [ Failure ] crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/shape-image/shape-image-019.html [ Failure ] crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/shape-image/shape-image-020.html [ Failure ] @@ -4736,6 +4717,8 @@ crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/supported-shapes/polygon/shape-outside-polygon-009.html [ Failure ] crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/supported-shapes/polygon/shape-outside-polygon-010.html [ Failure ] crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/supported-shapes/polygon/shape-outside-polygon-011.html [ Failure ] +crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/supported-shapes/polygon/shape-outside-polygon-012.html [ Failure Pass ] +crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/supported-shapes/polygon/shape-outside-polygon-013.html [ Failure Pass ] crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/supported-shapes/polygon/shape-outside-polygon-014.html [ Failure ] crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/supported-shapes/polygon/shape-outside-polygon-015.html [ Failure ] crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/supported-shapes/polygon/shape-outside-polygon-016.html [ Failure ] @@ -4761,11 +4744,11 @@ crbug.com/591099 external/wpt/css/css-shapes-1/spec-examples/shape-outside-017.html [ Failure ] crbug.com/591099 external/wpt/css/css-shapes-1/spec-examples/shape-outside-018.html [ Failure ] crbug.com/591099 external/wpt/css/css-shapes-1/spec-examples/shape-outside-019.html [ Failure ] -crbug.com/591099 external/wpt/css/css-text-3/overflow-wrap/overflow-wrap-001.html [ Failure ] -crbug.com/591099 external/wpt/css/css-text-3/overflow-wrap/overflow-wrap-002.html [ Failure ] -crbug.com/591099 external/wpt/css/css-text-3/overflow-wrap/overflow-wrap-break-word-001.html [ Failure ] -crbug.com/591099 external/wpt/css/css-text-3/overflow-wrap/word-wrap-001.html [ Failure ] -crbug.com/591099 external/wpt/css/css-text-3/overflow-wrap/word-wrap-002.html [ Failure ] +crbug.com/591099 external/wpt/css/css-text-3/overflow-wrap/overflow-wrap-001.html [ Failure Pass ] +crbug.com/591099 external/wpt/css/css-text-3/overflow-wrap/overflow-wrap-002.html [ Failure Pass ] +crbug.com/591099 external/wpt/css/css-text-3/overflow-wrap/overflow-wrap-break-word-001.html [ Failure Pass ] +crbug.com/591099 external/wpt/css/css-text-3/overflow-wrap/word-wrap-001.html [ Failure Pass ] +crbug.com/591099 external/wpt/css/css-text-3/overflow-wrap/word-wrap-002.html [ Failure Pass ] crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-color-001.xht [ Crash Failure ] crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-position-above-left-002.xht [ Crash Failure ] crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-position-above-right-002.xht [ Crash Failure ] @@ -5126,16 +5109,20 @@ crbug.com/591099 external/wpt/css/css-writing-modes-3/percent-padding-vrl-006.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/sizing-orthog-htb-in-vlr-003.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/sizing-orthog-htb-in-vlr-007.xht [ Failure ] +crbug.com/591099 external/wpt/css/css-writing-modes-3/sizing-orthog-htb-in-vlr-008.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/sizing-orthog-htb-in-vlr-009.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/sizing-orthog-htb-in-vlr-013.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/sizing-orthog-htb-in-vlr-015.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/sizing-orthog-htb-in-vlr-019.xht [ Failure ] +crbug.com/591099 external/wpt/css/css-writing-modes-3/sizing-orthog-htb-in-vlr-020.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/sizing-orthog-htb-in-vlr-021.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/sizing-orthog-htb-in-vrl-003.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/sizing-orthog-htb-in-vrl-007.xht [ Failure ] +crbug.com/591099 external/wpt/css/css-writing-modes-3/sizing-orthog-htb-in-vrl-008.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/sizing-orthog-htb-in-vrl-009.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/sizing-orthog-htb-in-vrl-015.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/sizing-orthog-htb-in-vrl-019.xht [ Failure ] +crbug.com/591099 external/wpt/css/css-writing-modes-3/sizing-orthog-htb-in-vrl-020.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/sizing-orthog-htb-in-vrl-021.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/sizing-orthog-prct-htb-in-vlr-003.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/sizing-orthog-prct-htb-in-vlr-007.xht [ Failure ] @@ -5228,8 +5215,6 @@ crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-mbp-horiz-002b.xhtml [ Failure ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-min-height-auto-003.html [ Failure ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-min-height-auto-004.html [ Failure ] -crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-min-width-auto-003.html [ Failure Pass ] -crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-min-width-auto-004.html [ Failure Pass ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-overflow-horiz-001.html [ Failure ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-overflow-vert-001.html [ Failure ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-paint-ordering-001.xhtml [ Failure ] @@ -6587,9 +6572,6 @@ crbug.com/591099 fast/backgrounds/size/scaled-sprited-background.html [ Failure Pass ] crbug.com/591099 fast/backgrounds/size/zero.html [ Failure ] crbug.com/591099 fast/backgrounds/svg-as-mask.html [ Failure Pass ] -crbug.com/591099 fast/backgrounds/transformed-body-background.html [ Failure Pass ] -crbug.com/591099 fast/backgrounds/transformed-body-html-background.html [ Crash Failure Pass ] -crbug.com/591099 fast/backgrounds/transformed-html-body-background.html [ Crash Failure Pass ] crbug.com/591099 fast/beacon/beacon-basic.html [ Failure ] crbug.com/591099 fast/block/abspos-child-container-changes-from-relative-to-static.html [ Failure ] crbug.com/591099 fast/block/align-inverted-direction.html [ Failure ] @@ -6606,7 +6588,6 @@ crbug.com/591099 fast/block/basic/quirk-height.html [ Failure ] crbug.com/591099 fast/block/basic/quirk-percent-height-grandchild.html [ Failure ] crbug.com/591099 fast/block/basic/text-indent-rtl.html [ Failure ] -crbug.com/591099 fast/block/basic/truncation-rtl.html [ Failure Pass ] crbug.com/591099 fast/block/basic/white-space-pre-wraps.html [ Failure ] crbug.com/591099 fast/block/block-not-removed-from-parent-lineboxes-crash.html [ Crash ] crbug.com/591099 fast/block/block-parent-with-zero-width-child.html [ Failure ] @@ -6622,12 +6603,11 @@ crbug.com/591099 fast/block/float/008.html [ Failure ] crbug.com/591099 fast/block/float/010.html [ Failure ] crbug.com/591099 fast/block/float/012.html [ Failure ] -crbug.com/591099 fast/block/float/013.html [ Failure Pass ] crbug.com/591099 fast/block/float/014.html [ Crash Failure ] crbug.com/591099 fast/block/float/015.html [ Failure ] crbug.com/591099 fast/block/float/017.html [ Crash Failure ] crbug.com/591099 fast/block/float/018.html [ Failure ] -crbug.com/591099 fast/block/float/019.html [ Failure ] +crbug.com/591099 fast/block/float/019.html [ Failure Pass ] crbug.com/591099 fast/block/float/020.html [ Failure ] crbug.com/591099 fast/block/float/021.html [ Failure ] crbug.com/591099 fast/block/float/022.html [ Failure ] @@ -6652,24 +6632,20 @@ crbug.com/591099 fast/block/float/avoid-floats-when-negative-margin-top-5.html [ Failure ] crbug.com/591099 fast/block/float/avoid-floats-when-negative-margin-top-6.html [ Failure ] crbug.com/591099 fast/block/float/avoid-floats-when-negative-margin-top.html [ Failure ] -crbug.com/591099 fast/block/float/avoidance-percent-width-compat.html [ Failure Pass ] -crbug.com/591099 fast/block/float/avoidance-percent-width-strict.html [ Failure Pass ] crbug.com/591099 fast/block/float/avoidance-rtl.html [ Crash Failure ] crbug.com/591099 fast/block/float/avoiding-float-centered.html [ Failure ] crbug.com/591099 fast/block/float/block-with-negative-margin-clears-float.html [ Failure ] crbug.com/591099 fast/block/float/br-with-clear-2.html [ Failure ] crbug.com/591099 fast/block/float/centered-float-avoidance-complexity.html [ Failure ] crbug.com/591099 fast/block/float/checkbox-and-radio-avoid-floats.html [ Failure ] -crbug.com/591099 fast/block/float/clear-element-too-wide-for-containing-block.html [ Failure Pass ] crbug.com/591099 fast/block/float/clear-intruding-floats-when-moving-to-inline-parent-3.html [ Crash Failure Pass ] -crbug.com/591099 fast/block/float/clear-to-fit.html [ Crash Failure Pass ] crbug.com/591099 fast/block/float/containing-block-change-compositing.html [ Failure ] crbug.com/591099 fast/block/float/crash-on-absolute-positioning.html [ Failure ] crbug.com/591099 fast/block/float/crash-replaced-display-block.html [ Failure ] crbug.com/591099 fast/block/float/dynamic-unfloat-pref-width.html [ Failure ] crbug.com/591099 fast/block/float/editable-text-overlapping-float.html [ Failure ] crbug.com/591099 fast/block/float/element-clears-float-without-clearance.html [ Failure ] -crbug.com/591099 fast/block/float/fit_line_below_floats.html [ Failure ] +crbug.com/591099 fast/block/float/fit_line_below_floats.html [ Failure Pass ] crbug.com/591099 fast/block/float/float-at-start-of-clean-lines-that-are-subsequently-dirtied-vertical-rl.html [ Failure ] crbug.com/591099 fast/block/float/float-at-start-of-clean-lines-that-are-subsequently-dirtied.html [ Failure ] crbug.com/591099 fast/block/float/float-avoidance.html [ Failure ] @@ -6707,8 +6683,8 @@ crbug.com/591099 fast/block/float/floats-wrap-inside-inline-007.html [ Failure ] crbug.com/591099 fast/block/float/formatting-context-changes.html [ Crash Failure ] crbug.com/591099 fast/block/float/independent-align-positioning.html [ Failure ] -crbug.com/591099 fast/block/float/intruding-float-add-in-sibling-block-on-static-position.html [ Failure ] -crbug.com/591099 fast/block/float/intruding-float-add-in-sibling-block-on-static-position2.html [ Crash Failure ] +crbug.com/591099 fast/block/float/intruding-float-add-in-sibling-block-on-static-position.html [ Failure Pass ] +crbug.com/591099 fast/block/float/intruding-float-add-in-sibling-block-on-static-position2.html [ Crash Failure Pass ] crbug.com/591099 fast/block/float/intruding-painted-twice.html [ Failure ] crbug.com/591099 fast/block/float/logical-bottom-exceeds-layoutunit-max.html [ Failure ] crbug.com/591099 fast/block/float/margin-top-changes.html [ Crash ] @@ -6721,8 +6697,8 @@ crbug.com/591099 fast/block/float/nested-floats-expand-formatting-context.html [ Failure ] crbug.com/591099 fast/block/float/nopaint-after-layer-destruction.html [ Failure ] crbug.com/591099 fast/block/float/nopaint-after-layer-destruction2.html [ Failure ] -crbug.com/591099 fast/block/float/overhanging-float-add-in-static-position-block.html [ Crash Failure ] -crbug.com/591099 fast/block/float/overhanging-float-add-in-static-position-block2.html [ Crash Failure ] +crbug.com/591099 fast/block/float/overhanging-float-add-in-static-position-block.html [ Crash Failure Pass ] +crbug.com/591099 fast/block/float/overhanging-float-add-in-static-position-block2.html [ Crash Failure Pass ] crbug.com/591099 fast/block/float/overhanging-float-container-add-compositing.html [ Failure ] crbug.com/591099 fast/block/float/overhanging-float-crashes-when-sibling-becomes-formatting-context.html [ Failure Pass ] crbug.com/591099 fast/block/float/overhanging-float-remove-from-fixed-position-block.html [ Failure ] @@ -6761,7 +6737,6 @@ crbug.com/591099 fast/block/margin-collapse/044.html [ Failure ] crbug.com/591099 fast/block/margin-collapse/057.html [ Failure ] crbug.com/591099 fast/block/margin-collapse/101.html [ Failure ] -crbug.com/591099 fast/block/margin-collapse/102.html [ Failure Pass ] crbug.com/591099 fast/block/margin-collapse/103.html [ Failure ] crbug.com/591099 fast/block/margin-collapse/bfc-beside-float-complex-margin-collapsing.html [ Failure ] crbug.com/591099 fast/block/margin-collapse/block-inside-inline/002.html [ Failure Pass ] @@ -6858,7 +6833,6 @@ crbug.com/591099 fast/block/positioning/offsetLeft-relative-iframe.html [ Crash Failure ] crbug.com/591099 fast/block/positioning/offsetLeft-relative-td.html [ Crash Failure ] crbug.com/591099 fast/block/positioning/padding-percent.html [ Crash Failure ] -crbug.com/591099 fast/block/positioning/percent-top-left-on-relative-position.html [ Failure Pass ] crbug.com/591099 fast/block/positioning/positioned-child-inside-relative-positioned-anonymous-block.html [ Failure ] crbug.com/591099 fast/block/positioning/positioned-container-changes-block-direction-border-with-positioned-descendant.html [ Failure ] crbug.com/591099 fast/block/positioning/positioned-layout-in-line.html [ Crash ] @@ -7041,7 +7015,6 @@ crbug.com/591099 fast/box-shadow/shadow-tiling-artifact.html [ Failure ] crbug.com/591099 fast/box-shadow/single-pixel-shadow.html [ Failure Pass ] crbug.com/591099 fast/box-shadow/spread-multiple-inset.html [ Failure ] -crbug.com/591099 fast/box-shadow/spread-multiple-normal.html [ Failure Pass ] crbug.com/591099 fast/box-shadow/spread.html [ Failure ] crbug.com/591099 fast/box-shadow/transform-fringing.html [ Failure ] crbug.com/591099 fast/box-sizing/box-sizing.html [ Failure ] @@ -7148,7 +7121,6 @@ crbug.com/591099 fast/canvas/canvas-hit-regions-transform-test.html [ Crash ] crbug.com/591099 fast/canvas/canvas-imageSmoothingEnabled-repaint.html [ Crash ] crbug.com/591099 fast/canvas/canvas-imageSmoothingQuality.html [ Crash ] -crbug.com/591099 fast/canvas/canvas-incremental-repaint.html [ Failure Pass ] crbug.com/591099 fast/canvas/canvas-invalid-fillstyle.html [ Crash ] crbug.com/591099 fast/canvas/canvas-invalid-strokestyle.html [ Crash ] crbug.com/591099 fast/canvas/canvas-invalid-video.html [ Failure ] @@ -7188,7 +7160,6 @@ crbug.com/591099 fast/canvas/canvas-strokePath-shadow.html [ Crash ] crbug.com/591099 fast/canvas/canvas-strokeRect-alpha-shadow.html [ Crash ] crbug.com/591099 fast/canvas/canvas-strokeRect-gradient-shadow.html [ Crash ] -crbug.com/591099 fast/canvas/canvas-text-alignment.html [ Failure Pass ] crbug.com/591099 fast/canvas/canvas-text-baseline-tiny-fonts.html [ Failure Pass ] crbug.com/591099 fast/canvas/canvas-text-space-characters.html [ Crash ] crbug.com/591099 fast/canvas/canvas-textMetrics-width.html [ Failure ] @@ -7828,7 +7799,6 @@ crbug.com/591099 fast/css/first-letter-recalculation.html [ Failure Pass ] crbug.com/591099 fast/css/first-letter-removed-added.html [ Failure ] crbug.com/591099 fast/css/first-letter-set-text.html [ Failure ] -crbug.com/591099 fast/css/first-letter-to-non-block-container.html [ Crash Failure Pass ] crbug.com/591099 fast/css/first-letter-visibility.html [ Failure ] crbug.com/591099 fast/css/first-line-change-color-direct.html [ Crash Failure ] crbug.com/591099 fast/css/first-line-parent-style-different.html [ Failure ] @@ -8150,7 +8120,6 @@ crbug.com/591099 fast/css/negative-text-indent-in-inline-block.html [ Failure ] crbug.com/591099 fast/css/nested-at-rules.html [ Failure ] crbug.com/591099 fast/css/nested-floating-relative-position-percentages.html [ Failure ] -crbug.com/591099 fast/css/nested-percent-height-on-replaced.html [ Failure Pass ] crbug.com/591099 fast/css/nested-rounded-corners.html [ Failure ] crbug.com/591099 fast/css/next-sibling-changed.html [ Failure ] crbug.com/591099 fast/css/non-empty-span.html [ Failure ] @@ -8327,7 +8296,6 @@ crbug.com/591099 fast/css/sticky/nested/sticky-nested-inline.html [ Failure ] crbug.com/591099 fast/css/sticky/overflow-layer-removed-crash.html [ Failure ] crbug.com/591099 fast/css/sticky/remove-inline-sticky-crash.html [ Failure ] -crbug.com/591099 fast/css/sticky/sticky-position-works-with-scroll-apis.html [ Failure Pass ] crbug.com/591099 fast/css/sticky/sticky-top-overflow-scroll-by-fragment.html [ Failure ] crbug.com/591099 fast/css/string-quote-binary.html [ Failure ] crbug.com/591099 fast/css/style-and-stylesheet-important.html [ Failure ] @@ -8442,7 +8410,7 @@ crbug.com/591099 fast/css3-text/css3-text-justify/text-justify-distribute.html [ Failure ] crbug.com/591099 fast/css3-text/css3-word-break/css3-word-break-keep-all.html [ Failure Pass ] crbug.com/591099 fast/css3-text/css3-word-break/word-break-all-rtl.html [ Failure ] -crbug.com/591099 fast/css3-text/css3-word-break/word-break-all-wrap-with-100percent-floats.html [ Failure ] +crbug.com/591099 fast/css3-text/css3-word-break/word-break-all-wrap-with-100percent-floats.html [ Failure Pass ] crbug.com/591099 fast/css3-text/css3-word-break/word-break-all-wrap-with-floats.html [ Failure ] crbug.com/591099 fast/css3-text/css3-word-break/word-break-break-all-in-span.html [ Failure ] crbug.com/591099 fast/css3-text/css3-word-break/word-break-break-word-fit-content.html [ Failure Pass ] @@ -9975,7 +9943,6 @@ crbug.com/591099 fast/events/middleClickAutoscroll-click-hyperlink.html [ Failure ] crbug.com/591099 fast/events/middleClickAutoscroll-drag-scrollable-iframe-div.html [ Failure ] crbug.com/591099 fast/events/middleClickAutoscroll-in-iframe.html [ Timeout ] -crbug.com/591099 fast/events/middleClickAutoscroll-latching.html [ Pass Timeout ] crbug.com/591099 fast/events/middleClickAutoscroll-modal-scrollable-iframe-div.html [ Failure ] crbug.com/591099 fast/events/middleClickAutoscroll-nested-divs-forbidden.html [ Timeout ] crbug.com/591099 fast/events/mouse-click-events-pseudo-element.html [ Failure ] @@ -10116,7 +10083,6 @@ crbug.com/591099 fast/events/scroll-event-phase.html [ Failure ] crbug.com/591099 fast/events/scroll-event-raf-timing.html [ Failure ] crbug.com/591099 fast/events/scroll-to-anchor-in-overflow-hidden.html [ Failure ] -crbug.com/591099 fast/events/scrollbar-double-click.html [ Failure Pass ] crbug.com/591099 fast/events/select-element.html [ Timeout ] crbug.com/591099 fast/events/select-onchange-crash.html [ Crash ] crbug.com/591099 fast/events/select-onchange-mouse-released-outside.html [ Crash ] @@ -10487,9 +10453,6 @@ crbug.com/591099 fast/forms/color/color-no-event-during-detach.html [ Crash ] crbug.com/591099 fast/forms/color/color-setrangetext.html [ Failure ] crbug.com/591099 fast/forms/color/color-suggestion-picker-appearance-zoom125.html [ Failure ] -crbug.com/591099 fast/forms/color/color-suggestion-picker-appearance.html [ Failure Pass ] -crbug.com/591099 fast/forms/color/color-suggestion-picker-one-row-appearance.html [ Failure Pass ] -crbug.com/591099 fast/forms/color/color-suggestion-picker-two-row-appearance.html [ Failure Pass ] crbug.com/591099 fast/forms/color/color-type-change-on-close.html [ Crash Failure ] crbug.com/591099 fast/forms/color/color-value-sanitization.html [ Failure ] crbug.com/591099 fast/forms/color/input-appearance-color.html [ Failure ] @@ -11098,7 +11061,7 @@ crbug.com/591099 fast/forms/select/select-change-popup-to-listbox-roundtrip.html [ Crash ] crbug.com/591099 fast/forms/select/select-change-popup-to-listbox.html [ Failure ] crbug.com/591099 fast/forms/select/select-change-type-on-focus.html [ Crash ] -crbug.com/591099 fast/forms/select/select-change-type-on-mousedown-focus.html [ Failure ] +crbug.com/591099 fast/forms/select/select-change-type-on-mousedown-focus.html [ Crash Failure ] crbug.com/591099 fast/forms/select/select-clientheight-large-size.html [ Failure ] crbug.com/591099 fast/forms/select/select-clientheight-with-multiple-attr.html [ Failure ] crbug.com/591099 fast/forms/select/select-dirty-parent-pref-widths.html [ Failure Pass ] @@ -11196,7 +11159,6 @@ crbug.com/591099 fast/forms/submit/submit-appearance-basic.html [ Failure ] crbug.com/591099 fast/forms/suggested-value-after-setvalue.html [ Crash ] crbug.com/591099 fast/forms/suggested-value.html [ Crash ] -crbug.com/591099 fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl.html [ Crash Failure Pass ] crbug.com/591099 fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125.html [ Crash Failure Timeout ] crbug.com/591099 fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom200.html [ Crash Failure ] crbug.com/591099 fast/forms/suggestion-picker/date-suggestion-picker-key-operations.html [ Crash Failure Timeout ] @@ -11204,11 +11166,9 @@ crbug.com/591099 fast/forms/suggestion-picker/date-suggestion-picker-reset-value-after-reload.html [ Crash ] crbug.com/591099 fast/forms/suggestion-picker/date-suggestion-picker-step-attribute.html [ Crash Failure ] crbug.com/591099 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew.html [ Crash Failure Timeout ] -crbug.com/591099 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar.html [ Crash Failure Pass ] crbug.com/591099 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-min-max-attribute.html [ Crash Failure ] crbug.com/591099 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-reset-value-after-reload.html [ Crash ] crbug.com/591099 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-step-attribute.html [ Crash Failure ] -crbug.com/591099 fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl.html [ Crash Failure Pass ] crbug.com/591099 fast/forms/suggestion-picker/month-suggestion-picker-key-operations.html [ Crash Failure Timeout ] crbug.com/591099 fast/forms/suggestion-picker/month-suggestion-picker-min-max-attribute.html [ Crash Failure ] crbug.com/591099 fast/forms/suggestion-picker/month-suggestion-picker-reset-value-after-reload.html [ Crash ] @@ -11218,7 +11178,6 @@ crbug.com/591099 fast/forms/suggestion-picker/time-suggestion-picker-appearance-with-scroll-bar.html [ Crash Failure ] crbug.com/591099 fast/forms/suggestion-picker/time-suggestion-picker-min-max-attribute.html [ Crash Failure ] crbug.com/591099 fast/forms/suggestion-picker/time-suggestion-picker-step-attribute.html [ Crash Failure ] -crbug.com/591099 fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl.html [ Crash Failure Pass Timeout ] crbug.com/591099 fast/forms/suggestion-picker/week-suggestion-picker-key-operations.html [ Crash Failure Timeout ] crbug.com/591099 fast/forms/suggestion-picker/week-suggestion-picker-min-max-attribute.html [ Crash Failure ] crbug.com/591099 fast/forms/suggestion-picker/week-suggestion-picker-reset-value-after-reload.html [ Crash ] @@ -11255,7 +11214,6 @@ crbug.com/591099 fast/forms/text/input-no-renderer.html [ Failure ] crbug.com/591099 fast/forms/text/input-paste-undo.html [ Failure ] crbug.com/591099 fast/forms/text/input-placeholder-paint-order.html [ Failure ] -crbug.com/591099 fast/forms/text/input-placeholder-text-indent.html [ Crash Failure Pass ] crbug.com/591099 fast/forms/text/input-placeholder-visibility-1.html [ Failure ] crbug.com/591099 fast/forms/text/input-placeholder-visibility-3.html [ Failure ] crbug.com/591099 fast/forms/text/input-readonly-autoscroll.html [ Crash Failure ] @@ -11346,6 +11304,11 @@ crbug.com/591099 fast/forms/textarea/textarea-placeholder-visibility-1.html [ Failure ] crbug.com/591099 fast/forms/textarea/textarea-placeholder-visibility-2.html [ Crash Failure ] crbug.com/591099 fast/forms/textarea/textarea-placeholder-wrapping.html [ Crash Failure ] +crbug.com/591099 fast/forms/textarea/textarea-resize-above-min-size-and-below-initial-size.html [ Crash ] +crbug.com/591099 fast/forms/textarea/textarea-resize-below-min-intrinsic-size.html [ Crash ] +crbug.com/591099 fast/forms/textarea/textarea-resize-below-min-size-zoomed.html [ Crash ] +crbug.com/591099 fast/forms/textarea/textarea-resize-below-min-size.html [ Crash ] +crbug.com/591099 fast/forms/textarea/textarea-resize-orthogonal-containing-block.html [ Crash ] crbug.com/591099 fast/forms/textarea/textarea-rows-cols.html [ Crash Failure ] crbug.com/591099 fast/forms/textarea/textarea-scroll-height.html [ Crash Failure ] crbug.com/591099 fast/forms/textarea/textarea-scrollbar-height.html [ Crash Failure ] @@ -11656,14 +11619,11 @@ crbug.com/591099 fast/harness/should-be-now.html [ Failure ] crbug.com/591099 fast/harness/user-preferred-language.html [ Crash Failure ] crbug.com/591099 fast/hidpi/broken-image-icon-hidpi.html [ Crash Failure ] -crbug.com/591099 fast/hidpi/gradient-with-scaled-ancestor.html [ Failure Pass ] crbug.com/591099 fast/hidpi/image-set-list-style-image.html [ Failure ] crbug.com/591099 fast/hidpi/image-set-shape-outside.html [ Failure ] crbug.com/591099 fast/hidpi/image-srcset-intrinsic-size.html [ Failure Pass ] crbug.com/591099 fast/hidpi/image-srcset-png-1.html [ Failure Pass ] crbug.com/591099 fast/hidpi/image-srcset-svg.html [ Failure Pass ] -crbug.com/591099 fast/hidpi/scrollbar-appearance-decrease-device-scale-factor.html [ Failure Pass ] -crbug.com/591099 fast/hidpi/scrollbar-appearance-increase-device-scale-factor.html [ Failure Pass ] crbug.com/591099 fast/history/form-submit-in-frame-via-onclick.html [ Timeout ] crbug.com/591099 fast/history/form-submit-in-frame.html [ Timeout ] crbug.com/591099 fast/history/gesture-before-onload-form-submit.html [ Failure ] @@ -11786,7 +11746,6 @@ crbug.com/591099 fast/inline/justify-emphasis-inline-box.html [ Failure ] crbug.com/591099 fast/inline/leading-space-after-nested-empty-inlines.html [ Failure ] crbug.com/591099 fast/inline/left-right-center-inline-alignment-in-ltr-and-rtl-blocks.html [ Crash Failure ] -crbug.com/591099 fast/inline/long-wrapped-line.html [ Failure Pass ] crbug.com/591099 fast/inline/nested-text-descendants.html [ Failure Pass ] crbug.com/591099 fast/inline/out-of-flow-objects-and-whitespace-after-empty-inline.html [ Crash Failure ] crbug.com/591099 fast/inline/outline-continuations.html [ Failure ] @@ -11844,7 +11803,6 @@ crbug.com/591099 fast/invalid/table-residual-style-crash.html [ Failure ] crbug.com/591099 fast/invalid/td-inside-object.html [ Failure ] crbug.com/591099 fast/invalid/test-case-tr-th-td-should-not-close-dl-list.html [ Failure ] -crbug.com/591099 fast/js/JSON-parse.html [ Pass Timeout ] crbug.com/591099 fast/js/Promise-bindings-check-exception.html [ Failure ] crbug.com/591099 fast/js/Promise-native-create.html [ Failure ] crbug.com/591099 fast/js/Promise-native-reject.html [ Failure ] @@ -12420,7 +12378,6 @@ crbug.com/591099 fast/multicol/event-offset-in-nested.html [ Failure ] crbug.com/591099 fast/multicol/event-offset.html [ Failure ] crbug.com/591099 fast/multicol/explicit-columns-auto.html [ Failure ] -crbug.com/591099 fast/multicol/fieldset-as-multicol.html [ Crash Failure Pass ] crbug.com/591099 fast/multicol/first-line-in-block-below-next-column-top.html [ Failure ] crbug.com/591099 fast/multicol/first-line-in-block-with-padding-exact-fit.html [ Failure ] crbug.com/591099 fast/multicol/first-line-in-block-with-padding.html [ Failure ] @@ -12518,7 +12475,6 @@ crbug.com/591099 fast/multicol/newmulticol/clipping-overflow-hidden.html [ Crash Failure ] crbug.com/591099 fast/multicol/newmulticol/clipping.html [ Failure ] crbug.com/591099 fast/multicol/newmulticol/fixed-height-fill-auto.html [ Failure ] -crbug.com/591099 fast/multicol/newmulticol/fixed-height-fill-balance-2.html [ Failure Pass ] crbug.com/591099 fast/multicol/newmulticol/fixed-height-fill-balance.html [ Failure ] crbug.com/591099 fast/multicol/newmulticol/hide-box-vertical-lr.html [ Failure Pass ] crbug.com/591099 fast/multicol/newmulticol/hide-box-vertical-rl.html [ Failure Pass ] @@ -12591,7 +12547,6 @@ crbug.com/591099 fast/multicol/span/outer-column-break-after-inner-spanner.html [ Failure ] crbug.com/591099 fast/multicol/span/outline.html [ Failure ] crbug.com/591099 fast/multicol/span/outside-multicol.html [ Failure ] -crbug.com/591099 fast/multicol/span/overflow-on-multicol.html [ Failure Pass ] crbug.com/591099 fast/multicol/span/padding-before-unbreakable-content-crash.html [ Crash Failure ] crbug.com/591099 fast/multicol/span/percent-margins.html [ Failure ] crbug.com/591099 fast/multicol/span/preferred-widths-with-column-content.html [ Failure ] @@ -12696,7 +12651,6 @@ crbug.com/591099 fast/overflow/add-visual-overflow-and-change-container-position.html [ Failure ] crbug.com/591099 fast/overflow/border-radius-clipping.html [ Crash Failure ] crbug.com/591099 fast/overflow/child-100percent-height-inside-fixed-container-with-overflow-auto.html [ Failure ] -crbug.com/591099 fast/overflow/childFocusRingClip.html [ Failure Pass ] crbug.com/591099 fast/overflow/clip-rects-fixed-ancestor.html [ Failure ] crbug.com/591099 fast/overflow/float-in-relpositioned.html [ Failure ] crbug.com/591099 fast/overflow/generated-content-crash.html [ Failure ] @@ -12704,8 +12658,6 @@ crbug.com/591099 fast/overflow/hidden-html-auto-body.html [ Failure ] crbug.com/591099 fast/overflow/hidden-html-hidden-body.html [ Failure Pass ] crbug.com/591099 fast/overflow/hidden-html-paged-body.html [ Crash Failure ] -crbug.com/591099 fast/overflow/hidden-viewport-x.html [ Failure Pass ] -crbug.com/591099 fast/overflow/hidden-viewport-y.html [ Failure Pass ] crbug.com/591099 fast/overflow/hit-test-overflow-controls.html [ Failure ] crbug.com/591099 fast/overflow/hit-test-overflow-hidden-with-box-shadow.html [ Failure ] crbug.com/591099 fast/overflow/image-selection-highlight.html [ Failure ] @@ -12717,14 +12669,14 @@ crbug.com/591099 fast/overflow/overflow-auto-position-absolute.html [ Failure ] crbug.com/591099 fast/overflow/overflow-auto-table.html [ Failure ] crbug.com/591099 fast/overflow/overflow-clamp-after-visible-rect-resize.html [ Failure ] -crbug.com/591099 fast/overflow/overflow-focus-ring.html [ Failure ] +crbug.com/591099 fast/overflow/overflow-float-stacking.html [ Failure ] +crbug.com/591099 fast/overflow/overflow-focus-ring.html [ Failure Pass ] crbug.com/591099 fast/overflow/overflow-height-float-not-removed-crash.html [ Failure Pass ] crbug.com/591099 fast/overflow/overflow-rtl-inline-scrollbar.html [ Failure ] crbug.com/591099 fast/overflow/overflow-rtl-vertical-origin.html [ Failure ] crbug.com/591099 fast/overflow/overflow-rtl-vertical.html [ Crash Failure ] crbug.com/591099 fast/overflow/overflow-rtl.html [ Crash Failure ] crbug.com/591099 fast/overflow/overflow-stacking.html [ Failure ] -crbug.com/591099 fast/overflow/overflow-text-hit-testing.html [ Failure Pass ] crbug.com/591099 fast/overflow/overflow-update-transform.html [ Failure ] crbug.com/591099 fast/overflow/overflow-visible-should-ignore-scroll.html [ Failure ] crbug.com/591099 fast/overflow/overflow-with-local-background-attachment.html [ Crash Failure ] @@ -12747,7 +12699,6 @@ crbug.com/591099 fast/overflow/unreachable-overflow-rtl-bug.html [ Failure ] crbug.com/591099 fast/pagination/auto-height-with-break.html [ Crash Failure ] crbug.com/591099 fast/pagination/auto-height.html [ Crash Failure ] -crbug.com/591099 fast/pagination/body-make-unpaginated.html [ Failure Pass ] crbug.com/591099 fast/pagination/break-in-paged-overflow.html [ Crash Failure ] crbug.com/591099 fast/pagination/caret-range-outside-paged-x-rtl-vertical-rl.html [ Crash Failure ] crbug.com/591099 fast/pagination/caret-range-outside-paged-x-rtl.html [ Crash Failure ] @@ -12771,8 +12722,6 @@ crbug.com/591099 fast/pagination/first-letter-inherit-all-crash.html [ Crash Failure ] crbug.com/591099 fast/pagination/modal-dialog-crash.html [ Crash Failure ] crbug.com/591099 fast/pagination/multicol.html [ Crash Failure ] -crbug.com/591099 fast/pagination/paged-x-to-paged-y.html [ Failure Pass ] -crbug.com/591099 fast/pagination/paged-y-to-paged-x.html [ Failure Pass ] crbug.com/591099 fast/pagination/short-pages-tall-content.html [ Crash Failure ] crbug.com/591099 fast/pagination/very-tall-auto-height-crash.html [ Crash Failure ] crbug.com/591099 fast/parser/001.html [ Failure ] @@ -12917,9 +12866,8 @@ crbug.com/591099 fast/reflections/transparent-reflected-sublayers.html [ Failure ] crbug.com/591099 fast/regex/non-pattern-characters.html [ Failure ] crbug.com/591099 fast/regex/syntax-errors.html [ Failure ] -crbug.com/591099 fast/replaced/002.html [ Failure ] -crbug.com/591099 fast/replaced/003.html [ Failure ] -crbug.com/591099 fast/replaced/005.html [ Failure Pass ] +crbug.com/591099 fast/replaced/002.html [ Failure Pass ] +crbug.com/591099 fast/replaced/003.html [ Failure Pass ] crbug.com/591099 fast/replaced/008.html [ Crash Failure ] crbug.com/591099 fast/replaced/absolute-image-sizing.html [ Failure ] crbug.com/591099 fast/replaced/absolute-position-auto-width-and-left-and-right-and-intrinsic-width-quirks.html [ Crash Failure ] @@ -13075,6 +13023,7 @@ crbug.com/591099 fast/scrolling/hover-during-scroll.html [ Failure Timeout ] crbug.com/591099 fast/scrolling/html-element-client-rect-excludes-scrollbars.html [ Failure ] crbug.com/591099 fast/scrolling/keyboard-scroll-page-scale.html [ Failure Timeout ] +crbug.com/591099 fast/scrolling/listbox-wheel-event.html [ Failure ] crbug.com/591099 fast/scrolling/overflow-auto-ltr.html [ Failure ] crbug.com/591099 fast/scrolling/overflow-scrollability.html [ Failure ] crbug.com/591099 fast/scrolling/scroll-clears-fragment-anchor.html [ Failure ] @@ -13236,6 +13185,7 @@ crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-top-left.html [ Failure ] crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-top-right.html [ Failure ] crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-floats-inset.html [ Failure ] +crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-floats-linetop-adjustment.html [ Failure Pass ] crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-floats-margin-crash.html [ Failure ] crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-floats-not-a-layer.html [ Failure ] crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-floats-outermost.html [ Failure ] @@ -13243,6 +13193,8 @@ crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-floats-polygon-001.html [ Failure Pass ] crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-floats-polygon-002.html [ Failure ] crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-floats-shape-margin-percent.html [ Failure ] +crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-floats-stacked-000.html [ Failure Pass ] +crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-floats-stacked-001.html [ Failure Pass ] crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-floats-stacked-002.html [ Crash Failure ] crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-image-fit-001.html [ Failure ] crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-image-fit-002.html [ Failure ] @@ -13256,12 +13208,15 @@ crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-line-height-crash2.html [ Crash Failure ] crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-linear-gradient.html [ Failure ] crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-negative-height-crash.html [ Crash Failure ] +crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-polygon-012.html [ Failure Pass ] +crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-polygon-013.html [ Failure Pass ] crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-polygon-014.html [ Failure ] crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-polygon-015.html [ Failure ] crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-polygon-zero-vertex.html [ Failure Pass ] crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-relative-size-svg.html [ Failure ] crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-rounded-boxes-001.html [ Failure ] crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-rounded-boxes-002.html [ Failure ] +crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-rounded-inset.html [ Failure Pass ] crbug.com/591099 fast/spatial-navigation/snav-aligned-not-aligned.html [ Failure ] crbug.com/591099 fast/spatial-navigation/snav-clipped-overflowed-content.html [ Failure ] crbug.com/591099 fast/spatial-navigation/snav-container-white-space.html [ Failure ] @@ -13318,6 +13273,7 @@ crbug.com/591099 fast/sub-pixel/float-percentage-widths.html [ Failure ] crbug.com/591099 fast/sub-pixel/float-with-margin-in-container.html [ Failure ] crbug.com/591099 fast/sub-pixel/float-with-right-margin-zoom.html [ Failure ] +crbug.com/591099 fast/sub-pixel/float-wrap-zoom.html [ Failure Pass ] crbug.com/591099 fast/sub-pixel/inline-block-with-padding.html [ Failure ] crbug.com/591099 fast/sub-pixel/repaint-subpixel-layer-in-subpixel-composited-layer.html [ Failure Pass ] crbug.com/591099 fast/sub-pixel/selection/selection-rect-in-sub-pixel-table.html [ Failure ] @@ -13338,14 +13294,13 @@ crbug.com/591099 fast/table/035-vertical.html [ Failure ] crbug.com/591099 fast/table/035.html [ Failure ] crbug.com/591099 fast/table/036.html [ Failure ] -crbug.com/591099 fast/table/038-vertical.html [ Failure Pass ] crbug.com/591099 fast/table/040-vertical.html [ Failure ] crbug.com/591099 fast/table/040.html [ Failure ] crbug.com/591099 fast/table/100-percent-cell-width.html [ Failure ] crbug.com/591099 fast/table/absolute-table-percent-lengths.html [ Failure ] crbug.com/591099 fast/table/add-before-anonymous-child.html [ Failure ] crbug.com/591099 fast/table/add-cell-with-large-border.html [ Failure ] -crbug.com/591099 fast/table/align-right-within-left-aligned-div.html [ Failure ] +crbug.com/591099 fast/table/align-right-within-left-aligned-div.html [ Failure Pass ] crbug.com/591099 fast/table/append-cells.html [ Failure ] crbug.com/591099 fast/table/append-cells2.html [ Failure ] crbug.com/591099 fast/table/assert-autotablelayout-maxlogicalwidth.html [ Failure ] @@ -13370,7 +13325,6 @@ crbug.com/591099 fast/table/border-collapsing/border-collapsing-head-foot-vertical.html [ Failure ] crbug.com/591099 fast/table/border-collapsing/border-collapsing-head-foot.html [ Failure ] crbug.com/591099 fast/table/border-collapsing/dynamic-border-width-change.html [ Failure ] -crbug.com/591099 fast/table/border-collapsing/equal-precedence-resolution-vertical.html [ Crash Failure Pass ] crbug.com/591099 fast/table/border-collapsing/rtl-border-collapsing-vertical.html [ Failure ] crbug.com/591099 fast/table/border-collapsing/rtl-border-collapsing.html [ Failure ] crbug.com/591099 fast/table/border-recalc.html [ Failure ] @@ -13502,7 +13456,6 @@ crbug.com/591099 fast/table/table-different-overflow-values-2.html [ Failure ] crbug.com/591099 fast/table/table-different-overflow-values.html [ Failure ] crbug.com/591099 fast/table/table-display-types-vertical.html [ Failure ] -crbug.com/591099 fast/table/table-display-types.html [ Failure Pass ] crbug.com/591099 fast/table/table-parts-in-inline.html [ Failure ] crbug.com/591099 fast/table/table-row-compositing-repaint-crash.html [ Failure ] crbug.com/591099 fast/table/table-row-style-not-updated-with-before-content.html [ Failure Pass ] @@ -13528,8 +13481,6 @@ crbug.com/591099 fast/table/unused-percent-heights.html [ Failure ] crbug.com/591099 fast/table/whitespace-in-table-cells-when-div-appended-2.html [ Failure ] crbug.com/591099 fast/table/whitespace-in-table-cells-when-div-appended.html [ Failure ] -crbug.com/591099 fast/table/wide-colspan.html [ Failure Pass ] -crbug.com/591099 fast/table/wide-column.html [ Failure Pass ] crbug.com/591099 fast/text-autosizing/basecomputedstyle-assert.html [ Failure ] crbug.com/591099 fast/text-autosizing/cluster-inline-block-or-table.html [ Failure ] crbug.com/591099 fast/text-autosizing/cluster-inline-grid-flex-box.html [ Failure Pass ] @@ -13891,6 +13842,7 @@ crbug.com/591099 fast/text/wide-preformatted.html [ Failure ] crbug.com/591099 fast/text/word-break-run-rounding.html [ Failure ] crbug.com/591099 fast/text/word-break-soft-hyphen.html [ Failure ] +crbug.com/591099 fast/text/word-break.html [ Failure Pass ] crbug.com/591099 fast/text/word-space-between-inlines.html [ Failure ] crbug.com/591099 fast/text/word-space.html [ Failure ] crbug.com/591099 fast/text/word-wrap-whitespace-pre.html [ Failure Pass ] @@ -14180,7 +14132,6 @@ crbug.com/591099 fragmentation/break-inside-avoid-with-forced-break.html [ Failure ] crbug.com/591099 fragmentation/break-properties.html [ Failure ] crbug.com/591099 fragmentation/cell-taller-than-col-straddles-columns.html [ Failure ] -crbug.com/591099 fragmentation/cells-dont-fit-on-page-paginated.html [ Failure Pass ] crbug.com/591099 fragmentation/change-fragmentainer-height-block-float-2.html [ Failure ] crbug.com/591099 fragmentation/change-fragmentainer-height-block-float.html [ Failure ] crbug.com/591099 fragmentation/change-fragmentainer-height-inline-float.html [ Failure ] @@ -14192,11 +14143,9 @@ crbug.com/591099 fragmentation/forced-break-clearance-unsplittable-content.html [ Failure ] crbug.com/591099 fragmentation/forced-break-inside-float.html [ Crash Failure ] crbug.com/591099 fragmentation/fragmented-rowspan-alignment.html [ Failure ] -crbug.com/591099 fragmentation/fragmented-rowspan.html [ Failure Pass ] crbug.com/591099 fragmentation/fragmented-table-cell.html [ Failure ] crbug.com/591099 fragmentation/fragmented-table-with-fixed-height.html [ Failure ] crbug.com/591099 fragmentation/image-block-as-first-child.html [ Failure ] -crbug.com/591099 fragmentation/multi-line-cells-paginated.html [ Failure Pass ] crbug.com/591099 fragmentation/multi-line-cells.html [ Failure ] crbug.com/591099 fragmentation/overflow-crossing-boundary.html [ Failure ] crbug.com/591099 fragmentation/overhanging-float-change-fragmentainer-height.html [ Crash Failure ] @@ -14213,7 +14162,6 @@ crbug.com/591099 fragmentation/single-cells-multiple-tables-no-repeating-thead.html [ Failure ] crbug.com/591099 fragmentation/single-line-cells-in-multiple-table-sections.html [ Failure ] crbug.com/591099 fragmentation/single-line-cells-nested-repeating-thead-3.html [ Failure ] -crbug.com/591099 fragmentation/single-line-cells-paginated.html [ Failure Pass ] crbug.com/591099 fragmentation/single-line-cells-repeating-thead-starts-middle-of-page-break-after-avoid-2.html [ Failure Pass ] crbug.com/591099 fragmentation/single-line-cells-repeating-thead-with-border-spacing-at-top-of-row.html [ Failure ] crbug.com/591099 fragmentation/single-line-cells.html [ Failure ] @@ -14492,7 +14440,7 @@ crbug.com/591099 http/tests/appcache/deferred-events-delete-while-raising-timer.html [ Crash ] crbug.com/591099 http/tests/appcache/deferred-events-delete-while-raising.html [ Crash ] crbug.com/591099 http/tests/appcache/destroyed-frame.html [ Crash ] -crbug.com/591099 http/tests/appcache/detached-iframe.html [ Failure ] +crbug.com/591099 http/tests/appcache/detached-iframe.html [ Crash Failure ] crbug.com/591099 http/tests/appcache/different-https-origin-resource-main.html [ Failure ] crbug.com/591099 http/tests/appcache/different-origin-manifest.html [ Failure ] crbug.com/591099 http/tests/appcache/different-scheme.html [ Failure Timeout ] @@ -14696,7 +14644,7 @@ crbug.com/591099 http/tests/incremental/frame-focus-before-load.html [ Failure Timeout ] crbug.com/591099 http/tests/incremental/slow-utf8-css.html [ Failure ] crbug.com/591099 http/tests/incremental/slow-utf8-html.pl [ Failure ] -crbug.com/591099 http/tests/incremental/slow-utf8-text.pl [ Timeout ] +crbug.com/591099 http/tests/incremental/slow-utf8-text.pl [ Pass Timeout ] crbug.com/591099 http/tests/incremental/split-hex-entities.pl [ Failure ] crbug.com/591099 http/tests/inspector-enabled/console-clear-arguments-on-frame-navigation.html [ Failure ] crbug.com/591099 http/tests/inspector-enabled/console-clear-arguments-on-frame-remove.html [ Crash Failure ] @@ -14741,7 +14689,6 @@ crbug.com/591099 http/tests/inspector-protocol/request-referrer-policy.html [ Crash Failure Timeout ] crbug.com/591099 http/tests/inspector-protocol/runtime-get-properties-doesnt-crash-on-window-frame.html [ Failure Pass Timeout ] crbug.com/591099 http/tests/inspector-protocol/websocket/websocket-user-agent-override.html [ Failure ] -crbug.com/591099 http/tests/inspector-unit/list-control-non-viewport.js [ Failure Pass ] crbug.com/591099 http/tests/inspector-unit/viewport-datagrid-items-attached-to-dom.js [ Failure ] crbug.com/591099 http/tests/inspector-unit/viewport-datagrid-items-expandable-attached-to-dom.js [ Failure ] crbug.com/591099 http/tests/inspector/appcache/appcache-iframe-manifests.html [ Crash Timeout ] @@ -14801,7 +14748,7 @@ crbug.com/591099 http/tests/inspector/elements/styles/selector-line.html [ Crash ] crbug.com/591099 http/tests/inspector/elements/styles/styles-do-not-add-inline-stylesheets-in-navigator.html [ Failure ] crbug.com/591099 http/tests/inspector/elements/styles/styles-redirected-css.html [ Crash ] -crbug.com/591099 http/tests/inspector/elements/styles/stylesheet-tracking.html [ Crash Timeout ] +crbug.com/591099 http/tests/inspector/elements/styles/stylesheet-tracking.html [ Crash Failure Timeout ] crbug.com/591099 http/tests/inspector/elements/styles/xsl-transformed.xml [ Crash ] crbug.com/591099 http/tests/inspector/extensions-headers.html [ Crash Failure ] crbug.com/591099 http/tests/inspector/extensions-iframe-eval.html [ Crash Failure ] @@ -15743,7 +15690,6 @@ crbug.com/591099 http/tests/security/xssAuditor/block-does-not-leak-location.html [ Failure ] crbug.com/591099 http/tests/security/xssAuditor/cached-frame.html [ Crash Failure ] crbug.com/591099 http/tests/security/xssAuditor/chunked-big-script.html [ Failure ] -crbug.com/591099 http/tests/security/xssAuditor/dom-write-innerHTML.html [ Crash Pass ] crbug.com/591099 http/tests/security/xssAuditor/embed-tag-in-path-unterminated.html [ Failure ] crbug.com/591099 http/tests/security/xssAuditor/form-action-token-fragment.html [ Failure ] crbug.com/591099 http/tests/security/xssAuditor/full-block-base-href.html [ Failure ] @@ -16321,13 +16267,11 @@ crbug.com/591099 images/color-profile-background-image-space.html [ Failure ] crbug.com/591099 images/color-profile-border-image-source.html [ Failure ] crbug.com/591099 images/color-profile-border-radius.html [ Failure ] -crbug.com/591099 images/color-profile-clip.html [ Failure Pass ] crbug.com/591099 images/color-profile-drag-image.html [ Failure ] crbug.com/591099 images/color-profile-filter.html [ Failure ] crbug.com/591099 images/color-profile-group.html [ Failure ] crbug.com/591099 images/color-profile-iframe.html [ Failure ] crbug.com/591099 images/color-profile-image-canvas-pattern.html [ Failure ] -crbug.com/591099 images/color-profile-image-canvas-svg.html [ Crash Failure Pass ] crbug.com/591099 images/color-profile-image-canvas.html [ Failure ] crbug.com/591099 images/color-profile-image-filter-all.html [ Failure ] crbug.com/591099 images/color-profile-image-object-fit.html [ Failure ] @@ -16338,8 +16282,6 @@ crbug.com/591099 images/color-profile-layer-filter.html [ Crash Failure ] crbug.com/591099 images/color-profile-layer.html [ Failure ] crbug.com/591099 images/color-profile-mask-image-svg.html [ Crash Failure ] -crbug.com/591099 images/color-profile-munsell-adobe-to-srgb.html [ Failure Pass ] -crbug.com/591099 images/color-profile-munsell-srgb-to-srgb.html [ Failure Pass ] crbug.com/591099 images/color-profile-svg-foreign-object.html [ Failure ] crbug.com/591099 images/content-url-broken-image-with-alt-text.html [ Crash Pass ] crbug.com/591099 images/content-url-image-with-alt-text-dynamic-2.html [ Crash Pass ] @@ -16451,7 +16393,7 @@ crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-input-buttons.js [ Crash Timeout ] crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-input.js [ Crash Failure Timeout ] crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-labelledby.js [ Crash Failure Timeout ] -crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-visiblity.js [ Crash Timeout ] +crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-visiblity.js [ Crash Failure Timeout ] crbug.com/591099 inspector-protocol/css/css-add-rule.html [ Timeout ] crbug.com/591099 inspector-protocol/css/css-coverage-poll.html [ Failure ] crbug.com/591099 inspector-protocol/css/css-fonts-updated-event.html [ Failure ] @@ -16470,8 +16412,8 @@ crbug.com/591099 inspector-protocol/debugger/debugger-step-into-dedicated-worker.html [ Failure ] crbug.com/591099 inspector-protocol/debugger/suspend-setTimeout-on-pause-in-dedicated-worker.html [ Failure ] crbug.com/591099 inspector-protocol/dom-snapshot/dom-snapshot-getSnapshot.html [ Crash Failure Timeout ] -crbug.com/591099 inspector-protocol/dom/dom-getBoxModel.html [ Failure Pass ] -crbug.com/591099 inspector-protocol/dom/dom-ns-attr-modified.html [ Failure ] +crbug.com/591099 inspector-protocol/dom/dom-getBoxModel.js [ Failure Pass ] +crbug.com/591099 inspector-protocol/dom/dom-ns-attr-modified.js [ Failure ] crbug.com/591099 inspector-protocol/emulation/device-emulation-320-2x.html [ Failure ] crbug.com/591099 inspector-protocol/emulation/device-emulation-320-only-viewport.html [ Failure ] crbug.com/591099 inspector-protocol/emulation/device-emulation-320.html [ Failure ] @@ -16504,8 +16446,6 @@ crbug.com/591099 inspector-protocol/network/resource-type.html [ Crash Failure ] crbug.com/591099 inspector-protocol/network/websocket-initiator.html [ Failure ] crbug.com/591099 inspector-protocol/page/get-layout-metrics.html [ Failure ] -crbug.com/591099 inspector-protocol/runtime/runtime-console-log-handle-navigate.js [ Failure Pass ] -crbug.com/591099 inspector-protocol/runtime/runtime-shouldnt-crash-after-inspected-context-destroyed.js [ Crash ] crbug.com/591099 inspector/agents-enable-disable.html [ Failure ] crbug.com/591099 inspector/animation/animation-KeyframeEffectReadOnly-crash.html [ Crash ] crbug.com/591099 inspector/animation/animation-empty-web-animations.html [ Crash Failure ] @@ -16535,7 +16475,7 @@ crbug.com/591099 inspector/components/parsed-url.html [ Failure ] crbug.com/591099 inspector/components/progress-bar.html [ Failure ] crbug.com/591099 inspector/components/segmented-range.html [ Failure ] -crbug.com/591099 inspector/components/split-string-by-regexes.html [ Failure ] +crbug.com/591099 inspector/components/split-string-by-regexes.html [ Crash Failure ] crbug.com/591099 inspector/components/split-widget.html [ Failure ] crbug.com/591099 inspector/components/throttler.html [ Failure ] crbug.com/591099 inspector/components/utilities-highlight-results.html [ Failure ] @@ -16937,7 +16877,7 @@ crbug.com/591099 inspector/network/network-domain-filter.html [ Failure ] crbug.com/591099 inspector/network/network-filmstrip-overview-showing.html [ Failure ] crbug.com/591099 inspector/network/network-filter-http-requests.html [ Failure ] -crbug.com/591099 inspector/network/network-filter-parser.html [ Failure ] +crbug.com/591099 inspector/network/network-filter-parser.html [ Crash Failure ] crbug.com/591099 inspector/network/network-filter-updated-requests.html [ Failure ] crbug.com/591099 inspector/network/network-json-parser.html [ Crash Failure ] crbug.com/591099 inspector/network/network-request-parse-query-params.html [ Crash Failure ] @@ -16955,7 +16895,7 @@ crbug.com/591099 inspector/profiler/cpu-profiler-profiling.html [ Crash Failure ] crbug.com/591099 inspector/profiler/cpu-profiler-save-load.html [ Crash Failure ] crbug.com/591099 inspector/profiler/cpu-profiler-stopped-removed-race.html [ Crash Failure ] -crbug.com/591099 inspector/profiler/heap-profiler-profiling.html [ Failure ] +crbug.com/591099 inspector/profiler/heap-profiler-profiling.html [ Crash Failure ] crbug.com/591099 inspector/profiler/heap-snapshot-comparison-dom-groups-change.html [ Crash ] crbug.com/591099 inspector/profiler/heap-snapshot-comparison-expansion-preserved-when-sorting.html [ Crash ] crbug.com/591099 inspector/profiler/heap-snapshot-comparison-show-all.html [ Crash ] @@ -16993,7 +16933,7 @@ crbug.com/591099 inspector/runtime.html [ Failure ] crbug.com/591099 inspector/runtime/runtime-callFunctionOn.html [ Failure ] crbug.com/591099 inspector/runtime/runtime-es6-setSymbolPropertyValue.html [ Failure ] -crbug.com/591099 inspector/runtime/runtime-getProperties-isOwnProperty.html [ Failure ] +crbug.com/591099 inspector/runtime/runtime-getProperties-isOwnProperty.html [ Crash Failure ] crbug.com/591099 inspector/runtime/runtime-getProperties.html [ Failure ] crbug.com/591099 inspector/runtime/runtime-localStorage-getProperties.html [ Failure ] crbug.com/591099 inspector/runtime/runtime-setPropertyValue.html [ Crash Failure ] @@ -17016,7 +16956,7 @@ crbug.com/591099 inspector/sass/test-edit-set-property-text.html [ Failure ] crbug.com/591099 inspector/sass/test-edit-toggle-property.html [ Crash Failure ] crbug.com/591099 inspector/sass/test-find-node-for-position.html [ Crash ] -crbug.com/591099 inspector/sass/test-mapping-bad.html [ Failure ] +crbug.com/591099 inspector/sass/test-mapping-bad.html [ Crash Failure ] crbug.com/591099 inspector/sass/test-mapping-good.html [ Failure ] crbug.com/591099 inspector/sass/test-mapping-many-scss.html [ Failure ] crbug.com/591099 inspector/sass/test-mapping-with-cache-busting-url.html [ Failure ] @@ -17046,7 +16986,7 @@ crbug.com/591099 inspector/sources/debugger-async/async-callstack-post-message.html [ Crash Failure ] crbug.com/591099 inspector/sources/debugger-async/async-callstack-promises.html [ Crash Failure Timeout ] crbug.com/591099 inspector/sources/debugger-async/async-callstack-reload-no-crash.html [ Failure ] -crbug.com/591099 inspector/sources/debugger-async/async-callstack-scripted-scroll.html [ Failure Timeout ] +crbug.com/591099 inspector/sources/debugger-async/async-callstack-scripted-scroll.html [ Crash Failure Timeout ] crbug.com/591099 inspector/sources/debugger-async/async-callstack-set-interval.html [ Failure ] crbug.com/591099 inspector/sources/debugger-async/async-callstack-web-sql.html [ Crash Failure ] crbug.com/591099 inspector/sources/debugger-async/async-callstack-xhrs.html [ Failure ] @@ -17057,7 +16997,7 @@ crbug.com/591099 inspector/sources/debugger-breakpoints/debugger-breakpoints-not-activated-on-reload.html [ Crash Failure ] crbug.com/591099 inspector/sources/debugger-breakpoints/debugger-disable-add-breakpoint.html [ Failure ] crbug.com/591099 inspector/sources/debugger-breakpoints/debugger-reload-breakpoints-with-source-maps.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-breakpoints/debugger-set-breakpoint-regex.html [ Failure ] +crbug.com/591099 inspector/sources/debugger-breakpoints/debugger-set-breakpoint-regex.html [ Crash Failure ] crbug.com/591099 inspector/sources/debugger-breakpoints/disable-breakpoints.html [ Failure ] crbug.com/591099 inspector/sources/debugger-breakpoints/dom-breakpoints-editing-dom-from-inspector.html [ Crash Failure ] crbug.com/591099 inspector/sources/debugger-breakpoints/dom-breakpoints.html [ Crash Failure Timeout ] @@ -17166,7 +17106,7 @@ crbug.com/591099 inspector/sources/debugger-ui/watch-expressions-panel-switch.html [ Crash Failure Timeout ] crbug.com/591099 inspector/sources/debugger-ui/watch-expressions-preserve-expansion.html [ Crash Failure ] crbug.com/591099 inspector/sources/debugger/debug-inlined-scripts-fragment-id.html [ Failure ] -crbug.com/591099 inspector/sources/debugger/debugger-autocontinue-on-syntax-error.html [ Failure ] +crbug.com/591099 inspector/sources/debugger/debugger-autocontinue-on-syntax-error.html [ Crash Failure ] crbug.com/591099 inspector/sources/debugger/debugger-compile-and-run.html [ Failure ] crbug.com/591099 inspector/sources/debugger/debugger-completions-on-call-frame.html [ Failure ] crbug.com/591099 inspector/sources/debugger/debugger-cyclic-reference.html [ Failure ] @@ -17488,8 +17428,6 @@ crbug.com/591099 media/autoplay/document-user-activation.html [ Failure ] crbug.com/591099 media/before-load-member-access.html [ Crash ] crbug.com/591099 media/broken-video.html [ Crash ] -crbug.com/591099 media/color-profile-munsell-bt601-smpte-to-srgb.html [ Failure Pass ] -crbug.com/591099 media/color-profile-munsell-bt709-to-srgb.html [ Failure Pass ] crbug.com/591099 media/color-profile-video-poster-image.html [ Failure ] crbug.com/591099 media/color-profile-video-seek-filter.html [ Failure ] crbug.com/591099 media/color-profile-video-seek-object-fit.html [ Failure ] @@ -17943,7 +17881,6 @@ crbug.com/591099 paint/invalidation/compositing/layer-repaint-rects.html [ Failure ] crbug.com/591099 paint/invalidation/compositing/layer-repaint.html [ Failure ] crbug.com/591099 paint/invalidation/compositing/new-stacking-context.html [ Failure ] -crbug.com/591099 paint/invalidation/compositing/newly-composited-on-scroll.html [ Failure Pass ] crbug.com/591099 paint/invalidation/compositing/opacity-between-absolute.html [ Failure Pass ] crbug.com/591099 paint/invalidation/compositing/opacity-between-absolute2.html [ Failure Pass ] crbug.com/591099 paint/invalidation/compositing/overflow-into-content.html [ Failure ] @@ -17953,7 +17890,6 @@ crbug.com/591099 paint/invalidation/compositing/repaint-overflow-scrolled-squashed-content.html [ Failure ] crbug.com/591099 paint/invalidation/compositing/repaint-squashed-layer-in-rect.html [ Failure ] crbug.com/591099 paint/invalidation/compositing/repaint-via-layout-offset.html [ Failure Pass ] -crbug.com/591099 paint/invalidation/compositing/requires-backing-repaint.html [ Failure Pass ] crbug.com/591099 paint/invalidation/compositing/resize-repaint.html [ Failure Pass ] crbug.com/591099 paint/invalidation/compositing/resize-squashing-layer-that-needs-full-repaint.html [ Failure Pass ] crbug.com/591099 paint/invalidation/compositing/scroll-fixed-layer-no-content.html [ Failure Pass ] @@ -17976,7 +17912,6 @@ crbug.com/591099 paint/invalidation/compositing/stacked-float-under-composited-inline.html [ Failure Pass ] crbug.com/591099 paint/invalidation/compositing/subpixel-offset-scaled-transform-composited.html [ Failure ] crbug.com/591099 paint/invalidation/compositing/text-color-change.html [ Failure ] -crbug.com/591099 paint/invalidation/compositing/text-match-highlight.html [ Failure Pass ] crbug.com/591099 paint/invalidation/compositing/tricky-element-removal-crash.html [ Failure Pass ] crbug.com/591099 paint/invalidation/compositing/updating-scrolling-container-and-content.html [ Failure ] crbug.com/591099 paint/invalidation/compositing/updating-scrolling-container.html [ Failure ] @@ -18080,8 +18015,6 @@ crbug.com/591099 paint/invalidation/forms/range-focus-by-mouse-then-keydown.html [ Failure ] crbug.com/591099 paint/invalidation/forms/submit-focus-by-mouse-then-keydown.html [ Failure Pass ] crbug.com/591099 paint/invalidation/gradients-em-stops-repaint.html [ Failure ] -crbug.com/591099 paint/invalidation/hover-create-scrollbar-part.html [ Failure Pass ] -crbug.com/591099 paint/invalidation/hover-destroy-scrollbar-part.html [ Failure Pass ] crbug.com/591099 paint/invalidation/hover-pseudo-borders-whitespace.html [ Failure ] crbug.com/591099 paint/invalidation/hover-pseudo-borders.html [ Failure ] crbug.com/591099 paint/invalidation/iframe-display-block-to-display-none.html [ Failure ] @@ -18397,7 +18330,7 @@ crbug.com/591099 paint/invalidation/text-selection-rect-in-overflow.html [ Failure Pass ] crbug.com/591099 paint/invalidation/text-shadow-horizontal.html [ Failure ] crbug.com/591099 paint/invalidation/text-shadow.html [ Failure ] -crbug.com/591099 paint/invalidation/textarea-caret.html [ Crash Failure ] +crbug.com/591099 paint/invalidation/textarea-caret.html [ Crash Failure Pass ] crbug.com/591099 paint/invalidation/trailing-floats-root-line-box-overflow.html [ Failure ] crbug.com/591099 paint/invalidation/transform-absolute-child.html [ Failure ] crbug.com/591099 paint/invalidation/transform-absolute-in-positioned-container.html [ Failure ] @@ -18464,8 +18397,6 @@ crbug.com/591099 paint/spellmarkers/inline_spelling_markers.html [ Failure ] crbug.com/591099 paint/tables/collapsed-border-corner-conflict.html [ Failure ] crbug.com/591099 paint/tables/composited-collapsed-table-borders.html [ Failure Pass ] -crbug.com/591099 paint/tables/self-painting-row-background-vertical-clipped.html [ Failure Pass ] -crbug.com/591099 paint/tables/stacking-context-row-background-clipped-with-offset.html [ Failure Pass ] crbug.com/591099 paint/text/selection-no-clip-text.html [ Failure ] crbug.com/591099 paint/text/text-match-highlights-big-line-height.html [ Failure ] crbug.com/591099 paint/theme/adjust-progress-bar-size.html [ Failure Pass ] @@ -18623,8 +18554,6 @@ crbug.com/591099 scrollbars/hidden-scrollbar-prevents-layout.html [ Failure ] crbug.com/591099 scrollbars/iframe-scrollbar-becomes-custom.html [ Crash ] crbug.com/591099 scrollbars/listbox-scrollbar-combinations.html [ Failure ] -crbug.com/591099 scrollbars/resize-scales-with-dpi-150.html [ Failure Pass ] -crbug.com/591099 scrollbars/rtl/overflow-scroll-rtl.html [ Crash Failure Pass ] crbug.com/591099 scrollbars/scrollable-iframe-click-gets-focus.html [ Crash ] crbug.com/591099 scrollbars/scrollable-iframe-remove-crash.html [ Crash ] crbug.com/591099 scrollbars/scrollbar-added-during-drag.html [ Timeout ] @@ -18640,7 +18569,6 @@ crbug.com/591099 scrollbars/scrollbar-pointer-events.html [ Failure ] crbug.com/591099 scrollbars/scrollbar-visibility-hidden.html [ Failure ] crbug.com/591099 scrollbars/scrollbars-on-positioned-content.html [ Failure ] -crbug.com/591099 scrollbars/short-scrollbar.html [ Failure Pass ] crbug.com/591099 scrollbars/viewport-scrollbar-corner-with-percent-padding-crash.html [ Failure ] crbug.com/591099 scrollingcoordinator/donot-compute-non-fast-scrollable-region-for-hidden-frames.html [ Crash Timeout ] crbug.com/591099 scrollingcoordinator/non-fast-scrollable-region-nested.html [ Failure ] @@ -20009,7 +19937,6 @@ crbug.com/591099 tables/mozilla/bugs/bug2886-2.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug2886.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug28928.html [ Failure ] -crbug.com/591099 tables/mozilla/bugs/bug29314.html [ Failure Pass ] crbug.com/591099 tables/mozilla/bugs/bug29326.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug2947.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug2962.html [ Crash Failure ] @@ -20032,7 +19959,6 @@ crbug.com/591099 tables/mozilla/bugs/bug4093.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug42187.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug4284.html [ Failure ] -crbug.com/591099 tables/mozilla/bugs/bug43039.html [ Failure Pass ] crbug.com/591099 tables/mozilla/bugs/bug43204.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug43854-1.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug43854-2.html [ Failure ] @@ -20041,7 +19967,6 @@ crbug.com/591099 tables/mozilla/bugs/bug4527.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug4576.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug46480-1.html [ Failure ] -crbug.com/591099 tables/mozilla/bugs/bug46480-2.html [ Failure Pass ] crbug.com/591099 tables/mozilla/bugs/bug46924.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug4849-2.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug48827.html [ Failure ] @@ -20054,13 +19979,11 @@ crbug.com/591099 tables/mozilla/bugs/bug56563.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug57828-2.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug57828.html [ Failure ] -crbug.com/591099 tables/mozilla/bugs/bug5797.html [ Failure Pass ] crbug.com/591099 tables/mozilla/bugs/bug5798.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug5835.html [ Crash Failure ] crbug.com/591099 tables/mozilla/bugs/bug58402-1.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug59354.html [ Failure Pass ] crbug.com/591099 tables/mozilla/bugs/bug60992.html [ Failure ] -crbug.com/591099 tables/mozilla/bugs/bug625.html [ Failure Pass ] crbug.com/591099 tables/mozilla/bugs/bug6304.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug641-2.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug647.html [ Failure ] @@ -20088,22 +20011,16 @@ crbug.com/591099 tables/mozilla/bugs/bug8950.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug9123-1.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug9123-2.html [ Failure ] -crbug.com/591099 tables/mozilla/bugs/bug92143.html [ Failure Pass ] crbug.com/591099 tables/mozilla/bugs/bug93363.html [ Failure ] -crbug.com/591099 tables/mozilla/bugs/bug96334.html [ Failure Pass ] crbug.com/591099 tables/mozilla/bugs/bug97383.html [ Failure Pass ] crbug.com/591099 tables/mozilla/bugs/bug98196.html [ Failure ] crbug.com/591099 tables/mozilla/collapsing_borders/bug41262-3.html [ Crash Failure ] crbug.com/591099 tables/mozilla/collapsing_borders/bug41262-4.html [ Failure ] crbug.com/591099 tables/mozilla/core/bloomberg.html [ Failure ] -crbug.com/591099 tables/mozilla/core/borders.html [ Failure Pass ] crbug.com/591099 tables/mozilla/core/captions.html [ Failure ] crbug.com/591099 tables/mozilla/core/cell_heights.html [ Failure ] crbug.com/591099 tables/mozilla/core/col_span.html [ Failure ] -crbug.com/591099 tables/mozilla/core/col_widths_auto_fix.html [ Failure Pass ] crbug.com/591099 tables/mozilla/core/margins.html [ Failure ] -crbug.com/591099 tables/mozilla/core/nested1.html [ Failure Pass ] -crbug.com/591099 tables/mozilla/core/one_row.html [ Failure Pass ] crbug.com/591099 tables/mozilla/core/table_heights.html [ Failure ] crbug.com/591099 tables/mozilla/marvin/col_span.html [ Failure ] crbug.com/591099 tables/mozilla/marvin/colgroup_align_center.html [ Failure ] @@ -20204,8 +20121,6 @@ crbug.com/591099 tables/mozilla/marvin/tr_bgcolor_yellow_rgb.html [ Failure ] crbug.com/591099 tables/mozilla/marvin/x_table.xml [ Failure ] crbug.com/591099 tables/mozilla/marvin/x_table_align_center.xml [ Failure ] -crbug.com/591099 tables/mozilla/marvin/x_td_nowrap.xml [ Failure Pass ] -crbug.com/591099 tables/mozilla/marvin/x_th_nowrap.xml [ Crash Failure Pass ] crbug.com/591099 tables/mozilla/other/test3.html [ Failure ] crbug.com/591099 tables/mozilla/other/test6.html [ Failure ] crbug.com/591099 tables/mozilla/other/wa_table_thtd_rowspan.html [ Crash Failure ] @@ -20218,7 +20133,6 @@ crbug.com/591099 tables/mozilla_expected_failures/bugs/bug14007-2.html [ Failure ] crbug.com/591099 tables/mozilla_expected_failures/bugs/bug14489.html [ Crash Failure ] crbug.com/591099 tables/mozilla_expected_failures/bugs/bug19526.html [ Failure ] -crbug.com/591099 tables/mozilla_expected_failures/bugs/bug220653.html [ Failure Pass ] crbug.com/591099 tables/mozilla_expected_failures/bugs/bug2479-5.html [ Failure ] crbug.com/591099 tables/mozilla_expected_failures/bugs/bug25707.html [ Failure ] crbug.com/591099 tables/mozilla_expected_failures/bugs/bug3166-10.html [ Failure ] @@ -20234,10 +20148,8 @@ crbug.com/591099 tables/mozilla_expected_failures/bugs/bug51000.html [ Failure ] crbug.com/591099 tables/mozilla_expected_failures/bugs/bug61042-1.html [ Failure ] crbug.com/591099 tables/mozilla_expected_failures/bugs/bug61042-2.html [ Failure ] -crbug.com/591099 tables/mozilla_expected_failures/bugs/bug67915-2.html [ Failure Pass ] crbug.com/591099 tables/mozilla_expected_failures/bugs/bug7113.html [ Failure ] crbug.com/591099 tables/mozilla_expected_failures/bugs/bug72393.html [ Failure ] -crbug.com/591099 tables/mozilla_expected_failures/bugs/bug7243.html [ Failure Pass ] crbug.com/591099 tables/mozilla_expected_failures/bugs/bug73629.html [ Failure Pass ] crbug.com/591099 tables/mozilla_expected_failures/bugs/bug8499.html [ Failure ] crbug.com/591099 tables/mozilla_expected_failures/bugs/bug85016.html [ Failure ] @@ -20447,7 +20359,6 @@ crbug.com/591099 virtual/android/fullscreen/video-fail-to-enter-full-screen.html [ Failure ] crbug.com/591099 virtual/android/fullscreen/video-fixed-at-top-left.html [ Failure Pass ] crbug.com/591099 virtual/android/media/mediadocument/media-document-with-download-button.html [ Failure ] -crbug.com/591099 virtual/disable-spinvalidation/compositing/3d-corners.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/compositing/absolute-inside-out-of-view-fixed.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/compositing/animation/busy-indicator.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/compositing/animation/hidden-composited.html [ Failure ] @@ -20483,7 +20394,6 @@ crbug.com/591099 virtual/disable-spinvalidation/compositing/filters/sw-shadow-overlaps-hw-layer.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/compositing/filters/sw-shadow-overlaps-hw-shadow.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/compositing/fixed-position-changed-to-absolute.html [ Failure ] -crbug.com/591099 virtual/disable-spinvalidation/compositing/fixed-position-scroll-offset-history-restore.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/compositing/framesets/composited-frame-alignment.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/compositing/generated-content.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/abs-position-inside-opacity.html [ Failure ] @@ -20545,7 +20455,6 @@ crbug.com/591099 virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-overflowing-text-crash.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-shadow-tree.html [ Failure ] -crbug.com/591099 virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-skew-matrix.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-with-box-shadow.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/become-composited-nested-iframes.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/become-overlapped-iframe.html [ Failure ] @@ -20590,7 +20499,6 @@ crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-no-content.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-nonscrollable-body-overlap.html [ Failure ] -crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-nonscrollable-body.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-nonscrollable-iframes-in-scrollable-page.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-out-of-view-positioning.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll.html [ Failure ] @@ -20598,7 +20506,6 @@ crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-out-of-view-with-backdrop-filter.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-out-of-view.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-under-transform.html [ Failure ] -crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-if-overflow-hidden.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/no-compositing-for-fixed-position-under-transform.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/no-compositing-for-preserve-3d.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/overflow-scroll-overlap.html [ Failure ] @@ -20668,14 +20575,11 @@ crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/overflow-clip-with-accelerated-scrolling-ancestor.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/overflow-compositing-descendant.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/overflow-positioning.html [ Failure Pass ] -crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/overflow-scroll-background-fractional-offset.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/overflow-scroll-background-opaque-to-transparent.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/overflow-scroll-background-transparent-to-opaque.html [ Failure ] -crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/overflow-scroll-content-fractional-offset.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/overflow-scroll-with-pointer-events-toggle.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/overflow-scroll.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/overflow-scrollbar-layers.html [ Failure ] -crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/paint-neg-z-order-descendants-into-scrolling-contents-layer.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/parent-overflow.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/remove-overflow-crash2.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/reparented-scrollbars-non-sc-anc.html [ Failure ] @@ -20942,7 +20846,6 @@ crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/layer-repaint-rects.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/layer-repaint.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/new-stacking-context.html [ Failure ] -crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/newly-composited-on-scroll.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/opacity-between-absolute.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/opacity-between-absolute2.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/overflow-into-content.html [ Failure ] @@ -20952,7 +20855,6 @@ crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/repaint-overflow-scrolled-squashed-content.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/repaint-squashed-layer-in-rect.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/repaint-via-layout-offset.html [ Failure Pass ] -crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/requires-backing-repaint.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/resize-repaint.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/resize-squashing-layer-that-needs-full-repaint.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/scroll-fixed-layer-no-content.html [ Failure Pass ] @@ -20975,7 +20877,6 @@ crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/stacked-float-under-composited-inline.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/subpixel-offset-scaled-transform-composited.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/text-color-change.html [ Failure ] -crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/text-match-highlight.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/tricky-element-removal-crash.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/updating-scrolling-container-and-content.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/updating-scrolling-container.html [ Failure ] @@ -21079,8 +20980,6 @@ crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/forms/range-focus-by-mouse-then-keydown.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/gradients-em-stops-repaint.html [ Failure ] -crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/hover-create-scrollbar-part.html [ Failure Pass ] -crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/hover-destroy-scrollbar-part.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/hover-pseudo-borders-whitespace.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/hover-pseudo-borders.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/iframe-display-block-to-display-none.html [ Failure ] @@ -21396,7 +21295,7 @@ crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/text-selection-rect-in-overflow.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/text-shadow-horizontal.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/text-shadow.html [ Failure ] -crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/textarea-caret.html [ Crash Failure ] +crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/textarea-caret.html [ Crash Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/trailing-floats-root-line-box-overflow.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/transform-absolute-child.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/transform-absolute-in-positioned-container.html [ Failure ] @@ -21463,8 +21362,6 @@ crbug.com/591099 virtual/disable-spinvalidation/paint/spellmarkers/inline_spelling_markers.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/tables/collapsed-border-corner-conflict.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/tables/composited-collapsed-table-borders.html [ Failure Pass ] -crbug.com/591099 virtual/disable-spinvalidation/paint/tables/self-painting-row-background-vertical-clipped.html [ Failure Pass ] -crbug.com/591099 virtual/disable-spinvalidation/paint/tables/stacking-context-row-background-clipped-with-offset.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/paint/text/selection-no-clip-text.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/text/text-match-highlights-big-line-height.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/theme/adjust-progress-bar-size.html [ Failure Pass ] @@ -21571,7 +21468,6 @@ crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-hit-regions-transform-test.html [ Crash ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-imageSmoothingEnabled-repaint.html [ Crash ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-imageSmoothingQuality.html [ Crash ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-incremental-repaint.html [ Failure Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-invalid-fillstyle.html [ Crash ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-invalid-strokestyle.html [ Crash ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-invalid-video.html [ Failure ] @@ -21612,7 +21508,6 @@ crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-strokePath-shadow.html [ Crash ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-strokeRect-alpha-shadow.html [ Crash ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-strokeRect-gradient-shadow.html [ Crash ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-text-alignment.html [ Failure Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-text-baseline-tiny-fonts.html [ Failure Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-text-space-characters.html [ Crash ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-textMetrics-width.html [ Failure ] @@ -21671,7 +21566,6 @@ crbug.com/591099 virtual/exotic-color-space/images/55.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/alt-text-wrapping.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/animated-background-image-crash.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/bad-png.html [ Crash Pass ] crbug.com/591099 virtual/exotic-color-space/images/color-jpeg-with-color-profile.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/color-profile-background-clip-text.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/color-profile-background-image-cover.html [ Failure ] @@ -21681,13 +21575,11 @@ crbug.com/591099 virtual/exotic-color-space/images/color-profile-background-image-space.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/color-profile-border-image-source.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/color-profile-border-radius.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/color-profile-clip.html [ Failure Pass ] crbug.com/591099 virtual/exotic-color-space/images/color-profile-drag-image.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/color-profile-filter.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/color-profile-group.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/color-profile-iframe.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/color-profile-image-canvas-pattern.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/color-profile-image-canvas-svg.html [ Failure Pass ] crbug.com/591099 virtual/exotic-color-space/images/color-profile-image-canvas.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/color-profile-image-filter-all.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/color-profile-image-object-fit.html [ Failure ] @@ -21698,10 +21590,7 @@ crbug.com/591099 virtual/exotic-color-space/images/color-profile-layer-filter.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/color-profile-layer.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/color-profile-mask-image-svg.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb.html [ Failure Pass ] -crbug.com/591099 virtual/exotic-color-space/images/color-profile-munsell-srgb-to-srgb.html [ Failure Pass ] crbug.com/591099 virtual/exotic-color-space/images/color-profile-svg-foreign-object.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/content-url-broken-image-with-alt-text.html [ Crash Pass ] crbug.com/591099 virtual/exotic-color-space/images/content-url-image-with-alt-text-dynamic-2.html [ Crash Pass ] crbug.com/591099 virtual/exotic-color-space/images/cross-fade-background-size.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/cross-fade-blending.html [ Failure ] @@ -21806,7 +21695,6 @@ crbug.com/591099 virtual/gpu-rasterization/images/55.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/alt-text-wrapping.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/animated-background-image-crash.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/bad-png.html [ Crash Pass ] crbug.com/591099 virtual/gpu-rasterization/images/color-jpeg-with-color-profile.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-background-image-cover.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-background-image-cross-fade-png.html [ Failure ] @@ -21815,13 +21703,11 @@ crbug.com/591099 virtual/gpu-rasterization/images/color-profile-background-image-space.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-border-image-source.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-border-radius.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/color-profile-clip.html [ Failure Pass ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-drag-image.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-filter.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-group.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-iframe.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image-canvas-pattern.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image-canvas-svg.html [ Failure Pass ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image-canvas.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image-filter-all.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image-object-fit.html [ Failure ] @@ -21832,8 +21718,6 @@ crbug.com/591099 virtual/gpu-rasterization/images/color-profile-layer-filter.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-layer.html [ Failure Timeout ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-mask-image-svg.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb.html [ Failure Pass ] -crbug.com/591099 virtual/gpu-rasterization/images/color-profile-munsell-srgb-to-srgb.html [ Failure Pass ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-svg-foreign-object.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/content-url-image-with-alt-text-dynamic-2.html [ Crash Pass ] crbug.com/591099 virtual/gpu-rasterization/images/cross-fade-background-size.html [ Failure ] @@ -22030,7 +21914,6 @@ crbug.com/591099 virtual/gpu/fast/canvas/canvas-hit-regions-transform-test.html [ Crash ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-imageSmoothingEnabled-repaint.html [ Crash ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-imageSmoothingQuality.html [ Crash ] -crbug.com/591099 virtual/gpu/fast/canvas/canvas-incremental-repaint.html [ Failure Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-invalid-fillstyle.html [ Crash ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-invalid-strokestyle.html [ Crash ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-invalid-video.html [ Failure ] @@ -22071,7 +21954,6 @@ crbug.com/591099 virtual/gpu/fast/canvas/canvas-strokePath-shadow.html [ Crash ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-strokeRect-alpha-shadow.html [ Crash ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-strokeRect-gradient-shadow.html [ Crash ] -crbug.com/591099 virtual/gpu/fast/canvas/canvas-text-alignment.html [ Failure Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-text-baseline-tiny-fonts.html [ Failure Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-text-space-characters.html [ Crash ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-textMetrics-width.html [ Failure ] @@ -22148,8 +22030,8 @@ crbug.com/591099 virtual/layout_ng/fast/block/float/017.html [ Failure ] crbug.com/591099 virtual/layout_ng/fast/block/float/clear-intruding-floats-when-moving-to-inline-parent-3.html [ Crash Failure Pass ] crbug.com/591099 virtual/layout_ng/fast/block/float/formatting-context-changes.html [ Failure ] -crbug.com/591099 virtual/layout_ng/fast/block/float/overhanging-float-add-in-static-position-block.html [ Failure ] -crbug.com/591099 virtual/layout_ng/fast/block/float/overhanging-float-add-in-static-position-block2.html [ Failure ] +crbug.com/591099 virtual/layout_ng/fast/block/float/overhanging-float-add-in-static-position-block.html [ Failure Pass ] +crbug.com/591099 virtual/layout_ng/fast/block/float/overhanging-float-add-in-static-position-block2.html [ Failure Pass ] crbug.com/591099 virtual/layout_ng/fast/block/float/rubybase-children-made-inline-crash.html [ Failure ] crbug.com/591099 virtual/layout_ng/fast/block/float/rubybase-children-moved-crash-2.html [ Crash Failure ] crbug.com/591099 virtual/layout_ng/fast/block/margin-collapse/line-beside-float-complex-margin-collapsing.html [ Failure ] @@ -22161,8 +22043,6 @@ crbug.com/591099 virtual/mojo-loading/http/tests/inspector/network/network-filters.html [ Failure Pass ] crbug.com/591099 virtual/mojo-loading/http/tests/inspector/network/waterfall-images.html [ Failure Pass ] crbug.com/591099 virtual/mojo-loading/http/tests/inspector/persistence/automapping-sourcemap.html [ Failure Pass Timeout ] -crbug.com/591099 virtual/mojo-loading/http/tests/security/contentSecurityPolicy/directive-parsing-03.html [ Failure Pass ] -crbug.com/591099 virtual/mojo-loading/http/tests/security/contentSecurityPolicy/source-list-parsing-04.html [ Failure Pass ] crbug.com/591099 virtual/mojo-loading/http/tests/security/cors-rfc1918/addressspace-document-csp-appcache.html [ Failure Pass Timeout ] crbug.com/591099 virtual/mojo-loading/http/tests/serviceworker/ServiceWorkerGlobalScope/registration-attribute.html [ Failure Pass ] crbug.com/591099 virtual/mojo-localstorage/external/wpt/webstorage/event_no_duplicates.html [ Crash ] @@ -22223,7 +22103,6 @@ crbug.com/591099 virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-canvas-tainting-cache.https.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-canvas-tainting.https.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-cors-xhr.https.html [ Crash ] -crbug.com/591099 virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-event-redirect.https.html [ Pass Timeout ] crbug.com/591099 virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-event.https.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-frame-resource.https.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-mixed-content-to-inscope.https.html [ Crash ] @@ -22445,12 +22324,9 @@ crbug.com/591099 virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-compositing-descendant.html [ Failure ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch.html [ Failure ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-positioning.html [ Failure Pass ] -crbug.com/591099 virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scroll-background-fractional-offset.html [ Failure Pass ] -crbug.com/591099 virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scroll-content-fractional-offset.html [ Failure Pass ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scroll-with-pointer-events-toggle.html [ Failure ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scroll.html [ Failure ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scrollbar-layers.html [ Failure ] -crbug.com/591099 virtual/prefer_compositing_to_lcd_text/compositing/overflow/paint-neg-z-order-descendants-into-scrolling-contents-layer.html [ Failure Pass ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/compositing/overflow/parent-overflow.html [ Failure ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/compositing/overflow/remove-overflow-crash2.html [ Failure ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/compositing/overflow/reparented-scrollbars-non-sc-anc.html [ Failure ] @@ -22511,7 +22387,6 @@ crbug.com/591099 virtual/prefer_compositing_to_lcd_text/scrollbars/scrollbar-pointer-events.html [ Failure ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/scrollbars/scrollbar-visibility-hidden.html [ Failure ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/scrollbars/scrollbars-on-positioned-content.html [ Failure ] -crbug.com/591099 virtual/prefer_compositing_to_lcd_text/scrollbars/short-scrollbar.html [ Failure Pass ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/scrollbars/viewport-scrollbar-corner-with-percent-padding-crash.html [ Failure ] crbug.com/591099 virtual/rootlayerscrolls/fast/history/scroll-restoration/scroll-restoration-fragment-navigation-crossdoc.html [ Crash ] crbug.com/591099 virtual/rootlayerscrolls/fast/history/scroll-restoration/scroll-restoration-navigation.html [ Crash ] @@ -22525,7 +22400,8 @@ crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/fractional-scroll-offset-document.html [ Failure ] crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/hover-during-scroll.html [ Failure Timeout ] crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/html-element-client-rect-excludes-scrollbars.html [ Failure ] -crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/keyboard-scroll-page-scale.html [ Failure ] +crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/keyboard-scroll-page-scale.html [ Failure Timeout ] +crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/listbox-wheel-event.html [ Failure ] crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/overflow-auto-ltr.html [ Failure ] crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/overflow-scrollability.html [ Failure ] crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/scroll-clears-fragment-anchor.html [ Failure ] @@ -23001,7 +22877,7 @@ crbug.com/591099 virtual/threaded/fast/scroll-behavior/main-frame-scroll-in-quirks-mode.html [ Failure ] crbug.com/591099 virtual/threaded/fast/scroll-behavior/main-frame-scroll-in-standards-mode.html [ Failure ] crbug.com/591099 virtual/threaded/fast/scroll-behavior/no-erroneous-auto-scroll-pinch-zoom.html [ Failure ] -crbug.com/591099 virtual/threaded/fast/scroll-behavior/overflow-scroll-animates.html [ Failure ] +crbug.com/591099 virtual/threaded/fast/scroll-behavior/overflow-scroll-animates.html [ Failure Timeout ] crbug.com/591099 virtual/threaded/fast/scroll-behavior/overflow-scroll-loses-composited-scrolling.html [ Failure Timeout ] crbug.com/591099 virtual/threaded/fast/scroll-behavior/overflow-scroll-precise-deltas-dont-animate.html [ Failure Timeout ] crbug.com/591099 virtual/threaded/fast/scroll-behavior/overflow-scroll-root-frame-animates.html [ Failure Timeout ] @@ -23215,7 +23091,7 @@ crbug.com/591099 vr/requestPresent_resolve.html [ Crash ] crbug.com/591099 vr/requestPresent_resolve_repeatwithgesture.html [ Crash ] crbug.com/591099 vr/requestPresent_resolve_repeatwithoutgesture.html [ Crash ] -crbug.com/591099 vr/requestPresent_resolve_then_reject.html [ Crash ] +crbug.com/591099 vr/requestPresent_resolve_then_reject.html [ Crash Timeout ] crbug.com/591099 vr/requestPresent_resolve_webgl2.html [ Crash ] crbug.com/591099 vr/stageParameters_match.html [ Crash ] crbug.com/591099 webaudio/BiquadFilter/tail-time-lowpass.html [ Timeout ]
diff --git a/third_party/WebKit/LayoutTests/animations/animations-parsing-expected.txt b/third_party/WebKit/LayoutTests/animations/animations-parsing-expected.txt index fb43a84..3341b66 100644 --- a/third_party/WebKit/LayoutTests/animations/animations-parsing-expected.txt +++ b/third_party/WebKit/LayoutTests/animations/animations-parsing-expected.txt
@@ -746,10 +746,10 @@ PASS computedStyle.animation is 'none 0s ease 0s 1 normal none running' PASS style.webkitAnimation is '' PASS computedStyle.webkitAnimation is 'none 0s ease 0s 1 normal none running' -PASS style.animation is '' -PASS computedStyle.animation is 'none 0s ease 0s 1 normal none running' -PASS style.webkitAnimation is '' -PASS computedStyle.webkitAnimation is 'none 0s ease 0s 1 normal none running' +PASS style.animation is 'default 2' +PASS computedStyle.animation is 'default 0s ease 0s 2 normal none running' +PASS style.webkitAnimation is 'default 2' +PASS computedStyle.webkitAnimation is 'default 0s ease 0s 2 normal none running' PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/animations/animations-parsing.html b/third_party/WebKit/LayoutTests/animations/animations-parsing.html index ef3b6c6..07d9673 100644 --- a/third_party/WebKit/LayoutTests/animations/animations-parsing.html +++ b/third_party/WebKit/LayoutTests/animations/animations-parsing.html
@@ -1152,10 +1152,10 @@ shouldBe("computedStyle.webkitAnimation", "'none 0s ease 0s 1 normal none running'"); style.animation = "2 default"; -shouldBe("style.animation", "''"); -shouldBe("computedStyle.animation", "'none 0s ease 0s 1 normal none running'"); -shouldBe("style.webkitAnimation", "''"); -shouldBe("computedStyle.webkitAnimation", "'none 0s ease 0s 1 normal none running'"); +shouldBe("style.animation", "'default 2'"); +shouldBe("computedStyle.animation", "'default 0s ease 0s 2 normal none running'"); +shouldBe("style.webkitAnimation", "'default 2'"); +shouldBe("computedStyle.webkitAnimation", "'default 0s ease 0s 2 normal none running'"); // FIXME : https://code.google.com/p/chromium/issues/detail?id=273092 /*style.animation = "ease-in ease-otu 5s";
diff --git a/third_party/WebKit/LayoutTests/animations/custom-properties/custom-ident-type-interpolation.html b/third_party/WebKit/LayoutTests/animations/custom-properties/custom-ident-type-interpolation.html new file mode 100644 index 0000000..e496a9d --- /dev/null +++ b/third_party/WebKit/LayoutTests/animations/custom-properties/custom-ident-type-interpolation.html
@@ -0,0 +1,50 @@ +<!DOCTYPE html> +<meta charset="UTF-8"> +<style> +.parent { + --ident: parent; +} +.target { + --ident: underlying; +} +</style> +<body> +<script src="../interpolation/resources/interpolation-test.js"></script> +<script> +CSS.registerProperty({ + name: '--ident', + syntax: '<custom-ident>', + initialValue: 'initial-value', +}); + +assertNoInterpolation({ + property: '--ident', + from: neutralKeyframe, + to: 'hello', +}); + +assertNoInterpolation({ + property: '--ident', + from: 'initial', + to: 'hello', +}); + +assertNoInterpolation({ + property: '--ident', + from: 'inherit', + to: 'hello', +}); + +assertNoInterpolation({ + property: '--ident', + from: 'unset', + to: 'hello', +}); + +assertNoInterpolation({ + property: '--ident', + from: 'apple', + to: 'banana', +}); +</script> +</body>
diff --git a/third_party/WebKit/LayoutTests/animations/custom-properties/ident-type-interpolation.html b/third_party/WebKit/LayoutTests/animations/custom-properties/ident-type-interpolation.html new file mode 100644 index 0000000..a2301d53 --- /dev/null +++ b/third_party/WebKit/LayoutTests/animations/custom-properties/ident-type-interpolation.html
@@ -0,0 +1,50 @@ +<!DOCTYPE html> +<meta charset="UTF-8"> +<style> +.parent { + --ident: parent; +} +.target { + --ident: underlying; +} +</style> +<body> +<script src="../interpolation/resources/interpolation-test.js"></script> +<script> +CSS.registerProperty({ + name: '--ident', + syntax: 'parent | underlying | initial-value | hello | apple | banana', + initialValue: 'initial-value', +}); + +assertNoInterpolation({ + property: '--ident', + from: neutralKeyframe, + to: 'hello', +}); + +assertNoInterpolation({ + property: '--ident', + from: 'initial', + to: 'hello', +}); + +assertNoInterpolation({ + property: '--ident', + from: 'inherit', + to: 'hello', +}); + +assertNoInterpolation({ + property: '--ident', + from: 'unset', + to: 'hello', +}); + +assertNoInterpolation({ + property: '--ident', + from: 'apple', + to: 'banana', +}); +</script> +</body>
diff --git a/third_party/WebKit/LayoutTests/animations/custom-properties/integer-type-interpolation.html b/third_party/WebKit/LayoutTests/animations/custom-properties/integer-type-interpolation.html new file mode 100644 index 0000000..d8ea3101 --- /dev/null +++ b/third_party/WebKit/LayoutTests/animations/custom-properties/integer-type-interpolation.html
@@ -0,0 +1,94 @@ +<!DOCTYPE html> +<meta charset="UTF-8"> +<style> +.parent { + --integer: 30; +} +.target { + --integer: 10; +} +</style> +<body> +<script src="../interpolation/resources/interpolation-test.js"></script> +<script> +CSS.registerProperty({ + name: '--integer', + syntax: '<integer>', + initialValue: '40', +}); + +assertInterpolation({ + property: '--integer', + from: neutralKeyframe, + to: '20', +}, [ + {at: -0.3, is: '7'}, + {at: 0, is: '10'}, + {at: 0.5, is: '15'}, + {at: 1, is: '20'}, + {at: 1.5, is: '25'}, +]); + +assertInterpolation({ + property: '--integer', + from: 'initial', + to: '20', +}, [ + {at: -0.3, is: '46'}, + {at: 0, is: '40'}, + {at: 0.5, is: '30'}, + {at: 1, is: '20'}, + {at: 1.5, is: '10'}, +]); + +assertInterpolation({ + property: '--integer', + from: 'inherit', + to: '20', +}, [ + {at: -0.3, is: '33'}, + {at: 0, is: '30'}, + {at: 0.5, is: '25'}, + {at: 1, is: '20'}, + {at: 1.5, is: '15'}, +]); + +assertInterpolation({ + property: '--integer', + from: 'unset', + to: '20', +}, [ + {at: -0.3, is: '46'}, + {at: 0, is: '40'}, + {at: 0.5, is: '30'}, + {at: 1, is: '20'}, + {at: 1.5, is: '10'}, +]); + +assertInterpolation({ + property: '--integer', + from: '-10', + to: '10', +}, [ + {at: -0.3, is: '-16'}, + {at: 0, is: '-10'}, + {at: 0.5, is: '0'}, + {at: 1, is: '10'}, + {at: 1.5, is: '20'} +]); + +assertInterpolation({ + property: '--integer', + from: '10', + to: '15', +}, [ + {at: -0.3, is: '9'}, + {at: 0, is: '10'}, + {at: 0.25, is: '11'}, + {at: 0.5, is: '13'}, + {at: 0.75, is: '14'}, + {at: 1, is: '15'}, + {at: 1.5, is: '18'} +]); +</script> +</body>
diff --git a/third_party/WebKit/LayoutTests/animations/custom-properties/number-type-interpolation.html b/third_party/WebKit/LayoutTests/animations/custom-properties/number-type-interpolation.html index 051ae16..82cb976e 100644 --- a/third_party/WebKit/LayoutTests/animations/custom-properties/number-type-interpolation.html +++ b/third_party/WebKit/LayoutTests/animations/custom-properties/number-type-interpolation.html
@@ -76,5 +76,19 @@ {at: 1, is: '10'}, {at: 1.5, is: '20'} ]); + +assertInterpolation({ + property: '--number', + from: '10', + to: '15', +}, [ + {at: -0.3, is: '8.5'}, + {at: 0, is: '10'}, + {at: 0.25, is: '11.25'}, + {at: 0.5, is: '12.5'}, + {at: 0.75, is: '13.75'}, + {at: 1, is: '15'}, + {at: 1.5, is: '17.5'} +]); </script> </body>
diff --git a/third_party/WebKit/LayoutTests/animations/custom-properties/token-stream-type-interpolation.html b/third_party/WebKit/LayoutTests/animations/custom-properties/token-stream-type-interpolation.html new file mode 100644 index 0000000..b9f43a21 --- /dev/null +++ b/third_party/WebKit/LayoutTests/animations/custom-properties/token-stream-type-interpolation.html
@@ -0,0 +1,50 @@ +<!DOCTYPE html> +<meta charset="UTF-8"> +<style> +.parent { + --token-stream: parent tokens; +} +.target { + --token-stream: underlying tokens; +} +</style> +<body> +<script src="../interpolation/resources/interpolation-test.js"></script> +<script> +CSS.registerProperty({ + name: '--token-stream', + syntax: '*', + initialValue: 'initial tokens', +}); + +assertNoInterpolation({ + property: '--token-stream', + from: neutralKeyframe, + to: 'value tokens', +}); + +assertNoInterpolation({ + property: '--token-stream', + from: 'initial', + to: 'value tokens', +}); + +assertNoInterpolation({ + property: '--token-stream', + from: 'inherit', + to: 'value tokens', +}); + +assertNoInterpolation({ + property: '--ident', + from: 'unset', + to: 'value tokens', +}); + +assertNoInterpolation({ + property: '--token-stream', + from: 'a b c d', + to: 'e f g h', +}); +</script> +</body>
diff --git a/third_party/WebKit/LayoutTests/animations/custom-properties/url-type-interpolation.html b/third_party/WebKit/LayoutTests/animations/custom-properties/url-type-interpolation.html new file mode 100644 index 0000000..5650a0b --- /dev/null +++ b/third_party/WebKit/LayoutTests/animations/custom-properties/url-type-interpolation.html
@@ -0,0 +1,50 @@ +<!DOCTYPE html> +<meta charset="UTF-8"> +<style> +.parent { + --url: url('http://parent.txt'); +} +.target { + --url: url('http://underlying.txt'); +} +</style> +<body> +<script src="../interpolation/resources/interpolation-test.js"></script> +<script> +CSS.registerProperty({ + name: '--url', + syntax: '<url>', + initialValue: "url('http://initial.txt')", +}); + +assertNoInterpolation({ + property: '--url', + from: neutralKeyframe, + to: "url('http://value.txt')", +}); + +assertNoInterpolation({ + property: '--url', + from: 'initial', + to: "url('http://value.txt')", +}); + +assertNoInterpolation({ + property: '--url', + from: 'inherit', + to: "url('http://value.txt')", +}); + +assertNoInterpolation({ + property: '--url', + from: 'unset', + to: "url('http://value.txt')", +}); + +assertNoInterpolation({ + property: '--url', + from: "url('http://a.txt')", + to: "url('http://b.txt')", +}); +</script> +</body>
diff --git a/third_party/WebKit/LayoutTests/animations/interpolation/resources/interpolation-test.js b/third_party/WebKit/LayoutTests/animations/interpolation/resources/interpolation-test.js index 3f98f56..06c752a 100644 --- a/third_party/WebKit/LayoutTests/animations/interpolation/resources/interpolation-test.js +++ b/third_party/WebKit/LayoutTests/animations/interpolation/resources/interpolation-test.js
@@ -86,8 +86,8 @@ } cssAnimationsData.sharedStyle.textContent += '' + '@keyframes animation' + id + ' {' + - (isNeutralKeyframe(from) ? '' : `from {${property}: ${from};}`) + - (isNeutralKeyframe(to) ? '' : `to {${property}: ${to};}`) + + (isNeutralKeyframe(from) ? '' : `from {${property}:${from};}`) + + (isNeutralKeyframe(to) ? '' : `to {${property}:${to};}`) + '}'; target.style.animationName = 'animation' + id; target.style.animationDuration = '2e10s'; @@ -323,7 +323,9 @@ return expectations.map(function(expectation) { var actualTargetContainer = createTargetContainer(testContainer, 'actual'); var expectedTargetContainer = createTargetContainer(testContainer, 'expected'); - expectedTargetContainer.target.style.setProperty(property, expectation.is); + if (!isNeutralKeyframe(expectation.is)) { + expectedTargetContainer.target.style.setProperty(property, expectation.is); + } var target = actualTargetContainer.target; interpolationMethod.setup(property, from, target); target.interpolate = function() {
diff --git a/third_party/WebKit/LayoutTests/custom-properties/register-property-syntax-parsing-expected.txt b/third_party/WebKit/LayoutTests/custom-properties/register-property-syntax-parsing-expected.txt index 82b34541..604e4dab 100644 --- a/third_party/WebKit/LayoutTests/custom-properties/register-property-syntax-parsing-expected.txt +++ b/third_party/WebKit/LayoutTests/custom-properties/register-property-syntax-parsing-expected.txt
@@ -51,6 +51,7 @@ PASS syntax:'<custom-ident>', initialValue:'banan\61' is valid PASS syntax:'big | bigger | BIGGER', initialValue:'bigger' is valid PASS syntax:'foo+|bar', initialValue:'foo foo foo' is valid +PASS syntax:'default', initialValue:'default' is valid PASS syntax:'banana ', initialValue:'banana' is valid PASS syntax:' banana\r @@ -75,9 +76,11 @@ PASS syntax:'*|banana', initialValue:'banana' is invalid PASS syntax:'*+', initialValue:'banana' is invalid PASS syntax:'initial', initialValue:'initial' is invalid +PASS syntax:'inherit', initialValue:'inherit' is invalid +PASS syntax:'unset', initialValue:'unset' is invalid PASS syntax:'<length>|initial', initialValue:'10px' is invalid PASS syntax:'<length>|INHERIT', initialValue:'10px' is invalid -PASS syntax:'<percentage>|defAult', initialValue:'2%' is invalid +PASS syntax:'<percentage>|unsEt', initialValue:'2%' is invalid PASS syntax:'*', initialValue:'initial' is invalid PASS syntax:'*', initialValue:'inherit' is invalid PASS syntax:'*', initialValue:'unset' is invalid
diff --git a/third_party/WebKit/LayoutTests/custom-properties/register-property-syntax-parsing.html b/third_party/WebKit/LayoutTests/custom-properties/register-property-syntax-parsing.html index 66be587c..127bef3 100644 --- a/third_party/WebKit/LayoutTests/custom-properties/register-property-syntax-parsing.html +++ b/third_party/WebKit/LayoutTests/custom-properties/register-property-syntax-parsing.html
@@ -78,6 +78,7 @@ assert_valid("<custom-ident>", "banan\\61"); assert_valid("big | bigger | BIGGER", "bigger"); assert_valid("foo+|bar", "foo foo foo"); +assert_valid("default", "default"); assert_valid("banana\t", "banana"); assert_valid("\nbanana\r\n", "banana"); @@ -105,9 +106,11 @@ assert_invalid("*+", "banana"); assert_invalid("initial", "initial"); +assert_invalid("inherit", "inherit"); +assert_invalid("unset", "unset"); assert_invalid("<length>|initial", "10px"); assert_invalid("<length>|INHERIT", "10px"); -assert_invalid("<percentage>|defAult", "2%"); +assert_invalid("<percentage>|unsEt", "2%"); // Invalid initialValue assert_invalid("*", "initial");
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-childNodeCount-expected.txt b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-childNodeCount-expected.txt index 8fa5a834..bc68f00 100644 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-childNodeCount-expected.txt +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-childNodeCount-expected.txt
@@ -1,3 +1,4 @@ + Node arrived with childNodeCount: 2 childCountUpdated: 3 childCountUpdated: 2
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-childNodeCount.html b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-childNodeCount.html deleted file mode 100644 index 1318d1a..0000000 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-childNodeCount.html +++ /dev/null
@@ -1,69 +0,0 @@ -<html> -<head> -<script type="text/javascript" src="../../http/tests/inspector-protocol/resources/inspector-protocol-test.js"></script> -<script> - -function addNode() -{ - var container = document.getElementById("container"); - container.appendChild(document.createElement("div")); -} - -function removeNode() -{ - var container = document.getElementById("container"); - container.firstChild.remove(); -} - -function test() -{ - var nodeInfo = {}; - var containerNodeId; - InspectorTest.eventHandler["DOM.setChildNodes"] = setChildNodes; - InspectorTest.eventHandler["DOM.childNodeCountUpdated"] = childNodeCountUpdated; - - InspectorTest.sendCommand("DOM.getDocument", {}, onGotDocument); - - function onGotDocument(msg) - { - if (InspectorTest.completeTestIfError(msg)) - return; - InspectorTest.sendCommand("DOM.querySelector", { nodeId: msg.result.root.nodeId, selector: "#container" }, onQuerySelector); - } - - function onQuerySelector(msg) - { - if (InspectorTest.completeTestIfError(msg)) - return; - containerNodeId = msg.result.nodeId; - InspectorTest.log("Node arrived with childNodeCount: " + nodeInfo[containerNodeId].childNodeCount); - - InspectorTest.sendCommand("Runtime.evaluate", { expression: "addNode()"}); - InspectorTest.sendCommand("Runtime.evaluate", { expression: "removeNode()"}); - InspectorTest.sendCommand("Runtime.evaluate", { expression: "removeNode()"}); - InspectorTest.sendCommand("Runtime.evaluate", { expression: "removeNode()"}, - InspectorTest.completeTest.bind(InspectorTest)); - } - - function setChildNodes(message) - { - var nodes = message.params.nodes; - for (var i = 0; i < nodes.length; ++i) { - nodeInfo[nodes[i].nodeId] = nodes[i]; - delete nodes[i].nodeId; - } - } - - function childNodeCountUpdated(message) - { - if (message.params.nodeId === containerNodeId) - InspectorTest.log("childCountUpdated: " + message.params.childNodeCount); - } -} - -</script> -</head> -<body onload="runTest()"> -<div id="container" style="display:none"><div>child1</div><div>child2</div></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-childNodeCount.js b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-childNodeCount.js new file mode 100644 index 0000000..87a82d9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-childNodeCount.js
@@ -0,0 +1,35 @@ +(async function(testRunner) { + var {page, session, dp} = await testRunner.startHTML(` + <div id='container' style='display:none'><div>child1</div><div>child2</div></div> + `, ''); + var NodeTracker = await testRunner.loadScript('../resources/node-tracker.js'); + var nodeTracker = new NodeTracker(dp); + var containerNodeId; + dp.DOM.onChildNodeCountUpdated(message => { + if (message.params.nodeId === containerNodeId) + testRunner.log('childCountUpdated: ' + message.params.childNodeCount); + }); + var response = await dp.DOM.getDocument(); + var message = await dp.DOM.querySelector({nodeId: response.result.root.nodeId, selector: '#container' }); + + containerNodeId = message.result.nodeId; + testRunner.log('Node arrived with childNodeCount: ' + nodeTracker.nodeForId(containerNodeId).childNodeCount); + + await Promise.all([ + session.evaluate(addNode), + session.evaluate(removeNode), + session.evaluate(removeNode), + session.evaluate(removeNode), + ]); + testRunner.completeTest(); + + function addNode() { + var container = document.getElementById('container'); + container.appendChild(document.createElement('div')); + } + + function removeNode() { + var container = document.getElementById('container'); + container.firstChild.remove(); + } +})
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-collect-class-names-expected.txt b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-collect-class-names-expected.txt index 36f5099b..7eb410f 100644 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-collect-class-names-expected.txt +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-collect-class-names-expected.txt
@@ -1,3 +1,4 @@ + All class names: body-class class1
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-collect-class-names.html b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-collect-class-names.html deleted file mode 100644 index 6faae1b1..0000000 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-collect-class-names.html +++ /dev/null
@@ -1,71 +0,0 @@ -<html> -<head> -<script type="text/javascript" src="../../http/tests/inspector-protocol/resources/inspector-protocol-test.js"></script> -<script> - -function test() -{ - var rootNode; - var classNames= []; - - InspectorTest.sendCommand("DOM.getDocument", {}, onGotDocument); - InspectorTest.sendCommand("DOM.enable", {}); - InspectorTest.eventHandler["DOM.setChildNodes"] = setChildNodes; - - function onGotDocument(msg) - { - rootNode = msg.result.root; - InspectorTest.sendCommandOrDie("DOM.collectClassNamesFromSubtree", { nodeId: rootNode.nodeId }, onClassNamesCollected); - } - - function collectClassNamesFromSubtree() - { - InspectorTest.sendCommand("DOM.requestChildNodes", { nodeId: rootNode.children[0].children[1].nodeId }, null); - } - - function setChildNodes(response) - { - var nodes = response.params.nodes; - InspectorTest.sendCommandOrDie("DOM.collectClassNamesFromSubtree", { nodeId: nodes[1].nodeId }, onSubtreeClassNamesCollected); - } - - function onSubtreeClassNamesCollected(response) - { - var subtreeClassNames = response.classNames.sort(); - InspectorTest.log("All class names: "); - for (var i = 0; i < classNames.length; i++) - InspectorTest.log(classNames[i]); - InspectorTest.log("Subtree class names: "); - for (var i = 0; i < subtreeClassNames.length; i++) - InspectorTest.log(subtreeClassNames[i]); - - InspectorTest.completeTest(); - } - - function onClassNamesCollected(response) - { - classNames = response.classNames.sort(); - collectClassNamesFromSubtree(); - } -} - -</script> -</head> -<body class="body-class"> -<div class="class1"></div> -<div class="class2"> - <ul class="class3"> - <li class="class4"></li> - </ul> -</div> -<div class="class5 class6"></div> -<div id="shadow-host"></div> -<script type="text/javascript"> - var host = document.querySelector("#shadow-host"); - var root = host.createShadowRoot(); - root.innerHTML = "<div class=\"shadow-class\"></div>"; - runTest(); -</script> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-collect-class-names.js b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-collect-class-names.js new file mode 100644 index 0000000..7ae0e31 --- /dev/null +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-collect-class-names.js
@@ -0,0 +1,43 @@ +(async function(testRunner) { + var {page, session, dp} = await testRunner.startHTML(` + <body class='body-class'> + <div class='class1'></div> + <div class='class2'> + <ul class='class3'> + <li class='class4'></li> + </ul> + </div> + <div class='class5 class6'></div> + <div id='shadow-host'></div> + </body> + `, ''); + + await session.evaluate(() => { + var host = document.querySelector('#shadow-host'); + var root = host.createShadowRoot(); + root.innerHTML = '<div class="shadow-class"></div>'; + }); + + dp.DOM.enable(); + var response = await dp.DOM.getDocument(); + var rootNode = response.result.root; + dp.DOM.collectClassNamesFromSubtree({nodeId: rootNode.nodeId}); + + var response = await dp.DOM.collectClassNamesFromSubtree({nodeId: rootNode.nodeId}); + var allClassNames = response.result.classNames; + allClassNames.sort(); + dp.DOM.requestChildNodes({nodeId: rootNode.children[0].children[1].nodeId}); + + var message = await dp.DOM.onceSetChildNodes(); + var nodes = message.params.nodes; + var response = await dp.DOM.collectClassNamesFromSubtree({nodeId: nodes[1].nodeId}); + var subtreeClassNames = response.result.classNames.sort(); + testRunner.log('All class names: '); + for (var i = 0; i < allClassNames.length; i++) + testRunner.log(allClassNames[i]); + testRunner.log('Subtree class names: '); + for (var i = 0; i < subtreeClassNames.length; i++) + testRunner.log(subtreeClassNames[i]); + testRunner.completeTest(); +}) +
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-focus-expected.txt b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-focus-expected.txt index 3c1a44e6..7eb2762 100644 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-focus-expected.txt +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-focus-expected.txt
@@ -1,4 +1,4 @@ - + BODY second
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-focus.html b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-focus.html deleted file mode 100644 index f2b7831..0000000 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-focus.html +++ /dev/null
@@ -1,52 +0,0 @@ -<html> -<head> -<script type="text/javascript" src="../../http/tests/inspector-protocol/resources/inspector-protocol-test.js"></script> -<script> - -function logActiveElement() { - var el = document.activeElement; - log(el ? (el.id || el.tagName) : "(none)"); -} - -function test() -{ - InspectorTest.sendCommand("Runtime.evaluate", { "expression": "logActiveElement()" }); - - InspectorTest.sendCommand("DOM.getDocument", {}, onGotDocument); - - function onGotDocument(msg) { - if (msg.error) { - InspectorTest.log(msg.error.message); - InspectorTest.completeTest(); - return; - } - var node = msg.result.root; - InspectorTest.sendCommand("DOM.querySelector", { "nodeId": node.nodeId, "selector": "#second" }, onQuerySelector); - } - - function onQuerySelector(msg) { - if (msg.error) { - InspectorTest.log(msg.error.message); - InspectorTest.completeTest(); - return; - } - var node = msg.result; - InspectorTest.sendCommand("DOM.focus", { "nodeId": node.nodeId }, onFocus); - } - - function onFocus(msg) { - if (msg.error) - InspectorTest.log(msg.error); - - InspectorTest.sendCommand("Runtime.evaluate", { expression: 'logActiveElement()' }); - InspectorTest.completeTest(); - } -} - -</script> -</head> -<body onload="runTest()"> -<input></input> -<input id="second"></input> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-focus.js b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-focus.js new file mode 100644 index 0000000..b37f2104 --- /dev/null +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-focus.js
@@ -0,0 +1,19 @@ +(async function(testRunner) { + var {page, session, dp} = await testRunner.startHTML(` + <input></input> + <input id='second'></input> + `, ''); + + testRunner.log(await session.evaluate(getActiveElement)); + var document = (await dp.DOM.getDocument()).result.root; + var node = (await dp.DOM.querySelector({nodeId: document.nodeId, selector: '#second'})).result; + await dp.DOM.focus({nodeId: node.nodeId}); + testRunner.log(await session.evaluate(getActiveElement)); + testRunner.completeTest(); + + function getActiveElement() { + var el = document.activeElement; + return el ? (el.id || el.tagName) : '(none)'; + } +}) +
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getBoxModel-expected.txt b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getBoxModel-expected.txt index d8b52ab..ee0c60e 100644 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getBoxModel-expected.txt +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getBoxModel-expected.txt
@@ -1,8 +1,5 @@ -Several -Lines -Of -Text - #text: Could not compute box model. + +#text: Could not compute box model. BR: Could not compute box model. #text: Could not compute box model. BR: Could not compute box model.
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getBoxModel.html b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getBoxModel.html deleted file mode 100644 index 585822b..0000000 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getBoxModel.html +++ /dev/null
@@ -1,65 +0,0 @@ -<html> -<head> -<script type="text/javascript" src="../../http/tests/inspector-protocol/resources/inspector-protocol-test.js"></script> -<script> - -function test() -{ - var nodeInfo = {}; - InspectorTest.eventHandler["DOM.setChildNodes"] = setChildNodes; - InspectorTest.sendCommand("DOM.enable", {}); - InspectorTest.sendCommand("DOM.getNodeForLocation", { "x": 100, "y": 200 }, onGetNodeForLocation); - - function onGetNodeForLocation(message) - { - if (message.error) { - InspectorTest.log(message.error.message); - InspectorTest.completeTest(); - return; - } - var ids = Object.keys(nodeInfo); - for (var i = 0; i < ids.length; ++i) - ids[i] = parseInt(ids[i]); - ids.sort(function(a, b) { return a < b ? -1 : (a === b ? 0 : 1); }); - // Skip first - it does not have round values. - for (var i = 1; i < ids.length; ++i) - InspectorTest.sendCommand("DOM.getBoxModel", { "nodeId": ids[i] }, printBoxModel.bind(null, nodeInfo[ids[i]], i == ids.length - 1)); - } - - function printBoxModel(nodeInfo, lastNode, message) - { - if (message.error) { - InspectorTest.log(nodeInfo.nodeName + ": " + message.error.message); - if (lastNode) - InspectorTest.completeTest(); - return; - } - InspectorTest.logObject(message.result.model.content, nodeInfo.nodeName + " " + nodeInfo.attributes + " "); - if (lastNode) - InspectorTest.completeTest(); - } - - function setChildNodes(message) - { - var nodes = message.params.nodes; - for (var i = 0; i < nodes.length; ++i) { - nodeInfo[nodes[i].nodeId] = nodes[i]; - delete nodes[i].nodeId; - } - } -} - -</script> -</head> -<body onload="runTest()"> -<div> -Several<br> -Lines<br> -Of<br> -Text<br> -<div style="position:absolute;top:100;left:0;width:100;height:100;background:red"></div> -<div style="position:absolute;top:200;left:100;width:100;height:100;background:green"></div> -<div style="position:absolute;top:150;left:50;width:100;height:100;background:blue;transform:rotate(45deg);"></div> -</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getBoxModel.js b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getBoxModel.js new file mode 100644 index 0000000..355a27f --- /dev/null +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getBoxModel.js
@@ -0,0 +1,26 @@ +(async function(testRunner) { + var {page, session, dp} = await testRunner.startHTML(` + Several<br> + Lines<br> + Of<br> + Text<br> + <div style='position:absolute;top:100;left:0;width:100;height:100;background:red'></div> + <div style='position:absolute;top:200;left:100;width:100;height:100;background:green'></div> + <div style='position:absolute;top:150;left:50;width:100;height:100;background:blue;transform:rotate(45deg);'></div> + `, ''); + var NodeTracker = await testRunner.loadScript('../resources/node-tracker.js'); + var nodeTracker = new NodeTracker(dp); + dp.DOM.enable(); + await dp.DOM.getNodeForLocation({x: 100, y: 200}); + + for (var nodeId of nodeTracker.nodeIds()) { + var message = await dp.DOM.getBoxModel({nodeId}); + var node = nodeTracker.nodeForId(nodeId); + if (message.error) + testRunner.log(node.nodeName + ': ' + message.error.message); + else + testRunner.logObject(message.result.model.content, node.nodeName + ' ' + node.attributes + ' '); + } + testRunner.completeTest(); +}) +
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getEventListeners-expected.txt b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getEventListeners-expected.txt index f9c92dc..d64df28 100644 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getEventListeners-expected.txt +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getEventListeners-expected.txt
@@ -1,147 +1,144 @@ -A -B -C Fetching listeners for depth = undefined and pierce = undefined { - "listeners": [ - { - "type": "documentListener", - "useCapture": false, - "passive": false, - "once": false, - "scriptId": "<string>", - "lineNumber": "<number>", - "columnNumber": "<number>" - } - ] + listeners : [ + [0] : { + columnNumber : 50 + lineNumber : 8 + once : false + passive : false + scriptId : <scriptId> + type : documentListener + useCapture : false + } + ] } Fetching listeners for depth = 1 and pierce = undefined { - "listeners": [ - { - "type": "documentListener", - "useCapture": false, - "passive": false, - "once": false, - "scriptId": "<string>", - "lineNumber": "<number>", - "columnNumber": "<number>" - } - ] + listeners : [ + [0] : { + columnNumber : 50 + lineNumber : 8 + once : false + passive : false + scriptId : <scriptId> + type : documentListener + useCapture : false + } + ] } Fetching listeners for depth = 4 and pierce = undefined { - "listeners": [ - { - "type": "documentListener", - "useCapture": false, - "passive": false, - "once": false, - "scriptId": "<string>", - "lineNumber": "<number>", - "columnNumber": "<number>" - }, - { - "type": "listenerA", - "useCapture": false, - "passive": false, - "once": false, - "scriptId": "<string>", - "lineNumber": "<number>", - "columnNumber": "<number>" - } - ] + listeners : [ + [0] : { + columnNumber : 50 + lineNumber : 8 + once : false + passive : false + scriptId : <scriptId> + type : documentListener + useCapture : false + } + [1] : { + columnNumber : 63 + lineNumber : 5 + once : false + passive : false + scriptId : <scriptId> + type : listenerA + useCapture : false + } + ] } Fetching listeners for depth = -1 and pierce = undefined { - "listeners": [ - { - "type": "documentListener", - "useCapture": false, - "passive": false, - "once": false, - "scriptId": "<string>", - "lineNumber": "<number>", - "columnNumber": "<number>" - }, - { - "type": "listenerA", - "useCapture": false, - "passive": false, - "once": false, - "scriptId": "<string>", - "lineNumber": "<number>", - "columnNumber": "<number>" - }, - { - "type": "listenerB", - "useCapture": false, - "passive": false, - "once": false, - "scriptId": "<string>", - "lineNumber": "<number>", - "columnNumber": "<number>" - }, - { - "type": "listenerC", - "useCapture": false, - "passive": false, - "once": false, - "scriptId": "<string>", - "lineNumber": "<number>", - "columnNumber": "<number>" - } - ] + listeners : [ + [0] : { + columnNumber : 50 + lineNumber : 8 + once : false + passive : false + scriptId : <scriptId> + type : documentListener + useCapture : false + } + [1] : { + columnNumber : 63 + lineNumber : 5 + once : false + passive : false + scriptId : <scriptId> + type : listenerA + useCapture : false + } + [2] : { + columnNumber : 63 + lineNumber : 6 + once : false + passive : false + scriptId : <scriptId> + type : listenerB + useCapture : false + } + [3] : { + columnNumber : 63 + lineNumber : 7 + once : false + passive : false + scriptId : <scriptId> + type : listenerC + useCapture : false + } + ] } Fetching listeners for depth = -1 and pierce = true { - "listeners": [ - { - "type": "documentListener", - "useCapture": false, - "passive": false, - "once": false, - "scriptId": "<string>", - "lineNumber": "<number>", - "columnNumber": "<number>" - }, - { - "type": "listenerA", - "useCapture": false, - "passive": false, - "once": false, - "scriptId": "<string>", - "lineNumber": "<number>", - "columnNumber": "<number>" - }, - { - "type": "listenerB", - "useCapture": false, - "passive": false, - "once": false, - "scriptId": "<string>", - "lineNumber": "<number>", - "columnNumber": "<number>" - }, - { - "type": "listenerC", - "useCapture": false, - "passive": false, - "once": false, - "scriptId": "<string>", - "lineNumber": "<number>", - "columnNumber": "<number>" - }, - { - "type": "iframeListener", - "useCapture": false, - "passive": false, - "once": false, - "scriptId": "<string>", - "lineNumber": "<number>", - "columnNumber": "<number>" - } - ] + listeners : [ + [0] : { + columnNumber : 50 + lineNumber : 8 + once : false + passive : false + scriptId : <scriptId> + type : documentListener + useCapture : false + } + [1] : { + columnNumber : 63 + lineNumber : 5 + once : false + passive : false + scriptId : <scriptId> + type : listenerA + useCapture : false + } + [2] : { + columnNumber : 63 + lineNumber : 6 + once : false + passive : false + scriptId : <scriptId> + type : listenerB + useCapture : false + } + [3] : { + columnNumber : 63 + lineNumber : 7 + once : false + passive : false + scriptId : <scriptId> + type : listenerC + useCapture : false + } + [4] : { + columnNumber : 73 + lineNumber : 6 + once : false + passive : false + scriptId : <scriptId> + type : iframeListener + useCapture : false + } + ] }
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getEventListeners.html b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getEventListeners.html deleted file mode 100644 index 93df54a..0000000 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getEventListeners.html +++ /dev/null
@@ -1,74 +0,0 @@ -<html> -<head> -<script type="text/javascript" src="../../http/tests/inspector-protocol/resources/inspector-protocol-test.js"></script> -<script> - -function test() -{ - var objectId; - InspectorTest.sendCommand("DOM.enable", {}); - InspectorTest.sendCommand("Runtime.enable", {}); - InspectorTest.sendCommand("DOMDebugger.enable", {}); - InspectorTest.sendCommandPromise("Runtime.evaluate", { expression: "document" }) - .then((result) => { objectId = result.result.result.objectId }) - .then(() => dumpListeners(objectId)) - .then(() => dumpListeners(objectId, 1)) - .then(() => dumpListeners(objectId, 4)) - .then(() => dumpListeners(objectId, -1)) - .then(() => dumpListeners(objectId, -1, true)) - .then(() => InspectorTest.completeTest()); - - function dumpListeners(objectId, depth, pierce) { - var params = {objectId : objectId}; - if (depth) - params.depth = depth; - if (pierce !== undefined) - params.pierce = pierce; - InspectorTest.log(`Fetching listeners for depth = ${depth} and pierce = ${pierce}`); - return InspectorTest.sendCommandPromise("DOMDebugger.getEventListeners", params).then((result) => logResponse(result.result)); - } - - function stabilize(key, value) { - var unstableKeys = ["scriptId", "lineNumber", "columnNumber"]; - if (unstableKeys.indexOf(key) !== -1) - return "<" + typeof(value) + ">"; - return value; - } - - function logResponse(response) { - InspectorTest.log(JSON.stringify(response, stabilize, 2)); - } -} - -</script> -<template id="shadow-template" onclick="clickTemplate"> -<style> -:host { - color: red; -} -</style> -<div></div><h1>Hi from a template!</h1></div> -</template> -</head> -<body class="body-class" onload="runTest()"> - <div id="A"> A - <div id="B"> B - <div id="C"> C - </div> - </div> - </div> - - <iframe src="../dom/resources/iframe-with-listener.html" width="400" height="200"></iframe> - <div id="shadow-host"></div> - <script type="text/javascript"> - var host = document.querySelector("#shadow-host").createShadowRoot(); - var template = document.querySelector("#shadow-template"); - host.appendChild(template.content); - template.remove(); - document.getElementById("A").addEventListener("listenerA", () => {}); - document.getElementById("B").addEventListener("listenerB", () => {}); - document.getElementById("C").addEventListener("listenerC", () => {}); - document.addEventListener("documentListener", () => {}); - </script> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getEventListeners.js b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getEventListeners.js new file mode 100644 index 0000000..77d57ef --- /dev/null +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getEventListeners.js
@@ -0,0 +1,53 @@ +(async function(testRunner) { + var {page, session, dp} = await testRunner.startHTML(` + <template id='shadow-template' onclick='clickTemplate'> + <style> + :host { + color: red; + } + </style> + <div></div><h1>Hi from a template!</h1></div> + </template> + </head> + <body class='body-class' onload='runTest()'> + <div id='A'> A + <div id='B'> B + <div id='C'> C + </div> + </div> + </div> + + <iframe src='../dom/resources/iframe-with-listener.html' width='400' height='200'></iframe> + <div id='shadow-host'></div> + </body> + `, ''); + + await session.evaluate(() => { + var host = document.querySelector('#shadow-host').createShadowRoot(); + var template = document.querySelector('#shadow-template'); + host.appendChild(template.content); + template.remove(); + document.getElementById('A').addEventListener('listenerA', () => {}); + document.getElementById('B').addEventListener('listenerB', () => {}); + document.getElementById('C').addEventListener('listenerC', () => {}); + document.addEventListener('documentListener', () => {}); + }); + + dp.DOM.enable(); + dp.Runtime.enable(); + var result = await dp.Runtime.evaluate({expression: 'document'}); + var objectId = result.result.result.objectId; + + await dumpListeners(objectId); + await dumpListeners(objectId, 1); + await dumpListeners(objectId, 4); + await dumpListeners(objectId, -1); + await dumpListeners(objectId, -1, true); + testRunner.completeTest(); + + async function dumpListeners(objectId, depth, pierce) { + testRunner.log(`Fetching listeners for depth = ${depth} and pierce = ${pierce}`); + var {result} = await dp.DOMDebugger.getEventListeners({objectId, depth, pierce}); + testRunner.logMessage(result); + } +})
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getFlattenedDocument-expected.txt b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getFlattenedDocument-expected.txt index 410ea23..f3872528 100644 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getFlattenedDocument-expected.txt +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getFlattenedDocument-expected.txt
@@ -1,443 +1,406 @@ -A -B -C -D -E { - "nodes": [ - { - "nodeId": 4, - "parentId": 3, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "SCRIPT", - "localName": "script", - "nodeValue": "", - "childNodeCount": 0, - "children": [], - "attributes": [ - "type", - "text/javascript", - "src", - "../../http/tests/inspector-protocol/resources/inspector-protocol-test.js" - ] - }, - { - "nodeId": 6, - "parentId": 5, - "backendNodeId": "<number>", - "nodeType": 3, - "nodeName": "#text", - "localName": "", - "nodeValue": "\n\nfunction test()\n{\n InspectorTest.sendCommand(\"DOM.enable\", {});\n InspectorTest.sendCommandOrDie(\"DOM.getFlattenedDocument\", {\"depth\": -1, \"pierce\": true}, onDocument);\n\n function onDocument(response) {\n function stabilize(key, value) {\n var unstableKeys = [\"backendNodeId\", \"documentURL\", \"baseURL\", \"frameId\"];\n if (unstableKeys.indexOf(key) !== -1)\n return \"<\" + typeof(value) + \">\";\n return value;\n }\n InspectorTest.log(JSON.stringify(response, stabilize, 2));\n InspectorTest.completeTest();\n }\n}\n\n" - }, - { - "nodeId": 5, - "parentId": 3, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "SCRIPT", - "localName": "script", - "nodeValue": "", - "childNodeCount": 1, - "children": [], - "attributes": [] - }, - { - "nodeId": 3, - "parentId": 2, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "HEAD", - "localName": "head", - "nodeValue": "", - "childNodeCount": 2, - "children": [], - "attributes": [] - }, - { - "nodeId": 9, - "parentId": 8, - "backendNodeId": "<number>", - "nodeType": 3, - "nodeName": "#text", - "localName": "", - "nodeValue": " A\n " - }, - { - "nodeId": 11, - "parentId": 10, - "backendNodeId": "<number>", - "nodeType": 3, - "nodeName": "#text", - "localName": "", - "nodeValue": " B\n " - }, - { - "nodeId": 13, - "parentId": 12, - "backendNodeId": "<number>", - "nodeType": 3, - "nodeName": "#text", - "localName": "", - "nodeValue": " C\n " - }, - { - "nodeId": 15, - "parentId": 14, - "backendNodeId": "<number>", - "nodeType": 3, - "nodeName": "#text", - "localName": "", - "nodeValue": " D\n " - }, - { - "nodeId": 17, - "parentId": 16, - "backendNodeId": "<number>", - "nodeType": 3, - "nodeName": "#text", - "localName": "", - "nodeValue": " E\n " - }, - { - "nodeId": 16, - "parentId": 14, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "DIV", - "localName": "div", - "nodeValue": "", - "childNodeCount": 1, - "children": [], - "attributes": [ - "id", - "E" - ] - }, - { - "nodeId": 14, - "parentId": 12, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "DIV", - "localName": "div", - "nodeValue": "", - "childNodeCount": 2, - "children": [], - "attributes": [ - "id", - "D" - ] - }, - { - "nodeId": 12, - "parentId": 10, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "DIV", - "localName": "div", - "nodeValue": "", - "childNodeCount": 2, - "children": [], - "attributes": [ - "id", - "C" - ] - }, - { - "nodeId": 10, - "parentId": 8, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "DIV", - "localName": "div", - "nodeValue": "", - "childNodeCount": 2, - "children": [], - "attributes": [ - "id", - "B" - ] - }, - { - "nodeId": 8, - "parentId": 7, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "DIV", - "localName": "div", - "nodeValue": "", - "childNodeCount": 2, - "children": [], - "attributes": [ - "id", - "A" - ] - }, - { - "nodeId": 23, - "parentId": 22, - "backendNodeId": "<number>", - "nodeType": 3, - "nodeName": "#text", - "localName": "", - "nodeValue": "\n@font-face {\n font-family: 'ahem';\n src: url(../../../resources/Ahem.ttf);\n}\n" - }, - { - "nodeId": 22, - "parentId": 21, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "STYLE", - "localName": "style", - "nodeValue": "", - "childNodeCount": 1, - "children": [], - "attributes": [] - }, - { - "nodeId": 21, - "parentId": 20, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "HEAD", - "localName": "head", - "nodeValue": "", - "childNodeCount": 1, - "children": [], - "attributes": [] - }, - { - "nodeId": 26, - "parentId": 25, - "backendNodeId": "<number>", - "nodeType": 3, - "nodeName": "#text", - "localName": "", - "nodeValue": "\nHello from the iframe.\n" - }, - { - "nodeId": 25, - "parentId": 24, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "DIV", - "localName": "div", - "nodeValue": "", - "childNodeCount": 1, - "children": [], - "attributes": [ - "style", - "font-family: ahem;" - ] - }, - { - "nodeId": 24, - "parentId": 20, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "BODY", - "localName": "body", - "nodeValue": "", - "childNodeCount": 1, - "children": [], - "attributes": [] - }, - { - "nodeId": 20, - "parentId": 19, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "HTML", - "localName": "html", - "nodeValue": "", - "childNodeCount": 2, - "children": [], - "attributes": [], - "frameId": "<string>" - }, - { - "nodeId": 18, - "parentId": 7, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "IFRAME", - "localName": "iframe", - "nodeValue": "", - "childNodeCount": 0, - "children": [], - "attributes": [ - "src", - "../dom/resources/simple-iframe.html", - "width", - "400", - "height", - "200" - ], - "frameId": "<string>", - "contentDocument": { - "nodeId": 19, - "backendNodeId": "<number>", - "nodeType": 9, - "nodeName": "#document", - "localName": "", - "nodeValue": "", - "childNodeCount": 1, - "children": [], - "documentURL": "<string>", - "baseURL": "<string>", - "xmlVersion": "" - } - }, - { - "nodeId": 30, - "parentId": 29, - "backendNodeId": "<number>", - "nodeType": 3, - "nodeName": "#text", - "localName": "", - "nodeValue": "\n:host {\n color: red;\n}\n" - }, - { - "nodeId": 29, - "parentId": 28, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "STYLE", - "localName": "style", - "nodeValue": "", - "childNodeCount": 1, - "children": [], - "attributes": [] - }, - { - "nodeId": 31, - "parentId": 28, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "DIV", - "localName": "div", - "nodeValue": "", - "childNodeCount": 0, - "children": [], - "attributes": [] - }, - { - "nodeId": 33, - "parentId": 32, - "backendNodeId": "<number>", - "nodeType": 3, - "nodeName": "#text", - "localName": "", - "nodeValue": "Hi from a template!" - }, - { - "nodeId": 32, - "parentId": 28, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "H1", - "localName": "h1", - "nodeValue": "", - "childNodeCount": 1, - "children": [], - "attributes": [] - }, - { - "nodeId": 27, - "parentId": 7, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "DIV", - "localName": "div", - "nodeValue": "", - "childNodeCount": 0, - "children": [], - "attributes": [ - "id", - "shadow-host" - ], - "shadowRoots": [ - { - "nodeId": 28, - "backendNodeId": "<number>", - "nodeType": 11, - "nodeName": "#document-fragment", - "localName": "", - "nodeValue": "", - "childNodeCount": 3, - "children": [], - "shadowRootType": "open" + nodes : [ + [0] : { + attributes : [ + ] + backendNodeId : <backendNodeId> + childNodeCount : 0 + children : [ + ] + localName : head + nodeId : <nodeId> + nodeName : HEAD + nodeType : 1 + nodeValue : + parentId : <parentId> } - ] - }, - { - "nodeId": 35, - "parentId": 34, - "backendNodeId": "<number>", - "nodeType": 3, - "nodeName": "#text", - "localName": "", - "nodeValue": "\n var host = document.querySelector(\"#shadow-host\").createShadowRoot();\n var template = document.querySelector(\"#shadow-template\");\n host.appendChild(template.content);\n template.remove();\n window.onload = runTest;\n " - }, - { - "nodeId": 34, - "parentId": 7, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "SCRIPT", - "localName": "script", - "nodeValue": "", - "childNodeCount": 1, - "children": [], - "attributes": [ - "type", - "text/javascript" - ] - }, - { - "nodeId": 7, - "parentId": 2, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "BODY", - "localName": "body", - "nodeValue": "", - "childNodeCount": 4, - "children": [], - "attributes": [ - "class", - "body-class" - ] - }, - { - "nodeId": 2, - "parentId": 1, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "HTML", - "localName": "html", - "nodeValue": "", - "childNodeCount": 2, - "children": [], - "attributes": [], - "frameId": "<string>" - }, - { - "nodeId": 1, - "backendNodeId": "<number>", - "nodeType": 9, - "nodeName": "#document", - "localName": "", - "nodeValue": "", - "childNodeCount": 1, - "children": [], - "documentURL": "<string>", - "baseURL": "<string>", - "xmlVersion": "" - } - ] + [1] : { + backendNodeId : <backendNodeId> + localName : + nodeId : <nodeId> + nodeName : #text + nodeType : 3 + nodeValue : A + parentId : <parentId> + } + [2] : { + backendNodeId : <backendNodeId> + localName : + nodeId : <nodeId> + nodeName : #text + nodeType : 3 + nodeValue : B + parentId : <parentId> + } + [3] : { + backendNodeId : <backendNodeId> + localName : + nodeId : <nodeId> + nodeName : #text + nodeType : 3 + nodeValue : C + parentId : <parentId> + } + [4] : { + backendNodeId : <backendNodeId> + localName : + nodeId : <nodeId> + nodeName : #text + nodeType : 3 + nodeValue : D + parentId : <parentId> + } + [5] : { + backendNodeId : <backendNodeId> + localName : + nodeId : <nodeId> + nodeName : #text + nodeType : 3 + nodeValue : E + parentId : <parentId> + } + [6] : { + attributes : [ + [0] : id + [1] : E + ] + backendNodeId : <backendNodeId> + childNodeCount : 1 + children : [ + ] + localName : div + nodeId : <nodeId> + nodeName : DIV + nodeType : 1 + nodeValue : + parentId : <parentId> + } + [7] : { + attributes : [ + [0] : id + [1] : D + ] + backendNodeId : <backendNodeId> + childNodeCount : 2 + children : [ + ] + localName : div + nodeId : <nodeId> + nodeName : DIV + nodeType : 1 + nodeValue : + parentId : <parentId> + } + [8] : { + attributes : [ + [0] : id + [1] : C + ] + backendNodeId : <backendNodeId> + childNodeCount : 2 + children : [ + ] + localName : div + nodeId : <nodeId> + nodeName : DIV + nodeType : 1 + nodeValue : + parentId : <parentId> + } + [9] : { + attributes : [ + [0] : id + [1] : B + ] + backendNodeId : <backendNodeId> + childNodeCount : 2 + children : [ + ] + localName : div + nodeId : <nodeId> + nodeName : DIV + nodeType : 1 + nodeValue : + parentId : <parentId> + } + [10] : { + attributes : [ + [0] : id + [1] : A + ] + backendNodeId : <backendNodeId> + childNodeCount : 2 + children : [ + ] + localName : div + nodeId : <nodeId> + nodeName : DIV + nodeType : 1 + nodeValue : + parentId : <parentId> + } + [11] : { + backendNodeId : <backendNodeId> + localName : + nodeId : <nodeId> + nodeName : #text + nodeType : 3 + nodeValue : @font-face { font-family: 'ahem'; src: url(../../../resources/Ahem.ttf); } + parentId : <parentId> + } + [12] : { + attributes : [ + ] + backendNodeId : <backendNodeId> + childNodeCount : 1 + children : [ + ] + localName : style + nodeId : <nodeId> + nodeName : STYLE + nodeType : 1 + nodeValue : + parentId : <parentId> + } + [13] : { + attributes : [ + ] + backendNodeId : <backendNodeId> + childNodeCount : 1 + children : [ + ] + localName : head + nodeId : <nodeId> + nodeName : HEAD + nodeType : 1 + nodeValue : + parentId : <parentId> + } + [14] : { + backendNodeId : <backendNodeId> + localName : + nodeId : <nodeId> + nodeName : #text + nodeType : 3 + nodeValue : Hello from the iframe. + parentId : <parentId> + } + [15] : { + attributes : [ + [0] : style + [1] : font-family: ahem; + ] + backendNodeId : <backendNodeId> + childNodeCount : 1 + children : [ + ] + localName : div + nodeId : <nodeId> + nodeName : DIV + nodeType : 1 + nodeValue : + parentId : <parentId> + } + [16] : { + attributes : [ + ] + backendNodeId : <backendNodeId> + childNodeCount : 1 + children : [ + ] + localName : body + nodeId : <nodeId> + nodeName : BODY + nodeType : 1 + nodeValue : + parentId : <parentId> + } + [17] : { + attributes : [ + ] + backendNodeId : <backendNodeId> + childNodeCount : 2 + children : [ + ] + frameId : <frameId> + localName : html + nodeId : <nodeId> + nodeName : HTML + nodeType : 1 + nodeValue : + parentId : <parentId> + } + [18] : { + attributes : [ + [0] : src + [1] : ./simple-iframe.html + [2] : width + [3] : 400 + [4] : height + [5] : 200 + ] + backendNodeId : <backendNodeId> + childNodeCount : 0 + children : [ + ] + contentDocument : { + backendNodeId : <backendNodeId> + baseURL : <baseURL> + childNodeCount : 1 + children : [ + ] + documentURL : <documentURL> + localName : + nodeId : <nodeId> + nodeName : #document + nodeType : 9 + nodeValue : + xmlVersion : + } + frameId : <frameId> + localName : iframe + nodeId : <nodeId> + nodeName : IFRAME + nodeType : 1 + nodeValue : + parentId : <parentId> + } + [19] : { + backendNodeId : <backendNodeId> + localName : + nodeId : <nodeId> + nodeName : #text + nodeType : 3 + nodeValue : :host { color: red; } + parentId : <parentId> + } + [20] : { + attributes : [ + ] + backendNodeId : <backendNodeId> + childNodeCount : 1 + children : [ + ] + localName : style + nodeId : <nodeId> + nodeName : STYLE + nodeType : 1 + nodeValue : + parentId : <parentId> + } + [21] : { + attributes : [ + ] + backendNodeId : <backendNodeId> + childNodeCount : 0 + children : [ + ] + localName : div + nodeId : <nodeId> + nodeName : DIV + nodeType : 1 + nodeValue : + parentId : <parentId> + } + [22] : { + backendNodeId : <backendNodeId> + localName : + nodeId : <nodeId> + nodeName : #text + nodeType : 3 + nodeValue : Hi from a template! + parentId : <parentId> + } + [23] : { + attributes : [ + ] + backendNodeId : <backendNodeId> + childNodeCount : 1 + children : [ + ] + localName : h1 + nodeId : <nodeId> + nodeName : H1 + nodeType : 1 + nodeValue : + parentId : <parentId> + } + [24] : { + attributes : [ + [0] : id + [1] : shadow-host + ] + backendNodeId : <backendNodeId> + childNodeCount : 0 + children : [ + ] + localName : div + nodeId : <nodeId> + nodeName : DIV + nodeType : 1 + nodeValue : + parentId : <parentId> + shadowRoots : [ + [0] : { + backendNodeId : <backendNodeId> + childNodeCount : 3 + children : [ + ] + localName : + nodeId : <nodeId> + nodeName : #document-fragment + nodeType : 11 + nodeValue : + shadowRootType : open + } + ] + } + [25] : { + attributes : [ + [0] : class + [1] : body-class + ] + backendNodeId : <backendNodeId> + childNodeCount : 3 + children : [ + ] + localName : body + nodeId : <nodeId> + nodeName : BODY + nodeType : 1 + nodeValue : + parentId : <parentId> + } + [26] : { + attributes : [ + ] + backendNodeId : <backendNodeId> + childNodeCount : 2 + children : [ + ] + frameId : <frameId> + localName : html + nodeId : <nodeId> + nodeName : HTML + nodeType : 1 + nodeValue : + parentId : <parentId> + } + [27] : { + backendNodeId : <backendNodeId> + baseURL : <baseURL> + childNodeCount : 1 + children : [ + ] + documentURL : <documentURL> + localName : + nodeId : <nodeId> + nodeName : #document + nodeType : 9 + nodeValue : + xmlVersion : + } + ] }
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getFlattenedDocument.html b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getFlattenedDocument.html deleted file mode 100644 index 4172ace..0000000 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getFlattenedDocument.html +++ /dev/null
@@ -1,55 +0,0 @@ -<html> -<head> -<script type="text/javascript" src="../../http/tests/inspector-protocol/resources/inspector-protocol-test.js"></script> -<script> - -function test() -{ - InspectorTest.sendCommand("DOM.enable", {}); - InspectorTest.sendCommandOrDie("DOM.getFlattenedDocument", {"depth": -1, "pierce": true}, onDocument); - - function onDocument(response) { - function stabilize(key, value) { - var unstableKeys = ["backendNodeId", "documentURL", "baseURL", "frameId"]; - if (unstableKeys.indexOf(key) !== -1) - return "<" + typeof(value) + ">"; - return value; - } - InspectorTest.log(JSON.stringify(response, stabilize, 2)); - InspectorTest.completeTest(); - } -} - -</script> -<template id="shadow-template"> -<style> -:host { - color: red; -} -</style> -<div></div><h1>Hi from a template!</h1></div> -</template> -</head> -<body class="body-class"> - <div id="A"> A - <div id="B"> B - <div id="C"> C - <div id="D"> D - <div id="E"> E - </div> - </div> - </div> - </div> - </div> - - <iframe src="../dom/resources/simple-iframe.html" width="400" height="200"></iframe> - <div id="shadow-host"></div> - <script type="text/javascript"> - var host = document.querySelector("#shadow-host").createShadowRoot(); - var template = document.querySelector("#shadow-template"); - host.appendChild(template.content); - template.remove(); - window.onload = runTest; - </script> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getFlattenedDocument.js b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getFlattenedDocument.js new file mode 100644 index 0000000..0226158d --- /dev/null +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getFlattenedDocument.js
@@ -0,0 +1,15 @@ +(async function(testRunner) { + var {page, session, dp} = await testRunner.startURL('resources/dom-getFlattenedDocument.html', ''); + + await session.evaluate(() => { + var host = document.querySelector('#shadow-host').createShadowRoot(); + var template = document.querySelector('#shadow-template'); + host.appendChild(template.content); + template.remove(); + }); + dp.DOM.enable(); + var response = await dp.DOM.getFlattenedDocument({depth: -1, pierce: true}); + testRunner.logMessage(response.result); + testRunner.completeTest(); +}) +
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getNodeForLocation-expected.txt b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getNodeForLocation-expected.txt index b081415..fb08317 100644 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getNodeForLocation-expected.txt +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getNodeForLocation-expected.txt
@@ -1,14 +1,16 @@ + Node: { attributes : [ [0] : style [1] : position:absolute;top:0;left:0;width:100;height:100 ] - backendNodeId : <number> + backendNodeId : <backendNodeId> childNodeCount : 0 localName : div + nodeId : <nodeId> nodeName : DIV nodeType : 1 nodeValue : - parentId : 4 + parentId : <parentId> }
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getNodeForLocation-skip-shadow-expected.txt b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getNodeForLocation-skip-shadow-expected.txt index 55d64d6..6de23ac 100644 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getNodeForLocation-skip-shadow-expected.txt +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getNodeForLocation-skip-shadow-expected.txt
@@ -6,21 +6,22 @@ [2] : style [3] : position:absolute;top:0;left:0;width:100;height:100 ] - backendNodeId : <number> + backendNodeId : <backendNodeId> childNodeCount : 0 children : [ ] localName : input + nodeId : <nodeId> nodeName : INPUT nodeType : 1 nodeValue : - parentId : <number> + parentId : <parentId> shadowRoots : [ [0] : { - backendNodeId : <number> + backendNodeId : <backendNodeId> childNodeCount : 1 localName : - nodeId : <number> + nodeId : <nodeId> nodeName : #document-fragment nodeType : 11 nodeValue :
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getNodeForLocation-skip-shadow.html b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getNodeForLocation-skip-shadow.html deleted file mode 100644 index 90adf48..0000000 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getNodeForLocation-skip-shadow.html +++ /dev/null
@@ -1,42 +0,0 @@ -<html> -<head> -<script type="text/javascript" src="../../http/tests/inspector-protocol/resources/inspector-protocol-test.js"></script> -<script> - -function test() -{ - var nodeInfo = {}; - InspectorTest.eventHandler["DOM.setChildNodes"] = setChildNodes; - InspectorTest.sendCommand("DOM.enable", {}); - InspectorTest.sendCommand("DOM.getNodeForLocation", { "x": 10, "y": 10, "includeUserAgentShadowDOM": false }, onGetNodeForLocation); - - function onGetNodeForLocation(message) - { - if (message.error) { - InspectorTest.log(message.error.message); - InspectorTest.completeTest(); - return; - } - var nodeId = message.result.nodeId; - InspectorTest.logObject(nodeInfo[nodeId], "Node: ", ["backendNodeId", "parentId", "nodeId"]); - InspectorTest.completeTest(); - } - - function setChildNodes(message) - { - var nodes = message.params.nodes; - for (var i = 0; i < nodes.length; ++i) { - nodeInfo[nodes[i].nodeId] = nodes[i]; - delete nodes[i].nodeId; - } - } -} - -</script> -</head> -<body onload="runTest()"> -<form action="#"> - <input type="text" style="position:absolute;top:0;left:0;width:100;height:100" /> -</form> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getNodeForLocation-skip-shadow.js b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getNodeForLocation-skip-shadow.js new file mode 100644 index 0000000..8d1fa44 --- /dev/null +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getNodeForLocation-skip-shadow.js
@@ -0,0 +1,16 @@ +(async function(testRunner) { + var {page, session, dp} = await testRunner.startHTML(` + <form action='#'> + <input type='text' style='position:absolute;top:0;left:0;width:100;height:100' /> + </form> + `, ''); + + var NodeTracker = await testRunner.loadScript('../resources/node-tracker.js'); + var nodeTracker = new NodeTracker(dp); + + dp.DOM.enable(); + var message = await dp.DOM.getNodeForLocation({x: 10, y: 10, includeUserAgentShadowDOM: false}); + var nodeId = message.result.nodeId; + testRunner.logMessage(nodeTracker.nodeForId(nodeId), 'Node: '); + testRunner.completeTest(); +})
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getNodeForLocation.html b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getNodeForLocation.html deleted file mode 100644 index 228f7c2..0000000 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getNodeForLocation.html +++ /dev/null
@@ -1,40 +0,0 @@ -<html> -<head> -<script type="text/javascript" src="../../http/tests/inspector-protocol/resources/inspector-protocol-test.js"></script> -<script> - -function test() -{ - var nodeInfo = {}; - InspectorTest.eventHandler["DOM.setChildNodes"] = setChildNodes; - InspectorTest.sendCommand("DOM.enable", {}); - InspectorTest.sendCommand("DOM.getNodeForLocation", { "x": 10, "y": 10 }, onGetNodeForLocation); - - function onGetNodeForLocation(message) - { - if (message.error) { - InspectorTest.log(message.error.message); - InspectorTest.completeTest(); - return; - } - var nodeId = message.result.nodeId; - InspectorTest.logObject(nodeInfo[nodeId], "Node: ", ["backendNodeId"]); - InspectorTest.completeTest(); - } - - function setChildNodes(message) - { - var nodes = message.params.nodes; - for (var i = 0; i < nodes.length; ++i) { - nodeInfo[nodes[i].nodeId] = nodes[i]; - delete nodes[i].nodeId; - } - } -} - -</script> -</head> -<body onload="runTest()"> -<div style="position:absolute;top:0;left:0;width:100;height:100"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getNodeForLocation.js b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getNodeForLocation.js new file mode 100644 index 0000000..0efa2331 --- /dev/null +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-getNodeForLocation.js
@@ -0,0 +1,14 @@ +(async function(testRunner) { + var {page, session, dp} = await testRunner.startHTML(` + <div style='position:absolute;top:0;left:0;width:100;height:100'></div> + `, ''); + var NodeTracker = await testRunner.loadScript('../resources/node-tracker.js'); + var nodeTracker = new NodeTracker(dp); + + dp.DOM.enable(); + var response = await dp.DOM.getNodeForLocation({x: 10, y: 10}); + var nodeId = response.result.nodeId; + testRunner.logMessage(nodeTracker.nodeForId(nodeId), 'Node: '); + testRunner.completeTest(); +}) +
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-ns-attr-modified-expected.txt b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-ns-attr-modified-expected.txt index 7eaa259..aa5f32d88 100644 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-ns-attr-modified-expected.txt +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-ns-attr-modified-expected.txt
@@ -1,6 +1,5 @@ Test that DOM events have correct parameters for attribute with namespace in XML document. - Changing attribute... Modified attribute: 'xlink:href'='changed-url' Removing attribute...
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-ns-attr-modified.html b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-ns-attr-modified.html deleted file mode 100644 index a416efa..0000000 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-ns-attr-modified.html +++ /dev/null
@@ -1,61 +0,0 @@ -<html> -<head> -<script type="text/javascript" src="../../http/tests/inspector-protocol/resources/inspector-protocol-test.js"></script> -<script> -function test() -{ - var rootNodeId; - - InspectorTest.sendCommand("DOM.getDocument", {}, onGotDocument); - - function onGotDocument(msg) - { - rootNodeId = msg.result.root.nodeId; - getMainNodeId(); - } - - function getMainNodeId(next) - { - InspectorTest.sendCommand("DOM.querySelector", { "nodeId": rootNodeId, "selector": "#main" }, onMainNodeLoaded); - } - - function onMainNodeLoaded() - { - InspectorTest.log(""); - InspectorTest.log("Changing attribute..."); - InspectorTest.eventHandler["DOM.attributeModified"] = onAttributeModified; - var expression = ""; - expression += "var element = document.getElementById('main');\n"; - expression += "element.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', 'changed-url');\n"; - InspectorTest.sendCommand("Runtime.evaluate", { expression: expression }); - } - - function onAttributeModified(msg) - { - var result = msg.params; - InspectorTest.log("Modified attribute: '" + result.name + "'='" + result.value + "'"); - - InspectorTest.log("Removing attribute..."); - InspectorTest.eventHandler["DOM.attributeRemoved"] = onAttributeRemoved; - var expression = ""; - expression += "var element = document.getElementById('main');\n"; - expression += "element.removeAttribute('xlink:href', 'changed-url');\n"; - InspectorTest.sendCommand("Runtime.evaluate", { expression: expression }); - } - - function onAttributeRemoved(msg) - { - var result = msg.params; - InspectorTest.log("Removed attribute: '" + result.name + "'"); - InspectorTest.completeTest(); - } -} -</script> -</head> -<body onload="runTest()"> -<p>Test that DOM events have correct parameters for attribute with namespace in XML document.</p> -<svg> - <a id="main" xlink:href="http://localhost">link</a> -</svg> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-ns-attr-modified.js b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-ns-attr-modified.js new file mode 100644 index 0000000..db45839 --- /dev/null +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-ns-attr-modified.js
@@ -0,0 +1,30 @@ +(async function(testRunner) { + var {page, session, dp} = await testRunner.startHTML(` + <svg> + <a id='main' xlink:href='http://localhost'>link</a> + </svg> + `, 'Test that DOM events have correct parameters for attribute with namespace in XML document.'); + + var response = await dp.DOM.getDocument(); + await dp.DOM.querySelector({nodeId: response.result.root.nodeId, selector: '#main'}); + + testRunner.log('\nChanging attribute...'); + session.evaluate(() => { + var element = document.getElementById('main'); + element.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', 'changed-url'); + }); + var msg = await dp.DOM.onceAttributeModified(); + var result = msg.params; + testRunner.log(`Modified attribute: '${result.name}'='${result.value}'`); + + testRunner.log('Removing attribute...'); + session.evaluate(() => { + var element = document.getElementById('main'); + element.removeAttribute('xlink:href', 'changed-url'); + }); + msg = await dp.DOM.onceAttributeRemoved(); + var result = msg.params; + testRunner.log(`Removed attribute: '${result.name}'`); + testRunner.completeTest(); +}); +
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-relayout-boundary-expected.txt b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-relayout-boundary-expected.txt index b06e3d4f..3134f64 100644 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-relayout-boundary-expected.txt +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-relayout-boundary-expected.txt
@@ -1,3 +1,4 @@ + Relayout boundary for div#outer is: html Relayout boundary for div#boundary is: div#boundary Relayout boundary for div#inner is: div#boundary
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-relayout-boundary.html b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-relayout-boundary.html deleted file mode 100644 index acfdc7c..0000000 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-relayout-boundary.html +++ /dev/null
@@ -1,137 +0,0 @@ -<html> -<head> -<style> -.relayout-boundary { - width: 200px; - height: 40px; - overflow: hidden; -} - -</style> -<script type="text/javascript" src="../../http/tests/inspector-protocol/resources/inspector-protocol-test.js"></script> -<script type="text/javascript"> - -function test() -{ - var nodeByIdAttribute = {}; - var nodeById = {}; - - getDocument(); - - function getAttribute(node, attribute) - { - if (!node.attributes) - return; - for (var i = 0; i < node.attributes.length; i += 2) { - if (node.attributes[i] === attribute) - return node.attributes[i + 1]; - } - } - - function nodeLabel(node) - { - var result = node.localName; - var id = getAttribute(node, "id"); - if (id) - result += "#" + id; - return result; - } - - function addNode(node) - { - nodeById[node.nodeId] = node; - var idAttribute = getAttribute(node, "id"); - if (idAttribute) - nodeByIdAttribute[idAttribute] = node; - if (node.children) - addNodes(node.children); - } - - function addNodes(nodes) - { - nodes.forEach(addNode); - } - - InspectorTest.eventHandler["DOM.setChildNodes"] = function setChildNodes(messageObject) - { - addNodes(messageObject.params.nodes); - }; - - function getDocument() - { - // We must first get the document so that later on we may get sensible nodeIds. - step({ - command: "DOM.getDocument", - parameters: {}, - callback: getAllNodes - }); - }; - - function getAllNodes(error, result) - { - addNode(result.root); - step({ - command: "DOM.requestChildNodes", - parameters: {"nodeId": result.root.nodeId, "depth": -1}, - callback: dumpRelayoutBoundary.bind(this, 0) - }); - }; - - var nodeIdsToTest = [ - "outer", - "boundary", - "inner", - "hidden" - ]; - - function dumpRelayoutBoundary(nextId) - { - if (nextId >= nodeIdsToTest.length) { - InspectorTest.completeTest(); - return; - } - var node = nodeByIdAttribute[nodeIdsToTest[nextId]]; - function dumpResultsAndContinue(error, result) - { - var text; - if (error) { - text = error; - } else { - var boundaryNode = nodeById[result.nodeId]; - text = boundaryNode ? nodeLabel(boundaryNode) : "null"; - } - InspectorTest.log("Relayout boundary for " + nodeLabel(node) + " is: " + text); - dumpRelayoutBoundary(nextId + 1); - } - step({ - command: "DOM.getRelayoutBoundary", - parameters: {"nodeId": node.nodeId}, - callback: dumpResultsAndContinue - }); - } - - function step(test) - { - InspectorTest.sendCommand(test.command, test.parameters, function(messageObject) { - if (test.callback) - test.callback(messageObject.error && messageObject.error.message, messageObject.result); - }); - }; - setTimeout(InspectorTest.completeTest.bind(InspectorTest), 3400); -}; - -window.addEventListener("DOMContentLoaded", function () { - runTest(); -}, false); -</script> -</head> -<body> -<div id="outer"></div> -<div class="relayout-boundary" id="boundary"> - <div id="inner"></div> - <div style="display: none"> - <div id="hidden"></div> - </div> -</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-relayout-boundary.js b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-relayout-boundary.js new file mode 100644 index 0000000..147ffa9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-relayout-boundary.js
@@ -0,0 +1,57 @@ +(async function(testRunner) { + var {page, session, dp} = await testRunner.startHTML(` + <head> + <style> + .relayout-boundary { + width: 200px; + height: 40px; + overflow: hidden; + } + </style> + </head> + <body> + <div id='outer'></div> + <div class='relayout-boundary' id='boundary'> + <div id='inner'></div> + <div style='display: none'> + <div id='hidden'></div> + </div> + </div> + </body> + `, ''); + + var DOMHelper = await testRunner.loadScript('../resources/dom-helper.js'); + var NodeTracker = await testRunner.loadScript('../resources/node-tracker.js'); + var nodeTracker = new NodeTracker(dp); + var response = await dp.DOM.getDocument(); + nodeTracker.addDocumentNode(response.result.root); + await dp.DOM.requestChildNodes({nodeId: response.result.root.nodeId, depth: -1}); + + var nodeByIdAttribute = {}; + for (var node of nodeTracker.nodes()) + nodeByIdAttribute[DOMHelper.attributes(node).get('id')] = node; + + await dumpRelayoutBoundary(nodeByIdAttribute['outer']); + await dumpRelayoutBoundary(nodeByIdAttribute['boundary']); + await dumpRelayoutBoundary(nodeByIdAttribute['inner']); + await dumpRelayoutBoundary(nodeByIdAttribute['hidden']); + testRunner.completeTest(); + + function nodeLabel(node) { + var result = node.localName; + var id = DOMHelper.attributes(node).get('id'); + return result + (id ? '#' + id : ''); + } + + async function dumpRelayoutBoundary(node) { + var response = await dp.DOM.getRelayoutBoundary({nodeId: node.nodeId}); + var text; + if (response.error) { + text = response.error.message; + } else { + var boundaryNode = nodeTracker.nodeForId(response.result.nodeId); + text = boundaryNode ? nodeLabel(boundaryNode) : 'null'; + } + testRunner.log('Relayout boundary for ' + nodeLabel(node) + ' is: ' + text); + } +});
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-child-nodes-depth-expected.txt b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-child-nodes-depth-expected.txt index 7944630..bd4942a1 100644 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-child-nodes-depth-expected.txt +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-child-nodes-depth-expected.txt
@@ -1,4 +1,5 @@ + === Get the Document === @@ -21,5 +22,4 @@ Backend error: Please provide a positive integer as a depth or -1 for entire subtree (-32000) -PASS: Expected number of setChildNodes events
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-child-nodes-depth.html b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-child-nodes-depth.html deleted file mode 100644 index 4d5bed2..0000000 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-child-nodes-depth.html +++ /dev/null
@@ -1,165 +0,0 @@ -<html> -<head> -<script type="text/javascript" src="../../http/tests/inspector-protocol/resources/inspector-protocol-test.js"></script> -<script type="text/javascript"> - -function test() -{ - var firstDiv; - var eventsCount = 0; - - getDocument(); - - InspectorTest.eventHandler["DOM.setChildNodes"] = function setChildNodes(messageObject) - { - eventsCount++; - - if (eventsCount === 1) - gotImmediateChildren(messageObject); - else if (eventsCount === 2) - gotAdditionalChildren(messageObject); - else if (eventsCount === 3) - gotAllChildren(messageObject); - else - InspectorTest.log(JSON.stringify(messageObject, null, " ")); - }; - - function getDocument() - { - // We must first get the document so that later on we may get sensible nodeIds. - step({ - name: "Get the Document", - command: "DOM.getDocument", - parameters: {}, - callback: getImmediateChildren - }); - }; - - function getImmediateChildren(result) - { - var bodyId = result.root.children[0].children[1].nodeId; - step({ - name: "Get immediate children of the body", - command: "DOM.requestChildNodes", - parameters: {"nodeId": bodyId} - }); - }; - - function gotImmediateChildren(messageObject) - { - firstDiv = messageObject.params.nodes[0]; - assert("First child is a div", firstDiv.localName, "div"); - assert("First child is div#depth-1", firstDiv.attributes[1], "depth-1"); - assert("First child has one child", firstDiv.childNodeCount, 1); - assert("First child has no .children property", firstDiv.children, undefined); - - step({ - name: "Get children of div#depth-1 three levels deep", - command: "DOM.requestChildNodes", - parameters: {"nodeId": firstDiv.nodeId, "depth": 3} - }); - }; - - function gotAdditionalChildren(messageObject) - { - var depth = 1; - var firstChild = messageObject.params.nodes[0]; - var node = firstChild; - while (node && node.children) { - depth++; - node = node.children[0]; - } - - assert("div#depth-1 has nodes 3 levels deep", depth, 3); - - step({ - name: "Get all children of body", - command: "DOM.requestChildNodes", - parameters: {"nodeId": firstDiv.nodeId, "depth": -1} - }); - }; - - function gotAllChildren(messageObject) - { - var depth = 0; - var firstChild = messageObject.params.nodes[0]; - var node = firstChild; - while (node && node.children) { - depth++; - node = node.children[0]; - } - - // We have requested nodes 3-level deep so far, so - // we should have gotten an additional 6 levels of depth. - assert("div#depth-1 has nodes 9 levels deep", depth, 6); - - step({ - name: "Pass an invalid depth", - command: "DOM.requestChildNodes", - parameters: {"nodeId": firstDiv.nodeId, "depth": 0}, - callback: finishTest - }); - }; - - function finishTest() - { - assert("Expected number of setChildNodes events", eventsCount, 3); - - InspectorTest.completeTest(); - }; - - function step(test) - { - InspectorTest.log("\n=== " + test.name + " ===\n"); - InspectorTest.sendCommand(test.command, test.parameters, function(messageObject) { - if (messageObject.hasOwnProperty("error")) - InspectorTest.log("Backend error: " + messageObject.error.message + " (" + messageObject.error.code + ")\n"); - - if (test.callback) - test.callback(messageObject.result); - }); - }; - - function assert(message, actual, expected) - { - if (actual === expected) - InspectorTest.log("PASS: " + message); - else { - InspectorTest.log("FAIL: " + message + ", expected \"" + expected + "\" but got \"" + actual + "\""); - InspectorTest.completeTest(); - } - }; - -}; - -window.addEventListener("DOMContentLoaded", function () { - runTest(); -}, false); - -</script> -</head> -<body> - -<div id="depth-1"> - <div id="depth-2"> - <div id="depth-3"> - <div id="depth-4"> - <div id="depth-5"> - <div id="depth-6"> - <div id="depth-7"> - <div id="depth-8"> - <div id="depth-9"> - <div id="depth-10"> - </div> - </div> - </div> - </div> - </div> - </div> - </div> - </div> - </div> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-child-nodes-depth.js b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-child-nodes-depth.js new file mode 100644 index 0000000..4d43543d3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-child-nodes-depth.js
@@ -0,0 +1,78 @@ +(async function(testRunner) { + var {page, session, dp} = await testRunner.startHTML(` + <div id="depth-1"> + <div id="depth-2"> + <div id="depth-3"> + <div id="depth-4"> + <div id="depth-5"> + <div id="depth-6"> + <div id="depth-7"> + <div id="depth-8"> + <div id="depth-9"> + <div id="depth-10"> + </div> + </div> + </div> + </div> + </div> + </div> + </div> + </div> + </div> + </div> + `, ''); + testRunner.log("\n=== Get the Document ===\n"); + var response = await dp.DOM.getDocument(); + var bodyId = response.result.root.children[0].children[1].nodeId; + + testRunner.log("\n=== Get immediate children of the body ===\n"); + dp.DOM.requestChildNodes({nodeId: bodyId}); + var message = await dp.DOM.onceSetChildNodes(); + var firstDiv = message.params.nodes[0]; + assert("First child is a div", firstDiv.localName, "div"); + assert("First child is div#depth-1", firstDiv.attributes[1], "depth-1"); + assert("First child has one child", firstDiv.childNodeCount, 1); + assert("First child has no .children property", firstDiv.children, undefined); + + testRunner.log("\n=== Get children of div#depth-1 three levels deep ===\n"); + dp.DOM.requestChildNodes({nodeId: firstDiv.nodeId, depth: 3}); + var message = await dp.DOM.onceSetChildNodes(); + var depth = 1; + var firstChild = message.params.nodes[0]; + var node = firstChild; + while (node && node.children) { + depth++; + node = node.children[0]; + } + assert("div#depth-1 has nodes 3 levels deep", depth, 3); + + testRunner.log("\n=== Get all children of body ===\n"); + dp.DOM.requestChildNodes({nodeId: firstDiv.nodeId, depth: -1}); + var message = await dp.DOM.onceSetChildNodes(); + var depth = 0; + var firstChild = message.params.nodes[0]; + var node = firstChild; + while (node && node.children) { + depth++; + node = node.children[0]; + } + // We have requested nodes 3-level deep so far, so + // we should have gotten an additional 6 levels of depth. + assert("div#depth-1 has nodes 9 levels deep", depth, 6); + + testRunner.log("\n=== Pass an invalid depth ===\n"); + var response = await dp.DOM.requestChildNodes({nodeId: firstDiv.nodeId, depth: 0}); + if (response.error) + testRunner.log("Backend error: " + response.error.message + " (" + response.error.code + ")\n"); + testRunner.completeTest(); + + function assert(message, actual, expected) { + if (actual === expected) { + testRunner.log("PASS: " + message); + } else { + testRunner.log("FAIL: " + message + ", expected \"" + expected + "\" but got \"" + actual + "\""); + testRunner.completeTest(); + } + }; +}); +
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-child-nodes-traverse-frames-expected.txt b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-child-nodes-traverse-frames-expected.txt index 5202c3a..ab12676 100644 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-child-nodes-traverse-frames-expected.txt +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-child-nodes-traverse-frames-expected.txt
@@ -1,142 +1,148 @@ { - "method": "DOM.setChildNodes", - "params": { - "parentId": 13, - "nodes": [ - { - "nodeId": 14, - "parentId": 13, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "DIV", - "localName": "div", - "nodeValue": "", - "childNodeCount": 1, - "children": [ - { - "nodeId": 15, - "parentId": 14, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "DIV", - "localName": "div", - "nodeValue": "", - "childNodeCount": 1, - "children": [ - { - "nodeId": 16, - "parentId": 15, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "DIV", - "localName": "div", - "nodeValue": "", - "childNodeCount": 1, - "children": [ - { - "nodeId": 17, - "parentId": 16, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "IFRAME", - "localName": "iframe", - "nodeValue": "", - "childNodeCount": 0, - "children": [], - "attributes": [ - "src", - "resources/iframe.html" - ], - "frameId": "???", - "contentDocument": { - "nodeId": 18, - "backendNodeId": "<number>", - "nodeType": 9, - "nodeName": "#document", - "localName": "", - "nodeValue": "", - "childNodeCount": 1, - "children": [ - { - "nodeId": 19, - "parentId": 18, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "HTML", - "localName": "html", - "nodeValue": "", - "childNodeCount": 2, - "children": [ - { - "nodeId": 20, - "parentId": 19, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "HEAD", - "localName": "head", - "nodeValue": "", - "childNodeCount": 0, - "children": [], - "attributes": [] - }, - { - "nodeId": 21, - "parentId": 19, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "BODY", - "localName": "body", - "nodeValue": "", - "childNodeCount": 1, - "children": [ - { - "nodeId": 22, - "parentId": 21, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "DIV", - "localName": "div", - "nodeValue": "", - "childNodeCount": 0, - "children": [], - "attributes": [ - "id", - "element_in_an_iframe" - ] - } - ], - "attributes": [] - } - ], - "attributes": [], - "frameId": "???" - } - ], - "documentURL": "???", - "baseURL": "???", - "xmlVersion": "" - } - } - ], - "attributes": [ - "id", - "depth-3" - ] - } - ], - "attributes": [ - "id", - "depth-2" - ] - } - ], - "attributes": [ - "id", - "depth-1" + method : DOM.setChildNodes + params : { + nodes : [ + [0] : { + attributes : [ + [0] : id + [1] : depth-1 ] + backendNodeId : <backendNodeId> + childNodeCount : 1 + children : [ + [0] : { + attributes : [ + [0] : id + [1] : depth-2 + ] + backendNodeId : <backendNodeId> + childNodeCount : 1 + children : [ + [0] : { + attributes : [ + [0] : id + [1] : depth-3 + ] + backendNodeId : <backendNodeId> + childNodeCount : 1 + children : [ + [0] : { + attributes : [ + [0] : src + [1] : iframe.html + ] + backendNodeId : <backendNodeId> + childNodeCount : 0 + children : [ + ] + contentDocument : { + backendNodeId : <backendNodeId> + baseURL : <baseURL> + childNodeCount : 1 + children : [ + [0] : { + attributes : [ + ] + backendNodeId : <backendNodeId> + childNodeCount : 2 + children : [ + [0] : { + attributes : [ + ] + backendNodeId : <backendNodeId> + childNodeCount : 0 + children : [ + ] + localName : head + nodeId : <nodeId> + nodeName : HEAD + nodeType : 1 + nodeValue : + parentId : <parentId> + } + [1] : { + attributes : [ + ] + backendNodeId : <backendNodeId> + childNodeCount : 1 + children : [ + [0] : { + attributes : [ + [0] : id + [1] : element_in_an_iframe + ] + backendNodeId : <backendNodeId> + childNodeCount : 0 + children : [ + ] + localName : div + nodeId : <nodeId> + nodeName : DIV + nodeType : 1 + nodeValue : + parentId : <parentId> + } + ] + localName : body + nodeId : <nodeId> + nodeName : BODY + nodeType : 1 + nodeValue : + parentId : <parentId> + } + ] + frameId : <frameId> + localName : html + nodeId : <nodeId> + nodeName : HTML + nodeType : 1 + nodeValue : + parentId : <parentId> + } + ] + documentURL : <documentURL> + localName : + nodeId : <nodeId> + nodeName : #document + nodeType : 9 + nodeValue : + xmlVersion : + } + frameId : <frameId> + localName : iframe + nodeId : <nodeId> + nodeName : IFRAME + nodeType : 1 + nodeValue : + parentId : <parentId> + } + ] + localName : div + nodeId : <nodeId> + nodeName : DIV + nodeType : 1 + nodeValue : + parentId : <parentId> + } + ] + localName : div + nodeId : <nodeId> + nodeName : DIV + nodeType : 1 + nodeValue : + parentId : <parentId> + } + ] + localName : div + nodeId : <nodeId> + nodeName : DIV + nodeType : 1 + nodeValue : + parentId : <parentId> } ] + parentId : <parentId> } }
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-child-nodes-traverse-frames.html b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-child-nodes-traverse-frames.html deleted file mode 100644 index 60dd438..0000000 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-child-nodes-traverse-frames.html +++ /dev/null
@@ -1,106 +0,0 @@ -<html> -<head> -<script type="text/javascript" src="../../http/tests/inspector-protocol/resources/inspector-protocol-test.js"></script> -<script type="text/javascript"> - -function test() -{ - getDocument(); - - function getDocument() - { - InspectorTest.sendCommand("DOM.getDocument", {}, function(messageObject) { - if (messageObject.hasOwnProperty("error")) - InspectorTest.log("Backend error: " + messageObject.error.message + " (" + messageObject.error.code + ")\n"); - - var bodyId = messageObject.result.root.children[0].children[1].nodeId; - requestChildNodes(bodyId); - }); - }; - - function requestChildNodes(bodyId) - { - InspectorTest.sendCommand("DOM.requestChildNodes", {"nodeId": bodyId, "depth": -1}, function(messageObject) { - if (messageObject.hasOwnProperty("error")) - InspectorTest.log("Backend error: " + messageObject.error.message + " (" + messageObject.error.code + ")\n"); - }); - - InspectorTest.eventHandler["DOM.setChildNodes"] = function(messageObject) - { - var iframeContentDocument = messageObject.params.nodes[0].children[0].children[0].children[0].contentDocument; - if (iframeContentDocument.children) { - InspectorTest.log("Error IFrame node should not include children: " + JSON.stringify(iframeContentDocument, null, " ")); - InspectorTest.completeTest(); - } else { - getDocumentIncludingIframe(); - } - }; - }; - - function getDocumentIncludingIframe() - { - InspectorTest.sendCommand("DOM.getDocument", {"pierce": true}, function(messageObject) { - if (messageObject.hasOwnProperty("error")) - InspectorTest.log("Backend error: " + messageObject.error.message + " (" + messageObject.error.code + ")\n"); - - var bodyId = messageObject.result.root.children[0].children[1].nodeId; - requestAllChildNodesIncludingIframe(bodyId); - }); - }; - - function replacePropertyRecursive(object, propertyNameToReplace) - { - for (var propertyName in object) { - if (!object.hasOwnProperty(propertyName)) - continue; - if (propertyName === propertyNameToReplace) { - object[propertyName] = "???"; - } else if (typeof object[propertyName] === "object") { - replacePropertyRecursive(object[propertyName], propertyNameToReplace); - } - } - } - - function requestAllChildNodesIncludingIframe(bodyId) - { - InspectorTest.sendCommand("DOM.requestChildNodes", {"nodeId": bodyId, "depth": -1, "pierce": true}, function(messageObject) { - if (messageObject.hasOwnProperty("error")) - InspectorTest.log("Backend error: " + messageObject.error.message + " (" + messageObject.error.code + ")\n"); - }); - - InspectorTest.eventHandler["DOM.setChildNodes"] = function(messageObject) - { - // Replace properties that tend to change every run. - replacePropertyRecursive(messageObject, "frameId"); - replacePropertyRecursive(messageObject, "documentURL"); - replacePropertyRecursive(messageObject, "baseURL"); - function stabilize(key, value) { - var unstableKeys = ["backendNodeId"]; - if (unstableKeys.indexOf(key) !== -1) - return "<" + typeof(value) + ">"; - return value; - } - InspectorTest.log(JSON.stringify(messageObject, stabilize, " ")); - InspectorTest.completeTest(); - }; - }; -}; - -window.addEventListener("DOMContentLoaded", function () { - runTest(); -}, false); - -</script> -</head> -<body> - -<div id="depth-1"> - <div id="depth-2"> - <div id="depth-3"> - <iframe src="resources/iframe.html"></iframe> - </div> - </div> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-child-nodes-traverse-frames.js b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-child-nodes-traverse-frames.js new file mode 100644 index 0000000..01db208 --- /dev/null +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-child-nodes-traverse-frames.js
@@ -0,0 +1,20 @@ +(async function(testRunner) { + var {page, session, dp} = await testRunner.startURL('resources/dom-request-child-nodes-traverse-frames.html', ''); + + var response = await dp.DOM.getDocument(); + var rootId = response.result.root.children[0].children[1].nodeId; + dp.DOM.requestChildNodes({nodeId: rootId, depth: -1}); + var message = await dp.DOM.onceSetChildNodes(); + var iframeContentDocument = message.params.nodes[0].children[0].children[0].children[0].contentDocument; + if (iframeContentDocument.children) { + testRunner.die("Error IFrame node should not include children: " + JSON.stringify(iframeContentDocument, null, " ")); + return; + } + var message = await dp.DOM.getDocument({pierce: true}); + var bodyId = message.result.root.children[0].children[1].nodeId; + dp.DOM.requestChildNodes({nodeId: bodyId, depth: -1, pierce: true}); + var message = await dp.DOM.onceSetChildNodes(); + + testRunner.logMessage(message); + testRunner.completeTest(); +});
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-document-with-child-nodes-expected.txt b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-document-with-child-nodes-expected.txt index 218da00..ff1d5575 100644 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-document-with-child-nodes-expected.txt +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-document-with-child-nodes-expected.txt
@@ -1,239 +1,296 @@ { - "nodeId": 20, - "parentId": 15, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "BODY", - "localName": "body", - "nodeValue": "", - "childNodeCount": 1, - "children": [ - { - "nodeId": 21, - "parentId": 20, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "DIV", - "localName": "div", - "nodeValue": "", - "childNodeCount": 2, - "children": [ - { - "nodeId": 22, - "parentId": 21, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "DIV", - "localName": "div", - "nodeValue": "", - "childNodeCount": 1, - "children": [ - { - "nodeId": 23, - "parentId": 22, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "DIV", - "localName": "div", - "nodeValue": "", - "childNodeCount": 1, - "children": [ - { - "nodeId": 24, - "parentId": 23, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "IFRAME", - "localName": "iframe", - "nodeValue": "", - "childNodeCount": 0, - "children": [], - "attributes": [ - "src", - "resources/shadow-dom-iframe.html" - ], - "frameId": "???", - "contentDocument": { - "nodeId": 25, - "backendNodeId": "<number>", - "nodeType": 9, - "nodeName": "#document", - "localName": "", - "nodeValue": "", - "childNodeCount": 1, - "children": [ - { - "nodeId": 26, - "parentId": 25, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "HTML", - "localName": "html", - "nodeValue": "", - "childNodeCount": 2, - "children": [ - { - "nodeId": 27, - "parentId": 26, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "HEAD", - "localName": "head", - "nodeValue": "", - "childNodeCount": 0, - "children": [], - "attributes": [] - }, - { - "nodeId": 28, - "parentId": 26, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "BODY", - "localName": "body", - "nodeValue": "", - "childNodeCount": 2, - "children": [ - { - "nodeId": 29, - "parentId": 28, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "DIV", - "localName": "div", - "nodeValue": "", - "childNodeCount": 0, - "children": [], - "attributes": [ - "id", - "element_in_an_iframe" - ], - "shadowRoots": [ - { - "nodeId": 30, - "backendNodeId": "<number>", - "nodeType": 11, - "nodeName": "#document-fragment", - "localName": "", - "nodeValue": "", - "childNodeCount": 1, - "children": [ - { - "nodeId": 31, - "parentId": 30, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "DIV", - "localName": "div", - "nodeValue": "", - "childNodeCount": 1, - "children": [ - { - "nodeId": 32, - "parentId": 31, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "H1", - "localName": "h1", - "nodeValue": "", - "childNodeCount": 1, - "children": [ - { - "nodeId": 33, - "parentId": 32, - "backendNodeId": "<number>", - "nodeType": 3, - "nodeName": "#text", - "localName": "", - "nodeValue": "Hello from the shadow dom!" - } - ], - "attributes": [] - } - ], - "attributes": [ - "style", - "color: red;" + id : <messageId> + result : { + root : { + backendNodeId : <backendNodeId> + baseURL : <baseURL> + childNodeCount : 1 + children : [ + [0] : { + attributes : [ + ] + backendNodeId : <backendNodeId> + childNodeCount : 2 + children : [ + [0] : { + attributes : [ + ] + backendNodeId : <backendNodeId> + childNodeCount : 0 + children : [ + ] + localName : head + nodeId : <nodeId> + nodeName : HEAD + nodeType : 1 + nodeValue : + parentId : <parentId> + } + [1] : { + attributes : [ + ] + backendNodeId : <backendNodeId> + childNodeCount : 1 + children : [ + [0] : { + attributes : [ + [0] : id + [1] : depth-1 + ] + backendNodeId : <backendNodeId> + childNodeCount : 2 + children : [ + [0] : { + attributes : [ + [0] : id + [1] : depth-2 + ] + backendNodeId : <backendNodeId> + childNodeCount : 1 + children : [ + [0] : { + attributes : [ + [0] : id + [1] : depth-3 + ] + backendNodeId : <backendNodeId> + childNodeCount : 1 + children : [ + [0] : { + attributes : [ + [0] : src + [1] : ../dom/resources/shadow-dom-iframe.html + ] + backendNodeId : <backendNodeId> + childNodeCount : 0 + children : [ + ] + contentDocument : { + backendNodeId : <backendNodeId> + baseURL : <baseURL> + childNodeCount : 1 + children : [ + [0] : { + attributes : [ + ] + backendNodeId : <backendNodeId> + childNodeCount : 2 + children : [ + [0] : { + attributes : [ ] + backendNodeId : <backendNodeId> + childNodeCount : 0 + children : [ + ] + localName : head + nodeId : <nodeId> + nodeName : HEAD + nodeType : 1 + nodeValue : + parentId : <parentId> } - ], - "shadowRootType": "open" + [1] : { + attributes : [ + [0] : onload + [1] : addShadowDOM() + ] + backendNodeId : <backendNodeId> + childNodeCount : 2 + children : [ + [0] : { + attributes : [ + [0] : id + [1] : element_in_an_iframe + ] + backendNodeId : <backendNodeId> + childNodeCount : 0 + children : [ + ] + localName : div + nodeId : <nodeId> + nodeName : DIV + nodeType : 1 + nodeValue : + parentId : <parentId> + shadowRoots : [ + [0] : { + backendNodeId : <backendNodeId> + childNodeCount : 1 + children : [ + [0] : { + attributes : [ + [0] : style + [1] : color: red; + ] + backendNodeId : <backendNodeId> + childNodeCount : 1 + children : [ + [0] : { + attributes : [ + ] + backendNodeId : <backendNodeId> + childNodeCount : 1 + children : [ + [0] : { + backendNodeId : <backendNodeId> + localName : + nodeId : <nodeId> + nodeName : #text + nodeType : 3 + nodeValue : Hello from the shadow dom! + parentId : <parentId> + } + ] + localName : h1 + nodeId : <nodeId> + nodeName : H1 + nodeType : 1 + nodeValue : + parentId : <parentId> + } + ] + localName : div + nodeId : <nodeId> + nodeName : DIV + nodeType : 1 + nodeValue : + parentId : <parentId> + } + ] + localName : + nodeId : <nodeId> + nodeName : #document-fragment + nodeType : 11 + nodeValue : + shadowRootType : open + } + ] + } + [1] : { + attributes : [ + ] + backendNodeId : <backendNodeId> + childNodeCount : 1 + children : [ + [0] : { + backendNodeId : <backendNodeId> + localName : + nodeId : <nodeId> + nodeName : #text + nodeType : 3 + nodeValue : function addShadowDOM() { var host = document.getElementById("element_in_an_iframe").createShadowRoot(); var template = document.querySelector("#shadow-template"); host.appendChild(template.content); template.remove(); } + parentId : <parentId> + } + ] + localName : script + nodeId : <nodeId> + nodeName : SCRIPT + nodeType : 1 + nodeValue : + parentId : <parentId> + } + ] + localName : body + nodeId : <nodeId> + nodeName : BODY + nodeType : 1 + nodeValue : + parentId : <parentId> + } + ] + frameId : <frameId> + localName : html + nodeId : <nodeId> + nodeName : HTML + nodeType : 1 + nodeValue : + parentId : <parentId> } ] - }, - { - "nodeId": 34, - "parentId": 28, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "SCRIPT", - "localName": "script", - "nodeValue": "", - "childNodeCount": 1, - "children": [ - { - "nodeId": 35, - "parentId": 34, - "backendNodeId": "<number>", - "nodeType": 3, - "nodeName": "#text", - "localName": "", - "nodeValue": "\nfunction addShadowDOM() {\n var host = document.getElementById(\"element_in_an_iframe\").createShadowRoot();\n var template = document.querySelector(\"#shadow-template\");\n host.appendChild(template.content);\n template.remove();\n}\n" - } - ], - "attributes": [] + documentURL : <documentURL> + localName : + nodeId : <nodeId> + nodeName : #document + nodeType : 9 + nodeValue : + xmlVersion : } - ], - "attributes": [ - "onload", - "addShadowDOM()" - ] - } - ], - "attributes": [], - "frameId": "???" - } - ], - "documentURL": "???", - "baseURL": "???", - "xmlVersion": "" - } + frameId : <frameId> + localName : iframe + nodeId : <nodeId> + nodeName : IFRAME + nodeType : 1 + nodeValue : + parentId : <parentId> + } + ] + localName : div + nodeId : <nodeId> + nodeName : DIV + nodeType : 1 + nodeValue : + parentId : <parentId> + } + ] + localName : div + nodeId : <nodeId> + nodeName : DIV + nodeType : 1 + nodeValue : + parentId : <parentId> + } + [1] : { + attributes : [ + [0] : id + [1] : targetDiv + ] + backendNodeId : <backendNodeId> + childNodeCount : 0 + children : [ + ] + localName : div + nodeId : <nodeId> + nodeName : DIV + nodeType : 1 + nodeValue : + parentId : <parentId> + } + ] + localName : div + nodeId : <nodeId> + nodeName : DIV + nodeType : 1 + nodeValue : + parentId : <parentId> } - ], - "attributes": [ - "id", - "depth-3" ] + localName : body + nodeId : <nodeId> + nodeName : BODY + nodeType : 1 + nodeValue : + parentId : <parentId> } - ], - "attributes": [ - "id", - "depth-2" ] - }, - { - "nodeId": 36, - "parentId": 21, - "backendNodeId": "<number>", - "nodeType": 1, - "nodeName": "DIV", - "localName": "div", - "nodeValue": "", - "childNodeCount": 0, - "children": [], - "attributes": [ - "id", - "targetDiv" - ] + frameId : <frameId> + localName : html + nodeId : <nodeId> + nodeName : HTML + nodeType : 1 + nodeValue : + parentId : <parentId> } - ], - "attributes": [ - "id", - "depth-1" ] + documentURL : <documentURL> + localName : + nodeId : <nodeId> + nodeName : #document + nodeType : 9 + nodeValue : + xmlVersion : } - ], - "attributes": [] + } }
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-document-with-child-nodes.html b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-document-with-child-nodes.html deleted file mode 100644 index d354dac..0000000 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-document-with-child-nodes.html +++ /dev/null
@@ -1,83 +0,0 @@ -<html> -<head> -<script type="text/javascript" src="../../http/tests/inspector-protocol/resources/inspector-protocol-test.js"></script> -<script type="text/javascript"> - -function test() -{ - getDocument(); - - function getDocument() - { - InspectorTest.sendCommand("DOM.getDocument", {"depth": -1}, function(messageObject) { - if (messageObject.hasOwnProperty("error")) - InspectorTest.log("Backend error: " + messageObject.error.message + " (" + messageObject.error.code + ")\n"); - - var iframeOwner = messageObject.result.root.children[0].children[1].children[0].children[0].children[0].children[0]; - if (iframeOwner.contentDocument.children) { - InspectorTest.log("Error IFrame node should not include children: " + JSON.stringify(iframeOwner, null, " ")); - InspectorTest.completeTest(); - } else { - getDocumentPlusIframe(); - } - }); - }; - - function replacePropertyRecursive(object, propertyNameToReplace) - { - for (var propertyName in object) { - if (!object.hasOwnProperty(propertyName)) - continue; - if (propertyName === propertyNameToReplace) { - object[propertyName] = "???"; - } else if (typeof object[propertyName] === "object") { - replacePropertyRecursive(object[propertyName], propertyNameToReplace); - } - } - } - - function getDocumentPlusIframe() - { - InspectorTest.sendCommand("DOM.getDocument", {"depth": -1, "pierce": true}, function(messageObject) { - if (messageObject.hasOwnProperty("error")) - InspectorTest.log("Backend error: " + messageObject.error.message + " (" + messageObject.error.code + ")\n"); - - var iframeOwner = messageObject.result.root.children[0].children[1].children[0].children[0].children[0].children[0]; - - // Replace properties that tend to change every run. - replacePropertyRecursive(messageObject, "frameId"); - replacePropertyRecursive(messageObject, "documentURL"); - replacePropertyRecursive(messageObject, "baseURL"); - - var bodyId = messageObject.result.root.children[0].children[1]; - function stabilize(key, value) { - var unstableKeys = ["backendNodeId"]; - if (unstableKeys.indexOf(key) !== -1) - return "<" + typeof(value) + ">"; - return value; - } - InspectorTest.log(JSON.stringify(bodyId, stabilize, " ")); - InspectorTest.completeTest(); - }); - }; -}; - -window.addEventListener("DOMContentLoaded", function () { - runTest(); -}, false); - -</script> -</head> -<body> - -<div id="depth-1"> - <div id="depth-2"> - <div id="depth-3"> - <iframe src="resources/shadow-dom-iframe.html"></iframe> - </div> - </div> - <div id="targetDiv"></div> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-document-with-child-nodes.js b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-document-with-child-nodes.js new file mode 100644 index 0000000..6c807ff --- /dev/null +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-request-document-with-child-nodes.js
@@ -0,0 +1,23 @@ +(async function(testRunner) { + var {page, session, dp} = await testRunner.startHTML(` + <div id='depth-1'> + <div id='depth-2'> + <div id='depth-3'> + <iframe src='../dom/resources/shadow-dom-iframe.html'></iframe> + </div> + </div> + <div id='targetDiv'></div> + </div> + `, ''); + var response = await dp.DOM.getDocument({depth: -1}); + var iframeOwner = response.result.root.children[0].children[1].children[0].children[0].children[0].children[0]; + if (iframeOwner.contentDocument.children) { + testRunner.die('Error IFrame node should not include children: ' + JSON.stringify(iframeOwner, null, ' ')); + return; + } + + var response = await dp.DOM.getDocument({depth: -1, pierce: true}); + testRunner.logMessage(response); + testRunner.completeTest(); +}) +
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-setInspectModeEnabled-expected.txt b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-setInspectModeEnabled-expected.txt index 97bff89..f2c9ae0 100644 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-setInspectModeEnabled-expected.txt +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-setInspectModeEnabled-expected.txt
@@ -1,2 +1,3 @@ + DOM.inspectNodeRequested: div
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-setInspectModeEnabled.html b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-setInspectModeEnabled.html deleted file mode 100644 index a4d7a88..0000000 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-setInspectModeEnabled.html +++ /dev/null
@@ -1,54 +0,0 @@ -<html> -<head> -<script type="text/javascript" src="../../http/tests/inspector-protocol/resources/inspector-protocol-test.js"></script> -<script> - -function test() -{ - var nodeInfo = {}; - InspectorTest.eventHandler["DOM.setChildNodes"] = setChildNodes; - InspectorTest.eventHandler["Overlay.inspectNodeRequested"] = inspectNodeRequested; - InspectorTest.sendCommand("DOM.enable", {}); - InspectorTest.sendCommand("Overlay.enable", {}); - InspectorTest.sendCommand("Overlay.setInspectMode", { "mode": "searchForNode", highlightConfig: {} }, onSetModeEnabled); - - function onSetModeEnabled(message) - { - if (message.error) { - InspectorTest.log(message.error.message); - InspectorTest.completeTest(); - return; - } - - InspectorTest.sendCommand("Input.dispatchMouseEvent", { "type": "mouseMoved", "button": "left", "clickCount": 1, "x": 150, "y": 150 }); - InspectorTest.sendCommand("Input.dispatchMouseEvent", { "type": "mousePressed", "button": "left", "clickCount": 1, "x": 150, "y": 150 }); - InspectorTest.sendCommand("Input.dispatchMouseEvent", { "type": "mouseReleased", "button": "left", "clickCount": 1, "x": 150, "y": 150 }); - } - - function setChildNodes(message) - { - var nodes = message.params.nodes; - for (var i = 0; i < nodes.length; ++i) { - nodeInfo[nodes[i].nodeId] = nodes[i]; - delete nodes[i].nodeId; - } - } - - function inspectNodeRequested(message) - { - InspectorTest.sendCommand("DOM.pushNodesByBackendIdsToFrontend", { "backendNodeIds": [ message.params.backendNodeId ] }, onNodeResolved); - } - - function onNodeResolved(message) - { - InspectorTest.log("DOM.inspectNodeRequested: " + nodeInfo[message.result.nodeIds[0]].localName); - InspectorTest.completeTest(); - } -} - -</script> -</head> -<body onload="runTest()"> -<div style="position:absolute;top:100;left:100;width:100;height:100;background:black"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-setInspectModeEnabled.js b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-setInspectModeEnabled.js new file mode 100644 index 0000000..041f2d4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-setInspectModeEnabled.js
@@ -0,0 +1,23 @@ +(async function(testRunner) { + var {page, session, dp} = await testRunner.startHTML(` + <div style="position:absolute;top:100;left:100;width:100;height:100;background:black"></div> + `, ''); + var NodeTracker = await testRunner.loadScript('../resources/node-tracker.js'); + var nodeTracker = new NodeTracker(dp); + dp.DOM.enable(); + dp.Overlay.enable(); + var message = await dp.Overlay.setInspectMode({ mode: 'searchForNode', highlightConfig: {} }); + if (message.error) { + testRunner.die(message.error.message); + return; + } + dp.Input.dispatchMouseEvent({type: 'mouseMoved', button: 'left', clickCount: 1, x: 150, y: 150 }); + dp.Input.dispatchMouseEvent({type: 'mousePressed', button: 'left', clickCount: 1, x: 150, y: 150 }); + dp.Input.dispatchMouseEvent({type: 'mouseReleased', button: 'left', clickCount: 1, x: 150, y: 150 }); + + var message = await dp.Overlay.onceInspectNodeRequested(); + message = await dp.DOM.pushNodesByBackendIdsToFrontend({backendNodeIds: [message.params.backendNodeId]}); + testRunner.log('DOM.inspectNodeRequested: ' + nodeTracker.nodeForId(message.result.nodeIds[0]).localName); + testRunner.completeTest(); +}) +
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-setOuterHTML-expected.txt b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-setOuterHTML-expected.txt index 58ff6b7..6686493 100644 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-setOuterHTML-expected.txt +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-setOuterHTML-expected.txt
@@ -1,2 +1,8 @@ -Привет мир 1 -Привет мир 2 + +{ + id : <messageId> + result : { + outerHTML : <body><div>Привет мир 1</div> <div>Привет мир 2</div> </body> + } +} +
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-setOuterHTML.html b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-setOuterHTML.html deleted file mode 100644 index 9242de38..0000000 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-setOuterHTML.html +++ /dev/null
@@ -1,53 +0,0 @@ -<html> -<head> -<meta charset="utf8"> -<script type="text/javascript" src="../../http/tests/inspector-protocol/resources/inspector-protocol-test.js"></script> -<script> - -function test() -{ - InspectorTest.sendCommand("DOM.getDocument", {}, onGotDocument); - - var bodyId; - function onGotDocument(msg) - { - if (InspectorTest.completeTestIfError(msg)) - return; - InspectorTest.sendCommand("DOM.querySelector", { nodeId: msg.result.root.nodeId, selector: "body" }, onQuerySelector1); - InspectorTest.sendCommand("DOM.querySelector", { nodeId: msg.result.root.nodeId, selector: "#id" }, onQuerySelector2); - } - - function onQuerySelector1(msg) - { - if (InspectorTest.completeTestIfError(msg)) - return; - bodyId = msg.result.nodeId; - } - - function onQuerySelector2(msg) - { - if (InspectorTest.completeTestIfError(msg)) - return; - InspectorTest.sendCommand("DOM.setOuterHTML", { nodeId: msg.result.nodeId, outerHTML: "<div>Привет мир 1</div>" }, onSetOuterHTML); - } - - function onSetOuterHTML(msg) - { - if (InspectorTest.completeTestIfError(msg)) - return; - InspectorTest.sendCommand("DOM.getOuterHTML", { nodeId: bodyId }, onGetOuterHTML); - } - - function onGetOuterHTML(msg) - { - InspectorTest.completeTest(); - } -} - -</script> -</head> -<body onload="runTest()"> - <div id="id">Привет мир</div> - <div>Привет мир 2</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-setOuterHTML.js b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-setOuterHTML.js new file mode 100644 index 0000000..db1d9cf0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-setOuterHTML.js
@@ -0,0 +1,16 @@ +(async function(testRunner) { + var {page, session, dp} = await testRunner.startHTML(` + <div id="id">Привет мир</div> + <div>Привет мир 2</div> + `, ''); + + var message = await dp.DOM.getDocument(); + message = await dp.DOM.querySelector({ nodeId: message.result.root.nodeId, selector: "body" }); + var bodyId = message.result.nodeId; + + message = await dp.DOM.querySelector({ nodeId: bodyId, selector: "#id" }); + await dp.DOM.setOuterHTML({nodeId: message.result.nodeId, outerHTML: "<div>Привет мир 1</div>"}); + message = await dp.DOM.getOuterHTML({nodeId: bodyId}); + testRunner.logMessage(message); + testRunner.completeTest(); +})
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-svg-attribute-case-expected.txt b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-svg-attribute-case-expected.txt index 6e88928..0b378aa8 100644 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-svg-attribute-case-expected.txt +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-svg-attribute-case-expected.txt
@@ -1,4 +1,4 @@ -Test that DOM attribute case is preserved when modified in XML documents. +Test that DOM attribute case is preserved when modified in XML documents. Original attributes: id=main xmlns=http://www.w3.org/2000/svg
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-svg-attribute-case.html b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-svg-attribute-case.html deleted file mode 100644 index 9285fc15..0000000 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-svg-attribute-case.html +++ /dev/null
@@ -1,87 +0,0 @@ -<html> -<head> -<script type="text/javascript" src="../../http/tests/inspector-protocol/resources/inspector-protocol-test.js"></script> -<script> - -function test() -{ - var rootNodeId; - var nodeId; - - InspectorTest.eventHandler["DOM.attributeModified"] = onAttributeModified; - - InspectorTest.sendCommand("DOM.getDocument", {}, onGotDocument); - - function onGotDocument(msg) - { - if (msg.error) { - InspectorTest.log(msg.error.message); - InspectorTest.completeTest(); - return; - } - rootNodeId = msg.result.root.nodeId; - getMainNodeId(); - } - - function getMainNodeId(next) - { - InspectorTest.sendCommand("DOM.querySelector", { "nodeId": rootNodeId, "selector": "#main" }, onQuery); - function onQuery(msg) - { - if (!checkError(msg)) - return; - nodeId = msg.result.nodeId; - onGotMainNodeId(); - } - } - - function onGotMainNodeId() - { - InspectorTest.log("Original attributes:"); - dumpMainElementAttributes(onDumpedOriginal); - } - - function onDumpedOriginal() - { - InspectorTest.sendCommand("DOM.setAttributesAsText", { "nodeId": nodeId, "name": "viewBox", "text": "viewBox=\"0 0 120 120\"" }); - } - - function onAttributeModified(msg) { - var result = msg.params; - InspectorTest.log("Modified attribute:"); - InspectorTest.log(result.name + "=" + result.value); - InspectorTest.completeTest(); - } - - function dumpMainElementAttributes(next) - { - InspectorTest.sendCommand("DOM.getAttributes", { "nodeId": nodeId }, onAttributes); - - function onAttributes(msg) - { - if (!checkError(msg)) - return; - var array = msg.result.attributes; - for (var i = 0; i < array.length; i += 2) - InspectorTest.log(array[i] + "=" + array[i + 1]); - next(); - } - } - - function checkError(msg) - { - if (msg.error) { - InspectorTest.log(msg.error.message); - InspectorTest.completeTest(); - return false; - } - return true; - } -} -</script> -</head> -<body onload="runTest()"> -Test that DOM attribute case is preserved when modified in XML documents. -<svg id="main" xmlns="http://www.w3.org/2000/svg" width="600" height="500" viewBox="0 0 100 120" /> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-svg-attribute-case.js b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-svg-attribute-case.js new file mode 100644 index 0000000..0d5a292f --- /dev/null +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/dom-svg-attribute-case.js
@@ -0,0 +1,21 @@ +(async function(testRunner) { + var {page, session, dp} = await testRunner.startHTML(` + <svg id='main' xmlns='http://www.w3.org/2000/svg' width='600' height='500' viewBox='0 0 100 120' /> + `, 'Test that DOM attribute case is preserved when modified in XML documents.'); + + var response = await dp.DOM.getDocument(); + var rootNodeId = response.result.root.nodeId; + + response = await dp.DOM.querySelector({nodeId: rootNodeId, selector: '#main'}) + var nodeId = response.result.nodeId; + testRunner.log('Original attributes:'); + response = await dp.DOM.getAttributes({nodeId}); + for (var i = 0; i < response.result.attributes.length; i += 2) + testRunner.log(response.result.attributes[i] + '=' + response.result.attributes[i + 1]); + + dp.DOM.setAttributesAsText({nodeId, name: 'viewBox', text: 'viewBox="0 0 120 120"'}); + response = await dp.DOM.onceAttributeModified(); + testRunner.log('Modified attribute:'); + testRunner.log(response.params.name + '=' + response.params.value); + testRunner.completeTest(); +})
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/push-children-on-pseudo-addition-expected.txt b/third_party/WebKit/LayoutTests/inspector-protocol/dom/push-children-on-pseudo-addition-expected.txt index b1c0659..a134109 100644 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/push-children-on-pseudo-addition-expected.txt +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/push-children-on-pseudo-addition-expected.txt
@@ -1,4 +1,5 @@ + === Get the Document ===
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/push-children-on-pseudo-addition.html b/third_party/WebKit/LayoutTests/inspector-protocol/dom/push-children-on-pseudo-addition.html deleted file mode 100644 index 0b90be9..0000000 --- a/third_party/WebKit/LayoutTests/inspector-protocol/dom/push-children-on-pseudo-addition.html +++ /dev/null
@@ -1,130 +0,0 @@ -<html> -<head> -<script type="text/javascript" src="../../http/tests/inspector-protocol/resources/inspector-protocol-test.js"></script> -<script> - -function addBeforeElement() -{ - document.getElementById("style").textContent = "#for-pseudo:before { content: \"BEFORE\" }"; -} - -function test() -{ - var nodeInfo = {}; - var childrenCallback; - - InspectorTest.eventHandler["DOM.setChildNodes"] = setChildNodes; - InspectorTest.eventHandler["DOM.pseudoElementAdded"] = pseudoElementAdded; - getDocument(); - - function getDocument() - { - step({ - name: "Get the Document", - command: "DOM.getDocument", - parameters: {}, - callback: getImmediateChildren - }); - }; - - function getImmediateChildren(result) - { - var bodyId = result.root.children[0].children[1].nodeId; - childrenCallback = onChildrenRequested; - step({ - name: "Get immediate children of the body", - command: "DOM.requestChildNodes", - parameters: {"nodeId": bodyId} - }); - }; - - function onChildrenRequested() - { - step({ - name: "Add #for-pseudo:before element", - command: "Runtime.evaluate", - parameters: {expression: "addBeforeElement()"} - }); - } - - function pseudoElementAdded(message) - { - var nodeData = findNodeById("inner-span"); - assertEquals(true, !!nodeData, "#inner-span has been received"); - InspectorTest.completeTest(); - } - - function setChildNodes(message) - { - var nodes = message.params.nodes; - for (var i = 0; i < nodes.length; ++i) - addNode(nodes[i]); - var callback = childrenCallback; - childrenCallback = null; - if (callback) - callback(); - } - - function step(test) - { - InspectorTest.log("\n=== " + test.name + " ===\n"); - InspectorTest.sendCommand(test.command, test.parameters, function(messageObject) { - if (messageObject.hasOwnProperty("error")) - InspectorTest.log("Backend error: " + messageObject.error.message + " (" + messageObject.error.code + ")\n"); - - if (test.callback) - test.callback(messageObject.result); - }); - } - - function findNodeById(id) - { - for (var nodeId in nodeInfo) { - var node = nodeInfo[nodeId]; - var attrs = node.attributes; - if (!attrs) - continue; - for (var i = 0; i < attrs.length; i += 2) { - var name = attrs[i]; - if (name !== "id") - continue; - if (attrs[i + 1] === id) - return {nodeId: nodeId, node: node}; - } - } - return null; - } - - function addNodesRecursive(root) - { - addNode(root); - if (!root.children) - return; - for (var i = 0; i < root.children.length; ++i) - addNodesRecursive(root.children[i]); - } - - function addNode(node) - { - nodeInfo[node.nodeId] = node; - delete node.nodeId; - } - - function assertEquals(expected, actual, message) - { - if (expected === actual) { - InspectorTest.log("PASS: " + message); - return; - } - InspectorTest.log("FAIL: " + message + ": expected: <" + expected + "> but found <" + actual + ">"); - } -} - -</script> -<style id="style"> -</style> -</head> -<body id="body" onload="runTest()"> -<div id="for-pseudo"><span id="inner-span"></span></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/push-children-on-pseudo-addition.js b/third_party/WebKit/LayoutTests/inspector-protocol/dom/push-children-on-pseudo-addition.js new file mode 100644 index 0000000..8fd19e2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/push-children-on-pseudo-addition.js
@@ -0,0 +1,34 @@ +(async function(testRunner) { + var {page, session, dp} = await testRunner.startHTML(` + <style id='style'> + </style> + <div id='for-pseudo'><span id='inner-span'></span></div> + `, ''); + + var DOMHelper = await testRunner.loadScript('../resources/dom-helper.js'); + var NodeTracker = await testRunner.loadScript('../resources/node-tracker.js'); + var nodeTracker = new NodeTracker(dp); + + testRunner.log('\n=== Get the Document ===\n'); + var response = await dp.DOM.getDocument(); + var bodyId = response.result.root.children[0].children[1].nodeId; + + testRunner.log('\n=== Get immediate children of the body ===\n'); + dp.DOM.requestChildNodes({nodeId: bodyId}); + await dp.DOM.onceSetChildNodes(); + + testRunner.log('\n=== Add #for-pseudo:before element ===\n'); + session.evaluate(() => { + document.getElementById('style').textContent = '#for-pseudo:before { content: "BEFORE" }'; + }); + await dp.DOM.oncePseudoElementAdded(); + + for (var node of nodeTracker.nodes()) { + if (DOMHelper.attributes(node).get('id') === 'inner-span') { + testRunner.log('PASS: #inner-span has been received'); + testRunner.completeTest(); + return; + } + } + testRunner.die('FAIL: #inner-span was not received'); +})
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/resources/dom-getFlattenedDocument.html b/third_party/WebKit/LayoutTests/inspector-protocol/dom/resources/dom-getFlattenedDocument.html new file mode 100644 index 0000000..5e125cb --- /dev/null +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/resources/dom-getFlattenedDocument.html
@@ -0,0 +1,25 @@ +<head> +<template id='shadow-template'> +<style> +:host { + color: red; +} +</style> +<div></div><h1>Hi from a template!</h1></div> +</template> +</head> +<body class='body-class'> + <div id='A'> A + <div id='B'> B + <div id='C'> C + <div id='D'> D + <div id='E'> E + </div> + </div> + </div> + </div> + </div> + + <iframe src='./simple-iframe.html' width='400' height='200'></iframe> + <div id='shadow-host'></div> +</body>
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/dom/resources/dom-request-child-nodes-traverse-frames.html b/third_party/WebKit/LayoutTests/inspector-protocol/dom/resources/dom-request-child-nodes-traverse-frames.html new file mode 100644 index 0000000..9fe9dde --- /dev/null +++ b/third_party/WebKit/LayoutTests/inspector-protocol/dom/resources/dom-request-child-nodes-traverse-frames.html
@@ -0,0 +1,7 @@ +<div id="depth-1"> + <div id="depth-2"> + <div id="depth-3"> + <iframe src="iframe.html"></iframe> + </div> + </div> +</div>
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/resources/dom-helper.js b/third_party/WebKit/LayoutTests/inspector-protocol/resources/dom-helper.js new file mode 100644 index 0000000..196e703 --- /dev/null +++ b/third_party/WebKit/LayoutTests/inspector-protocol/resources/dom-helper.js
@@ -0,0 +1,10 @@ +(class DOMHelper { + static attributes(node) { + var attr = new Map(); + if (!node.attributes) + return attr; + for (var i = 0; i < node.attributes.length; i += 2) + attr.set(node.attributes[i], node.attributes[i + 1]); + return attr; + } +})
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/resources/inspector-protocol-test.js b/third_party/WebKit/LayoutTests/inspector-protocol/resources/inspector-protocol-test.js index 2c1b471..5530d82 100644 --- a/third_party/WebKit/LayoutTests/inspector-protocol/resources/inspector-protocol-test.js +++ b/third_party/WebKit/LayoutTests/inspector-protocol/resources/inspector-protocol-test.js
@@ -23,11 +23,11 @@ this._log.call(null, text); } - logMessage(originalMessage) { + logMessage(originalMessage, title) { var message = JSON.parse(JSON.stringify(originalMessage)); if (message.id) message.id = '<messageId>'; - const nonStableFields = new Set(['nodeId', 'objectId', 'scriptId', 'timestamp']); + const nonStableFields = new Set(['nodeId', 'objectId', 'scriptId', 'timestamp', 'backendNodeId', 'parentId', 'frameId', 'baseURL', 'documentURL']); var objects = [message]; while (objects.length) { var object = objects.shift(); @@ -40,7 +40,7 @@ objects.push(object[key]); } } - this.logObject(message); + this.logObject(message, title); return originalMessage; } @@ -208,7 +208,10 @@ if (!message.params.frame.parentId) callback(); }); - await promise; + await Promise.all([ + promise, + session.protocol.Page.onceLoadEventFired() + ]); await session.disconnect(); } @@ -219,7 +222,7 @@ html = html.replace(/'/g, "\\'").replace(/\n/g, '\\n'); var session = await this.createSession(); - await session.protocol.Runtime.evaluate({expression: `document.body.innerHTML='${html}'`}); + await session.protocol.Runtime.evaluate({expression: `document.write('${html}');document.close();`}); await session.disconnect(); } }; @@ -253,6 +256,8 @@ } async evaluate(code) { + if (typeof code === 'function') + code = `(${code.toString()})()`; var response = await this.protocol.Runtime.evaluate({expression: code, returnByValue: true}); if (response.error) { this._testRunner.log(`Error while evaluating '${code}': ${response.error}`); @@ -263,6 +268,8 @@ } async evaluateAsync(code) { + if (typeof code === 'function') + code = `(${code.toString()})()`; var response = await this.protocol.Runtime.evaluate({expression: code, returnByValue: true, awaitPromise: true}); if (response.error) { this._testRunner.log(`Error while evaluating async '${code}': ${response.error}`);
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/resources/node-tracker.js b/third_party/WebKit/LayoutTests/inspector-protocol/resources/node-tracker.js new file mode 100644 index 0000000..07a04fa --- /dev/null +++ b/third_party/WebKit/LayoutTests/inspector-protocol/resources/node-tracker.js
@@ -0,0 +1,28 @@ +(class NodeTracker { + constructor(dp) { + this._nodes = new Map(); + dp.DOM.onSetChildNodes(message => message.params.nodes.forEach(node => this._addNode(node))); + } + + addDocumentNode(documentNode) { + this._addNode(documentNode); + } + + _addNode(node) { + this._nodes.set(node.nodeId, node); + if (node.children) + node.children.forEach(node => this._addNode(node)); + } + + nodeForId(nodeId) { + return this._nodes.get(nodeId) || null; + } + + nodes() { + return Array.from(this._nodes.values()); + } + + nodeIds() { + return Array.from(this._nodes.keys()); + } +})
diff --git a/third_party/WebKit/LayoutTests/transitions/transitions-parsing-expected.txt b/third_party/WebKit/LayoutTests/transitions/transitions-parsing-expected.txt index 2bd1db5..211cd98 100644 --- a/third_party/WebKit/LayoutTests/transitions/transitions-parsing-expected.txt +++ b/third_party/WebKit/LayoutTests/transitions/transitions-parsing-expected.txt
@@ -59,6 +59,10 @@ PASS computedStyle.transitionProperty is 'solid' PASS style.webkitTransitionProperty is 'solid' PASS computedStyle.webkitTransitionProperty is 'solid' +PASS style.transitionProperty is 'default, top' +PASS computedStyle.transitionProperty is 'default, top' +PASS style.webkitTransitionProperty is 'default, top' +PASS computedStyle.webkitTransitionProperty is 'default, top' Invalid transition-property values. PASS style.transitionProperty is '' PASS computedStyle.transitionProperty is 'all' @@ -103,7 +107,6 @@ PASS style.transitionProperty is '' PASS style.transitionProperty is '' PASS style.transitionProperty is '' -PASS style.transitionProperty is '' Valid transition-duration values. PASS computedStyle.transitionDuration is '0s' PASS computedStyle.webkitTransitionDuration is '0s'
diff --git a/third_party/WebKit/LayoutTests/transitions/transitions-parsing.html b/third_party/WebKit/LayoutTests/transitions/transitions-parsing.html index 4e9c4c2..4ed6d2f 100644 --- a/third_party/WebKit/LayoutTests/transitions/transitions-parsing.html +++ b/third_party/WebKit/LayoutTests/transitions/transitions-parsing.html
@@ -109,6 +109,12 @@ shouldBe("style.webkitTransitionProperty", "'solid'"); shouldBe("computedStyle.webkitTransitionProperty", "'solid'"); +style.transitionProperty = "default, top"; +shouldBe("style.transitionProperty", "'default, top'"); +shouldBe("computedStyle.transitionProperty", "'default, top'"); +shouldBe("style.webkitTransitionProperty", "'default, top'"); +shouldBe("computedStyle.webkitTransitionProperty", "'default, top'"); + debug("Invalid transition-property values."); style.transitionProperty = ""; @@ -178,8 +184,6 @@ shouldBe("style.transitionProperty", "''"); style.transitionProperty = "left, unset"; shouldBe("style.transitionProperty", "''"); -style.transitionProperty = "default, top"; -shouldBe("style.transitionProperty", "''"); style.transitionProperty = "";
diff --git a/third_party/WebKit/Source/bindings/core/v8/LocalWindowProxy.cpp b/third_party/WebKit/Source/bindings/core/v8/LocalWindowProxy.cpp index d8c2cd1..b136e05 100644 --- a/third_party/WebKit/Source/bindings/core/v8/LocalWindowProxy.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/LocalWindowProxy.cpp
@@ -76,8 +76,7 @@ // The embedder could run arbitrary code in response to the // willReleaseScriptContext callback, so all disposing should happen after // it returns. - GetFrame()->Loader().Client()->WillReleaseScriptContext(context, - world_->GetWorldId()); + GetFrame()->Client()->WillReleaseScriptContext(context, world_->GetWorldId()); MainThreadDebugger::Instance()->ContextWillBeDestroyed(script_state_.Get()); if (next_status == Lifecycle::kGlobalObjectIsDetached) { @@ -160,8 +159,7 @@ MainThreadDebugger::Instance()->ContextCreated(script_state_.Get(), GetFrame(), origin); - GetFrame()->Loader().Client()->DidCreateScriptContext(context, - world_->GetWorldId()); + GetFrame()->Client()->DidCreateScriptContext(context, world_->GetWorldId()); // If conditional features for window have been queued before the V8 context // was ready, then inject them into the context now if (world_->IsMainWorld()) { @@ -181,7 +179,7 @@ Vector<const char*> extension_names; // Dynamically tell v8 about our extensions now. - if (GetFrame()->Loader().Client()->AllowScriptExtensions()) { + if (GetFrame()->Client()->AllowScriptExtensions()) { const V8Extensions& extensions = ScriptController::RegisteredExtensions(); extension_names.ReserveInitialCapacity(extensions.size()); for (const auto* extension : extensions)
diff --git a/third_party/WebKit/Source/core/animation/CSSInterpolationTypesMap.cpp b/third_party/WebKit/Source/core/animation/CSSInterpolationTypesMap.cpp index 14c85b9..e534e72e 100644 --- a/third_party/WebKit/Source/core/animation/CSSInterpolationTypesMap.cpp +++ b/third_party/WebKit/Source/core/animation/CSSInterpolationTypesMap.cpp
@@ -379,15 +379,18 @@ result.push_back(WTF::MakeUnique<CSSImageInterpolationType>( property, ®istration)); break; - case CSSSyntaxType::kUrl: case CSSSyntaxType::kInteger: + result.push_back(WTF::MakeUnique<CSSNumberInterpolationType>( + property, ®istration, true)); case CSSSyntaxType::kTransformList: // TODO(alancutter): Support smooth interpolation of these types. break; - case CSSSyntaxType::kTokenStream: - case CSSSyntaxType::kIdent: case CSSSyntaxType::kCustomIdent: - // Uses the CSSValueInterpolationType added below. + case CSSSyntaxType::kIdent: + case CSSSyntaxType::kTokenStream: + case CSSSyntaxType::kUrl: + // No interpolation behaviour defined, uses the + // CSSValueInterpolationType added below. break; default: NOTREACHED();
diff --git a/third_party/WebKit/Source/core/animation/CSSNumberInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSNumberInterpolationType.cpp index 8bf5684..fe5ff9a 100644 --- a/third_party/WebKit/Source/core/animation/CSSNumberInterpolationType.cpp +++ b/third_party/WebKit/Source/core/animation/CSSNumberInterpolationType.cpp
@@ -41,7 +41,8 @@ const InterpolableValue& value, const NonInterpolableValue*, const StyleResolverState&) const { - return CSSPrimitiveValue::Create(ToInterpolableNumber(value).Value(), + double number = ToInterpolableNumber(value).Value(); + return CSSPrimitiveValue::Create(round_to_integer_ ? round(number) : number, CSSPrimitiveValue::UnitType::kNumber); }
diff --git a/third_party/WebKit/Source/core/animation/CSSNumberInterpolationType.h b/third_party/WebKit/Source/core/animation/CSSNumberInterpolationType.h index 99c40755a..05061766 100644 --- a/third_party/WebKit/Source/core/animation/CSSNumberInterpolationType.h +++ b/third_party/WebKit/Source/core/animation/CSSNumberInterpolationType.h
@@ -12,8 +12,13 @@ class CSSNumberInterpolationType : public CSSInterpolationType { public: CSSNumberInterpolationType(PropertyHandle property, - const PropertyRegistration* registration = nullptr) - : CSSInterpolationType(property, registration) {} + const PropertyRegistration* registration = nullptr, + bool round_to_integer = false) + : CSSInterpolationType(property, registration), + round_to_integer_(round_to_integer) { + // This integer flag only applies to registered custom properties. + DCHECK(!round_to_integer_ || property.IsCSSCustomProperty()); + } InterpolationValue MaybeConvertStandardPropertyUnderlyingValue( const ComputedStyle&) const final; @@ -36,6 +41,8 @@ InterpolationValue MaybeConvertValue(const CSSValue&, const StyleResolverState*, ConversionCheckers&) const final; + + const bool round_to_integer_; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/css/CSSProperties.json5 b/third_party/WebKit/Source/core/css/CSSProperties.json5 index a21ef9d7..a79ce3f 100644 --- a/third_party/WebKit/Source/core/css/CSSProperties.json5 +++ b/third_party/WebKit/Source/core/css/CSSProperties.json5
@@ -385,6 +385,11 @@ inherited: true, interpolable: true, priority: "High", + field_template: "storage_only", + include_paths: ["platform/graphics/Color.h"], + type_name: "Color", + field_group: "inherited", + default_value: "Color::kBlack", }, { name: "direction", @@ -639,6 +644,12 @@ converter: "ConvertFilterOperations", interpolable: true, runtime_flag: "CSSBackdropFilter", + field_template: "storage_only", + type_name: "StyleFilterData", + field_group: "rare-non-inherited", + default_value: "DataPersistent<StyleFilterData>()", + wrapper_pointer_name: "DataPersistent", + include_paths: ["core/style/StyleFilterData.h"], }, { name: "backface-visibility", @@ -665,6 +676,11 @@ api_methods: ["parseSingleValue"], custom_all: true, interpolable: true, + field_template: "storage_only", + include_paths: ["core/css/StyleColor.h"], + type_name: "StyleColor", + default_value: "StyleColor(Color::kTransparent)", + field_group: "background", }, { name: "background-image", @@ -1206,6 +1222,12 @@ api_class: "CSSPropertyAPIFilter", converter: "ConvertFilterOperations", interpolable: true, + field_template: "storage_only", + type_name: "StyleFilterData", + field_group: "rare-non-inherited", + default_value: "DataPersistent<StyleFilterData>()", + wrapper_pointer_name: "DataPersistent", + include_paths: ["core/style/StyleFilterData.h"], }, { name: "flex-basis", @@ -2529,6 +2551,10 @@ name_for_methods: "TextDecoration", runtime_flag: "CSS3TextDecorations", type_name: "TextDecoration", + field_template: "storage_only", + field_size: 4, + default_value: "TextDecoration::kNone", + field_group: "visual", }, { name: "text-decoration-skip", @@ -2665,6 +2691,11 @@ interpolable: true, keywords: ["none"], typedom_types: ["Transform"], + field_template: "storage_only", + type_name: "TransformOperations", + field_group: "rare-non-inherited->transform", + default_value: "EmptyTransformOperations()", + include_paths: ["platform/transforms/TransformOperations.h"] }, { name: "transform-box",
diff --git a/third_party/WebKit/Source/core/css/ComputedStyleDiffFunctions.json5 b/third_party/WebKit/Source/core/css/ComputedStyleDiffFunctions.json5 index 550baf0..3be5ad7 100644 --- a/third_party/WebKit/Source/core/css/ComputedStyleDiffFunctions.json5 +++ b/third_party/WebKit/Source/core/css/ComputedStyleDiffFunctions.json5
@@ -96,7 +96,7 @@ }, { method: "HasFilters()", - field_dependencies: ["Filter"] + field_dependencies: ["filter"] }, { method: "FontInternal().LoadingCustomFonts()", @@ -324,13 +324,13 @@ }, { name: "DiffTransformData", - fields_to_diff: ["TransformOperations", "translate", "rotate", + fields_to_diff: ["transform", "translate", "rotate", "scale", "offset-path", "offset-rotate", "transform-origin", "offset-position", "offset-anchor", "offset-distance"], }, { name: "UpdatePropertySpecificDifferencesTransform", - fields_to_diff: ["TransformOperations", "translate", "rotate", + fields_to_diff: ["transform", "translate", "rotate", "scale", "offset-path", "offset-rotate", "transform-origin", "offset-position", "offset-anchor", "offset-distance", "perspective", "perspective-origin"], @@ -340,7 +340,7 @@ // while hasTransform() differs, as it checks a number of conditions aside // from just the matrix, including but not limited to animation state. method: "HasTransform()", - field_dependencies: ["TransformOperations", "offset-position", + field_dependencies: ["transform", "offset-position", "HasCurrentTransformAnimation", "translate", "rotate", "scale"] }, @@ -352,7 +352,7 @@ }, { name: "UpdatePropertySpecificDifferencesFilter", - fields_to_diff: ["Filter"], + fields_to_diff: ["filter"], predicates_to_test: [ { predicate: "a.ReflectionDataEquivalent(b)", @@ -379,11 +379,11 @@ }, { name: "UpdatePropertySpecificDifferencesBackdropFilter", - fields_to_diff: ["BackdropFilter"], + fields_to_diff: ["backdrop-filter"], }, { name: "UpdatePropertySpecificDifferencesTextDecorationOrColor", - fields_to_diff: ["color", "VisitedLinkColor", "TextDecoration", + fields_to_diff: ["color", "VisitedLinkColor", "text-decoration-line", "text-decoration-style", "text-decoration-color", "VisitedLinkTextDecorationColor", "TextEmphasisFill", "text-underline-position", "text-decoration-skip", "AppliedTextDecorations"],
diff --git a/third_party/WebKit/Source/core/css/ComputedStyleExtraFields.json5 b/third_party/WebKit/Source/core/css/ComputedStyleExtraFields.json5 index 27b246f13..3386f60 100644 --- a/third_party/WebKit/Source/core/css/ComputedStyleExtraFields.json5 +++ b/third_party/WebKit/Source/core/css/ComputedStyleExtraFields.json5
@@ -221,22 +221,6 @@ field_group: "background", }, { - name: "BackgroundColor", - field_template: "storage_only", - include_paths: ["core/css/StyleColor.h"], - type_name: "StyleColor", - default_value: "StyleColor(Color::kTransparent)", - field_group: "background", - }, - { - name: "TextDecoration", - field_template: "storage_only", - type_name: "TextDecoration", - field_size: 4, - default_value: "TextDecoration::kNone", - field_group: "visual", - }, - { name: "HasAutoClip", field_template: "storage_only", type_name: "bool", @@ -260,15 +244,6 @@ default_value: "Font()", }, { - name: "color", - inherited: true, - field_template: "storage_only", - include_paths: ["platform/graphics/Color.h"], - type_name: "Color", - field_group: "inherited", - default_value: "Color::kBlack", - }, - { name: "VisitedLinkColor", inherited: true, field_template: "external", @@ -544,24 +519,6 @@ default_value: "FillLayer(kMaskFillLayer, true)", }, { - name: "Filter", - field_template: "storage_only", - type_name: "StyleFilterData", - field_group: "rare-non-inherited", - default_value: "DataPersistent<StyleFilterData>()", - wrapper_pointer_name: "DataPersistent", - include_paths: ["core/style/StyleFilterData.h"], - }, - { - name: "BackdropFilter", - field_template: "storage_only", - type_name: "StyleFilterData", - field_group: "rare-non-inherited", - default_value: "DataPersistent<StyleFilterData>()", - wrapper_pointer_name: "DataPersistent", - include_paths: ["core/style/StyleFilterData.h"], - }, - { name: "CounterDirectives", field_template: "storage_only", type_name: "CounterDirectiveMap", @@ -866,14 +823,6 @@ default_value: "true", }, { - name: "TransformOperations", - field_template: "storage_only", - type_name: "TransformOperations", - field_group: "rare-non-inherited->transform", - default_value: "EmptyTransformOperations()", - include_paths: ["platform/transforms/TransformOperations.h"] - }, - { name: "NamedGridColumnLines", field_template: "external", type_name: "NamedGridLinesMap",
diff --git a/third_party/WebKit/Source/core/css/RemoteFontFaceSource.cpp b/third_party/WebKit/Source/core/css/RemoteFontFaceSource.cpp index 0997f56..cb38396 100644 --- a/third_party/WebKit/Source/core/css/RemoteFontFaceSource.cpp +++ b/third_party/WebKit/Source/core/css/RemoteFontFaceSource.cpp
@@ -28,7 +28,7 @@ bool IsEffectiveConnectionTypeSlowFor(Document* document) { WebEffectiveConnectionType type = - document->GetFrame()->Loader().Client()->GetEffectiveConnectionType(); + document->GetFrame()->Client()->GetEffectiveConnectionType(); WebEffectiveConnectionType threshold_type = WebEffectiveConnectionType::kTypeUnknown;
diff --git a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp index 07710b2..0f34dd00 100644 --- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp +++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
@@ -781,7 +781,8 @@ static CSSCustomIdentValue* ConsumeCustomIdentForGridLine( CSSParserTokenRange& range) { - if (range.Peek().Id() == CSSValueAuto || range.Peek().Id() == CSSValueSpan) + if (range.Peek().Id() == CSSValueAuto || range.Peek().Id() == CSSValueSpan || + range.Peek().Id() == CSSValueDefault) return nullptr; return ConsumeCustomIdent(range); }
diff --git a/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp b/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp index d42656d..24e8241 100644 --- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp +++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp
@@ -1446,11 +1446,11 @@ return nullptr; } +// https://drafts.csswg.org/css-values-4/#css-wide-keywords bool IsCSSWideKeyword(StringView keyword) { return EqualIgnoringASCIICase(keyword, "initial") || EqualIgnoringASCIICase(keyword, "inherit") || - EqualIgnoringASCIICase(keyword, "unset") || - EqualIgnoringASCIICase(keyword, "default"); + EqualIgnoringASCIICase(keyword, "unset"); } // https://drafts.csswg.org/css-shapes-1/#typedef-shape-box
diff --git a/third_party/WebKit/Source/core/css/properties/CSSPropertyFontUtils.cpp b/third_party/WebKit/Source/core/css/properties/CSSPropertyFontUtils.cpp index 0b223e2..e9b9c59 100644 --- a/third_party/WebKit/Source/core/css/properties/CSSPropertyFontUtils.cpp +++ b/third_party/WebKit/Source/core/css/properties/CSSPropertyFontUtils.cpp
@@ -88,8 +88,10 @@ builder.Append(range.ConsumeIncludingWhitespace().Value()); } if (!added_space && - CSSPropertyParserHelpers::IsCSSWideKeyword(first_token.Value())) + (CSSPropertyParserHelpers::IsCSSWideKeyword(first_token.Value()) || + EqualIgnoringASCIICase(first_token.Value(), "default"))) { return String(); + } return builder.ToString(); }
diff --git a/third_party/WebKit/Source/core/dom/Document.cpp b/third_party/WebKit/Source/core/dom/Document.cpp index e2acdf3d..49fc092 100644 --- a/third_party/WebKit/Source/core/dom/Document.cpp +++ b/third_party/WebKit/Source/core/dom/Document.cpp
@@ -1545,7 +1545,7 @@ if (!frame_ || old_title == title_) return; - frame_->Loader().Client()->DispatchDidReceiveTitle(title_); + frame_->Client()->DispatchDidReceiveTitle(title_); } void Document::setTitle(const String& title) { @@ -2591,11 +2591,8 @@ GetPage()->DocumentDetached(this); probe::documentDetached(this); - if (frame_->Loader().Client()->GetSharedWorkerRepositoryClient()) - frame_->Loader() - .Client() - ->GetSharedWorkerRepositoryClient() - ->DocumentDetached(this); + if (frame_->Client()->GetSharedWorkerRepositoryClient()) + frame_->Client()->GetSharedWorkerRepositoryClient()->DocumentDetached(this); // FIXME: consider using SuspendableObject. if (scripted_animation_controller_) @@ -2849,9 +2846,9 @@ frame_->Loader().StopAllLoaders(); // PlzNavigate: navigations handled by the client should also be // cancelled. - if (frame_->Loader().Client() && + if (frame_->Client() && frame_->GetSettings()->GetBrowserSideNavigationEnabled()) { - frame_->Loader().Client()->AbortClientNavigation(); + frame_->Client()->AbortClientNavigation(); } } } @@ -2976,7 +2973,7 @@ void Document::WillInsertBody() { if (GetFrame()) - GetFrame()->Loader().Client()->DispatchWillInsertBody(); + GetFrame()->Client()->DispatchWillInsertBody(); // If we get to the <body> try to resume commits since we should have content // to paint now. // TODO(esprehn): Is this really optimal? We might start producing frames @@ -3078,7 +3075,7 @@ this->domWindow()->DocumentWasClosed(); if (GetFrame()) { - GetFrame()->Loader().Client()->DispatchDidHandleOnloadEvents(); + GetFrame()->Client()->DispatchDidHandleOnloadEvents(); Loader()->GetApplicationCacheHost()->StopDeferringEvents(); } @@ -5991,7 +5988,7 @@ GetSecurityOrigin()->SetUniqueOriginIsPotentiallyTrustworthy( stand_in_origin->IsPotentiallyTrustworthy()); if (GetFrame()) - GetFrame()->Loader().Client()->DidUpdateToUniqueOrigin(); + GetFrame()->Client()->DidUpdateToUniqueOrigin(); } } @@ -6741,7 +6738,7 @@ // blockage. SetInsecureRequestPolicy(GetInsecureRequestPolicy() | policy); if (GetFrame()) - GetFrame()->Loader().Client()->DidEnforceInsecureRequestPolicy( + GetFrame()->Client()->DidEnforceInsecureRequestPolicy( GetInsecureRequestPolicy()); }
diff --git a/third_party/WebKit/Source/core/exported/WebHelperPluginImpl.cpp b/third_party/WebKit/Source/core/exported/WebHelperPluginImpl.cpp index 5b669f1..f5410f8 100644 --- a/third_party/WebKit/Source/core/exported/WebHelperPluginImpl.cpp +++ b/third_party/WebKit/Source/core/exported/WebHelperPluginImpl.cpp
@@ -34,7 +34,6 @@ #include "core/frame/LocalFrameClient.h" #include "core/frame/WebLocalFrameBase.h" #include "core/html/HTMLObjectElement.h" -#include "core/loader/FrameLoader.h" #include "public/web/WebPlugin.h" namespace blink { @@ -56,7 +55,7 @@ bool WebHelperPluginImpl::Initialize(const String& plugin_type, WebLocalFrameBase* frame) { DCHECK(!object_element_ && !plugin_container_); - if (!frame->GetFrame()->Loader().Client()) + if (!frame->GetFrame()->Client()) return false; object_element_ = @@ -64,8 +63,8 @@ Vector<String> attribute_names; Vector<String> attribute_values; DCHECK(frame->GetFrame()->GetDocument()->Url().IsValid()); - plugin_container_ = ToWebPluginContainerBase( - frame->GetFrame()->Loader().Client()->CreatePlugin( + plugin_container_ = + ToWebPluginContainerBase(frame->GetFrame()->Client()->CreatePlugin( *object_element_, frame->GetFrame()->GetDocument()->Url(), attribute_names, attribute_values, plugin_type, false, LocalFrameClient::kAllowDetachedPlugin));
diff --git a/third_party/WebKit/Source/core/html/HTMLAnchorElement.cpp b/third_party/WebKit/Source/core/html/HTMLAnchorElement.cpp index af4632e..3c3ab9f1 100644 --- a/third_party/WebKit/Source/core/html/HTMLAnchorElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLAnchorElement.cpp
@@ -366,9 +366,8 @@ request.SetRequestContext(WebURLRequest::kRequestContextDownload); request.SetRequestorOrigin(SecurityOrigin::Create(GetDocument().Url())); - frame->Loader().Client()->LoadURLExternally( - request, kNavigationPolicyDownload, FastGetAttribute(downloadAttr), - false); + frame->Client()->LoadURLExternally(request, kNavigationPolicyDownload, + FastGetAttribute(downloadAttr), false); } else { request.SetRequestContext(WebURLRequest::kRequestContextHyperlink); FrameLoadRequest frame_request(&GetDocument(), request,
diff --git a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp index 7c9a37f..eb2b86b 100644 --- a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
@@ -316,8 +316,7 @@ // The LocalFrameClient might block creation of a new WebGL context despite // the page settings; in particular, if WebGL contexts were lost one or more // times via the GL_ARB_robustness extension. - if (!frame->Loader().Client()->AllowWebGL(settings && - settings->GetWebGLEnabled())) + if (!frame->Client()->AllowWebGL(settings && settings->GetWebGLEnabled())) return false; return true; }
diff --git a/third_party/WebKit/Source/core/html/HTMLFormElement.cpp b/third_party/WebKit/Source/core/html/HTMLFormElement.cpp index f198a7e..6b9eefe 100644 --- a/third_party/WebKit/Source/core/html/HTMLFormElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLFormElement.cpp
@@ -54,7 +54,6 @@ #include "core/inspector/ConsoleMessage.h" #include "core/layout/LayoutObject.h" #include "core/loader/FormSubmission.h" -#include "core/loader/FrameLoader.h" #include "core/loader/MixedContentChecker.h" #include "core/loader/NavigationScheduler.h" #include "platform/wtf/AutoReset.h" @@ -339,7 +338,7 @@ bool should_submit; { AutoReset<bool> submit_event_handler_scope(&in_user_js_submit_event_, true); - frame->Loader().Client()->DispatchWillSendSubmitEvent(this); + frame->Client()->DispatchWillSendSubmitEvent(this); should_submit = DispatchEvent(Event::CreateCancelableBubble(EventTypeNames::submit)) == DispatchEventResult::kNotCanceled;
diff --git a/third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp b/third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp index b638cda..f307a71 100644 --- a/third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp
@@ -594,9 +594,9 @@ LocalFrameClient::DetachedPluginPolicy policy = require_layout_object ? LocalFrameClient::kFailOnDetachedPlugin : LocalFrameClient::kAllowDetachedPlugin; - PluginView* plugin = frame->Loader().Client()->CreatePlugin( - *this, url, param_names, param_values, mime_type, load_manually, - policy); + PluginView* plugin = + frame->Client()->CreatePlugin(*this, url, param_names, param_values, + mime_type, load_manually, policy); if (!plugin) { if (!layout_item.IsNull() && !layout_item.ShowsUnavailablePluginIndicator()) {
diff --git a/third_party/WebKit/Source/core/style/ComputedStyle.h b/third_party/WebKit/Source/core/style/ComputedStyle.h index 5e37481..c553c43 100644 --- a/third_party/WebKit/Source/core/style/ComputedStyle.h +++ b/third_party/WebKit/Source/core/style/ComputedStyle.h
@@ -694,11 +694,9 @@ static EmptyTransformOperations InitialTransform() { return EmptyTransformOperations(); } - const TransformOperations& Transform() const { - return TransformOperationsInternal(); - } + const TransformOperations& Transform() const { return TransformInternal(); } void SetTransform(const TransformOperations& ops) { - SetTransformOperationsInternal(ops); + SetTransformInternal(ops); } // -webkit-transform-origin-x @@ -2080,7 +2078,7 @@ // Filter/transform utility functions. bool Has3DTransform() const { - return TransformOperationsInternal().Has3DOperation() || + return TransformInternal().Has3DOperation() || (Translate() && Translate()->Z() != 0) || (Rotate() && (Rotate()->X() != 0 || Rotate()->Y() != 0)) || (Scale() && Scale()->Z() != 1); @@ -2090,7 +2088,7 @@ HasCurrentTransformAnimation() || Translate() || Rotate() || Scale(); } bool HasTransformOperations() const { - return !TransformOperationsInternal().Operations().IsEmpty(); + return !TransformInternal().Operations().IsEmpty(); } ETransformStyle3D UsedTransformStyle3D() const { return HasGroupingProperty() ? ETransformStyle3D::kFlat
diff --git a/third_party/WebKit/Source/modules/BUILD.gn b/third_party/WebKit/Source/modules/BUILD.gn index 9383f6e..33d895f1 100644 --- a/third_party/WebKit/Source/modules/BUILD.gn +++ b/third_party/WebKit/Source/modules/BUILD.gn
@@ -302,6 +302,7 @@ "remoteplayback/RemotePlaybackTest.cpp", "serviceworkers/ServiceWorkerContainerTest.cpp", "serviceworkers/WebEmbeddedWorkerImplTest.cpp", + "wake_lock/ScreenWakeLockTest.cpp", "webaudio/AudioBasicProcessorHandlerTest.cpp", "webaudio/AudioContextTest.cpp", "webaudio/AudioWorkletGlobalScopeTest.cpp",
diff --git a/third_party/WebKit/Source/modules/wake_lock/DEPS b/third_party/WebKit/Source/modules/wake_lock/DEPS index a9aaab1..7a913447 100644 --- a/third_party/WebKit/Source/modules/wake_lock/DEPS +++ b/third_party/WebKit/Source/modules/wake_lock/DEPS
@@ -1,3 +1,4 @@ include_rules = [ "+device/wake_lock/public/interfaces", + "+mojo/public/cpp/bindings" ]
diff --git a/third_party/WebKit/Source/web/tests/ScreenWakeLockTest.cpp b/third_party/WebKit/Source/modules/wake_lock/ScreenWakeLockTest.cpp similarity index 100% rename from third_party/WebKit/Source/web/tests/ScreenWakeLockTest.cpp rename to third_party/WebKit/Source/modules/wake_lock/ScreenWakeLockTest.cpp
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp index f96ef511..79fb154c 100644 --- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp +++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
@@ -2519,9 +2519,10 @@ "invalid target"); return; } - if (buffer && !buffer->Validate(ContextGroup(), this)) { + if (buffer && (!buffer->HasEverBeenBound() || + !buffer->Validate(ContextGroup(), this))) { SynthesizeGLError(GL_INVALID_OPERATION, "framebufferRenderbuffer", - "no buffer or buffer not from this context"); + "buffer never bound or buffer not from this context"); return; } // Don't allow the default framebuffer to be mutated; all current
diff --git a/third_party/WebKit/Source/platform/BUILD.gn b/third_party/WebKit/Source/platform/BUILD.gn index aab0c50..c806f30 100644 --- a/third_party/WebKit/Source/platform/BUILD.gn +++ b/third_party/WebKit/Source/platform/BUILD.gn
@@ -2249,6 +2249,12 @@ "graphics/test/FakeWebGraphicsContext3DProvider.h", "graphics/test/MockImageDecoder.h", + # Tests migrated from the web/tests directory. + "TimerPerfTest.cpp", + "exported/WebImageTest.cpp", + "exported/WebURLRequestTest.cpp", + "exported/WebURLResponseTest.cpp", + # TODO(toyoshim): Remove Platform dependency and move to loader/BUILD.gn "loader/fetch/ResourceResponseTest.cpp",
diff --git a/third_party/WebKit/Source/web/tests/TimerPerfTest.cpp b/third_party/WebKit/Source/platform/TimerPerfTest.cpp similarity index 100% rename from third_party/WebKit/Source/web/tests/TimerPerfTest.cpp rename to third_party/WebKit/Source/platform/TimerPerfTest.cpp
diff --git a/third_party/WebKit/Source/web/tests/WebImageTest.cpp b/third_party/WebKit/Source/platform/exported/WebImageTest.cpp similarity index 100% rename from third_party/WebKit/Source/web/tests/WebImageTest.cpp rename to third_party/WebKit/Source/platform/exported/WebImageTest.cpp
diff --git a/third_party/WebKit/Source/web/tests/WebURLRequestTest.cpp b/third_party/WebKit/Source/platform/exported/WebURLRequestTest.cpp similarity index 100% rename from third_party/WebKit/Source/web/tests/WebURLRequestTest.cpp rename to third_party/WebKit/Source/platform/exported/WebURLRequestTest.cpp
diff --git a/third_party/WebKit/Source/web/tests/WebURLResponseTest.cpp b/third_party/WebKit/Source/platform/exported/WebURLResponseTest.cpp similarity index 100% rename from third_party/WebKit/Source/web/tests/WebURLResponseTest.cpp rename to third_party/WebKit/Source/platform/exported/WebURLResponseTest.cpp
diff --git a/third_party/WebKit/Source/web/BUILD.gn b/third_party/WebKit/Source/web/BUILD.gn index 909e5b0..4b88700a 100644 --- a/third_party/WebKit/Source/web/BUILD.gn +++ b/third_party/WebKit/Source/web/BUILD.gn
@@ -95,19 +95,14 @@ "tests/PrerenderingTest.cpp", "tests/ProgrammaticScrollTest.cpp", "tests/RunAllTests.cpp", - "tests/ScreenWakeLockTest.cpp", "tests/ScrollMetricsTest.cpp", "tests/SmoothScrollTest.cpp", "tests/SpinLockTest.cpp", - "tests/TimerPerfTest.cpp", "tests/VirtualTimeTest.cpp", "tests/WebDocumentSubresourceFilterTest.cpp", "tests/WebFrameSerializerSanitizationTest.cpp", "tests/WebFrameTest.cpp", - "tests/WebImageTest.cpp", "tests/WebMeaningfulLayoutsTest.cpp", - "tests/WebURLRequestTest.cpp", - "tests/WebURLResponseTest.cpp", "tests/scheduler/ActiveConnectionThrottlingTest.cpp", "tests/scheduler/FrameThrottlingTest.cpp", "tests/scheduler/ThrottlingTest.cpp",
diff --git a/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp b/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp index 647b8651..856f66c 100644 --- a/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp +++ b/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp
@@ -1763,7 +1763,7 @@ } WebLocalFrameImpl* WebLocalFrameImpl::FromFrame(LocalFrame& frame) { - LocalFrameClient* client = frame.Loader().Client(); + LocalFrameClient* client = frame.Client(); if (!client || !client->IsLocalFrameClientImpl()) return nullptr; return ToWebLocalFrameImpl(ToLocalFrameClientImpl(client)->GetWebFrame());
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 8ed06d98..f47f58a 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -22022,7 +22022,7 @@ from previous Chrome versions. --> - <summary>Chrome flags that lead to chrome restart on ChromeOS.</summary> + <summary>Chrome flags that lead to Chrome restart on Chrome OS.</summary> <int value="-2146613579" label="V8Future:disabled"/> <int value="-2143961262" label="D3DVsync:disabled"/> <int value="-2143328006" @@ -22071,6 +22071,7 @@ <int value="-2035126988" label="enabled-new-style-notification"/> <int value="-2033225430" label="NTPMostLikelyFaviconsFromServer:disabled"/> <int value="-2029912304" label="StaleWhileRevalidate2:enabled"/> + <int value="-2028232016" label="spurious-power-button-lid-angle-change"/> <int value="-2025367104" label="enable-material-design-ntp"/> <int value="-2020721975" label="smart-virtual-keyboard"/> <int value="-2020024440" label="scroll-end-effect"/> @@ -22134,6 +22135,7 @@ <int value="-1872867546" label="EnumerateAudioDevices:disabled"/> <int value="-1870961970" label="enable-filemanager-mtp"/> <int value="-1869845022" label="force-show-update-menu-item"/> + <int value="-1868978829" label="spurious-power-button-accel-count"/> <int value="-1867382602" label="WebRTC-H264WithOpenH264FFmpeg:enabled"/> <int value="-1867342522" label="MaterialDesignHistory:enabled"/> <int value="-1861814223" label="MidiManagerDynamicInstantiation:enabled"/> @@ -22990,6 +22992,7 @@ <int value="1211284676" label="V8NoTurbo:enabled"/> <int value="1214455758" label="VideoRotateToFullscreen:disabled"/> <int value="1215531732" label="OmniboxUIExperiments:disabled"/> + <int value="1217907443" label="spurious-power-button-keyboard-accel"/> <int value="1219628795" label="PrintScaling:disabled"/> <int value="1219826373" label="ServiceWorkerNavigationPreload:enabled"/> <int value="1220171692" label="SpeculativeLaunchServiceWorker:enabled"/> @@ -23005,6 +23008,7 @@ <int value="1250071868" label="disable-timezone-tracking-option"/> <int value="1253698118" label="ash-disable-stable-overview-order"/> <int value="1257980502" label="disable-accelerated-video-decode"/> + <int value="1260186484" label="spurious-power-button-screen-accel"/> <int value="1268470658" label="disable-android-password-link"/> <int value="1269940659" label="EnumerateAudioDevices:enabled"/> <int value="1269952439" label="AndroidAIAFetching:disabled"/> @@ -23118,6 +23122,7 @@ <int value="1658644418" label="disable-app-list-voice-search"/> <int value="1661925474" label="silent-debugger-extension-api"/> <int value="1664401033" label="ColorCorrectRendering:enabled"/> + <int value="1665349789" label="spurious-power-button-window"/> <int value="1668611601" label="enable-encrypted-media"/> <int value="1673427566" label="ChromeHomeExpandButton:disabled"/> <int value="1689123607" label="enable-app-link"/>
diff --git a/ui/views/animation/test/test_ink_drop_delegate.cc b/ui/views/animation/test/test_ink_drop_delegate.cc deleted file mode 100644 index 1618d5f..0000000 --- a/ui/views/animation/test/test_ink_drop_delegate.cc +++ /dev/null
@@ -1,35 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "ui/views/animation/test/test_ink_drop_delegate.h" - -namespace views { -namespace test { - -TestInkDropDelegate::TestInkDropDelegate() {} - -TestInkDropDelegate::~TestInkDropDelegate() {} - -void TestInkDropDelegate::OnAction(InkDropState state) { - ink_drop_.AnimateToState(state); -} - -void TestInkDropDelegate::SnapToActivated() { - ink_drop_.SnapToActivated(); -} - -void TestInkDropDelegate::SetHovered(bool is_hovered) { - ink_drop_.SetHovered(is_hovered); -} - -InkDropState TestInkDropDelegate::GetTargetInkDropState() const { - return ink_drop_.GetTargetInkDropState(); -} - -InkDrop* TestInkDropDelegate::GetInkDrop() { - return &ink_drop_; -} - -} // namespace test -} // namespace views
diff --git a/ui/views/animation/test/test_ink_drop_delegate.h b/ui/views/animation/test/test_ink_drop_delegate.h deleted file mode 100644 index ce841560..0000000 --- a/ui/views/animation/test/test_ink_drop_delegate.h +++ /dev/null
@@ -1,38 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef UI_VIEWS_ANIMATION_TEST_TEST_INK_DROP_DELEGATE_H_ -#define UI_VIEWS_ANIMATION_TEST_TEST_INK_DROP_DELEGATE_H_ - -#include "base/macros.h" -#include "ui/views/animation/ink_drop_delegate.h" -#include "ui/views/animation/test/test_ink_drop.h" - -namespace views { -namespace test { - -class TestInkDropDelegate : public InkDropDelegate { - public: - TestInkDropDelegate(); - ~TestInkDropDelegate() override; - - bool is_hovered() const { return ink_drop_.is_hovered(); } - - // InkDropDelegate: - void OnAction(InkDropState state) override; - void SnapToActivated() override; - void SetHovered(bool is_hovered) override; - InkDropState GetTargetInkDropState() const override; - InkDrop* GetInkDrop() override; - - private: - TestInkDrop ink_drop_; - - DISALLOW_COPY_AND_ASSIGN(TestInkDropDelegate); -}; - -} // namespace test -} // namespace views - -#endif // UI_VIEWS_ANIMATION_TEST_TEST_INK_DROP_DELEGATE_H_